
好久不见呀,双十一,相信大家都忙着剁手吧,唉,小编没钱,只好靠敲代码来满足自己的手感,这次给大家分享的不是数据结构那个烦人的家伙了,这次用 Python 实现了一个中英文翻译的小程序,虽然现在的翻译软件有很多,但是自己动手实现一个逼格还是挺高的,正好不是要四六级考试了嘛,赶紧一起抓紧时间来学习一波英语的啦。
效果图:

实现原理:
程序的实现原理很简单,利用有道翻译 API,把需要翻译的内容做为参数,POST 相应的 url 里,然后有道服务器那边会返回一个 json 数据,我们就可以从中提取到相应的翻译结果了。
POST 数据获取:
为了方便大家之后自己实现,我特地截了一张全图让大家知道如何看到 POST 的 Data ,多试了几次我们会发现:

i 输入的待翻译的词语或句子 from,to,smartresult,client,doctype,version,keyfrom,action,typoResult 上面这些都是固定值,具体是什么可以之后再了解的,现在不用管 salt 一眼看上去,应该是时间戳,待会验证下就知道了 sign 这个不知道什么东东,先放这
通过我们的验证发现,应该 salt 就是时间戳,sign 就比较烦人了,我先去它的网页代码找了找,发现没有,然后再转向 js 代码,果然这家伙就藏在 js 里面,通过观察分析可以发现的是:
word # 输入要翻译的词或者句 t = str(int(time.time()*1000)) # 当前时间戳 s = "sr_3(QOHT)L2dx#uuGR@r" # 一段用来加密的字符串 sign_ = "fanyideskweb" + word + t + s 将 sign_ 通过 md5 加密的方式即可得到 sign

代码实现:
现在该 POST 的 Data 都有了,开始正式写代码啦,下面是程序的代码,每行我都有详细的注释,相信大家通过上面的分析也是可以看明白的。
import time # 时间戳 import json # 返回json 处理 import requests # 请求 url import hashlib # md5 加密 def translate(word): url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' # http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule # 有道翻译的 API t = str(int(time.time()*1000)) # 当前时间戳 s = "sr_3(QOHT)L2dx#uuGR@r" # 一段用来加密的字符串 sign_ = "fanyideskweb" + word + t + s m = hashlib.md5() # 根据数据串的内容进行 md5 加密 m.update((sign_).encode('utf-8')) # print(m.hexdigest()) word_key = { # key 这个字典为 POST 给有道词典服务器的内容 'i' :word, 'from':'AUTO', 'to':'AUTO', 'smartresult':'dict', 'client':'fanyideskweb', 'salt':t, 'sign':m.hexdigest(), 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_CLICKBUTTION', 'typoResult': 'false' } response = requests.POST(url,data = word_key)# 发送请求 #print(response) # 判断服务器是否相应成功 if(response.status_code == 200): return response.text else: print("有道 API 调用失败") return None def get_word_result(word): # print(word) word_result = json.loads(word) # 通过 json.loads 把返回的结果加载成 json 格式 # print(word_result) print("输入的词为:" + word_result["translateResult"][0][0]['src']) print("翻译结果为:" + word_result["translateResult"][0][0]['tgt']) def main(): print("欢迎使用,本程序调用有道词典 API 进行翻译\n自动检测输入语言-->中文\n中文-->英文") while(True): word = str(input("请输入你想翻译的词或者句子(输入 q 退出):")) if(word == 'q'): print("感谢使用") break word_ = translate(word) get_word_result(word_) if __name__ == '__main__': main()
现在应该就大功告成了,不过当你运行上面的代码时,却发现 {"errorCode":50} 呀,怎么没有想要的结果呢?博主你是不是弄错了呀,哈哈哈,在这里如果你细心观察的话,你会发现有个东西我上面没有仔细说,那就是时间戳的得到,在 js 代码里我们可以看到的是,这里有一个反扒的机制,t = 当前时间的时间戳 + 0-10的随机字符串,巨坑。

那么我的运行结果是怎么出来的呢?没错,就是代码中注释的 url ,我也不知道是那位大佬给弄出来的,替换上去就可以直接用了,好啦,本教程到这里正式结束了。
如果觉得文章还不错的话,可以关注微信公众号「正经的码农」,更多干货等着你
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...