前言:

近期刚入门Python,所以一段时间内发布的Python文章多以激发学习兴趣为主,不会有很高深的算法等等;我也会定期分享一些有意思的Python程序

废话不多说,我们先来看一下最后的效果:




python开发天气预报软件 python天气预报的功能介绍_python入门程序例子


python开发天气预报软件 python天气预报的功能介绍_墨迹天气api接口_02


这里可能有人就要问了,为什么不写GUI,当然是因为懒啦


python开发天气预报软件 python天气预报的功能介绍_python写一个表白程序_03


完成这个程序你需要:

Python的基础开发环境:这一点本文不赘述,网上的教程很多,本文的环境是python3.7;

pyinstall模块:使用pip下载,主要用来将你的python程序打包成Windows的可执行文件,这样在没有python环境的计算机上也可以使用;

requests模块:一般来说是自带的模块,没有的话就pip install;主要用于get对api的请求;

正文开始:

要想获取实时的天气数据,网上其实有很多的免费api可以使用,例如百度开放平台,和风,墨迹天气等等等;未来我会写一篇关于Python爬虫的文章,来教大家如何爬取网站上的实时天气;

这里因为写上一篇文章的时候已经注册了和风天气的开发者,本篇文章我们依然以和风的api为例:

如果不知道如何使用他的api,大家可以看一下我的上一篇文章,里面有详细介绍

(顺手点个关注呗≧◉◡◉≦)

首先我们导入requests模块,并get他的返回值打印出来:

import requests

place=input('请输入所在地点,可精确到区县:')

url='https://free-api.heweather.net/s6/weather/forecast?location='+place+'&key=#' #key就隐藏了,到时候大家填上自己的key就行

res=requests.get(url).json()

print(res)

然后就可以看到如下内容:


python开发天气预报软件 python天气预报的功能介绍_ci_04


我们可以看和风的开发文档,了解一下这些字段都是代表什么意思


python开发天气预报软件 python天气预报的功能介绍_ci_05


python开发天气预报软件 python天气预报的功能介绍_ci_06


python开发天气预报软件 python天气预报的功能介绍_ci_07


所以我们就可以提取我们想要的字段了:

首先我们要考虑到的一个状况是:如果我们一不小心输入了错误的地理位置信息怎么办,例如不存在的地方,打错了字等等,那么我们这里就要用到一个status的返回值,我们叫做接口状态,只有当请求的数据正确时,它才会返回一个值叫做‘ok’,所以我们可以在程序的开始加一个判断条件:

while status!='ok':

place = input('输入地点无法找到,请重新输入:')

url = 'https://free-api.heweather.net/s6/weather/forecast?location=' + place + '&key=#'

res = requests.get(url).json()

status = res['HeWeather6'][0]['status']

它的意思是,当状态返回不等于‘ok’时,开始循环,重新对place进行赋值,重新发送请求,重新定义接口状态

到这个时候我们就可以来慢慢提取我们想要的元素了:

#地区相关

admin_area=res['HeWeather6'][0]['basic']['admin_area'] #获取到的省级

city=res['HeWeather6'][0]['basic']['parent_city'] #获取到的市级

stay=res['HeWeather6'][0]['basic']['location'] #获取到的区县级

update=res['HeWeather6'][0]['update']['loc'] #获取数据的当日时间,精确到分钟

tz=res['HeWeather6'][0]['basic']['tz'] #当地的时区

#温度相关

tmp_max=res['HeWeather6'][0]['daily_forecast'][0]['tmp_max'] #当天最高气温

tmp_max_2=res['HeWeather6'][0]['daily_forecast'][1]['tmp_max'] #第二天最高气温

tmp_max_3=res['HeWeather6'][0]['daily_forecast'][2]['tmp_max'] #第三天最高气温

tmp_min=res['HeWeather6'][0]['daily_forecast'][0]['tmp_min'] #当天最低气温

tmp_m_2=res['HeWeather6'][0]['daily_forecast'][1]['tmp_min'] #第二天最低气温

tmp_min_3=res['HeWeather6'][0]['daily_forecast'][2]['tmp_min'] #第三天最低气温

#天气状况描述

cond_txt_d=res['HeWeather6'][0]['daily_forecast'][0]['cond_txt_d'] #当天日间天气状况描述

#降水概率

pop=res['HeWeather6'][0]['daily_forecast'][0]['pop'] #当天降水概率

最后就是我们要开始输出我们想要的信息了:

print('最近一次获取数据时间为:'+update+'您所在的地区为:'+admin_area+'省'+city+'市'+stay+'区(县)')

print('今天最高气温为:'+tmp_max+'度'+'最低气温为:'+tmp_min+'度')

print('天气状况为:'+cond_txt_d+'降水概率为'+pop+'%')

最后一个重点:

就是在程序的结尾一定要加上:

input('输入任意键退出')

这其实是一个小知识点;如果你在ide环境里面运行当然没问题,但是当编译成可执行程序后,计算机执行完所有语句之后就会闪退,这时候我们加入一个输入语句,使计算机能够停下来等待我们的输入,不会造成闪退的现象;

在写好程序之后,我们需要进入到该程序的目录中去,按住shift键点鼠标右键,打开Windows shell,使用pyinstaller进行编译,


python开发天气预报软件 python天气预报的功能介绍_墨迹天气api接口_08


其语法格式为:-F表示文件 -i表示程序图标,着这个例子里面我用了一个名字叫做222的ico图标

(记住,程序图标一定要是ico格式的)

然后当前目录会新增几个目录,大家在dist这个目录下就可以得到exe文件


python开发天气预报软件 python天气预报的功能介绍_python开发天气预报软件_09


最后附上源码:

import requests

place=input('请输入所在地点,可精确到区县:')

url='https://free-api.heweather.net/s6/weather/forecast?location='+place+'&key=04e8effac2cf46ad9cfddd3e3330ae32'

res=requests.get(url).json()

print(res)

status=res['HeWeather6'][0]['status']

while status!='ok':

place = input('输入地点无法找到,请重新输入:')

url = 'https://free-api.heweather.net/s6/weather/forecast?location=' + place + '&key=04e8effac2cf46ad9cfddd3e3330ae32'

res = requests.get(url).json()

status = res['HeWeather6'][0]['status']

#地区相关

admin_area=res['HeWeather6'][0]['basic']['admin_area'] #获取到的省级

city=res['HeWeather6'][0]['basic']['parent_city'] #获取到的市级

stay=res['HeWeather6'][0]['basic']['location'] #获取到的区县级

update=res['HeWeather6'][0]['update']['loc'] #获取数据的当日时间,精确到分钟

tz=res['HeWeather6'][0]['basic']['tz'] #当地的时区

#温度相关

tmp_max=res['HeWeather6'][0]['daily_forecast'][0]['tmp_max'] #当天最高气温

tmp_max_2=res['HeWeather6'][0]['daily_forecast'][1]['tmp_max'] #第二天最高气温

tmp_max_3=res['HeWeather6'][0]['daily_forecast'][2]['tmp_max'] #第三天最高气温

tmp_min=res['HeWeather6'][0]['daily_forecast'][0]['tmp_min'] #当天最低气温

tmp_m_2=res['HeWeather6'][0]['daily_forecast'][1]['tmp_min'] #第二天最低气温

tmp_min_3=res['HeWeather6'][0]['daily_forecast'][2]['tmp_min'] #第三天最低气温

#天气状况描述

cond_txt_d=res['HeWeather6'][0]['daily_forecast'][0]['cond_txt_d'] #当天日间天气状况描述

pop=res['HeWeather6'][0]['daily_forecast'][0]['pop'] #当天降水概率

print('最近一次获取数据时间为:'+update+'您所在的地区为:'+admin_area+'省'+city+'市'+stay+'区(县)'+'时区是:东'+tz[1]+'区')

print('今天最高气温为:'+tmp_max+'度'+'最低气温为:'+tmp_min+'度')

print('天气状况为:'+cond_txt_d+'降水概率为'+pop+'%')

input('输入任意键退出')