본문 바로가기
Python

20. 파이썬 네이버 API(Papago) 연동하기1

by To올라운더 2023. 7. 18.
반응형

1. 네이버 개발자센터 가입하기

 - 검색 포털에서 [네이버 개발자센터]를 검색한 뒤 로그인을 진행한다.

https://developers.naver.com/main/

 

NAVER Developers

네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음

developers.naver.com

 

2. 로그인 후, 상단의 [Products - 파파고 - Papago 번역] 을 선택한다.

 

3. 하단 부에 있는 [오픈 API 이용 신청] 을 선택한다.

 

4. 이용 약관 확인

5. 휴대폰 인증으로 계정 설정을 진행(회사 이름은 선택사항)

6. 애플리케이션 등록 신청(API 이용신청)

  - 애플리케이션 이름 : 원하는 애플리케이션 이름, 다른 API 추가 신청 시 구별가능하도록 이름 작성

  - 사용 API : Papago 번역(예시)

  - 환경추가 : WEB 설정(웹 서비스 URL : http://localhost 입력)

 

7. API 키 값 확인

  - 좌측에 신청한 API 이름이 나타나며, Client ID와 Client Secret 정보를 확인할 수 있다.

  - 해당 값은 개인의 은행계좌와 비밀번호와 같은 내용이라고 생각하고 관리해야한다.

  - 다른 사용자에게 전달하거나 공유되어서는 안된다.

8. API 문서 확인 하기

 - 기억하는가? 약속된 정보를 얻기 위해서는 API 제공자가 안내하는 방법을 따라야 하는데 Documents 에서 기본적인 내용과 예시문이 확인 가능하다.

 - 우리는 그 중에서도 비로그인방식 API를 이용할 예정이다. Papago 번역 API의 요청 URL은 아래와 같다.

   : https://openapi.naver.com/v1/papago/n2mt

9. 예시문 확인하기(github)

  - [샘플 코드 - 비로그인 방식 오픈 API 호출 예] 항목을 선택하면 java로 작성된 예문이 나타나는데, 하단의 [github에서 보기]를 선택하면 프로그래밍 언어별 예제 코드를 확인할 수 있다.

 - 우리는 Python을 이용할 예정이므로 좌측 항목의 Python 폴더에서 APIExamTranslateNMT.py 의 코드를 복사해 온다.

# Papago API 예제 코드(Python)
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID" # 개발자센터에서 발급받은 Client ID 값
client_secret = "YOUR_CLIENT_SECRET" # 개발자센터에서 발급받은 Client Secret 값
encText = urllib.parse.quote("반갑습니다")
data = "source=ko&target=en&text=" + encText
url = "https://openapi.naver.com/v1/papago/n2mt"
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request, data=data.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

 

10. API 활용하는 코드 작성하기

 - 실제 client_id와 client_secret만 직접 입력해주면 되는데 코드간 계속 노출되는 상황을 피하기 위해 별도로 naver_trans_api_token.py 파일을 작성하겠다.

#naver_trans_api_token.py 
naver_trans_api_token = {'client_id' : '네이버 개발자센터에서 발급받은 ID', 'client_secret' : '네이버 개발자센터에서 발급 받은 Secret'}

 

11. 예제 코드에 해당 naver_trans_api_token.py 값 불러오기 및 실행 테스트

import os
import sys
import urllib.request
import naver_trans_api_token as ntoken # naver api 정보 가져오기

#client_id = "YOUR_CLIENT_ID" # 개발자센터에서 발급받은 Client ID 값
client_id = ntoken.naver_trans_api_token['client_id']
#client_secret = "YOUR_CLIENT_SECRET" # 개발자센터에서 발급받은 Client Secret 값
client_secret = ntoken.naver_trans_api_token['client_secret']
encText = urllib.parse.quote("안녕하세요.") # 번역하고자 하는 문장 입력
data = "source=ko&target=en&text=" + encText    # 한국어 -> 영어 로 변환
url = "https://openapi.naver.com/v1/papago/n2mt"
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request, data=data.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

 - 간단히 내용을 확인해보면, 

    4라인에 우리가 앞서 작성한 naver_trans_api_token 파일을 import 하고 

    7라인과 9라인에서 해당 dictionary 값을 불러온다.

    10라인에 번역할 내용을 입력하고,

    11라인에 번역할 언어(source=ko / 한글)과 번역될 언어(target=en / 영어)를 선택한다.

  - 해당 코드를 실행해보면 json 형태로 내용이 확인되는 것을 알 수 있다.

     : 그러나 실제 20라인의 type을 확인해보면 str 이다.

 

12. 필요한 데이터만 출력하기

  - 앞서 dictionary를 다루며 해당 형식이 json과 유사한 형태를 띄며 str을 json 또는 dict 로도 변경 가능하다는 것을 배웠는데, 출력되는 str 값을 dict으로 변경하여 우리가 원하는 번역 결과만 출력해보겠다.

import os
import sys
import urllib.request
import naver_trans_api_token as ntoken # 네이버 API 계정 정보
from ast import literal_eval # str to dict


#client_id = "YOUR_CLIENT_ID" # 개발자센터에서 발급받은 Client ID 값
client_id = ntoken.naver_trans_api_token['client_id']
#client_secret = "YOUR_CLIENT_SECRET" # 개발자센터에서 발급받은 Client Secret 값
client_secret = ntoken.naver_trans_api_token['client_secret']
encText = urllib.parse.quote("안녕하세요.") # 번역하고자 하는 문장 입력
data = "source=ko&target=en&text=" + encText    # 한국어 -> 영어 로 변환
url = "https://openapi.naver.com/v1/papago/n2mt"
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request, data=data.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    response_result = response_body.decode('utf-8')
        
    res_result_to_dict= literal_eval(response_result)
    print(type(res_result_to_dict)) # 결과 값 : dict
    print(res_result_to_dict)
    print('\n\n번역 내용 :')
    print(res_result_to_dict['message']['result']['translatedText']) # 결과 값 : Hello
else:
    print("Error Code:" + rescode)

 - 5라인 : str 을 dict로 변경하기 위해 import 진행

 - 22라인 : Papago API로 부터 전달 받은 결과 값을 dict로 변환하기 전 해당 str 값을 변수로 저장

 - 24라인 : 결과값(str)을 dict type으로 변경(22라인과 합쳐도 무관 

     res_result_to_dict = literal_eval(response_body.decode('utf-8'))

 28라인 : 번역된 translatedText 가 message->result->translatedText 로 value 값이 중첩되어 있으므로, 각 단계별 Key 값을 입력하여 translatedText의 Value 값만 출력

 

추가 테스트

어떤가요? 도움이 되셨나요?

 

마지막으로 네이버에서 사용한 API 일일허용량을 확인해보면, 93 글자나 번역을 했군요. 

다음 시간에는 엑셀 파일과 텍스트 파일을 불러와서 처리하고 다시 저장하는 과정을 진행하는 것으로 초급 과정을 모두 마치겠습니다.

반응형