- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python基于itchat实现微信群消息同步机器人由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近 全栈数据工程师养成攻略 的微信群已经将近500人,开了二群之后为了打通不同微信群之间的消息,花了点时间做了个消息同步机器人,在任意群收到消息时同步到其他群,并且将聊天内容上传至数据库,以供进一步分析、统计和展示.
基本思路是,用 Python 模拟微信登陆,接收到群里消息后,对文本、图片、分享等各类消息类型分别处理,并转发至其他群.
前期准备 。
首先得有一个微信号,用于代码模拟登陆。由于我的微信号得自己留着用,现阶段注册微信又必须要手机号,于是只好特意办了个电信号,用来申请了一个新的微信,微信号是 honlanbot。虽说似乎可以用阿里小号来注册微信,不过听说存在反复回收和安全隐患问题,故不采用.
其次,需要用到一个Python库 itchat,这个库已经做好了用代码调用微信的大多数功能,非常好用,官方文档在这里,安装的时候使用 pip 即可.
1
|
pip
install
itchat
|
我的手机支持双卡双待,于是把两张卡都装手机里,再双开微信,同时保持两个微信号手机在线,差不多就可以开始写代码了。用 itchat 调用微信主要是模拟微信网页版登陆,所以必须保持微信号手机在线,因为手机端微信一旦退出,其在网页、PC、MAC、IPAD等相应终端认证的账号也会随之退出.
初步尝试 。
itchat 提供了一些官方代码,让我们在自己的本本或电脑上新建一个 py 文件,初步尝试一下.
运行以下代码,会出现出现一张二维码,扫码登陆之后将会给“文件传输助手”发送一条消息.
1
2
3
4
5
6
|
# 加载包
import
itchat
# 登陆
itchat.auto_login()
# 发送文本消息,发送目标是“文件传输助手”
itchat.send(
'Hello, filehelper'
, toUserName
=
'filehelper'
)
|
以下代码则注册了一个消息响应事件,用来定义接收到文本消息后如何处理。在 itchat 里定义了文本、图片、名片、位置、通知、分享、文件等多种消息类型,可以分别执行不同的处理.
1
2
3
4
5
6
7
8
9
10
|
import
itchat
# 注册消息响应事件,消息类型为itchat.content.TEXT,即文本消息
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
# 返回同样的文本消息
return
msg[
'Text'
]
itchat.auto_login()
# 绑定消息响应事件后,让itchat运行起来,监听消息
itchat.run()
|
再来看看如何处理其他类型消息,可以把在消息响应事件里把 msg 打印出来,是一个字典,看看有哪些感兴趣的字段.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import
itchat
# import全部消息类型
from itchat.content
import
*
# 处理文本类消息
# 包括文本、位置、名片、通知、分享
@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
# 微信里,每个用户和群聊,都使用很长的ID来区分
# msg['FromUserName']就是发送者的ID
# 将消息的类型和文本内容返回给发送者
itchat.send(
'%s: %s'
% (msg[
'Type'
], msg[
'Text'
]), msg[
'FromUserName'
])
# 处理多媒体类消息
# 包括图片、录音、文件、视频
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
# msg['Text']是一个文件下载函数
# 传入文件名,将文件下载下来
msg[
'Text'
](msg[
'FileName'
])
# 把下载好的文件再发回给发送者
return
'@%s@%s'
% ({
'Picture'
:
'img'
,
'Video'
:
'vid'
}.get(msg[
'Type'
],
'fil'
), msg[
'FileName'
])
# 处理好友添加请求
@itchat.msg_register(FRIENDS)
def add_friend(msg):
# 该操作会自动将新好友的消息录入,不需要重载通讯录
itchat.add_friend(**msg[
'Text'
])
# 加完好友后,给好友打个招呼
itchat.send_msg(
'Nice to meet you!'
, msg[
'RecommendInfo'
][
'UserName'
])
# 处理群聊消息
@itchat.msg_register(TEXT, isGroupChat=True)
def text_reply(msg):
if
msg[
'isAt'
]:
itchat.send(u
'@%s\u2005I received: %s'
% (msg[
'ActualNickName'
], msg[
'Content'
]), msg[
'FromUserName'
])
# 在auto_login()里面提供一个True,即hotReload=True
# 即可保留登陆状态
# 即使程序关闭,一定时间内重新开启也可以不用重新扫码
itchat.auto_login(True)
itchat.run()
|
开发消息同步机器人 。
经过以上示例代码,可以总结出消息同步机器人的开发思路:
直接上代码好了,首先定义一个消息响应函数,文本类消息我感兴趣的是 TEXT 和 SHARING 两类,使用 isGroupChat=True 指定消息来自于群聊,这个参数默认为 False.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
@itchat
.msg_register([TEXT, SHARING], isGroupChat
=
True
)
def
group_reply_text(msg):
# 获取群聊的ID,即消息来自于哪个群聊
# 这里可以把source打印出来,确定是哪个群聊后
# 把群聊的ID和名称加入groups
source
=
msg[
'FromUserName'
]
# 处理文本消息
if
msg[
'Type'
]
=
=
TEXT:
# 消息来自于需要同步消息的群聊
if
groups.has_key(source):
# 转发到其他需要同步消息的群聊
for
item
in
groups.keys():
if
not
item
=
=
source:
# groups[source]: 消息来自于哪个群聊
# msg['ActualNickName']: 发送者的名称
# msg['Content']: 文本消息内容
# item: 需要被转发的群聊ID
itchat.send(
'%s: %s\n%s'
%
(groups[source], msg[
'ActualNickName'
], msg[
'Content'
]), item)
# 处理分享消息
elif
msg[
'Type'
]
=
=
SHARING:
if
groups.has_key(source):
for
item
in
groups.keys():
if
not
item
=
=
source:
# msg['Text']: 分享的标题
# msg['Url']: 分享的链接
itchat.send(
'%s: %s\n%s\n%s'
%
(groups[source], msg[
'ActualNickName'
], msg[
'Text'
], msg[
'Url'
]), item)
|
再来处理下图片等多媒体类消息.
1
2
3
4
5
6
7
8
9
10
11
12
|
# 处理图片和视频类消息
@itchat
.msg_register([PICTURE, VIDEO], isGroupChat
=
True
)
def
group_reply_media(msg):
source
=
msg[
'FromUserName'
]
# 下载图片或视频
msg[
'Text'
](msg[
'FileName'
])
if
groups.has_key(source):
for
item
in
groups.keys():
if
not
item
=
=
source:
# 将图片或视频发送到其他需要同步消息的群聊
itchat.send(
'@%s@%s'
%
({
'Picture'
:
'img'
,
'Video'
:
'vid'
}.get(msg[
'Type'
],
'fil'
), msg[
'FileName'
]), item)
|
以上代码实现了对文本、分享、图片、视频四类消息的处理,如果对其他类型的消息也感兴趣,进行相应的处理即可。在前面补上 import 的代码,在后面补上登陆和运行的代码,就大功告成了.
成果展示 。
目前两个群之间可以进行消息同步了,一群和二群的小伙伴终于可以畅快地聊了起来(当群主不容易,经常要发很多红包 = =).
进一步工作 。
当然,我不可能一直在笔记本上运行这么个 py 代码,所以把它部署到服务器上运行就好了,开个 screen 或者用 IPython 都可以。如果账号偶尔下线了,再运行一下就好.
另外,我还写了个 API,响应消息的时候会把相应的数据 POST 到我的服务器并存到数据库,以供进一步的分析、统计和展示,这也是我身为一个群主应尽的职责~ 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.jianshu.com/p/7aeadca0c9bd 。
最后此篇关于python基于itchat实现微信群消息同步机器人的文章就讲到这里了,如果你想了解更多关于python基于itchat实现微信群消息同步机器人的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
当有人使用微信(微信)分享我的一款游戏(用 JavaScript 制作)时,我正在使用 WeixinJSBridge 修改分享参数。 下面的代码位于一个很大的 JavaScript 文件(超过 250
我转微信了padplus来自wechaty-puppet-puppeteer的傀儡并发现它比 wechaty-puppet-puppeteer 更频繁地停止.即,wechaty-puppet-pupp
微信小程序一出,立马炸开了锅,都去搭建自己的开发环境,我这里也来尝尝先,之前发了一篇文章,有人问demo怎么导入? demo源代码(来自网络) 百度: https://pan.baidu.com
微信小程序可谓是今天最火的一个名词了,一经出现真是轰炸了整个开发人员,当然很多app开发人员有了一个担心,微信小程序的到来会不会给移动端app带来一个寒冬,身为一个android开发者我是不相信的,
memcache缓存存储用户信息7000秒 ? 1
微信开发生成带参数的二维码的讲解 在微信公众号平台开发者那里,在“账号管理”那里,有一项功能是“生成带参数的二维码”,通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上
某日,一同学给小的发了 Github 源码,说是可以轻松查到删除自己的微信好友,于是就开始了作死之路。 Github 源码请看:0x5e/wechat-deleted-friends 前言
近段时间山西的连续降雨,不少的城市都出现了洪灾,救灾物资匮乏,不少明星及爱心人士都纷纷向山西捐款,那么目前来说山西捐款的通道有哪些呢?在支付宝,微信上如何给山西捐款呢?下面就和小编一起来看看山西捐款
一.集成支付宝支付 支付宝集成官方教程 https://docs.open.alipay.com/204/105295/ 支付宝集成官方demo https://docs.o
一.越来越多的app增加第三方的功能,可能app有不同的页面但调用相同的支付方式,例如界面如下: 这两个页面都会使用第三方支付支付:(微信,支付宝,银联)如果在每一个页面都直接调用第三方支付的
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我安装了一个虚假的位置应用程序并将我的位置设置为不同的位置。然后打开谷歌地图和微信应用, Google map 将我的位置显示为我设置的(假的) 微信应用忽略虚假位置并检测真实位置(如何?) 然后我想
前言 支付分APP支付、H5支付、扫码支付等。app支付一般在app中使用,并且需要集成相应的支付SDK,H5支付多用于网页。如果你的APP不想集成支付SDK,又想实现支付功能,你可以在项目中使用
最近一直在调用微信的api,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官方里的文档也只是写得很模糊,说是按三步走。 1、申请app_id 2、填写包名3、 获取程序签
和平精英QQ/微信 每日登陆抽奖1~188Q币 活动两个QQ和微信都可以 每天登陆游戏并且玩一局 然后可以去活动界面抽奖Q币 QQ端(需玩一局):http://t.cn/Ai1Jn7Tz
目前,当我使用带有 Link 插件的 TinyMce4.5.1 时。即使我将属性 link_list 设置为 false,我也找不到隐藏默认 URL 选项(#top、#bottom)的方法。除了破
实际上,我正在尝试使用微信为我的 Web 应用程序设置 OAuth 登录。所以,我在微信上创建了一个帐户,并使用了一个测试帐户来无限访问。 因此,在测试帐户配置中,我已成功验证来自微信的 token
不管是腾讯还是新浪,查看他们的API,PHP都是有完整的接口,但对C#支持似乎都不是那么完善,都没有,腾讯是完全没有,新浪是提供第三方的,而且后期还不一定升级,NND,用第三方的动辄就一个类库,各种
和平精英QQ/微信 每日登陆抽奖1~188Q币/现金红包 活动两个QQ和微信都可以 QQ的登录游戏和分享好友即可获得三次抽奖次数 微信登录游戏就可以抽奖 如果没有反应就分享链接出去从分享的链接进
我想做什么 我正在尝试将我自己的基于 WebGL 的引擎移植到微信小游戏环境,目前只是尝试让 WebGL 上下文被粉红色清除: 有什么问题 我已经按照腾讯提供的示例以及 ThreeJS 示例来设置游戏
我是一名优秀的程序员,十分优秀!