如何編寫 Alfred 使用的 Workflow,需要掌握哪些知識?
有沒有alfred workflow的編寫的教程。我想做一個百度,維基百科的workflow 應該怎麼編寫。
因為看到 @hzlzh回答的截圖裡有個自己寫的Farbox同步 workflow,所以忍不住回答一下。
我認為Alfred最成功的地方,是為繁瑣的命令執行操作,提供了一種無比優美簡潔的使用方式,而且還提供了門檻很低的擴展框架,讓用戶充分發揮自己的想像力。回到問題本身,分享下我自己的經歷。
我學習的方式主要通過參考別人已有的workflow。workflow具體做的事情可能千差萬別,但是有很多workflow的實現邏輯是相似的,比如我之前想寫一個workflow用於切換mac的全局proxy:Proxy Toggle ,就很大程度參考了另一個用於切換Wi-Fi開發的workflow:Wi-Fi toggle。Alfred有個很好的地方,就是你都能在alfred中看到你所使用workflow的具體實現,也就是它們對你都是開源的,至少我用過的workflow都可以。大部分workflow直接在alfred的workflows選項卡下都能看到,有部分workflow可能調用一些腳本文件,你也可以進入對應workflow文件夾下打開具體的腳本文件(可以通過右鍵workflow -&> Show in Finder 打開workflow的文件夾)
我認為理解Afred workflow的幾個組成部分是入門的關鍵,包括Triggers、Inputs、Actions、Outputs。
Triggers不是必備的,常用來設置快捷鍵開啟某個Workflow。
Inputs定義了你在Alfred輸入框中輸入對應的keyword相應的顯示內容。以我常用的 @icyleaf 的有道翻譯workflow為例,輸入「yd workflow」下面所顯示的結果都是Inputs中定義的。Inputs中以一個約定的xml格式輸出文本就能被Alfred正確顯示,上圖的顯示對應的xml代碼為:
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
因為中文字元有轉碼,所以看起來有點像亂碼:( ,這裡跟微信公眾帳號的工作方式很想吧。
Actions對應選中項後執行的操作,比如在我的Proxy Toggle中,用戶執行全局代理切換的工作腳本就寫在actions中。
Outputs一般用於顯示操作的結果,提示操作成功與否,以Post Notification較為常見,通過Mac的notification center提示。
以有道翻譯為例,workflow中各部分示意圖如下:
希望以上能對想入門的同學有幫助,這裡有我自己寫或修改過的幾個workflow 嘗試給自己寫Alfred Work,都是比較簡單的。我覺得workflow實現複雜與否不重要,關鍵在於使用頻繁,是否能提高效率。
關鍵還是多實踐,了解workflow工作方式之後,寫workflow也就跟開發其他腳本一樣了。官方並沒有給出詳細的 Alfred Workflow 撰寫教程,原因是寫一個 Workflow 實際上門檻是很低的,這一點也類似微信公眾賬號的易搭建性。可以看到我所維護的 Alfred 2 Workflow List 已經收集到來自全世界開發者的400多個 Workflows,他們大部分是使用一門了解的語言來書寫的。包括:
bash, zsh, PHP, Ruby, Python, Perl, Apple Script
總的來說,多看看其他 Workflow 的源碼(都是開源的,大部分Github上有託管),就可以快速上手,開始行動吧。
PS1:所有已經提交到 List 里的 Workflow 源碼都可以在 Github 里查到:
https://github.com/hzlzh/AlfredWorkflow.com/tree/master/Sources/WorkflowsPS2:官方的論壇里,全球的開發者和用戶都很活躍,如果你是普通用戶,也可以把你的好 idea 發出來,很多開發者順手就給做出來了。Alfred App Community Forum附帶我寫的wiki查詢workflow代碼,py版本,代碼簡化過,import部分可能有多餘內容
用了python的alfred庫:nikipore/alfred-python · GitHub
效果:
代碼:
# -*- coding: utf-8 -*-
import urllib2
import urllib
import cookielib
import json
import HTMLParser
import re
import alfred
def unescape_html( html ):
html_parser = HTMLParser.HTMLParser()
return html_parser.unescape( html )
def search_wiki( query ):
args = { "action":"query", "list":"search", "srprop":"timestamp", "format":"json", "srsearch":query }
response = json.loads( urllib2.urlopen("https://zh.wikipedia.org/w/api.php?"+urllib.urlencode(args)).read() )
wiki = response["query"]["search"]
result = []
default_title = u"更多詳細結果……"
if len(wiki) == 0:
default_title = u"找不到結果,請使用網頁查詢……"
default_link = "https://zh.wikipedia.org/w/index.php?" + urllib.urlencode({"search":query})
result.append( alfred.Item( {"uid":alfred.uid("0"), "arg":default_link}, default_title, default_link, ("wiki.png") ) )
for w in wiki:
link = u"https://zh.wikipedia.org/wiki/" + urllib.quote( w["title"].encode("utf8") )
result.append( alfred.Item( {"uid":alfred.uid(w["title"]), "arg":link},
unescape_html(w["title"]), link, ("wiki.png")) )
return result
def main():
( param, query ) = alfred.args2()
result = search_wiki( query )
alfred.write( alfred.xml(result) )
if __name__ == "__main__":
main()
我正好寫了一個 Alfred 插件開發指南 .
你可以看看.
Alfred workflow 開發指南@hzlzh 你的Workflow List 頁面太長了!!! 載入完以後,瀏覽器壓力太大,卡啊 ,順便我怎麼給你提交我的這個workflow?
看看這篇文章(Alfred Workflows for Advanced Users),你就會了。總結思想是生成一個XML,輸出來就好了。
我用PHP寫了一個基於百度API的天氣預報,PHP的話會有一個封裝好的類,jdfwarrior/Workflows 路 GitHub
很簡單的。
附圖我做的workflow:wensonsmith/weather-workflow GitHub
推薦使用這個python庫 http://www.deanishe.net/alfred-workflow/index.html
作者還提供了兩篇教程講解如何使用它,簡單易學
我用這個庫寫了些workflow,例如 https://github.com/hujiaweibujidao/Gank-Alfred-Workflow
個人寫的 JS 版本的 alfred flow . 可自動生成可用的代碼變數
https://github.com/xudaolong/CodeVar
# CodeVar
開發基於 `Javascript`、 `alfy`、`有道翻譯api`;# 使用
下載workflows文件並運行;接下來的版本會提供`詞根`、`其他變數風格`進行更新;如果有時間的話...謝謝使用...# 效果
&> 小駝峰命名法:xt&> 下劃線命名法:xh
&> 常量命名法:cl
我剛好寫好了一個 百度,維基百科的workflow, 請參考 Louiszhai/alfred-workflows 中的Search workflow寫法. 除此之外, 還有任意文本生成二維碼的workflow(最後一個). 喜歡請star
寫了個簡易教程:Alfred Workflow教程與實例實現了兩個實例:
- CDto: 打開Terminal並轉到任意文件夾或文件所在目錄,使用 bash+osascript 實現
- Effective IP: 查詢本機和外網IP地址,解析任意URL和域名的IP地址,同時進行歸屬地和運營商查詢,使用 python 實現
這裡有個教程:如何為alfred編寫workflow可以看看
國內版Pinboard 即網路標籤,既可收藏自己的書籤,也可以查看別人收藏的公開的書籤
網路書籤
天天基金的workflow 可以查看天天基金的實時數據,對於買基金的alfred黨來說,無疑又是一利器
天天基金
服務jrs
女漢子零技術基礎,剛入門Alfred求神器的基礎教程~
推薦閱讀:
※為何 Android 一般的升級不像 Windows 一樣只需打補丁?
※802.11協議中為什麼DCF比PCF應用更廣泛?
※中病毒是一種什麼體驗?
※mac裝雙系統的利弊?
※為什麼 Mac 上沒有像 Windows 上搜狗那樣優秀的輸入法?