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