不论微信钉钉还是什么软件,我写了个通用的消息监控处理机器人
上一篇推文中提到,我希望通过监控微信对应的聊天记录,来实现一个消息自动处理的机器人,上篇文章实现的就是自动保存感兴趣的文章到Bear。
虽说那篇文章比较实用,也有很多朋友表示喜欢,但还有不少缺陷:
•对技术薄弱的朋友复现困难,项目很多配置需要手动生成,前期校验工作很多•二次开发比较困难,不能直接作为第三方包使用•项目兼容性不强,目前只支持Mac并且只支持微信这个APP,其他如钉钉就没辙•项目稳定性不强,微信更改机制可能又需要重头再来
对,问题很多,但在勉强能用的情况下我并不是很有动力进行新方案的开发。那么是什么原因促使我更新方案了呢~
背景:在公司和数据打交道居多,运营那块每天会将一些表格数据发到钉钉群里面,然后我组内成员需要手动下载并找到对应的处理脚本进行处理
然后我问了下两周需要耗费多长时间在这件事情上,答曰1小时,这确实不能忍了!
于是我花了10小时做了这个处理方案!顺便解决上面说的四个问题,赚了。。。
调研
开始之前,自然是先下决心将一切历史问题解决掉:
•跨系统!跨软件!•程序能直接作为第三方包使用,并且傻瓜式!
好,flag已立,开始吧,核心技术点就是如何监控所有平台软件的消息。
上一篇推文的方案只能支持微信,所以我目前的背景需求里面的监控对象是钉钉,难道我又要按照以前的方法去搞db文件么?
总结来说,我监控的是消应用息,并且不只是微信、还需要钉钉、QQ等其他任意软件的消息,而且我也不能一个个地去破解(就算这次解密成功,如果下次需求是其他通信软件呢?),那该怎么办呢?
所以这次处理问题的角度需要站在上帝视角,说来简单,做起来也简单,哈哈。
话说我灵光一闪,既然目标对象是所有应用的消息,那我我为何不将视角从应用层面移到系统层面呢?
我以我的Mac为例,这不有现成的通知中心么?
可谓是柳暗花明又一村,老胡我这招隔山打牛,姿势还可以吧?
现在问题很明确了:
•我管你微信、钉钉、还是QQ,我只看系统的通知中心•我管你怎么加密、怎么限制,你总不会限制系统吧,我还是只看系统的通知中心
我背靠操作系统老大,现在还害怕你几个小应用,一起上,我哭算我输。
在操作系统的领域内,这个方案就是武侠世界的九阳神功,还配上了屠龙刀,可谓:十步杀一人,千里不留行。
调研结束。
实践
解决方案确立了,接下来无非就是验证加实现,这里还是以Mac
为例。
来来来,看看苹果的系统中心好不好攻占,首先,咋们来确立系统中心数据的存储方式,进入终端:
cd `getconf DARWIN_USER_DIR`/com.apple.notificationcenter/db2
ls
db db-shm db-wal
可以看到,有三个文件,哎,好熟悉,SQLite
呗。
打开:
分别有以下几个表:
•app•categories•dbinfo•delivered•displayed•record•requests•snoozed
可能有点多,但我们只需要关注两个表就行:
•app:应用id•record:监控的应用消息
建表语句分别如下:
create table app
(app_id INTEGERprimary key,identifier VARCHAR,badge INTEGER
);create table record
(rec_id INTEGERprimary key,app_id INTEGER,uuid BLOB,data BLOB,request_date REAL,request_last_date REAL,delivered_date REAL,presented Bool,style INTEGER,snooze_fire_date REAL
);
在app表的这行,可以看到微信应用的id
是35
。
app_id identifier
35 com.tencent.xinwechat
知道应用id
后就可以直接在record
表里面直接找到通知消息:
SELECT app_id,data, presented, delivered_date FROM record WHERE app_id IN (35) ORDER BY delivered_date DESC;
得到结果如下:
一切顺利,但定睛一看,中间那一大串是什么?不要慌,里面bplist
,给了很大的提示。
在Python的世界里,没有什么问题是引入一个第三方包解决不了的,如果有,那么引入两个第三方包就可以了。
pip install biplist
利用biplist
会将那一串加载成我们人类可以看懂的语言。
好像没有一点阻碍,那就可以直接编码实现了。
编码
算了,不多说,多了我也说不出来,直接开源吧,见 examiner[1] ,不要吝啬你的Star哈(可点击阅读原文)。
git clone https://github.com/howie6879/examiner
cd examiner
# 推荐使用pipenv 你也可以使用自己中意的环境构建方式
pipenv install --python=/Users/howie6879/anaconda3/envs/python36/bin/python3.6 --skip-lock
接下来只需要在根目录构建自己的监控脚本就行,比如监控微信,监理文件命名为 wechat_app.py
:
from examiner.notification import notification_factorydef get_data(app_names: list):os_notification = notification_factory(app_names)info_list = os_notification.get_target_notification()for each in info_list:# 自行实现监控逻辑以及处理方案print(each)if __name__ == "__main__":app_names = ["WeChat"]get_data(app_names)
和上一篇比起来,这代码,不需要配置、不需要提前准备什么,并且提供统一的接口,只需要在列表里面填上你想监控的目标应用即可(我顺便支持了多应用),你可以同时监控钉钉和微信等等
自己可以慢慢玩,一般会这样输出:
{'title': '老胡的储物柜', 'subtitle': '', 'body': '测试消息监控,任何应用都行', 'delivered_date': datetime.datetime(2019, 10, 20, 21, 40, 26, 428654), 'presented': 1, 'app_identifier': 'com.tencent.xinwechat', 'app_name': 'WeChat', 'md5': '75e24e2ccc502f01c101fcbd3637950b'}
搞定收工。
References
[1]
examiner: https://github.com/howie6879/examiner
如果你喜欢且支持本篇文章,为什么不点好看且转发让更多的朋友看到呢?
点击阅读原文,就是项目地址了????
往期推荐:
【教程&工具】微信同步文章到Bear
程序员二手书交换计划
【小工具】极客时间&GitChat专栏下载脚本
我的Chrome浏览器插件
oh-my-zsh: 让终端飞
JupyterLab:程序员的笔记本神器
如何实现一个Python爬虫框架
[程序员福利] 获取Lynda视频课程免费账户
Sanic中文教程合集:免费下载
不论微信钉钉还是什么软件,我写了个通用的消息监控处理机器人相关推荐
- 钉钉启动时出现弹窗, 提示缺失MainFrame.dll程序模块 / 打开微信提示缺失wechatwin.dll / 其他部分软件提示缺失iertutil.dll
摘要:大概过程是这样的,今天在打开visio的时候,一直不能打开.就计划重新安装一下,在下载以前的office后,发现迅雷不能打开了,其他软件也大部分不能正常使用,提示各种报错,主要情况有以下几种 微 ...
- 用python实现微信、钉钉等软件多开
我发现坛友分享的很多都是通过cmd 去start 多个微信 虽然能实现多开,但不够灵活,比如我上午登录了一个微信,下午在登录就不太好用了 当然也可能是我start的姿势不对.于是我就搜了下单实例原理, ...
- 为什么企业组织更愿意选择内部私有的IM,而不使用钉钉、微信等软件?
尽管市面上有钉钉.企业微信.飞书等许多可免费使用且还十分不错的即时通讯软件,可还是有很多企事单位愿意耗费大功夫去再自主开发一款即时通讯IM软件呢?如百度公司使用Hi,深i企使用WorkPlus,网易公 ...
- ubuntu 18.04安装社交软件(微信/钉钉)
ubuntu 18.04安装社交软件 背景 环境 安装 安装wine 安装微信 安装dingtalk 使用 卸载 背景 本篇是<电脑操作系统环境的转变[win]–>[linux]>和 ...
- Ubuntu使用Wine安装钉钉、微信、QQ等Windows软件
前言 有很多时候我们需要在Ubuntu系统上使用钉钉.微信等Windows下的软件,因为在钉钉网页版中无法显示加密了的消息,必须安装钉钉软件才行,所以有了这篇文章,这篇文章主要记录Wine和这些软件的 ...
- linux微信qq钉钉,Ubuntu使用Wine安装钉钉、微信、QQ等Windows软件
前言 有很多时候我们需要在Ubuntu系统上使用钉钉.微信等Windows下的软件,因为在钉钉网页版中无法显示加密了的消息,必须安装钉钉软件才行,所以有了这篇文章,这篇文章主要记录Wine和这些软件的 ...
- 模拟常见软件微信、钉钉、企业微信、飞书、淘宝、支付宝 的User Agent
微信 mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, ...
- 计算开始到结束的时间_阿里钉钉首次战胜微信,云计算的涨停潮只是开始,远未结束...
马云和马化腾在社交领域的较量,马云终于在今年赢了一次马化腾. 根据最新数据,阿里钉钉首次超过微信,跃居苹果App Store排行榜第一. 在苹果手机端应用商店和MAC电脑端应用商店,钉钉下载量均跃居免 ...
- 【事件】对战微信,阿里企业级社交产品“钉钉”的深度解读
虽未是屡败屡战,但是阿里做社交产品几乎从未成气候,所有社交尝试从桌面时代到移动时代无一大成,倾注心血的来往也早已被微信甩得远远的,这些都是不争的事实.所以当记者突然发现这款已经开始在企业级市场流传的& ...
最新文章
- erlang-百度云推送Android服务端功能实现-erlang
- Mybatis接口Mapper内的方法为啥不能重载吗?
- oracle locked time,ORACLE distributed_lock_timeout参数
- 文件上传与下载----SpringMVC
- Pytorch 各种模块:降低学习率,
- 有人说苹果手机的CPU非常强大,为什么会这样?苹果cpu又是谁设计的?
- popupwindow使用之异常:unable to add window -- token null is not valid
- (官方win10PE使用)微软官方win10PE取出文件操作教学
- Javascript --- 模板引擎
- win10重置系统后右键一直转圈,解决鼠标右键一直转圈问题
- Ztmao主题猫wordpress主题经典失传版/WP网站模板下载站源码+全局SEO功能设定
- [转]Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
- 南繁水稻国家公园国稻种芯(三亚)水稻节功能性农业产业园
- WordPress Avada主题评测:非常受欢迎但值得吗? (2022)
- NOI 1.11 二分查找 04: 网线主管
- 切比雪夫1型滤波器C语言,切比雪夫1型滤波器.doc
- c语言api获取百度地图,H5调用百度地图API获取地理位置
- 视频驱动V4L2子系统驱动架构
- AR行业报告:甩掉VR,5年内AR将迎来大爆发 | 报告
- 《汇编语言》——王爽