天氣變冷了,給父母製作一個天氣提醒小助手
背景
最近天氣變冷了,和父母聊天中得知,他們檢視每天的天氣預報不太方便,我記得小時候,每晚 19:30 左右,一家人都要守在電視機旁邊收聽第二天的天氣情況。
如今,對於我們年輕人來說,獲取天氣情況很方便,但是對於我們不擅長用手機的父母來說,還是很吃力,他們用的多的還是微信吧。為此,我用不到 40 行程式碼寫了一個小工具,每天定時把當天的天氣情況直接發到微信群裡。
查詢天氣介面
要獲取天氣情況,需要一個查詢天氣的介面,網上找了一下,一般都是註冊後送一定呼叫次數的,我選擇了一個,免費送 500 次查詢次數的。
我們看看介面的 API 文件。
其中城市名 cityname 和 key 是必填項。
http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=您申請的KEY
key 值在 juhe.cn 我的介面那一欄中可以看到。
我們也可以事先在 Postman 工具中看看介面能否調通。
Postman 介面工具沒用過的沒關係,他們網頁上也提供了除錯工具。
查詢天氣方法
我們直接用 requests 庫請求介面就能獲得 json 格式的天氣資訊,json 資料中包含了當天和未來幾天的天氣資訊,這裡我只需要當天的,當天資料都在 result 下的 today 裡,提取出來用 return 返回。
通過微信傳送天氣訊息
我們通過微信把天氣資訊發到群裡,這裡我們需要用到呼叫微信的庫,itchat 庫或者 wxpy 都可以,這裡我用了 wxpy 庫。
先匯入 wxpy 庫。
from wxpy import *
我們把剛才的請求介面返回的天氣資訊整合一下,然後用 wxpy 庫的 search 方法通過群名稱找到你需要傳送天氣訊息的這個群,用 send 方法傳送。
我這裡是傳送到群裡,當然,你也可以直接傳送給個人微信。
my_friend = bot.friends().search(u'pk哥')[0]
定時操作
如果每次都需要我們手動執行,那就有點麻煩,我們要讓程式每天在固定時間定時傳送,這裡需要用到 Timer 定時器。
Timer 定時器格式:
Timer(86400, get_weather)
第一個引數表示相隔指定時間(單位:秒)後再次呼叫方法(第二個引數),注意,方法後不要帶括號。
86400 秒就是相隔 24 小時,也就是一天的時間。
t = Timer(86400, get_weather)
t.start()
t.join()
異常處理
如果資訊傳送失敗,我們把資訊發給自己,這裡我做了一個異常處理。
except BaseException:
my_friend = bot.friends().search(u'brucepk')[
0] # 傳送不成功,則傳送訊息給自己,提醒訊息傳送失敗
my_friend.send(u'天氣訊息傳送失敗')
我們的程式需要持續執行,那是不是需要一直在電腦上執行啊,這樣有點不現實啊,我們把它部署到伺服器上就可以搞定了,現在伺服器也很便宜,做活動的時候一般 100 元以內就可以買一年。
部署在伺服器
在伺服器中執行程式,直接掃碼登入微信,下面是我週五開始執行的,相隔 24 小時後,週六再次呼叫方法,獲取新的天氣資訊。
發到群裡效果如下圖,當然,你還可以多加一些介面返回的資訊或者自己想說的話。
可能存在的問題
1、我的微信登入不了網頁版微信
因為 itchat 庫和 wxpy 庫都是呼叫微信的網頁版介面,如果你的微信註冊比較晚,被限制了網頁版登入功能,那這個程式你無法執行。
2、傳送不到指定群
先檢查下群名稱,把群名稱一些 emoji 表情符號去掉,這些特殊符號可能導致無法識別。
群名稱沒錯的話,看看自動傳送資訊的這個號有沒有把這個群新增到通訊錄。
這樣,一個定時傳送訊息的小工具就完成了,你也可以在上面擴充套件,加上其他功能,這樣就更完善了。
本文全部原始碼在公眾號「Python 知識圈」後臺回覆「天氣小工具」獲取,原始碼中 key 值和群名稱需換成自己的。