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}"}
|