1.在树莓派中输入sudo pip3 install itchat 安装itchat。
2.登录微信 itchat.auto_login()
这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短时间的登录,并不会保留登录的状态,也就是下次登录时还是需要扫描二维码,如果加上hotReload==True
,那么就会保留登录的状态,至少在后面的几次登录过程中不会再次扫描二维码,该参数生成一个静态文件itchat.pkl
用于存储登录状态
3.itchat.auto_login(enableCmdQR=True) 此方法为开启命令行的二维码登陆方法。
不过在这之前一定要安装pillow,可以输入
pip3 install pillow 进行安装。
通过以下命令可以在登陆的时候使用命令行显示二维码:
itchat.auto_login(enableCmdQR=True)
部分系统可能字幅宽度有出入,可以通过将enableCmdQR赋值为特定的倍数进行调整:
# 如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为2 itchat.auto_login(enableCmdQR=2)
默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值:
itchat.auto_login(enableCmdQR=-1)
有了itchat,如果你想要给文件传输助手发一条信息,只需要这样:
import itchat itchat.auto_login() itchat.send('Hello, filehelper', toUserName='filehelper')
输入 python3 test.py ,运行后,扫描二维码登陆,微信就会收到文件助手的消息。
通过如下代码,微信已经可以就日常的各种信息进行获取与回复。
import itchat, time from itchat.content import * @itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING]) def text_reply(msg): msg.user.send('%s: %s' % (msg.type, msg.text)) @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): msg.download(msg.fileName) typeSymbol = { PICTURE: 'img', VIDEO: 'vid', }.get(msg.type, 'fil') return '@%s@%s' % (typeSymbol, msg.fileName) @itchat.msg_register(FRIENDS) def add_friend(msg): msg.user.verify() msg.user.send('Nice to meet you!') @itchat.msg_register(TEXT, isGroupChat=True) def text_reply(msg): if msg.isAt: msg.user.send(u'@%s\u2005I received: %s' % ( msg.actualNickName, msg.text)) itchat.auto_login(True) itchat.run(True)
通过如下命令登陆,即使程序关闭,一定时间内重新开启也可以不用重新扫码。
itchat.auto_login(hotReload=True)
使用search_friends
方法可以搜索用户,有四种搜索方式:
UserName
的用户信息name
键值的用户其中三、四项可以一同使用,下面是示例程序:
# 获取自己的用户信息,返回自己的属性字典 itchat.search_friends() # 获取特定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的Text键中。
发送的文件的文件名(图片给出的默认文件名)都存储在msg的FileName键中。
下载方法接受一个可用的位置参数(包括文件名),并将文件相应的存储。
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): msg.download(msg.fileName) itchat.send('@%s@%s' % ( 'img' if msg['Type'] == 'Picture' else 'fil', msg['FileName']), msg['FromUserName']) return '%s received' % msg['Type']
如果你不需要下载到本地,仅想要读取二进制串进行进一步处理可以不传入参数,方法将会返回图片的二进制串。
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): with open(msg.fileName, 'wb') as f: f.write(msg.download())
使用如下命令可以完成多开的操作:
import itchat newInstance = itchat.new_instance() newInstance.auto_login(hotReload=True, statusStorageDir='newInstance.pkl') @newInstance.msg_register(itchat.content.TEXT) def reply(msg): return msg.text newInstance.run()
登陆完成后的方法需要赋值在loginCallback
中。
而退出后的方法需要赋值在exitCallback
中。
import time import itchat def lc(): print('finish login') def ec(): print('exit') itchat.auto_login(loginCallback=lc, exitCallback=ec) time.sleep(3) itchat.logout()
若不设置loginCallback的值,则将会自动删除二维码图片并清空命令行显示。
Q: 如何通过这个包将自己的微信号变为控制器?
A: 有两种方式:发送、接受自己UserName的消息;发送接收文件传输助手(filehelper)的消息
Q: 为什么我发送信息的时候部分信息没有成功发出来?
A: 有些账号是天生无法给自己的账号发送信息的,建议使用filehelper
代替。