Python小工具——通过API获取天气预报

使用Python通过API获取指定城市的天气预报信息,包括实时天气、穿衣指南、紫外线强度等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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+的防晒护肤品,戴帽子、太阳镜。
洗 车: 较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值