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