最近使用有道翻譯的 workflow 總是翻譯不了,可能是 appKey 失效了或者超過調用上限,是以打算自己實作一個。
建立 workflow
打開 Alfred3 的 Preferences,選擇 Workflows。
下方有個
+
,單擊後選擇 Blank Workflow。完成基本資訊的填寫。
然後右擊添加:
Inputs
->
Script Filter
。
- Keyword 輸入 yd,代表我們用'yd' 激活我們的 workflow。
- 寫上合适的提示文字
- Language 選擇
或者/bin/bash
/bin/zsh
- 選擇
with input as {query}
- 腳本填入
, translate.py 是自己編寫的 python 腳本。python translate.py {query}
Python 編寫一個有道翻譯的 workflow 教程 - 可以找一個合适的圖示拖到右上角圖示的位置。
安裝 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 後,效果如下:
參考連結:
- http://www.deanishe.net/alfred-workflow/
- 有道智雲
┆涼┆暖┆降┆等┆幸┆我┆我┆裡┆将┆ ┆可┆有┆謙┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆臨┆你┆的┆還┆沒┆ ┆來┆ ┆是┆來┆遜┆沒┆些┆ ┆雁┆終┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆沒┆ ┆你┆
┆ ┆這┆ ┆試┆方┆在┆逃┆ ┆會┆ ┆在┆ ┆清┆來┆準┆ ┆沒┆有┆ ┆沒┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆這┆ ┆晨┆ ┆的┆ ┆有┆來┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆這┆ ┆裡┆ ┆沒┆ ┆殺┆ ┆來┆ ┆ ┆來┆