利用沪江小D做个词典小工具

  因为经常在Linux下阅读一些英文资料,而Linux下目前我还找不到什么翻译软件可用,遇到不懂的单词往往要打开Google Translate翻译。开个浏览器,new个标签页,输入网址,再输入单词。啊!我已经对这一系列事务烦不胜烦。刚好这段时间在一直在弄Python,于是便想用python做个翻译的小gadget。网上翻来覆去,实在找不到什么合适的可以下手。Google Translate的API貌似关闭了吧,想直接从网页上扒数据下来但是Google Translate的翻译是用Ajax做的,目前我真心扒不下来啊。有道在线翻译那个网页二逼成什么样我就不想多说了(连申请个key都没法子)。必应和雅虎的babelfish的翻译质量略差啊。翻来覆去最终圈定为沪江小D,虽然只有词典功能,但是够用了。方法也很简单,直接域名里添加要查询的单词就OK了。具体见代码(Python2.x):

(注:需要安装pyquery)

#!/usr/bin/env python
#
-*- coding: utf-8 -*-

import urllib
import sys
from pyquery.pyquery import PyQuery   

URL = 'http://dict.hjenglish.com/app/w/'

class NoneError(Exception):
pass

def tr(itext):
if not itext:
raise NoneError
global URL
url = URL + urllib.quote(itext)
resp = urllib.urlopen(url)
html = resp.read()
resp.close()
return extract_otext(html)

def extract_otext(html):
pqhtml = PyQuery(html)
pron = pqhtml('.trsf')
mean = pqhtml('#panel_comment')
rs = {}

# 提取单词发音部分
if pron:
if pron.size() == 1:
s = '%s' % pron.eq(0).text()
else:
s = '%s: %s; ' % (pron.eq(0).attr('title'), pron.eq(0).text())
s += '%s: %s ' % (pron.eq(1).attr('title'), pron.eq(1).text())
rs['pron'] = s

# 提取单词意义部分
if mean:
s = mean.html().replace('<br />', '').replace('&#13', '')
rs['mean'] = s

return rs

if __name__ == '__main__':
print """
Welcome to Leon Hui's translator gadget!

This gadget is based on the HJ English, so I name it hj!

(Only words supported. =_=!)
"""
while True:
try:
itext = raw_input('>>> ').strip()
itext = itext.split()[0] if itext else None
rs = tr(itext)
except NoneError:
continue
except EOFError:
print '\r'
sys.exit(0)
except KeyboardInterrupt:
print '\r'
continue
except IOError, e:
print 'Error: %s' % e
continue
else:
print rs['pron'] if rs.get('pron') else None
print rs['mean'] if rs.get('mean') else None

再给这份py文件做个软链。

cd /usr/local/bin
sudo ln -s /full/path/to/your/scrpt hj
sudo chmod +x hj

好了,以后便可以直接Ctrl+Alt+T,hj,输入单词这三步完成翻译,唉,起码偶觉得方便了很多啊。

然后嘛,代码质量不敢说,哈哈,能用就行= =!

附上图片:

posted @ 2012-01-26 11:12 cassvin 阅读(...) 评论(...) 编辑 收藏