네이버 API를 사용하기 위한 오픈소스 파이썬 라이브러리
PyNaver는 네이버 개발자 센터와 네이버 클라우드 플랫폼에서 제공하는 다양한 API를 파이썬으로 쉽게 사용할 수 있도록 해주는 라이브러리입니다. 그래서 PyNaver를 사용하면 NAVER Developers의 검색 API를 통해 웹문서, 이미지, 쇼핑, 전문자료 등을 검색할 수 있고, 파파고 API를 사용하면 Papago 번역, 한글인명-로마자 변환 기능을 이용할 수 있습니다. 단축 URL API를 사용하면 원래의 URL을 짧게 줄일 수도 있습니다. NAVER CLOUD PLATFORM의 지오코딩 API를 이용하면 주소로 좌표 정보를 알아낼 수 있고, 리버스 지오코딩 API를 이용하면 좌표로 주소 정보를 알아낼 수 있습니다. 또한, Direction 5 및 Direction 15 API를 사용하면 출발지/목적지 정보에 따라 경로 관련 정보를 알아낼 수 있습니다.
단, 위 서비스들을 정상적으로 이용하기 위해서는 먼저 각 플랫폼에서 API 인증 정보(client_id, client_secret)를 발급받아야합니다.
네이버 API 인증 정보 발급받기
-
네이버 개발자 센터에 접속 후 로그인합니다.
-
‘Application’ - ‘애플리케이션 등록’ 을 클릭합니다.
-
애플리케이션 이름을 적고, 사용 API에 아래와 같이 사용할 서비스들을 하나씩 클릭하여 선택합니다. 환경 설정까지 마쳤다면 ‘등록하기’를 클릭합니다.
-
왼쪽 사이드바의 ‘내 애플리케이션‘에서 위에서 등록한 애플리케이션 이름을 클릭하면, 아래와 같이 애플리케이션 정보가 조회됩니다. (중요) Client ID와 Client Secret을 복사해둡니다.
네이버 클라우드 플랫폼 API 인증 정보 발급받기
-
네이버 클라우드 플랫폼에 접속 후 로그인합니다.
-
콘솔-애플리케이션에 접속하여 ‘Application 등록‘을 클릭합니다.
-
‘Maps‘에서 사용할 서비스들을 아래와 같이 체크한 뒤 등록을 완료합니다.
-
다시 콘솔-애플리케이션으로 돌아와 위에서 등록한 App의 ‘인증 정보‘를 클릭하여 (중요) Client ID와 Client Secret을 복사해둡니다.
PyNaver 설치하기
API 인증 정보를 발급받았다면, 아래와 같이 pip를 통해 PyNaver를 설치합니다.
- 운영체제(OS)에 따라 아래 중 하나를 선택합니다.
- Windows: CMD(명령 프롬프트) 실행
- Mac: Terminal(터미널) 실행
- 아래 Shell 명령어를 입력 후 실행합니다.
pip install PyNaver --upgrade
네이버 개발자 센터 API 이용하기
아래와 같이 네이버 개발자 센터 API 인스턴스 naver
를 생성합니다. client_id
와 client_secret
은 위에서 복사한 값을 입력하여 사용합니다.
from PyNaver import Naver
# 애플리케이션 인증 정보
client_id = ""
client_secret = ""
# 네이버 API 인스턴스 생성
api = Naver(client_id, client_secret)
통합 검색어 트렌드 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://developers.naver.com/docs/serviceapi/datalab/search/search.md
# 파라미터
startDate = "2022-01-01"
endDate = "2022-08-31"
timeUnit = "date"
keywordGroups = [
{
"groupName": "미국",
"keywords": ["나스닥","NASDAQ","S&P500"]
},
{
"groupName": "한국",
"keywords": ["코스피","코스닥"]
},
]
# 실행
df = api.datalab_search(startDate, endDate, timeUnit, keywordGroups)
df.tail()
날짜 | 미국 | 한국 | |
---|---|---|---|
238 | 2022-08-27 | 18.57486 | 3.73850 |
239 | 2022-08-28 | 2.86686 | 2.25316 |
240 | 2022-08-29 | 11.75978 | 35.19007 |
241 | 2022-08-30 | 21.22296 | 24.24702 |
242 | 2022-08-31 | 19.19284 | 24.18048 |
쇼핑인사이트 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://developers.naver.com/docs/serviceapi/datalab/shopping/shopping.md
쇼핑인사이트 API는 총 8가지 종류가 있으나 여기서는 한 가지 서비스만 소개합니다. 나머지 서비스들의 사용 방법도 거의 동일합니다.
# 파라미터
startDate = "2022-01-01"
endDate = "2022-08-30"
timeUnit = "date"
category = [
{
"name": "카테고리1",
"param": ["50000000"],
},
{
"name": "카테고리2",
"param": ["50000002"],
},
]
# 실행
df = api.datalab_shopping_categories(startDate, endDate, timeUnit, category)
df.tail()
날짜 | 카테고리1 | 카테고리2 | |
---|---|---|---|
237 | 2022-08-26 | 52.63769 | 31.84794 |
238 | 2022-08-27 | 59.23958 | 34.21125 |
239 | 2022-08-28 | 69.51918 | 37.97973 |
240 | 2022-08-29 | 68.35153 | 41.28070 |
241 | 2022-08-30 | 70.99945 | 38.83789 |
단축 URL API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://developers.naver.com/docs/utils/shortenurl/
# 파라미터
url = "https://wooiljeong.github.io"
# 실행
res = api.util_shorturl(url)
res
{'result': {'url': 'https://me2.do/FniJlxxK',
'hash': 'FniJlxxK',
'orgUrl': 'https://wooiljeong.github.io'},
'message': 'ok',
'code': '200'}
파파고 번역 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://developers.naver.com/docs/papago/papago-nmt-api-reference.md
# 파라미터
source = "ko"
target = "en"
text = "파이썬으로 파파고 번역 API를 호출해봅니다."
# 실행
res = api.papago_n2mt(source, target, text)
res
'Try calling the Papago translation API with Python.'
한글 인명 로마자 변환 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://developers.naver.com/docs/papago/papago-romanization-api-reference.md
# 파라미터
query = "홍길동"
# 실행
df = api.krdict_romanization(query)
df.head()
name | score | |
---|---|---|
0 | Hong Gildong | 99 |
1 | Hong Kildong | 96 |
2 | Hong Gildoung | 21 |
3 | Hong Kildoung | 20 |
검색 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://developers.naver.com/docs/serviceapi/search/news/news.md
검색 API는 블로그, 뉴스, 책, 백과사전, 영화, 카페글, 지식인, 지역, 웹문서, 이미지, 쇼핑 그리고 전문자료로 이루어져있습니다. 여기서는 뉴스 검색 API만 대표로 소개합니다. 나머지 서비스들의 사용 방법도 거의 동일합니다.
# 파라미터
query = "태풍"
display = 5
sort = "sim" # date
# 실행
df = api.search_news(query, display=display, sort=sort)
df.head()
title | originallink | link | description | pubDate | |
---|---|---|---|---|---|
0 | [<b>태풍</b> 힌남노] 尹대통령 "최고 단계 대응 태세" 지시 | https://www.yna.co.kr/view/AKR2022090302000000... | https://n.news.naver.com/mnews/article/001/001... | 윤석열 대통령은 3일 제11호 <b>태풍</b> '힌남노'와 관련... | Sat, 03 Sep 2022 10:20:00 +0900 |
1 | [속보] 윤 대통령 "<b>태풍</b> '힌남노' 최고 ... | https://www.hankyung.com/politics/article/2022... | https://n.news.naver.com/mnews/article/015/000... | 윤석열 대통령은 3일 제11호 <b>태풍</b> '힌남노'와 관련... | Sat, 03 Sep 2022 10:19:00 +0900 |
2 | 부산시, 제11회 <b>태풍</b> '힌남노' 북상…총력 대응 | http://www.newsis.com/view/?id=NISX20220903_00... | https://n.news.naver.com/mnews/article/003/001... | 기사내용 요약 3일~6일 부산에 직·간접영향권에 들 것으로 예상 부산시는 지난 2일... | Sat, 03 Sep 2022 17:44:00 +0900 |
3 | 尹대통령, 힌남노 대비 최고 단계 <b>태풍</b> 대응 태세 지시 | https://www.news1.kr/articles/4792405 | https://n.news.naver.com/mnews/article/421/000... | 윤석열 대통령은 3일 제11호 <b>태풍</b> 힌남노의 북상과 관련, 최고 단계의... | Sat, 03 Sep 2022 10:05:00 +0900 |
4 | 북상하는 <b>태풍</b> '힌남노'…제주 · 남부지역 강한 비 | https://news.sbs.co.kr/news/endPage.do?news_id... | https://n.news.naver.com/mnews/article/055/000... | '역대급 세기'의 제11호 <b>태풍</b> '힌남노&a... | Sat, 03 Sep 2022 10:26:00 +0900 |
네이버 클라우드 플랫폼 API 이용하기
아래와 같이 네이버 클라우드 플랫폼 API 인스턴스 ncp
를 생성합니다. client_id
와 client_secret
은 위에서 복사한 값을 입력하여 사용합니다.
from PyNaver import NaverCloudPlatform
# 애플리케이션 인증 정보
client_id = ""
client_secret = ""
# 네이버 클라우드 플랫폼 API 인스턴스 생성
api = NaverCloudPlatform(client_id, client_secret)
지오코딩 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://api.ncloud-docs.com/docs/ai-naver-mapsgeocoding
# 주소
query = "서초동 1303-22"
# 실행
res = api.geocoding(query)
res
{'status': 'OK',
'meta': {'totalCount': 1, 'page': 1, 'count': 1},
'addresses': [{'roadAddress': '서울특별시 서초구 강남대로 465 교보생명보험(주) 서초사옥',
'jibunAddress': '서울특별시 서초구 서초동 1303-22 교보생명보험(주) 서초사옥',
'englishAddress': '465, Gangnam-daero, Seocho-gu, Seoul, Republic of Korea',
'addressElements': [{'types': ['SIDO'],
'longName': '서울특별시',
'shortName': '서울특별시',
'code': ''},
{'types': ['SIGUGUN'], 'longName': '서초구', 'shortName': '서초구', 'code': ''},
{'types': ['DONGMYUN'], 'longName': '서초동', 'shortName': '서초동', 'code': ''},
{'types': ['RI'], 'longName': '', 'shortName': '', 'code': ''},
{'types': ['ROAD_NAME'],
'longName': '강남대로',
'shortName': '강남대로',
'code': ''},
{'types': ['BUILDING_NUMBER'],
'longName': '465',
'shortName': '465',
'code': ''},
{'types': ['BUILDING_NAME'],
'longName': '교보생명보험(주) 서초사옥',
'shortName': '교보생명보험(주) 서초사옥',
'code': ''},
{'types': ['LAND_NUMBER'],
'longName': '1303-22',
'shortName': '1303-22',
'code': ''},
{'types': ['POSTAL_CODE'],
'longName': '06611',
'shortName': '06611',
'code': ''}],
'x': '127.0240825',
'y': '37.5037844',
'distance': 0.0}],
'errorMessage': ''}
리버스 지오코딩 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://api.ncloud-docs.com/docs/ai-naver-mapsreversegeocoding
# 경위도 좌표값
coords = "127.0240825,37.5037844"
# 실행
res = api.reverse_geocoding(coords)
res
{'status': {'code': 0, 'name': 'ok', 'message': 'done'},
'results': [{'name': 'addr',
'code': {'id': '1165010800', 'type': 'L', 'mappingId': '09650108'},
'region': {'area0': {'name': 'kr',
'coords': {'center': {'crs': '', 'x': 0.0, 'y': 0.0}}},
'area1': {'name': '서울특별시',
'coords': {'center': {'crs': 'EPSG:4326',
'x': 126.9783882,
'y': 37.5666103}},
'alias': '서울'},
'area2': {'name': '서초구',
'coords': {'center': {'crs': 'EPSG:4326',
'x': 127.032598,
'y': 37.483569}}},
'area3': {'name': '서초동',
'coords': {'center': {'crs': 'EPSG:4326',
'x': 127.0195082,
'y': 37.4901186}}},
'area4': {'name': '',
'coords': {'center': {'crs': '', 'x': 0.0, 'y': 0.0}}}},
'land': {'type': '1',
'number1': '1303',
'number2': '22',
'addition0': {'type': '', 'value': ''},
'addition1': {'type': '', 'value': ''},
'addition2': {'type': '', 'value': ''},
'addition3': {'type': '', 'value': ''},
'addition4': {'type': '', 'value': ''},
'coords': {'center': {'crs': '', 'x': 0.0, 'y': 0.0}}}}]}
Directions5 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://api.ncloud-docs.com/docs/ai-naver-mapsdirections
# 파라미터
start = "127.1115061,37.3864539"
goal = "127.01953476,37.5160802"
# 실행
res = api.directions5(start, goal)
res
{'code': 0,
'message': '길찾기를 성공하였습니다.',
'currentDateTime': '2022-09-04T01:50:27',
'route': {'traoptimal': [{'summary': {'start': {'location': [127.111505,
37.3864536]},
'goal': {'location': [127.0195345, 37.51608], 'dir': 2},
'distance': 19972,
'duration': 1143383,
'etaServiceType': 1,
'departureTime': '2022-09-04T01:50:27',
'bbox': [[127.0137745, 37.3863436], [127.1130969, 37.5228656]],
'tollFare': 1000,
'taxiFare': 22790,
'fuelPrice': 2484},
...
Directions15 API
파라미터 관련 상세 정보는 아래 API 레퍼런스
링크를 참조하면 됩니다.
- API 레퍼런스: https://api.ncloud-docs.com/docs/ai-naver-mapsdirections15
# 파라미터
start = "127.1115061,37.3864539"
goal = "127.01953476,37.5160802"
# 실행
res = api.directions15(start=start, goal=goal)
res
{'code': 0,
'message': '길찾기를 성공하였습니다.',
'currentDateTime': '2022-09-04T01:50:32',
'route': {'traoptimal': [{'summary': {'start': {'location': [127.111505,
37.3864536]},
'goal': {'location': [127.0195345, 37.51608], 'dir': 2},
'distance': 19972,
'duration': 1143919,
'etaServiceType': 1,
'departureTime': '2022-09-04T01:50:32',
'bbox': [[127.0137745, 37.3863436], [127.1130969, 37.5228656]],
'tollFare': 1000,
'taxiFare': 22790,
'fuelPrice': 2484},
...
댓글남기기