Alfred 是 Mac 下一款強悍的系統增強工具,可以快速啟動+搜索本地和網絡任意內容。購買其付費版本的 Power Pack 還能啟用 Workflow 功能,使用一門常用的腳本開發語言就能編寫自己的工作流來實現各種有趣的插件。(這里有國人收集的很多現成的 Workflow 插件下載)
今天心血來潮花了17英鎊購買了 license,搜刮了幾個自己可能用到的腳本,順便研究了下如何進行 Alfred 腳本編寫。只需簡單的 PHP 就能完成一個 workflow。
這里以編寫一個 Alfred 里的日文單詞翻譯器為例,簡單介紹下流程。
基本原理:獲取用戶在 Alfred 內輸入的內容(日文單詞) -> POST 到百度云提供的翻譯 API 獲取翻譯結果 -> 解析結果 -> 調用 Alfred Workflow 的方法輸出成 Alfred 格式。
完成之后的效果是這樣的:
開發實現流程:
一、創建新的 Workflow
二、填寫 Workflow 信息
隨便寫寫即可。
三、設置腳本參數
點擊空白 Workflow 右上角的加號按鈕,Inputs -> Script Filter,彈出如下窗口。
- Keyword:激活某個 Workflow 的關鍵詞,輸入之后加參數即可完成整套動作。勾選后面的“with space”并在下拉框選擇“Argument Required”代表必須附帶參數。(因為我們是查日文單詞,如果壓根不給出單詞那還玩個球)
- Place Hoder Title:輸入關鍵詞后出現的標題,告知用戶現已啟用的 Workflow。
- Place Holder Subtext:附帶字符串,隨便說點什么。
- “Please wait” Subtext:執行命令時(例如從網絡獲取數據時)顯示的文字。
- Language:因為我用PHP,所以選 /user/bin/php。
- Escaping 不需改動。
- 圖標:隨便選一個圖拖拽到“Drop an icon above.”區域。我順便將這個 icon 保存到了工程目錄下,命名為 icon.png(下文腳本需要)。
四、復制 PHP 庫文件
點擊 Save 按鈕上方的 Open workflow folder,將進入當前 Workflow 的本地工程目錄。切換到上層,再進入其下的其他目錄下復制一個 workflow.php 回來。(解析 PHP 腳本所需的庫文件,默認在工程目錄下不會有,所以需要從現有的其他工程目錄里拷一個,如果找不到可以直接從這里取)
五、Script 區域輸入代碼
因為比較簡單,所以直接上代碼(你也可以從這里獲取):
require('workflows.php');
// Settings
define('TRANS_QUERY_URL','http://openapi.baidu.com/public/2.0/bmt/translate?client_id=Vn8ockFtPxNM655RP4iVWixU&from=auto&to=auto&q=');
// Main Phrase
$wf = new Workflows();
$query = "{query}";
$json = json_decode($wf->request(TRANS_QUERY_URL.$query));
// Fetch Result
foreach ($json->trans_result as $translation):
$result['src'] = $translation->src;
$result['dst'] = $translation->dst;
$wf->result(1, 'http://www.baidu.com',$result['dst'],$query,'icon.png','yes');
endforeach;
// Export Results
echo $wf->toxml();
六、設置動作
點擊 Save 保存上述腳本。
返回編輯區,點擊右上角加號,選擇“Actions->Open URL”,在彈出窗口的 “URL:”里填入“{query}”,保存。將編輯區出現的兩個模塊拖動連接。
至此整個過程完畢。
現在,激活 Alfred(我設置為雙擊 Command 鍵),輸入“jp [日文單詞]”,就能調用百度翻譯的 API 查看到單詞釋義了。
另外我還做了個游戲王卡牌查詢的 Alfred 腳本,代碼在此。
整體說來,Alfred Workflow 的編寫跟微信公眾平臺開發比較類似,要做的無非就是輸入什么、如何處理及輸出什么,沒有特別復雜高深的東西,主要還是看想象力。