Dragonbaord 410c Python交互设计(2)——天气预报demo数据获取

时间:2021-06-29 23:01:12

         现在很多网站都可以提供天气数据服务,只要你的设备连接网络,就可以方便的通过网络请求访问到天气数据,在dragonboard 410c开发板上已经提供了wifi连接服务,可以方便的连接到网络,因此,在dragonboard 410c上进行开发的过程中,我们可以通过网络方式来获取天气数据,丰富我们的应用,目前,常用的有国家气象局和新浪的天气API接口,具体网址如下:

         国家气象局天气接口地址:

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

         这些接口我们可以用浏览器打开,就可以看到获取的天气信息,如下图所示,这里我们打开的是最后一个新浪的接口,可以获取天气的XML文件,查询当前和前后几天的天气和环境指数。

Dragonbaord 410c Python交互设计(2)——天气预报demo数据获取       

        但是我们在开发过程中肯定不能用浏览器来这样打开我们的天气接口了,更多的时候我们需要通过程序去自动的获取和解析天气数据,今天就教大家如何在dragonboard 410c平台下使用python脚本来从新浪官方的API接口获取天气数据并且打印出来。

        这里我们使用了pyqt提供的网络管理服务类QtNetwork模块中的QNetworkAccessManager和QNetworkRequest等类来实现网络编程,实现对天气API接口的访问获取相关的数据服务,具体的代码如下:

        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_())

       以上就是整个获取天气数据和打印天气数据的代码,运行python脚本就可以获取天气数据并且打印出来,如下:

Dragonbaord 410c Python交互设计(2)——天气预报demo数据获取

       在上述代码中,其核心是通过

       QtNetwork.QNetworkAccessManager()创建一个网络管理类。

       然后利用该类获得的对象发送url请求self.manager.get(QtNetwork.QNetworkRequest(QtCore.QUrl("http://wthrcdn.etouch.cn/WeatherApi?city=%E6%B7%B1%E5%9C%B3")))

       完成之后我们就只要将请求完成后的信号与一个槽函数关联起来就可以了,在完成请求获取数据后,系统就可以自动的调用槽函数来解析XML文件得到天气信息了,其中关联函数如下:

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

      replayFinished是槽函数,完成请求后就会调用该函数处理。

     以上就是整个天气预报demo的数据获取过程,但是大家看到我们现在只是获取了数据,但是通常在我们的应用中我们不需要显示全部的数据,只需要解析部分数据出来,然后进行显示即可,这里就需要对我们获取的xml文件信息进行解析了,而不只是简单的打印出xml文件信息,后去blog中将进一步教大家如何来解析天气XML文件数据,读取数据内容。