基于大数据监控微信好友运动状态
++大数据是我瞎扯的,实际是根据微信运动的数据生成的图表。++
0.效果图
1.核心思路
这里只讲思路,不给具体代码。具体代码大家自己想办法整出来。
我们知道,一旦微信好友开启了微信排行榜,那么就会有数据显示在微信运动上面。
这里的数据,我们可以认为他是实时更新的。
那么,只要我们把当前的步数,减去上一个时间段的步数,我就能知道他这段时间走了多少步。这就是核心思路。
2.实现步骤
-
第一步,必定是获取数据
这是整个逻辑中最难的一部分。因为微信的数据不好爬,直接抓包也不一定能抓出来数据。关于抓包,ios客户端限制比较小,在android客户端限制会大一些。一般抓包我会选择在ios客户端抓包,获取接口。
但是微信的数据,确实难抓。
我没有采用爬取接口的方式。
那么怎么办呢?既然数据显示在我的手机上,那么它就归我了。无非是怎么拿数据。
思路1:不断的截图,然后让python识图(没学过python和人工智能,但是这种简单的图片应该好识别)
思路2:直接解析android上的控件。
我采用了第二种思路,直接解析控件。使用的是AutoJs,模拟进入微信运动,模拟滚动屏幕,不断的读取控件的数据。使用体验是相当的麻烦。要不断的进行判断,找控件,点击等等。但是确实可以拿到数据
-
第二步,定时的抓取
如果我们有一个可行的接口来源,那么这一步相当的简单
但是因为使用了autojs,所以需要反复执行任务才能获得数据。涉及到很多的问题,
-
首当其冲的是定时任务。android10以后对后台的管理变的严格了很多,很难很难保证一个任务能定时运行,我到现在也没有找到一个比较好的方法。最后是使用 while(true){} 通过线程休眠实现等待。才完成一个定时效果
-
其次是解锁屏幕。因为数据在微信客户端,而手机有时候会锁屏,这时候需要模拟点击。
-
最后是执行结束之后的锁屏,这个autojs在没有root的情况下难以实现
所以我干脆自己写了一个app,流程就是启动activity,马上执行DevicePolicyManager的lockNow方法,然后执行finish()。
最后让autojs启动这个app,就实现了效果
-
-
第三步,数据的上传
这个部分相对来说简单一些,爬取到的数据整合成一个数组,然后上传给后端接口即可。
这个时候我们需要写一个后端服务,为了简单快捷,我使用express写了三个接口。一个是上传,一个是读取好友列表,一个是下发好友的微信步数
-
第四步,数据的展示
这里我使用的是elementui + echart的方式,调用后端接口,把数据展示成一个直观的柱状图。
涉及到了一个数据的简单解析。客户端上传到后端接口时,首先要进行一个去重操作,去重之后进行存储。下发数据时要进行一个按时间排序。
因为存储的是直接的步数,而不是步数差,所以这时候前端需要进行遍历,计算步数差,最后再把数据传递给echart
3.用途
其实没什么卵用,只是之前刚好用到了autojs,想巩固下知识。
整个流程下来,总共写了四个部分的代码。
第一个部分是autojs的js部分,然后是android的锁屏部分,第三个是nodejs的接口以及mongodb的部分,第四个就是vue+echart的部分。
算是一个知识的复习。
说没有用途,其实还是有点用,你可以发给好友装x,虽然他之后可能就会把微信运动关闭,或者把你拉黑 哈哈
4.扩展应用
拿到运动数据之后,相当于知道了它在某个时刻的是静止还是运动。 基于这一点: 有了一天的数据之后: - 你是老板,你可以知道你的员工有没有摸鱼
有了一周的数据之后: - 可以知道你爱的他/她几点出门,几点到公司/学校/家 - 可以知道你爱的他/她喜欢什么时候运动 - 可以猜测一个人的工作类型是室内还是室外
有了一个月的数据之后: - 可以知道这个人是否喜欢运动/工作类型是否需要运动 - 可以侧面猜测一个人的身体状况。这里需要结合一些中西医的知识,比如长时间步数才1000步,那么可以猜测这个人多半有痔疮。如果你还知道一些他的侧面信息,那么你可以进一步结合他的生活习惯知道他是否是亚健康 - 可以作为一个人性格分析的分析材料