python 请在微信客户端打开_当 Python 遇到微信_如何用微信打开python代码-程序员宅基地

技术标签: python  pyhton  

自从微信禁止网页版登陆之后,itchat 库实现的功能也就都不能用了,那现在 Python 还能操作微信吗?答案是还可以。

目前有一个项目 WechatPCAPI 可以对微信进行操作,简单来说它是直接操作 PC 版微信客户端的,当然它有一定不足之处就是:PC 版微信客户端和 Python 都需要使用指定版本的,本文我们使用的 Python 版本为 3.7.6 ,微信客户端使用版本为 2.6.8.52 ,WechatPCAPI 的 GitHub 地址为: https://github.com/Mocha-L/WechatPCAPI。

获取好友列表
WechatPCAPI 提供了方法 get_friends(),该方法返回信息包括:好友、群和公众号的列表信息,信息内容主要包括:微信号、昵称和自己设置的备注。

我们使用获取的昵称做个简单的词云展示,代码实现如下所示:
 

logging.basicConfig(level=logging.INFO)
 
def on_message(message):
 pass
 
def get_friends():
 # 初始化微信实例
 wx_inst = WechatPCAPI(on_message=on_message, log=logging)
 # 启动微信
 wx_inst.start_wechat(block=True)
 # 等待登陆成功,此时需要人为扫码登录微信
 while not wx_inst.get_myself():
  time.sleep(5)
 print('登陆成功')
 nicknames = []
 # 排除的词
 remove = ['还是', '不会', '一些', '所以', '果然',
     '起来', '东西', '为什么', '真的', '这么',
     '但是', '怎么', '还是', '时候', '一个',
     '什么', '自己', '一切', '样子', '一样',
     '没有', '不是', '一种', '这个', '为了'
   ]
 for key, value in wx_inst.get_friends().items():
  if key in ['fmessage', 'floatbottle', 'filehelper'] or 'chatroom' in key:
   continue
  nicknames.append(value['wx_nickname'])
 words = []
 for text in nicknames:
  if not text:
   continue
  for t in jieba.cut(text):
   if t in remove:
    continue
   words.append(t)
 global word_cloud
 # 用逗号隔开词语
 word_cloud = ','.join(words)
 
def nk_cloud():
    # 打开词云背景图
    cloud_mask = np.array(Image.open('bg.png'))
    # 定义词云的一些属性
    wc = WordCloud(
        # 背景图分割颜色为白色
        background_color='white',
        # 背景图样
        mask=cloud_mask,
        # 显示最大词数
        max_words=300,
        # 显示中文
        font_path='./fonts/simkai.ttf',
        # 最大尺寸
        max_font_size=70
    )
    global word_cloud
    # 词云函数
    x = wc.generate(word_cloud)
    # 生成词云图片
    image = x.to_image()
    # 展示词云图片
    image.show()
    # 保存词云图片
    wc.to_file('nk.png')

看一下效果

消息防撤回
我们在使用微信和好友聊天时,对方有时会有撤回消息的情况,正常情况下,我们是不知道好友撤回的消息是什么的,通过 WechatPCAPI 就可以实现消息防撤回的功能。

我们知道通常撤回的消息是点击撤回操作前一步发送的内容,当然也可能撤回的是前两步、三步 ... 的消息,这里我们只对撤回前一步的消息做处理,基本思路是:我们将撤回前一步发送的消息存一下,当对方点击撤回操作时,我们再将前一步的消息再次返回给自己。

下面看一下实现代码:
 

ogging.basicConfig(level=logging.INFO)
queue_recved_event = Queue()
 
def on_message(msg):
    queue_recved_event.put(msg)
 
def login():
    pre_msg = ''
    # 初始化微信实例
    wx_inst = WechatPCAPI(on_message=on_message, log=logging)
    # 启动微信
    wx_inst.start_wechat(block=True)
    # 等待登陆成功,此时需要人为扫码登录微信
    while not wx_inst.get_myself():
        time.sleep(5)
    print('登陆成功')
    while True:
        msg = queue_recved_event.get()
        data = msg.get('data')
        sendinfo = data.get('sendinfo')
        data_type = str(data.get('data_type'))
        msgcontent = str(data.get('msgcontent'))
        is_recv = data.get('is_recv')
        print(msg)
        if data_type == '1' and 'revokemsg' not in msgcontent:
            pre_msg = msgcontent
        if sendinfo is not None and 'revokemsg' in msgcontent:
            user = str(sendinfo.get('wx_id_search'))
            recall = '撤回的消息:' + pre_msg
            wx_inst.send_text(to_user=user, msg=recall)

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shclbear/article/details/118034750

智能推荐

分支限界——01背包问题_优先队列式分支限界法解决0/1背包问题的解空间树-程序员宅基地

文章浏览阅读4.6k次,点赞4次,收藏12次。回溯法采用的是深度优先搜索,而分支限界采用的则是广度优先搜索。 分支限界法的搜索策略是,在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一扩展结点。为了有效地选择下一扩展结点,加速搜索的进程,在每一个活结点处,计算一个函数值(限界),并根据函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间上有最优解的分支推进,以便尽快地找出一个最优解。_优先队列式分支限界法解决0/1背包问题的解空间树

使用canvas绘制六边形_canvas 实现圆角六边形-程序员宅基地

文章浏览阅读1.6k次。近期遇到了一个六边形边框的需求,实现如下图效果:有六边形边框,中间是一张图片,图片超出的部分要裁切掉。代码实现如下:<html> <head> <style> html,body{ width:100%; height:100%; padding:0; margin:0; } canvas{ position: absolute; top:0; left:0; right:0;_canvas 实现圆角六边形

消息事件系统(案例)-程序员宅基地

文章浏览阅读454次。消息事件系统在游戏开发中,客户端内部有一套自己的消息事件系统是很有必要的,它会极大的帮助代码解耦,同时很方便的对自定义的消息类型进行绑定事件和在适当的时候调用。概括来说,以下消息事件系统的原理大致是用一个hashtable来存储事件类型以及事件类型所对应的回调方法,这个回调方法可以添加多个,同时也可以在需要的地方删除一个或多个。如果读者有更好的做法或方案,欢迎在评论区留言。(注:该文章是本人根据姜雪伟老师所著的《unity3d实战核心技术详解》所写,仅作为一种消息事件系统的方案供感兴趣的童鞋参考和了_事件系统

【观察】研华科技:平台和生态“双轮驱动”,赋能智能制造转型升级-程序员宅基地

文章浏览阅读458次。申耀的科技观察读懂科技,赢取未来!最近一段时间以来,“新基建”成为社会各界关注的焦点,而纵观“新基建”发力的领域,几乎都与智能制造领域有着直接的关联。原因不难理解,“新基建”的本质就是在..._对研华公司的改善

基于MindMaster思维导图拆解Spring体系结构_mind master怎么拆分-程序员宅基地

文章浏览阅读139次。网盘链接:Spring体系结构拆解提取码:3306下载Spring Framework v5.1.0大致概观:参考自spring-framework-5.0.2.RELEASE\docs\spring-framework-reference\images\spring-overview.png:_mind master怎么拆分

Java实现微信网页授权-程序员宅基地

文章浏览阅读133次。2019独角兽企业重金招聘Python工程师标准>>> ..._使用weixin-java-common-4.4.9.b.jar进行网页授权

随便推点

【LSTM回归预测】基于经验模态分解结合主成分分析的长短记忆神经网络EMD-KPCA-LSTM(含LSTM和EMD-LSTM对比)实现风电数据预测附matlab代码-程序员宅基地

文章浏览阅读631次,点赞30次,收藏29次。风电作为一种可再生能源,其发电量受多种因素影响,具有较强的波动性和间歇性。准确预测风电数据对于提高电网稳定性和优化调度具有重要意义。本文提出了一种基于经验模态分解(EMD)结合主成分分析(KPCA)的长短记忆神经网络(LSTM)模型(EMD-KPCA-LSTM)用于风电数据预测。该模型首先利用 EMD 将原始风电数据分解为多个固有模态函数(IMF),然后采用 KPCA 对 IMF 进行降维处理,最后利用 LSTM 网络对降维后的数据进行预测。

python 提取mysql数据库数据到excel(xlwings-pymysql)_python msql 查询导出excel 模板表-程序员宅基地

文章浏览阅读3.1k次,点赞4次,收藏10次。python 拷贝数据库表格到excelimport pymysqlimport xlwings as xwclass Mysql(object): def __init__(self, database, user, passwrod, host="127.0.0.1", port=3306, charset="utf8"): self.conn = pymys..._python msql 查询导出excel 模板表

Ahahahahahahahaha codeforces#669A 思维好题_flash小游戏don't wake her-程序员宅基地

文章浏览阅读149次。Alexandra has an even-length array a, consisting of 0s and 1s. The elements of the array are enumerated from 1 to n. She wants to remove at most n2 elements (where n — length of array) in the way that alternating sum of the array will be equal 0 (i.e. a1−a_flash小游戏don't wake her

grid 实现卡片布局 以及单元格之间的颜色处理-程序员宅基地

文章浏览阅读1.2k次。原文链接: grid 实现卡片布局 以及单元格之间的颜色处理 ..._如何使gird布局的gap变颜色

LeetCode 700题 题解答案集合 Python_leetcode题解大全python下载-程序员宅基地

文章浏览阅读9.9w次,点赞225次,收藏1.7k次。2019.5.12更新至题号796,目前共有265题。2019.5.26更新至题号72, 目前共有347题。2019.6.16更新至题号70,目前共有382题。2019.7.7更新至题号5120,目前共有442题。2019.8.5更新至题号1147,目前共有502题。2019.9.6更新至题号288, 目前共有551题。2019.11.13更新至题号426,目前共有602题..._leetcode题解大全python下载

CSS预编译器三剑客(Sass、Less、Stylus)及PostCSS(AST、开发插件)-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏9次。CSS预编译器三剑客(Sass、Less、Stylus)及PostCSS(AST、开发插件)文章目录CSS预编译器三剑客(Sass、Less、Stylus)及PostCSS(AST、开发插件)1. CSS预编译器三剑客(Sass、Less、Stylus)2. PostCSS总结:Sass、Less、Stylus比较引入变量Less中的变量,在声明中使用时,如果出现多次赋值的情况,其会取最后一次赋值的值Sass/Stylus中的变量,如果出现多次赋值的情况,其会取声明前面最近的一次赋值的_css预编译器

推荐文章

热门文章

相关标签