diff --git a/README.md b/README.md index 6d1102e..10ba5f3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Дополнение Яндекс.Переводчик для NVDA -[Скачать версию 2020.11.10](https://github.com/alekssamos/YandexTranslate/releases/latest/download/YandexTranslate-2020.11.10.nvda-addon) +[Скачать версию 2020.11.11](https://github.com/alekssamos/YandexTranslate/releases/latest/download/YandexTranslate-2020.11.11.nvda-addon) После установки зайдите в NVDA меню, Параметры, Жесты ввода, назначте удобные вам сочетания клавиш для YandexTranslate. Или используйте уже предустановленные. diff --git a/addon/doc/en/readme.md b/addon/doc/en/readme.md index ea0cea1..10ba5f3 100644 --- a/addon/doc/en/readme.md +++ b/addon/doc/en/readme.md @@ -1,8 +1,8 @@ # Дополнение Яндекс.Переводчик для NVDA -[Скачать версию 2020.09.04](https://github.com/alekssamos/YandexTranslate/releases/latest/download/YandexTranslate-2020.08.31.nvda-addon) +[Скачать версию 2020.11.11](https://github.com/alekssamos/YandexTranslate/releases/latest/download/YandexTranslate-2020.11.11.nvda-addon) -После установки зайдите в NVDA меню, Параметры, Жесты ввода, назначте удобные вам сочетания клавиш для YandexTranslate. +После установки зайдите в NVDA меню, Параметры, Жесты ввода, назначте удобные вам сочетания клавиш для YandexTranslate. Или используйте уже предустановленные. Переводит выделенный фрагмент текста или текст из буфера обмена. diff --git a/addon/globalPlugins/yandexTranslate/yandexfreetranslate.py b/addon/globalPlugins/yandexTranslate/yandexfreetranslate.py index 008a7de..f4c6735 100644 --- a/addon/globalPlugins/yandexTranslate/yandexfreetranslate.py +++ b/addon/globalPlugins/yandexTranslate/yandexfreetranslate.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 try: from utils import smartsplit except: from .utils import smartsplit +import ssl import json import os import os.path @@ -72,19 +73,28 @@ def _sid_to_key(self, sid): l = [] for item in sid.split(splitter): l.append(item[::-1]) return splitter.join(l)+self.keysuffix + def _parse_sid(self): - req = self._create_request(self.siteurl) - req.add_header("User-Agent", self.ua) - req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ") - req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3") - req.add_header("DNT", "1") - req.add_header("Accept-Encoding", "gzip, deflate, br") - page = self._create_opener().open(req).read().decode("UTF8") - #open("page.html", "w", encoding="utf8").write(page) try: - return re.search(r'''SID[\s]?[:][\s]?['"]([^'"]+)['"]''', page).group(1) - except AttributeError: - raise YandexFreeTranslateError("blocked or not found \n"+str(page)) + if self.useProxy: + old_context = ssl._create_default_https_context + ssl._create_default_https_context = ssl.create_default_context + req = self._create_request(self.siteurl) + req.add_header("User-Agent", self.ua) + req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ") + req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3") + req.add_header("DNT", "1") + req.add_header("Accept-Encoding", "gzip, deflate, br") + page = self._create_opener().open(req).read().decode("UTF8") + #open("page.html", "w", encoding="utf8").write(page) + try: + return re.search(r'''SID[\s]?[:][\s]?['"]([^'"]+)['"]''', page).group(1) + except AttributeError: + raise YandexFreeTranslateError("blocked or not found \n"+str(page)) + finally: + if self.useProxy: + ssl._create_default_https_context = old_context + def _save_key(self, key): with open(self.keyfilename, "w", encoding="utf8") as f: f.write(key) @@ -109,29 +119,36 @@ def __init__(self): if not os.path.isfile(self.keyfilename) and os.path.isfile(self.keyfilename+".back"): os.rename(self.keyfilename+".back", self.keyfilename) def translate(self, lang, text=""): - if self.key == "": self.key = self._get_key() - p=[] - for part in smartsplit(text, 500, 550): - req = self._create_request(self.apibaseurl+"translate?"+urllibparse.urlencode({ - "id":self.key, "srv":"tr-text", "lang":lang, "reason":"paste" - })) - req.add_header("User-Agent", self.ua) - req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ") - req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3") - req.add_header("DNT", "1") - req.add_header("Accept-Encoding", "gzip, deflate, br") - try: - content = self._create_opener().open(req, data = urllibparse.urlencode({ - "options": 4, "text":part - }).encode("UTF8")).read().decode("UTF8") - resp = json.loads(content) - except json.JSONDecodeError: - raise YandexFreeTranslateError(content) - if "text" not in resp: - raise YandexFreeTranslateError(content) - p.append(resp["text"][0]) - resp["text"] = p - return resp + try: + if self.useProxy: + old_context = ssl._create_default_https_context + ssl._create_default_https_context = ssl.create_default_context + if self.key == "": self.key = self._get_key() + p=[] + for part in smartsplit(text, 500, 550): + req = self._create_request(self.apibaseurl+"translate?"+urllibparse.urlencode({ + "id":self.key, "srv":"tr-text", "lang":lang, "reason":"paste" + })) + req.add_header("User-Agent", self.ua) + req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ") + req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3") + req.add_header("DNT", "1") + req.add_header("Accept-Encoding", "gzip, deflate, br") + try: + content = self._create_opener().open(req, data = urllibparse.urlencode({ + "options": 4, "text":part + }).encode("UTF8")).read().decode("UTF8") + resp = json.loads(content) + except json.JSONDecodeError: + raise YandexFreeTranslateError(content) + if "text" not in resp: + raise YandexFreeTranslateError(content) + p.append(resp["text"][0]) + resp["text"] = p + return resp + finally: + if self.useProxy: + ssl._create_default_https_context = old_context if __name__ == "__main__": diff --git a/addon/manifest.ini b/addon/manifest.ini index 113254b..0278537 100644 --- a/addon/manifest.ini +++ b/addon/manifest.ini @@ -3,7 +3,7 @@ summary = "Yandex translator for NVDA" description = """Translates text using service Yandex Translate.""" author = "alekssamos " url = https://github.com/alekssamos/YandexTranslate/ -version = 2020.09.04 +version = 2020.11.11 docFileName = None minimumNVDAVersion = 2019.3 lastTestedNVDAVersion = 2020.2 diff --git a/buildVars.py b/buildVars.py index c25ca24..e8e3fd2 100644 --- a/buildVars.py +++ b/buildVars.py @@ -19,7 +19,7 @@ # Translators: Long description to be shown for this add-on on add-on information from add-ons manager "addon_description": _("""Translates text using service Yandex Translate."""), # version - "addon_version": "2020.11.10", + "addon_version": "2020.11.11", # Author(s) "addon_author": u"alekssamos ", # URL for the add-on documentation support