標籤:

如何編寫 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代碼為:

&
&
&
工#x4F5C;#x6D41; ["w#x259;:k,fl#x259;u]&
翻#x8BD1;#x7ED3;#x679C;&
&icon.png&
&
&
&n. #x5DE5;#x4F5C;#x6D41;#xFF0C;#x5DE5;#x4F5C;#x6D41;#x7A0B;&
简#x660E;#x91CA;#x4E49;&
&icon.png&
&
&
工#x4F5C;#x6D41;, #x5DE5;#x4F5C;#x6D41;#x6280;#x672F;, #x5DE5;#x4F5C;#x6D41;#x7A0B;&
网#x7EDC;#x91CA;#x4E49;#xFF1A;Workflow&
&icon.png&
&
&
工#x4F5C;#x6D41;#x7BA1;#x7406;, #x6D41;#x7A0B;#x7BA1;#x7406;, #x5DE5;#x4F5C;#x6D41;#x7A0B;#x7BA1;#x7406;&
网#x7EDC;#x91CA;#x4E49;#xFF1A;workflow management&
&icon.png&
&
&
工#x4F5C;#x6D41;#x7A0B;#x52A8;#x4F5C;, #x5DE5;#x4F5C;#x6D41;#x7A0B;#x64CD;#x4F5C;, #x5DE5;#x4F5C;#x6D41;#x64CD;#x4F5C;&
网#x7EDC;#x91CA;#x4E49;#xFF1A;workflow action&
&icon.png&
&
&

因為中文字元有轉碼,所以看起來有點像亂碼:( ,這裡跟微信公眾帳號的工作方式很想吧。

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

只要開發者會使用上面任意的語言,就可以開始編寫 Alfred Workflow 了。為了方便開發者了解Workflow 的運行機制,官方在 App 中內置了很多 範例:

有了這些 Examples 就能了解到 Workflow 的運行機制和書寫方法。

總的來說,多看看其他 Workflow 的源碼(都是開源的,大部分Github上有託管),就可以快速上手,開始行動吧。

PS1:所有已經提交到 List 里的 Workflow 源碼都可以在 Github 里查到:

https://github.com/hzlzh/AlfredWorkflow.com/tree/master/Sources/Workflows

PS2:官方的論壇里,全球的開發者和用戶都很活躍,如果你是普通用戶,也可以把你的好 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

&> 大駝峰命名法:dt

&> 下劃線命名法:xh

&> 常量命名法:cl


我剛好寫好了一個 百度,維基百科的workflow, 請參考 Louiszhai/alfred-workflows 中的Search workflow寫法. 除此之外, 還有任意文本生成二維碼的workflow(最後一個). 喜歡請star


寫了個簡易教程:Alfred Workflow教程與實例

實現了兩個實例:

  • CDto: 打開Terminal並轉到任意文件夾或文件所在目錄,使用 bash+osascript 實現

  • Effective IP: 查詢本機和外網IP地址,解析任意URL和域名的IP地址,同時進行歸屬地和運營商查詢,使用 python 實現

源代碼下載地址:https://github.com/stidio/Alfred-Workflow


這裡有個教程:如何為alfred編寫workflow

可以看看


國內版Pinboard 即網路標籤,既可收藏自己的書籤,也可以查看別人收藏的公開的書籤

網路書籤

天天基金的workflow 可以查看天天基金的實時數據,對於買基金的alfred黨來說,無疑又是一利器

天天基金


服務jrs


女漢子零技術基礎,剛入門Alfred求神器的基礎教程~


推薦閱讀:

為何 Android 一般的升級不像 Windows 一樣只需打補丁?
802.11協議中為什麼DCF比PCF應用更廣泛?
中病毒是一種什麼體驗?
mac裝雙系統的利弊?
為什麼 Mac 上沒有像 Windows 上搜狗那樣優秀的輸入法?

TAG:Mac | Alfredapp |