每次看英文文档的碰上生词都要去打开一次google translate,在墙内打开google的网站又不是那么给力,而且也用不到星际译王这种大部头。刚好最近在看学写shell脚本,就写了个terminal版的google translate,纯当练习使用shell脚本。
原理很简单,就是伪装成浏览器,在url里带上关键词然后去请求页面,将结果解析出来就ok了
#!/usr/bin/env bash if [ "$#" -lt "3" ]; then echo 'usage translate ftom_lang to_lang word' echo 'Ex: gtrans en zh-cn hehe' exit fi #headers #这堆http的请求头还是有必要添加的,不然给你返回些意想不到的结果出来 UserAgent="Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.81 Safari/537.1" Referer="http://translate.google.com/" AcceptEncoding="gzip,deflate" AcceptCharset="UTF-8,*;q=0.5" Accept="text/html,*/*;q=0.1" #query #这里把空格替换掉,这段代码写的貌似不是很优雅~~ key=$3 for arg in `seq 4 $#` do key=$key"%20"$(eval echo "\$$arg") # str=$str$($arg) done echo "Querying: "`echo $key|sed -e 's/%20/ /g;'` #这里获取网页并把结果解压 url="http://translate.google.com/?sl=$1&tl=$2&text=$key" content=`curl -s \ -H "User-Agent:$UserAgent"\ -H "Referer:$Referer"\ -H "Accept-Encoding:$AcceptEncoding"\ -H "Accept-Charset:$AcceptCharset"\ -H "Accept:$Accept"\ "$url"\ |gunzip` #用sed把我要的东西过滤出来 charset=`echo $content|sed -e 's/.*<meta.*charset=\([^";]*\)[";].*/\1/g'` result_box=`echo $content|sed -e 's/.*<span.*id=result_box[^>]*>[^<]*<span[^>]*>\([^<]*\)<.*/\1/g'` echo 'Result: '$result_box |