Python微信操控(itchat)

前端之家收集整理的这篇文章主要介绍了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() 

注册登入登出的回调方法

def ldong():
2     print('微信登入')
3  edong():
4     微信登出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)
 text_reply(msg):
    print(msg)

消息捕获

针对朋友的消息捕获

登入时不适用于hotReload=True,因为多次运行会多次注册自动回复,比如在没有登出的情况下运行3次程序,就会出现1次接受3次发送的效果

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

文本

 1  2 自动回复
 3  4  text_reply(msg):
 5     return 东小东回复数据:"+msg[Text"]
 6 
 7  8 itchat.auto_login()
 9 保持运行
10 itchat.run()

文件下载

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

针对群聊的自动监测

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

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

只对群消息有效
 3 @itchat.msg_register(itchat.content.TEXT,isGroupChat=if(msg["]==11):
 6         东小东回复数据xx:只对个人用户有效
11 12 13 14 itchat.run()

@我信息监测

 5         判断是否是@本人
if msg["].find(@"+usermsgx[NickName"])==0:
 7             "+msg.actualNickName+ 东你发的信息为:"+msg.text
 8 
 9 itchat.auto_login()10 usermsgx=itchat.search_friends()得到当前用户的信息
11 itchat.run()保持运行

针对所有信息来源信息监听

朋友、群聊、公众号

@itchat.msg_register(TEXT,isFriendChat=True,isGroupChat=True,isMpChat= simple_reply(msg):
    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.gif3 res=itchat.send(@fil@%s./filex/tt.txt4 res=itchat.send(@vid@%s./filex/videox.mp4'])

指定类型发送2

参数:(地址,用户

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

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

1 bb = itchat.send_msg(文字信息22 bb = itchat.send_image(3 bb = itchat.send_file(4 bb = itchat.send_video(返回值:用户(toUserName):

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

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

例子:

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

 2         
 5 chatroomName=傻逼群群名
 6 itchat.get_chatrooms(update= 7 chatrooms = itchat.search_chatrooms(name=chatroomName)
if len(chatrooms)==0 :
 9     没有找到群聊:' + chatroomName)
10     exit(0)
else:
12     print(chatrooms[0][UserName'])输出群聊标识符
13     itchat.send_msg(大家好,这是发送的内容发送消息
14 
15 16 itchat.run()

个人的基本信息

获取本人信息

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

获取所有朋友信息

friendx=itchat.get_friends()
print(friendx)

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

 获取特定UserName的用户信息
2 itchat.search_friends(userName=@abcdefg1234567 获取任何一项等于name键值的用户
4 itchat.search_friends(name=littlecodersh 获取分别对应相应键值的用户
6 itchat.search_friends(wechatAccount=7  三、四项功能可以一同使用
8 itchat.search_friends(name=LittleCoder机器人')

得到用户序号

@itchat.msg_register([TEXT,MAP])
(msg)
    print(msg[User"][Uin"])

新用户数据,通过UserName,或者UserName列表

memberList = itchat.update_friend(')

注意:

中文文件文件上传

Q: 为什么中文文件没有办法上传? 

A: 这是因为使用requests包会自动中文文件名编码为服务器端无法识别的格式,所以需要修改requests包或者使用别的方法上传文件

最简单的方法即将requests包的packages/urlib3中的fields.py中的format_header_param方法改为如下内容

 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(asciiexcept UnicodeEncodeError:
pass
 8          9             return result
not six.PY3:   Python 2:
11         value = value.encode(utf-812     value = email.utils.encode_rfc2231(value,13     value = ' % (name,value.decode(utf8))
14     return value

命令行显示二维码

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

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

综合:

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

@itchat.msg_register([TEXT])
 5  6      查询数据的接收者
 7    touserx=默认为文件助手发送信息
 8    ToUserName"]!=":如果非文件助手信息
 9         touserx=itchat.search_friends(userName=msg["])[10    inuserx = itchat.search_friends(userName=msg["]查询数据的发送者
11    totouserx=itchat.search_friends(name=东里个咚')[0][通过昵称查询到username
12    texts=msg.text 得到接收的数据
13    itchat.send_msg("+thisuserx+】\n"+inuserx+-->"+touserx+ :\n"+texts,toUserName=totouserx) 发送给目标
16 17 thisuserx=itchat.search_friends()[得到当前用户昵称
18 19 itchat.run()

 

猜你在找的Python相关文章