過年想有人跟著回家?Python智慧化“天氣提醒”幫你搞定小姐姐

Python小姐姐發表於2019-01-03

前輩前幾天發的文章,操作python那可是一流的666,分享過小編的可愛的小夥伴們,對沒有學python和在學python的小夥伴來說,那絕對是精品中的精品。優秀上的優秀。最重要是教單身程式設計師怎麼撩小姐姐哦!
在這裡插入圖片描述
程式設計師和未來的程式設計師必學,跟著小編這個有了21年經驗的小姐姐,一起學習下面的內容吧!
小編整理一套Python資料和PDF,有需要Python學習資料可以加學習群:984632579,反正閒著也是閒著呢,不如學點東西啦~~
開講啦 開講啦:
實現第一步,用“和風天氣”API獲取天氣資料(當然你也可以選用其他的介面)
城市介面: https://api.heweather.com/x3/weather?cityid=城市ID&key=你的認證key
update 和風天氣的API11月初改版了,所以上述介面地址需要更換成新的,看了下就加了個“free-”,後面程式碼加上就好了。
在這裡插入圖片描述
介面地址變了
首先得註冊登入和風天氣獲得key,在城市程式碼裡面找到想要查的城市ID,以北京為例:CN101010100
在這裡插入圖片描述
城市ID
接著用API除錯工具試試這個介面,看看返回的是什麼資料。

我用的是chrome下postman,開啟postman,輸入介面連結:

https://api.heweather.com/x3/weather?cityid=CN101010100&key=這裡填你的key
在這裡插入圖片描述
API除錯
返回的是JSON格式的,現在用Python呼叫一下這個介面試試:# -- coding: utf-8 --
import urllib2
#呼叫和風天氣的API
url = ‘https://api.heweather.com/x3/weather?cityid=CN101010100&key=你的key
#用urllib2建立一個請求並得到返回結果
req = urllib2.Request(url)
resp = urllib2.urlopen(req).read()
print resp
python返回的資料:

我們用postman看看結構就好了。
在這裡插入圖片描述
Python內建資料型別和JSON的對應關係
在這裡插入圖片描述
對應關係
Python內建的json模組提供了非常完善的Python物件到JSON格式的轉換。我們用loads()方法把JSON反序列化為Python物件

#將JSON轉化為Python的資料結構
json_data = json.loads(resp)
print json_data
結果發現資料變成了u’XXXXX’的格式,這是因為反序列化得到的所有字串物件預設都是unicode編碼的。
在這裡插入圖片描述
結果:
我們此時已經將天氣資料拿到,並且反序列化為Python物件了,只有提取我們需要的資料即可。看下天氣API提供哪些資料
在這裡插入圖片描述
postman上的JSON結構
我就每天早上聽一下今天的氣溫、風力、pm2.5、穿衣建議就好了。

現在以獲得pm2.5的值為例,一層層獲取到pm2.5的值
在這裡插入圖片描述
pm2.5的值
上面說了JSON裡面{}對應的是Python的dict,[]對應的是Python裡的list,上圖中可以比較清楚地知道這個JSON得到的Python資料其實是dict和list的多層巢狀。這裡我們可以類比查《新華字典》,想要查到“天氣”這個詞,可以找到字母T的頁碼(按A~Z的有序列表),再找到“tian”所在的位置,一步步往裡找就成找到想要的詞了。

最外層是個dict型別:

dict: {'HeWeather…": [ list]}

往裡一層是多個dict,直接通過多層dict[‘key’][‘key2’]…就能取得PM2.5的值了:

list 只有一個值,取list[0] (它的值是一個dict),取得天氣只需要

print json_data[‘HeWeather data service 3.0’][0][‘aqi’][‘city’][‘pm25’]
獲取天氣資料的程式碼:

為什麼沒有放出全部的程式碼,因為小編還沒有男朋友,小編群裡的管理員小姐姐也沒有哦!
在這裡插入圖片描述
程式碼執行後:
在這裡插入圖片描述
執行結果
第二步、將文字合成語音:

我直接用的百度的語音合成API,呼叫方法很簡單(瀏覽器就可以玩)

1、同樣是註冊登入獲得key,百度語音

2、註冊個應用,隨便啥應用都行,獲得APPID

這幾步都可以參考官方接入指南

3、獲得token(一個月有效期,過期再獲取即可)

瀏覽器輸入:

https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的AppID&client_secret=你的AppKey
返回的JSON裡面的“access_token”就是呼叫百度語音合成API要用的token

4、合成語音 ,必填、選填引數可看官方文件

http://tsn.baidu.com/text2audio?tex=需要合成語音的文字&lan=zh&per=0&cuid=裝置mac地址或手機的IMEI碼&ctp=1&tok=你的token
5、我們只需要把天氣文字放在第4步的連結tex=’ '裡面就好了

過年想有人跟著回家?Python智慧化“天氣提醒”幫你搞定小姐姐
這麼優秀的程式碼,不上手一下嗎?

第三步、用樹莓派播放天氣預報:

樹莓派上安裝linux音訊播放程式 mpg123,執行

sudo apt-get install mpg123
這玩意使用起來異常簡單,試試用命令列 “mpg123 語音url” 來播放線上的音訊

mpg123 http://tsn.baidu.com/text2audio?tex=需要合成語音的文字&lan=zh&per=0&cuid=裝置mac地址或手機的IMEI碼&ctp=1&tok=你的token
現在只要把第一步獲得的天氣文字用mpg123播放就好了,在第一步的程式碼基礎上加上這些:

url = “http://tsn.baidu.com/text2audio?tex=” + weather_forcast_txt + “&lan=zh&per=0&cuid=裝置mac地址或手機的IMEI碼&ctp=1&tok=你的token”
os.system(‘mpg123 “%s”’%(url)) #需要import os
最後,定時執行天氣播報腳步就好了

用linux的crontab,可檢視crontab定時任務

在終端執行

sudo crontab -e
新增一條

0 8 * * * python /home/pi/…(你的天氣播報指令碼的路徑)
即每天8點整執行語音播報

切記:得到程式碼後要跟著敲打一邊,進行實操練習!

是不是很贊哇~

還不趕快動手操作下,做個定製版的“播報提醒”程式,暖心你的小姐姐,加油!

願有情人終成眷屬。
在這裡插入圖片描述
小編坐等學python的小姐姐來撩哦!

在這裡插入圖片描述

相關文章