やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

PythonでGoogle翻訳API用クラスを作った

翻訳できた。

成果物

GitHubPython.Google.Translate.201709161405

前回

コード

main.py

from WebApi.Google.Translate import Translator
sentence = "My name is Ann. "
print('翻訳前:', sentence)
print('翻訳後:', Translator.Translate(sentence, 'en', 'ja'))

Translate.py

#!python3.6
#coding:utf-8
import sys
import requests
import time
from Framework.ConstMeta import ConstMeta
class Translator(metaclass=ConstMeta):
    Url = "https://translate.google.com/translate_a/single"
    @classmethod
    def Translate(cls, sentence:str, fromLangCode='en', toLangCode='ja'):
        time.sleep(2)#サーバ負荷軽減対策
        if not isinstance(sentence, str): raise ValueError(f'引数sentenceは文字列型(str)にしてください。type(sentence)=type(sentence)')
        res = requests.get(
            url=cls.Url,
            headers=cls.__GetHeaders(),
            params=cls.__GetParameters(sentence, fromLangCode, toLangCode),
        )
        print('HTTP Code:', res.status_code)
        res.raise_for_status()
        result = res.json()
        print(result)
        print(result["sentences"][0]["trans"])
        return result["sentences"][0]["trans"]
    @classmethod
    def __GetHeaders(cls):
        return {
            "Host": "translate.google.com",
            "Accept": "*/*",
            "Cookie": "",
            "User-Agent": "GoogleTranslate/5.9.59004 (iPhone; iOS 10.2; ja; iPhone9,1)",
            "Accept-Language": "ja-jp",
            "Accept-Encoding": "gzip, deflate",
            "Connection": "keep-alive",
        }
    @classmethod
    def __GetParameters(cls, sentence:str, fromLangCode='en', toLangCode='ja'):
        return {
            "client": "it",
            "dt": ["t", "rmt", "bd", "rms", "qca", "ss", "md", "ld", "ex"],
            "otf": "2",
            "dj": "1",
            "q": sentence,
            "hl": "ja",
            "ie": "UTF-8",
            "oe": "UTF-8",
            "sl": fromLangCode,
            "tl": toLangCode,
        }
        

if __name__ == '__main__':
    sentence = "My name is Ann. "
    print('翻訳前:', sentence)
    print('翻訳後:', Translator.translate(sentence, 'en', 'ja'))

実行結果

$ python main.py 
翻訳前: My name is Ann. 
HTTP Code: 200
{'sentences': [{'trans': '私の名前はアンです。', 'orig': 'My name is Ann.', 'backend': 3}, {'translit': 'Watashinonamaeha Andesu.'}], 'src': 'en', 'confidence': 0.32919586, 'ld_result': {'srclangs': ['en'], 'srclangs_confidences': [0.32919586], 'extended_srclangs': ['en']}}
私の名前はアンです。
翻訳後: 私の名前はアンです。

所感

Babelと組合せて自動翻訳したmoファイルを作成したい。