使用wget获取谷歌翻译的结果

zjh*_*hui 2 linux bash wget

每一个人.我想写一个bash脚本来使用终端的google翻译并将英文翻译成中文.我的计划是首先使用wget来翻译英语,然后使用sed来获得结果.所以我用
wget -qO- --header="Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" --header="Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3" --header="Accept-Encoding:gzip,deflate,sdch" --header="Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4" -U "Mozilla/5.0 (X11; Linux i686) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.27 Safari/536.11" http://translate.google.cn/#en/zh-CN/hello | gunzip > out.html.
我也试过了wget -U "Mozilla/5.0" http://translate.google.cn/#en/zh-CN/hello.
他们的结果似乎都不是我想要的,因为我??从结果中找不到中文.
我有什么问题?

小智 6

你做错了的是,你实际上只是从服务器请求http://translate.google.cn/而不是http://translate.google.cn/#en/zh-CN/hello.这是因为哈希之后的部分没有被发送到服务器并且只应该被浏览器使用.Google使用此部分使用Javascript发出翻译请求.

要获得翻译,您需要向该页面上的Javascript使用的URL发出请求.像这样的东西会起作用:

curl -A "Mozilla/5.0" 'http://translate.google.com/translate_a/t?client=t&text=hello&hl=en&sl=en&tl=zh-CN&ie=UTF-8&oe=UTF-8&multires=1&prev=btn&ssel=0&tsel=0&sc=1'
Run Code Online (Sandbox Code Playgroud)

上一个命令将打印以下结果:

[[["??","hello","N? h?o",""]],[["interjection",["?"],[["?",["hello","hey"],,0.0087879393]]]],"en",,[["??",[5],0,0,1000,0,1,0]],[["hello",4,,,""],["hello",5,[["??",1000,0,0],["??",0,0,0],["???",0,0,0],["???",0,0,0],["?",0,0,0]],[[0,5]],"hello"]],,,[["en"]],6]
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用sed获取结果,如下所示:

curl -A "Mozilla/5.0" 'http://translate.google.com/translate_a/t?client=t&text=hello&hl=en&sl=en&tl=zh-CN&ie=UTF-8&oe=UTF-8&multires=1&prev=btn&ssel=0&tsel=0&sc=1' | sed 's/\[\[\["\([^"]*\).*/\1/'
Run Code Online (Sandbox Code Playgroud)

但是,正如其他人所提到的,你不应该使用它来滥用翻译服务,除了实验或CLI-badassery之外,你应该(并且可能不得不)使用谷歌翻译API来避免让自己陷入困境.谷歌监控使用情况,并且肯定会发现任何滥用其服务的企图.

PS:我没有资格提供法律建议,我上面写的关于我认为"不滥用服务"的内容是100%个人意见,所以请不要把它作为最终决定权.