python自動獲取天氣_用python獲取天氣數據,并作定時播報

原標題:用python獲取天氣數據,并作定時播報

數據挖掘入門與實戰 公眾號: datadw

思路

1.調用和風天氣的API,獲取天氣數據

2.用百度語音API,將天氣數據合成語音

3.用樹莓派每天早上定時播報天氣(定時任務crontab + Python腳本 + mpg123播放器)

Python知識點

1.使用urllib2庫;

2.Python處理json數據;

3.linux的定時任務crontab。

實現

第一步、用和風天氣API獲取天氣數據

城市接口: https://api.heweather.com/x3/weather?cityid=城市ID&key=你的認證key

2016-11-08 和風天氣的API11月初改版了,所以上述接口地址需要更換成新的,看了下就加了個“free-”,后面代碼加上就好了。

接口地址變了

首先得注冊登錄和風天氣http://www.heweather.com/documents/api 獲得key,在城市代碼里面找到想要查的城市ID,以北京為例:CN101010100

先不著急寫碼,我們用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看看結構就好了。

JSON表示的對象就是標準的Java語言的對象,JSON和Python內置的數據類型有著對應關系如下:

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']

下面是完整的獲取天氣數據的代碼,這里其實只是為了實現功能,其實可以完善的地方很多:

# -*- coding: utf-8 -*-

import sys,urllib2, json

reload(sys) # Python2.5 初始化后會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入

sys.setdefaultencoding('utf-8') #這個是解決合成中文文本的時候,Unicode和utf-8編碼問題的,可以嘗試注釋掉會不會報錯

#調用和風天氣的API

url = 'https://api.heweather.com/x3/weather?cityid=CN101010100&key=替換成你的KEY'

req = urllib2.Request(url)

resp = urllib2.urlopen(req).read()

#將JSON轉化為Python的數據結構

json_data = json.loads(resp)

data = json_data['HeWeather data service 3.0'][0]

#獲取PM2.5的值

pm25 = data['aqi']['city']['pm25']

#獲取空氣質量

air_quality = data['aqi']['city']['qlty']

#獲取城市

city = data['basic']['city']

#獲取現在的天氣、溫度、體感溫度、風向、風力等級

now_weather = data['now']['cond']['txt']

now_tmp = data['now']['tmp']

now_fl = data['now']['fl']

now_wind_dir = data['now']['wind']['dir']

now_wind_sc = data['now']['wind']['sc']

#今天的天氣

today = data['daily_forecast'][0]

weather_day = today['cond']['txt_d']

weather_night = today['cond']['txt_n']

tmp_high = today['tmp']['max']

tmp_low = today['tmp']['min']

wind_dir = today['wind']['dir']

wind_sc = today['wind']['sc']

#天氣建議

#舒適度

comf = data['suggestion']['comf']['brf']

comf_txt = data['suggestion']['comf']['txt']

#流感指數

flu = data['suggestion']['flu']['brf']

flu_txt = data['suggestion']['flu']['txt']

#穿衣指數

drsg = data['suggestion']['drsg']['brf']

drsg_txt = data['suggestion']['drsg']['txt']

weather_forcast_txt = "%s今天白天天氣%s,夜間天氣%s,最高氣溫%s攝氏度,最低氣溫%s攝氏度,風力%s,風向%s,天氣舒適度:%s,%s,流感"

"指數:%s,%s 穿衣指數:%s,%s 現在外面的天氣:%s,當前溫度:%s,當前風力:%s"%(city,weather_day,weather_night,tmp_high,tmp_low,wind_sc,wind_dir,comf,comf_txt,flu,flu_txt,drsg,drsg_txt,now_weather,now_tmp,now_wind_sc)

print weather_forcast_txt

第二步、將文字合成語音

我直接用的百度的語音http://yuyin.baidu.com/合成API,調用方法很簡單(瀏覽器就可以玩)

1、同樣是注冊登錄獲得key,百度語音

http://yuyin.baidu.com/docs/tts/83

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=' '里面就好了

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

樹莓派上安裝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定時任務

http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html在終端執行

sudo crontab -e

新增一條

0 8 * * * python /home/pi/...(你的天氣播報腳本的路徑)

即每天8點整執行語音播報。

via http://www.jianshu.com/p/e15d2b575609

數據挖掘入門與實戰

教你機器學習,教你數據挖掘

公眾號: weic2c

責任編輯:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258764.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++實現解析文件路徑

注意&#xff1a;本實現只能解析類似linux下的路徑&#xff0c;即“/data/a.txt”&#xff0c;而不能解析“c:\a.txt” 或者“c:\\a.txt”&#xff0c;但是應該很容易擴展改寫實現此功能。 FilepathParse.h #include <string> using std::string;void parseFilepath(str…

gedit搭建c開發環境

在管理外部工具中&#xff0c;創建啟動腳本 1 #!/bin/sh 2 DIR$GEDIT_CURRENT_DOCUMENT_DIR 3 NAME$GEDIT_CURRENT_DOCUMENT_NAME 4 /home/lxy/code/c/struct/run.sh ${DIR}/${NAME} 創建run.sh #!/bin/sh file$1 ext${file##*.}#C if [ $ext "c" ]; thenif [ -f $f…

Oracle數據庫入門——常用的數據字典

一、oracle數據字典主要由以下幾種視圖構成&#xff1a;1.user視圖以user_為前綴&#xff0c;用來記錄用戶對象的信息 2.all視圖以all_為前綴&#xff0c;用來記錄用戶對象的信息及被授權訪問的對象信息 3.dba視圖以dba_為前綴&#xff0c;用來記錄數據庫實例的所有對象的信息 …

一個excel文檔里復制黏貼另外表單跟著變動_利用Excel連接Power BI,實現PPT報告自動輸出...

?文/HALI就職于汽車行業戰略部門 專注汽車市場信息情報收集和分析因為工作需要&#xff0c;每月周期性的更新數據和撰寫PPT 報告成為繁重的勞動。結果是很多時間花費在數據處理上&#xff0c;真正的分析工作&#xff0c;往往只能草草收場。不能坐以待斃&#xff0c;就要想想有…

出現23.97幀率的原因

http://raytao.lofter.com/post/3d177_185a386 關于那些“格&#xff08;Frame&#xff09;”不得不說的事 今天早上&#xff0c;鄙人在社交網絡發了這一系列的問題&#xff1a;請解釋以下名詞之間的關系或差異。幀&#xff0c;格&#xff0c;幀率&#xff0c;時基&#xff0c;…

8-3建立蒙版

http://www.missyuan.com/thread-527018-1-1.html 在實際操作中&#xff0c;99.9%的蒙版都是通過選區建立的 所以選區要選好 點擊圖層調板下方的按鈕直接建立蒙版(下左圖紅色箭頭處)&#xff0c;效果等同于【圖層_圖層蒙版_顯示選區】 圖層中有了兩個對象&#xff1a;一是圖層&…

今天試了一下iscroll

感覺5和4差別還是有一點的&#xff0c;雖然不是很多&#xff0c;今天用了一下&#xff0c;感覺還是很不錯。 今天看到有人提問說如果頁面要引入多個iscroll怎么弄的問題&#xff0c;其實很簡單&#xff0c;頁面再多實例化一次就可以了。 如&#xff1a; myScroll new iScroll(…

使用ajax將數據顯示在指定位置_AJAX學習主題之一

學習主題&#xff1a;AJAX刪除用戶功能實現根據視頻中的講解&#xff0c;完成以下內容簡述刪除功能的基本思路流程點擊按鈕獲取當前元素中的用戶uid&#xff0c;向服務器發起請求&#xff0c;將uid提交到服務器刪除指定用戶&#xff0c;瀏覽器獲取瀏覽器響應結果。獨立完成刪除…

matlab 配置mex 識別vs2015

問題&#xff1a;先安裝了matlab&#xff0c;后裝了vs13和vs15,但是mex -setup時卻不能識別vs15&#xff0c;采用了兩種辦法&#xff0c;最終得以識別。解決方案&#xff1a;先采用方法&#xff1a; http://blog.csdn.net/yc461515457/article/details/51635842 &#xff0c;但…

互聯網企業安全高級指南3.6 需要自己發明安全機制嗎

3.6 需要自己發明安全機制嗎 1. 安全機制的含義 首先解釋一下發明安全機制這句話的意思。安全機制包括&#xff1a;常見的對稱和非對稱加密算法&#xff0c;操作系統自帶的RBAC基于角色的訪問控制&#xff0c;自帶的防火墻Netfilter&#xff0c;Android的基于appid隔離的機制&…

鉤子方法

Class#inherited 類被繼承時調用 Module#included 模塊的生命周期中調用 Module#extend_object 模塊擴展類時調用 Module#method_added Module#method_removed Module#method_undefined轉載于:https://www.cnblogs.com/qinyan20/p/3656156.html

ember啟動報錯

ember[4858] (FSEvents.framework) FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() > (null) (-21) events.js:85 throw er; // Unhandled ‘error’ event ^ Error: watch EMFILE at exports._errnoException (util.js:746:11) at FSEvent.FS…

js日期比較大小_node.js 內存泄漏的秘密

每日前端夜話第276篇翻譯&#xff1a;瘋狂的技術宅作者&#xff1a;Giovanny Gongora來源&#xff1a;nodesource正文共&#xff1a;3955 字預計閱讀時間&#xff1a;10分鐘一直以來&#xff0c;跟蹤 Node.js 的內存泄漏是一個反復出現的話題&#xff0c;人們始終希望對其復雜性…

win7+vs2015/13+caffe+matlab+python(CPU only)配置

首先聲明本教程可以適用于vs2015 和vs2013 .以vs2015為例。 安裝必備軟件 vs 2015 /vs2013 matlab 2016a(64bit)推薦使用Anaconda 2.7 或者Miniconda 2.7這兩個Python發布版本cmake 3.8.0 以上caffe-window: https://github.com/BVLC/caffe/tree/windows 可選軟件&#xff1…

Performance Co-Pilot

Install Performance Co-Pilot 提前安裝依賴 [rootiZrj97j6t7ih9hgz1me35hZ ~]# cat install.sh yum install -y docker yum install -y git yum install -y yum-utils-1.1.31-40.el7.noarch yum install lex yum install flex yum install -y bison yum install -y perl-ExtUt…

字符串轉換整形數,結構體數組排序

#include <stdio.h> #include<string.h> #include<conio.h> #include <stdlib.h> FILE *p; #define N 3 struct hacker {char name[11];char num[20];char xingbie[3]; }z[N];//輸入模塊 void shuru() {char *s"網名 QQ號碼 性別信息…

如何發布打包并發布自己的Android應用(APP)

第一步&#xff0c;在Eclipse中選擇需要打包的項目&#xff0c;然后右鍵--選擇Export&#xff0c;會彈出一個打包的提示框&#xff0c;如下圖所示。 按Next之后&#xff0c;會繼續出現一個提示框&#xff0c;這里你可以選擇自己需要打包的項目&#xff08;默認是剛才選中的&…

js變量提升_一道JS變量提升題

var a 0;if(true){a 1;function a(){};a 21;console.log(a);}console.log(a);// 21 1 當前上下文代碼執行之前&#xff0c;會將帶var/function的進行聲明/定義。當遇到“{}”時&#xff0c;新版瀏覽器和老版瀏覽器的處理不一致。老版瀏覽器&#xff08;IE10以下&#xff09;…

Adaboost的幾個人臉檢測網站

【1】基礎學習筆記之opencv(1)&#xff1a;opencv中facedetect例子淺析 http://www.cnblogs.com/tornadomeet/archive/2012/03/22/2411318.html【2】OpenCV學習筆記&#xff08;二十七&#xff09;——基于級聯分類器的目標檢測objdect http://blog.csdn.net/yang_xian521/arti…