微信分享次数统计、微信公众号分享关注统计

article/2025/9/22 0:36:34

     作为系列文章的第五篇,本文重点探讨数据采集层中的微信分享追踪系统。微信分享,早已成为移动互联网运营的主要方向之一,以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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

    下图呈现基于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
  • 1
  • 2
  • 1
  • 2
微信分享次数统计、微信公众号分享关注统计
微信分享次数统计、微信公众号分享关注统计

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

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

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

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

    通过这样的改进,我们暂时解决了前端上报混乱和后端业务逻辑膨胀的问题,将数据上报和业务需求隔离开。数据方面,实时数据流在Kafka中,历史数据也在Elasticsearch中有存储;业务需求方面,来了一个新的需求后,我们只需添加一个新的worker来实现消费逻辑,活动结束后停掉worker。来源:www.vkbang.com

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/tqIAVg7l.shtml

相关文章

微信公众号分享配置无效。。分享出来的只是纯链接了,如何自定义微信公众号的分享

微信公众号分享配置无效。。分享出来的只是纯链接了 挺久没接微信公众号的项目开发了,最近突然接了一个,结果微信自定义分享给我整懵了。原本配置的好好的,屡试不爽的代码,居然死活不生效,开启debug,开发者…

android开发中微信公众号功能,微信公众号分享与收藏开发文档(Android应用)

微信分享及收藏是指第三方App通过接入该功能,让用户可以从App分享文字、图片、音乐、视频、网页至微信好友会话、朋友圈或添加到微信收藏。 微信分享及收藏功能已向全体开发者开放,开发者在微信开放平台帐号下申请App并通过审核后,即可获得微…

微信公众号自定义分享

效果图: 1、登录微信公众号(需要已经认证过的公众号) 进入“设置与开发”→“公众号设置”→“功能设置”→“JS接口安全域名”,将文件下载下来,上传至与将要分享的页面相同的域名服务器中,上传成功后再在下…

缓存和CPU和内存和磁盘的关系

在选购CPU总听人说缓存,一级缓存,二级缓存,三级缓存但是这个缓存到底是什么,有什么作用,他与内存到底有什么关系,我们今天就来探讨一下,我主要目的是学习,写文章也是让学习更深入&am…

Hadoop性能调优、YARN的内存和CPU配置

转: https://blog.csdn.net/dehu_zhou/article/details/52808752 https://blog.csdn.net/dxl342/article/details/52840455 Hadoop为用户作业提供了多种可配置的参数,以允许用户根据作业特点调整这些参数值使作业运行效率达到最优。 一 应用程序编写…

你还不懂硬盘,内存和CPU的关系 ?(程序员入门)

你好我是辰兮,很高兴你能来阅读,本篇文章小结了硬盘,内存和CPU的关系,献给初学者,分享获取新知,大家共同进步。 文章目录 一、硬盘内存CPU图二、硬盘讲解三、内存的简介四、拓展A盘和B盘 一、硬盘内存CPU图…

CPU 与 内存之间的三级缓存的实现原理

一. CPU 与 Memory 内存之间的三级缓存的实现原理 1.1 cache 存在的原理 引入 Cache 的理论基础是程序局部性原理,包括时间局部性和空间局部性。时间局部性原理即最近被CPU访问的数据,短期内CPU 还要访问(时间)&#…

一、CPU、内存、硬盘之间的关系

本人坚持更新C语言和数据结构知识,可以收藏+关注随时了解😜😜😜 目录 三者关系 其实内存在这里起了两个作用: 总结 三者关系 当我们在计算机上执行一个程序时,首先由输入设备向CPU发出操作指…

计算机内存怎么与频率匹配,怎么算cpu与内存频率匹配

2018-03-02 在286、386和早期的486电脑里,CPU的速度不是太高,和内存保持一样的速度。后来随着CPU速度的飞速提升,内存由于电气结构关系,无法象CPU那样提升很高的速度(就算现在内存达到400、533,但跟CPU的几个G的速度相…

CPU/内存/缓存

1、CPU 和各级缓存、内存、硬盘之间的关系 为什么会出现多级缓存呢? 说的简单一点因为 CPU 的频率太快了,而若是没有缓存,直接读取内存中的数据又太慢了,我们不想让 CPU 停下来等待,所以加入了一层读取速度大于内存但…

【高频内存与主板内存频率和CPU内存频率之间的关系】

很多小白经常问我说我的CPU标着内存频率支持2400啊,那我买3200是不是浪费了,还有的说我主板内存最高支持4000啊,那我是不是要买4000的内存啊。总之小白们都不清楚高频内存的频率到底是由谁决定的,又由谁限制,高频的性能…

汇编:CPU与内存的读写关系

要想学好汇编语言,首先要对CPU等硬件结构有一定的了解。 软件\程序的执行过程: 最为关键的是需要了解CPU和内存 在学习汇编语言过程中,遇到的绝大部分指令都是跟内存、CPU有关的 文章目录 1、CPU总线2、CPU内存3、8086CPU的寻址方式4、CPU内…

显卡内存和计算机内存,显存和内存的关系和区别

显存和内存是什么关系?显存和内存有什么区别?接下来我们来讨论一下。通常说到显存和内存的时候,还会说一下缓存、存储,我们一起介绍一下。 1、显存 即显卡内存,也叫帧缓存,是用来存储显卡芯片处理过或者即将提取的渲染数据。直白点就是存储图形信息的东东。 像我们平时在…

Linux查看CPU和内存使用情况

top命令 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 – 用基于 top 的命令&#xff0…

CPU、内存、硬盘和主板的关系

一、内存 内存的正式叫法是内存储器,以此来与外存储器区分开。物理上它安装在计算机内部,通常安装在主板上,所以称为内存。 一般情况下我们将8个元器件看做一个单位,即使表示很小的数, 例如 1,也需要8个&…

对cpu和内存的简单理解

对cpu和内存的简单理解 1.前端总线: cpu利用总线来跟内存,硬盘,输入输出设备等进行数据交流 总线:总线就是一根根导线的集合 总线的种类: 数据(进行传输的数据),地址(地址进行寻址操作),控制总线(控制读写操作) 地址总线: 地址总线的宽度决定cpu的寻址能力,单次能寻找地址…

计算机的内存和cpu,内存与CPU二者之间的关系_Intel服务器CPU_服务器产业-中关村在线...

“在一起,在一起”,相信这也是很多人希望的结果,无论是从技术角度,还是从空间角度,似乎二者都有着很多理由被放在一起完成任务。但是,二者为何一直没有“在一起”呢?也许这句歌词可以回答原因&a…

计算机主机是cpu与内存,内存条和CPU之间的关系是什么

您想知道内存和CPU之间的关系是什么吗?这是来自Qiutian.ZqNF.Com的有关内存和cpu之间关系的内容。欢迎阅读! 内存和CPU之间的关系是什么? cpu负责计算和处理,而内存则用于数据交换。当程序或操作员向cpu发出指令时,这些…

cpu和内存的关系(CPU,内存和cache之间的关系)

CPU、内存、主板三者间关系、插座形式、安装注意事项 这种问题很难回答,你可以找一本书看,呵呵 。我只能说出一点,CPU读取数据速度很慢,因为要从硬盘读取,所以用内存来读取。但是用 内存卡,段电后会丢失数据…

计算机中CPU、内存、缓存的关系

CPU(Central Processing Unit,中央处理器) 内存(Random Access Memory,随机存取存储器) 缓存(Cache) CPU、内存和缓存之间有着密切的关系,它们共同构成了计算机系统的核…