Python 編寫一個有道翻譯的 workflow 教程

最近使用有道翻譯的 workflow 老是翻譯不了,多是 appKey 失效了或者超過調用上限,因此打算本身實現一個。python

建立 workflow

打開 Alfred3 的 Preferences,選擇 Workflows。
下方有個+,單擊後選擇 Blank Workflow。完成基本信息的填寫。
而後右擊添加:Inputs->Script Filterweb

  1. Keyword 輸入 yd,表明咱們用'yd' 激活咱們的 workflow。
  2. 寫上合適的提示文字
  3. Language 選擇 /bin/bash 或者 /bin/zsh
  4. 選擇with input as {query}
  5. 腳本填入python translate.py {query}, translate.py 是本身編寫的 python 腳本。
    json

  6. 能夠找一個合適的圖標拖到右上角圖標的位置。api

安裝 Alfred-Workflow 庫:

點擊 Cancel 左邊的圖標,進入到 workflow 所在的目錄。
或者右擊 workflow 選擇 Open in Finder
bash

若是須要將本身編寫的 workflow 分享給別人使用,則須要將 Alfred-Workflow 安裝到 workflow 所在的目錄。app

# 進入到 workflow 所在目錄
pip install Alfred-Workflow --target=.

申請 appKey

有道翻譯的 api 如今是計費的,申請實例以後能夠得到100元體驗金,那就先用着吧。
先打開http://ai.youdao.com/,而後註冊登陸。接下來:dom

  1. 天然語言翻譯=》翻譯實例=》建立實例,選擇文本翻譯。
  2. 應用管理=》個人應用=》建立應用,接入方式選擇API。建立成功後綁定服務。
  3. 點擊應用的名稱,進入應用詳情頁面,能夠看到用來調用 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進行測試。
post

若是出現錯誤,能夠在有道的 API 文檔中查詢錯誤碼列表,如上108表明的是appKey無效。
使用有效的appKey 後,效果以下:
測試

參考連接:.net

相關文章
相關標籤/搜索