Skip to content

Commit 1ff4acb

Browse files
committed
[add] Adding Yandex SID caching, Lazy SID refreshing according to #4
1 parent 33f3871 commit 1ff4acb

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

translatepy/translators/yandex.py

+20-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
from json import loads
2-
from translatepy.models.languages import Language
2+
from random import randint
3+
from os.path import dirname, abspath
4+
5+
from safeIO import TextFile
36
from requests import get, post
7+
8+
from translatepy.models.languages import Language
49
from translatepy.models.userAgents import USER_AGENTS
5-
from random import randint
10+
11+
FILE_LOCATION = dirname(abspath(__file__))
612

713
HEADERS = {
814
"Accept": "*/*",
@@ -23,9 +29,10 @@ class YandexTranslate():
2329
"""
2430
def __init__(self) -> None:
2531
self._base_url = "https://translate.yandex.net/api/v1/tr.json/"
26-
self._sid = ""
32+
self._sid_cache = TextFile(FILE_LOCATION + "/_yandex_sid.translate")
33+
self._sid = self._sid_cache.read()
2734
self._headers = self._header()
28-
self.refreshSID()
35+
#self.refreshSID()
2936

3037
def refreshSID(self):
3138
data = get("https://translate.yandex.com/", headers=self._headers).text
@@ -34,6 +41,7 @@ def refreshSID(self):
3441
return
3542
data = data[sid_position + 12:]
3643
self._sid = data[:data.find("';")]
44+
self._sid_cache.write(self._sid)
3745

3846
def _header(self):
3947
"""
@@ -55,6 +63,8 @@ def translate(self, text, destination_language, source_language="auto"):
5563
return None, None
5664
if isinstance(source_language, Language):
5765
source_language = source_language.yandex_translate
66+
if self._sid.replace(" ", "") == "":
67+
self.refreshSID()
5868
url = self._base_url + "translate?id=" + self._sid + "-0-0&srv=tr-text&lang=" + str(source_language) +"-" + str(destination_language) + "&reason=auto&format=text"
5969
request = get(url, headers=self._headers, data={'text': str(text), 'options': '4'})
6070
data = loads(request.text)
@@ -75,6 +85,8 @@ def transliterate(self, text, source_language=None):
7585
source_language = self.language(text)
7686
if source_language is None or source_language not in TRANSLIT_LANGS:
7787
return None, None
88+
if self._sid.replace(" ", "") == "":
89+
self.refreshSID()
7890
request = post("https://translate.yandex.net/translit/translit?sid=" + self._sid + "&srv=tr-text", headers=self._headers, data={'text': str(text), 'lang': source_language})
7991
if request.status_code < 400:
8092
return source_language, request.text[1:-1]
@@ -92,6 +104,8 @@ def spellcheck(self, text, source_language=None):
92104
source_language = self.language(text)
93105
if source_language is None:
94106
return None
107+
if self._sid.replace(" ", "") == "":
108+
self.refreshSID()
95109
request = post("https://speller.yandex.net/services/spellservice.json/checkText?sid=" + self._sid + "&srv=tr-text", headers=self._headers, data={'text': str(text), 'lang': source_language, 'options': 516})
96110
if request.status_code < 400:
97111
data = loads(request.text)
@@ -110,6 +124,8 @@ def language(self, text, hint=None):
110124
try:
111125
if hint is None:
112126
hint = "en,ja"
127+
if self._sid.replace(" ", "") == "":
128+
self.refreshSID()
113129
url = self._base_url + "detect?sid=" + self._sid + "&srv=tr-text&text=" + str(text) + "&options=1&hint=" + str(hint)
114130
request = get(url, headers=self._headers)
115131
if request.status_code < 400 and request.json()["code"] == 200:

0 commit comments

Comments
 (0)