본문 바로가기

IT/Visual Basic

[강좌] Winhttp를 이용한 파싱 강좌, 파싱한걸 Listview에 출력해보자!

결과물 : 


안녕하세요? 이번은 Winhttp를 이용해 파싱한걸 Listview에 출력하는 강좌를 써보도록 하겠습니다.

 

막상 파싱 강좌는 있으나, 웹을 이용한 파싱은 없더군요.

 

곰탕재료푸(qjdlsp1541)님께서 파싱강좌가 없냐고 물으셔서, 제가 직접 써봅니다.

 

물론 많이 부족하고, 미약하나, 잘 봐주셨으면 합니다.

 

태클은 환영이니 , 언제든지 태클은 거셔도 상관없습니다. (태클을 걸어야, 실력이 늘어나는법이니까요)





네 상폭이님 말대로 Split을 활용하는것입니다. 당현 Split 사용법은

 

상폭이님이 말씀하신대로 Split(Split(소스,"앞글자")(1),"뒷글자")(0)

 

이런식으로 하긴하나, 배열함수를 이용해서, For을 Ubound 으로 돌려서, 할껍니다.



일단 프로젝트(P) - 참조 (N)을 눌러주세요! 


 

하나의 창이 떴다면, Mirosft WinHTTP Services, version 5.1을 체크하고.

 

확인을 눌러주세요.



 

그리고, Listview를 사용하기 위해, Microsoft Windows Common Controls 5.0을 체크합시다.

 

물론 Microsoft Windows Common Controls 6.0을 사용해도 되나, 전 XP스타일을 하기 위해 했을뿐.

 

Microsoft Windows Common Controls 6.0을 체크해도 상관없습니다.



자 위의 사진같이. Listview를 크게 디자인창에 놓습니다.

 

저는 Listview1을 lv로 이름을 바꾸고 사용하겠습니다.




Listview의 속성에 들어가서. View의 속성을 "3 - lvwReprot"로 바꿔줍니다.

그래야 리스트뷰의 헤더를 표시하게 할 수 있습니다.




그리고 폼에 다음과 같이 코딩합니다.




Dim http As New WinHttp.WinHttpRequest
Private Sub Form_Load()
lv.ColumnHeaders.Add , "순위", "순위", 500
lv.ColumnHeaders.Add , "곡명", "곡명", 2300
lv.ColumnHeaders.Add , "아티스트", "아티스트"
lv.ColumnHeaders.Add , "앨범", "앨범"

Call Mnetchart
End Sub


Dim http As New WinHttp.WinHttpRequest

 

http를 Winhttp를 참조하게 선언하시고.

listview에 헤더를 추가 해줍니다.

 

lv.ColumnHeaders.Add , "순위", "순위", 500

lv.ColumnHeaders.Add , 키값, 이름, 크기입니다.

 

Call Mnetchart

그리고 Mnetchart 라는 Function을 불러오게 했습니다.

 

저는 여기서, 모듈에 추가하지 않고 함수를 폼에 추가했습니다만.

물론 모듈에 추가하고 해도 됩니다.

 

저는 Mnet을 파싱할껍니다. Mnet의 순위를 말이지요.

 

그럴려면 Mnet의 홈페이지에 접속해야겠죠?

http://music.mnet.com/Chart/Chart_RealUp.asp

 

자, 홈페이지로 접속합니다.

 



 그럼  이제, 소스를 봐야겠죠. 마우스 오른쪽  버튼 누른뒤.

 

소스 보기 (V) 를 눌러 html의 소스를 봅니다!



html의 소스창이 열렸으면 검색을 해줘야죠. 싸이트 맨위에 있는 "BTD (Before The Dawn)"이라고 적혀있으니

일부분을 검색 해줍시다. 그러면 . <a href="javascript:fnListenSingle2('2235444');" title="BTD

 

위의 소스처럼 뜰텐데요. javascript:fnListenSingle2을 짜를겁니다.

 

일단 변수를 선언해줍시다. Function 사용방법은 다들 아실꺼라고 믿습니다.



자 , Temp는 Winhttp를 이용해서, 내용을 전부 담을것을 선언합니다.

title() 의 함수는  배열함수로, 제목을 모두 담을것을 선언하는거겠죠.

title() 의 함수는  배열함수로, 가수(아티스트)을(를) 모두 담을것을 선언하는거겠죠.

title() 의 함수는  배열함수로, 앨범을 모두 담을것을 선언하는거겠죠.



변수 선언했으면, Winhttp를 이용해 열어줍시다.

http.send는 전송 한뒤. http.WaitForResponse를 이용해 기다리라는거죠!

 


이제 각자, 제목과 가수(아티스트)와 앨범을 담습니다.

 

물론 전부 검색해야지요~ 일부로 좀 바로 자르지 않고 좀 멀리 짤랐습니다.

 

또 다시 짜르면 되니까요. for문을 이용해 이제 본격적으로 자르고 넣어볼시간이군요!



For i = 2 To UBound(title)

For문을 이용해 2부터 배열 title을 담은것까지, 돌립니다. 조건이 맞으면 종료되겠지요


    title(i) = Split(Split(title(i), """>")(1), "</a>")(0)

 

제목을 짤라서 담습니다. 아까

<a href="javascript:fnListenSingle2('2235444');" title="BTD (Before The Dawn)">BTD (Before The Dawn)</a></div>

이부분의 javascript:fnListenSingle2을 잘랐죠.

그럼 거길 포함한 뒤는 자 잘라서 담긴겁니다. 그럼. 이제. 뒷부분의 "> 부터 </a>의 부분을 담아야하니.

다시 두번을 짜릅니다. 그럼 ">의 </a>의 사이가 출력 되겠지요. 그럼 제목은 다 한겁니다.

 

아래도 마찬가지로 짜릅니다.


    Singer(i) = Split(Split(Singer(i), """>")(1), "</a>")(0)
    Album(i) = Split(Split(Album(i), """>")(1), "</a>")(0)
   

 Set Item = lv.ListItems.Add()

이 부분은 item을 lv.ListItems.Add()로 지정하는겁니다!


    Item.Text = i - 1 & "위"

이제 순위를 담습니다. 아까 본 헤더의 맨 처음 부분입니다.

i - 1 을 하는부분은 맨처음부분이. '추천' 이라고 써있는데. 이것까지 포함해서.

1위라고 출력 되야하는것이 2위라고 출력되더군요 그래서 1만큼 깍아서, 출력하게 했습니다.


    Item.SubItems(1) = title(i)  제목을 담습니다.
    Item.SubItems(2) = Singer(i)   가수(아티스트)를 담습니다.
    Item.SubItems(3) = Album(i)  앨범을 담습니다.

    DoEvents

이제 DoEvents로 랙을 방지한뒤.
Next i
Next i 로 For문을 종료하면 끝입니다.

 

그리고 Function을 종료하야겠죠?

End Function 을 써주고 실행시켜보면!




본 포스팅은 2011/02/04 15:33 에 작성되었으며, 2011/10/10 20:02에 이동되었습니다.


*PS.예전 게시물이며, 최근에 작동여부를 확인하지않았으므로, 다시처음부터 응용해나가며 공부해나갑시다.