본문 바로가기
Python

[번역 API] 파이썬에서 Papago API 사용하는 방법

2023. 1. 4.

이 글에서는 파파고 API를 활용해서 문장을 번역해 본다.

순서는 애플리케이션을 등록하고 access token 받기 -> request(한국어 메시지 서버로 보내기) -> response (서버의 응답받기) -> 번역된 text 출력이다.

1. App 등록 - access token 받기
https://developers.naver.com/main/  로그인 후

Application -> 애플리케이션 등록 클릭

애플리케이션 이름 설정, 사용 API Papago 번역 설정, http://localhost 입력 후 등록하기 클릭

등록했다면 내 애플리케이션에 추가가 됐을 것이고 Client ID와 Client Secret을 확인할 수 있다.

코드 작성시 이 정보를 사용해야 정상적으로 서버에 요청을 보내고 응답을 받을 수 있다.

# 사용할 라이브러리 import, 정보 등록
import requests
import json

CLIENT_ID, CLIENT_SECRET = '(MY Client ID)', '(MY Client Secret)'

(MY Client ID), (MY Client Secret) 부분에 위에서 발급 받은 정보를 입력해준다.


2. 서버에 request
본인의 정보를 등록한 후 API 가이드에 따라 URL, Header, Data를 입력한다.

text = '파이썬은 재미있습니다.'
url = 'https://openapi.naver.com/v1/papago/n2mt'
headers = {
    'Content-Type': 'application/json',
    'X-Naver-Client-Id': CLIENT_ID,
    'X-Naver-Client-Secret': CLIENT_SECRET
}
data = {'source': 'ko', 'target': 'en', 'text': text}

번역할 문장을 입력해주고, url과 header를 입력했다.
Content-Type은 가이드에 써있는대로 하지 않고 이렇게 작성해야한다.
그리고 data에 소스 언어와 타깃 언어를 설정하고 문장을 담아준다.
꼭 영어가 아니어도 en, zh-CN, zh-TW, es, fr, vi 등 다른 언어도 사용할 수 있다.

# post 방식으로 서버 쪽으로 요청
response = requests.post(url, json.dumps(data), headers=headers) 
# print(response)   # status code : response 200번대가 나오면 성공, 400번대는 실패

데이터에 한글을 쓸 수 없기 때문에 한글을 encoding 해서 전송하기 위해 json.dumps를 사용해야한다.
원한다면 print(response)로 응답을 잘 받았는지 확인해 볼 수도 있다.

3. response 확인
서버로부터 받은 응답을 출력해 보면

print(response.text)
print(type(response.text))

# 실행 결과
{"message":{"result":{"srcLangType":"ko","tarLangType":"en","translatedText":"Python is fun.","engineType":"N2MT","pivot":null,"dict":null,"tarDict":null},"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0"}}
str

dictionary처럼 생긴 문자열을 확인할 수 있다.

json()을 통해 응답을 dictionary로 변경한 후 원하는 데이터 translatedText에 접근하면 번역 결과를 얻을 수 있다.

en_text = response.json()['message']['result']['translatedText']
print(en_text)

# 실행 결과
Python is fun

파이썬은 재미있습니다 -> Python is fun  번역이 잘 되었다.


전체 코드

# papago 번역 API 사용
import requests
import json

# 1. APP 등록 - access token
CLIENT_ID, CLIENT_SECRET = '(MY Client ID)', '(MY Client Secret)'

# 2. request (en 외 언어로 번역도 가능)
text = '파이썬은 재미있습니다.'
url = 'https://openapi.naver.com/v1/papago/n2mt'
headers = {
    'Content-Type': 'application/json',
    'X-Naver-Client-Id': CLIENT_ID,
    'X-Naver-Client-Secret': CLIENT_SECRET
}
data = {'source': 'ko', 'target': 'en', 'text': text}

# post 방식으로 서버 쪽으로 요청
response = requests.post(url, json.dumps(data), headers=headers) 
# print(response)  # 정상 응답인지 확인

# 3. response(en) -> en_txt
# print(response.text)  # 응답 출력 - 내용이 dictionary인 str

# json() 후 key 값을 사용하여 원하는 텍스트 접근
en_text = response.json()['message']['result']['translatedText']
print(en_text)

# 실행 결과 : 파이썬은 재미있습니다 -> Python is fun 번역 완료!
Python is fun

 

추가적으로 함수를 사용하여 구현해보자

# papago 번역 API 사용 - 함수 활용
import requests
import json


# translate 함수 선언
def translate(text, source='ko', target='en'):
    CLIENT_ID, CLIENT_SECRET = '(MY Client ID)', '(MY Client Secret)'
    url = 'https://openapi.naver.com/v1/papago/n2mt'
    headers = {
        'Content-Type': 'application/json',
        'X-Naver-Client-Id': CLIENT_ID,
        'X-Naver-Client-Secret': CLIENT_SECRET
    }
    data = {'source': 'ko', 'target': 'en', 'text': text}
    response = requests.post(url, json.dumps(data), headers=headers)
    return response.json()['message']['result']['translatedText']


# 번역할 문장 입력 후 함수에 전달
text = '파파고 API 실습이 재미있네요.'
en_text = translate(text)
print(en_text)

# 실행 결과
The Papago API practice is fun

 

반응형

댓글