0%

Python的itchat接口

关于itchat的学习体验

pip模块下载

在控制台窗口用pip install下载,并用

1
pip list

查看,已载入。在python-Shell下始终无法导入。后来改用命令pip3 install安装成功。pip3 list已载入,再导入,成功!

itchat初体验

  1. 获取网页登陆的二维码
    1
    itchat.auto_login( )
  2. 发信息
    1
    itchat.send
    1
    itchat.search_friends(name = u"备注名称或昵称")  #获取对方的全部信息(列表)
    列表中只有一个元素,是一个字典,引索”UserName”得到微信号,是一长串十六进制的数字
    1
    itchat.send(msg = ' ',toUserName = user)
    下图是失败与成功的返回信息。

2018/1/19/13:26

今天开始系统了解itchat。这应该是官方的文档:
itchat官方文档

-入门实例

itchat.auto_login( ) 登陆账号
itchat.logout( ) 注销账号
itchat.run( ) 运行
user = itchat.search_friends(name = “昵称或备注”) 获取对方账户信息
itchat.send(msg = “文本信息”, toUserName = “对方微信号”)
user[0].send(msg = “文本信息”)

PS:

微信移动端只要退出登录(断网),其网页版PC版e也会被强制登出,故需要保持移动端登录状态

有一些微信账户天生不能给自己发信息,可以改用filehelper

用对方发给自己的文本消息回复

1
2
3
4
5
6
import itchat
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
return msg.text
itchat.auto_login()
itchat.run()

itchat.search_friend 方法搜索用户

  • 仅获取自己的用户信息:
    1
    itchat.search_friends()
  • 获取特定UserName的用户信息:
    1
    itchat.search_friends(userName='')
  • 获取备注、微信号、昵称中的任何一项等于name键值的用户:
    1
    itchat.search_friends(name='')
  • 获取备注、微信号、昵称分别等于相应键值的用户:
    1
    itchat.search_friends(wechatAccount='')
  • 前两项功能可以一同使用:
    1
    itchat.search_friends(name=' ', wechatAccount=' ')

(正式开始预警+分割线。。。)

-登陆配置

itchat提供了登陆状态暂存,关闭程序后一定时间内不需要扫码即可登录。由于目前微信网页版提供上一次登录的微信号不扫码直接手机确认登陆,所以如果开启登陆状态暂存将会自动使用这一功能。该方法会生成一个静态文件itchat.pkl,用于存储登陆的状态。

1
itchat.auto_login(hotReload = True)

-Send方法回复
返回Bool值。对象为空则发给自己。
1
send(msg='Text Message', toUserName=None)

请确保该程序目录下存在:gz.gif 以及 xlsx.xlsx
1
2
3
itchat.send('@img@%s' % 'gz.gif')                  #识别为发送图片
itchat.send('@fil@%s' % 'xlsx.xlsx') #识别为发送文件
itchat.send('@vid@%s' % 'demo.mp4') #识别为发送视频

其他:
1
2
3
4
send_msg(msg='Text Message', toUserName=None)
send_file(fileDir, toUserName=None)
send_img(fileDir, toUserName=None)
send_video(fileDir, toUserName=None) #需保证发送视频为一实质的mp4文件

注册消息方法

itchat将根据接收到的消息类型寻找对应的已经注册的方法。如果一个消息类型没有对应的注册方法,该消息将会被舍弃。在运行过程当中也可以动态注册方法,注册方式与结果不变。

不带具体对象注册,将注册为普通消息的回复方法
1
2
def simple_reply(msg):
return 'I received: %s' % msg['Text']

带对象参数注册,对应消息对象将调用该方法

1
2
3
@itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=True)
def text_reply(msg):
msg.user.send('%s: %s' % (msg.type, msg.text))

注册消息的优先级

优先级分别为:后注册消息先于先注册消息,带参数消息先于不带参数消息

1
2
3
from itchat.content import *
@itchat.msg_register
@itchat.msg_register(TEXT)

看了这个例子,我也终于懂了itchat处理信息的机制。@msg_register方法注册信息类型,其后定义函数来表明处理该类信息的方法。
尝试打印
1
2
3
4
search_friends( )
list = itchat.search_friends()
for i in list:
print(i)

得到一个字典,保存自己的用户信息

MemberList UserName City DisplayName PYQuanPin RemarkPYInitial Province KeyWord RemarkName PYInitial EncryChatRoomId Alias Signature NickName RemarkPYQuanPin HeadImgUrl UniFriend Sex AppAccountFlag VerifyFlag EncryChatRoomId HideInputBarFlag AttrStatus SnsFlag MemberCount OwnerUin ContactFlag Uin StarFriend Statues WebWxPluginSwitch HeadImgFlag

写了一段代码实现一个简单的微信自动回复。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import itchat
from itchat.content import *
count = 0
@itchat.msg_register(PICTURE, RECORDING)
def all_reply(msg):
global count
print("收到一条信息。。(第%d条)" % count)
return "我还看不懂图片语音,发文字谢谢。。"
@itchat.msg_register(TEXT)
def text_reply(msg):
global count
count += 1
print("收到一条信息。。(第%d条)" % count)
if count == 1:
return '嗯?'
elif count == 2:
return "说什么大点声。。"
elif count == 3:
return "好吧我是机器人。。"
elif count >= 4:
return "我看到了马上回复你哈。。"
itchat.auto_login(hotReload = True)
itchat.run()

但是前边那个注册信息不带参数却能处理所有信息的语句我还是无法实现。

关于动态注册,并不能完全看懂,文档中有一个例子。

微信消息内容

这一页都挺重要的,特别贴出来。消息内容 - itchat

命令行二维码显示

通过以下命令可以在登陆的时候使用命令行显示二维码:

1
itchat.auto_login(enableCmdQR=True)

部分系统可能字幅宽度有出入,可以通过将,故赋enableCmdQR赋值为特定的倍数进行调整:
1
2
3
4
# 如部分的linux系统,块字符的宽度为一个字符(正常应为两字符)值为2
itchat.auto_login(enableCmdQR=2)
# 默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值:
itchat.auto_login(enableCmdQR=-1)


完结 撒花 ฅ>ω<*ฅ