首页 > 代码库 > linux下终端使用有道翻译

linux下终端使用有道翻译

linux下面使用终端,有的时候需要查找一个单词,都需要打开浏览器通过网页来查找单词,这样效率会会非常的繁琐,并且也会降低工作效率。

之前刚开始看python文档的时候,看过别人说的一个用python写的在终端下查单词的脚本,当时没记录下来,后来也没找到。

今天本来是想解决我网站的显示的问题,但是想到这个不做了就感觉哪里不对,一股强迫症的感觉。。

自己用python写了一个脚本,用的是有道翻译的api,感谢有道。

使用方法为,python youdao.py  word  ,单词 word为你要查询的单词。

下面贴代码:

import sys
from urllib.request import urlopen
from html.parser import HTMLParser

def get_result(word):
	url = 'http://fanyi.youdao.com/openapi.do?keyfrom=majunzhe&key=27448872&type=data&doctype=xml&version=1.1&q='
	query_url = url + word
	result = urlopen(query_url).read().decode('utf-8')
	return result

class WordResultParser(HTMLParser):
	bHandled = False
	bExplain = False
	data_meaning = ''
	output = ''
	tags = ('phonetic', 'ex', 'key')
	def parse_data(self, data):
		beg_pos = data.rfind('[') + 1
		end_pos = data.find(']', beg_pos, len(data))
		if end_pos == -1:
			end_pos = len(data)
		#print(beg_pos)
		#print(end_pos)
		#print(data)
		self.data_meaning = data[beg_pos:end_pos]

	def handle_starttag(self, tag, attrs):
		if 'basic' == tag:
			self.output += '基本释义:\n'
		elif 'web' == tag:
			self.output += '网络释义:\n'
		elif 'explain' == tag:
			self.bExplain = True
		if tag in self.tags:
			self.bHandled = True

	def handle_endtag(self, tag):
		if 'explain' == tag:
			self.output += '\n'
			self.bExplain = False

	def unknown_decl(self, data):
		if self.bHandled != True:
			return
		self.parse_data(data)
		endstr = '\n'
		if self.bExplain:
			endstr = ' '
		self.output += self.data_meaning + endstr
		self.bHandled = False

def print_results():
	for word in sys.argv[1:]:
		#print('-------------------------------------------------------------')
		# get the query result
		word_result = get_result(word)
		#print(word_result)
		word_parser = WordResultParser()
		word_parser.feed(word_result)
		print(word_parser.output[:-2])
		#print('-------------------------------------------------------------')
print_results()

大致步骤是这样的:

1 首先明白有道翻译api的使用方法,具体步骤可以在官网上面查看,但是使用api之前要申请一个 key。

2 通过python的库来打开url,并通过解析 返回的数据得到查询结果,我使用的是 python 库 HTMLParser来解析数据的。

3 在linux下再进行简单的配置下,就可以直接在像使用其他的命令行来使用这个脚本了。

 这个脚本我设置了一次能查询多个单词的功能。

下面是在linux下面的配置步骤:

1 首先把上面的python代码存成一个名为 youdao.py的文件,我把这个文件放置在 ~/Documents 文件夹下

2 再在 ~/  文件夹下创建一个 脚本 , 文件命名为 youdao

#!/bin/bash
while [ $# -ne 0 ]
do
	python Documents/youdao.py $1
	shift
done
其中的while语句是用来一次查询多个单词使用的

3 当完成了上述的步骤之后,就可以./youdao  xxx, 这样的查询单词了。

但是我们这样用着肯定不方便的。那就将这个脚本链接到/usr/bin 下。

sudo ln -s ~/youdao /usr/bin/youdao

4 完成。

下面就可以尽情在命令行下面查询单词了,没有添加查询句子的功能,觉得没啥用,一般都是查一个单词的,一次查多个单词的功能还是为了以防万一。

哈哈

个人网站为:www.majunzhe.com