基于Dragonbaord 410c開(kāi)發(fā)板的Python交互設計(2)——如何獲取天氣數據
現在很多網(wǎng)站都可以提供天氣數據服務(wù),只要你的設備連接網(wǎng)絡(luò ),就可以方便的通過(guò)網(wǎng)絡(luò )請求訪(fǎng)問(wèn)到天氣數據,在dragonboard 410c開(kāi)發(fā)板上已經(jīng)提供了wifi連接服務(wù),可以方便的連接到網(wǎng)絡(luò ),因此,在dragonboard 410c上進(jìn)行開(kāi)發(fā)的過(guò)程中,我們可以通過(guò)網(wǎng)絡(luò )方式來(lái)獲取天氣數據,豐富我們的應用,目前,常用的有國家氣象局和新浪的天氣API接口,具體網(wǎng)址如下:
本文引用地址:http://dyxdggzs.com/article/201710/365588.htm國家氣象局天氣接口地址:
http://www.weather.com.cn/data/sk/101010100.html
http://www.weather.com.cn/data/cityinfo/101010100.html
http://m.weather.com.cn/data/101010100.html
新浪天氣接口地址:
http://www.weather.com.cn/data/sk/101010100.html
http://wthrcdn.etouch.cn/WeatherApi?city=深圳
這些接口我們可以用瀏覽器打開(kāi),就可以看到獲取的天氣信息,如下圖所示,這里我們打開(kāi)的是最后一個(gè)新浪的接口,可以獲取天氣的XML文件,查詢(xún)當前和前后幾天的天氣和環(huán)境指數。
但是我們在開(kāi)發(fā)過(guò)程中肯定不能用瀏覽器來(lái)這樣打開(kāi)我們的天氣接口了,更多的時(shí)候我們需要通過(guò)程序去自動(dòng)的獲取和解析天氣數據,今天就教大家如何在dragonboard 410c平臺下使用Python腳本來(lái)從新浪官方的API接口獲取天氣數據并且打印出來(lái)。
這里我們使用了pyqt提供的網(wǎng)絡(luò )管理服務(wù)類(lèi)QtNetwork模塊中的QNetworkAccessManager和QNetworkRequest等類(lèi)來(lái)實(shí)現網(wǎng)絡(luò )編程,實(shí)現對天氣API接口的訪(fǎng)問(wèn)獲取相關(guān)的數據服務(wù),具體的代碼如下:
from PyQt5 import QtWidgets, QtCore, QtXml, QtGui,QtNetwork
class weatherWindows(QtWidgets.QWidget):
def __init__(self):
super(weatherWindows,self).__init__()
self.img=QtGui.QImage()
self.manager = QtNetwork.QNetworkAccessManager()
self.weather_updateOK=0
self.Reply=self.manager.get(QtNetwork.QNetworkRequest(QtCore.QUrl(http://wthrcdn.etouch.cn/WeatherApi?city=%E6%B7%B1%E5%9C%B3)))
self.Reply.finished.connect(self.replayFinished)
def replayFinished(self):
global weather
print(weather replayFinished)
#status_code = self.Reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute)
qbyte = self.Reply.readAll()
pbyte = bytes(qbyte.data())
str(pbyte, encoding = utf-8)
weatherInfo = bytes.decode(pbyte)
print(weatherInfo)self.weather_updateOK=0
if __name__==__main__:
import sys
app=QtWidgets.QApplicaTIon(sys.argv)
myshow=weatherWindows()
sys.exit(app.exec_())
以上就是整個(gè)獲取天氣數據和打印天氣數據的代碼,運行python腳本就可以獲取天氣數據并且打印出來(lái),如下:
在上述代碼中,其核心是通過(guò)
QtNetwork.QNetworkAccessManager()創(chuàng )建一個(gè)網(wǎng)絡(luò )管理類(lèi)。
然后利用該類(lèi)獲得的對象發(fā)送url請求self.manager.get(QtNetwork.QNetworkRequest(QtCore.QUrl(“http://wthrcdn.etouch.cn/WeatherApi?city=%E6%B7%B1%E5%9C%B3”)))
完成之后我們就只要將請求完成后的信號與一個(gè)槽函數關(guān)聯(lián)起來(lái)就可以了,在完成請求獲取數據后,系統就可以自動(dòng)的調用槽函數來(lái)解析XML文件得到天氣信息了,其中關(guān)聯(lián)函數如下:
self.Reply.finished.connect(self.replayFinished)
replayFinished是槽函數,完成請求后就會(huì )調用該函數處理。
以上就是整個(gè)天氣預報demo的數據獲取過(guò)程,但是大家看到我們現在只是獲取了數據,但是通常在我們的應用中我們不需要顯示全部的數據,只需要解析部分數據出來(lái),然后進(jìn)行顯示即可,這里就需要對我們獲取的xml文件信息進(jìn)行解析了,而不只是簡(jiǎn)單的打印出xml文件信息,后去blog中將進(jìn)一步教大家如何來(lái)解析天氣XML文件數據,讀取數據內容。
評論