赞
踩
只要有人给你发了表情包,不管是群聊还是个人发的,都将它保存到本地。也许某天斗图的时候就能用到,不过即使有了表情包,还需要一个检索功能,不然这一张一张看也太费眼睛了。
检索表情包的功能实现比较麻烦,至少需要两个模型:ocr和图片描述生成,如果更复杂点的话还需要分词算法、数据库等。
需要ocr应该很容易理解,表情包里面包含文字信息,使用ocr将文字提取出来,这个文字基本就可以作为检索的信息了。
如果表情没有文字,那只能使用一些模型,为图片生成一个简单的描述,然后将这个描述作为检索的信息。
搜了一下目前开源的模型里面没看到比较合适的。后面如果遇到了再做一个简单的表情包检索程序。
https://github.com/kanadeblisst00/WeChat-PyRobot
http://www.pygrower.cn:21180/kanadeblisst/WeChat-PyRobot
使用Python来监听微信消息,如果收到表情包消息就提取里面的链接并下载,因为表情包xml消息里有一个未加密的链接。
监听消息的原理和代码可以看之前的一篇文章: 【Python微信机器人】第八篇: 实战32位和64位接收消息和消息防撤回
代码在上篇文章的基础上做了如下优化:
3.9.8.12
和3.9.8.15
的代码)pip install wechat_pyrobot==1.1.1
如果国内源还没有同步最新版本,可以指定-i https://pypi.org/simple/
选项使用pip官方库
先启动并登录微信,随便创建一个文件夹,然后创建一个文件main.py
(名称随意)写入以下代码:
from py_process_hooker import inject_python_and_monitor_dir
from wechat_pyrobot import get_on_startup
from wechat_pyrobot.msg_plugins import PrintMsg, DownLoadEmotion
if __name__ == "__main__":
process_name = "WeChat.exe"
open_console = True
on_startup = get_on_startup(msg_plugins=[PrintMsg, DownLoadEmotion])
inject_python_and_monitor_dir(process_name, __file__, open_console=open_console, on_startup=on_startup)
使用Python运行这段代码,就会将Python注入到微信,并且开始监听微信收到的消息,然后将监听到的消息依次传递给msg_plugins指定的插件列表。
DownLoadEmotion插件就是用来下载表情包的,里面的代码很简单:
class DownLoadEmotion(MsgPluginTemplate): def __init__(self, **kwargs) -> None: self.name = os.path.basename(__file__)[:-3] super().__init__(**kwargs) self.emotion_save_path = os.path.join(kwargs["pwd"], "emotion") os.makedirs(self.emotion_save_path, exist_ok=True) def deal_msg(self, msg_dict): if msg_dict["msg_type"] != 0x2F: return xml = msg_dict["content"] root = ET.fromstring(xml) datas = dict(root.find('.//emoji').items()) cdnurl = datas["cdnurl"].replace('&', '&') filename = msg_dict["file_path"] if not filename: filename = msg_dict["msgid"] save_path = f"{self.emotion_save_path}{os.sep}{filename}.gif" with open(save_path, 'wb') as f: f.write(self.download_file(cdnurl)) def download_file(self, url, retry=0): if retry > 2: return headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183" } try: resp = requests.get(url, headers=headers, timeout=6) except: traceback.print_exc() time.sleep(2) return self.download_file(url, retry+1) return resp.content
先判断一下消息类型是不是0x2F
,也就是表情包的消息类型,然后提取xml数据里的cdnurl,用requests下载下来保存到本地
可以先参考目前已有的插件例子,代码在wechat_pyrobot/msg_plugins
, 在github或者pip本地目录都可以看到
插件需要继承MsgPluginTemplate,然后实现deal_msg方法,方法只有一个参数:字典类型的消息
my_msg_plugin/save_to_file.py
import os import json from wechat_pyrobot.plugin_class import MsgPluginTemplate class SaveToFile(MsgPluginTemplate): def __init__(self, **kwargs) -> None: self.name = os.path.basename(__file__)[:-3] super().__init__(**kwargs) # kwargs["pwd"]是main.py所在路径 self.msg_save_path = os.path.join(kwargs["pwd"], "msg_save_path") os.makedirs(self.msg_save_path, exist_ok=True) def deal_msg(self, msg_dict): path = os.path.join(self.msg_save_path, f'{msg_dict["msgid"]}.json') with open(path, 'w', encoding='utf-8') as f: f.write(json.dumps(msg_dict))
然后在注入的代码(main.py
)里加载它,需要重新启动并注入微信
from py_process_hooker import inject_python_and_monitor_dir
from wechat_pyrobot import get_on_startup
from wechat_pyrobot.msg_plugins import PrintMsg, DownLoadEmotion
from my_msg_plugin.save_to_file import SaveToFile
if __name__ == "__main__":
process_name = "WeChat.exe"
open_console = True
on_startup = get_on_startup(msg_plugins=[PrintMsg, DownLoadEmotion, SaveToFile])
inject_python_and_monitor_dir(process_name, __file__, open_console=open_console, on_startup=on_startup)
这样收到的消息都会保存到文件,当然这个只是示例。实际应该按时间来分类文件,或者保存到数据库中。
插件列表是有顺序的,在执行时会依次执行,如果之前的插件修改了消息字典,那么之后的插件得到的消息字典就是修改后的
以上就是“使用Python监听并下载微信聊天表情包”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。