Python微信操控itchat的方法


Posted in Python onMay 31, 2019

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"]=="11"):
   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

综合:

Python微信操控itchat的方法

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

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 相关文章推荐
Python中列表的一些基本操作知识汇总
May 20 Python
使用Python3 编写简单信用卡管理程序
Dec 21 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
pandas的qcut()方法详解
Jul 06 Python
python 实现将list转成字符串,中间用空格隔开
Dec 25 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
解决python脚本中error: unrecognized arguments: True错误
Apr 20 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
python基于SMTP协议发送邮件
May 31 #Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
May 30 #Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 #Python
基于Python打造账号共享浏览器功能
May 30 #Python
Python实现带下标索引的遍历操作示例
May 30 #Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 #Python
python2和python3在处理字符串上的区别详解
May 29 #Python
You might like
php array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
python实现人民币大写转换
2018/06/20 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
如何通过python画loss曲线的方法
2019/06/26 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
python dict如何定义
2020/09/02 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
计算机科学与技术专业求职信
2014/09/03 职场文书
房屋转让协议书
2014/10/18 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书