专栏名称: 编程派
Python程序员都在看的公众号,跟着编程派一起学习Python,看最新国外教程和资源!
目录
相关文章推荐
Python爱好者社区  ·  炸裂!华为AI「打卡营」上线 ·  2 天前  
Python中文社区  ·  用 Python ... ·  4 天前  
Python爱好者社区  ·  两天私活,3w到手 ·  4 天前  
Python爱好者社区  ·  72k,直接封神! ·  1 周前  
51好读  ›  专栏  ›  编程派

如何用 Python 写 Alfred Workflow

编程派  · 公众号  · Python  · 2017-02-07 12:04

正文

用 Mac 的同学应该都听过 Alfred,号称效率神器。但是,你有没有想过可以用 Python 自己写一个 Workflow 呢?


作者:_CallMe靠谱叔 

原文:http://www.jianshu.com/p/4b980a0193b6

Alfred 的是公认的 MacBook 效率神器,入坑 Mac 这么久用了很多别人写的 workflow 觉着真心不错。学了一点 python 终于可以写个简单的 workflow 了,先上效果图:

先上效果图。

关于Alfred的介绍可以看看「少数派」的系列文章:关于Alfred的文章

准备工作:

  1. MacBook + Alfred 2或3 + Alfred Powerpack

  2. 下载 deanishe 的 python alfred 框架 deanishe alfred,我们可以用他造的轮子完成我们自己的workflow了。

  3.  注册和风天气和风天气官网,用天气API获取我们要在alfred输出的天气数据。

步骤:

1.新建个空白的 workflow :

2.选中刚才新建的 workflow ,右边空白区域右键选择 Inputs - Scripts ,会弹出一个新的设置窗口:

keyword :在 alfred 里输入这个值,就会调起这个 script ; Language :这里是指脚本使用的编程语言,虽然我们用的是 python ,但是为了便于调试,建议还是用 bash 调用自己写的脚本。

3.打开这个 workflow 的位置

在 finder 里面打开 workflow

4.把 deanishe 的 workflow 框架和自己的。 py 脚本放在这个文件夹。

  1. # -*- coding:utf-8 -*-

  2. import json

  3. import sys

  4. from datetime import datetime

  5. from workflow import Workflow, web

  6. reload(sys)  # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入

  7. sys.setdefaultencoding('utf-8')

  8. # 这个是和风天气的API key,替换成你自己的就行

  9. API_KEY = '你的API_KEY'

  10. # 返回某日是星期几

  11. def the_day(num):

  12.    week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']

  13.    return week[num]

  14. def main(wf):

  15.    url = 'https://free-api.heweather.com/x3/weather?cityid=CN101010100&key=' + API_KEY

  16.    # 这里用了deanishe 的框架里面的web模块来请求页面,web模块类似requests库

  17.    r = web.get(url=url)

  18.    r.raise_for_status()

  19.    resp = r.text

  20.    data = json.loads(resp)

  21.    d = data['HeWeather data service 3.0'][0]

  22.    city = d['basic']['city']

  23.    # 获取一周内的数据

  24.    for n in range(0, 7):

  25.        day = d['daily_forecast'][n]

  26.    # 把API获取的天气、温度、风力等信息拼接成 alfred条目的标题、副标题

  27.        title = city + '\t' + the_day(datetime.weekday(datetime.strptime(

  28.            day['date'], '%Y-%m-%d'))) + '\t' + day['cond']['txt_d']

  29.        subtitle = '白天 {weather_day}|' \

  30.                   '夜间 {weather_night} |' \

  31.                   ' {tmp_low}~{tmp_high}摄氏度|' \

  32.                   ' {wind_dir} {wind_sc}'.format(

  33.                       weather_day=day['cond']['txt_d'],

  34.                       weather_night=day['cond']['txt_n'],

  35.                       tmp_high=day['tmp']['max'],

  36.                       tmp_low=day['tmp']['min'],

  37.                       wind_sc=day['wind']['sc'],

  38.                       wind_dir=day['wind']['dir']

  39.                   )

  40.    # 向alfred添加条目,传标题、副标题、图片路径(图片直接用的和风天气提供的天气图,每个图片的命名对应天气状态码)

  41.        wf.add_item(title=title, subtitle=subtitle,

  42.                    icon='images/{code}.png'.format(code=day['cond']['code_d']))

  43.    wf.send_feedback()

  44. if __name__ == '__main__':

  45.    wf = Workflow()

  46.    sys.exit(wf.run(main))

5.天气的 icon 放在 workflow 所在的文件夹 6.给你的 workflow 添加一个版本文件

7.在 Alfred 中调试 workflow

搞定收工

代码不完善的地方欢迎留言讨论,如果您觉得这篇文章对您有帮助请点个赞哟。


题图:pexels,CC0 授权。

点击阅读原文,查看更多 Python 教程和资源。

推荐文章
Python爱好者社区  ·  炸裂!华为AI「打卡营」上线
2 天前
Python爱好者社区  ·  两天私活,3w到手
4 天前
Python爱好者社区  ·  72k,直接封神!
1 周前
周国平  ·  尼采忌辰 | 一切孤独皆是罪过
8 年前
哎咆科技  ·  iPhone 8四面曲屏,帅呆了!
7 年前
香港凤凰周刊  ·  情怀不能当肉吃
7 年前