【itchat】用Python玩耍微信
【itchat】
itchat是个基于网页版微信的python微信API。功能目前做到基本可以满足正常的消息收发,信息的获取等等。不过对于红包之类网页版微信不支持的功能,这个模块自然也就无法支持了。
■ 安装与基本使用
安装就用pip就可以了。
基本使用:
首先进行登录,登出和发送消息,获取好友信息等等简单操作。
import itchat def find_friend(nick_name):
for friend in itchat.get_friends():
if friend['NickName'] == nick_name:
return friend def main():
itchat.auto_login(True)
friend = find_friend(u'spiritual')
username = friend['UserName']
itchat.send(msg=u'你好啊',toUserName=username)
itchat.logout() if __name__ == "__main__":
main()
按照代码逻辑,首先调用的是auto_login方法,这个方法就可以视为是登录方法,初次调用此方法时itchat会自动生成一个二维码并且显示出来让你扫二维码确认登录。至于其auto不auto在于参数有没有True。当参数为True的时候,意思是说保持热登录状态,初次登录后会把登录的一些信息保存在同目录下的itchat.pkl文件中,即使这次程序运行结束,下次在同目录下再次调用这个方法的时候可以不用再扫二维码登录了。根据网页版微信的登录机制,这种保持是有时限的,隔一段时间后就要重新登录。
find_friend方法接受一个用户昵称,然后调用了get_friends方法,这个方法放回的是一个当前用户所有好友组成的列表。一个好友可以视为一个字典结构,有UserName,NickName,Province,City,Sex等等字段的信息。需要注意的是UserName这个字段是处理过的,不是微信ID。而且这个UserName会根据每次登录而变化,所以对于程序而言,最好是能动态地获取这个信息,然后作为参数被其他函数调用。
send方法是笼统的发送消息的方法。指定msg为普通字符串时发送普通文本信息,toUserName就用到了刚才解析出的UserName的值。
logout自然就是登出了。因为设置了True,所以这里登不登出无所谓了,反正下次都是自动登录了。如果toUserName没有指出或为None,那么就发送给自己。
● 通过send方法发送其他类型的信息
如果想通过send方法发送一些其他类型的信息比如文件、图片、视频等,可以另msg等于一个有格式的字符串:
发送文件: msg='@fil@path_to_file'
发送图片:msg='@img@path_to_img'
发送视频:msg='@vid@path_to_vid'
这样就可以把程序所在计算机上的一些资源通过微信发送出去了。
send方法返回True或False来提示发送成功或失败,除了send,还有send_msg,send_image等一些经过一些包装的方法,这里就不多说了。
■ 注册消息
上面说的都是由本用户发送消息给其他用户,其实itchat还可以监听别人发给本用户的消息并根据消息做出一些反应。结合上面的send等方法就可以实现自动回复了。监听的具体实现就是通过装饰器来注册消息。比如:
@itchat.msg_register(itchat.content.TEXT)
def simple_reply(recv_msg):
msg = recv_msg['Text']
if msg == 'name':
itchat.send(msg=u'我的名字是Takanashi',toUserName=recv_msg['FromUserName'])
elif msg == 'age':
itchat.send(msg=u'我今年10岁了',toUserName=recv_msg['FromUserName']) itchat.run()
这个注册方法就监听了所有普通文本类型的消息,当消息是name或age的时候就返回相关的信息。注意这个注册函数接受的参数recv_msg不是单纯的文本而也是一个字典类型的结构。
最后别忘了调用itchat.run来启动自动回复。
*当对同一种类型的消息进行了多次注册的话那么以最后一次注册情况为准。
● 带参数注册
再来深入看下msg_register这个装饰器。上面使用的时候添加了一个参数itchat.content.TEXT,这是指出了注册在这个装饰器下的函数是用于处理文本类型消息的。
除了TEXT这个类型以外,还可以用以下的类型来标识发送过来的信息,从而实现对不同类别的信息作出不同类别的反应。
MAP 地理位置的分享
CARD 名片信息
SHARING 链接分享
PICTURE 表情或照片
RECORDING 语音
ATTACHMENT 附件
VIDEO 视频
FRIENDS 加好友申请,也就是说发起的一个好友申请其实是一条特殊的信息
SYSTEM 系统消息,比如系统推送消息或者是某个群成员发生变动等等
NOTE 通知文本,比如撤回了消息等等
对于非文本类型的信息,在注册的响应函数中的参数recv_msg结构上和文本信息是类似的。比如下面这个注册的响应函数可以自动把所有发过来的附件、语音等类型的信息保存到本地:
@itchat.msg_register([ATTACHMENT,PICTURE,RECORDING,VIDEO])
def download_attach(recv_msg):
recv_msg['Text'](recv_msg['FileName'])
itchat.send(msg='Received Your Message',toUserName=recv_msg['FromUserName'])
从中可以看出,文本信息的msg['Text']值是一段文本,而这些类型信息的msg['Text']的值却是一个函数,这个函数的作用就是接受一个本地的文件路径然后把目标文件保存在这个路径上,换言之就是下载了这个文件。
在想要进行某种类型的信息进行注册响应函数的时候,可以先实验性地用发送一条相关类型的信息,捕捉下获取到的Msg对象,逐一分析字段,,然后根据自己的需要进行编程。
再回到msg_register这个装饰器上来,除了第一个参数,我们还可以添加一些其他参数比如isGroupChat=True就表示注册的响应函数只响应来自群聊的信息。此时的recv_msg对象中会有isAt这个Key,当其值为True时表明在这条消息中我被@了。与之相对的还有isFriendChat应该是表明消息来自一般的好友聊天。比如下面这段代码可以将好友推荐过来的名片自动加好友:
@itchat.msg_register(CARD)
def add_friend(msg):
print msg['Text']
print msg['Content']
itchat.add_friend(userName=msg['Text']['UserName'])
print msg['RecommendInfo']
print msg['RecommendInfo']['UserName']
■ 账号类方法
刚才上面也已经用过了get_friends这个方法。其实类似的跟好友、账号相关的方法还有一些:
get_friends 返回所有好友组成的列表,第一个是自己,此外还能传入update=True参数用于获取更新后的列表。
search_friends 这个方法的参数是多种多样的。如果是空参,那么返回自己的信息。如果有参数userName那么就是用户对象中userName字段的值作为查询的依据。如果name=xxx是根据我们对好友的备注来找人,wechatAccount=xxx则是根据微信ID来找人
update_friend 有时候好友更新了资料比如头像,我们是无法第一时间知道的,这个方法就是手动触发更新资料的操作。参数可以传入一个userName的值或者一些值的列表来更新一个或一些用户的信息
get_mps 返回关注的全部公众号列表
search_mps 公众号也是有UserName这个属性的,所以可以通过UserName来选择返回特定的一个公众号的信息
■ 群聊类方法
get_chatrooms 返回所有群聊的列表,可以加参数update=True,此时手动更新信息并且返回在通讯录中保存过的群聊列表的信息。
要获取群聊信息时,有一点比较Tricky的是群聊列表的信息并不是和账户直接相关,而是每次登录的时候进行动态加载的,这就使得利用API来获取群聊列表的时候有时候会失灵。为了正确地获取群聊列表,应该即使没有需要时也要保证itchat.run()的运行。假如一定不想运行这个run的话可以在程序结束前调用itchat.dump_login_status()方法来更新热插拔时itchat所需要的登录状态。
search_chatroom 搜寻特定的群聊信息。群聊同样有UserName这个字段的信息用于特定一个群聊用。
update_chatroom 更新群聊信息
暂时写到这里吧。。好玩是挺好玩的,懒得往下写了。。
【itchat】用Python玩耍微信的更多相关文章
- 有了 itchat, python 调用微信个人号从未如此简单(新增 py3 支持)
itchat 是一个开源的微信个人号接口. 近期完成了 py3 与文档的完善,欢迎各位使用与测试. 使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人. 当然,该 api 的使用远不止 ...
- python实现微信接口(itchat)
python实现微信接口(itchat) 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实 ...
- python实现微信接口——itchat模块
python实现微信接口——itchat模块 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方 ...
- python监控微信报警
微信接口调用代码: #coding=utf8 import itchat from flask import Flask, request itchat.auto_login(enableCmdQR= ...
- 利用Python查看微信共同好友
思路 首先通过itchat这个微信个人号接口扫码登录个人微信网页版,获取可以识别好友身份的数据.这里是需要分别登录两人微信的,拿到两人各自的好友信息存到列表中. 这样一来,查共同好友就转化成了查两个列 ...
- 使用Python访问微信
itchat是一个开源的微信个人号接口,使用它我们可以很方便的访问我们个人微信号里的信息.itchat的github地址如下: https://github.com/littlecodersh/itc ...
- 10分钟教你用Python实现微信自动回复
01 前言&&效果展示 相信大家都有忙碌的时候,不可能一直守在微信上及时回复消息.但微信又不能像QQ一样设置自动回复.无妨,今天,我们就来用Python实现微信的自动回复功能吧,并且把 ...
- 用python玩微信(聊天机器人,好友信息统计)
1.用 Python 实现微信好友性别及位置信息统计 这里使用的python3+wxpy库+Anaconda(Spyder)开发.如果你想对wxpy有更深的了解请查看:wxpy: 用 Python 玩 ...
- 利用python进行微信好友分析
欢迎python爱好者加入:学习交流群 667279387 本文主要利用python对个人微信好友进行分析并把结果输出到一个html文档当中,主要用到的python包为itchat,pandas,py ...
随机推荐
- mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】
1.mysql简单的查询:select 字段1,字段2... from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都 ...
- 嵌入式Linux基于framebuffer的jpeg格式本地LCD屏显示
在基于Linux的视频监控采集系统中,摄像头采集到的一帧视频图像数据一般都是经过硬件自动压缩成jpeg格式的,然后再保存到摄像头设备的缓冲区.如果要把采集到的jpeg格式显示在本地LCD屏上,由于我们 ...
- Caused by:java.sql.BatchUpdateException:ORA-02291
1.错误描述 Caused by:java.sql.BatchUpdateException:ORA-02291:违反完整约束条件(PEKING.FKA844BA60FCCDD33)-未找到父项关键字 ...
- 学习笔记:webpack深入与实践(一)
一.webpack基本介绍 webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). 四个核心概念: 入口(entry):指示 webpack 应该 ...
- 手机端仿ios的1-n级联动脚本二
一,图片 二,代码 2.1,html脚本 var weekdayArr=['周日','周一','周二','周三','周四','周五','周六'];var timeArr = ['08:30','09: ...
- UML类图10分钟快速入门
虚线箭头指向依赖: 实线箭头指向关联: 虚线三角指向接口: 实线三角指向父类: 空心菱形能分离而独立存在,是聚合: 实心菱形精密关联不可分,是组合: 原文作者:圣杰 原文地址:http://www.j ...
- CentOS7安装dnf报错:No package dnf available
1.百度中提供的安装办法 yum install epel-release -y yum install dnf 2. No package dnf available解决办法 运行一下几个命令: w ...
- 一个TokenUtils程序,亲测可用
1. Token用途 token是HTTP请求的令牌,通俗一点说是凭证,目的是防止api被随意访问获取信息. 可使用随机数生成,也可以使用用户id.密码或时间之类进行排序或者加密进行声称. token ...
- php+sqlServer 2008R2 PHPstudy下数据库环境搭建
简要:小主从事PHP二年,期间一直做后台;在过程中遇到一个奇葩的组合就是PHP+sqlServer应用场景,希望能够跟各位PHP大神分享和学习探索,如果有不对或者好的建议告知下:*~*! 一.下载sq ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...