最近使用有道翻译的 workflow 老是翻译不了,多是 appKey 失效了或者超过调用上限,因此打算本身实现一个。python
打开 Alfred3 的 Preferences,选择 Workflows。
下方有个+
,单击后选择 Blank Workflow。完成基本信息的填写。
而后右击添加:Inputs
->Script Filter
。web
/bin/bash
或者 /bin/zsh
with input as {query}
脚本填入python translate.py {query}
, translate.py 是本身编写的 python 脚本。
json
能够找一个合适的图标拖到右上角图标的位置。api
点击 Cancel 左边的图标,进入到 workflow 所在的目录。
或者右击 workflow 选择 Open in Finder
bash
若是须要将本身编写的 workflow 分享给别人使用,则须要将 Alfred-Workflow 安装到 workflow 所在的目录。app
# 进入到 workflow 所在目录 pip install Alfred-Workflow --target=.
有道翻译的 api 如今是计费的,申请实例以后能够得到100元体验金,那就先用着吧。
先打开http://ai.youdao.com/,而后注册登陆。接下来:dom
# -*- 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
进行测试。
post
若是出现错误,能够在有道的 API 文档中查询错误码列表,如上108表明的是appKey无效。
使用有效的appKey 后,效果以下:
测试
参考连接:.net