Python微信操控(itchat)
itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。
开源地址
https://github.com/littlecodersh/ItChat
文档:
https://itchat.readthedocs.io/zh/latest/
安装:
pip3 install itchat
登入与登出
登入并向文件助手发送一句话,登入时会经过扫码操作,类似于电脑微信登入
import itchat
#登入并保存登入状态,实现第一次运行时扫码,一定时间内再次运行就不用扫码了,手机微信上将显示:网页微信已登入.....
itchat.auto_login(hotReload=True)
#发送文本数据到文件助手
itchat.send("东小东你好123",toUserName="filehelper")
登出:
itchat.logout()
注册登入登出的回调方法
def ldong():
print('微信登入')
def edong():
print('微信登出')
#登入
itchat.auto_login(hotReload=True,loginCallback=ldong, exitCallback=edong)
命令行二维码
通过以下命令可以在登陆的时候使用命令行显示二维码:
itchat.auto_login(enableCmdQR=True)
部分系统可能字幅宽度有出入,可以通过将enableCmdQR赋值为特定的倍数进行调整:
#如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为2
itchat.auto_login(enableCmdQR=2)
默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值:
itchat.auto_login(enableCmdQR=-1)
可接受监听的数据类型
消息分类:
图片或表情(PICTURE)、录制(RECORDING)、附件(ATTACHMENT)、小视频(VIDEO)、文本(TEXT),地图(MAP),名片(CARD),通知(NOTE),分享(SHARING),好友邀请(FRIENDS)、语音(RECORDING)、系统消息(SYSTEM)
获取消息内容:
可以通过print(msg)方法查看消息里的所有数据,然后进行提取
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
print(msg)
消息捕获
针对朋友的消息捕获
登入时不适用于hotReload=True,因为多次运行会多次注册自动回复,比如在没有登出的情况下运行3次程序,就会出现1次接受3次发送的效果
监听函数只有在对方发送数据时进入
文本
import itchat
#自动回复
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
return "东小东回复数据:"+msg["Text"] #登入
itchat.auto_login()
#保持运行
itchat.run()
文件下载
import itchat
#PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT
# 图片、录制、附件、视频、文本
from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
filedpx="./filex/"+msg["FileName"] #得到文件路径,目录需要手动创建
msg.download(filedpx) #下载
return "你发送的文件类型"+msg['Type']+" 保存地址为:filex/"+msg.fileName
针对群聊的自动监测
如果想添加针对群聊的监测,则在监听函数加入isGroupChat=True
监听函数只要有数据发送就会进入,包括自己发送的数据
import itchat
#只对群消息有效
@itchat.msg_register(itchat.content.TEXT,isGroupChat=True)
def text_reply(msg):
if(msg["Text"]==""):
return "东小东回复数据xx:"+msg["Text"]
#只对个人用户有效
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
return "东小东回复数据:"+msg["Text"]
#登入
itchat.auto_login()
#保持运行
itchat.run()
@我信息监测
import itchat
#只对群消息有效
@itchat.msg_register(itchat.content.TEXT,isGroupChat=True)
def text_reply(msg):
#判断是否是@本人
if msg["Text"].find("@"+usermsgx["NickName"])==0:
return "@"+msg.actualNickName+" 东你发的信息为:"+msg.text itchat.auto_login()#登入
usermsgx=itchat.search_friends()#得到当前用户的信息
itchat.run()#保持运行
针对所有信息来源信息监听
朋友、群聊、公众号
@itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=True)
def simple_reply(msg):
return 'I received: %s' % msg.text
数据发送
return
在接收数据函数里的return “数据” 则是自动确认为回复当前发送用户数据,可以删除该句,则不进行数据回复
itchat.send,可以一次性发送多条
参数:(内容,用户)
返回值:发送结果,是否发送成功,json数据
注意:文件地址不可为中文
内容:可为单独的字符串内容,其他有【@类型@地址】,类型有图片(img)、文件(fil)、视频(vid)
用户:省略则发个自己,不稳定,msg['FromUserName']表示指定用户为触发用户
res=itchat.send('文本信息的发送......!', toUserName=msg['FromUserName'])
res=itchat.send('@img@%s' % './filex/zcy.gif', toUserName=msg['FromUserName'])
res=itchat.send('@fil@%s' % './filex/tt.txt', toUserName=msg['FromUserName'])
res=itchat.send('@vid@%s' % './filex/videox.mp4', toUserName=msg['FromUserName'])
指定类型发送2
参数:(地址,用户)
返回值:发送结果,是否发送成功,json数据
注意:文件地址不可为中文
bb = itchat.send_msg('文字信息2', toUserName=msg['FromUserName'])
bb = itchat.send_image('./filex/zcy.gif', toUserName=msg['FromUserName'])
bb = itchat.send_file('./filex/tt.txt', toUserName=msg['FromUserName'])
bb = itchat.send_video('./filex/videox.mp4', toUserName=msg['FromUserName'])
print("返回值:",bb)
msg.user.send()
使用与itchat.send()相同,但是可以已经确定toUserName=msg['FromUserName'],不可更换
指定用户(toUserName):
文件助手(发送给自己,必备):toUserName="filehelper"
发送者:toUserName=msg['FromUserName']
例子:
通过群名向群里发送内容,该微信群需要在运行代码前进行手动添加到通讯录
import itchat #登入
itchat.auto_login()
chatroomName='傻逼群'#群名
itchat.get_chatrooms(update=True)
chatrooms = itchat.search_chatrooms(name=chatroomName)
if len(chatrooms)==0 :
print('没有找到群聊:' + chatroomName)
exit(0)
else:
print(chatrooms[0]['UserName'])#输出群聊标识符
itchat.send_msg('大家好,这是发送的内容', toUserName=chatrooms[0]['UserName'])#发送消息 #保持运行
itchat.run()
个人的基本信息
获取本人信息
usermsgx=itchat.search_friends()
print(usermsgx)
print(usermsgx["NickName"]) #得到昵称
获取所有朋友信息
friendx=itchat.get_friends()
print(friendx)
条件获取朋友或者自己信息
# 获取特定UserName的用户信息
itchat.search_friends(userName='@abcdefg1234567')
# 获取任何一项等于name键值的用户
itchat.search_friends(name='littlecodersh')
# 获取分别对应相应键值的用户
itchat.search_friends(wechatAccount='littlecodersh')
# 三、四项功能可以一同使用
itchat.search_friends(name='LittleCoder机器人', wechatAccount='littlecodersh')
得到用户序号
@itchat.msg_register([TEXT,MAP])
def text_reply(msg):
print(msg)
print(msg["User"]["Uin"])
更新用户数据,通过UserName,或者UserName列表
memberList = itchat.update_friend('@abcdefg1234567')
注意:
中文文件名文件上传
Q: 为什么中文的文件没有办法上传?
A: 这是因为使用requests包会自动将中文文件名编码为服务器端无法识别的格式,所以需要修改requests包或者使用别的方法上传文件。
最简单的方法即将requests包的packages/urlib3中的fields.py中的format_header_param方法改为如下内容:
def format_header_param(name, value):
if not any(ch in value for ch in '"\\\r\n'):
result = '%s="%s"' % (name, value)
try:
result.encode('ascii')
except UnicodeEncodeError:
pass
else:
return result
if not six.PY3: # Python 2:
value = value.encode('utf-8')
value = email.utils.encode_rfc2231(value, 'utf-8')
value = '%s="%s"' % (name, value.decode('utf8'))
return value
命令行显示二维码
Q: 为什么我在设定了itchat.auto_login()的enableCmdQR为True后还是没有办法在命令行显示二维码?
A: 这是由于没有安装可选的包pillow,可以使用右边的命令安装:pip install pillow
综合:
实现文本信息的关联,及可以实时看到所关联的账号的聊天信息,当发生聊天数据时会主动将聊天数据发送到主账号上
import itchat
from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT,MAP
#只对个人用户有效
@itchat.msg_register([TEXT])
def text_reply(msg):
# 查询数据的接收者
touserx="filehelper"#默认为文件助手发送信息
if msg["ToUserName"]!="filehelper":#如果非文件助手信息
touserx=itchat.search_friends(userName=msg["ToUserName"])["NickName"]
inuserx = itchat.search_friends(userName=msg["FromUserName"])["NickName"]#查询数据的发送者
totouserx=itchat.search_friends(name='东里个咚')[0]["UserName"] #通过昵称查询到username
texts=msg.text #得到接收的数据
itchat.send_msg("【"+thisuserx+"】\n"+inuserx+"-->"+touserx+" :\n"+texts,toUserName=totouserx) #发送给目标 #登入
itchat.auto_login()
thisuserx=itchat.search_friends()["NickName"] #得到当前用户昵称
#保持运行
itchat.run()
Python微信操控(itchat)的更多相关文章
- python微信库 --- itchat
python实现微信接口——itchat模块 安装 pip install itchat 登录 itchat.auto_login() # 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短 ...
- python实现微信接口(itchat)
python实现微信接口(itchat) 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实 ...
- python实现微信接口——itchat模块
python实现微信接口——itchat模块 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方 ...
- 【转】Python微信好友头像拼接图
转自:Python微信好友头像拼接图 今天在朋友圈看到有人发了微信好友拼接图,心里满是新奇,看了下评论才知道用Python写的.心里痒痒,立马就安装了下Python. 安装好了之后,看了下大神的代码, ...
- Python微信机器人
Python微信机器人 本文目录 一 简介 二 登录微信 三 微信好友男女比例 四 微信好友地域分布 五 微信聊天机器人 一 简介 wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量 ...
- python 微信企业号
python 微信企业号 准备,如果没有微信企业号,可以先申请体验号记下CorpID和Secret(获取Token用) 发送消息首先可以在微信的开发者中心,查看接口文档 下面就是python代码:1. ...
- appium+python 微信小程序的自动化
sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q -p 8889 -s addons.py http: ...
- Python处理微信利器——itchat
接触itchat是一个偶然,上知乎刷出一个有意思的文章.于是乎运行源码,调错加上查阅博客,发现itchat大有可为. 知乎链接:https://zhuanlan.zhihu.com/p/2578293 ...
- 登录以及发送微信消息itchat 库
项目地址点这里 itchat itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. 使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人. 当然,该api的 ...
随机推荐
- Python实现树
树 (tree) 是一种非常高效的非线性存储结构.树,可以很形象的理解,有根,有叶子,对应在数据结构中就是根节点.叶子节点,同一层的叶子叫兄弟节点,邻近不同层的叫父子节点,非常好理解. 注:定义来自百 ...
- C指针的一些小细节
1 int *c;*c=4-->int *c;int b;c=&b;*c=4; 在使用指针之前,一定要将其初始化,当然,如果是赋予一个地址,就相当于使用的同时就进行了初始化.
- 阿里巴巴 Java 开发手册 (十三) 其它
1. [强制]在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度. 说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则); 2. [强制] ...
- JavaScript前端和Java后端的AES加密和解密(转)
在实际开发项目中,有些数据在前后端的传输过程中需要进行加密,那就需要保证前端和后端的加解密需要统一.这里给大家简单演示AES在JavaScript前端和Java后端是如何实现加密和解密的. java端 ...
- dump net core lldb 分析
原文https://www.cnblogs.com/calvinK/p/9274239.html centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试) 写个dem ...
- springboot项目,打包时携带所有依赖
springboot项目,打包时携带所有依赖 本文主要解决springboot打包时,如何设置才能把当前项目的所有依赖都打进去. Springboot 的自带spring-boot-maven-plu ...
- rabbitmq监控之消息确认ack
rabbitmq springboot ack 监控 一.测试环境 二.启动测试 一直以来,学习rabbitmq都是跟着各种各样的教程.博客.视频和文档,撸起袖子就是干!!!最后,也成功了. 当然,成 ...
- Python进阶----异常处理
Python进阶----异常处理 一丶错误和异常 错误: 语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 ...
- python day 18: thinking in UML与FTP作业重写
目录 python day 18 1. thinking in UML读书小感 2. FTP作业重写 2.1 软件目录结构 2.2 FTPClient端脚本 2.3 FTPServer端脚本 pyth ...
- python day 17: UML(统一建模语言)
python day 17 UML:unified modeling languages,是一种基于面向对象的可视化建模语言. 画图语言:画图要合理.即符合逻辑. 历史: 3.1. 软件功能越来越强大 ...