返回首页
0
0

Terminal 版的google translate

xiaoxin 发表于 2012年10月05日 15:33 | Hits: 2314
Tag: 一些作品

每次看英文文档的碰上生词都要去打开一次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

原文链接: http://xiaoxins.com/archives/503

0     0

评价列表(0)

返回首页