Python通过API获取天气预报
闲来无事,用Python实现了一个小工具,通过实现API来获取当前的天气预报。
获取API的key
在阿凡达数据上查找天气预报相关的API,注册申请可获得一个key。API有详尽的文档,会返回Json格式的一堆数据,我们解析出来即可。非常简单。话不多说,上代码吧。
实现
#注意:先安装requests。
# -*- coding: utf-8 -*-
import requests
class WeatherReport():
def __init__(self,cityName):
self.Url = 'http://api.avatardata.cn/Weather/Query'
self.AppKey = '23f69de012da4306815193a00eca0230'
self.Value = {'key':self.AppKey, 'cityname':cityName}
def GetContent(self):
content = requests.get(self.Url,params=self.Value)
jsContent = content.json()
return jsContent
def FormartContent(self):
jsContent = self.GetContent()
date = jsContent['result']['realtime']
jsWeather = jsContent['result']['weather'][0]
allContent = {}
allContent['AddressAndTime'] = date['city_name'] + " ** " + jsWeather['date'] + " ** " + jsWeather['nongli'] + u" ** 星期" + jsWeather['week']
allContent['WeatherInfo'] = self.GetWeatherInfo(jsWeather['info'])
jsLife = jsContent['result']['life']
allContent['LifeInfo'] = self.GetLifeInfo(jsLife['info'])
strContent = ""
strContent = strContent + allContent['AddressAndTime']+"\n"
strContent = strContent + "******************************************" + "\n"
strContent = strContent + allContent['WeatherInfo']
strContent = strContent + "******************************************" + "\n"
strContent = strContent + allContent['LifeInfo']
print strContent
def GetLifeInfo(self,info):
iIndex = 0
LifeInfo = {}
for item in info.values():
if (type(item) is not list):
iIndex = iIndex+1
continue
if (0 == iIndex):
LifeInfo['chuanyi'] = u"穿 衣: " + item[1]
if (1 == iIndex):
LifeInfo['kongtiao'] = u"空 调: " + item[1]
if (2 == iIndex):
LifeInfo['yundong'] = u"运 动: " + item[1]
if (3 == iIndex):
LifeInfo['xiche'] = u"紫外线: " + item[1]
if (4 == iIndex):
LifeInfo['wuran'] = u"洗 车: " + item[1]
if (5 == iIndex):
LifeInfo['ziwaixian'] = u"感 冒: " + item[1]
if (6 == iIndex):
LifeInfo['ganmao'] = u"污 染: " + item[1]
iIndex = iIndex +1
strContent = ""
for item in LifeInfo.values():
strContent = strContent + item + "\n"
return strContent
def GetWeatherInfo(self,info):
iIndex = 0
weatherInfo = {}
for item in info.values():
if (type(item) is not list):
iIndex = iIndex + 1
continue
strContent = self.FormartWeatherInfo(item)
if (0 == iIndex):
weatherInfo['dawn'] = strContent
if (1 == iIndex):
weatherInfo['day'] = strContent
if (2 == iIndex):
weatherInfo['night'] = strContent
iIndex = iIndex + 1
strContent = ""
for item in weatherInfo.values():
strContent = strContent + item + "\n"
return strContent
def FormartWeatherInfo(self,contents):
iIndex = 0
strContent = ""
listContent = []
for item in contents:
if (0 == iIndex):
iIndex = iIndex + 1
continue
if (1 == iIndex):
strContent = u"当前天气:"
if (2 == iIndex):
strContent = u"当前温度: "
if (3 == iIndex):
strContent = u"当前风向: "
if (4 == iIndex):
strContent = u"风力等级: "
if (5 == iIndex):
strContent = u"刷新时间: "
if (6 == iIndex):
strContent = u"温馨提示: "
strContent = strContent + contents[iIndex]
iIndex = iIndex + 1
listContent.append(strContent)
strContent = ""
for iter in listContent:
strContent = strContent + iter + "\n"
return strContent
weatherObj = WeatherReport("西安")
weatherObj.FormartContent()
输出
西安 * 2017-08-18 * 闰六月廿七 ** 星期五
当前天气:多云
当前温度: 33
当前风向: 东北风
风力等级: 微风
刷新时间: 06:09
当前天气:多云
当前温度: 24
当前风向: 东北风
风力等级: 微风
刷新时间: 19:29
穿 衣: 天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。
空 调: 天气热,到中午的时候您将会感到有点热,因此建议在午后较热时开启制冷空调。
运 动: 天气较好,较适宜进行各种运动,但因天气热,请适当减少运动时间,降低运动强度。
感 冒: 各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。
紫外线: 属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。
洗 车: 较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。