1 Star 0 Fork 0

Alan / wxBot

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

wxBot star this repo fork this repo python

wxBot 是用Python包装Web微信协议实现的微信机器人框架。

目前的消息支持情况:

  • 群消息

    • 文本
    • 图片
    • 地理位置
    • 个人名片
    • 语音
    • 动画
    • 语音电话
    • 红包
  • 联系人消息

    • 文本
    • 图片
    • 地理位置
    • 个人名片
    • 语音
    • 小视频
    • 动画
    • 视频电话
    • 红包
    • 转账
  • 消息发送

    • 文本
    • 图片
    • 文件

Web微信协议参考资料:

挖掘微信Web版通信的全过程

微信协议简单调研笔记

qwx: WeChat Qt frontend 微信Qt前端

master-dev 分支为开发版本,用于测试新特性,欢迎使用后提出建议!

1 环境与依赖

此版本只能运行于Python 2环境 。

wxBot 用到了Python requests , pypng , Pillow 以及 pyqrcode 库。

使用之前需要所依赖的库:

pip install requests
pip install pyqrcode
pip install pypng
pip install Pillow

2 快速开发

利用 wxBot 最简单的方法就是继承WXBot类并实现 handle_msg_all 或者 schedule 函数,然后实例化子类并调用 run 方法 。

2.1 代码

以下的代码对所有来自好友的文本消息回复文本消息 hi 、图片消息 1.png 以及文件消息 1.png , 并不断向好友 tb 发送文本 schedule

handle_msg_all 函数用于处理收到的每条消息,而 schedule 函数可以做一些任务性的工作(例如不断向好友推送信息或者一些定时任务)。

#!/usr/bin/env python
# coding: utf-8

import time
from wxbot import *

class MyWXBot(WXBot):
    def handle_msg_all(self, msg):
        if msg['msg_type_id'] == 4 and msg['content']['type'] == 0:
            self.send_msg_by_uid(u'hi', msg['user']['id'])
            self.send_img_msg_by_uid("img/1.png", msg['user']['id'])
            self.send_file_msg_by_uid("img/1.png", msg['user']['id'])

    def schedule(self):
        self.send_msg(u'tb', u'schedule')
        time.sleep(1)

def main():
    bot = MyWXBot()
    bot.DEBUG = True
    bot.run()

if __name__ == '__main__':
    main()

2.2 运行

直接用 python 运行代码(如运行测试代码 test.py ):

python test.py

2.3 登录微信

程序运行之后,会在当前目录下生成二维码图片文件 qr.png 并自动打开,用微信扫描此二维码并按操作指示确认登录网页微信。

如果运行在Linux下,还可以通过设置 WXBot 对象的 conf['qr']tty 的方式直接在终端打印二维码(此方法只能在Linux终端下使用),效果如下:

login_on_ubuntu

3 效果展示

测试代码 test.py 的运行效果:

向机器人发送消息

后台

4 接口

4.1 handle_msg_all

handle_msg_all 函数的参数 msg 是代表一条消息的字典。字段的内容为:

字段名 字段内容
msg_type_id 整数,消息类型,具体解释可以查看 消息类型表
msg_id 字符串,消息id
content 字典,消息内容,具体含有的字段请参考 消息类型表 ,一般含有 type(数据类型)与 data(数据内容)字段,typedata的对应关系可以参考 数据类型表
user 字典,消息来源,字典包含 name(发送者名称,如果是群则为群名称,如果为微信号,有备注则为备注名,否则为微信号或者群昵称)字段与 id(发送者id)字段,都是字符串

4.2 消息类型表

类型号 消息类型 content
0 初始化消息,内部数据 无意义,可以忽略
1 自己发送的消息 无意义,可以忽略
2 文件消息 字典,包含 typedata 字段
3 群消息 字典, 包含 user (字典,包含 idname字段,都是字符串,表示发送此消息的群用户)与 typedata 字段,红包消息只有 type 字段, 文本消息还有detail、desc字段, 参考 群文本消息
4 联系人消息 字典,包含 typedata 字段
5 公众号消息 字典,包含 typedata 字段
6 特殊账号消息 字典,包含 typedata 字段
99 未知账号消息 无意义,可以忽略

4.3 数据类型表

type 数据类型 data
0 文本 字符串,表示文本消息的具体内容
1 地理位置 字符串,表示地理位置
3 图片 字符串,图片数据的url,HTTP POST请求此url可以得到jpg文件格式的数据
4 语音 字符串,语音数据的url,HTTP POST请求此url可以得到mp3文件格式的数据
5 名片 字典,包含 nickname (昵称), alias (别名),province (省份),city (城市), gender (性别)字段
6 动画 字符串, 动画url, HTTP POST请求此url可以得到gif文件格式的数据
7 分享 字典,包含 type (类型),title (标题),desc (描述),url (链接),from (源网站)字段
8 视频 不可用
9 视频电话 不可用
10 撤回消息 不可用
11 空内容 空字符串
12 红包 不可用
13 小视频 字符串,视频数据的url,HTTP POST请求此url可以得到mp4文件格式的数据
99 未知类型 不可用

4.4 群文本消息

由于群文本消息中可能含有@信息,因此群文本消息的 content 字典除了含有 typedata 字段外,还含有 detaildesc 字段。

各字段内容为:

字段 内容
type 数据类型, 为0(文本)
data 字符串,消息内容,含有@信息
desc 字符串,删除了所有@信息
detail 数组,元素类型为含有 typevalue 字段的字典, type 为字符串 str (表示元素为普通字符串,此时value为消息内容) 或 at (表示元素为@信息, 此时value为所@的用户名)

4.5 WXBot对象属性

WXBot 对象在登录并初始化之后,含有以下的可用数据:

属性 描述
contact_list 当前用户的微信联系人列表
group_list 当前用户的微信群列表
public_list 当前用户关注的公众号列表
special_list 特殊账号列表
session WXBot 与WEB微信服务器端交互所用的 Requests Session 对象

4.6 WXBot对象方法

WXBot 对象还含有一些可以利用的方法

方法 描述
get_icon(uid, gid) 获取联系人或者群聊成员头像并保存到本地文件 img_[uid].jpg , uid 为用户id, gid 为群id
get_head_img(id) 获取用户头像并保存到本地文件 img_[id].jpgid 为用户id(Web微信数据)
get_msg_img(msgid) 获取图像消息并保存到本地文件 img_[msgid].jpg , msgid 为消息id(Web微信数据)
get_voice(msgid) 获取语音消息并保存到本地文件 voice_[msgid].mp3 , msgid 为消息id(Web微信数据)
get_video(msgid) 获取视频消息并保存到本地文件 video_[msgid].mp4 , msgid 为消息id(Web微信数据)
get_contact_name(uid) 获取微信id对应的名称,返回一个可能包含 remark_name (备注名), nickname (昵称), display_name (群名称)的字典
send_msg_by_uid(word, dst) 向好友发送消息,word 为消息字符串,dst 为好友用户id(Web微信数据)
send_img_msg_by_uid(fpath, dst) 向好友发送图片消息,fpath 为本地图片文件路径,dst 为好友用户id(Web微信数据)
send_file_msg_by_uid(fpath, dst) 向好友发送文件消息,fpath 为本地文件路径,dst 为好友用户id(Web微信数据)
send_msg_by_uid(word, dst) 向好友发送消息,word 为消息字符串,dst 为好友用户id(Web微信数据)
send_msg(name, word, isfile) 向好友发送消息,name 为好友的备注名或者好友微信号, isfileFalseword 为消息,isfileTrueword 为文件路径(此时向好友发送文件里的每一行),此方法在有重名好友时会有问题,因此更推荐使用 send_msg_by_uid(word, dst)
is_contact(uid) 判断id为 uid 的账号是否是本帐号的好友,返回 True (是)或 False (不是)
is_public(uid) 判断id为 uid 的账号是否是本帐号所关注的公众号,返回 True (是)或 False (不是)

5 群聊机器人示例

bot.py图灵机器人 API 以及 wxBot 实现了一个自动回复机器人.

此机器人会回复来自联系人的消息,以及群里@此账号的消息。

并且本帐号可以通过发送 退下走开关闭关掉休息滚开 来关闭机器人的自动回复。

也可以通过发送 出来启动工作 来再次开启机器人的自动回复。

群聊时需要将对应的群保存到联系人列表。

群聊实现效果:

群聊

群聊后台

bot.py 的运行方法:

  • 要接入图灵机器人API时:

    1. 图灵机器人官网注册账号,申请图灵key: 图灵key申请地址

    2. bot.py 文件所在目录下新建 conf.ini 文件,内容为:(key字段内容为申请到的图灵key)

    [main]    
    key=1d2678900f734aa0a23734ace8aec5b1
    1. 运行 bot.py
    python bot.py
  • 不接入图灵机器人API时(此时机器人对联系人消息以及群里@自己的消息统一回复 知道了 ):

    1. 运行 bot.py
    python bot.py

6 类似项目

feit/Weixinbot Nodejs 封装网页版微信的接口,可编程控制微信消息

littlecodersh/ItChat 微信个人号接口、微信机器人及命令行微信,Command line talks through Wechat

Urinx/WeixinBot 网页版微信API,包含终端版微信及微信机器人

zixia/wechaty Wechaty is wechat for bot in Javascript(ES6). It's a Personal Account Robot Framework/Library.

7 基于Wxbot延伸的一些项目

WxbotManage 基于Wxbot的微信多开管理和Webapi系统

8 交流讨论

问题可以直接开 issue

QQ 交流群: 429134510 (1群) 603614392 (2群)

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

Python网页微信API 展开 收起
Python
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/Alan996/wxBot.git
git@gitee.com:Alan996/wxBot.git
Alan996
wxBot
wxBot
master

搜索帮助