想做一个天气推送程序,却被和风天气API的示例代码调试得快吐了

​ 最近各地好像都被暴雨袭击了,菜鸟小白就在想能不能通过python实现实时天气的定时推送呢?其实不用想,肯定是可以的。菜鸟小白百度到了一个和风API接口,可以实现天气的获取。

和风天气API获取

前面的调用百度AI开放平台的API进行动漫照片处理时一直都有同学反馈API该如何获取,那这一次菜鸟小白就学聪明了,直接给出API的获取方式,机智如我,哈哈~~
和风天气网址:https://console.heweather.com
首先我们需要注册一个和风天气的账号,然后新建一个应用
在这里插入图片描述

选择web API的key类型
在这里插入图片描述

最后新建完成是这样的
在这里插入图片描述

编码调试

说到编码,菜鸟小白首先就去看和风的开发文档嘛,一看发现这个还不错,还提供的python编码的示例,那菜鸟小白就想着自己直接拿过来用不就好了嘛,这一用可就入了一个大坑了。它代码库里面的源码是这样的

# coding=utf-8import requests
import re
​
KEY = "&key=2d849c62d67a4b9e94607d0f1c744561"
CITY = "city=深圳"
APIURL = "https://free-api.heweather.com/v5/"
USERNAME = "Acring"
s = requests.session()
​
​
class HeWeather(object):
    now_text = ""
    now_raw = []
    city_text = ""
    city_raw = []def __init__(self):
        self.city()# 利用获取IP地址的网页,获取本地城市名
    @staticmethod
    def getcity():
        inf = s.get("http://ip.lockview.cn/ShowIP.aspx").text
        cityname = re.findall(r"省(.*?)市", inf)[0]
        return cityname
​
    # 实况天气
    def now(self):
        api_type = "now?"
        # url = https://free-api.heweather.com/v5/now?city=深圳&key=2d849c62d67a4b9e94607d0f1c744561
        url = APIURL + api_type + CITY + KEY
        raw_json = s.get(url).json()
        if raw_json["HeWeather5"][0]["status"] != "ok":
            return
        self.now_raw = raw_json
        now_basic = raw_json["HeWeather5"][0]["basic"]
        now_now = raw_json["HeWeather5"][0]["now"]
        basic_city = now_basic["city"]  # 城市
        basic_cnty = now_basic["cnty"]  # 国家
        basic_id = now_basic["id"]  # 城市代码
        basic_lat = now_basic["lat"]  # 城市纬度
        basic_lon = now_basic["lon"]  # 城市经度
        basic_loc = now_basic["update"]["loc"]  # 当地时间
        now_tmp = now_now["tmp"]  # 实时气温
        now_cond = now_now["cond"]["txt"]  # 天气描述
        now_vis = now_now["vis"]  # 能见度
        now_hum = now_now["hum"]  # 相对湿度
        now_fl = now_now["fl"]  # 体感温度
        now_pcpn = now_now["pcpn"]  # 降雨量
        now_pres = now_now["pres"]  # 气压
        now_deg = now_now["wind"]["deg"]  # 风向(360度)
        now_dir = now_now["wind"]["dir"]  # 风向
        now_sc = now_now["wind"]["sc"]  # 风力
        now_spd = now_now["wind"]["spd"]  # 风速(kmph)
​
        text = """
实时天气:
亲爱的 {},您所在的地区为 {} ,
现在{}的天气是 {}天,
气温为 {}°
体感气温为 {}°
风向 {},
风速 {}
                """.format(USERNAME, basic_city, basic_loc, now_cond, now_tmp, now_fl, now_dir, now_spd)
        self.now_text = text
        return text
​
    def city(self):
        cityname = self.getcity()
        apitype = "search?city="
        # url = https://free-api.heweather.com/v5/search?city=host&key=2d849c62d67a4b9e94607d0f1c744561
        url = APIURL + apitype + cityname + KEY
​
        raw_json = s.get(url).json()
        if raw_json["HeWeather5"][0]["status"] != "ok":
            return "获取天气失败:", raw_json["HeWeather5"][0]["status"]
​
        basic = raw_json["HeWeather5"][0]["basic"]
        self.city_raw = basic
        basic_city = basic["city"]
        basic_cnty = basic["cnty"]
        basic_id = basic["id"]
        basic_prov = basic["prov"]  # 所属省会
​
        city = "&city=" + basic_city
​
        global CITY
        CITY = city
        city = "国家:{} 城市:{} 所属省会:{} 城市代码:{}".format(basic_cnty, basic_city, basic_prov, basic_id)
        self.city_text = city
        return
​
​
if __name__ == '__main__':
    heWeather = HeWeather()
    now = heWeather.now()
    print(now)

看着还挺清晰不是,一运行起来可就不行了,上来先报了一个这个错误

在这里插入图片描述
那我就分析呗是吧,我将inf信息打印出来看看是不是正则不对啊。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1"><title>
  IP地址 | IP查询
</title><meta name="robots" content="all" /><meta name="Keywords" content="IP, IP地址, IP查询" /><meta name="Description" content="实时查询国内,国外最新IP,LockviewIP库收录了全球最全的IP信息" /></head>
<body><form method="post" action="./ShowIP.aspx" id="form1">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="m0RyFd5IYrWl72CZJ/hR5y1ds+p16Io1XrLSegsLFTzTjkv4BIXlhKHOA5ypWBeZEwHMh8qB6eWtPtevuPI75OnlU6bnW2saAzaQRiDqmbU=" /><input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="1BC9C283" />
    <div id="menu"><b>ip.lockview.cn IP查询及更新系统</b>&nbsp;&nbsp;&nbsp;<a target="_top" class="t1" href="javascript:window.external.AddFavorite('http://ip.lockview.cn','IP查询')">加入收藏</a><a target="_top" class="t1" href="mailto:[email protected]">提建议</a></div>
    <div id="content" style="text-align:center">
        <div style="float:left"><a href="/">首页</a> > IP地址</div><hr />
        <div class="lighttext" style="float:left">如果结果您不满意,请及时让我们知道,您也可以 
        <a target="_blank" href="/SumbitIP.aspx">IP地址更正</a></div>
    </div>
    <div style="clear:both;margin-top:70px;width:100%">
        <div id="left" style="width:65%">您的IP地址是:112.31.*.*&nbsp;&nbsp;安徽省, 移动<br /><br /><a href='/Default.aspx'>查询更多IP</a><div id="divIPResult" class="left_3"></div>
    </div>
    <div id="right"><div id="divMap"><iframe src='BaiduMap.aspx?ip=&address=%e5%ae%89%e5%be%bd%e7%9c%81%2c+%e7%a7%bb%e5%8a%a8' width='420px' height='380px' scrolling='no' frameborder='0' allowTransparency='true'></iframe></div></div></div>
    <script type="text/javascript">
            if (screen.width < 1050) { document.getElementById("left").style.width = "56%"; }
</script>
    </form>
<script type="text/javascript">
    var dwstat_Host="cn01.dwstat.cn";
    document.write(unescape("%3Cscript src='http://" + dwstat_Host + "/Js/dwstat.js' type='text/javascript'%3E%3C/script%3E")); </script>
<script type="text/javascript">
    try { dwstat_Uid = "DT0181379"; dwstat_Tracker(); } catch (dwstat) { } </script>
<noscript><img alt="" src="http://cn01.dwstat.cn/Analytics/dwstat.aspx?uid=DT0181379" /></noscript>
</body>
</html>

果然,打印出来一看这也完全匹配不上啊,而且里面根本就没有我们需要的城市信息啊,那算了吧,我们不要获取城市信息了,直接返回菜鸟小白所在的城市名称——合肥算了。
OK,改过之后这一个算是先过去了,再次执行后又出错了
在这里插入图片描述
这次一看是请求报错了,结果仔细研究API文档发现这个API请求接口都变了,然后菜鸟小白把默认的API url、APItype和key全部改成现在的之后再次执行,还是报错了
在这里插入图片描述
这次看好像是返回处理出错了,再次去看看API接口文档吧,我太难受了,原来整理返回接口也全部都变了。再次重新调整吧。
此处省略N多的调整,最终我把代码调通了。返回结果是这样的。

实时天气:
亲爱的 菜鸟小白的学习分享,您所在的地区为 合肥 ,
现在2020-07-07T21:32+08:00的天气是 多云天,
气温为 25°
体感气温为 28°
风向 东南风,
风速 8

今天的事情让我尝试到,错误的API范例还不如不提供呢。和风天气的范例应该还是N年前的了吧,早点去更新啊。
今天因为菜鸟小白家里面有事,又因为这个和风API的代码调试,暂时只实现了通过python获取天气,但是还没有实现实时天气推送,这个就作为一个课后作业交给大家一起思考吧,后面菜鸟小白再来分享后面的实现方式和完整代码吧。
如果你也认同菜鸟小白的学习分享的话,那就给菜鸟小白一个关注、在看、点赞+赞赏吧,你们的支持,是我持续不断的动力。

推荐阅读:

教你搭建微信公众号自动答复机器人

媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。

关注微信公众号——菜鸟小白的学习分享

妈妈再也不用担心我找不到路了

在这里插入图片描述

一个人的学习——孤单

一群人的学习——幸福

猜你喜欢

转载自blog.csdn.net/qq_25535969/article/details/107216963