用python自制微信机器人,定时发送天气预报

0 引言

前段时间找到了一个免费的天气预报API,费了好段时间把这个API解析并组装成自己想用的格式了,就想着如何实现每天发送天气信息给自己。最近无意中发现了wxpy库,用它来做再合适不过了。以下是wxpy库的简介:

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

废话不多说,代码写起来。

1 环境

操作系统:Windows / Linux

Python版本:3.7.2

2 代码实现

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

2.0 准备工作

本文我们用到的第三方库有requests、wxpyy,若环境还没有,按如下方式进行安装即可。

pip install wxpy
pip install requests

2.1 获取天气信息

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

http://t.weather.sojson.com/api/weather/city/city_code

请求方式是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)

这是我最终想达到的效果如下:

# 今日天气预报
# 年月日 + 星期 + 所在地城市
# 天气类型 + 风向 + 风力
# 温度范围(最低温度~最高温度)
# 污染指数:PM2.5/PM10/AQI
# 空气质量
# 当前温度 + 空气湿度
# Notice信息

转换化具体代码就是这样子的:

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 登录微信定时发送消息

首先要登录微信,一行代码就搞定了。这里实际上是扫二维码登录了一个Web版的微信。

# 初始化机器人,扫码登陆微信,适用于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 效果展示

这是我清晨收到的微信消息截图,看上去还不错。没白忙活

原文地址:https://blog.51cto.com/miracleyoung/2368270

时间: 2024-08-02 17:23:26

用python自制微信机器人,定时发送天气预报的相关文章

Python自制微信机器人:群发消息、自动接收好友

运营公众号也有半年了,今年5月份开始的,之前一直用一款windows工具来运营自动接受好友请求.群发文章.自动回复等操作,但颇有不便. 举几个场景: 突然在外面看到一篇文章很好,临时写了一篇,想群发一下. 好友加我微信后,每次都要手动备注. 这些使用客户端工具都无法解决,因为客户端工具的一个特点就是native,需要你直接操作电脑,不方便. 所以就想着自己写一个干脆,经过一周漫长的开发(主要是时间太零散了),把第一版定制化微信机器人给完成了,第一版里实现了几个功能: 自动添加好友,并同时根据附加

Python实现微信定时发送天气预报

schedule实现定时 1 import requests 2 from requests import exceptions 3 from urllib.request import urlopen 4 from bs4 import BeautifulSoup 5 import re 6 from wxpy import * 7 import schedule 8 import time 9 10 11 bot=Bot(cache_path=True) #登陆网页微信,并保存登陆状态 12

QQ邮件定时发送天气预报

1.首先利用request库去请求数据,天气预报使用的是和风天气的API(www.heweather.com/douments/api/s6/weather-forecast) 2.利用python的jinja2模块写一个html模板,用于展示数据 3.python的email构建邮件,smtplib发送邮件 4.最后使用crontab定时执行python脚本 涉及的具体知识可以去看文档,本文主要就是解释代码的结构 和风天气API API没什么好说的,利用requests库去请求数据,然后提取出

微信定时发送天气python3

爬取天气信息,定时发送天气给多人python3 1 import requests 2 from requests import exceptions 3 from urllib.request import urlopen 4 from bs4 import BeautifulSoup 5 import re 6 from wxpy import * 7 import schedule 8 import time 9 10 11 #bot=Bot(cache_path=True) #登陆网页微

微信公众号+python+新浪SAE实现实时天气预报功能

本文主要谈谈如何做一个具有天气预报功能的公众号. 话不多说先上图,实现的功能如下图所示: 点击微信右下角的"+"号,分享任意一个位置信息,公众号后台自动回复当地的天气情况.这里的天气预报是用python从中国天气网抓取的雷达数据.有没有更精准的数据源呢,当然有啦,但这不是本文的重点,这里我就不详说了. 用到的工具:新浪SAE + 微信公众平台 + python2.7(新浪SAE目前仅支持2.7版本) 由于本文的重点不是使用python搭建微信公众平台,网上已经有很多不错的教程,为了避免

使用 Python 全栈打造淘宝客微信机器人(上)

本篇  将会涉及: Python 环境下淘宝客 API 的使用: 使用 Python 第三方模块 itchat 实现微信的登录的自动回复操作: PyQt5 的布局管理与多线程应用 1 .前言 1.1.什么是淘宝客 相信很多人都听过或者接触过各类导购 APP.QQ 群.微信群分享一些淘宝商品的优惠券或是其他的优惠信息. 用户可以在这些渠道上获取到相较于从淘宝平台搜索出来的商品更加优惠的价格或者是领取到面额较大的优惠券. 这些渠道,都是属于淘宝客的渠道.淘宝客是淘宝平台推出的一种按成交计费的推广模式

Python实现微信自动回复机器人详细教程

首先,我们需要安装并配置好Python环境,并安装requests和itchat包,我用的是Windows7环境!https://www.python.org/ python官网 下载 然后直接打开安装 选择path那个选项勾选(直接添加环境变量以及路径) 直接下一步直到安装完成运行 cmd 然后cmd命令行 输入 pip install itchat requests 等待安装完成现在我们已经安装完成了环境然后在桌面新建文本以.py结尾复制以下代码写入其中保存后运行KEY的值从图灵官网新建机器

python实现QQ机器人(自动登录,获取群消息,发送群消息)

一次偶然的机会我看见了一个群里的一个QQ号总是根据你所发的消息自动回复,当时很感觉到神奇,我知道可以模拟登录网站,没想到竟然也能模拟登录QQ,首先自己想到的就是如何实现模拟登录PC端的QQ, 开始研究了下,发现QQ所发送的包都很难理解. 于是就转到了网页版的QQ,因为在网页里可以捕获所有的请求从而更好的实现模拟功能! 首先第一步就是打开网页版的qq,打开浏览器的开发者模式 这里可以监控所有的请求! 打开登录界面的的时候 会捕捉到一个GET请求 https://ssl.ptlogin2.qq.co

微信机器人开发SDK使用教程--发送朋友圈任务

微信机器人开发SDK使用教程--发送朋友圈任务 case "PostSNSNewsTask": {// 发送朋友圈任务 log.debug("websocket:msgtype=PostSNSNewsTask....."); postSNSNewsTaskWebsocketHandler.handleMsg(ctx, vo,contentJsonStr); break; } package com.jubotech.framework.netty.handler.w