Ubuntu下的alfred替代软件以及有道词典插件

习惯于Mac下alfred的使用后,换成Ubuntu或者Windows会时常想起这个快捷好用的软件,平常的计算器,应用搜索,甚至于查询天气,查字典,查api等都很顺手。在Windows下,可以使用Wox进行替代,在Ubuntu下可以使用Albert进行替代。

但是由于使用人数不是很多,插件不是非常完备,于是尝试从alfred抄过来一个查有道词典的插件。

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# -*- coding: utf-8 -*-

"""Translate text using Youdao Translate API.
Usage: yd <text>
Example: yd hello
"""

from albertv0 import *
import json
import urllib.request
import urllib.parse
import hashlib
import locale

__iid__ = "PythonInterface/v0.1"
__prettyname__ = "Youdao Translate"
__version__ = "0.1"
__trigger__ = "yd " # 触发命令
__author__ = "mark"
__dependencies__ = []

ua = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36"
urltmpl = "http://fanyi.youdao.com/openapi.do?keyfrom=SeekBetterMe&key=164530784&type=data&doctype=json&version=1.1&q=%s"

iconPath = iconLookup('config-language') # 自定义图标
if not iconPath:
iconPath = ":python_module"

def handleQuery(query):
if query.isTriggered:
def getItem(text, subtext=''): # 显示的项
item = Item(
id=__prettyname__,
icon=iconPath,
completion=query.rawString,
text=text,
subtext=subtext
)
item.addAction(ClipAction("Copy translation to clipboard", text)) # 项支持的操作
return item
txt = query.string.strip()
if txt:
url = urltmpl % ( urllib.parse.quote_plus(txt) )
req = urllib.request.Request(url, headers={'User-Agent': ua})
with urllib.request.urlopen(req) as response:
items = [] # 待返回的列表
data = json.load(response)
if 'basic' in data:
if 'phonetic' in data['basic']: # 读音
items.append(getItem('/' + data['basic']['phonetic'] + '/'))
for exp in data['basic']['explains']: # 释义
items.append(getItem(exp, 'basic'))
elif 'translation' in data: # 句子翻译
items.append(getItem(data['translation'][0], 'translation'))
if 'web' in data: # 网络释义
for w in data['web']:
value = list(set(w['value'])) # 去重
items.append(getItem(w['key']+': '+'; '.join(value[:2]), 'web'))
return items
else:
return getItem("Enter a translation query")

由于之前在Mac下是直接使用写好的插件的,没有看过代码,这次查看了一下发现,使用了某位大佬之前注册的youdao/openapi的账号,目前这个账号已经停止注册并且使用有道智云代替,相当于已经没有免费的查询接口了(当然自己写爬虫也是没有问题的)。简单起见,依旧使用了某位大佬的账号(侵删hzypp@sina.cn)。效果如下,可以查看音标还蛮方便的。

1542215658805