最近使用有道翻譯的 workflow 總是翻譯不了,可能是 appKey 失效了或者超過調用上限,所以打算自己實現一個。
創建 workflow
打開 Alfred3 的 Preferences,選擇 Workflows。
下方有個+
,單擊后選擇 Blank Workflow。完成基本信息的填寫。
然后右擊添加:Inputs
->Script Filter
。
-
Keyword 輸入 yd,代表我們用'yd' 激活我們的 workflow。
-
寫上合適的提示文字
-
Language 選擇
/bin/bash
或者/bin/zsh
-
選擇
with input as {query}
-
腳本填入
python translate.py {query}
, translate.py 是自己編寫的 python 腳本。
-
可以找一個合適的圖標拖到右上角圖標的位置。
安裝 Alfred-Workflow 庫:
點擊 Cancel 左邊的圖標,進入到 workflow 所在的目錄。
或者右擊 workflow 選擇 Open in Finder
如果需要將自己編寫的 workflow 分享給別人使用,則需要將 Alfred-Workflow 安裝到 workflow 所在的目錄。
# 進入到 workflow 所在目錄
pip install Alfred-Workflow --target=.
申請 appKey
有道翻譯的 api 現在是計費的,申請實例之后可以獲得100元體驗金,那就先用着吧。
先打開http://ai.youdao.com/,然后注冊登錄。接下來:
- 自然語言翻譯=》翻譯實例=》創建實例,選擇文本翻譯。
- 應用管理=》我的應用=》創建應用,接入方式選擇API。創建成功后綁定服務。
- 點擊應用的名稱,進入應用詳情頁面,可以看到用來調用 api 的應用ID 和應用密鑰。
編寫 translate.py
# -*- 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 后,效果如下:
參考鏈接: