해당글은 중급이상코스이며, 중급이상 vb6 상식을 요합니다.
2020/10/12 - [개발노트/vb6.0] - [Vb6.0/중급] Winhttp 를 사용하여 네이버 실시간검색어 순위를 파싱해보기 - 1
[Vb6.0/중급] Winhttp 를 사용하여 네이버 실시간검색어 순위를 파싱해보기 - 1
이번 포스팅에서는 네이버 실시간 검색어 순위를 파싱하여 리스트에 표시하는걸 해볼텐데요. 우선 페이지에서 불러오는 값을 찾아야합니다. HttpAnalyzer 나 wireshark 등 통신을 캡쳐하는 프로그램��
makekimpro.tistory.com
위의 강좌에서 받아온 네이버 실시간검색어의 값들은 아래와 같습니다.
● Request URL
https://apis.naver.com/mobile_main/srchrank/srchrank?frm=main&ag=all&gr=0&ma=-2&si=-2&en=-2&sp=-2
● Response Headers
access-control-allow-origin: *
access-control-expose-headers: *
cache-control: no-store
content-encoding: gzip
content-type: application/json; charset=UTF-8
date: Sun, 11 Oct 2020 18:10:51 GMT
server: nginx
status: 200
vary: Accept-Encoding
● Request Headers
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
origin: https://www.naver.com
referer: https://www.naver.com/
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
이제 위의 값들로 리스트에 네이버 실시간 검색어 순위를 받아오겠습니다.
우선 프로젝트에서 winhttp 를 참조해줘야합니다.
상단의 이미지와 같이 vb6.0 에서 프로젝트->참조 로 이동합니다.
참조창에서 밑으로 리스트를 내리다 보면
" Microsoft WinHttp Services " 가 있을거에요.
해당 Winhttp 를 옆에 체크박스를 체크하여 참조하여 줍니다.
그럼 이제 Winhttp 를 사용할 준비가 되었습니다.
코드를 작성해볼까요? 네이버 실시간검색어순위는 Winhttp 에서 "GET" 통신을 사용하면 됩니다.
Winhttp 에는 대표적으로 "GET" 과 "POST" 가 있는데요,
GET 은 값을 그냥 받아오는. 즉 페이지를 불러오는 통신이구
POST 는 특정값을 페이지에 보내어 응답을 받아오는 통신입니다.
네이버 실시간 검색어 순위를 받아오기위해서는 GET 통신을 사용할겁니다.
자 이제 코드를 작성해볼까요?
타이머에 넣어서 통신해도 되고, 버튼에 넣어서 통신해도 됩니다.
저는 버튼에 넣어서 클릭시 통신하도록 만들어 보겠습니다.
Command 버튼을 생성한후 더블클릭하여 버튼을 클릭했을때 코딩을 작성하도록 하겠습니다.
우선 Winhttp 를 참조를 해야겠죠.
Dim Naverhttp As New Winhttp.WinHttpRequest
위와 같이 Naverhttp 라는 함수에 WinhttpRequest 를 적용시켜서 통신을 해주려합니다.
"Naverhttp" 는 제가 임의로 사용한 문자입니다. 원하시는 문자로 변경하셔도 상관없습니다.
이제 Winhttp가 참조된 Naverhttp 함수를 사용해서 리스트에 나타내어 보도록 할게요.
Naverhttp 함수에 위에서 받아온 값들로 통신을 진행하겠습니다.
예제는 아래와 같습니다.
Private Sub Command1_Click()
Dim Naverhttp As New WinHttp.WinHttpRequest
Naverhttp.Open "GET", "https://apis.naver.com/mobile_main/srchrank/srchrank?frm=main&ag=all&gr=0&ma=-2&si=-2&en=-2&sp=-2", False
Naverhttp.Send
Naverhttp.WaitForResponse
End Sub
원래는 Request Headers 를 전부 Naverhttp 함수에 포함해서 보내줘야 통신이 제대로 이루어지지만,
이부분은 문자 인코딩이 필요한데, 위의 네이버 실시간 검색어 파싱에는 인코딩이 필요없어서
그냥 Request Headers를 제외하고 통신하겠습니다.
Request Headers 전송방법
accept: application/json, text/plain, */* 는 아래와 같이 보냅니다.
Naverhttp.SetRequestHeader "accept", "application/json, text/plain, */*"
위처럼 Naverhttp 에 통신할 값을 받아오면 아래와 같이 값이 응답됩니다.
Naverhttp.ResponseText
{"ts":"2020-10-12T03:46:00+0900","sm":"agallgr0mamsimenmspm","rop":[{"ag":"all"},{"gr":"00"},{"ma":"-2"},{"si":"-2"},{"en":"-2"},{"sp":"-2"}],"data":[{"rank":1,"keyword":"덮죽","keyword_synonyms":[]},{"rank":2,"keyword":"프랑스 포르투갈","keyword_synonyms":[]},{"rank":3,"keyword":"젊은 날의 초상","keyword_synonyms":[]},{"rank":4,"keyword":"임창정 힘든건사랑이아니다","keyword_synonyms":[]},{"rank":5,"keyword":"덮죽덮죽","keyword_synonyms":[]},{"rank":6,"keyword":"김세영","keyword_synonyms":[]},{"rank":7,"keyword":"코로나 1단계","keyword_synonyms":[]},{"rank":8,"keyword":"국가비","keyword_synonyms":[]},{"rank":9,"keyword":"족발의달인","keyword_synonyms":[]},{"rank":10,"keyword":"사회적 거리두기 1단계","keyword_synonyms":[]},{"rank":11,"keyword":"가짜사나이 2기 4화","keyword_synonyms":[]},{"rank":12,"keyword":"가짜사나이 2기","keyword_synonyms":[]},{"rank":13,"keyword":"UEFA 네이션스리그","keyword_synonyms":[]},{"rank":14,"keyword":"청년구직활동지원금","keyword_synonyms":[]},{"rank":15,"keyword":"롤드컵 8강","keyword_synonyms":[]},{"rank":16,"keyword":"잉글랜드 벨기에","keyword_synonyms":[]},{"rank":17,"keyword":"신의한수","keyword_synonyms":[]},{"rank":18,"keyword":"곽윤기","keyword_synonyms":[]},{"rank":19,"keyword":"캡사이신","keyword_synonyms":[]},{"rank":20,"keyword":"코인노래방","keyword_synonyms":[]}]}
규칙을 보면
"rank":1,"keyword":"덮죽덮죽"
"rank":2,"keyword":"덮죽"
"rank":3,"keyword":"잊혀진포탑"
이런식으로 rank 값에 순위가 나타내어지고,
keyword 값에 해당순위의 키워드가 나타내어 지는것을 확인할수 있습니다.
이제 StrGet 라는 함수와 Split 함수를 사용하여 파싱해보겠습니다.
우선 Split 는 기본함수로써, 추가를 요하지않습니다.
StrGet 만 추가하겠습니다. 코드는 아래와 같습니다.
Function StrGet(strWhole As String, strFind As String) As String
On Error Resume Next
Dim tmpArray() As String
tmpArray = Split(strWhole, strFind)
StrGet = UBound(tmpArray) - LBound(tmpArray)
End Function
StrGet 은 strWhole = 내용 , strFind = 내용에서 찾을단어.
내용에서 찾을단어가 몇개들어있는지 확인하는 함수입니다.
그럼 이제 for 문을 사용하여 리스트박스에 표현해보겠습니다.
예제는 아래와 같습니다.
Private Sub Command1_Click()
Dim Naverhttp As New WinHttp.WinHttpRequest
Naverhttp.Open "GET", "https://apis.naver.com/mobile_main/srchrank/srchrank?frm=main&ag=all&gr=0&ma=-2&si=-2&en=-2&sp=-2", False
Naverhttp.Send
Naverhttp.WaitForResponse
Dim ii As Integer
For ii = 1 To StrGet((Naverhttp.ResponseText), "rank")
List1.AddItem Split(Split(Naverhttp.ResponseText, """keyword"":""")(ii), """")(0)
Next ii
End Sub
코드를 작성한후 F5 를 눌러 실행한뒤 command1 버튼을 누르면
위와 같이 네이버 실시간 검색어 프로그램이 완성되었습니다~
해당 프로그램에 사용된 총 코드는 아래와 같습니다.
Function StrGet(strWhole As String, strFind As String) As String
On Error Resume Next
Dim tmpArray() As String
tmpArray = Split(strWhole, strFind)
StrGet = UBound(tmpArray) - LBound(tmpArray)
End Function
Private Sub Command1_Click()
Dim Naverhttp As New WinHttp.WinHttpRequest
Naverhttp.Open "GET", "https://apis.naver.com/mobile_main/srchrank/srchrank?frm=main&ag=all&gr=0&ma=-2&si=-2&en=-2&sp=-2", False
Naverhttp.Send
Naverhttp.WaitForResponse
Dim ii As Integer
For ii = 1 To StrGet((Naverhttp.ResponseText), "rank")
List1.AddItem Split(Split(Naverhttp.ResponseText, """keyword"":""")(ii), """")(0)
Next ii
End Sub
모르시는부분이 있다면 댓글 남겨주시면 친절하게 답변 드리겠습니다~
예제파일 필요하시면 댓글로 이메일 남겨주시면 프로젝트파일 보내드리겠습니다
감사합니다~
'개발노트 > vb6.0' 카테고리의 다른 글
[Vb6.0/중급] Winhttp 를 사용하여 네이버 실시간검색어 순위를 파싱해보기 - 1 (0) | 2020.10.12 |
---|---|
[VB6.0/초보] Msgbox 메세지박스 강좌 (0) | 2020.10.12 |