用 Python写Alfred3 workflow 插件,一个最小示例

以前一直在使用Cerebro作为效率工具(开源免费),但是Cerebro原作者似乎很久没有更新,今天抱着试一试的心态用了一把 Alfred 才发现,哎哟握草

Alfred优化了快速启动与搜索的功能,比Cerebro更加丝滑流畅,还引入了Workflows这个强大的扩展功能,用户可以用自己熟悉的语言比如 Python、JavaScript 和 Php 等来写Wokflow。因此赋予了Alfred无限的可能性。我查阅了一下Alfred 的文档,发现添加一个 Workflow 插件竟是如此便捷。

背景

自己平时喜欢浏览 HackerNews,所以希望在 Alfred 里面快速浏览今天的热门新闻,搜了一下现成的 Alfred 的 HackerNews 插件,都十分老旧,好像都不能正常工作。照着 Alfred 官方文档,用 Python 简单写了个Alfred-HackerNews,通过请求 API 获取 HackerNews 新闻。

使用截图

步骤创建一个新 Workflow

设置关键词触发 Python 脚本,如图所示,当输入 时,就可以执行 这条 shell 指令, 就是需要编辑的 Python 文件。在这个 Workflow 中由于没有输入参数,所以我设置了 。

使用 Alfred-Workflow 库流程创建完毕后,就需要对代码进行编辑

找到 Workflow 源码路径: 鼠标右键 ,选择Show in Finder,找到源码

请求api.hnpwa.com/v0获取 HackerNews 数据

def get_top_news():

base_url = 'https://api.hnpwa.com/v0//.json'

max_pages = 15

name = 'news'

result = []

for page in range(1, max_pages):

url = base_url.format(name=name, page=page)

req = web.get(url)

req.raise_for_status()

if len(req.json()) == 0:

break

result = result + req.json()

return result

将数据封装成 格式返回给 Alfred 进行显示

def main(wf):

posts = wf.cached_data('posts', get_top_news, max_age=60*60)

# Loop through the returned posts and add an item for each to

# the list of results for Alfred

for post in posts:

subtitle = "points: | user: | | comments: | ".format(

points=post['points'],

user=post['user'],

time_ago=post['time_ago'],

comments_count=post['comments_count'],

url=post['url']

)

wf.add_item(title=post['title'],

subtitle=subtitle,

arg=post['url'],

valid=True,

icon='./icon.png')

# Send the results to Alfred as XML

wf.send_feedback()

为了防止大量请求 API 造成服务器压力,也为了更快地显示结果,将数据进行缓存

posts=wf.cached_data('posts',get_top_news,max_age=60*60)

导出 Workflow

右键 将 workflow 导出为 格式,就可以发布出去啦

总结

如果使用 Python 第三方库,需要 pip 安装到本地路径

出于兼容性的考虑,Alfred-Workflow 暂时只支持 Python 2,有些小小遗憾;

示例代码和 Workflow 下载地址

https://github.com/wangshub/Alfred-HackerNews

MIT@神奇的战士

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180930G1UHJB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券