itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。
ps:不知道为什么,我自从频繁用这个借口登录调试代码,我的微信卡了一比,不知道什么原因。。。。。心累
可以通过本命令安装itchat:
pip install itchat
首先要安装好这个第三方包,再使用import itchat导入。
itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短时间的登录,并不会保留登录的状态,也就是下次登录时还是需要扫描二维码,如果加上hotReload==True(Flase 每次都要扫码登录),那么就会保留登录的状态,至少在后面的几次登录过程中不会再次扫描二维码,该参数生成一个静态文件itchat.pkl用于存储登录状态
Error:You can’t get access to internet or wechat domain, so exit.
certifi模块版本过高,回退低版本尝试
将certifi 回退 无效(卸载:pip3 uninstall -y certifi ,安装pip install certifi==2015.04.28 )
代理问题导致微信无法登陆
将浏览器代理关闭,无效
将charles软件关闭,好用了!~~~ 再次将certifi更新最新版
出现二维码,但无法扫描,好像少了一半?
是块字符在一些系统上显示的宽度不对,把enableCmdQR数据由True调整为2,成功
如果没有显示二维码pip install pillow
这里主要使用的是回调函数函数的方法,登录完成后的方法需要赋值在 loginCallback 中退出后的方法,需要赋值在 exitCallback 中.若不设置 loginCallback 的值, 将会自动删除二维码图片并清空命令行显示.
关于回调函数请参考知乎的这编文章:https://www.zhihu.com/question/19801131
import itchat, time
def lc():
print("Finash Login!")
def ec():
print("exit")
itchat.auto_login(loginCallback=lc, exitCallback=ec)
time.sleep()
itchat.logout() #强制退出登录
send(msg=“Text Message”, toUserName=None)
参数:
msg : 文本消息内容
@fil@path_to_file : 发送文件
@img@path_to_img : 发送图片
@vid@path_to_video : 发送视频
toUserName : 发送对象, 如果留空, 将发送给自己.
返回值
True or False
实例代码
import itchat
itchat.auto_login()
itchat.send("Hello World!")
ithcat.send("@fil@%s" % '/tmp/test.text')
ithcat.send("@img@%s" % '/tmp/test.png')
ithcat.send("@vid@%s" % '/tmp/test.mkv')
send_msg(msg=‘Text Message’, toUserName=None),其中的的msg是要发送的文本,toUserName是发送对象, 如果留空, 将发送给自己,返回值为True或者False
实例代码
import itchat
itchat.auto_login()
itchat.send_msg("hello world.")
send_file(fileDir, toUserName=None) fileDir是文件路径, 当文件不存在时, 将打印无此文件的提醒,返回值为True或者False
实例代码
import itchat
itchat.auto_login()
itchat.send_file("/tmp/test.txt")
send_image(fileDir, toUserName=None) 参数同上
实例代码
import itchat
itchat.auto_login()
itchat.send_img("/tmp/test.txt")
send_video(fileDir, toUserName=None) 参数同上
实例代码
import itchat
itchat.auto_login()
itchat.send_video("/tmp/test.txt")
向注册方法传入的msg包含微信返回的字典的所有内容。
本api增加Text、Type(也就是参数)键值,方便操作。
itchat.content中包含所有的消息类型参数,内容如下表所示:
附件的下载与发送
itchat 的附件下载方法存储在 msg 的 Text 键中. 发送的文件名(图片给出的默认文件名), 都存储在 msg 的 FileName 键中. 下载方法, 接受一个可用的位置参数(包括文件名), 并将文件响应的存储. 注意:下载的文件存储在指定的文件中,直接将路径与FileName连接即可
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
#msg.download(msg['FileName']) #这个同样是下载文件的方式
msg['Text'](msg['FileName']) #下载文件
#将下载的文件发送给发送者
itchat.send('@%s@%s' % ('img' if msg['Type'] == 'Picture' else 'fil', msg["FileName"]), msg["FromUserName"])
增加了三个键值,如下:
isAt 判断是否 @ 本号
ActualNickName : 实际 NickName(昵称)
Content : 实际 Content
测试程序
import itcaht
from itchat.content import TEXT
@itchat.msg_register(TEXT, isGroupChat=True)
def text_reply(msg):
if(msg.isAt): #判断是否有人@自己
#如果有人@自己,就发一个消息告诉对方我已经收到了信息
itchat.send_msg("我已经收到了来自{0}的消息,实际内容为{1}".format(msg['ActualNickName'],msg['Text']),toUserName=msg['FromUserName'])
itchat.auto_login()
itchat.run()
总的来说就是后面注册同种类型的消息会覆盖之前注册的消息,详情见文档https://itchat.readthedocs.io/zh/latest/
在使用个人微信的过程当中主要有三种账号需要获取,分别为: 好友 公众号 * 群聊
itchat为这三种账号都提供了整体获取方法与搜索方法。
而群聊多出获取用户列表方法以及创建群聊、增加、删除用户的方法。
这里我们分这三种分别介绍如何使用。
好友
好友的获取方法为 get_friends ,将会返回完整的好友列表。 其中每个好友为一个字典 列表的第一项为本人的账号信息 * 传入update键为True将可以更新好友列表并返回
好友的搜索方法为 search_friends ,有四种搜索方式: 1. 仅获取自己的用户信息 2. 获取特定 UserName 的用户信息 3. 获取备注、微信号、昵称中的任何一项等于 name 键值的用户 4. 获取备注、微信号、昵称分别等于相应键值的用户
其中三、四项可以一同使用,下面是示例程序:
itchat.search_friends()
itchat.search_friends(userName=’@abcdefg1234567’)
itchat.search_friends(name=‘littlecodersh’)
itchat.search_friends(wechatAccount=‘littlecodersh’)
itchat.search_friends(name=‘LittleCoder机器人’, wechatAccount=‘littlecodersh’)
公众号
公众号的获取方法为 get_mps ,将会返回完整的公众号列表。 其中每个公众号为一个字典 传入update键为True将可以更新公众号列表并返回
公众号的搜索方法为 search_mps ,有两种搜索方法: 1. 获取特定 UserName 的公众号 2. 获取名字中含有特定字符的公众号
如果两项都做了特定,将会仅返回特定 UserName 的公众号,下面是示例程序:
itchat.search_mps(userName='@abcdefg1234567')
itcaht.search_mps(name='LittleCoder')
itchat.search_mps(userName='@abcdefg1234567', name='LittleCoder')
群聊的获取方法为 get_chatrooms ,将会返回完整的群聊列表。 其中每个群聊为一个字典 传入update键为True将可以更新群聊列表并返回
群聊的搜索方法为 search_chatrooms ,有两种搜索方法: 1. 获取特定UserName的群聊 2. 获取名字中含有特定字符的群聊
如果两项都做了特定,将会仅返回特定UserName的群聊,下面是示例程序:
itchat.search_chatrooms(userName='@abcdefg1234567')
itcaht.search_chatrooms(name='LittleCoder')
itchat.search_chatrooms(userName='@abcdefg1234567', name='LittleCoder')
群聊用户列表的获取方法为 update_chatroom 。 群聊在首次获取中不会获取群聊的用户列表,所以需要调用该命令才能获取群聊的成员 该方法需要传入群聊的UserName,返回特定群聊的用户列表
memberList = itchat.update_chatroom('@abcdefg1234567')
创建群聊、增加、删除群聊用户的方法如下所示: 由于之前通过群聊检测是否被好友拉黑的程序,目前这三个方法都被严格限制了使用频率 删除群聊需要本账号为群管理员,否则会失败
memberList = itchat.get_friends()[1:]
chatroomUserName = itchat.create_chatroom(memberList, 'test chatroom')
itchat.delete_member_from_chatroom(chatroomUserName, memberList[0])
itchat.add_member_into_chatroom(chatroomUserName, memberList[0])
官方文档:https://itchat.readthedocs.io/zh/latest/