1
1
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
3
6
from requests import get , post
7
+
8
+ from translatepy .models .languages import Language
4
9
from translatepy .models .userAgents import USER_AGENTS
5
- from random import randint
10
+
11
+ FILE_LOCATION = dirname (abspath (__file__ ))
6
12
7
13
HEADERS = {
8
14
"Accept" : "*/*" ,
@@ -23,9 +29,10 @@ class YandexTranslate():
23
29
"""
24
30
def __init__ (self ) -> None :
25
31
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 ()
27
34
self ._headers = self ._header ()
28
- self .refreshSID ()
35
+ # self.refreshSID()
29
36
30
37
def refreshSID (self ):
31
38
data = get ("https://translate.yandex.com/" , headers = self ._headers ).text
@@ -34,6 +41,7 @@ def refreshSID(self):
34
41
return
35
42
data = data [sid_position + 12 :]
36
43
self ._sid = data [:data .find ("';" )]
44
+ self ._sid_cache .write (self ._sid )
37
45
38
46
def _header (self ):
39
47
"""
@@ -55,6 +63,8 @@ def translate(self, text, destination_language, source_language="auto"):
55
63
return None , None
56
64
if isinstance (source_language , Language ):
57
65
source_language = source_language .yandex_translate
66
+ if self ._sid .replace (" " , "" ) == "" :
67
+ self .refreshSID ()
58
68
url = self ._base_url + "translate?id=" + self ._sid + "-0-0&srv=tr-text&lang=" + str (source_language ) + "-" + str (destination_language ) + "&reason=auto&format=text"
59
69
request = get (url , headers = self ._headers , data = {'text' : str (text ), 'options' : '4' })
60
70
data = loads (request .text )
@@ -75,6 +85,8 @@ def transliterate(self, text, source_language=None):
75
85
source_language = self .language (text )
76
86
if source_language is None or source_language not in TRANSLIT_LANGS :
77
87
return None , None
88
+ if self ._sid .replace (" " , "" ) == "" :
89
+ self .refreshSID ()
78
90
request = post ("https://translate.yandex.net/translit/translit?sid=" + self ._sid + "&srv=tr-text" , headers = self ._headers , data = {'text' : str (text ), 'lang' : source_language })
79
91
if request .status_code < 400 :
80
92
return source_language , request .text [1 :- 1 ]
@@ -92,6 +104,8 @@ def spellcheck(self, text, source_language=None):
92
104
source_language = self .language (text )
93
105
if source_language is None :
94
106
return None
107
+ if self ._sid .replace (" " , "" ) == "" :
108
+ self .refreshSID ()
95
109
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 })
96
110
if request .status_code < 400 :
97
111
data = loads (request .text )
@@ -110,6 +124,8 @@ def language(self, text, hint=None):
110
124
try :
111
125
if hint is None :
112
126
hint = "en,ja"
127
+ if self ._sid .replace (" " , "" ) == "" :
128
+ self .refreshSID ()
113
129
url = self ._base_url + "detect?sid=" + self ._sid + "&srv=tr-text&text=" + str (text ) + "&options=1&hint=" + str (hint )
114
130
request = get (url , headers = self ._headers )
115
131
if request .status_code < 400 and request .json ()["code" ] == 200 :
0 commit comments