-
2020-12-07 10:29:07
简单上手
登陆微信:
# 导入模块
from wxpy import *
# 初始化机器人,扫码登陆
bot = Bot()
找到好友:
# 搜索名称含有 "游否" 的男性深圳好友
my_friend = bot.friends().search('游否', sex=MALE, city="深圳")[0]
发送消息:
# 发送文本给好友
my_friend.send('Hello WeChat!')
# 发送图片
my_friend.send_image('my_picture.jpg')
自动响应各类消息:
# 打印来自其他好友、群聊和公众号的消息
@bot.register()
def print_others(msg):
print(msg)
# 回复 my_friend 的消息 (优先匹配后注册的函数!)
@bot.register(my_friend)
def reply_my_friend(msg):
return 'received: {} ({})'.format(msg.text, msg.type)
# 堵塞线程,并进入 Python 命令行
embed()
# 或者仅仅堵塞线程
# bot.join()
更多相关内容 -
使用wxpy实现自动发送微信消息功能
2020-12-20 09:14:54思路整理:1、进入心灵鸡汤网页,使用python获取心灵鸡汤内容 ...bot = wxpy.Bot(console_qr=2,cache_path='botoo.pkl') # 获取心灵鸡汤中的最新内容,可以参考其他爬虫随便查看怎么爬虫 def get_msg(): url = 'h -
使用Python+wxpy 找出微信里把你删除的好友实例
2020-12-26 11:32:51之前看到好友在发各种”群发...这个方法是好几年前的了,web微信已经把拉群这个功能去掉了,所以在使用wxpy的add_members()时会报错.所以这个方法目前行不通. 第二种方法: 转账法 这个的原理是你无法转账给被删除你的好友 -
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2020-12-31 04:36:46之前了解到itchat 乃至于 wxpy时 是利用tuling聊天机器人的接口。调用接口并保存双方的问答结果可以作为自己的问答词库的一个数据库累计。这些数据可以用于自己训练。 而最近希望获取一些语音资源,用于卷积神经网络... -
如何利用python之wxpy模块玩转微信
2020-09-16 09:25:48主要介绍了利用python之wxpy模块玩转微信,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 -
python使用wxpy轻松实现微信防撤回的方法
2020-09-19 14:11:02今天小编就为大家分享一篇python使用wxpy轻松实现微信防撤回的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
wxpy3d:基于 wxWidgets 的 GLUT 替代品,可与 ipython -wthread 一起使用
2021-06-03 20:47:19使用 wxPython 的 GLUT 替代方案(因此它适用于 IPython 后台线程)。 让您轻松获得 OpenGL ...4).astype('f')window.update_points(xyz, rgba)window.Refresh()文件wxpy3d.Window: 一个带有 OpenGL 上下文的窗口wxpy -
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2021-01-20 06:58:23使用python3调用wxpy模块,监控linux日志并定时发送消息给群组或好友,具体代码如下所示: #!/usr/bin/env python3 # -*- coding: utf-8 -*- from __future__ import unicode_literals from threading import ... -
wxpy接口文档速查表
2019-09-21 15:32:36wxpy接口文档速查表 -
python-wxpy.zip
2019-05-14 00:35:53python 利用wxpy实现的微信机器人,可以帮助朋友清理微信僵尸粉,对于练习,学习python的朋友有福啦 -
Python wxpy 操作微信 大全集
2021-07-20 16:02:28Python wxpy 操作微信 大全集 安装 wxpy pip install wxpy 登录微信 bot = wxpy.Bot() 获取全部好友 myfriends = bot.friends 查找好友 mylove = myfriends.search('老婆') 消息处理 @bot.register() def print_msg...安装及导入 wxpy
安装 wxpy
pip install wxpy
导入 wxpy
import wxpy
登录微信
登录
bot = wxpy.Bot(cache_path=None, console_qr=False, qr_path=None, qr_callback=None, login_callback=None, logout_callback=None)
参数 说明 cache_path 设置当前会话的缓存路径,并开启缓存功能;为 None (默认) 则不开启缓存功能。开启缓存后可在短时间内避免重复扫码,缓存失效时会重新要求登陆。 设为 True 时,使用默认的缓存路径 ‘wxpy.pkl’ console_qr 在终端中显示登陆二维码,需要安装 pillow 模块。可为整数(int),表示二维码单元格的宽度,通常为 2 (当被设为 True 时,也将在内部当作 2)。也可为负数,表示以反色显示二维码,适用于浅底深字的命令行界面。 例如: 在大部分 Linux 系统中可设为 True 或 2,而在macOS Terminal 的默认白底配色中,应设为 -2 qr_path 保存二维码的路径 qr_callback 获得二维码后的回调,可以用来定义二维码的处理方式,接收参数: uuid, status, qrcode login_callback 登陆成功后的回调,若不指定,将进行清屏操作,并删除二维码文件 logout_callback 登出时的回调 阻塞进程
在完成注册操作后,若没有其他操作,程序会因主线程执行完成而退出。 因此务必堵塞线程以保持监听状态。
wxpy 的 embed() 可在堵塞线程的同时,进入 Python 命令行。
wxpy.embed(shell=None, local=None, banner='')
参数 说明 shell: str 指定命令行类型,可设为 ‘ipython’,’bpython’,’python’,或它们的首字母;
若为 None,则按上述优先级进入首个可用的 Python 命令行。local: dict 设定本地变量环境,若为 None,则获取进入之前的变量环境。 banner: str 设定欢迎内容,将在进入命令行后展示。 聊天对象
聊天对象
获取所有聊天对象
bot.chats(update=False)
参数 说明 update 是否更新 返回: 聊天对象合集
返回类型: wxpy.Chats
获取所有好友
bot.friends(update=False)
参数 说明 update 是否更新 返回:聊天对象合集
返回类型:wxpy.Chats
获取所有群聊
bot.groups(update=False, contact_only=False)
一些不活跃的群可能无法被获取到,可通过在群内发言,或修改群名称的方式来激活
参数 说明 update 是否更新 contact_only 是否限于保存为联系人的群聊 返回:群聊合集
返回类型:wxpy.Groups
获取所有公众号
bot.mps(update=False)
参数 说明 update 是否更新 返回:聊天对象合集
返回类型:wxpy.Chats
其他对象
# 机器人自己 bot.self # 文件传输助手 bot.file_helper
搜索聊天对象
.search()
搜索所有聊天对象
# 搜索名称含有 'wxpy' 的任何聊天对象 found = bot.search('wxpy') # [<Friend: wxpy 机器人>, <Group: wxpy 交流群1>, <Group: wxpy 交流群2>]
不包括群成员
搜索好友
# 搜索名称包含 'david' 的广州男性好友 found = bot.friends().search('david', sex=MALE, city='广州') # [<Friend: david>] # 确保搜索结果是唯一的,并取出唯一结果 david = ensure_one(found) # <Friend: david>
搜索群聊
# 搜索名称包含 'wxpy',且成员中包含 `david` 的群聊对象 wxpy_groups = bot.groups().search('wxpy', [david]) # [<Group: wxpy 交流群 1>, <Group: wxpy 交流群 2>]
在群聊中搜索
# 在刚刚找到的第一个群中搜索 group = wxpy_groups[0] # 搜索该群中所有广州的群友 found = group.search(province='广州') # [<Member: 广州 群友1>, <Group: 广州 群友2>, <Group: 广州 群友3> ...]
添加聊天对象
添加用户为好友
bot.add_friend(user, verify_content='')
参数 说明 user 或 user_name 用户对象 verify_content 验证说明信息 添加/关注 公众号
bot.add_mp(user)
参数 说明 user 或 user_name 公众号对象 接受用户为好友
bot.accept_friend(user, verify_content='')
参数 说明 user 或 user_name 用户对象 verify_content 验证说明信息 返回:新的好友对象
返回类型:wxpy.Friend
其他属性
.mark_as_read() # 消除当前聊天对象的未读提示小红点 .pin() # 将聊天对象置顶 .unpin() # 取消聊天对象的置顶状态 .get_avatar(save_path=None) # 获取头像 # 参数: save_path – 保存路径(后缀通常为.jpg),若为 None 则返回字节数据 .uin # 微信中的聊天对象ID,固定且唯一 # 因微信的隐私策略,该属性有时无法被获取到 # 建议使用 puid 作为用户的唯一 ID .alias # 若用户进行过一次性的 “设置微信号” 操作,则该值为用户设置的”微信号”,固定且唯一 # 因微信的隐私策略,该属性有时无法被获取到 # 建议使用 puid 作为用户的唯一 ID .wxid # 聊天对象的微信ID (实际为 .alias 或 .uin) # 因微信的隐私策略,该属性有时无法被获取到 # 建议使用 puid 作为用户的唯一 ID .user_name # 该聊天对象的内部 ID,通常不需要用到 # 注意:同个聊天对象在不同用户中,此 ID 不一致 ,且可能在新会话中 被改变!
发送消息
.send(content=None, media_id=None)
动态发送不同类型的消息,具体类型取决于 content 的前缀
参数 说明 content 由 前缀 和 内容 两个部分组成,若 省略前缀,将作为纯文本消息发送
前缀 部分可为: @fil@: 文件,@img@: 图片,@msg@: 纯文本,@vid@: 视频
内容 部分可为: 文件、图片、视频的路径,或纯文本的内容media_id 填写后可省略上传过程 返回类型:wxpy.SentMessage
发送文本
.send_msg(msg=None)
参数 说明 msg 文本内容 发送图片
.send_image(path, media_id=None)
参数 说明 path 文件路径 media_id 设置后可省略上传过程 发送视频
.send_video(path=None, media_id=None)
参数 说明 path 文件路径 media_id 设置后可省略上传过程 发送文件
my_friend.send_file(path, media_id=None)
参数 说明 path 文件路径 media_id 设置后可省略上传过程 以原始格式发送其他类型消息
send_raw_msg(raw_type, raw_content, uri=None, msg_ext=None)
参数 说明 raw_type: int 原始的整数消息类型 raw_content: str 原始的消息内容 uri: str 请求路径,默认为 ‘/webwxsendmsg’ msg_ext: dict 消息的扩展属性 (会被更新到 Msg 键中) 处理消息
注册函数
可通过预先注册的方式,实现消息的自动处理。
预先将特定聊天对象的特定类型消息,注册到对应的处理函数,以实现自动回复等功能。
每当收到新消息时,将根据注册规则找到匹配条件的执行函数。并将消息对象作为唯一参数传入该函数。
将 bot.register() 作为函数的装饰器,即可完成注册。
bot.register(chats=None, msg_types=None, except_self=True, run_async=True, enabled=True
其中msg_types参数,是指定接收消息的类型,wxpy中支持以下消息类型:
值 描述 TEXT 或 ‘Text’ 文本 MAP 或 ‘Map’ 位置 CARD 或 ‘Card’ 名片 NOTE 或 ‘Note’ 提示 SHARING 或 ‘Sharing’ 分享 PICTURE 或 ‘Picture’ 图片 RECORDING 或 ‘Recording’ 语音 ATTACHMENT 或 ‘Attachment’ 文件 VIDEO 或 ‘Video’ 视频 FRIENDS 或 ‘Friends’ 好友请求 SYSTEM 或 ‘System’ 系统 其他参数
参数 描述 chats 消息所在的聊天对象:单个或列表形式的多个聊天对象或聊天类型,为空时匹配所有聊天对象;
既可以是聊天对象实例,也可以是对象类。当为类时,表示匹配该类型的所有聊天对象。msg_types 消息的类型:单个或列表形式的多个消息类型,为空时匹配所有消息类型 (SYSTEM 类消息除外) except_self 排除由自己发送的消息 run_async 是否异步执行所配置的函数:可提高响应速度 enabled 当前配置的默认开启状态,可事后动态开启或关闭 在被注册函数中,可以通过直接 return <回复内容> 的方式来回复消息,等同于调用 msg.reply(<回复内容>)。
Message 消息对象
每当机器人接收到消息时,会自动执行以下两个步骤:
1.将消息保存到 Bot.messages 中
2.查找消息预先注册的函数,并执行(若有匹配的函数)
基本属性
消息的类型
Message.type
返回消息的类型:str
机器人对象
Message.bot
接收此消息的机器人对象
消息的唯一 ID
Message.id
(通常为大于 0 的 64 位整型)
内容数据
# 消息的文本内容 Message.text # 下载图片、视频、语音、附件消息中的文件内容 # 可与 Message.file_name 配合使用 # 参数: save_path – 文件的保存路径。若为 None,将直接返回字节数据 Message.get_file(save_path=None) # 消息中文件的文件名 Message.file_name # 消息中文件的体积大小 Message.file_size # 文件类消息中的文件资源 ID (但图片视频语音等其他消息中为空) Message.media_id # 原始数据 (dict 数据 )Message.raw
用户相关
Message.chat # 消息所在的聊天会话 # 对于自己发送的消息,为消息的接收者 # 对于别人发送的消息,为消息的发送者 # 返回类型:wxpy.User, wxpy.Group Message.sender # 消息的发送者 # 返回类型: wxpy.User, wxpy.Group Message.receiver # 消息的接收者 # 返回类型:wxpy.User, wxpy.Group Message.member # 消息的实际发送人 # 若消息来自群聊,则此属性为消息的实际发送人(具体的群成员) # 若消息来自其他聊天对象(非群聊),则此属性为 None# 返回类型:NoneType, wxpy.Member Message.card #好友请求中的请求用户 #名片消息中的推荐用户
群聊相关
Message.member # 发送人 # 若消息来自群聊,则此属性为消息的实际发送人(具体的群成员) # 若消息来自其他聊天对象(非群聊),则此属性为 None # 返回类型: NoneType,wxpy.Member Message.is_at # 是否被 @ # 当消息来自群聊,且被 @ 时,为 True
时间相关
# 服务端发送时间 Message.create_time # 本地接收时间 Message.receive_time # 消息的延迟秒数 (发送时间和接收时间的差值) Message.latency
不同类型消息
图片、视频、语音
# 图片高度 Message.img_height # 图片宽度 Message.img_width # 视频长度 Message.play_length # 语音长度 Message.voice_length
文章
# 分享类消息中的网页 URL Message.url # 公众号推送中的文章列表 (首篇的 标题/地址 与消息中的 text/url 相同) Message.articles
其中,每篇文章均有以下属性
属性 说明 title 标题 summary 摘要 url 文章 URL cover 封面或缩略图 URL 位置消息
# 位置消息中的地理位置信息 Message.location
回复
方法一:获取聊天对象后发送消息
Message.chat.send(...) Message.chat.send_msg(...) # ...更多见本章 “发送消息”
方法二:直接回复
代码 描述 Message.reply(…) 回复 Message.reply_msg(…) 回复文本 Message.reply_image(…) 回复图片 Message.reply_file(…) 回复文件 Message.reply_video(…) 回复视频 Message.reply_raw_msg(…) 以原始格式回复其他类型消息 具体参数见本章 “发送消息”。
转发消息
# 将本消息转发给其他聊天对象 Message.forward(chat, prefix=None, suffix=None, raise_for_unsupported=False)
支持以下消息类型
类型 描述 TEXT 文本 VIDEO 视频 ATTACHMENT 文件 PICTURE 图片/自定义表情
不支持表情商店中的表情CARD 名片
仅支持公众号名片,以及自己发出的个人号名片SHARING 分享
会转化为 标题 + 链接 形式的文本消息RECORDING 语音
会以文件方式发送MAP 地图
会转化为 位置名称 + 地图链接 形式的文本消息参数:
参数 描述 chat: Chat 接收转发消息的聊天对象 prefix: str 转发时增加的 前缀 文本,原消息为文本时会自动换行 suffix: str 转发时增加的 后缀 文本,原消息为文本时会自动换行 raise_for_unsupported: bool 为 True 时,将为不支持的消息类型抛出 NotImplementedError 异常 原创不易,如果你觉得这篇文章很赞的话,
点赞收藏再走吧!
yeanky
2021/7/20 -
Python WXPY实现微信监控报警功能的代码
2021-01-20 04:15:09本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序。博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起。 博文中主要使用到的技术设计到Python,... -
Python+wxpy写的微信群发代码
2019-03-22 22:48:40Python+wxpy写的微信群发代码,由于微信的发送消息频率有限制,因此如果好友数量比较多,群发时间会比较长一点; -
Python-WXPY实现微信监控报警
2021-07-10 11:54:04本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序。博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起。 博文中主要使用到的技术设计到...概述:
本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序。博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起。
博文中主要使用到的技术设计到Python,Redis,以及Java。涉及到的技术看似很多,但是主要的语言是基于Python进行开发的。
架构涉及主要采用了 生产者消费者的涉及模式,使用Redis作为消息队列进行解耦操作。
主要架构涉及如下:
接下来开始介绍一下程序的实现过程,主要讲解wxpy -> python.redis -> Java.redis
1、Wxpy初体验
项目使用的python 是3.5版本的,因此语法会和2.x版本有所区别,wxpy 支持python3.4-3.6 以及python2.7版本 ,因此在python版本上不用太过于纠结
1.1 安装wxpy
在这里默认大家以及安装好了pip,我们需要安装wxpy 以及wechat_sender 两个包,这里推荐使用国内的豆瓣源,如果大家网速过硬 请忽略。。。。
1
2
pip install wxpy -i
"https://pypi.doubanio.com/simple/"
pip install wechat_sender -i
"https://pypi.doubanio.com/simple/"
1.2 wxpy 登陆
wxpy 使用起来非常简单,我们只需要创建一个bot 对象,程序运行后,会弹出二维码,扫描二维码后显示登陆成功。
下述代码在登陆完成后,会向我们的文件传输助手发送一个“hello world!”。(每个程序都需要一个hello world)
from wxpy import * bot = Bot() bot.file_helper.send('hello world!') print("ending")
关于Bot()对象的相关参数说明,我们可以在源码中的注释中看到:
""" :param cache_path: * 设置当前会话的缓存路径,并开启缓存功能;为 `None` (默认) 则不开启缓存功能。 * 开启缓存后可在短时间内避免重复扫码,缓存失效时会重新要求登陆。 * 设为 `True` 时,使用默认的缓存路径 'wxpy.pkl'。 :param console_qr: * 在终端中显示登陆二维码,需要安装 pillow 模块 (`pip3 install pillow`)。 * 可为整数(int),表示二维码单元格的宽度,通常为 2 (当被设为 `True` 时,也将在内部当作 2)。 * 也可为负数,表示以反色显示二维码,适用于浅底深字的命令行界面。 * 例如: 在大部分 Linux 系统中可设为 `True` 或 2,而在 macOS Terminal 的默认白底配色中,应设为 -2。 :param qr_path: 保存二维码的路径 :param qr_callback: 获得二维码后的回调,可以用来定义二维码的处理方式,接收参数: uuid, status, qrcode :param login_callback: 登陆成功后的回调,若不指定,将进行清屏操作,并删除二维码文件 :param logout_callback: 登出时的回调 """
这里介绍一下两个主要使用到的参数:
cache_path: 在开发过程中可以设置为True 避免每次登陆都需要重新扫描,具有缓存的作用。 qr_path:用于保存二维码生成图片,主要解决服务器图片展示不方便的问题
1.3 wxpy 好友与聊天群
如代码所示,我们可以通过Bot.friends 以及Bot.groups 来获取到所有的好友以及聊天群,这里需要注意的是,聊天群需要保存到通讯录中,不然可能会出现找不到聊天群的情况。
在搜索方法中,可以提供的参数有:姓名,city,province,sex 等相关变量。
关于好友的详细API文档,可以参考---》 微信好友API
from wxpy import * bot = Bot() # 获取所有好友 friends = bot.friends() # 遍历输出好友名称 for friend in friends: print(friend) # 找到好友 friend = bot.friends.search('被单')[0] print(friend) friend.send("hello world!") # 获取所有聊天群 groups = bot.groups() for group in groups: print(group) # 找到目标群 group = groups.search("409")[0] group.send("hello world!")
1.4 wxpy 消息处理
接下来主要介绍一下用户发送消息的类型,目前wxpy 支持发送文本,图片,视频以及文件。主要的发送方式如代码所示:
这里比较重要的就是关于 @bot.register() 的使用,该注释主要用于注册消息接收器,我们可以根据特定的需求,配置不一样的消息接收器。
Bot.
register
(chats=None, msg_types=None, except_self=True, run_async=True, enabled=True) 详情可以查看源码中的介绍关于消息处理API,读者可以在该地址下查看详细的配置,这里不做过多的描述。
代码中有使用到:embed() 这个方法, 主要用于阻塞进程,避免由于程序运行结束导致无法接收消息。
from wxpy import * bot = Bot() # 获取好友 my_friend = bot.friends().search('被单')[0] # 搜索信息 messages = bot.messages.search(keywords='测试', sender=bot.self) for message in messages: print(message) # 发送文本 my_friend.send('Hello, WeChat!') # 发送图片 my_friend.send_image('my_picture.png') # 发送视频 my_friend.send_video('my_video.mov') # 发送文件 my_friend.send_file('my_file.zip') # 以动态的方式发送图片 my_friend.send('@img@my_picture.png') # 发送公众号 my_friend.send_raw_msg( # 名片的原始消息类型 raw_type=42, # 注意 `username` 在这里应为微信 ID,且被发送的名片必须为自己的好友 raw_content='<msg username="wxpy_bot" nickname="wxpy 机器人"/>' ) # 消息接收监听器 @bot.register() def print_others(msg): # 输出监听到的消息 print(msg) # 回复消息 msg.reply("hello world") embed()
1.4 wxpy 图灵机器人
wxpy 接入图灵机器人相当方便,我们首先需要到图灵近期人官网进行注册,哆啦A梦的任意门。
通过注册Tuling 对象,当我们接收到消息的时候,可以直接使用tuling机器人来帮我们进行答复。其他的业务需求各位可以根据自己的需求来完成相应的逻辑。
from wxpy import * bot = Bot() # 获取好友 dear = bot.friends().search('被单')[0] # 注册获得个人的图灵机器人key 填入 tuling = Tuling(api_key='******') # 使用图灵机器人自动与指定好友聊天 @bot.register(dear) def reply_my_friend(msg): print(msg) tuling.do_reply(msg) embed()
1.5 wechat_sender
在熟悉了wxpy 的相关操作后,我们接下来介绍一下一个主要使用到的工具。由于wxpy 的设计,导致了一些业务操作并不好进行实现。因此我们在这里引入一个工具类:wechat_sender 。
首先我们需要像往常一样进行微信登陆,然后使用 listen() 进行对我们的 bot() 对象进行监听。
在这里我们可以看到了和上面代码的区别,这里使用的是listen(),上面是使用embed()进行监听。 我们再这里使用listen 进行监听对象后,可以设置相应的配置。监听默认设置的接收对象为self.file_helper,通过设置receivers 可以配置消息的接收者。
# login.py from wxpy import * from wechat_sender import * bot = Bot() friend = bot.friends().search('被单')[0] listen(bot, token='test', receivers=[friend])
# sender.py coding: utf-8 from wechat_sender import Sender sender = Sender(token='test') sender.send('hello world!')
在别的python 文件中,我们只需要创建一个Sender() 对象,然后调用Sender.send()方法,即可对我们设定好的消息接收者发送消息。
Sender()在创建的时候可以通过特定的参数设定,比如这里使用了 token 用于避免多个listen 导致sender 混淆。还可以在sender中设置receiver 从listen 中选取需要接收消息的对象。
1.6 wxpy 在监控模块的代码实现
微信登陆模块:
from wechat_sender import * from wxpy import * bot = Bot(qr_path="qr.png") group = bot.groups().search('监控报警')[0] print("微信登陆成功!进行监控报警功能!") print(group) # listen(bot, token='test', receivers=[group])
业务处理模块:
import redis from wechat_sender import * sender = Sender(token='test', receivers='监控报警') while true: # do anything sender.send(message=data) # do anything p.unsubscribe('cardniu-monitor') print('取消订阅')
2、Python-Redis
这一模块我们将简单描述一下python 对于Redis 的支持,首先我们需要安装python-redis相关模块:
2.1 Python-redis安装
- 下载压缩包:哆啦A梦的任意门
- 解压进入 Redis 目录
- 命令行执行: python setup.py install
2.2 Python 简单操作Redis
由于Python 操作Redis 并不是我们这里的主要内容,所以这里简单的过一下Python 对Redis 的支持。
import redis r = redis.Redis(host='ip', port=6379, db=15, password='****') r.set('name', 'Jaycekon') value = r.get('name') print(value)
2.3 Redis的发布订阅模式
在为大家讲解Redis 的发布订阅模式前,先为大家科普一下生产者消费者模式:
大家来领略一下我的灵魂画图,生产者消费者的核心思想是通过一个冰箱来进行解耦,就是我们的厨师不需要出厨房,顾客也不需要去厨房拿饭吃。通过一个冰箱来进行中间的解耦合。
下面是我们通过python 实现的一个生产者消费者模式,厨师不停的做饭,顾客不停的吃。。大家相互不影响。
from threading import Thread queues = queue.Queue(10) class Producer(Thread): def run(self): while True: elem = random.randrange(9) queues.put(elem) print("厨师 {} 做了 {} 饭 --- 还剩 {} 饭没卖完".format(self.name, elem, queues.qsize())) time.sleep(random.random()) class Consumer(Thread): def run(self): while True: elem = queues.get() print("吃货{} 吃了 {} 饭 --- 还有 {} 饭可以吃".format(self.name, elem, queues.qsize())) time.sleep(random.random()) def main(): for i in range(3): p = Producer() p.start() for i in range(2): c = Consumer() c.start() if __name__ == '__main__': main()
再来说一下为什么使用到Redis 的发布订阅模式。
Redis在当前程序中,主要担当了一个消息队列的角色,我们并没有使用目前较为热门的RabbitMq,ActiveMq来消息队列进行解耦。主要原因在于我们的服务不大,消息量也比较小,因此在不影响程序的架构基础上,采用了Redis 作为消息队列。
消息队列的关键点在于,当生产者发布消息后,要确保消费者能够快速的接收消息。发布订阅模式能够很好的帮我们解决,当有消息到达的时候,程序马上能够做出响应操作。
Redis消息发布:
import redis pool = redis.ConnectionPool(host='ip', port=6379, db=4, password='****') r = redis.StrictRedis(connection_pool=pool) while True: inputs = input("publish:") r.publish('spub', inputs) if inputs == 'over': print('停止发布') break
Redis消息订阅:
import redis pool = redis.ConnectionPool(host='ip', port=6379, db=4, password='***') r = redis.StrictRedis(connection_pool=pool) p = r.pubsub() p.subscribe('cardniu-monitor') for item in p.listen(): print(item) if item['type'] == 'message': data = item['data'] print("消息队列中接收到信息:", data)if item['data'] == 'over': break p.unsubscribe('cardniu-monitor') print('取消订阅')
2.4 wxpy+Redis 实现监控系统的消费者
最终,在python 这边实现的监控系统消费者如下:
微信登陆模块:
from wechat_sender import * from wxpy import * bot = Bot(qr_path="qr.png") group = bot.groups().search('监控报警')[0] print("微信登陆成功!进行监控报警功能!") print(group) # listen(bot, token='test', receivers=[group])
Redis消息订阅模块:
import redis from wechat_sender import * sender = Sender(token='test', receivers='监控报警') pool = redis.ConnectionPool(host='ip', port=6379, db=13, password='***') r = redis.StrictRedis(connection_pool=pool) p = r.pubsub() p.subscribe('cardniu-monitor') for item in p.listen(): print(item) if item['type'] == 'message': data = item['data'] print("消息队列中接收到信息:", data) sender.send(message=data) if item['data'] == 'over': break p.unsubscribe('cardniu-monitor') print('取消订阅')
3、Java-Redis
最后,在生产者这块,即是我们监控系统的核心部分,当我们的Java系统出现异常时,我们即可向Redis发送消息,最后由消费者那一边完成消息的发送。
在下面会跟大家简单讲解一下生产者这边的代码,但是由于代码设计公司内容,因此不做过多的描述。
Spring-redis.xml
View Code
JedisUtils.java
View Code
NoticeTask.java
@Scheduled(cron = "*/5 * * * * ? ") public void runMonitor() { try { List<T> notices; List<EbankNotice> result; while ((notices = QueueHolder.noticeBlockingQueue.take()) != null) { //消费 if (notices.isEmpty()) { continue; } result = service.calculateNotice(notices); result.forEach(notice -> { JedisUtils.publish("cardniu-monitor", notice.getTitle() + "," + DateUtils.format(notice.getPostTime(), "yyyy-MM-dd hh:mm:ss") + "," + notice.getLinkAddress()); }); } } catch (InterruptedException e) { logger.error("发送邮件定时任务异常,{}", e.getMessage(), e); } }
4、总结
这个项目的核心在于wxpy 的运用,以及生产者消费者的设计思想。语言的话,核心的python这一块的wxpy,在生产者这边,无论是其他的什么语言,都可以作为我们的生产者。
项目github地址:https://github.com/jaycekon/WxpyDemo
希望各位喜欢的朋友可以fork 或者start一下~~~~~
参考:
wxpy API:http://wxpy.readthedocs.io/zh/latest/messages.html
wechat_sender Api:https://pypi.python.org/pypi/wechat-sender/0.1.3
python-redis :https://pypi.python.org/pypi/redis
Java-Redis:http://docs.spring.io/spring-data/redis/docs/2.0.0.M4/reference/html/
-
python使用wxpy实现微信消息防撤回脚本
2021-01-20 06:29:22wxpy 和 itchat很久没更新了,有些功能没法用了,web微信也不知道什么时候会凉。 帮助信息在注释里。 # -*- coding: utf-8 -*- # 使用sqlite3保存message,当有人撤回消息时在数据库中通过ID检索该消息是否存在,... -
Python 基于wxpy库实现微信添加好友功能(简洁)
2021-01-02 12:33:27本程序为基于wxpy库实现的。 1.打开cmd导入一下库。 2.修改库文件中add_friend函数,将状态更改为3。 3.正常使用即可 总结 以上所述是小编给大家介绍的Python 基于wxpy库实现微信添加好友功能,希望对大家... -
python实例-32 wxpy统计好友地理位置.zip源码python项目实例源码打包下载
2022-05-16 20:17:44python实例-32 wxpy统计好友地理位置.zip源码python项目实例源码打包下载python实例-32 wxpy统计好友地理位置.zip源码python项目实例源码打包下载python实例-32 wxpy统计好友地理位置.zip源码python项目实例源码打包... -
python实例-31 wxpy获取微信好友头像.zip源码python项目实例源码打包下载
2022-05-16 20:16:31python实例-31 wxpy获取微信好友头像.zip源码python项目实例源码打包下载python实例-31 wxpy获取微信好友头像.zip源码python项目实例源码打包下载python实例-31 wxpy获取微信好友头像.zip源码python项目实例源码打包... -
wxpy:用 Python 玩转微信就是这么简单
2021-01-29 04:43:49前言wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。用来干啥一些常见的场景 控制路由器、智能家居等具有开放接口的玩意儿运行脚本时自动把日志发送到你的微信加群主为好友,...前言
wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。
用来干啥
一些常见的场景 控制路由器、智能家居等具有开放接口的玩意儿
运行脚本时自动把日志发送到你的微信
加群主为好友,自动拉进群中
跨号或跨群转发消息
自动陪人聊天
逗人玩
...
总而言之,可用来实现各种微信个人号的自动化操作
轻松安装
wxpy 支持 Python 3.4-3.6,以及 2.7 版本
将下方命令中的 "pip" 替换为 "pip3" 或 "pip2",可确保安装到对应的 Python 版本中 从 PYPI 官方源下载安装 (在国内可能比较慢或不稳定):pip install -U wxpy 从豆瓣 PYPI 镜像源下载安装 (推荐国内用户选用):pip install -U wxpy -i "https://pypi.doubanio.com/simple/"
简单上手
登陆微信: # 导入模块 from wxpy import * # 初始化机器人,扫码登陆 bot = Bot()
找到好友: # 搜索名称含有 "游否" 的男性深圳好友 my_friend = bot.friends().search('游否', sex=MALE, city="深圳")[0]
发送消息: # 发送文本给好友 my_friend.send('Hello WeChat!') # 发送图片 my_friend.send_image('my_picture.jpg')
自动响应各类消息:
保持登陆/运行: # 进入 Python 命令行、让程序保持运行 embed() # 或者仅仅堵塞线程 # bot.join()
模块特色 全面对象化接口,调用更优雅
默认多线程响应消息,回复更快
包含 聊天机器人、共同好友 等 实用组件
只需两行代码,在其他项目中用微信接收警告
愉快的探索和调试,无需涂涂改改
可混合使用 itchat 的原接口
当然,还覆盖了各类常见基本功能:
发送文本、图片、视频、文件
通过关键词或用户属性搜索 好友、群聊、群成员等
获取好友/群成员的昵称、备注、性别、地区等信息
加好友,建群,邀请入群,移出群
非常有意思的Python模块,如果之前小编也有一些文章是关于用Python玩微信的。
比如:
等等
-
【微信辅助】吃鸡再也不怕了,Python用wxpy实现微信自动回复
2020-11-25 23:58:55首先安装wxpy。优点:相比itchat封装了接口,使用较为方便。注意事项:wxpy 支持 Python 3.4-3.6,以及 2.7 版本。实现三个场景:场景1:你在网吧吃鸡需要及时回复给老婆(针对某人回复文本消息)场景2:你在追求... -
[531]微信之wxpy库(基于itchat库)
2019-02-20 18:23:54wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展 注意 强烈建议仅使用小号运行机器人! 从近期 (17年6月下旬) 反馈来看,使用机器人存在一定概率被限制登录的可能性。 主要... -
Python进阶_wxpy学习:聊天对象
2018-07-09 16:38:41学习完了python的基本概念和相应操作后,就要进入实战阶段了,首先选的和微信端口自动交互的wxpy。 本文操靠wxpy的官方文档:官方文档 机器人对象可以参考前文:机器人对象 聊天对象 通过机器人对象 Bot 的 ...