forked from mrlan/EnglishPal
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
import requests
|
||
import hashlib
|
||
import time
|
||
from urllib.parse import urlencode
|
||
|
||
# 假设这是从某个配置文件中读取的
|
||
class BaiduContent:
|
||
APPID = '20240702002090356'
|
||
SECRET = '3CcqcMAJdIIpgG0uMS_f'
|
||
|
||
def generate_sign(q, salt):
|
||
"""生成百度翻译API所需的签名"""
|
||
appid = BaiduContent.APPID
|
||
secret = BaiduContent.SECRET
|
||
appid_with_data = appid + q + salt + secret
|
||
md5_obj = hashlib.md5(appid_with_data.encode('utf-8'))
|
||
return md5_obj.hexdigest()
|
||
|
||
def translate(q, from_lang, to_lang):
|
||
"""调用百度翻译API进行翻译"""
|
||
salt = str(int(time.time())) # 生成一个时间戳作为salt
|
||
sign = generate_sign(q, salt)
|
||
|
||
# 封装请求参数
|
||
params = {
|
||
'q': q,
|
||
'from': from_lang,
|
||
'to': to_lang,
|
||
'appid': BaiduContent.APPID,
|
||
'salt': salt,
|
||
'sign': sign
|
||
}
|
||
|
||
# 构造请求URL(百度翻译API使用POST请求,并将参数放在请求体中)
|
||
url = "http://api.fanyi.baidu.com/api/trans/vip/translate"
|
||
|
||
# 发送POST请求
|
||
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
|
||
data = urlencode(params).encode('utf-8') # 注意:需要编码为bytes
|
||
|
||
response = requests.post(url, data=data, headers=headers)
|
||
|
||
# 检查响应状态码
|
||
if response.status_code == 200:
|
||
# 解析并返回JSON响应体中的翻译结果
|
||
try:
|
||
return response.json()['trans_result'][0]['dst']
|
||
except (KeyError, IndexError):
|
||
return "Invalid response from API"
|
||
else:
|
||
# 返回错误信息或状态码
|
||
return {"error": f"Failed with status code {response.status_code}"}
|