微信聊天女神撤回了啥,Python来搞定!

2020-05-26  本文已影响0人  小刘说编程

微信最温柔的功能是:对方正在输入...

最残忍的提示是:消息已发出,但被对方拒收了...

最冷漠的开关是:朋友圈三天可见...

但要说微信最让人不爽的发明,消息撤回绝对能上榜

那么到底有没有什么办法能够知道对方撤回了什么呢?表急,Python带你搞定。

一、模块介绍

用Python实现微信的撤回消息查看功能。

Python有一个超级强大的库:itchat。

翻译过来是这样的:itchat是一个针对个人帐户的开放式微信api项目,它使你可以通过命令行访问您的个人微信帐户。

那么既然是针对微信的开发,我们自然离不开这个模块的协助啦。所以呢,先下载一下这个模块:

pip install itchat

当然,也可以直接在Pycharm中导入,Pycharm会提示你下载。

二、模块初体验

可能有的同学没有接触过这个模块。所以呢,先简单的带你入门。

①如何登陆微信

要操作微信,那么第一个问题就是如何登录微信呢?登录微信还是很简单的,直接上代码:

import itchat

itchat.login()

不要怀疑,一句代码就可以完成登录,运行一下就会弹出一个二维码,扫描之后在手机上授权登录,控制台上就会提示是否登录成功了。

Login successfully as Y

控制台显示这样就说明成功登陆了。

这里有一个注意事项,多次操作你就会发现每次运行程序都要扫描二维码登录,这样是在太麻烦了,能不能扫描一次之后自动登陆呢?当然没问题啦。看下面代码:

import itchat

itchat.auto_login(hotReload=True)

或者通过函数名也能知道该方法可以实现自动登录,运行程序,扫码登录之后会在项目路径下创建一个itchat.pkl文件,此文件用于存储登录状态,所以千万千万不要动它,如果说你想换一个微信登录,那就需要先把这个文件删除。因为这个文件记录的是上一个微信的状态,只有删除之后才能登录。

注意:这种方式只能保证你在短时间内无需重复登录,时间一长,还是要重新扫码才能登录的。

说到这里,有些人可能会发现自己的微信登录不上。据我了解,一些新注册的用户或者是长期不使用的用户不能登陆网页版微信的,所以会导致登录不上。如果确实登录不上,那也没办法了,下面的内容也就没意义了。

②获取好友列表

成功登陆之后,我们来用itchat模块提供的一些api,获取一下好友列表。

import itchat

itchat.auto_login(hotReload=True)

friends = itchat.get_friends() # 好友列表

print(friends)

使用get_friends()函数就可以获取到好友列表里面的所有好友的信息,其中包含昵称、备注、地址、个性签名、性别等。

我随便找了好友复制一下信息,由于隐私问题,有很多信息我用"*"代替了,我们还是主要分析一下内容。

比如最开始的UserName,这是微信用户的唯一标识,好比我们的身份证号码,你的每个微信好友都有这样一个标识,每个好友之间也都是不一样的;接下来是NickName,这个是好友的微信昵称;HeadImgUrl是好友的微信头像地址;RemarkName是你对好友的备注名等很多;小编不一一说明啦,感兴趣的话可以自己去百度一下哦。

③如何发送消息给好友

那么怎么能发送一条消息给指定的好友呢?也是比较容易实现:

import itchat

itchat.auto_login(hotReload=True)

itchat.send('HelloWorld',toUserName='@f9e42aafa1175b38b60a0be4d651a34c77f2528d9b7784e7aaf415090eca8fa6')

这时候的UserName就派上大用场了,也就是每个微信好友的唯一标识,我们就可以给某个标识对应的好友发送了一条消息,我们可以这样改进一下程序:

import itchat

itchat.auto_login(hotReload=True)

friends = itchat.get_friends()

nickName = '诚信通授权渠道商-老曾'

for i in friends:if '诚信通授权渠道商-老曾' == i['NickName']:

itchat.send('Hello World', toUserName=i['UserName'])break

像上面这样,就能指定发送给任意的好友了,通过好友的昵称在列表里面进行搜索。找到之后,就能获取到这个好友的UserName,然后再发送消息给此好友;或者也可以通过对好友的备注名(RemarkName)进行查找,大家都可以自己挨个试一下。

三、如何获取好友发送的消息

以上是我们的准备工作,接下来就可以正式着手操作啦。上面的这些准备工作,大家必须要掌握。如果不清楚的话,下面的代码你会很懵的。

首先,我们来看一下如何能够获取到好友发送的消息。

import itchat

itchat.auto_login(hotReload=True)

@itchat.msg_register(itchat.content.TEXT)

def resever_info(msg):print(msg)

itchat.run() #保持运行

itchat模块提供了@itchat.msg_register装饰器来监听消息,例如在这里我们自定义了一个resever_info()函数,并用装饰器对消息进行监听,装饰器中传入了itchat.content.TEXT类型,这样监听到的就是消息文本,监听到输入内容之后,装饰器接下来会将文本消息传入resever_info()参数中。所以,msg就是监听到的消息内容。

对于@itchat.msg_register装饰器,它不仅仅能够监听文本,他还能够监听语音、图片、视频等很多形式的消息。当然,为了便捷,在这里我们导入itchat模块下的content模块中的所有内容,因为这些消息类型都是在此模块下声明的。

还有需要大家注意的地方就是最后记得调用itchat的run()函数,需要保持程序运行,否则程序就结束了。

接下来我们可以简单测试一下,我让我的好友发了一条消息给我,控制台就自动输出了以下内容:

内容相当多,我们只挑重要的看一下。

例如:

FromUserName,这是发送者的标识;

ToUserName,这是接收者的标识;

Content,这当然就是文本内容了;

CreateTime,这是发送时间;

注意最后输出的两个值:Type,这个是消息类型,这里是文本类型的Text,Text也是文本内容,所以如果想取出好友发送的消息内容的话,用Content和Text这两种都行。这样看来,取出内容就很容易了:

这里格式化日期用的是time模块。

为了测试便捷,我就发了一条消息给好友,自己发的消息也是会被监听到的,我们一起看一下运行结果:

发送人:AS

消息类型:Text

发送时间:2020-04-15 15:13:12

消息内容:程序猿

再来试一下语音和图片能不能获取到?我们需要回到刚刚的代码:

运行之后,发送语音和图片,可是无论怎么发,控制台都没有任何反应。不要疑惑,因为我们并没有对语音和图片进行监听呀,所以需要改动一下代码:

这次我们再运行一下,发送一张图片和一段语音内容之后,控制台输出了两段内容,但是确实太长了,就不展示给大家啦。

这是一段地址,通过这个我们可以把图片和语音保存下来。

四、如保存好友发送的图片和语音

下面我们就要对好友发送的图片和语音保存下来。

运行之后,就会发送一张图片和一条语音,相应的会在指定目录下生成两个文件:

五、如何监听好友撤回了

到目前来看,其实我们已经完成了消息监听,只需要稍加修改就可以了。不过呢,这个程序其实是有缺陷的,因为并不是所有的消息我们都想要保存,正常情况下好友发送过来的消息我们就可以直接看到,何必在保存下来去看呢?我们不是想知道好友撤回的消息内容吗?

这些就是如何监听好友是否撤回了消息的问题了。其实也不难,Content模块为我们提供了NOTE类型,这个类型指的是系统消息。我们可以通过自定义一个函数,用它来监听系统的消息:

运行之后,我们再发送一条消息撤回试一下,输出的结果如下:

这里只贴出来部分内容,根据内容你就会发现,撤回消息的文本内容为"你撤回了一条消息"。因此要想知道好友是否撤回了消息就很简单了,判断msg['Text'] == '你撤回了一条消息'就可以啦。

六、实现微信防撤回程序

到这里所有关于程序每一步的代码就分析完了,下面是所有代码的汇总:

像以上这样,一个完整的防撤回程序就get了。如果前面的铺垫掌握的很不错的情况下,上面的汇总程序对你来说简直就是so easy。

七、测试程序

下面就是惊心动魄的测试了,我们来试一试这个程序到底成功了吗?

分别给好友发送了文本、图片和语音不同形式的三条消息,然后我再一一撤回。接下来神奇的时刻,微信程序自动向文件传输助手发送了三条消息如下:

这样看来,这个程序也基本完成了。大家可以赶快去试一试。

为了避免撤回的消息透漏别人隐私,所以这里我选择将撤回的消息发送给文件传输助手,如何将消息发送给文件传输助手也很简单:

itchat.send(send_msg, toUserName='filehelper')

toUserName传入filehelper即可。

这样一来,不管对方撤回了什么,你都可以去文件传输助手看看对方究竟撤回了什么。

上一篇下一篇

猜你喜欢

热点阅读