赞
踩
Hi,大家好,我是半亩花海。本项目旨在利用 Python 语言实现一个简单的有道翻译工具。有道翻译是一款常用的在线翻译服务,能够实现多种语言的互译,提供高质量的翻译结果。
目录
导入了需要使用的库,包括发送 HTTP 请求的 requests 库,生成时间戳的 time 库,生成随机数的 random 库以及进行 MD5 加密的 hashlib 库中的 md5 函数。
- import requests # 用于发送 HTTP 请求和接收响应
- import time # 用于生成时间戳
- import random # 用于生成随机数
- from hashlib import md5 # 用于进行 MD5 加密
定义了请求头部信息的字典,包括 Cookie、Host、Origin、Referer 和 User-Agent 等字段,用于模拟浏览器发送请求。
- headers = {
- 'Cookie': 'OUTFOX_SEARCH_USER_ID=-690213934@10.108.162.139; OUTFOX_SEARCH_USER_ID_NCOO=1273672853.5782404; fanyi-ad-id=308216; fanyi-ad-closed=1; ___rl__test__cookies=1659506664755',
- 'Host': 'fanyi.youdao.com',
- 'Origin': 'https://fanyi.youdao.com',
- 'Referer': 'https://fanyi.youdao.com/',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
- }
通过 input()
函数获取用户输入的要翻译的单词或短语,并将其存储在名为 key
的变量中。
key = input("请输入你要翻译的单词:")
使用 time.time()
获取当前时间戳,乘以 100 并转换为字符串,生成时间戳 lts
;然后使用 random.randint()
生成一个随机数,并与时间戳拼接成盐值 salt
。
- lts = str(int(time.time() * 100))
- salt = lts + str(random.randint(0, 9))
根据有道翻译的签名算法,构造签名所需的字符串 sign_data
,包括固定字符串、待翻译的单词、盐值和固定字符串。然后使用 md5()
函数对 sign_data
进行加密,并将结果转换为十六进制字符串,得到签名 sign
。
- sign_data = 'fanyideskweb' + key + salt +'Ygy_4c=r#e#4EX^NUGUc5'
- sign = md5(sign_data.encode()).hexdigest()
构造了一个包含翻译所需参数的字典 data
,包括翻译文本 i
、源语言 from
、目标语言 to
、smartresult、client、salt、sign、lts、bv、doctype、version、keyfrom 和 action 等信息。
- data = {
- 'i': key,
- 'from': 'AUTO',
- 'to': 'AUTO',
- 'smartresult': 'dict',
- 'client': 'fanyideskweb',
- 'salt': salt,
- 'sign': sign,
- 'lts': lts,
- 'bv': 'f0819a82107e6150005e75ef5fddcc3b',
- 'doctype': 'json',
- 'version': '2.1',
- 'keyfrom': 'fanyi.web',
- 'action': 'FY_BY_REALTlME',
- }
使用 requests.post()
方法发送 POST 请求,参数包括请求地址 url
、请求头部信息 headers
和请求数据 data
,并将响应保存在 response
变量中。
- url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
- response = requests.post(url, headers=headers, data=data)
输出了服务器返回的 JSON 格式的数据,其中包含翻译结果。
print(response.text)
- #!/usr/bin/env python
- # -*- encoding: utf-8 -*-
- import requests
- import time
- import random
- from hashlib import md5
-
- headers = {
- 'Cookie': 'OUTFOX_SEARCH_USER_ID=-690213934@10.108.162.139; OUTFOX_SEARCH_USER_ID_NCOO=1273672853.5782404; fanyi-ad-id=308216; fanyi-ad-closed=1; ___rl__test__cookies=1659506664755',
- 'Host': 'fanyi.youdao.com',
- 'Origin': 'https://fanyi.youdao.com',
- 'Referer': 'https://fanyi.youdao.com/',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
- }
- key = input("请输入你要翻译的单词:")
- lts = str(int(time.time() * 100))
- salt = lts + str(random.randint(0, 9))
- sign_data = 'fanyideskweb' + key + salt +'Ygy_4c=r#e#4EX^NUGUc5'
- sign = md5(sign_data.encode()).hexdigest()
- data = {
- 'i': key,
- 'from': 'AUTO',
- 'to': 'AUTO',
- 'smartresult': 'dict',
- 'client': 'fanyideskweb',
- # 时间戳 1970 秒
- 'salt':salt,
- # 加密
- 'sign': sign,
- # 时间戳
- 'lts': lts,
- # 加密的数据
- 'bv': 'f0819a82107e6150005e75ef5fddcc3b',
- 'doctype': 'json',
- 'version': '2.1',
- 'keyfrom': 'fanyi.web',
- 'action': 'FY_BY_REALTlME',
- }
-
- # 获取到资源地址
- url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
- response = requests.post(url, headers=headers, data=data)
- print(response.text)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。