itchat.auto_login(hotReload=True,enableCmdQR=True,loginCallback=after_login,exitCallback=after_logout)
使用这个命令可以通过扫描二维码登陆微信,hotReload=True可以省略,不过这样一来每次程序执行时都要扫一次码,有了hotReload=True会生成一个itchat.pkl的文件保存登录状态,可以让后面的几次登录不需要再扫码。
enableCmdQR=True这个参数可以让二维码在命令行显示,可能会由于二维码过大,命令行显示不完整,所以可以把后面的True改为显示的倍数。可省略
loginCallback=函数名,exitCallback=函数名:这两个参数是在微信登录和退出时分别执行其对应的函数。可省略。
itchat.run()
保持运行状态,不会因为命令执行完毕就结束
itchat.logout()
强制性退出微信。
send
send("Message", toUserName=“UserName”)
第一个参数可以发送文本消息,图片(img),视频(vid)和文件(fil)。文本消息只要直接编写文字内容在引号中就可以了,其他的要保证格式“@type@%s”%‘path’,具体示例如下
import itchat
itchat.auto_login()
itchat.send("HelloWorld!")
ithcat.send("@fil@%s" % '/tmp/test.text')
ithcat.send("@img@%s" % '/tmp/test.png')
ithcat.send("@vid@%s" % '/tmp/test.mkv')
第二个参数是用来确定发送的对象,如果省去或者是None就是发送给自己,如果是filehelper就是发送给文件助手。
send_msg
除了上面这种方法,还有另一种方法可以完成同样的效果,下面我们来看一下。
send_msg('Text Message', toUserName=None)
发送文字信息的方法和上面那种几乎没什么差异,不过一开始就确定了发送到信息类型。返回值为True或者False返回值为True或者False.
import itchat
itchat.auto_login()
itchat.send_msg("helloworld.)
send_file
send_file(“fileDir”,
toUserName=None)
fileDir是文件路径, 当文件不存在时, 将打印无此文件的提醒,返回值为True或者False。
import itchat
itchat.auto_login()
itchat.send_file("/tmp/test.txt")
send_image
send_image(“fileDir”,toUserName=None)
参数同上
import itchat
itchat.auto_login()itchat.send_img("/tmp/test.jpg")
send_video
send_video(fileDir,toUserName=None)
参数同上
import itchat
itchat.auto_login()
itchat.send_video("/tmp/test.mp4")
除了主动发送信息外,还可以对信息进行监控,支持对多种类型的信息进行监控。
另外,有多个注册信息监听,后注册的信息优先级高于先注册信息,带参数信息高于不带参数信息。
信息类型 | 解释 |
---|---|
itchat.content.TEXT | 文本内容 |
itchat.content.MAP | 位置文本 |
itchat.content.Card | 名片 |
itchat.content.Note | 通知文本 |
itchat.content.Sharing | 分享名称 |
itchat.content.RECORDING | 录音 |
itchat.PICTURE | 图片/表情 |
itchat.content.VOICE | 录音 |
itchat.content.ATTACHMENT | 附件 |
itchat.content.VIDEO | 短视频 |
itchat.content.FRIENDS | 好友邀请 |
itchat.content.SYSTEM | 系统信息 |
接收消息的方法一般用来作为一个函数的装饰器,当接收到消息以后执行函数中的命令进行回应。
import itchat
@itchat.msg_register(itchat.content.TEXT)
def reply_msg(msg):
if msg['Content'] == u'你好':
itchat.send_msg(msg['User']['NickName'] + "你好啊!", msg['FromUserName'])
if __name__ == '__main__':
itchat.auto_login()
itchat.run()
search_friends
search_friends()
括号里可以填属性字典相关名称来获取指定好友的详细信息,如:名称(name),微信号(wechatAcount),昵称和微信号的查找可以同时使用。一般直接填写名称或者备注名,会优先查找NickName和RemarkName,可以直接查找到,这也是比较方便的方法
import itchat
itchat.auto_login(hotReload=True)
users = itchat.search_friends('大哥')
print(users)
userName=users[0]['UserName']
print(userName)
itchat.send_msg('你好啊',toUserName=userName)
监听群聊信息
@itchat.msg_register(itchat.content.TEXT,isGroupChat=True)
def reply_msg(msg):
print("收到一条群信息:", msg['ActualNickName'], msg['Content'])
利用isGroupChat=True 来判定是否是群消息,ActualNickName是发送者昵称,Content是发送的文本信息内容。另外,群聊除了通过群名搜索外还可以通过username来查找,或者两者搭配使用; 在msg里有一个isAt字段,可用于判断是否被人@了。
查找群
def after_login():
print(itchat.get_chatrooms()) #获得所有群信息
time.sleep(10)
chat_rooms = itchat.search_chatrooms(name='群名')#根据群名查找群
if len(chat_rooms) > 0:
itchat.send_msg('测试', chat_rooms[0]['UserName'])
公众号相关
大致上和群聊差不多,搜索公众号方法search_mps,监听公众号信息添加isMpChat=True元素
import itchat
@itchat.msg_register(itchat.content.TEXT,isMpChat=True)
def reply_msg(msg):
print("收到一条公众号信息:",msg['User']['NickName'], msg['Content'])
def login_after():
mps = itchat.search_mps(name='公众号名')
if len(mps) > 0:
print(mps)
itchat.send_msg('人生苦短',toUserName=mps[0]['UserName'])
if __name__ == '__main__':
itchat.auto_login(loginCallback=login_after)
itchat.run()