Python中如何开发Alfred Workflow?中文入门教程分享

这两天晚上学习了一下 mac 上的 workflow 开发,写出了两个小玩意。想着之前在网上,没有看到比较详细的中文开发教程(虽然,开发过程其实很简单),就自己写了个入门级的教程。希望对这方面入门级别的开发有所帮助。 开发语言可以是 Python/Php...

详细的开发教程在地址: http://allenwu.itscoder.com/how-to-write-a-workflow-for-mac

两个 Demo 级别的 workflow 地址: https://github.com/wuchangfeng/Vino-Workflow

自己写的两个玩意,一个是 Gank 的搜索,一个是 有道的翻译:

==================================================================


Python中如何开发Alfred Workflow?中文入门教程分享

32 回复

写的很不错。赞


要开发Alfred Workflow,核心是创建脚本过滤器(Script Filter)和动作(Action)。这里给你一个完整的Python示例,展示如何创建一个搜索GitHub仓库的Workflow。

首先,确保安装了Alfred Powerpack,然后打开Workflow编辑器创建新Workflow。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import sys
import urllib.request
from urllib.parse import quote

def search_github_repos(query):
    """搜索GitHub仓库"""
    if not query:
        return []
    
    url = f"https://api.github.com/search/repositories?q={quote(query)}&sort=stars"
    
    try:
        req = urllib.request.Request(url)
        req.add_header('User-Agent', 'Alfred-Workflow')
        
        with urllib.request.urlopen(req) as response:
            data = json.loads(response.read().decode('utf-8'))
            
            items = []
            for repo in data.get('items', [])[:10]:  # 限制前10个结果
                item = {
                    'title': repo['full_name'],
                    'subtitle': repo['description'] or 'No description',
                    'arg': repo['html_url'],  # 传递给下一个动作的参数
                    'icon': {'path': 'icon.png'}
                }
                items.append(item)
            
            return items
            
    except Exception as e:
        return [{
            'title': 'Error',
            'subtitle': str(e),
            'valid': False
        }]

def main():
    query = sys.argv[1] if len(sys.argv) > 1 else ''
    results = search_github_repos(query)
    
    # 输出Alfred可识别的JSON格式
    output = {
        'items': results
    }
    
    print(json.dumps(output))

if __name__ == '__main__':
    main()

保存这个脚本,然后在Alfred中:

  1. 添加"Script Filter"输入
  2. 语言选择"/bin/bash"
  3. 命令填python3 /path/to/your/script.py "{query}"
  4. 添加"Open URL"动作连接到Script Filter的输出

关键点:Alfred Workflow通过stdin/stdout与脚本通信,输出必须是特定JSON格式。Script Filter返回的结果中,arg字段会传递给下一个动作。

更复杂的Workflow可以用alfred-workflow库简化开发。

总结:用Python脚本处理查询,输出标准JSON格式给Alfred。

干货前编辑来赞一个 (逃

Alfred Workflow 都还不怎么会用呢…

哈哈,谢谢,因为自己看的是全英文的教程,虽然简单,但是对于大部分人来讲还是有点抵触,所以就写了个“图文并茂”中文小白教程…

嘿嘿,我认得大兄弟你。跟着你的博客学到了不少东西,谢谢啦。

赶紧尝试下呗,炒鸡好用的,都说是 Mac 上的神器

我都是直接 shell 写的,一个有道一个查 ip,shell 写挺方便的

这个棒

python 和 shell 写这个还是比较好玩的

嘿嘿,其实都差不多,主要自己会点 Python ,改天学习下 shell 。

是的,希望有点小用处。

小弟去干活、学习了,有什么建议,可以直接留言。博客为了简洁,没有添加多说,不好意思啦。对了小弟找一份实习,有兴趣的看一下博客的 About 中的 Resume (逃

写的很不错。赞

博客很简洁啊。用 hexo 搭建的吗?请问

用的 jkelly ,人家的模板然后自己改了改,不过这种样式的博客容易写出来,之前用 Django 写过一个。

更新啦,添加了 V2EX 当日 10 大热门帖子的 workflow ,哈哈,因地制宜。

好赞啊!

Alfred 能不能自动操作 mac 版微信?

在想如果晚睡加班到 9 点就自动打开微信给我老婆发一条微信说今晚加班,晚点回。

如果能添加单词到生词本就完美了

这个不难,我看到有人实现过,等周末看看可有时间,来研究下

这个应该不能吧。。。

嘿嘿,很简单的,肯花时间研究下都能做出来

不错,如果能加入一些高级功能就好了。比如{query}的分解啥的,还有如何 debug 。

好的,周末看看可有时间更新下。我用 Python 写的脚本,调试是直接在终端命令行 python xxx.py ,看报什么错。如果开了 log 日志,在 workflow 入口也能报简单的提示。

workflow 里面有一个 utilities ,里面有个 debug 的选项。

好的,谢谢你 我也只是入门级别的。

wox : windows 版的 alfred ,来源免费~

这个不错,学习下,后面也试试

我推荐一篇讲述使用 Alfred 的吧,https://1991421.cn/2019/04/06/b908e228/ 应该还是很全面的。

至于各种 workflow 的编写,只要你熟悉一门语言即可,无论是 shell,js,ruby 等

回到顶部