QQ泡沫乐园 · 免费提供游戏辅助,破解软件,活动资讯,喜欢记得收藏哦!
综合软件_线报活动_游戏辅助_最新电影_最优质的的辅助分享平台

皮皮全网最低代刷,刷赞网站推广全网,ks快手刷双击

网络 2022-07-01 12:08

0 简介

前段时间,我发现了一个免费的天气预报 API。将 API 解析并组装成我想要使用的格式需要很长时间。我每天都在思考如何给自己发送天气信息。我最近偶然发现了 wxpy 库,使用它再合适不过了。下面是wxpy库的介绍:

wxpy基于itchat,使用Web微信的通信协议,通过大量的界面优化提高了模块的易用性,并进行了丰富的功能扩展。实现微信登录、收发消息、搜索好友、数据统计、微信公众号、微信好友、微信群基本信息获取等功能。

废话不多说,写代码吧。

1 环境

操作系统:Windows/Linux

Python 版本:3.7.2

2 代码实现

我们想用Python发送微信,发送的内容是每天最新的天气信息。显然我们需要完成两部分的准备,我们先来看看获取天气信息的部分。

2.0 准备工作

我们在本文中使用的第三方库包括 requests 和 wxpyy。如果环境尚不存在,请按如下方式安装。

pip 安装 wxpy

pip 安装请求

2.1 获取天气信息

这里我使用的API的请求链接如下:

请求方法是GET方法。使用时,请将其替换为您所在城市对应的city_code。除此之外,您无需携带任何参数。

请求为restfull风格,city_code为9位,如下例所示:

{
 "_id": 58,
 "id": 59,
 "pid": 3,
 "city_code": "101230201",
 "city_name": "厦门"
}

您可以从 _city.json 文件中获取每个城市对应的数字。这个文件我已经放在Github上这篇文章对应的目录下,大家可以自己查看使用。

# weather API的URL,此处的城市编号,参看_city.json
url = 'http://t.weather.sojson.com/api/weather/city/101010200'
header = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
}
# 请求Weather API并拿到服务器返回的数据
rep = requests.get(url, headers = header)
rep.encoding = "utf-8"
result = ''
weather = rep.tex

这个API接口的返回值有很多内容。以下仅展示部分返回信息。实际使用中只用到了三个内容,第一个是城市信息。

"cityInfo": {
 "city": "海淀区", //请求城市
 "cityId": "101010200", //城市ID
 "parent": "北京市", //上级,一般是省份
 "updateTime": "09:02" //天气更新时间
}

其次,城市当前天气的空气相关指数。

"data": {
 "shidu": "32%", //湿度

 "pm25": 35.0, //pm2.5
 "pm10": 97.0, //pm10
 "quality": "良", //空气质量
 "wendu": "7", //温度
 "ganmao": "极少数敏感人群应减少户外活动", //感冒提醒(指数)
}

第三部分,城市当前天气的温度和风等一些其他指标。

"forecast": [ //今天+未来14天
 {
  "date": "16", //日期
  "sunrise": "06: 28",
  "high": "高温 20.0℃",
  "low": "低温 2.0℃",
  "sunset": "18: 21",
  "aqi": 48.0, 
  "ymd": "2019-03-16", //年月日
  "week": "星期六",
  "fx": "西北风", //风向
  "fl": "3-4级", //风力
  "type": "晴",
  "notice": "愿你拥有比阳光明媚的心情"
 }
]

注意:该API接口返回值的完整示例请参考Github本文目录下的weather.json文件。

得到返回值后,需要对其进行解析、转换、组装成我们想要的格式。

# 解析服务器返回的数据,具体可参考weather.json文件
index_cityInfo = weather.find("cityInfo")
index_cityId = weather.find("cityId")
index_shidu = weather.find("shidu")
index_pm25 = weather.find("pm25")
index_pm10 = weather.find("pm10")
index_quality = weather.find("quality")
index_wendu = weather.find("wendu")
index_ganmao = weather.find("ganmao")
index_forecast = weather.find("forecast")
index_ymd = weather.find("ymd", index_forecast)
index_week = weather.find("week", index_forecast)
index_sunset = weather.find("sunset", index_forecast)
index_high = weather.find("high", index_forecast)
index_low = weather.find("low", index_forecast)
index_fx = weather.find("fx", index_forecast)
index_fl = weather.find("fl", index_forecast)
index_aqi = weather.find("aqi", index_forecast)
index_type = weather.find("type", index_forecast)
index_notice = weather.find("notice", index_forecast)

这是我最终想要达到的目标:

#今天的天气预报

#年月日+工作日+家乡

qq删除好友对方发消息_qq如何定时发消息给好友_手机qq没加好友发消息

#天气类型+风向+风力

#温度范围(最低温度~最高温度)

#污染指数:PM2.5/PM10/AQI

#空气质量

#当前温度+空气湿度

#通知信息

具体转换代码如下:

result = '今日天气预报' + '\n'  + weather[index_ymd + 6:index_week - 3] + " "  + weather[index_week + 7:index_fx - 3] + " "  + weather[index_cityInfo + 19:index_cityId - 3] + '\n'  + "天气: " + weather[index_type + 7:index_notice - 3] + " "  + weather[index_fx + 5:index_fl - 3]  + weather[index_fl + 5:index_type - 3] + '\n'  + "温度范围:" + weather[index_low + 9:index_sunset - 3] + " ~"  + weather[index_high + 10:index_low - 3] + '\n'  + "污染指数: PM2.5:" + weather[index_pm25 + 6:index_pm10 - 1] + ""  + "PM10:" + weather[index_pm10 + 6:index_quality - 1] + " "  + "AQI:" + weather[index_aqi + 5:index_ymd - 2] + '\n'  + "空气质量:" + weather[index_quality + 10:index_wendu - 3] + '\n'  + "当前温度:" + weather[index_wendu + 8:index_ganmao - 3] + " "  + "空气湿度:" + weather[index_shidu + 8:index_pm25 - 3] + '\n'  + weather[index_notice + 9:weather.find('}', index_notice) - 1]

这完成了我们的第一步,获取天气信息。接下来就是登录微信定时发消息了。

2.2 登录微信定时发消息

你要做的第一件事就是登录微信,一行代码就可以搞定。这其实就是扫描二维码登录网页版微信。

# 初始化机器人,扫码登陆微信,适用于Windows系统
bot = Bot()
# Linux系统,执行登陆请调用下面的这句
bot = Bot(console_qr=2, cache_path="botoo.pkl")

然后我们需要定义一个发送消息的函数,将获取并解析的天气信息发送给指定的微信好友。

# 调用get_weather函数
GW = get_weather()
# 填入你朋友的微信昵称,注意这里不是备注,也不是微信帐号
my_friend = bot.friends().search(u'一个昵称')[0]
# 发送微信消息
my_friend.send(u"早上好Y(^o^)Y,这里是今日份的天气信息请查收!")
my_friend.send(GW) 
my_friend.send(u"Have a Nice Day!")
# 每隔86400秒(1天),发送1次
t = Timer(86400, auto_send)
t.start()

接下来,您可以使用 try...except... 语句在消息失败时提醒您:

try:
 '''此处为发送消息的代码,即上一段内容'''
except:
 # 你的微信昵称,注意这里不是备注,也不是微信帐号
 my_friend = bot.friends().search('&娴敲棋子&')[0]
 my_friend.send(u"报告老板,今日份的信息发送失败了!")

最后运行主函数,调用发送消息的函数。

# 调用函数进行消息发送
auto_send()

3 效果展示

这是我一大早收到的微信消息截图,看起来还不错。没有白费"text-align: center">

4 后记

我把这个脚本扔到我的树莓上,它挂在后台继续运行,非常完美。

这只是为了实现最简单的定时发送。未来我们会考虑如何实现多个时间点的定时发送。我们还计划添加早间新闻信息和火车票信息。

以上是小编给大家介绍的一个用python自制的微信机器人。它定期发送详细的天气预报和集成。我希望它对你有帮助。如有任何问题,请给我留言,小编会及时回复您。 非常感谢您对网站的支持!