我用不到 40 行代码写了一个小工具,每天定时把当天的天气情况直接发到微信群里。
查询天气接口
要获取天气情况,需要一个查询天气的接口,网上找了一下,一般都是注册后送一定调用次数的,我选择了一个,免费送 500 次查询次数的。
我们看看接口的 API 文档。
其中城市名 cityname 和 key 是必填项。
http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=您申请的KEY
key 值在 juhe.cn 我的接口那一栏中可以看到。
我们也可以事先在 Postman 工具中调试看看接口能否调通。
Postman 接口工具没用过的没关系,他们网页上也提供了调试工具。
查询天气方法
我们直接用 requests 库请求接口就能获得 json 格式的天气信息,json 数据中包含了当天和未来几天的天气信息,这里我只需要当天的,当天数据都在 result 下的 today 里,提取出来用 return 返回。
通过微信发送天气消息
我们通过微信把天气信息发到群里,这里我们需要用到调用微信的库,itchat 库或者 wxpy 都可以,这里我用了 wxpy 库。
先导入 wxpy 库。
from wxpy import *
我们把刚才的请求接口返回的天气信息整合一下,然后用 wxpy 库的 search 方法通过群名称找到你需要发送天气消息的这个群,用 send 方法发送。
我这里是发送到群里,当然,你也可以直接发送给个人微信。
my_friend = bot.friends().search(u'pk哥')[0]
定时操作
如果每次都需要我们手动运行,那就有点麻烦,我们要让程序每天在固定时间定时发送,这里需要用到 Timer 定时器。
Timer 定时器格式:
Timer(86400, get_weather)
第一个参数表示相隔指定时间(单位:秒)后再次调用方法(第二个参数),注意,方法后不要带括号。
86400 秒就是相隔 24 小时,也就是一天的时间。
-
t = Timer(86400, get_weather) -
t.start() -
t.join()
异常处理
如果信息发送失败,我把信息发给自己,这里我做了一个异常处理。
我们的程序需要持续运行,那是不是需要一直在电脑上运行啊?这样有点不现实啊,我们把它部署到服务器上就可以搞定了,现在服务器也很便宜,做活动的时候一般 100 元以内就可以买一年。
部署在服务器
在服务器中运行程序,直接扫码登录微信,下面是我上周五开始运行的,相隔 24 小时后,周六再次调用方法,获取新的天气信息。