Mac 上有个工具 Alfred,可以使用它的 workflow 功能编写自定义工作流,支持多种编程语言。Github 上也有很多玩法。
插件完成后可以使用快捷键唤出 Alfred 对话框时,输入关键词 tq,即可在下面展示这周的天气。
步骤
按照下列步骤即可快速完成工作流
1、首先需要安装 Alfred,或者购买 workflow 功能,或者破解获得这个高级功能。然后新建一个空白的 workflow。
2、点击空白的 workflow,在右边右键-Inputs-Script Filter 新建一个编写脚本的模块。
Keyword 设置的是触发天气 workflow 的关键词
Script 中填写的是需要执行的流程逻辑,这里选择系统原生的 Shell,在里面执行 Python
3、点击右下的四宫格文件图标进入到 workflow 的文件夹目录。有人写好了 alfred-workflows 的 Python 库,这个库提供基本的框架,我们下载这个库放在目录下,在此基础上写流程即可。
4、编写主要功能。在 weather.py 中基于 workflow Python 库和天气 API 开发插件。
功能实现
# -*- coding:utf-8 -*-
import json,sys
from datetime import datetime
from workflow import Workflow, web
reload(sys)
sys.setdefaultencoding('utf-8')
# 和风天气的API key
API_KEY = 'Your-key'
def the_day(num):
week = ['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
return week[num]
def main(wf):
url = 'https://free-api.heweather.com/s6/weather/'
+ 'forecast?location=CN101280601&key=' + API_KEY
# 这里用了deanishe 的框架里面的web模块来请求页面
r = web.get(url=url)
r.raise_for_status()
resp = r.text
data = json.loads(resp)
# 主体信息
d = data['HeWeather6'][0]
city = d['basic']['location']
#获取一周内的数据
for n in range(0, len(d['daily_forecast'])):
day = d['daily_forecast'][n]
# 把API获取的天气、温度、风力等信息拼接成 alfred条目的标题、副标题
title = city + ' ' + the_day(datetime.weekday(
datetime.strptime(day['date'],'%Y-%m-%d')))
+ ' ' + day['cond_txt_d']
subtitle = '白天 {weather_day}|' \
'夜间 {weather_night} |' \
' {tmp_low}~{tmp_high}摄氏度|' \
' {wind_dir} {wind_sc}'.format(
weather_day = day['cond_txt_d'],
weather_night = day['cond_txt_n'],
tmp_high = day['tmp_max'],
tmp_low = day['tmp_min'],
wind_sc = day['wind_sc'],
wind_dir = day['wind_dir']
)
# 向 alfred 添加条目,传标题、副标题、图片路径
wf.add_item(title=title,subtitle=subtitle,
icon='images/{code}.png'.format(code = day['cond_code_d']))
wf.send_feedback()
if __name__ == '__main__':
wf = Workflow()
sys.exit(wf.run(main))
实现主要分以下几步:
1、使用 wf = Workflow()
新建一个 workflow 实例
2、在实例中请求天气数据。插件最终显示的天气列表每一行由主标题、副标题、图标组成,将获取到的数据格式化为这几部分
3、使用 wf.add_item
逐行添加到实例中
4、使用 wf.send_feedback
将数据返回给 workflow 进行渲染展示
这样就完成了天气插件。