【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 ...
随机推荐
- Object Detection︱RCNN、faster-RCNN框架的浅读与延伸内容笔记
一.RCNN,fast-RCNN.faster-RCNN进化史 本节由CDA深度学习课堂,唐宇迪老师教课,非常感谢唐老师课程中的论文解读,很有帮助. . 1.Selective search 如何寻找 ...
- 4.1 PCIe总线的基础知识
与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端.PCIe总线除了总线链路外,还具有多个层次,发送端发送数据时将通 ...
- 基于LDA的Topic Model变形
转载于: 转:基于LDA的Topic Model变形 最近有想用LDA理论的变形来解决问题,调研中.... 基于LDA的Topic Model变形 基于LDA的Topic Model变形最近几年来,随 ...
- 利用PowerDesigner15在win7系统下对MySQL 进行反向工程(二)
利用PowerDesigner15在win7系统下对MySQL 进行反向工程 1.打开PowerDesigner,建立新模型,选择Physical Data Model中的Physical Da.. ...
- Netty的并发编程实践3:CAS指令和原子类
互斥同步最主要的问题就是进行线程阻塞和唤醒所带来的性能的额外损耗,因此这种同步被称为阻塞同步,它属于一种悲观的并发策略,我们称之为悲观锁.随着硬件和操作系统指令集的发展和优化,产生了非阻塞同步,被称为 ...
- (三十)java多线程一
我们通常在电脑中打开的应用称作进程,一个应用就是一个进程,而一个进程里边一般包含多个线程. 系统要为每一个进程分配独立的内存空间,而进程里的多个线程共用这些内存. 我们通常所写的main方法就是一个线 ...
- Linux显示目前与过去登入系统的用户相关信息
Linux显示目前与过去登入系统的用户相关信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ last youhaido pts/0 :0 Sat Jan 2 ...
- ssh_Connection reset by peer报错
连接SSH时,产生了一下错误----->Read from socket failed: Connection reset by peer 首先查看日志 tail -f /var/log/aut ...
- meta的各种参数
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...
- Canada Cup 2016 D. Contest Balloons
最近好弱做什么题目都是做一晚上 这是合肥站炼铜后遗症? 这题就是贪心 我已开始还写了1小时---三分-----. #include<bits/stdc++.h> using namespa ...