上一篇推文中提到,我希望通过监控微信对应的聊天记录,来实现一个消息自动处理的机器人,上篇文章实现的就是自动保存感兴趣的文章到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表的这行,可以看到微信应用的id35

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中文教程合集:免费下载

不论微信钉钉还是什么软件,我写了个通用的消息监控处理机器人相关推荐

  1. 钉钉启动时出现弹窗, 提示缺失MainFrame.dll程序模块 / 打开微信提示缺失wechatwin.dll / 其他部分软件提示缺失iertutil.dll

    摘要:大概过程是这样的,今天在打开visio的时候,一直不能打开.就计划重新安装一下,在下载以前的office后,发现迅雷不能打开了,其他软件也大部分不能正常使用,提示各种报错,主要情况有以下几种 微 ...

  2. 用python实现微信、钉钉等软件多开

    我发现坛友分享的很多都是通过cmd 去start 多个微信 虽然能实现多开,但不够灵活,比如我上午登录了一个微信,下午在登录就不太好用了 当然也可能是我start的姿势不对.于是我就搜了下单实例原理, ...

  3. 为什么企业组织更愿意选择内部私有的IM,而不使用钉钉、微信等软件?

    尽管市面上有钉钉.企业微信.飞书等许多可免费使用且还十分不错的即时通讯软件,可还是有很多企事单位愿意耗费大功夫去再自主开发一款即时通讯IM软件呢?如百度公司使用Hi,深i企使用WorkPlus,网易公 ...

  4. ubuntu 18.04安装社交软件(微信/钉钉)

    ubuntu 18.04安装社交软件 背景 环境 安装 安装wine 安装微信 安装dingtalk 使用 卸载 背景 本篇是<电脑操作系统环境的转变[win]–>[linux]>和 ...

  5. Ubuntu使用Wine安装钉钉、微信、QQ等Windows软件

    前言 有很多时候我们需要在Ubuntu系统上使用钉钉.微信等Windows下的软件,因为在钉钉网页版中无法显示加密了的消息,必须安装钉钉软件才行,所以有了这篇文章,这篇文章主要记录Wine和这些软件的 ...

  6. linux微信qq钉钉,Ubuntu使用Wine安装钉钉、微信、QQ等Windows软件

    前言 有很多时候我们需要在Ubuntu系统上使用钉钉.微信等Windows下的软件,因为在钉钉网页版中无法显示加密了的消息,必须安装钉钉软件才行,所以有了这篇文章,这篇文章主要记录Wine和这些软件的 ...

  7. 模拟常见软件微信、钉钉、企业微信、飞书、淘宝、支付宝 的User Agent

    微信 mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, ...

  8. 计算开始到结束的时间_阿里钉钉首次战胜微信,云计算的涨停潮只是开始,远未结束...

    马云和马化腾在社交领域的较量,马云终于在今年赢了一次马化腾. 根据最新数据,阿里钉钉首次超过微信,跃居苹果App Store排行榜第一. 在苹果手机端应用商店和MAC电脑端应用商店,钉钉下载量均跃居免 ...

  9. 【事件】对战微信,阿里企业级社交产品“钉钉”的深度解读

    虽未是屡败屡战,但是阿里做社交产品几乎从未成气候,所有社交尝试从桌面时代到移动时代无一大成,倾注心血的来往也早已被微信甩得远远的,这些都是不争的事实.所以当记者突然发现这款已经开始在企业级市场流传的& ...

最新文章

  1. erlang-百度云推送Android服务端功能实现-erlang
  2. Mybatis接口Mapper内的方法为啥不能重载吗?
  3. oracle locked time,ORACLE distributed_lock_timeout参数
  4. 文件上传与下载----SpringMVC
  5. Pytorch 各种模块:降低学习率,
  6. 有人说苹果手机的CPU非常强大,为什么会这样?苹果cpu又是谁设计的?
  7. popupwindow使用之异常:unable to add window -- token null is not valid
  8. (官方win10PE使用)微软官方win10PE取出文件操作教学
  9. Javascript --- 模板引擎
  10. win10重置系统后右键一直转圈,解决鼠标右键一直转圈问题
  11. Ztmao主题猫wordpress主题经典失传版/WP网站模板下载站源码+全局SEO功能设定
  12. [转]Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
  13. 南繁水稻国家公园国稻种芯(三亚)水稻节功能性农业产业园
  14. WordPress Avada主题评测:非常受欢迎但值得吗? (2022)
  15. NOI 1.11 二分查找 04: 网线主管
  16. 切比雪夫1型滤波器C语言,切比雪夫1型滤波器.doc
  17. c语言api获取百度地图,H5调用百度地图API获取地理位置
  18. 视频驱动V4L2子系统驱动架构
  19. AR行业报告:甩掉VR,5年内AR将迎来大爆发 | 报告
  20. 《汇编语言》——王爽

热门文章

  1. .NET Framework各个版本(1.0 - 2.0)
  2. js立即执行函数,jqueryReady和Onload执行顺序比较
  3. android9.0自动使用24小时制
  4. 微信小程序canvas绘制图片真机不显示问题
  5. 机器学习之金融信贷风控(一)互联网金融业申请评分卡的介绍
  6. 算法笔记:Playing Atari with Deep Reinforcement Learning
  7. C语言——整数直角三角形
  8. 【AI】VGG网络简介
  9. vant中van-icon使用自定义图标
  10. C# 读取和输出asc文件