前言
google翻译没有现成的接口, 而大部分别人写的调用google接口都是用python, 于是我把python的改成js.
分析
google翻译接口是get请求, 对cookie没什么要求. 唯一的难点就是tkk(token key)和tk(token). 谷歌会给我们一个tkk
, 我们需要用tkk
和需要翻译的字符来调用google的解密函数获取tk
, 再携带该tk
去请求.
整个过程是非常清晰简单的, 而且网上大神已经把解密函数贴出来了, 我们只需要拿来用就OK.
实现
获取tkk
async updateTkk(){ const url = 'https://translate.google.cn' const res = await axios({ method:'GET', url, headers:GoogleTranslater.headers }) const re = /tkk:'([0-9]+.[0-9]+)'/ const reRes = re.exec(res['data']) if(!reRes){ throw new Error('tkk更新失败!') } this.tkk = reRes[1] return reRes[1] }
构建请求url
_constructUrl(){ let url = GoogleTranslater.baseUrl+ '?' for(let key in GoogleTranslater.queryStrObj){ if(typeof(GoogleTranslater.queryStrObj[key]) === 'object'){ url = url + "dt=" + GoogleTranslater.queryStrObj[key].join('&dt=') + "&" continue } url = url +
${key}=${GoogleTranslater.queryStrObj[key]}&
} return url }(www.hedaoshe.com)调用解密函数根据tkk和翻译字符获取tk
构建请求,调用翻译api接口
async traslate(q,langTo=langToEumn.ENGLISH){ // await this.updateTkk() GoogleTranslater.queryStrObj['q'] = encodeURI(q) GoogleTranslater.queryStrObj['tk'] = getTk(q,this.tkk) GoogleTranslater.queryStrObj['tl'] = langTo const url = this._constructUrl() const res = await axios({ method:'GET', headers:GoogleTranslater.headers, url, }) let translation = '' for(let sentence of res['data'][0]){ if(!sentence[0]){ continue } translation = translation + sentence[0] } return translation }
结尾
根据以上几个步骤就能完成google翻译接口的调用, 完整代码请点击我下载