最近使用有道翻譯的 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