您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么在Python項目中調用有道翻譯接口,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
首先來看一下網頁 post 過去的數據
大家不難發現,我們翻譯的內容是放在 post 的 data 中的,這些參數,除了 salt 和 sign 要么就是不會變化,要么就是一眼能看出來意義的;那么這個 salt 和 sign 是什么呢?salt 根據 ta 數據的特征,我們應該會想到,這應該是一個時間戳,而 sign 又是什么呢?我們一起來看一下
找到這個 js 文件,最上面這個 send 文件
將里面的 js 代碼拷貝出來,格式化一下,搜索 sign
我們發現,salt 確實是一個時間戳,但 sign 呢?,這里對 sign 的計算稍微多啰嗦幾句,如圖:
大家發現 sign 的值,也就是 o 一共是對四個參數進行求 md5 碼,兩個是定值,一個是前面求到的時間戳,還有一個是什么呢?這個地方我也找了挺久的(還是不懂 js 的痛啊,哭。。。)剩下的參數,就是圖片中所謂的 t
var t = e.i
然后在 data 中,大家還能發現這么一句:
i:e.i
這個 i 我們對應到 ta 發送的 data 中,不就是我們要翻譯的字符串嗎?哈哈哈,被我發現了吧!
發現這個就好辦了,我們找出其中參數之間的關系,用Python實現 ta
但當我們構造好 data 興高采烈地將數據 post 過去的時候,會發現出現報錯了
為什么呢?難道是我們的 data 構造的有問題嗎?不清楚,先嘗試一下,咱們吧瀏覽器中的 data 拷貝進來運行一下,發現還是出錯了;那么說明錯誤不是出在 data 上面了,那究竟是那里出了問題呢?難道 ta 還有其他的校驗方式;別著急繼續分析,我們再觀察一下,post 請求,發現這個請求是帶了 cookie的,于是我們猜測,是不是 cookie 的原因呢? 還是不清楚,我們嘗試一下,將 data 對應的 cookie 加上,再運行一下。發現這次通過了,我們的猜測沒錯,確實是 cookie 的原因,那么這個 cookie 又是怎么來的呢?
Cookie
多嘗試幾次,大家會發現,不同的請求內容,前面兩個是不會發生改變的,而第三個,結合我們之前的經驗,是不是很像一個時間戳;既然有猜測,咱們就又來嘗試一下,自己構造一個 Cookie post 過去,萬事大吉,哈哈哈哈。
最后附上我的代碼
#/usr/bin/python # encoding:utf-8 # __Author__ = Slwhy import requests import time import random import hashlib #i = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10)) i = str(int(time.time()*1000)+random.randint(1,10)) #o = n.md5("fanyideskweb" + t + i + "aNPG!!u6sesA>hBAW1@(-"); t = raw_input("please input the word you want to translate:") u = 'fanyideskweb' l = 'aNPG!!u6sesA>hBAW1@(-' src = u + t + i + l # u 與 l 是固定字符串,t是你要翻譯的字符串,i是之前的時間戳 m2 = hashlib.md5() m2.update(src) str_sent = m2.hexdigest() ''' i:number from:AUTO to:AUTO smartresult:dict client:fanyideskweb salt:1515462554510 sign:32ea4a33c063d174a069959a5df1a115 doctype:json version:2.1 keyfrom:fanyi.web action:FY_BY_REALTIME typoResult:false ''' head = { 'Accept':'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding':'gzip, deflate', 'Accept-Language':'zh-CN,zh;q=0.9', 'Content-Length':'200', 'Connection':'keep-alive', 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8', 'Host':'fanyi.youdao.com', 'Origin':'http://fanyi.youdao.com', 'Referer':'http://fanyi.youdao.com/', 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36', 'X-Requested-With':'XMLHttpRequest', # 'Cookie': 'YOUDAO_MOBILE_ACCESS_TYPE=1; OUTFOX_SEARCH_USER_ID=833904829@10.169.0.84; OUTFOX_SEARCH_USER_ID_NCOO=1846816080.1245883; fanyi-ad-id=39535; fanyi-ad-closed=1; JSESSIONID=aaaYuYbMKHEJQ7Hanizdw; ___rl__test__cookies=1515471316884' } head['Cookie'] = 'OUTFOX_SEARCH_USER_ID=833904829@10.169.0.84; OUTFOX_SEARCH_USER_ID_NCOO=1846816080.1245883; ___rl__test__cookies='+str(time.time()*1000) # '___rl__test__cookies=1515471316884' data = { 'i': t, 'from':'AUTO', 'to':'AUTO', 'smartresult':'dict', 'client':'fanyideskweb', 'salt':i, 'sign':str_sent, 'doctype':'json', 'version':'2.1', 'keyfrom':'fanyi.web', 'action':'FY_BY_REALTIME', 'typoResult':'false' } s = requests.session() # print data url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' p = s.post(url,data= data,headers = head) print p.text
關于怎么在Python項目中調用有道翻譯接口就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。