<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Dragonbaord 410c開發(fā)板的Python交互設(shè)計(jì)(2)——如何獲取天氣數(shù)據(jù)

          基于Dragonbaord 410c開發(fā)板的Python交互設(shè)計(jì)(2)——如何獲取天氣數(shù)據(jù)

          作者: 時(shí)間:2017-10-11 來(lái)源:網(wǎng)絡(luò) 收藏

          現(xiàn)在很多網(wǎng)站都可以提供天氣數(shù)據(jù)服務(wù),只要你的設(shè)備連接網(wǎng)絡(luò),就可以方便的通過(guò)網(wǎng)絡(luò)請(qǐng)求訪問(wèn)到天氣數(shù)據(jù),在dragonboard 410c開發(fā)板上已經(jīng)提供了wifi連接服務(wù),可以方便的連接到網(wǎng)絡(luò),因此,在dragonboard 410c上進(jìn)行開發(fā)的過(guò)程中,我們可以通過(guò)網(wǎng)絡(luò)方式來(lái)獲取天氣數(shù)據(jù),豐富我們的應(yīng)用,目前,常用的有國(guó)家氣象局和新浪的天氣API接口,具體網(wǎng)址如下:

          本文引用地址:http://www.ex-cimer.com/article/201710/365588.htm

          國(guó)家氣象局天氣接口地址:

          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=深圳

          這些接口我們可以用瀏覽器打開,就可以看到獲取的天氣信息,如下圖所示,這里我們打開的是最后一個(gè)新浪的接口,可以獲取天氣的XML文件,查詢當(dāng)前和前后幾天的天氣和環(huán)境指數(shù)。

          但是我們?cè)陂_發(fā)過(guò)程中肯定不能用瀏覽器來(lái)這樣打開我們的天氣接口了,更多的時(shí)候我們需要通過(guò)程序去自動(dòng)的獲取和解析天氣數(shù)據(jù),今天就教大家如何在dragonboard 410c平臺(tái)下使用Python腳本來(lái)從新浪官方的API接口獲取天氣數(shù)據(jù)并且打印出來(lái)。

          這里我們使用了pyqt提供的網(wǎng)絡(luò)管理服務(wù)類QtNetwork模塊中的QNetworkAccessManager和QNetworkRequest等類來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)編程,實(shí)現(xiàn)對(duì)天氣API接口的訪問(wèn)獲取相關(guān)的數(shù)據(jù)服務(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è)獲取天氣數(shù)據(jù)和打印天氣數(shù)據(jù)的代碼,運(yùn)行腳本就可以獲取天氣數(shù)據(jù)并且打印出來(lái),如下:

          在上述代碼中,其核心是通過(guò)

          QtNetwork.QNetworkAccessManager()創(chuàng)建一個(gè)網(wǎng)絡(luò)管理類。

          然后利用該類獲得的對(duì)象發(fā)送url請(qǐng)求self.manager.get(QtNetwork.QNetworkRequest(QtCore.QUrl(“http://wthrcdn.etouch.cn/WeatherApi?city=%E6%B7%B1%E5%9C%B3”)))

          完成之后我們就只要將請(qǐng)求完成后的信號(hào)與一個(gè)槽函數(shù)關(guān)聯(lián)起來(lái)就可以了,在完成請(qǐng)求獲取數(shù)據(jù)后,系統(tǒng)就可以自動(dòng)的調(diào)用槽函數(shù)來(lái)解析XML文件得到天氣信息了,其中關(guān)聯(lián)函數(shù)如下:

          self.Reply.finished.connect(self.replayFinished)

          replayFinished是槽函數(shù),完成請(qǐng)求后就會(huì)調(diào)用該函數(shù)處理。

          以上就是整個(gè)天氣預(yù)報(bào)demo的數(shù)據(jù)獲取過(guò)程,但是大家看到我們現(xiàn)在只是獲取了數(shù)據(jù),但是通常在我們的應(yīng)用中我們不需要顯示全部的數(shù)據(jù),只需要解析部分?jǐn)?shù)據(jù)出來(lái),然后進(jìn)行顯示即可,這里就需要對(duì)我們獲取的xml文件信息進(jìn)行解析了,而不只是簡(jiǎn)單的打印出xml文件信息,后去blog中將進(jìn)一步教大家如何來(lái)解析天氣XML文件數(shù)據(jù),讀取數(shù)據(jù)內(nèi)容。



          關(guān)鍵詞: DragonBoard410c python

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();