今天用Pyqt做了个全国天气查询的小程序,可以查询全国各地区当前的天气情况,主要包括温度、风力、风向以及湿度这几个天气参数。
第一步:UI界面设计
首先,使用Qtdesigner进行界面设计,如下图: 设计完成后,将.ui文件转换为.py文件。
第二步:获取天气参数
本程序天气参数主要通过下面这个网站获取:
http://www.weather.com.cn
通过接口API:http://www.weather.com.cn/data/sk/城市代码.html,即可获取想要城市或区域的天气信息。 例如获取北京的天气信息,北京代码为‘101010100’:
rep = requests.get('http://www.weather.com.cn/data/sk/101010100.html')
rep.encoding = 'utf-8'
res = rep.json()
print(res)
得到的结果如下:
{'weatherinfo': {'city': '北京', 'cityid': '101010100', 'temp': '27.9', 'WD': '南风', 'WS': '小于3级', 'SD': '28%', 'AP': '1002hPa', 'njd': '暂无实况', 'WSE': '<3', 'time': '17:55', 'sm': '2.1', 'isRadar': '1', 'Radar': 'JC_RADAR_AZ9010_JB'}}
因此只要知道全国所有地区的代码,即可获取所有地区的参数信息,通过对网站的研究,通过以下接口可以获取到网站内所用到的全国地区代码信息:
https://j.i8tq.com/weather2020/search/city.js
直接在浏览器中输入上述js接口,结果如下: 我们可以通过requests库,访问这个接口,然后直接将结果保存为本地文件即可得到想要的全国各个区域数据,通过读取本地保存文件即可获取想要的城市区域编码啦。 保存文件代码如下:
url1 = 'https://j.i8tq.com/weather2020/search/city.js'
rep = requests.get(url1)
rep.encoding = 'utf-8'
all_result = str(rep.text).split('=')[1]
with open('citycode.txt','w') as f:
f.write(all_result)
print('success')
第三步:编写主程序代码
主要是查询函数的编写,内容如下:
def queryWeather(self):
cityCode = self.getCityCode()
rep = requests.get('http://www.weather.com.cn/data/sk/' + cityCode + '.html')
rep.encoding = 'utf-8'
res = rep.json()
cur_city = self.ui.comb2.currentText()
cur_region = self.ui.comb3.currentText()
msg1 = '城市: %s市' % cur_city + '\n'
msg2 = '风向: %s' % res['weatherinfo']['WD'] + '\n'
msg3 = '温度: %s' % res['weatherinfo']['temp'] + ' 度' + '\n'
msg4 = '风力: %s' % res['weatherinfo']['WS'] + '\n'
msg5 = '湿度: %s' % res['weatherinfo']['SD'] + '\n'
if cur_city == cur_region:
result = msg1 + msg2 + msg3 + msg4 + msg5
else:
msg_region = '区: %s区' % cur_region + '\n'
result = msg1 + msg_region + msg2 + msg3 + msg4 + msg5
self.ui.textResult.setText(result)
好啦,到此主要的功能基本完成。
欢迎大家关注我,共同学习交流。
完整代码获取方式: 方式一: 完整的代码,已经打包上传至我的CSDN资源,可直接下载。 方式二: 关注本人下面公众号“阿旭算法与机器学习”,发送:全国天气查询,即可获取下载链接。
|