파파고 API는 네이버에서 개발하고 있는 인공지능 API로 번역을 포함한 다양한 인공지는 API를 제공하고 있다.
먼저, 네이버 개발자센터로 가서 네이버 계정으로 로그인을 한다. 그리고 나서 상단 “Application” → “내 어플리케이션”에서 신규 어플리케이션을 생성한다. “API 설정”에서 필요한 서비스를 지정한다. 여기서는 “사용 API”에서 “Papago NMT 번역”을 선택한다. 그러면 다음과 같이 쉘에서 실행할 수 있는 이니셜 스크립트가 생성된다. Naver-Client-Id
와 Naver-Client-Secret
은 중요한 정보라 curl
명령어로 테스트가 끝나면 바꿔서 추후 유추되더라도 문제가 없도록 별도 조치를 취한다.
“만나서 반갑습니다.” 한글 문장이 “Nice to meet you.” 영문으로 정확하게 변환된 것이 확인된다. 일일 10,000 호출까지 무료라서… 개발 목적으로는 다소 부족한 감이 있지만 테스트하는데는 충분한 듯 하기도 싶다.
curl "https://openapi.naver.com/v1/papago/n2mt" \
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
-H "X-Naver-Client-Id: zRsZRLqoDEYE1AufliHS" \
-H "X-Naver-Client-Secret: i5n4wY0ZLi" \
-d "source=ko&target=en&text=만나서 반갑습니다." -v
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 125.209.234.165...
* TCP_NODELAY set
* Connected to openapi.naver.com (125.209.234.165) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [223 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [98 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [5650 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-CHACHA20-POLY1305
* ALPN, server accepted to use h2
* Server certificate:
* subject: C=KR; postalCode=13561; ST=Gyeonggi-do; L=Seongnam-si; street=6, Buljeong-ro, Bundang-gu; O=NAVER Corp.; OU=Privacy Protection Team; OU=Hosted by Korea Information Certificate Authority, Inc.; OU=SGC SSL Wildcard; CN=*.openapi.naver.com
* start date: Dec 11 00:00:00 2017 GMT
* expire date: Dec 30 23:59:59 2019 GMT
* subjectAltName: host "openapi.naver.com" matched cert's "openapi.naver.com"
* issuer: C=GB; ST=Greater Manchester; L=Salford; O=COMODO CA Limited; CN=COMODO RSA Organization Validation Secure Server CA
* SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7fc12600ba00)
> POST /v1/papago/n2mt HTTP/2
> Host: openapi.naver.com
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: application/x-www-form-urlencoded; charset=UTF-8
> X-Naver-Client-Id: zRsZRLqoDEYE1AufliHS
> X-Naver-Client-Secret: i5n4wY0ZLi
> Content-Length: 51
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
} [51 bytes data]
* We are completely uploaded and fine
< HTTP/2 200
< server: nginx
< date: Sun, 21 Apr 2019 05:06:45 GMT
< content-type: application/json; charset=UTF-8
< content-length: 173
< vary: Accept-Encoding
< vary: Origin
< x-quota: 10
<
{ [173 bytes data]
100 224 100 173 100 51 419 123 --:--:-- --:--:-- --:--:-- 419
* Connection #0 to host openapi.naver.com left intact
{"message":{"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0","result":{"srcLangType":"ko","tarLangType":"en","translatedText":"Nice to meet you."}}}
usethis::edit_r_environ()
명령어로 Naver-Client-Id
와 Naver-Client-Secret
에서 설정한 것과 동일하게 설정하여 혼동을 최소화한다. 그리고 주석을 달아 다른 비번과 혼동되지 않도록 한다. 비번 설정 결과값은 .Renviron
파일에 저장된다.
curl
과 동일하게 POST
문을 작성한다. 즉, 한글 “만나서 반갑습니다” 문장을 영어로 번역하여 “Nice to meet you.”를 제작하는 것이다.
나성호님이 작성한 POST
문 코드를 그대로 사용하여 결과값을 받아내고 이를 listviewer
팩키지로 네이버에서 한글을 받아 영어로 번역한 결과를 그대로 출력한다. 그리고 추후 재사용을 위해서 translatedText
를 화면에 출력해 본다.
# 환경변수 확인
Sys.getenv('Naver-Client-Id')
[1] "zRsZRLqoDEYE1AufliHS"
Sys.getenv('Naver-Client-Secret')
[1] "i5n4wY0ZLi"
library(tidyverse)
library(httr)
# 번역할 문장
sample_sentence <- '만나서 반갑습니다.'
# curl과 같은 내용을 POST R코드로 작성
res <- POST(url = 'https://openapi.naver.com/v1/papago/n2mt',
encode = 'json',
body = list(source = 'ko',
target = 'en',
text = sample_sentence),
config = add_headers('X-Naver-Client-Id' = Sys.getenv('Naver-Client-Id'),
'X-Naver-Client-Secret' = Sys.getenv('Naver-Client-Secret')
)
)
print(x = res)
Response [https://openapi.naver.com/v1/papago/n2mt]
Date: 2019-04-21 05:06
Status: 200
Content-Type: application/json; charset=UTF-8
Size: 173 B
# JSON 타입의 데이터를 추출합니다.
res_json <- content(x = res)
listviewer::jsonedit(res_json)
listviewer
팩키지로 살펴보니 출력결과는 $message$result$translatedText
에 나타난다.
res_json$message$result$translatedText
[1] "Nice to meet you."