创业公司做数据分析(五)微信分享追踪系统

??作为系列文章的第五篇,本文重点探讨数据采集层中的微信分享追踪系统。微信分享,早已成为移动互联网运营的主要方向之一,以Web H5页面(下面称之为微信海报)为载体,利用微信庞大的好友关系进行传播,实现宣传、拉新等营销目的。以下图为例,假设有一个海报被分享到了微信中,用户A与B首先看到了这个海报,浏览后又分享给了自己的好友,用户C看到了A分享的海报,浏览后继续分享给了自己的好友。这便形成了一个简单的传播链,其中蕴含了两种数据:

  • 行为,指的是用户对微信海报的操作,比如打开、分享。
  • 关系,指的是在海报传播过程中,用户之间形成的传播关系,比如用户A将海报传播给C。

??这样的数据的意义在于:第一,统计分析各个渠道的海报的传播效果;第二,对传播贡献较大的用户发放微信红包奖励,提高用户的分享积极性。微信分享追踪系统,便是完成对这两种数据的采集和存储。在过去的一年里,受到公司业务和运营推广方向的影响,这部分数据驱动了近一半的推广业务。

??熟悉微信开发的朋友应该知道,第一,每个微信用户在某个公众号下都拥有一个唯一的open_id,打开微信海报时,可以通过OAuth2静默授权在用户无感知的情况下拿到其open_id;第二,通过微信JS-SDK,我们可以捕捉到用户对海报页面的分享事件;第三,拿到用户在公众号下的open_id后,便可以对该用户发放微信红包了。基于这三点,我们便可以实现相关的数据追踪和分享奖励了,本文主要是总结我们在微信分享追踪上的方案演进。

??首先要说一点的是,其实微信分享追踪系统本身并不复杂,但是与复杂的产品业务结合到一起,就变得越来越复杂了。如何做到将数据逻辑与产品业务逻辑剥离开,以不变应万变,就是这里要说的方案演进了。

1. 早期服务

??早期的微信分享追踪系统,笔者曾经在浅谈微信公众号营销背后的技术一文中介绍过,其时序图如下所示。基本流程是:第一,用户打开海报时,通过OAuth2授权,将open_id加入到页面链接中;第二,前端上报浏览事件,需要带上open_id和传播链信息;第三,用户分享时,需要在分享出去的链接中加上传播链信息,所谓传播链信息,就是每个分享过的用户的open_id组合,比如“open_id_1;open_id_2”;第四,上报用户的分享事件,需要带上open_id和传播链信息。后端收到上报数据后,根据不同的功能需求,将数据保存到不同的数据表中,用于后期消费。随着业务的发展,这个系统暴露出一些问题:

  • 随着推广活动的调整,统计和奖励政策也随之变化,比如有的依据一度分享者的分享次数进行奖励,有的依据一度、二度分享者带来的浏览量进行奖励等等,还有需要根据上报的参数不同做不同的处理。所有逻辑都在上报的API请求中处理,来一个需求加一段逻辑,导致该请求的功能不断膨胀,而且一些推广活动已经下线了,相关的逻辑也没有清理掉。
  • 参数比较混乱,页面URL中携带了不同的参数,包括微信相关参数、产品相关参数,前端上报时需要携带不同的参数,而前端页面太多,经常搞错。

2. neo4j的尝试

??于是,我们思考,有没有可能在后端直接构建完整的传播信息,后期使用时直接根据条件就可以查询出所需的数据,前端上报时也不用携带传播链信息,我们想到了图形数据库存储技术

??图形数据库是一种非关系型数据库,它应用图形理论存储实体之间的关系信息。在文章开头的那张传播图中,用户的行为数据其实可以归结为用户与海报之间的关系数据,这样,这个系统其实就包含两种实体:用户、海报,三种关系:用户打开海报、用户分享海报、用户之间的传播。在诸多图形数据库中,我们决定选择比较成熟、文档相对丰富的neo4j来做DEMO。采用neo4j的查询语法,很简单的就可以查询出所需数据,简单示例一下。

# 查询1度分享者
MATCH (u:User) - [:FORWARD] -> (p:Poster) RETURN u

# 查询浏览情况
MATCH (u:User) - [:OPEN] -> (p:Poster) RETURN u

??下图呈现基于neo4j存储的新系统时序图,在OAuth2授权的重定向过程中,建立User和Poster节点信息,以及二者之间的OPEN关系信息,并且对页面URL计算hash值(去除无用参数信息),然后将用户open_id和URL的hash值加到页面URL中返回给前端。用户分享时,把该用户的open_id作为parent字段值,加到分享链接中,新用户打开该链接时,会根据该值来建立User与User节点之间的SPREAD关系信息。在用户分享的事件中,做一次数据上报,携带open_id和页面URL的hash值即可,后端拿到信息后,便可以建立User与Poster之间的FORWARD关系信息。如此,便可以建立完整的微信分享追踪数据了。

??然而,一切并非预期的那么完美,在DEMO过程中,我们发现有两点问题不能很好的满足我们的需求:

  • 无法根据时间条件快速查询信息,比如查询出昨天的一度分享者。
  • 在查询用户间的关系时,会发生误判。比如在下图所示的传播关系中,UserA和UserC的传播关系是发生在海报PosterA上的,在PosterB上并没有,但是当我们尝试查询二度分享者时,会将UserA->UserC->PosterB误判为二度分享。
# 查询2度分享者
MATCH (u1:User) - [:SPREAD] -> (u2:User) - [:FORWARD] -> (p:Poster) RETURN u2, p

??虽然这些问题可以想办法绕过去,比如根据时间建立不同的实体节点等等,但是这样会把数据存储做复杂化,经过权衡,我们暂时搁置了这个方案。

3. 基于用户行为数据采集系统的方案

??在创业公司做数据分析(三)用户行为数据采集系统一文中,曾经提到早期的数据采集服务是分散在各个业务功能中的,后来我们重新构建了统一的用户行为数据采集系统。在完成这个系统后,我们开始考虑将上述的微信分享追踪系统并入其中,主要工作有:

  • 数据上报的流程与早期的系统一致,但是更换原有的上报方式,采用用户行为数据采集系统的方案统一上报微信分享的数据;
  • 数据接入Kafka后,一方面直接将原始数据存储到Elasticsearch,另一方面,以worker的形式来消费数据,根据相应的业务需求提取出所需的数据存入格式化数据表中,用于统计和奖励活动。当某个推广活动结束后,将其所属的worker停掉即可。

??通过这种方式,我们将数据上报和业务需求隔离开。数据方面,实时数据流在Kafka中,历史数据也在Elasticsearch中有存储;业务需求方面,来了一个新的需求后,我们只需添加一个新的worker来实现消费逻辑,活动结束后停掉worker。

(全文完,本文地址:http://blog.csdn.net/zwgdft/article/details/54314999

Bruce,2017/01/06

时间: 2024-08-06 16:03:48

创业公司做数据分析(五)微信分享追踪系统的相关文章

创业公司做数据分析(转载)

最近看到这个系列觉得不错,想转一下. 不管是小公司,还是大公司里面的不跟传统IT混的分析团队(就是我..),都可以借鉴. 创业公司做数据分析(一)开篇 创业公司做数据分析(二)运营数据系统 创业公司做数据分析(三)用户行为数据采集系统 创业公司做数据分析(四)ELK日志系统 创业公司做数据分析(五)微信分享追踪系统 创业公司做数据分析(六)数据仓库的建设 另外总结下最近的“工具栈” 讲故事:PPT / Keynote 理思路:MindNode / Axure / Sketch 展现层:Table

创业公司做数据分析(二)运营数据系统

??作为系列文章的第二篇,本文将首先来探讨应用层中的运营数据系统,因为运营数据几乎是所有互联网创业公司开始做数据的起点,也是早期数据服务的主要对象.本文将着重回顾下我们做了哪些工作.遇到过哪些问题.如何解决并实现了相应的功能. 早期数据服务 ??产品上线开始推广后不久,后台研发人员便会经常收到运营同事的私信:"能不能查一下有多少用户注册了,来自哪里?--..".几次之后,大家便觉得这样的效率太低了:研发人员需要在繁忙的开发任务中抽时间来做数据查询.统计,而运营同事则需要等很久才能拿到数

微信分享次数统计

作为系列文章的第五篇,本文重点探讨数据采集层中的微信分享追踪系统.微信分享,早已成为移动互联网运营的主要方向之一,以Web H5页面(下面称之为微信海报)为载体,利用微信庞大的好友关系进行传播,实现宣传.拉新等营销目的.以下图为例,假设有一个海报被分享到了微信中,用户A与B首先看到了这个海报,浏览后又分享给了自己的好友,用户C看到了A分享的海报,浏览后继续分享给了自己的好友.这便形成了一个简单的传播链,其中蕴含了两种数据: 行为,指的是用户对微信海报的操作,比如打开.分享. 关系,指的是在海报传

IOS ShareSDK实现分享——微信分享

最近领导让添加ios 微信分享视频的功能,之前做的只有微信分享本地图片的功能. 查看官网并没有找到答案,后来在其官网论坛中http://bbs.mob.com/thread-20938-1-1.html 这里面发现新版的sdk(v3.2.1)中才添加的微信分享本地文件(mp3.mp4.docx.pdf等)的功能.可以支持就好办了.. 使用集成好的第三方框架可以节省许多代码量. 注意:申请shareSdk的apply,还有各个平台的appkey和appsecert(这真是非常麻烦的事情啊) 集成S

微信分享—ios和安卓机制居然不一样!

实际项目中,在做微信分享追踪的时候,遇到了一个百思不得其解的问题. 在加入了用户分享追踪功能之后,页面已经加载完成的情况下,安卓分享功能没有任何问题,ios却总是分享失败. 关于ios和安卓设备的差别 项目需求是,我们需要对用户的分享行为做追踪,对用户从哪个人分享的链接进来的做记录.所以每个用户有一个唯一的分享码. 用户A分享出去,链接上带有他自己的分享码.用户B点进链接的一瞬间,把当前url上的分享码传给后端做记录,同时替换上自己的分享码. 我使用替换参数的方式是直接修改router的quer

cocos2d-x集成sharesdk做微信分享android,ios

白白手游专栏http://blog.csdn.net/u010229677 这些天做了一下cocos2d-x的微信分享功能,稍有心得,整理了一下,出了个文档,欢迎大家点击查看 http://download.csdn.net/detail/u010229677/7867383

Vue单页式应用(Hash模式下)实现微信分享

前端微信分享的基本步骤: 一.绑定域名: 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".这个不多说,微信开发的都应该清楚. 二.引入js文件: 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js.请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixi

微信分享相关

一.微信js-SDK说明文档 1.概述 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 此文档面向网页开发者介绍微信JS-SDK如何使用及相关注意事项 2.JSSDK使用步骤 2.1步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置&quo

分享影视系统开发

分享影视系统开发公司找<詹慧:137微1089电6705>,分享影视系统APP开发,分享影视系统软件开发,分享影视源码开发,现成案例支持定制. 一.分享影视系统介绍 分享影视APP是一款汇聚影音播放神器,影片免费在线观看,视频超快加载,多个营销广告位.支持后台缓存下载.多地区的影库和充值频道等多种功能.影视玩家必备项目. 二.分享影视系统玩法 1.打开 APP 即可体验观看 注册:选填推荐码 + 短信认证 + 手机验证码 (一台设备绑定一个账号) 登录:手机账号+密码登录 (密码不能通过后台修