11月 29

微信公众号数据监测项目

Published at Nov 29, 2015 • BigData WeiXin Project

最近在给实验室的微信监测项目写个后台数据源获取程序,业务逻辑非常简单,编码之前大概设计了合理的代码分层。但数据源是使用某家公司的Restful Api,由于他们平台的一些Bug和文档错误,还是被坑了一些时间

程序架构与编码

先在这里阐述一下我们项目的数据需求。我们需要监测某地区微信公众号的如下信息:

  • 微信公众号的information:公众号描述,联系人名称,公众号所属城市等有关公众号的信息
  • 微信公众号的daily数据:每天的总文章数,总阅读数,总点赞数
  • 每篇文章的daily数据:每天阅读数,点赞数
  • 微信公众号的week数据:一周中的总文章数,总阅读数,总点赞数
  • 每篇文章的week数据:该文章一周的阅读数,点赞数

要求就是,从某个Api获取这些数据,做持久化入库操作。之后,我们会做一个前台界面(表格展示,图表展示,包括折线图,柱状图等等)方便非技术人员进行监测。我主要负责数据的来源,Project Package:

流程图:

业务逻辑已经被分析彻底了,很快就完成了编码工作(都是体力活,累…)

对方Api Bug

我所写的后台抓取程序,不需要多线程,单线程不停地运行,请求,存库…一直循环,对方的Api系统可能有些吃不消吧,会有脏数据的产生,所以我不得不花额外的时间再写一个数据清理程序

我汇总了他们的Bug和文档缺陷,他们也很快修复了:

数据清理工作:自动化脚本的威力!

编码最大的快乐就是能帮助我们解决琐碎的事,能帮助我们批量解决问题。我的数据清理程序在几万条数据中批量帮助我清理,这就是脚本的好处

脏数据共分为三种情况:

  • 数据不一致现象:公众号某天的总阅读数,总点赞数,和该公众号该天所有文章的阅读数,点赞数之和不相等
  • 数据库中,部分公众号没有某一天的公众号daily数据
  • 数据库中,部分公众号没有某一天的文章daily数据

一些感悟

搜索引擎

强烈建议放弃baidu,拥抱google

强烈建议放弃baidu,拥抱google

强烈建议放弃baidu,拥抱google

重要的事情说三遍!!原因很简单:开发中遇到问题,baidu出来的答案,前几条都是百度知道;google出来的前几条都是stackoverflow,后者信息噪音比低

人要学会变得懒惰

所有程序能帮你完成的事情,我们人为什么还要去做,这简直就是浪费精力

学好脚本语言,拥有强大的脑洞,生活效率会大大提高

和靠谱的人合作

找到这家数据公司的诸多文档问题后,我很想吐槽这家数据公司,文档不认真写,感觉有点坑用户

抛除这些第三方系统的错误或者bug,我想我的工作量很减少很多,我会腾出更多时间去学习其余的知识

2015.12.13 更新

这几天收到了新的要求:抓取了99个微信公众号的数据;数据量明显比上次多了10倍

数据库在没有建索引之前,使用explain解析mysql select语句,发现是全表扫描,rows竟达到了7W,这显示是不能接受的

后来,根据select where用到的字段,建立索引,效果好很多:

select优化中,参考了几篇文章:

2015.12.26 更新

最终的抓取程序分为两种模式:

  • Batch-Model:批量模式,给定一段日期区间,抓取所有区间内时间的数据
  • Day-Model:日常模式:每天定时12:30开启抓取任务,抓取前一天的数据

最终的项目地址:https://github.com/SKLCC/wx-gsdata