最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个。
打开 Alfred3 的 Preferences,选择 Workflows。
下方有个+
,单击后选择 Blank Workflow。完成基本信息的填写。
然后右击添加:Inputs
->Script Filter
。
/bin/bash
或者 /bin/zsh
with input as {query}
python translate.py {query}
, translate.py 是自己编写的 python 脚本。
点击 Cancel 左边的图标,进入到 workflow 所在的目录。 或者右击 workflow 选择 Open in Finder
如果需要将自己编写的 workflow 分享给别人使用,则需要将 Alfred-Workflow 安装到 workflow 所在的目录。
# 进入到 workflow 所在目录
pip install Alfred-Workflow --target=.
有道翻译的 api 现在是计费的,申请实例之后可以获得100元体验金,那就先用着吧。 先打开http://ai.youdao.com/,然后注册登录。接下来:
# -*- coding:utf8 -*-
import sys
from workflow import Workflow3, web
def translate(wf):
import md5
import random
# 此处修改为你的应用 ID
appKey = '024b716exxxxxxxx'
# 此处修改为你的应用密钥
key = 'XWLYKxGoMK7474Ux1NXFxxxxxxxxxxxx'
query = sys.argv[1]
salt = str(random.randint(1, 65536))
sign = appKey + query + salt + key
m1 = md5.new()
m1.update(sign)
sign = m1.hexdigest()
params = dict(appKey=appKey, q=query, salt=salt, sign=sign)
r = web.get('https://openapi.youdao.com/api', params)
r.raise_for_status()
res = r.json()
if res.get('web'):
posts = res['web']
for post in posts:
wf.add_item(title=u" ".join(post['value']), subtitle=post['key'])
else:
wf.add_item(title=u"No result", subtitle="errorCode:"+res["errorCode"])
wf.send_feedback()
if __name__ == "__main__":
wf = Workflow3()
sys.exit(wf.run(translate))
保存代码后,可以打开 workflow 的 debug,输入 yd hello
进行测试。
如果出现错误,可以在有道的 API 文档中查询错误码列表,如上108代表的是appKey无效。 使用有效的appKey 后,效果如下: