roojay520 / bobplugin-google-translate

Bob 的一个Google 翻译插件
MIT License
395 stars 11 forks source link

新版 RPC 接口 X-Goog-BatchExecute-Bgr 缺失会导致部分翻译结果与官网不一致 #12

Closed lanjuzi closed 2 years ago

lanjuzi commented 3 years ago

RPC接口请求时header中有个 X-Goog-BatchExecute-Bgr,如果这个值不正确就会导致翻译的结果不一样。

比如翻译 今天天气真好,阳光明媚。

旧接口或者新的RPC接口加密串正确时候的结果是 The weather is very nice today, the sun is shining brightly.

新的RPC接口加密串不正确的时候是 Today, the weather is so good, sunny.

roojay520 commented 3 years ago

感谢反馈, 有空了我去研究下

klaus2015 commented 3 years ago

大佬,有解决这个参数吗

roojay520 commented 2 years ago

@klaus2015 之前看了下网页的 JS 代码,暂时还没找到这个参数的生成算法

lanjuzi commented 2 years ago

我之前看了下,首页 html 里面有个<script ...>window.WIZ_global_data = {...}</script>,可以提取出来手动执行,主要是用到的 WIZ_global_data.mnsUbf

var arr = JSON.parse('[' + WIZ_global_data.mnsUbf.substring(4));
var key = arr[0]; // 签名的 key
var botguardScript = arr[5][5]; // botguard 的脚本

通过初始化脚本后拿到签名的方法,不过改动谷歌翻译改动频繁,这个初始脚本的方法感觉都经常变动。

以前可以通过如下方式进行初始化

// 需要在浏览器环境执行
;(0, eval)(botguardScript); // 这里不能直接 eval(botguardScript)
var bg = new botguard.bg(key);
bg.invoke(
  function (sign) {
    // var unk = parseInt(Math.random()*3000); // 不知道具体意义
    // [sign,null,null,unk,null,null,null,0]  // 得到 X-Goog-BatchExecute-Bgr 的参数
  },
  true,
  { mgGpzd: text } // text 为翻译的内容
)
roojay520 commented 2 years ago

@lanjuzi @klaus2015 尝试 DEBUG 网页版的脚本,还是没搞定这个参数:(,等大佬一个 PR。目前利用移动端的网页翻译更新了一个 v0.5.0 版本,更新后选择 混合版接口就可以使用 image

lanjuzi commented 2 years ago

@lanjuzi @klaus2015 尝试 DEBUG 网页版的脚本,还是没搞定这个参数:(,等大佬一个 PR。目前利用移动端的网页翻译更新了一个 v0.5.0 版本,更新后选择 混合版接口就可以使用 image

辛苦了!我先关闭这个 issue。

klaus2015 commented 2 years ago

@lanjuzi

var bg = new botguard.bg(key);

botguard.bg 点bg的时候会报错,显示没有bg方法。。

lanjuzi commented 2 years ago

@lanjuzi

var bg = new botguard.bg(key);

botguard.bg 点bg的时候会报错,显示没有bg方法。。

这个已经失效了