网页版微信公众号监听机器人 v-1.0.0
登陆的过程按顺序为:
-
获取二维码uuid
-
获取二维码
-
判断是否已经登陆成功
-
获取初始化数据
-
更新微信相关信息(通讯录、手机登陆状态)
-
循环扫描新信息(开启心跳)
-
- -
登陆方法简介:
方法名 | 简介 文件位置: itchat/core.py | |
---|---|---|
get_QRuuid | 获取生成二维码所需的uuid,并返回。 | |
check_login | 判断是否已经登陆成功,返回扫描的状态码。 | |
process_login_info | 登陆成功,获取 skey, wxsid, wxuin, pass_ticket | |
show_mobile_login | 在手机上显示登录状态。 | |
web_init | 获取微信用户信息以及心跳所需要的数据。 | |
start_receiving | 循环扫描是否有新的消息,开启心跳包。 |
core.py文件中的Core类定义了itchat的所有接口。但是只定义了接口,方法全部在component包中实现重构。
文件位置: itchat/components/login.py
登陆接口介绍:
-
1.通过抓包,获取appid和fun并通过get请求
对https://login.weixin.qq.com/进行访问,可获得uuid
uuid如下图所示:
-
2.通过uuid- 获取二维码图片。(并保存,此处省略)
请求接口:https://login.weixin.qq.com/1/ + uuid终端中显示登陆二维码,需要安装 pillow 模块。 获取二维码链接、下载图片、保存到内存中(登陆成功后删除)。 将二维码以PNG图像的形式保存、计算生成的PNG图像的实际像素大小。 把PNG图像编码为base64字符串重新输出 通过pyqrcode的QRCode方法 qrText => QRCode.text(base64字符串) 该方法返回一个基于字符串的二维码表示。数据模块由1、0表示。 然后把 1、0 替换成 unicode编码的 黑/白 字符,最后用sys输出到控制台 import sys b = u'\u2588' sys.stdout.write(b + '\r') sys.stdout.flush()
-
3.判断是否已经登陆成功
Request URL: https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=oYdNqgD3wQ==&tip=0&r=251883138&_=1567410890538接口参数:uuid = uuid 。r = int(时间戳) / 1579 。 _ = int(时间戳)
返回200.说明登陆成功。
4.获取登陆url信息
完成登录时(扫描qrcode),获取 loginInfo_url
syncUrl和fileUploadingUrl将被获取
将生成deviceid和msgid
获取skey, wxsid, wxuin, pass_ticket
-
5.初始化信息
接口: url = '%s/webwxinit?r=%s' % (loginInfo['url'], int(时间戳))
通过dic即可提取基础信息。 -
6.更新微信相关信息(登陆状态)
-
7.循环扫描新信息(开启心跳监听)
多线程的事件监听器模式。
1, 创建线程并启动,在创建线程的位置设置一个标记
2,创建队列保存线程
3,遍历队列中的线程 ,并得到标记
代码部分来源于wxpy。这里主要的是分析下二维码登陆的逻辑和接口。
09/05 更新:开启 smtp 服务,登出邮件通知。
监控设置:
开启 smtp 服务,登出时邮件通知。
开启 @自动回复,可自行查询监听状况。
代理ip:
提取类型: 每次请求提取一个https隧道IP。
使用时间: 每天早9点晚12点,自动开启代理ip。
代理规则: 代理ip存活时间15分钟。
消耗预算: 每日大约需要消耗60个IP。
注意事项:
Send_email = True # 开启 登出邮件通知
文件位置: itchat/components/config/config_smtp.py
config_smtp中设置 收发邮件对象
邮件发出后,使用sheel命令关闭阻塞的py进程 -> embed(shell='p')
本地: os.system('ps -e|grep run_wxbot.py |grep -v grep|cut -c 1-5|xargs kill -9')
linux: ps -ef|grep run_wxbot.py |grep -v grep|cut -c 9-15|xargs kill -9
文件位置: python3.X/site-packages/itchat/components/login.py
linux下参数设置:
bot = Bot(console_qr=True # 终端显示二维码 )
# console_qr 在大部分Linux 系统中可设为`True`或 2,
# MacOS Terminal 的默认白底配色中,应设为 -2。
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
linux下itchat 源码修改事项:
路径:/usr/local/lib/python3.5/site-packages/
注释了 group.py 106行 用户初始化 log 信息
创建了 itchat/components/config 文件 config_smtp.py
增加了 itchat/components/login.py 中 SMTP 服务
本地 itchat 源码修改事项:(同上)
路径: /Users/liwei/venv/lib/python3.5/site-packages/itchat/components/login.py
from ..components.config.config_smtp import Send_email,config_smtp
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
linux启动事项:
启动报错:lOG OUT。 解决方法:删除 wx.pkl 关闭缓存
使用 screen命令 实现当前窗口与任务分离:
新建窗口 screen -S wxbot
会话分离 Ctrl+A D(即按住Ctrl,依次再按A,D)
恢复会话窗口 screen -r wxbot
杀死会话窗口 screen -X -S 10289 quit
ps:(监听公众号推送消息,未完待续)
github: https://github.com/lixi5338619/weixinbot (代码维护,暂未上传)