1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
import re
import requests
import demjson
def int_overflow(val):
maxint = 2147483647
if not -maxint - 1 <= val <= maxint:
val = (val + (maxint + 1)) % (2 * (maxint + 1)) - maxint - 1
return val
def ansii(a):
return a.encode('gbk')
def kr(a: int, b):
c = 0
b = ansii(b)
while c < len(b) - 2:
d = b[c + 2]
d = d - 87 if ansii("a")[0] <= d else int(chr(d))
d = a >> d if ansii("+")[0] == b[c + 1] else a << d
d = int_overflow(d)
a = a + d & 4294967295 if ansii("+")[0] == b[c] else a ^ d
c += 3
return int_overflow(a)
def mr(q, TKK):
e = q.encode()
d = str(TKK).split('.')
a = int(d[0])
b = int(d[0])
for f in e:
a += f
a = kr(a, "+-a^+6")
a = kr(a, "+-3^+b+-f")
a &= 0xffffffff # 出错了,转回无符号
a ^= (int(d[1]) or 0)
if 0 > a:
a = (a & 2147483647) + 2147483648
a %= 1E6
a = int(a)
# c = '&tk='
# return c + (str(a) + "." + str(a ^ b))
return (str(a) + "." + str(a ^ b))
"""
def Sr(a, TKK):
a = ''.join(a['a']['b']['q'])
return mr(a, TKK)
d = {
'a':{
'a': ['q'],
'b': {
'q': ['me']
},
'c': 1,
'g': 1
},
'b': 1,
'c': None,
'j': False,
}
TKK = '426151.3141811846'
tk = Sr(d, TKK)
print(tk)
"""
session = requests.session()
def translate(q='hello', source='en', to='zh-CN', tkk=None):
"""
限制最大5000,按utf-8算,一个汉字算1个,1个英文算一个,超过会失败
"""
if not tkk:
tkk = '426151.3141811846'
tk = mr(q, tkk)
params = {
'client': 't',
'sl': source,
'tl': to,
'hl': source,
'dt': [
'at', 'qca', 'rw', 'rm', 'ss', 't'
],
'tk': tk,
'ie': 'UTF-8',
'oe': 'UTF-8',
'pc': 1,
'kc': 1,
'ssel': 0,
'otf': 1
}
data = {
'q': q
}
headers = {
'Referer': 'https://translate.google.cn/',
'Host': 'translate.google.cn',
}
resp = requests.post('https://translate.google.cn/translate_a/single', params=params, data=data, headers=headers)
if resp.status_code == 200:
resp.encoding = 'utf-8'
data = resp.json()
result = []
result.append(''.join(map(lambda x: x[0], data[0][:-1])))
result.append(data[0][-1][-1])
return result
else:
return None
def ref_words(q='hello', source='en', to='zh-CN'):
params = {
'q': q,
'client': 'translate-web',
'ds': 'translate',
'hl': source,
'requiredfields': f'tl:{to}',
'callback': 'window.google.ref_words'
}
url = 'https://clients1.google.com/complete/search?'
headers = {
'Referer': 'https://translate.google.cn/',
'Host': 'clients1.google.cn',
}
resp = session.get(url, params=params, headers=headers)
if resp.status_code == 200:
resp.encoding = 'utf-8'
result = re.search(r'window.google.ref_words\((.*)\)', resp.text).group(1)
json_data = demjson.decode(result)
data_list = list(map(lambda x: x[0], json_data[1]))
return data_list
else:
return None
|