最近天氣變冷了,和父母聊天中得知,他們查看天天的天氣預報不太方便,我記得小時候,每晚 19:30 左右,一家人都要守在電視機旁邊收聽次日的天氣狀況。json
現在,對於咱們年輕人來講,獲取天氣狀況很方便,可是對於咱們不擅長用手機的父母來講,仍是很吃力,他們用的多的仍是微信吧。爲此,我用不到 40 行代碼寫了一個小工具,天天定時把當天的天氣狀況直接發到微信羣裏。服務器
要獲取天氣狀況,須要一個查詢天氣的接口,網上找了一下,通常都是註冊後送必定調用次數的,我選擇了一個,免費送 500 次查詢次數的。微信
咱們看看接口的 API 文檔。工具
其中城市名 cityname 和 key 是必填項。spa
http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=您申請的KEY複製代碼
key 值在 juhe.cn 個人接口那一欄中能夠看到。3d
咱們也能夠事先在 Postman 工具中看看接口可否調通。調試
Postman 接口工具沒用過的不要緊,他們網頁上也提供了調試工具。code
咱們直接用 requests 庫請求接口就能得到 json 格式的天氣信息,json 數據中包含了當天和將來幾天的天氣信息,這裏我只須要當天的,當天數據都在 result 下的 today 裏,提取出來用 return 返回。orm
咱們經過微信把天氣信息發到羣裏,這裏咱們須要用到調用微信的庫,itchat 庫或者 wxpy 均可以,這裏我用了 wxpy 庫。cdn
先導入 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 小時後,週六再次調用方法,獲取新的天氣信息。發到羣裏效果以下圖,固然,你還能夠多加一些接口返回的信息或者本身想說的話。
一、個人微信登陸不了網頁版微信由於 itchat 庫和 wxpy 庫都是調用微信的網頁版接口,若是你的微信註冊比較晚,被限制了網頁版登陸功能,那這個程序你沒法運行。
二、發送不到指定羣先檢查下羣名稱,把羣名稱一些 emoji 表情符號去掉,這些特殊符號可能致使沒法識別。
羣名稱沒錯的話,看看自動發送信息的這個號有沒有把這個羣添加到通信錄。
這樣,一個定時發送消息的小工具就完成了,你也能夠在上面擴展,加上其餘功能,這樣就更完善了。
本文所有源碼在公衆號「Python 知識圈」後臺回覆「天氣小工具」獲取,源碼中 key 值和羣名稱需換成本身的。
本文由博客一文多發平臺 OpenWrite 發佈!