PythonでGoogle翻訳(RequestsでHTTP通信)

PythonでGoogle翻訳(RequestsでHTTP通信)

参考:

Google Translate API、無料で使えるか-Qiita

sentence = 'i wanna see you'

url = "https://translate.google.com/translate_a/single"
headers = {
    "User-Agent": "GoogleTranslate/5.9.59004 (iPhone; iOS 10.2; ja; iPhone9,1)"
}
params = {
    "client": "it",
    "dt": ["t", "rmt", "bd", "rms", "qca", "ss", "md", "ld", "ex"],
    "dj": "1",
    "q": sentence,
    "tl": "ja"
}

res = requests.get(url=url, headers=headers, params=params)
res = res.json()
print(f'英語:{sentence}\t日本語:{res["sentences"][0]["trans"]}')

英語:i wanna see you 日本語:あなたに会いたい

ポイントは「User-Agent」なのかなと.これじゃないと,jsonをゲットできない(と思う).一部パラメータの意味がよく分からない.

例えば,愚直にPythonからGoogle翻訳を使おうと思うと,ブラウザでGoogle翻訳にアクセスするのと同様に,

url = 'https://translate.google.co.jp/?client=ubuntu&channel=fs&oe=utf-8&hl=ja&um=1&ie=UTF-8&hl=ja&client=tw-ob#en/ja/'
headers = {
    "User-Agent": "Chrome/58.0.3029.110"
}
params = {
    'q': 'i wanna see you'
}
r = requests.get(url, headers=headers, params=params)

と書ける.ただ,これだと,

r.json()

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

になる.なので,「r.text()」から該当箇所を探してくる必要がある.

r.text()は

中略

\’,\’mt\’],[\’mi\’,\’en\’],[\’en\’,\’mi\’],[\’haw\’,\’en\’],[\’en\’,\’haw\’],[\’sm\’,\’en\’],[\’en\’,\’sm\’],[\’yo\’,\’en\’],[\’en\’,\’yo\’],[\’ig\’,\’en\’],[\’en\’,\’ig\’],[\’ha\’,\’en\’],[\’en\’,\’ha\’],[\’be\’,\’en\’],[\’en\’,\’be\’],[\’fy\’,\’en\’],[\’en\’,\’fy\’],[\’ht\’,\’en\’],[\’en\’,\’ht\’],[\’lb\’,\’en\’],[\’en\’,\’lb\’],[\’mg\’,\’en\’],[\’en\’,\’mg\’],[\’yi\’,\’en\’],[\’en\’,\’yi\’],[\’hmn\’,\’en\’],[\’en\’,\’hmn\’],[\’so\’,\’en\’],[\’en\’,\’so\’],[\’tg\’,\’en\’],[\’en\’,\’tg\’],[\’tk\’,\’en\’],[\’en\’,\’tk\’],[\’tt\’,\’en\’],[\’en\’,\’tt\’],[\’ug\’,\’en\’],[\’en\’,\’ug\’],[\’cy\’,\’en\’],[\’en\’,\’cy\’],[\’eo\’,\’en\’],[\’en\’,\’eo\’],[\’ga\’,\’en\’],[\’en\’,\’ga\’],[\’gd\’,\’en\’],[\’en\’,\’gd\’],[\’la\’,\’en\’],[\’en\’,\’la\’],[\’or\’,\’en\’],[\’en\’,\’or\’]];window.jstiming.load.tick(\’prt\’);/translate/releases/twsfe_w_20170522_RC01/r/js/desktop_module_main.jsInit();

みたいな中身のstr型.str型からのマッチングなので,正規表現の話になる.

import re

pattern = "TRANSLATED_TEXT=\'(.*?)\'"
result = re.search(pattern, r.text).group(1)
print(f'英語:{sentence}\t日本語:{result}')

英語:i wanna see you 日本語:あなたに会いたい

PAGE_BREAK: PageBreak

という訳で,

import requests
import re


string = 'Live as if you were to die tomorrow. Learn as if you were to live forever.'
url = 'https://translate.google.co.jp/?client=ubuntu&channel=fs&oe=utf-8&hl=ja&um=1&ie=UTF-8&hl=ja&client=tw-ob#en/ja/'
headers = {"User-Agent": "Chrome/58.0.3029.110"}
params = {'q': string}
r = requests.get(url, headers=headers, params=params)

pattern = "TRANSLATED_TEXT=\'(.*?)\'"
result = re.search(pattern, r.text).group(1)

print(f'英語:{string}\n日本語:{result}')

英語:Live as if you were to die tomorrow. Learn as if you were to live forever.
日本語:明日死ぬかのように生きる。あなたが永遠に生きていたかのように学びます。

ちなみに,User-Agentは別に無くても良い.

import requests
import re


string = 'Live as if you were to die tomorrow. Learn as if you were to live forever.'
url = 'https://translate.google.com/?hl=ja#en/ja/'
r = requests.get(url, params={'q': string})

pattern = "TRANSLATED_TEXT=\'(.*?)\'"
result = re.search(pattern, r.text).group(1)

print(f'英語:{string}\n日本語:{result}')

英語:Live as if you were to die tomorrow. Learn as if you were to live forever.
日本語:明日死ぬかのように生きる。あなたが永遠に生きていたかのように学びます。

カテゴリー: 未分類 パーマリンク