네이버 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 인증 정보 발급받기

  • 네이버 개발자 센터에 접속 후 로그인합니다. PNG

  • Application’ - ‘애플리케이션 등록’ 을 클릭합니다. PNG

  • 애플리케이션 이름을 적고, 사용 API에 아래와 같이 사용할 서비스들을 하나씩 클릭하여 선택합니다. 환경 설정까지 마쳤다면 ‘등록하기’를 클릭합니다. PNG

  • 왼쪽 사이드바의 ‘내 애플리케이션‘에서 위에서 등록한 애플리케이션 이름을 클릭하면, 아래와 같이 애플리케이션 정보가 조회됩니다. (중요) Client IDClient Secret을 복사해둡니다. PNG


네이버 클라우드 플랫폼 API 인증 정보 발급받기

  • 네이버 클라우드 플랫폼에 접속 후 로그인합니다. PNG

  • 콘솔-애플리케이션에 접속하여 ‘Application 등록‘을 클릭합니다. PNG

  • Maps‘에서 사용할 서비스들을 아래와 같이 체크한 뒤 등록을 완료합니다. PNG

  • 다시 콘솔-애플리케이션으로 돌아와 위에서 등록한 App의 ‘인증 정보‘를 클릭하여 (중요) Client IDClient Secret을 복사해둡니다.


PyNaver 설치하기

API 인증 정보를 발급받았다면, 아래와 같이 pip를 통해 PyNaver를 설치합니다.

  1. 운영체제(OS)에 따라 아래 중 하나를 선택합니다.
  • Windows: CMD(명령 프롬프트) 실행
  • Mac: Terminal(터미널) 실행
  1. 아래 Shell 명령어를 입력 후 실행합니다.
pip install PyNaver --upgrade


네이버 개발자 센터 API 이용하기

아래와 같이 네이버 개발자 센터 API 인스턴스 naver를 생성합니다. client_idclient_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> 힌남노] 尹대통령 &quot;최고 단계 대응 태세&quot; 지시 https://www.yna.co.kr/view/AKR2022090302000000... https://n.news.naver.com/mnews/article/001/001... 윤석열 대통령은 3일 제11호 <b>태풍</b> &apos;힌남노&apos;와 관련... Sat, 03 Sep 2022 10:20:00 +0900
1 [속보] 윤 대통령 &quot;<b>태풍</b> &apos;힌남노&apos; 최고 ... https://www.hankyung.com/politics/article/2022... https://n.news.naver.com/mnews/article/015/000... 윤석열 대통령은 3일 제11호 <b>태풍</b> &apos;힌남노&apos;와 관련... Sat, 03 Sep 2022 10:19:00 +0900
2 부산시, 제11회 <b>태풍</b> &apos;힌남노&apos; 북상…총력 대응 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> &apos;힌남노&apos;…제주 · 남부지역 강한 비 https://news.sbs.co.kr/news/endPage.do?news_id... https://n.news.naver.com/mnews/article/055/000... &apos;역대급 세기&apos;의 제11호 <b>태풍</b> &apos;힌남노&a... Sat, 03 Sep 2022 10:26:00 +0900


네이버 클라우드 플랫폼 API 이용하기

아래와 같이 네이버 클라우드 플랫폼 API 인스턴스 ncp를 생성합니다. client_idclient_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},
     ...

참고

태그:

카테고리:

업데이트:

댓글남기기