Python微信操控(itchat)

itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。

开源地址

https://github.com/littlecodersh/ItChat

文档:

https://itchat.readthedocs.io/zh/latest/

安装:

pip3 install itchat

登入与登出

登入并向文件助手发送一句话,登入时会经过扫码操作,类似于电脑微信登入

1 import itchat
2 #登入并保存登入状态,实现第一次运行时扫码,一定时间内再次运行就不用扫码了,手机微信上将显示:网页微信已登入.....
3 itchat.auto_login(hotReload=True)
4 #发送文本数据到文件助手
5 itchat.send("东小东你好123",toUserName="filehelper")

登出:

itchat.logout() 

注册登入登出的回调方法

1 def ldong():
2     print('微信登入')
3 def edong():
4     print('微信登出')
5 #登入
6 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次发送的效果

监听函数只有在对方发送数据时进入

文本

 1 import itchat2 #自动回复3 @itchat.msg_register(itchat.content.TEXT)4 def text_reply(msg):5     return "东小东回复数据:"+msg["Text"]6 7 #登入8 itchat.auto_login()9 #保持运行
10 itchat.run()

文件下载

 1 import itchat2 #PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT3 # 图片、录制、附件、视频、文本4 from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT5 6 @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])7 def download_files(msg):8     filedpx="./filex/"+msg["FileName"] #得到文件路径,目录需要手动创建9     msg.download(filedpx) #下载
10     return "你发送的文件类型"+msg['Type']+"  保存地址为:filex/"+msg.fileName

针对群聊的自动监测

如果想添加针对群聊的监测,则在监听函数加入isGroupChat=True

监听函数只要有数据发送就会进入,包括自己发送的数据

 1 import itchat2 #只对群消息有效3 @itchat.msg_register(itchat.content.TEXT,isGroupChat=True)4 def text_reply(msg):5     if(msg["Text"]=="11"):6         return "东小东回复数据xx:"+msg["Text"]7 #只对个人用户有效8 @itchat.msg_register(itchat.content.TEXT)9 def text_reply(msg):
10     return "东小东回复数据:"+msg["Text"]
11 #登入
12 itchat.auto_login()
13 #保持运行
14 itchat.run()

@我信息监测

 1 import itchat2 #只对群消息有效3 @itchat.msg_register(itchat.content.TEXT,isGroupChat=True)4 def text_reply(msg):5         #判断是否是@本人6         if msg["Text"].find("@"+usermsgx["NickName"])==0:7             return "@"+msg.actualNickName+" 东你发的信息为:"+msg.text8 9 itchat.auto_login()#登入
10 usermsgx=itchat.search_friends()#得到当前用户的信息
11 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']表示指定用户为触发用户

1 res=itchat.send('文本信息的发送......!', toUserName=msg['FromUserName'])
2 res=itchat.send('@img@%s' % './filex/zcy.gif', toUserName=msg['FromUserName'])
3 res=itchat.send('@fil@%s' % './filex/tt.txt', toUserName=msg['FromUserName'])
4 res=itchat.send('@vid@%s' % './filex/videox.mp4', toUserName=msg['FromUserName'])

指定类型发送2

参数:(地址,用户)

返回值:发送结果,是否发送成功,json数据

注意:文件地址不可为中文

1 bb = itchat.send_msg('文字信息2', toUserName=msg['FromUserName'])
2 bb = itchat.send_image('./filex/zcy.gif', toUserName=msg['FromUserName'])
3 bb = itchat.send_file('./filex/tt.txt', toUserName=msg['FromUserName'])
4 bb = itchat.send_video('./filex/videox.mp4', toUserName=msg['FromUserName'])
5 print("返回值:",bb)

msg.user.send()

使用与itchat.send()相同,但是可以已经确定toUserName=msg['FromUserName'],不可更换

指定用户(toUserName):

文件助手(发送给自己,必备):toUserName="filehelper"

发送者:toUserName=msg['FromUserName']

例子:

通过群名向群里发送内容,该微信群需要在运行代码前进行手动添加到通讯录

 1 import itchat2         3 #登入4 itchat.auto_login()5 chatroomName='傻逼群'#群名6 itchat.get_chatrooms(update=True)7 chatrooms = itchat.search_chatrooms(name=chatroomName)8 if len(chatrooms)==0 :9     print('没有找到群聊:' + chatroomName)
10     exit(0)
11 else:
12     print(chatrooms[0]['UserName'])#输出群聊标识符
13     itchat.send_msg('大家好,这是发送的内容', toUserName=chatrooms[0]['UserName'])#发送消息
14
15 #保持运行
16 itchat.run()

个人的基本信息

获取本人信息

usermsgx=itchat.search_friends()
print(usermsgx)
print(usermsgx["NickName"]) #得到昵称

获取所有朋友信息

friendx=itchat.get_friends()
print(friendx)

条件获取朋友或者自己信息

1 # 获取特定UserName的用户信息
2 itchat.search_friends(userName='@abcdefg1234567')
3 # 获取任何一项等于name键值的用户
4 itchat.search_friends(name='littlecodersh')
5 # 获取分别对应相应键值的用户
6 itchat.search_friends(wechatAccount='littlecodersh')
7 # 三、四项功能可以一同使用
8 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方法改为如下内容:

 1 def format_header_param(name, value):2     if not any(ch in value for ch in '"\\\r\n'):3         result = '%s="%s"' % (name, value)4         try:5             result.encode('ascii')6         except UnicodeEncodeError:7             pass8         else:9             return result
10     if not six.PY3:  # Python 2:
11         value = value.encode('utf-8')
12     value = email.utils.encode_rfc2231(value, 'utf-8')
13     value = '%s="%s"' % (name, value.decode('utf8'))
14     return value

命令行显示二维码

Q: 为什么我在设定了itchat.auto_login()的enableCmdQR为True后还是没有办法在命令行显示二维码?

A: 这是由于没有安装可选的包pillow,可以使用右边的命令安装:pip install pillow

综合:

实现文本信息的关联,及可以实时看到所关联的账号的聊天信息,当发生聊天数据时会主动将聊天数据发送到主账号上

 1 import itchat2 from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT,MAP3 #只对个人用户有效4 @itchat.msg_register([TEXT])5 def text_reply(msg):6     # 查询数据的接收者7    touserx="filehelper"#默认为文件助手发送信息8    if msg["ToUserName"]!="filehelper":#如果非文件助手信息9         touserx=itchat.search_friends(userName=msg["ToUserName"])["NickName"]
10    inuserx = itchat.search_friends(userName=msg["FromUserName"])["NickName"]#查询数据的发送者
11    totouserx=itchat.search_friends(name='东里个咚')[0]["UserName"] #通过昵称查询到username
12    texts=msg.text #得到接收的数据
13    itchat.send_msg("【"+thisuserx+"】\n"+inuserx+"-->"+touserx+" :\n"+texts,toUserName=totouserx) #发送给目标
14
15 #登入
16 itchat.auto_login()
17 thisuserx=itchat.search_friends()["NickName"] #得到当前用户昵称
18 #保持运行
19 itchat.run()

Python微信操控(itchat)相关推荐

  1. Python微信操控itchat定时发送消息

    前言 itchat是一个开源的个人微信接口,利用itchat可以实现例如微信自动回复,定时发送信息.详细可查看itchat项目文档,这里我只介绍一些简单的操作,并用10行代码完成定时发送消息. 安装 ...

  2. python微信库 --- itchat

    python实现微信接口--itchat模块 安装 pip install itchat 登录 itchat.auto_login() # 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短 ...

  3. Python微信操控使用第三方模块itchat

    tchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. 开源地址 https://github.com/littlecodersh/ItChat 文档: https://itch ...

  4. python微信群发itchat

    微信自带的群发助手,每次最多200人,而且还限制多多. 因此自己写一个小程序,实现自动群发. 环境: 1. python 2. itchat库导入 3. 网络.windows or linux 步骤: ...

  5. Python微信库:itchat ——实现微信自动回复

    参考文章  http://www.nulll.me/index.php/archives/72.html https://blog.csdn.net/mdpsdhr/article/details/6 ...

  6. python微信群二维码识别,用python中的itchat框架 筛选出 指定某个微信群中 是否还有你自...

    用python中的itchat框架 筛选出 指定某个微信群中 是否还有你自 用python中的itchat框架 筛选出 指定某个微信群中 是否还有你自己的好友 并列出来 当你新加入一个微信群,比如一个 ...

  7. python微信机器人pc端

    相信很多玩python的都知道,以前有个第三方库可以操作微信,实现自动回复等等功能,其原理是用https进行通信的, 但是现在大部分微信都不能登录网页版了,很多好玩的项目都受到了影响.因此,我来了. ...

  8. Py之itchat:python库之itchat的简介、安装、使用方法之详细攻略

    Py之itchat:python库之itchat的简介.安装.使用方法之详细攻略 目录 itchat的简介 itchat的安装 itchat的使用方法 itchat的简介 iTwitter是一个开放源 ...

  9. python 微信群发消息

    #每天一点点,记录工作中实际可行操作# python 微信群发消息 缺点:登陆之后,不能同时再登陆PC微信客户端和网页微信 # -*- coding: utf-8 -*- # @Time : 2019 ...

最新文章

  1. 企业网络推广浅析外包企业网络推广如何有效布局关键词优化?
  2. 启动tomcat提示Could not create the Java virtual machine.
  3. 【C++标准库】特殊容器
  4. 关于eclipse的实用技巧
  5. oracle 物化视图、中间表的方案
  6. 使用windows server backup备份还原hyper-v 3.0虚拟机
  7. Flutter快速上车之Widget
  8. Linux文件的三种时间属性
  9. 李沐《动手学深度学习》中文版PDF和视频免费领!!!
  10. 安卓实训项目:贪吃蛇V1.0
  11. DNS无法解析IP_通过YouTube的封杀窥视DNS原理
  12. 光环大数据python爬虫
  13. 计算机毕业设计ssm毕业论文管理系统b909r系统+程序+源码+lw+远程部署
  14. 燕山大学教务系统官网计算机学院,燕山大学教务处_燕山大学教务信息网_燕山大学教务管理系统入口...
  15. 使用vue做图片的闪光效果
  16. 大话系列 | 逻辑回归的入门与优化
  17. 什么是JDBC(一)-使用JDBC-详解JDBC系列
  18. 软件产品确认测试包括哪些方面
  19. 找出字符串中第一个不重复的字符
  20. 机器学习入门-kNN算法实现手写数字识别

热门文章

  1. Springboot+vue项目二手交易平台系统
  2. 在html中如何让段落缩进,制作网页中设计段落缩进的方法
  3. 论文摘要(一):Reinforcement Learning on Variable Impedance Controller for High-Precision Robotic Assembly
  4. 赚钱 36 计 - 第六计:老二计
  5. html+显示在线时间,在html页面实时显示系统时间
  6. 浅析电力监控在新型数据中心的设计和应用-Susie 周
  7. 分布式存储之CAP理论
  8. 入门篇|我一个学渣是如何一步步自学数据结构的?
  9. CSS|奔跑的熊大 案例(有图+代码)
  10. 数值积分 (二)| 求积公式的代数精度 + 构造方法