抓包軟件使用的是Fiddler4
新版的查詢接口 比較負責,引入了salt和sign
http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sessionFrom=http://fanyi.youdao.com/
這里使用老版本的查詢接口
http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com/
代碼:
# coding=utf-8 import urllib import urllib2 import json ''' 功能說明: 根據輸入要翻譯的文字,進行有道自動翻譯: 實現中文->英文、英語及其他語言->中文的轉換 ''' class YoudaoFanyi: def __init__(self): self.url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com/' self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36", } def get_encoded_payload(self, key): ''' :param key: 帶翻譯的文字 :return: 返回url編碼過的數據 ''' payload = { "i": key, 'type': 'AUTO', "doctype": "json", "xmlVersion": "1.8", "keyfrom": "fanyi.web", "action": "FY_BY_CLICKBUTTON", "typoResult": "true", "ue": "UTF-8" } data = urllib.urlencode(payload) return data def show_translate_result(self, html): ''' 解析返回的json數據 :param html: 返回的json數據 :return: None ''' data = json.loads(html) print '*' * 10 target = data['translateResult'][0][0]['tgt'] print target if 'smartResult' in data: result = data['smartResult']['entries'] result_str = '\n'.join(result[1:]) # result列表中第一個元素為"" print '有道詞典結果' print result_str print '*' * 10 def translate(self, content): ''' 對輸入的內容進行翻譯 :param content: 帶翻譯的內容 :return: None ''' payload = self.get_encoded_payload(content) # 獲取經過url編碼后的數據 request = urllib2.Request( self.url, data=payload, headers=self.headers) # 構造請求 response = urllib2.urlopen(request) # 發送請求 self.show_translate_result(response.read()) # 解析結果 if __name__ == '__main__': youdao = YoudaoFanyi() while True: key = raw_input("請輸入你要翻譯的文字[Q|quit 退出]: ").strip() if key in ['Q', 'quit']: break youdao.translate(key)