美文网首页
微信聊天女神撤回了啥,Python来搞定!

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

作者: 小刘说编程 | 来源:发表于2020-05-26 11:12 被阅读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即可。

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

    相关文章

      网友评论

          本文标题:微信聊天女神撤回了啥,Python来搞定!

          本文链接:https://www.haomeiwen.com/subject/wpemahtx.html