diff --git a/example/out.txt b/example/out.txt index a08a2bd..92bcee9 100644 --- a/example/out.txt +++ b/example/out.txt @@ -1,25 +1,25 @@ Однажды лиса увидела, как ворона улетела с куском сыра в клюве и села на ветку дерева. -Это для меня, потому что я Лис, - сказал Мастер Рейнард и подошел к подножию дерева. -- Добрый день, госпожа Ворона! - воскликнул он. -Как хорошо ты выглядишь сегодня: как блестят твои перья, как блестят твои глаза. Я уверен, что твой голос должен превзойти голос других птиц, так же как и твоя фигура; позволь мне услышать от тебя только одну песню, чтобы я мог приветствовать тебя как королеву птиц." +-Добрый день, госпожа Ворона! - воскликнул он. - Как хорошо ты выглядишь сегодня: как блестят твои перья, как блестят твои глаза. Я уверен, что твой голос должен превзойти голос других птиц, так же как и твоя фигура; позволь мне услышать от тебя только одну песню, чтобы я мог приветствовать тебя как королеву птиц." Ворона подняла голову -и принялась каркать изо всех сил, но едва она открыла рот, как кусок сыра упал на землю и был тут же схвачен мастером Лисом. --Довольно, - сказал он. -Это все, чего я хотел. В обмен на ваш сыр я дам вам совет на будущее: "не доверяйте льстецам." +и принялась каркать изо всех сил, но едва она открыла рот, как кусок сыра упал на землю и был тут же схвачен мастером лисом. +-Довольно,- сказал он. - Это все, чего я хотел. В обмен на ваш сыр я дам вам совет на будущее: "не доверяйте льстецам." -Однажды, когда Лев спал, маленькая мышка начала бегать вверх и вниз по нему; это вскоре разбудило Льва, который положил на него свою огромную лапу и открыл свою большую пасть, чтобы проглотить его. - Прости, О царь, - воскликнул король. -Мышонок: "прости меня на этот раз, я никогда этого не забуду: кто знает, может быть, когда-нибудь я смогу тебе помочь? Льву так понравилась мысль о том, что мышонок может ему помочь, что он поднял лапу и отпустил его. -Через некоторое время Лев был пойман в капкан, и охотники, желавшие доставить его живым к царю, привязали его к дереву, а сами отправились на поиски повозки, чтобы перевезти его дальше. Как раз в это время Мышонок случайно проходил мимо и увидел печальное положение дел. -в котором находился лев, подошел к нему и вскоре перегрыз веревки, которыми был связан царь зверей. -Разве я не был прав?- сказал Мышонок. +Однажды, когда Лев спал, маленькая мышка начала бегать вверх и вниз по нему; это вскоре разбудило Льва, который положил на него свою огромную лапу и открыл свою большую пасть, чтобы проглотить его. -Прости, О царь, - воскликнул король. +мышонок: "прости меня на этот раз, я никогда этого не забуду: кто знает, может быть, когда-нибудь я смогу тебе помочь?" Льву так понравилась мысль о том, что мышонок может ему помочь, что он поднял лапу и отпустил его. +Через некоторое время Лев был пойман в капкан, и охотники, желавшие доставить его живым к царю, привязали его к дереву, а сами отправились на поиски повозки, чтобы перевезти его дальше. Как раз в это время мышонок случайно проходил мимо и увидел печальное положение дел. +в котором находился лев, подошел к нему и вскоре перегрыз веревки, которыми был связан царь зверей. - Разве я не была права? - спросила мышка. Однажды Заяц хвастался своей быстротой перед другими животными. -Меня еще ни разу не били, - сказал он, - когда я набирал полную скорость. Я бросаю вызов любому здесь, чтобы участвовать в гонке со мной." Черепаха спокойно сказала: "Я принимаю твой вызов." --Это хорошая шутка, - сказал Заяц. - я мог бы танцевать вокруг тебя всю дорогу." -- Продолжай хвастаться, пока не выиграешь, - ответил он. +- Это хорошая шутка, - сказал Заяц. - я мог бы танцевать вокруг тебя всю дорогу." +-Продолжай хвастаться, пока не выиграешь, - ответил он. черепаха. - Может, наперегонки?" -Итак, курс был определен, и старт был сделан. Заяц почти сразу же скрылся из виду, но вскоре остановился и, чтобы показать свое презрение к черепахе, прилег вздремнуть. Черепаха все плелась и плелась, а когда заяц очнулся от дремоты, он увидел черепаху совсем рядом с победным столбом и не успел вовремя подбежать, чтобы спасти гонку. +Итак, курс был определен, и старт был сделан. Заяц почти сразу же скрылся из виду, но вскоре остановился и, чтобы показать свое презрение к черепахе, прилег вздремнуть. Черепаха все плелась и плелась, а когда заяц очнулся от сна, он увидел черепаху совсем рядом с победным столбом и не успел вовремя подбежать, чтобы спасти гонку. Тогда Черепаха сказала: "медленный, но устойчивый прогресс побеждает в гонке." Ветер и Солнце спорили, кто сильнее. -Внезапно они увидели путника, идущего по дороге, и Солнце сказало: "Я вижу способ решить наш спор. Тот из нас, кто заставит этого путника снять плащ, будет считаться более сильным. Вы начинаете. Солнце скрылось за облаком, и ветер стал дуть так сильно, как только мог, на путешественника. Но чем сильнее он дул, тем плотнее путник закутывался в плащ, и наконец ветер в отчаянии сдался. Затем вышло солнце и засияло во всей своей славе. +Внезапно они увидели путника, идущего по дороге, и Солнце сказало: "Я вижу способ решить наш спор. Тот из нас, кто заставит этого путника снять плащ, будет считаться более сильным. Вы начинаете." Солнце скрылось за облаком, и ветер стал дуть на путника так сильно, как только мог. Но чем сильнее он дул, тем плотнее путник закутывался в плащ, и наконец ветер в отчаянии сдался. Затем вышло солнце и засияло во всей своей славе. путешественник, которому вскоре стало слишком жарко, чтобы идти в плаще. diff --git a/setup.py b/setup.py index 07e7a98..9713455 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name="yandexfreetranslate", - version="1.2", + version="1.3", author="alekssamos", author_email="aleks-samos@yandex.ru", url="https://github.com/alekssamos/yandexfreetranslate/", diff --git a/yandexfreetranslate/__init__.py b/yandexfreetranslate/__init__.py index 856f4a6..8e1de38 100644 --- a/yandexfreetranslate/__init__.py +++ b/yandexfreetranslate/__init__.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 @@ -73,18 +74,27 @@ def _sid_to_key(self, sid): 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") + 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") + except: raise + 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) @@ -107,35 +117,44 @@ 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, source = "auto", target="", text=""): - if self.key == "": self.key = self._get_key() - if source == "auto": source = "" - if len(source) != 0 and len(source) != 2: raise ValueError("source") - if len(target) == 0 or len(target) > 2: raise ValueError("target") - if text == "": raise ValueError("text") - if source==target: return text - if source == "": lang = target - else: lang = source+"-"+target - 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]) - return "\n".join(p) + 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() + if source == "auto": source = "" + if len(source) != 0 and len(source) != 2: raise ValueError("source") + if len(target) == 0 or len(target) > 2: raise ValueError("target") + if text == "": raise ValueError("text") + if source==target: return text + if source == "": lang = target + else: lang = source+"-"+target + 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]) + return "\n".join(p) + except: raise + finally: + if self.useProxy: + ssl._create_default_https_context = old_context + if __name__ == "__main__":