From e6e4916ac40416818560e68f4baccba7319011bf Mon Sep 17 00:00:00 2001 From: lizhimiao Date: Fri, 10 Mar 2023 15:06:05 +0800 Subject: [PATCH] feat: added google translate support (#131) * added google translate support. * format code using black. --- README.md | 4 +++ book_maker/cli.py | 2 +- book_maker/translator/__init__.py | 2 ++ book_maker/translator/google_translator.py | 37 ++++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 book_maker/translator/google_translator.py diff --git a/README.md b/README.md index dc24605..cbfc273 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +This forked added Google Translate support, only supported translate to `zh-CN`. +Usage: make sure to add `--model google` in the command. + + **[中文](./README-CN.md) | English** # bilingual_book_maker diff --git a/book_maker/cli.py b/book_maker/cli.py index 1571da0..5ede85c 100644 --- a/book_maker/cli.py +++ b/book_maker/cli.py @@ -48,7 +48,7 @@ def main(): dest="model", type=str, default="chatgptapi", - choices=["chatgptapi", "gpt3"], # support DeepL later + choices=["chatgptapi", "gpt3", "google"], # support DeepL later metavar="MODEL", help="model to use, available: {%(choices)s}", ) diff --git a/book_maker/translator/__init__.py b/book_maker/translator/__init__.py index 6cbb813..59d16b7 100644 --- a/book_maker/translator/__init__.py +++ b/book_maker/translator/__init__.py @@ -1,8 +1,10 @@ from book_maker.translator.chatgptapi_translator import ChatGPTAPI from book_maker.translator.gpt3_translator import GPT3 +from book_maker.translator.google_translator import Google MODEL_DICT = { "chatgptapi": ChatGPTAPI, "gpt3": GPT3, + "google": Google # add more here } diff --git a/book_maker/translator/google_translator.py b/book_maker/translator/google_translator.py new file mode 100644 index 0000000..9ec84cf --- /dev/null +++ b/book_maker/translator/google_translator.py @@ -0,0 +1,37 @@ +from .base_translator import Base +import requests + + +class Google(Base): + """ + google translate + """ + + def __init__(self, key, language, api_base=None): + super().__init__(key, language) + self.api_url = "https://translate.google.com/translate_a/single?client=it&dt=qca&dt=t&dt=rmt&dt=bd&dt=rms&dt=sos&dt=md&dt=gt&dt=ld&dt=ss&dt=ex&otf=2&dj=1&hl=en&ie=UTF-8&oe=UTF-8&sl=auto&tl=zh-CN" + self.headers = { + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": "GoogleTranslate/6.29.59279 (iPhone; iOS 15.4; en; iPhone14,2)", + } + # TODO support more models here + self.session = requests.session() + self.language = language + + def rotate_key(self): + pass + + def translate(self, text): + print(text) + r = self.session.post( + self.api_url, + headers=self.headers, + data="q={text}".format(text=requests.utils.quote(text)), + ) + if not r.ok: + return text + t_text = "".join( + [sentence.get("trans", "") for sentence in r.json()["sentences"]] + ) + print(t_text) + return t_text