Seongwon Lim

[Python] 네이버 Open API 파이썬 코드로 구현하여 사용하기 본문

Python

[Python] 네이버 Open API 파이썬 코드로 구현하여 사용하기

limsw 2022. 5. 8. 16:51
반응형

서론

이전 포스팅 글에서 네이버 OpenAPI 사용 방법과 네이버에서 제공하는 API들을 포스트맨을 이용하여 사용하는 방법을 알아보았다. 이번 글에서는 파이썬으로 네이버 OpenAPI 사용을 위한 코드를 구현해보고자 한다.

 

  • 포스트맨을 이용한 네이버 OpenAPI 사용 방법이 궁금한 분들이나 네이버 OpenAPI 사용 방법 과정이 궁금하신 분들은 여기를 참고하면 좋을 것 같다.

파이썬으로 네이버 Open API 사용하기

먼저 특정 웹사이트의 정보를 가져올 때에는 크롤링에서 많이 사용하는 requests모듈을 사용하여 웹사이트 정보를 가져올 수 있다. 이 때, 기존 크롤링에서 사용한 requests.get() 메서드에 2번째 인자로 네이버 OpenAPI 사용을 위한 Client ID, Client Secret 값을 headers로 넘겨주면 된다.

이해를 돕고자 먼저 코드로 구현해보았다.

import requests

header_info = {"X-Naver-Client-Id": "Client ID", "X-Naver-Client-Secret": "Client Secret"}
res = requests.get("https://openapi.naver.com/v1/search/news.json?query=올림픽", headers=header_info)

위와 같이 get()메서드에 2번째 인자 headers에 네이버 Open API 사용을 위한 값 2개를 담은 변수를 주었다.
Client ID, Client Secret 부분에는 네이버 애플리케이션 등록 시 생성된 값 2개를 넣는다.

이제 데이터를 출력해보기 위해서 res.content 코드를 추가하여 실행시켜보았다.

데이터는 잘 가져오는 것 같은데 인코딩된 상태가 아니라서 알아보기가 힘든 것을 확인할 수 있다.
이 때에는 requests모듈에서 제공하는 json()메서드를 이용하면 GET요청으로 받은 결과를 JSON 형태로 바꾸어 사용자에게 반환한다.

 

이번에는 res.json() 코드를 추가하여 결과가 어떻게 나오는지 살펴보았다.

이전과 달리 결과가 인코딩 되었을 뿐 아니라 JSON 형태로 나오는 것을 확인할 수 있었다.

res.json()을 사용하지 않는 경우 res.text를 이용해도 json 형태로 데이터를 가져올 수 있으니 참고하자.

번외 - 상태 코드를 이용하여 에러 처리하기

위 예시는 성공적인 결과만 나타났을 때 경우이지만 실제로 개발을 하다보면 에러가 발생하는 일이 비일비재하다.

예를 들어 https://openapi.naver.com/v1/search/news.json?query=올림픽 해당 주소로 GET 요청을 보내도 헤더를 넣지 않거나 실수로 주소에 오타가 있는 경우에는 에러가 발생하게 된다.

 

requests 모듈은 get을 통해서 가져온 정보를 제대로 가져온 것인지 판별할 수 있는 상태 코드 메서드를 제공하고 있다. 사용 방법은 다음과 같다.

import requests

res = requests.get("https://openapi.naver.com/v1/search/news.json?query=올림픽")

if res.status_code == 200:
    print(res.json())
else:
    print("error code :", res.status_code)

위 코드는 GET 요청을 할 때 headers를 주지 않은 경우이다. 위와 같이 코드를 구성한 뒤 실행을 시켜보면

에러 코드 401이 출력된 것을 확인할 수 있다.

에러 코드 401의 의미는 해당 리소스에 유효한 인증 자격 증명이 없기 때문에 요청이 적용되지 않았음을 나타낸다는 의미이다. 우리가 headers로 클라이언트 정보를 넘겨주지 않았기 때문에 인증을 제대로 하지 못한 경우이며 그에 대한 에러 코드가 적절하게 반환된 것을 확인할 수 있다.


출처

 
Comments