【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 ...
随机推荐
- 3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写
在x86处理器和PowerPC处理器中,PCI设备对"不可Cache的存储器空间"进行DMA读写的过程并不相同.其中PowerPC处理器对"不可Cache的存储器空间&q ...
- VS2005 添加lib 的方法
应用程序使用外部库时需要进行加载,两种库的加载本质上都是一样:提供功能和功能的定义.vs2005 c++ 项目设置外部库方法如下:1. 添加编译所需要(依赖)的 lib 文件 在"项 ...
- 基于am3358的lcd输出
/*#include<stdio.h> */ #include <unistd.h> #include <stdio.h> #include <stdlib. ...
- Scheme change not implemented
1.错误描述 2.错误原因 由于在改变Java代码中的方法或运行代码出现,导致Tomcat编译的代码不能替换工作空间的代码,即不能及时同步,出现错误 3.解决办法 (1)关闭Tomcat,clean一 ...
- Cortex-M3
大家听说过Cortex-M3吗?在嵌入式处理器的世界,cortex-M3是一位人见人爱的后生.它的成本和功耗低,可配置性很高.如今,很多ARM的工程师加入了cortex-M3的学习与开发中,WIZne ...
- Linux显示登录Shell信息
Linux显示登录Shell信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ finger -p Login Name Tty Idle Login Tim ...
- 1118: 属于 static 类型 Object 的值的隐式强制指令的目标可能是非相关类型 Number。
1.错误描述 此行的多个标记: -1118: 属于 static 类型 Object 的值的隐式强制指令的目标可能是非相关类型 Number. -left 2.错误原因 /** * 刷新按钮函数 */ ...
- Axure使用心得分享
因为之前很少涉及到原型设计,所以对这个原型设计工具也不太熟悉,第一次使用走了不少的弯路,在这里把自己在使用过程中的心得跟大家分享一下,希望能够对大家有所帮助. 一. 元素的选择 我觉得这是Axure原 ...
- 芝麻HTTP: Learning to Rank概述
Learning to Rank,即排序学习,简称为 L2R,它是构建排序模型的机器学习方法,在信息检索.自然语言处理.数据挖掘等场景中具有重要的作用.其达到的效果是:给定一组文档,对任意查询请求给出 ...
- vs不支持通过afxgetmainwnd()获取窗口句柄(转)
问题: 在vc6中这样代码顺利通过,可执行 ::SetDlgItemText(AfxGetMainWnd()-> m_hWnd,IDC_TIME,strTime); (这是在对话框程序中,代码在 ...