네이버에서는 다양한 API를 제공하고 있고, 또한 해당 API에 맞는 프로그래밍 언어별 예제가 있습니다.
그 중에는 [데이터랩]이라는 서비스의 API와 그 예제 또한 있습니다.
데이터랩은 특정 키워드에 대한 사용자가 설정한 기간 동안의 검색어 동향을 퍼센테이지(%)로 표현해주는 서비스입니다.
가령 지난 달의 키워드 조회수가 기간 중 가장 높았다면 지난 달의 조회수를 100으로 놓고 다른 기간의 조회수를 그 비율에 맞게 표시해주는 겁니다.
다음은 네이버 데이터랩에서 [파이썬] 키워드의 1년간 검색 동향을 월별로 표시한 결과입니다.
네이버 데이터랩 : 검색어트렌드
네이버 통합검색에서 검색된 검색어와 검색횟수를 기간별/연령별/성별로 조회할 수 있습니다.
datalab.naver.com
명확한 조회수가 아닌 비율로 표시한 결과값이 왜 필요할까 생각도 들지만.. 이 정보는 다양한 방면에서 이용되고 있는 것 같습니다.
물건을 판매하는 사람들은 자신들이 사용하는 키워드가 단발성인지, 계절성인지, 아니면 수시로 관심받는 키워드인지 확인하고 마케팅에 활용할 수도 있고,
블로그를 하는 사람들도 마찬가지로 해당 키워드가 이슈성인지, 계절성인지, 아니면 평소에도 적당한 조회수를 얻을 수 있는 키워드인지 분별하는데 활용할 수도 있습니다.
그리고 이런 데이터랩 결과를 API를 통해 이용할 수 있는데요.
다음은 네이버 데이터랩 API에서 제공하는 파이썬 예제입니다.
#-*- coding: utf-8 -*-
import os
import sys
import urllib.request
client_id = {클라이언트 아이디}
client_secret = {클라이언트 암호}
url = "https://openapi.naver.com/v1/datalab/search";
body = "{\"startDate\":\"2020-01-01\",\"endDate\":\"2020-12-31\",\"timeUnit\":\"month\",\"keywordGroups\":[{\"groupName\":\"파이썬\",\"keywords\":[\"파이썬\"]}],\"device\":\"mo\",\"ages\":[\"1\",\"2\"]}";
# https://redfox.tistory.com
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
request.add_header("Content-Type","application/json")
response = urllib.request.urlopen(request, data=body.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
위 코드를 동작시켜보면 위에 링크해둔 데이터랩 페이지 이용 결과와 동일한 값을 확인할 수 있습니다.
2020년 12월의 데이터가 100으로 가장 높고, 2020년 2월의 데이터가 약 53으로 가장 낮습니다.
{
"startDate":"2020-01-01",
"endDate":"2020-12-31",
"timeUnit":"month",
"results":
[{
"title":"파이썬","keywords":["파이썬"],
"data":
[
{"period":"2020-01-01","ratio":59.42483},
{"period":"2020-02-01","ratio":53.04248},
{"period":"2020-03-01","ratio":72.99346},
{"period":"2020-04-01","ratio":75.26797},
{"period":"2020-05-01","ratio":69.12745},
{"period":"2020-06-01","ratio":80.41176},
{"period":"2020-07-01","ratio":90.4183},
{"period":"2020-08-01","ratio":84.87254},
{"period":"2020-09-01","ratio":97.74183},
{"period":"2020-10-01","ratio":79.46405},
{"period":"2020-11-01","ratio":81.36274},
{"period":"2020-12-01","ratio":100}
]
}]
}
제 기준으로 한 가지 특이한 점이 있는데, 인터넷을 통해 결과값을 요청하는데 사용하는 모듈이 requests 모듈이 아닌 urllib 모듈을 사용한다는 것입니다.
리퀘스트 요청을 보내는 것은 requests만 사용할 줄 알기 때문에.. 다른 모듈을 사용하면 불편합니다.
그 모듈을 어떻게 써야 하는지 새롭게 알아보기도 해야 하구요.
무엇보다 requests 모듈을 사용하면 코드가 더 짧게 만들 수 있기 때문에 requests용 예제를 만들어봤습니다.
네이버 데이터랩 API의 requests 예제는 다음과 같습니다.
url = 'https://openapi.naver.com/v1/datalab/search'
headers = {'X-Naver-Client-Id':{클라이언트 id},'X-Naver-Client-Secret':{클라이언트 암호},'Content-Type':'application/json'}
json = {'startDate':'2020-01-01', 'endDate':'2020-12-31', 'timeUnit':'month', 'keywordGroups':[{'groupName':'파이썬', 'keywords':['파이썬']}], 'device':'mo'}
# https://redfox.tistory.com
r = requests.post(url, json = json, headers = headers)
if r.status_code == 200:
print(r.text)
else:
print("Error Code:" + r.status_code)
requests 모듈을 사용한 결과 코드 길이는 거의 절반에 가까울 정도로 짧아졌고, 출력되는 결과물은 동일하게 출력되는 것을 확인할 수 있습니다.
사용 편의를 위해 몇몇 변수를 따로 빼서 정렬하면 다음과 같습니다.
import requests
client_id = {클라이언트 아이디}
client_secret = {클라이언트 암호}
keyword = '파이썬'
start = '2020-01-01'
end = '2020-12-31'
# https://redfox.tistory.com
url = 'https://openapi.naver.com/v1/datalab/search'
headers = {'X-Naver-Client-Id':client_id, 'X-Naver-Client-Secret':client_secret, 'Content-Type':'application/json'}
json = {'startDate':start, 'endDate':end, 'timeUnit':'month', 'keywordGroups':[{'groupName':keyword, 'keywords':[keyword]}], 'device':'mo'}
r = requests.post(url, json = json, headers = headers)
if r.status_code == 200:
print(r.text)
else:
print("Error Code:" + r.status_code)
'파이썬 > 예제' 카테고리의 다른 글
파이썬 멀티프로세싱 Pool과 Process 차이점 비교. (1) | 2023.02.06 |
---|---|
파이썬 절사평균 구하기 예제 (0) | 2022.01.08 |
파이썬 tqdm을 while문에서 사용하기 예제 (1) | 2021.02.27 |
파이썬 네이버 뉴스 API 예제(requests 모듈 사용) (0) | 2021.02.25 |
최근댓글