wxBot微信机器人框架(转)
原文:http://blog.csdn.net/tobacco5648/article/details/50722321
wxBot 是Python包装Web微信实现的微信机器人框架。可以很容易地实现微信机器人。 
github地址: wxBot github
环境与依赖
目前只能运行于Python 2环境 。 
wxBot 用到了Python requests 和 pyqrcode 库,使用之前需要安装这两个库:
pip install requests
pip install pyqrcode
- 1
 - 2
 
- 1
 - 2
 
快速开发
代码
利用 wxBot 最简单的方法就是继承WXBot类并实现handle_msg_all或者schedule函数,然后实例化子类并run,如下的代码对所有的文本消息回复 “hi”, 并不断向好友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'] == 5:
            self.send_msg(msg['user_name'], 'hi')
    def schedule(self):
        self.send_msg('tb', 'schedule')
        time.sleep(1)
def main():
    bot = MyWXBot()
    bot.DEBUG = True
    bot.run()
if __name__ == '__main__':
    main()
运行
直接用python运行代码(如运行测试代码test.py):
python test.py
- 1
 
- 1
 
登录微信
程序运行之后,会在当前目录下生成二维码图片文件 qr.png ,用微信扫描此二维码并按操作指示确认登录网页微信。
如果运行在Linux下,还可以通过设置WXBot对象的conf[‘qr’]为’tty’的方式直接在终端打印二维码(此方法只能在Linux终端下使用),效果如下:
效果展示
测试代码test.py的运行效果:
接口
handle_msg_all
handle_msg_all函数的参数msg是代表一条消息的字典。一般包含以下字段:
| 字段名 | 意义 | 
|---|---|
| msg_id | 消息id,微信内部数据 | 
| msg_type_id | 消息类型,具体见消息类型表 | 
| user_id | 发送消息的用户的id,微信内部数据 | 
| user_name | 发送消息的用户的名字,为备注名或者微信用户名 | 
| content | 消息体,不同类型消息的此字段内容不同,具体见消息类型表 | 
消息类型表:
| 类型号 | 类型名称 | 类型描述 | content | 
|---|---|---|---|
| 1 | Location | 位置 | 字典,包含location(位置的文本描述)和xml(原始未解析的xml格式文本)字段 | 
| 2 | FileHelper | 文件 | 字符串,文本文件内容 | 
| 3 | Self | 自己发送的消息 | 字符串,文本消息 | 
| 4 | Group | 群消息 | 字典,包含group_id(微信内部id), group_name(群名), user(微信内部id), user_name(用户名称), msg(字符串消息)字段 | 
| 5 | Text | 普通文本消息 | 字符串, 文本消息 | 
| 6 | Image | 图片 | 字符串, 图片url | 
| 7 | Voice | 语音 | 字符串, 语音url | 
| 8 | Recommend | 微信名片 | 字典, 包含nickname(昵称),alias(别名),province(省份),city(城市), gender(性别)字段 | 
| 9 | Animation | 动画 | 字符串, 动画url | 
| 10 | Share | 分享 | 字典,包含type(类型),title(标题),desc(描述),url(链接),from(来自)字段 | 
| 11 | Video | 视频 | 字符串,未解析的xml字符串 | 
| 12 | VideoCall | 视频电话 | 字符串,未解析的xml字符串 | 
| 13 | Redraw | 撤回消息 | 字符串,未解析的xml字符串 | 
| 14 | Init | 微信初始化系统消息,可以忽略 | 字符串,未解析的xml字符串 | 
| 99 | Unknown | 未知类型 | 字符串,未解析的xml字符串 | 
WXBot对象属性
WXBot对象在登录并初始化之后,含有以下的可用数据:
| 属性 | 描述 | 
|---|---|
| contact_list | 当前用户的微信联系人列表 | 
| group_list | 当前用户的微信群列表 | 
| session | WXBot与WEB微信服务器端交互所用的requests Session对象 | 
WXBot对象还含有一些可以利用的方法:
| 方法 | 描述 | 
|---|---|
| get_icon(id) | 获取用户icon并保存到本地文件 img_[id].jpg ,id为用户id(Web微信数据) | 
| get_head_img(id) | 获取用户头像并保存到本地文件 img_[id].jpg,id为用户id(Web微信数据) | 
| get_msg_img(msgid) | 获取图像消息并保存到本地文件 img_[msgid].jpg, msgid为消息id(Web微信数据) | 
| get_voice(msgid) | 获取语音消息并保存到本地文件 voice_[msgid].mp3, msgid为消息id(Web微信数据) | 
| get_user_remark_name(uid) | 获取好友的备注名,没有备注名则获取好友微信号, uid为好友的用户id(Web微信数据) | 
| send_msg_by_uid(word, dst) | 向好友发送消息,word为消息字符串,dst为好友用户id(Web微信数据) | 
| send_msg(name, word, isfile) | 向好友发送消息,name为好友的备注名或者好友微信号,isfile为False时word为消息,isfile为True时word为文件路径(此时向好友发送文件里的每一行) | 
wxBot微信机器人框架(转)的更多相关文章
- Golang 微信机器人包
		
一. 最近用在学习golang,写了个小工具练练手.通过golang模拟微信网页端,接收微信服务器的消息并定制.可接入图灵机器人的api实现一个微信机器人的小玩具,当然了,可以有更多更好玩的玩法. 二 ...
 - python+爬虫+微信机器人 打造属于你的网购价格监督利器
		
写在最前 程序是为人类服务的,最近正好身边小伙伴们在做球衣生意,当然是去nikenba专区购买了,可是有些热门球衣发布几分钟就被抢完,有些折扣球衣也是很快就被抢售一空,那么我们只能靠自己的眼睛一直盯着 ...
 - PHP 微信机器人 Vbot 结合 Laravel 基础入门及实例
		
新来了项目,需要能监听指定微信群的消息并进行转发.基于 PHP 7 的 web 微信机器人 Vbot 可以满足需求.Vbot 本质上就是实现了登录网页版微信来进行自动回复.群管理等等操作. githu ...
 - 你的网购价格监督利器——python+爬虫+微信机器人
		
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
 - 微信js框架第二篇(创建完整界面布局)
		
接着昨天的继续谈关于微信新出的这个js框架,今天主要谈一个页面的创建到布局的详细步骤. 一.创建一个完整页面 页面你可以创建在项目的任何节点,只要你在入口文件正确引入创建该页面的路径就可使 ...
 - 微信开发_微信教程__微信通讯框架V1.0
		
做个广告先, PHP千人群(6848027) C++群 (1414577) 看雪汇编&反汇编群(15375777) 看雪汇编&反汇编2群(4915800) 转载不一定注明出处,只要推荐 ...
 - 带有机器人框架的.NET自己主动化測试
		
Clayton Neal在软件測试和质量保证方面有超过13年的经验,当中有八年的Windows, web,和移动应用程序的測试自己主动化经验.他在測试领域的全部等级都工作过.近期他在Bloomberg ...
 - iOS  即时通讯 + 仿微信聊天框架 + 源码
		
这些你造吗? 即时通讯(IM),在IOS这片江湖里面已经算是一个老者了,我这小旋风也是在很早以前巡山的时候,就知道有即时通讯这个妖怪,以前也多多少少接触过一些,在造APP的时候用过,哎呀,说着说着就感 ...
 - 这是一款借助chrome 插件的微信机器人
		
1.chrome kit微信机器人简介 借助chrome 插件 js注入来实现消息的发送 chrome devtool api的调用来监听https请求 打开微信登录界面,在扫码登录前必须先打开too ...
 
随机推荐
- rpc通信模型
			
1.client_stub是为了屏蔽客户端调用远程主机的对象,而在本地的一个对象存根,存根负责接受本地方法调用,并将其序列化,然后通过网络发送给服务端.
 - URL大小写敏感之谜
			
URL其实就是我们浏览器地址栏的地址,一般由三部分组成: 协议名称,一般就是http 域名,也就是主机名 资源路径 如链接:http://www.w3school.com.cn/js/js_obj_r ...
 - WebService使用介绍(二)
			
Soap soap是什么 SOAP 是一种网络通信协议 SOAP即Simple Object Access Protocol简易对象访问协议 SOAP 用于跨平台应用程序之间的通信 SOAP 被设计用 ...
 - 获取src下的文件
 - (age|name|sex)+  脱离顺序控制 并且能添加多个
			
(age|name|sex)+ 脱离顺序控制 并且能添加多个
 - BZOJ4318 OSU!(动态规划+概率期望)
			
设f[i][0/1]为考虑前i位,第i位为0/1时的期望得分(乘以是0/1的概率).暴力转移显然.前缀和优化即可. 但是这个前缀和精度无法承受,动不动就nan. 考虑增加一位的贡献.若之前后缀1的个数 ...
 - Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) B
			
B. Problems for Round time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
 - dbcp基本配置和重连配置
			
转载自:http://agapple.iteye.com/blog/772507 最近在看一些dbcp的相关内容,顺便做一下记录,免得自己给忘记了. 1. 引入dbcp (选择1.4) Java代码 ...
 - css中clip:rect矩形剪裁功能
			
一.示例 img { position:absolute; clip:rect(30px,200px,200px,20px); } 二.理解 clip 属性剪裁绝对定位元素. clip:rect矩形剪 ...
 - 【poj1743-Musical Theme】不可重叠最长重复子串-后缀数组
			
http://poj.org/problem?id=1743 这题是一道后缀数组的经典例题:求不可重叠最长重复子串. 题意: 有N(1 <= N <=20000)个音符的序列来表示一首乐曲 ...