Python實現天氣預報

菜鳥專用,大神勿入

------------------------------------

工具:

Python3.5

VPS - CentOS6.5

天氣預報API:心知天氣 - 天氣數據API和插件

免費簡訊:Twilio - APIs for Text Messaging, VoIP & Voice in the Cloud

(非廣告,以上兩個API都有免費和收費版本,而我只用它們的免費服務)

0. 前期準備

先去以上兩個網站註冊賬號,然後熟悉一下兩個API的使用方法,此處不表

1. 編寫天氣預報腳本

weather_forecast.py

#!/usr/bin/python#-*- coding:utf-8 -*-import requestsfrom twilio.rest import TwilioRestClient #注意要先pip install twiliodef getWeather(): # 設置心知天氣的apikey # 並構造請求URL xinzhi_apikey = "XXXXX" url = "https://api.thinkpage.cn/v3/weather/daily.json?key=%s&location=guangzhou&language=zh-Hans&unit=c&start=0&days=5" % xinzhi_apikey # 獲取天氣預報信息 # 此處只取今天和明天2天的預報 r = requests.get(url) w = r.json()["results"][0]["daily"] today = "今天是%s,白天%s,晚上%s,最高氣溫%s,最低氣溫%s" % (w[0]["date"], w[0]["text_day"], w[0]["text_night"], w[0]["high"], w[0]["low"]) tomorrow = "明天是%s,白天%s,晚上%s,最高氣溫%s,最低氣溫%s" % (w[1]["date"], w[1]["text_day"], w[1]["text_night"], w[1]["high"], w[1]["low"]) message = today +
+ tomorrow return messagedef sendMessage(message): 接收傳入的參數做為簡訊主體——即天氣預報內容,發送到目標號碼 # 設置twilio賬戶信息 twilio_account_sid = "你的twilio賬戶的account_sid" twilio_auth_token = "你的twilio賬戶的auth_token" client = TwilioRestClient(twilio_account_sid, twilio_auth_token) # 注意to和from_兩個參數所代表的手機號,都需要帶有國家代碼。如中國大陸手機號即+86開頭再加上自己的手機號。from_中的號碼直接複製twilio提供的號碼即可 client.messages.create(to="接收者的手機號", from_="twilio提供給你的收發信息的手機號", body=message) return Noneif __name__ == "__main__": weather = getWeather() sendMessage(weather)

如果自己的配置信息沒錯,直接執行以上腳本,就可以在指定的目標手機號上接收到天氣預報信息

2. 設置定時執行腳本

Linux下定時執行腳本,我用的是crond服務,直接在shell下執行

crontab -e

即可進入編輯定時執行任務的列表文件。具體的crond服務使用方法可參考Linux下Crond計劃任務設置格式

我設置的是每天早上7點30分執行一次,這樣我就可以在每天起床時即收到天氣預報信息。crondtab列表編輯如下:

30 7 * * * /usr/local/python3.5/bin/python3 /home/xian/weather_forecast.py

由於我的VPS上同時存在著Python2和Python3,所以在要crontab中指定編譯器位置,再用於執行指定路徑下的Python文件

----------------------------------------

由此,一個簡單的簡訊天氣預報就完成了。

如果有發現設置了crontab並且各個參數正確但是不生效,可以試試重啟crond服務

service crond restart

對於天氣預報簡訊在這個年代是否還有必要,此處不討論。

當然除了定時發送天氣預報,還可以發送其它信息的。twilio的一個好處就是不像國內的很多簡訊API,需要固定格式,類似驗證碼。它可以發送任何自定義內容。當然,免費版還是會有些冗餘信息的:


推薦閱讀:

【實用】安卓手機群發簡訊

TAG:Python | 簡訊 | 天氣預報 |