itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。
开源地址
https://github.com/littlecodersh/itchat
文档:
https://itchat.readthedocs.io/zh/latest/
安装:
pip3 install itchat
登入与登出
登入并向文件助手发送一句话,登入时会经过扫码操作,类似于电脑微信登入
1
2
3
4
5
|
import itchat
#登入并保存登入状态,实现第一次运行时扫码,一定时间内再次运行就不用扫码了,手机微信上将显示:网页微信已登入.....
itchat.auto_login(hotreload = true)
#发送文本数据到文件助手
itchat.send( "东小东你好123" ,tousername = "filehelper" )
|
登出:
itchat.logout()
注册登入登出的回调方法
1
2
3
4
5
6
|
def ldong():
print ( '微信登入' )
def edong():
print ( '微信登出' )
#登入
itchat.auto_login(hotreload = true,logincallback = ldong, exitcallback = edong)
|
命令行二维码
通过以下命令可以在登陆的时候使用命令行显示二维码:
itchat.auto_login(enablecmdqr=true)
部分系统可能字幅宽度有出入,可以通过将enablecmdqr赋值为特定的倍数进行调整:
1
2
|
#如部分的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)方法查看消息里的所有数据,然后进行提取
1
2
3
|
@itchat .msg_register(itchat.content.text)
def text_reply(msg):
print (msg)
|
消息捕获
针对朋友的消息捕获
登入时不适用于hotreload=true,因为多次运行会多次注册自动回复,比如在没有登出的情况下运行3次程序,就会出现1次接受3次发送的效果
监听函数只有在对方发送数据时进入
文本
1
2
3
4
5
6
7
8
9
|
import itchat
#自动回复
@itchat .msg_register(itchat.content.text)
def text_reply(msg):
return "东小东回复数据:" + msg[ "text" ]
#登入
itchat.auto_login()
#保持运行
itchat.run()
|
文件下载
1
2
3
4
5
6
7
8
9
|
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
监听函数只要有数据发送就会进入,包括自己发送的数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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()
|
@我信息监测
1
2
3
4
5
6
7
8
9
10
|
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() #保持运行
|
针对所有信息来源信息监听
朋友、群聊、公众号
1
2
3
4
5
|
@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
2
3
4
|
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数据
注意:文件地址不可为中文
1
2
3
4
5
6
|
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']
例子:
通过群名向群里发送内容,该微信群需要在运行代码前进行手动添加到通讯录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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()
|
个人的基本信息
获取本人信息
1
2
3
|
usermsgx = itchat.search_friends()
print (usermsgx)
print (usermsgx[ "nickname" ]) #得到昵称
|
获取所有朋友信息
1
2
|
friendx = itchat.get_friends()
print (friendx)
|
条件获取朋友或者自己信息
1
2
3
4
5
6
7
8
|
# 获取特定username的用户信息
itchat.search_friends(username = '@abcdefg1234567' )
# 获取任何一项等于name键值的用户
itchat.search_friends(name = 'littlecodersh' )
# 获取分别对应相应键值的用户
itchat.search_friends(wechataccount = 'littlecodersh' )
# 三、四项功能可以一同使用
itchat.search_friends(name = 'littlecoder机器人' , wechataccount = 'littlecodersh' )
|
得到用户序号
1
2
3
4
|
@itchat .msg_register([text, map ])
def text_reply(msg):
print (msg)
print (msg[ "user" ][ "uin" ])
|
更新用户数据,通过 username ,或者 username 列表
1
|
memberlist = itchat.update_friend( '@abcdefg1234567' )
|
注意:
中文文件名文件上传
q: 为什么中文的文件没有办法上传?
a: 这是因为使用requests包会自动将中文文件名编码为服务器端无法识别的格式,所以需要修改requests包或者使用别的方法上传文件。
最简单的方法即将requests包的packages/urlib3中的fields.py中的format_header_param方法改为如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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
综合:
实现文本信息的关联,及可以实时看到所关联的账号的聊天信息,当发生聊天数据时会主动将聊天数据发送到主账号上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!原文链接:https://www.cnblogs.com/dongxiaodong/p/10490563.html