1. 程式人生 > >天氣變冷了,給父母製作一個天氣提醒小助手

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

背景

最近天氣變冷了,和父母聊天中得知,他們檢視每天的天氣預報不太方便,我記得小時候,每晚 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 值和群名稱需換成自己的。

關注微信公眾號 Python知識圈 ,獲取更多 Python 精彩內容。