利用google翻译编写shell进行翻译

多多练习一些小工具的编写

当我一心钻在编程里的时候,什么东西不会就上网找,其实真的很难开阔你的思路和眼界,因此从今日起要多多放开思想,有空编写一些实用的小工具,也是一种学习的好途径。

拿来主义

参见xiaoxins的Terminal 版的google translate

拿来容易,但要注意到问题

用了之后,发现

  • translate.google.com会跳到translate.google.cn,果断修改;
  • 其次当翻译的句子的单词数超过7个时,后面单词的翻译就会有问题,经过检查是key=$key"%20"$(eval echo "\$$arg")读取参数时不对,对于$10会被读作$1”0”,不过这个问题我没有解决,而是用了别的方法。

具体代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/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.cn/"
AcceptEncoding="gzip,deflate"
AcceptCharset="UTF-8,*;q=0.5"
Accept="text/html,*/*;q=0.1"

#query
#这里把第三个参数开始都视为要翻译的内容
sl=$1;tl=$2
key=$3
until [ $# -eq 3 ]
do
key=$key"%20"$4
shift
done
echo "Querying: "`echo $key|sed -e 's/%20/ /g;'`

#这里获取网页并把结果解压
url="http://translate.google.cn/?sl=$sl&tl=$tl&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
小鹏 wechat
公众号:数据Man
0%