网页版微信公众号监听机器人   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 (代码维护,暂未上传)