Alfred的是公認(rèn)的MacBook效率神器,入坑Mac這么久用了很多別人寫的workflow覺著真心不錯(cuò)询张。學(xué)了一點(diǎn)python終于可以寫個(gè)簡(jiǎn)單的workflow了孙乖,先上效果圖:
關(guān)于Alfred的介紹可以看看 少數(shù)派的系列文章:關(guān)于Alfred的文章
準(zhǔn)備工作:
1.MacBook + Alfred 2或3 + Alfred Powerpack
2.下載 deanishe 的python alfred 框架deanishe alfred,我們可以用他造的輪子完成我們自己的workflow了份氧。
3.注冊(cè)和風(fēng)天氣和風(fēng)天氣官網(wǎng)唯袄,用天氣API獲取我們要在alfred輸出的天氣數(shù)據(jù)。
步驟:
1.新建個(gè)空白的workflow:
2.選中剛才新建的workflow蜗帜,右邊空白區(qū)域右鍵選擇 Inputs-Scripts恋拷,會(huì)彈出一個(gè)新的設(shè)置窗口:
keyword:在alfred里輸入這個(gè)值,就會(huì)調(diào)起這個(gè)script厅缺;
Language:這里是指腳本使用的編程語(yǔ)言蔬顾,雖然我們用的是python,但是為了便于調(diào)試湘捎,建議還是用bash調(diào)用自己寫的腳本阎抒。
3.打開這個(gè)workflow的位置
4.把deanishe 的workflow框架和自己的.py腳本放在這個(gè)文件夾。
# -*- coding:utf-8 -*-
import json,sys
from datetime import datetime
from workflow import Workflow, web
reload(sys) # Python2.5 初始化后會(huì)刪除 sys.setdefaultencoding 這個(gè)方法消痛,我們需要重新載入
sys.setdefaultencoding('utf-8')
#這個(gè)是和風(fēng)天氣的API key,替換成你自己的就行
API_KEY = '你的API_KEY'
#返回某日是星期幾
def the_day(num):
week = ['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
return week[num]
def main(wf):
url = 'https://free-api.heweather.com/x3/weather?cityid=CN101010100&key=' + API_KEY
#這里用了deanishe 的框架里面的web模塊來(lái)請(qǐng)求頁(yè)面,web模塊類似requests庫(kù)
r = web.get(url=url)
r.raise_for_status()
resp = r.text
data = json.loads(resp)
d = data['HeWeather data service 3.0'][0]
city = d['basic']['city']
#獲取一周內(nèi)的數(shù)據(jù)
for n in range(0,7):
day = d['daily_forecast'][n]
#把API獲取的天氣、溫度都哭、風(fēng)力等信息拼接成 alfred條目的標(biāo)題秩伞、副標(biāo)題
title = city + '\t' + the_day(datetime.weekday(datetime.strptime(day['date'],'%Y-%m-%d')))+ '\t' +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添加條目,傳標(biāo)題、副標(biāo)題欺矫、圖片路徑(圖片直接用的和風(fēng)天氣提供的天氣圖,每個(gè)圖片的命名對(duì)應(yīng)天氣狀態(tài)碼)
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))
5.天氣的icon放在workflow所在的文件夾
6.給你的workflow添加一個(gè)版本文件
7.在Alfred中調(diào)試workflow
搞定收工
代碼不完善的地方歡迎留言討論纱新,如果您覺得這篇文章對(duì)您有幫助請(qǐng)點(diǎn)個(gè)贊喲。