天氣變冷了,給父母製做一個天氣提醒小助手

背景

最近天氣變冷了,和父母聊天中得知,他們查看天天的天氣預報不太方便,我記得小時候,每晚 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 發佈!

相關文章
相關標籤/搜索