引言

众所周知python有一个功能十分强大的库— — itchat。本篇文章将用Python实现微信的接受消息,防撤回等功能,这些功能的实现离不开itchat的运用。

itchat基本介绍

1.如何登陆微信

首先安装itchat库。

import itchat
itchat.login()

运行后,手机微信扫描二维码即可登陆。

注意:出于安全考虑,腾讯封停了网页版微信API,新注册的微信账号可能无法登陆微信网页版。此时安装itchat-uos版本即可。

这里需要注意一个问题,每次运行程序都要扫描二维码登录,这样未免太麻烦,有没有办法只扫描一次,以后就自动登录了呢?这当然是可以的。

import itchat
itchat.auto_login(hotReload=True)

运行程序,扫码登录之后会在项目路径下创建一个itchat.pkl文件,该文件用于存储登录的状态,所以不要动它,如果你想换一个微信账号登录,就要先把这个文件删除,因为该文件记录的是上一个微信的登陆状态,删除之后即可切换账号登录。

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

2.获取好友列表

用itchat模块提供的API获取好友列表。

import itchat
itchat.auto_login(hotReload=True)
friends = itchat.get_friends()
print(friends)

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

UserName,这是用户的唯一标识,相当于身份证号码,你的每个好友都会有这样一个标识,每个好友之间肯定都是不一样的;然后是NickName,这是好友的昵称;HeadImgUrl是好友的头像地址;RemarkName是你对好友的备注;Province是省份等等,这里不一一介绍。

3.如何发送消息给好友

import itchatitchat.auto_login(hotReload=True)
friends = itchat.get_friends()
name = '你对好友的备注'
for i in friends:if '你对好友的备注' == i['RemarkName']:itchat.send('想要发送的消息内容', toUserName=i['UserName'])break

这样,就可以指定发送给任意好友,通过好友的备注在好友列表中进行检索,找到的话,就获取该好友的UserName,然后发送消息,也可以通过好友的昵称(NickName)查找。

 4.装饰器

itchat模块还有很多功能,这里就不作过多讲解了,关于装饰器,一时半会儿讲不清楚,这里只是简单介绍一下,装饰器的作用就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。

程序源代码

随便调试了一小会儿,目前没发现bug,后续如果找到bug会再修改。

import itchat
from itchat.content import *
import os
import time
from playsound import playsound
import xml.dom.minidom
temp = 'E:/python/微信脚本/消息' + '/' + '撤回的消息'
new_temp = 'E:/python/微信脚本/消息' + '/' + '聊天记录'
tp = r'E:/python/微信脚本/消息/撤回的消息'
ntp = r'E:/python/微信脚本/消息/聊天记录'
dict = {}@itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO])
def resever_info(msg):global dictinfo = msg['Text']msgId = msg['MsgId']info_type = msg['Type']name = msg['FileName']fromUser = itchat.search_friends(userName=msg['FromUserName'])['RemarkName']ticks = msg['CreateTime']time_local = time.localtime(ticks)dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)dict[msgId] = {"info": info, "info_type": info_type, "name": name, "fromUser": fromUser, "dt": dt}msg_type = dict[msgId]['info_type']if msg_type == 'Text':text_info = dict[msgId]['info']fromUser = dict[msgId]['fromUser']dt = dict[msgId]['dt']print('时间:' + dt + '\n' + fromUser + ':' + text_info)elif msg_type == 'Picture':picture_info = dict[msgId]['info']fromUser = dict[msgId]['fromUser']dt = dict[msgId]['dt']info_name = dict[msgId]['name']picture_info(new_temp + '/' + info_name)print('时间:' + dt + '\n' + fromUser + ':' + '<图片>')elif msg_type == 'Recording':recording_info = dict[msgId]['info']info_name = dict[msgId]['name']fromUser = dict[msgId]['fromUser']dt = dict[msgId]['dt']recording_info(new_temp + '/' + info_name)playsound(new_temp + '/' + info_name)print('时间:' + dt + '\n' + fromUser + ':' + '<语音>')@itchat.msg_register(NOTE)
def note_info(msg):content = msg['Content']doc = xml.dom.minidom.parseString(content)result = doc.getElementsByTagName("msgid")msgId = result[0].childNodes[0].nodeValuemsg_type = dict[msgId]['info_type']if '撤回了一条消息' in msg['Text']:if msg_type == 'Recording':recording_info = dict[msgId]['info']info_name = dict[msgId]['name']fromUser = dict[msgId]['fromUser']dt = dict[msgId]['dt']recording_info(temp + '/' + info_name)send_msg = '发送人:' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回了一条语音'itchat.send(send_msg, 'filehelper')itchat.send_file(temp + '/' + info_name, 'filehelper')del dict[msgId]print(fromUser + " 撤回了一条消息")elif msg_type == 'Text':text_info = dict[msgId]['info']fromUser = dict[msgId]['fromUser']dt = dict[msgId]['dt']send_msg = '发送人:' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回内容:' + text_infoitchat.send(send_msg, 'filehelper')del dict[msgId]print(fromUser + " 撤回了一条消息")elif msg_type == 'Picture':picture_info = dict[msgId]['info']fromUser = dict[msgId]['fromUser']dt = dict[msgId]['dt']info_name = dict[msgId]['name']picture_info(temp + '/' + info_name)send_msg = '发送人:' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回了一张图片'itchat.send(send_msg, 'filehelper')itchat.send_file(temp + '/' + info_name, 'filehelper')del dict[msgId]print(fromUser + " 撤回了一条消息")def clear_cache(path):ls = os.listdir(path)for i in ls:c_path = os.path.join(path, i)if os.path.isdir(c_path):clear_cache(c_path)else:os.remove(c_path)if __name__ == '__main__':if not os.path.exists(temp):os.mkdir(temp)if not os.path.exists(new_temp):os.mkdir(new_temp)clear_cache(tp)clear_cache(ntp)itchat.auto_login()itchat.run()

有了这个程序就可以编敲代码边看微信消息,非常适合像我这样懒得切出去看微信消息的懒狗(手动滑稽)。

对于文本消息:直接在控制台打印输出。

对于图片消息:储存在对应位置,可点开查看。

对于语音消息:调用playsound库,使语音消息自动播放。

对于已撤回消息:储存在撤回的消息目录里,并通过文件传输助手发送到手机上,可以直接查看。

为防止聊天文件占用磁盘太多,设置了清除文件夹内容的函数,每次登录微信前会清除文件夹里之前的聊天记录文件。

之前程序写的比较匆忙,想让收到的图片自动在pycharm的sciview上绘制出来,初步设想是用matplotlib库,png文件下测试没问题,但遇到jpg和gif文件时就会报错,需要将文件转换成png文件,参考网上的代码有了一些想法,写了一点点但bug有点多,容我改改,完善后再发出来。

如何用python代替微信接受消息,查看撤回消息(itchat实现)相关推荐

  1. python怎么撤销_用Python玩转微信(三)—— 查看撤回消息

    在第一篇中,我爬取微信中的好友资料,并对好友的性别数据进行了可视化,以及统计好友来自哪里. 那么在第二篇当中呢,爬取了好友的个性签名并制作成非常好看的创意词云图. 用这可爱的皮卡丘作为背景,把所有好友 ...

  2. python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器)

    python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python实现微信自动回复机器人+查看别 ...

  3. python制作微信个人二维码_如何用Python制作微信好友个性签名词云图

    前言 上次查看了微信好友的位置信息,想了想,还是不过瘾,于是就琢磨起了把微信好友的个性签名拿到,然后分词,接着分析词频,最后弄出词云图来. 1.环境说明 Win10 系统下 Python3,编译器是 ...

  4. 微信反撤回linux,终于,微信防撤回来了,简单设置一下就能查看撤回消息,太实用了...

    原标题:终于,微信防撤回来了,简单设置一下就能查看撤回消息,太实用了 今日分享: 微信.QQ 消息防撤回 适用系统:安卓 自从微信推出"撤回消息"这个功能以来,平时我们在聊天的时候 ...

  5. 防撤回神器,免ROOT查看撤回消息!再也不用担心错过劲爆消息!

    大家好!好几天没有更新了~今天有时间为大家分享一下怎么查看好友撤回的消息内容.有的小伙伴可能了解微X模块和QX模块有这个功能(或者一些其他的Xposed模块),这些模块使用需要手机安装Xposed框架 ...

  6. Anti-recall 防撤回神器 -- Android 免root查看撤回消息和闪照 官网

    Anti-recall 防撤回神器官方下载 Android 免root查看撤回消息和闪照 官网 下载地址 anti-recall.com 哪里撤回点哪里 妈妈再也不用担心我错过劲爆消息了呢 爆照撤回没 ...

  7. 2019最新Python学习路线图:如何用Python创建微信机器人

    微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的最新Python学习路线教程便是如何用Python来做一个微信聊天机器人,突然想起鲁迅先生曾经说过 ...

  8. 如何用Python创建微信机器人?你知道吗

    微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的便是如何用Python来做一个微信聊天机器人. 因为是微信机器人系列的第一篇文章,所以猪哥会特别详 ...

  9. python微信自动打卡_如何用Python实现微信自动签到功能

    匿名用户 1级 2016-10-18 回答 作者:LittleCoder 链接:https://www.zhihu.com/question/51160419/answer/124460961 来源: ...

最新文章

  1. ubuntu 14.04 双显卡安装NVIDIA GPU驱动+CUDA+编译配置caffe
  2. 古典加密算法-----置换密码
  3. 人工智能学习知识框架(知识点、实际应用)-思维导图汇总-xmind原图
  4. PHP实现页面跳转的几种方法
  5. “毕设导师互选系统”项目产品宣传推广方案
  6. 使用PostgREST的配置教程
  7. for..of 循环
  8. SQL Server 中系统表的作用
  9. JavaScript--数据结构算法之链表
  10. 软件安装下载的镜像站、国内源
  11. Python中使用tarfile压缩、解压tar归档文件
  12. 【转载】【原创】贵在,难在,成在
  13. 黑客技术之初学者编程入门
  14. 项目设计报告可行性分析
  15. javascript上传文件到服务器,js实现上传图片到服务器
  16. 《安士全书》善世第一奇书
  17. 零基础学FPGA(六):FPGA时钟架构(Xilinx为例,完整解读)
  18. 【历史上的今天】8 月 18 日:硅谷神话的衰落;微软发布 QuickBASIC;Adobe Audition 问世
  19. windows2003 升级sp1,sp2 产品密匙无效 (转)
  20. Java学习——类和对象(上)

热门文章

  1. ubuntu 串口调试工具推荐_升级版全系列视频第一个项目电子产品量产测试与烧录工具...
  2. wow服务器合并信息,新大服务器出炉 wow公布服务器合并方案
  3. 埃洛普 微软 诺基亚 艾洛普
  4. react报错 Uncaught Invariant Violation: Unable to find node on an unmounted compone
  5. word-break:break-all 打散文字,强制对齐
  6. 去掉Element复选框点击出现的蓝色背景颜色
  7. 使用 Ambire 参加 Arbitrum 奥德赛活动的指南
  8. python量化交易是什么意思_使用python做量化交易分析系列(1)
  9. 苹果屏幕尺寸_苹果iPhone 12 Pro回归小屏旗舰,采用5.4英寸三星顶级屏
  10. 技术服务于生活——羽毛球+程序员=?