版权声明:
本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。
未经允许,不得转载。
一、前言
作为 Android 项目的负责人,被要求每周周报要出一份崩溃报表,没办法就只有做了。
本身觉得这种数据做成图表肯定是比做成表格来的直观,所以在第一周画了两个小时做一份图表的报表出来之后,觉得这种重复的劳动力,还是交给代码来完成吧。
实际上,之前公司项目使用的是 umeng ,之后换成 Bugly 了,本身 umeng 是提供了公开的数据接口 ,需要企业认证一下就可以了。不过 Bugly 并没有提供相关的公开接口,这个我已经找 Bugly 的客服咨询过了。
既然已经从官方渠道拿不到数据接口,那么我们只能考虑别的路子获取数据了,接下来看看我的做这件事情的步骤,希望对大家有帮助,一些敏感的信息,我就直接一笔带过了,但是思路都分享出来了,如果你需要获取其他的数据,不仅限于 Bugly ,也是有一定参考价值的。
二、准备工作
1、确定接口
已经决定好了要扒 Bugly 的数据了,那么首先就需要了解到 Bugly 不同数据的接口分别是什么,必要的参数是什么。
确定数据接口,可以通过浏览器的开发者工具,中的 Network 中查看到当前页面做网络请求的时候,请求的接口和发送的数据。我这里使用的是 Chrome。
b-network.png例如这里就是一个崩溃分析里,崩溃列表中的数据,并且数据是以 json 的形式来返回的。
既然拿到了接口,我们当然需要先尝试看看是否可以在别的地方访问,会不会有什么限制。有一个快捷而有效的方式,可以直接从链接中复制出 curl 的命令,然后在 Terminal 中执行,如果能获取到数据,说明接口OK。
b-curl.png当你已经确定你需要的接口之后,你会发现它传递的数据非常的多,一些例如 appid、startDate、endDate 这种,非常一目了然的接口,可以直接猜到含义。但是也有一些我们看着没有含义的参数,就需要从网页中找到数据的来源了。
一般而言,这种数据从这几个地方找,都会有所收获:
- 网页的元素内。
- 内嵌 js 中的一些常量字符串。
- cookies
- Window 中一些全局的变量内。
就 Bugly 的接口而言,其实看着接口传递的参数非常的多,但是尝试逐一删除后,就会发现只有两个参数是有效的,分别可以在页面的 meta 元素和 Cookies 中找到对应的参数,细节就不多说了。
这些数据都可以在开发者工具中找到。
2、选一个报表的库
做数据分析,本来可以使用 Python 来做,Python 做爬虫和数据分析都非常的有优势。但是后来我觉得 JS 库会比较炫酷一点,而且做成网页,会比较容易分享,就找了一个 JS 的图标库:fusioncharts,这个库用起来很简单,而且每个图标多有不同的图表 Demo 都可以直接运行看效果,使用起来难度也不大,基本上看一下就明白了。
虽然 fusioncharts 是一个商业库,但是只要你的图标不用于商业,就不会有问题。
Paste_Image.png点击官网的图表都可以看到 demo,并且可以根据需要修改数据,及时看到效果,所以学习成本并不高:
Paste_Image.png官网 :http://www.fusioncharts.com
3、确定架构
虽然是个简单的爬虫加数据展示的工具,但是也需要先确定如何获取数据,如何展示数据。
这里选择的就是直接使用 node 爬出必要的数据,存储在本地,然后使用 fusioncharts 在一个 Html 网页中展示之前存储的数据内容的分析结果。
这样其实是最简单的,不用关心 js 的跨域问题,只是单纯的抓数据,然后分析展示,让抓数据和展示数据分离开。
三、Coding
既然前期工作已经准备好,后面就需要开始编码了。
首先我将爬取数据的 js 和展示数据的 html 分开。
结构大概是这样的:
Paste_Image.pngindex.js 就是用于爬取的数据的入口 js ,只需要执行它就会将我们需要的数据全部爬取到 tmp 目录下。
index.html 就是用于展示分析后的数据结果的,它将 tmp 中存储的数据,分析完成之后,直接使用图表的形式展示出来。
config.js 用于配置一些接口所需要的必要数据,这里主要配置了前面提到的接口中需要用到的必要数据,以及不同 App 需要监听的版本号和 appId 等,这里就不展示了。
其实更便捷的做法是直接将必要数据也想办法扒下来,这样可以做到一键生成报表,但是实际上,我需要使用的频度并不高,每周一次,从网页里获取一下,修改 config 里对应的配置就可以使用,所以怎么简单怎么来。
这里的场景,主要是三部分数据:全部版本的崩溃率、最近一个市场版本的崩溃率、最后一个市场版本crash前五列表,所以在 tmp 目录下,可以看到每个 App 有三份数据。
最终执行完成之后,就可以在 index.html 中看到报表的数据了,手里本来也没有测试数据,这里就不一一展示了。
四、结语
这种重复的工作,就让我们交给代码来解决吧。
这里再一次说明,会一门脚本语言的重要性,实际上 Python、Js 都是非常好的语言。有时候需要一些批量处理的时候,这些脚本语言可以帮我们节约很多时间,基本上算是一劳永逸。
最后,我想说,我只是想每周出个报表。希望 Bugly 不要修改接口让我一直用下去。当然如果尽快提供公开的 API 就更好了。
公众号二维码.jpg
网友评论
这两个参数是什么?是 curl 的参数吗?能给参数名说一下吗