微信H5传播监测说明文档
一 总体说明:
H5传播监测是通过在H5页面中植入监测代码,监测一个H5页面传播效果.
二 项目地址:
http://192.168.9.201/usvn/svn/Crawler/trunk/Prime_Crawler_StatisticsService
目前发布在:
192.168.8.75:/data/server/tomcats/tomcat7_8080_StatisticsService/
三 任务创建说明:
1. 基本监测(必选)
在需要监测的页面的所有script标签之前添加:
<script type="text/javascript"
src="http://statistics.prime-research.com.cn/StatisticsService/jsp/report.jsp?prTaskId=TASK_ID">
</script>
- TASK_ID由创建任务后获取, 但目前没有实现生成TASK_ID功能.
- 可优化:
- 把src中的StatisticsService去掉
- 重命名
report.jsp
,如改为pre.jsp
,monitor.jsp
,init.jsp
等.
- 完整示例:
<html> <head> <title>Base Monitor Demo</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="http://statistics.prime-research.com.cn/StatisticsService/jsp/report.jsp?prTaskId=sometaskid"> </script> </head> <body> <h3>Prime H5 Base Monitor Demo</h3> <br> Please right click to view page source. </body> </html>
2. 按键监测(可选)
在添加基本监测代码的基础上,如果想监测H5页面中按钮点击效果,请添加如下代码:
PR.sendBtnName("监测按钮"); //这里填写你对按钮的命名
- 完整示例:
<html> <head> <title>Base Monitor Demo</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="http://statistics.prime-research.com.cn/StatisticsService/jsp/report.jsp?prTaskId=sometaskid"> </script> </head> <body> <h3>Prime H5 Base Monitor Demo</h3> <br> <button id="myBtn">TestButton</button> <br> <br> Please right click to view page source. <script type="text/javascript"> var myBtn = document.getElementById( "myBtn" ); myBtn.onclick = function ( ){ PR.sendBtnName("监测按钮"); //这里填写你对按钮的命名 } </script> </body> </html>
3.微信传播监测(可选)
在添加基本监测代码的基础上,如果想监测H5在微信中传播的数据,请添加如下代码:
3.1 H5页面接入微信JS-SDK:
3.2 配置内容分享接口(请参照微信JS-SDK官方说明文档)
wx.config({
debug: , // 必填,是否开启debug模式
appId: , // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见微信JS-SDK官方说明文档附录1
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQZone',
'onMenuShareQQ',
'onMenuShareWeibo'
]
});
3.3 使用内容分享接口(请参照微信JS-SDK官方说明文档)
wx.ready(function () {
wx.onMenuShareAppMessage({
title: share_title,
desc: share_desc,
link : PR.linkChange(share_link),
imgUrl: share_img,
success : function () {
PR.sendShare("appmessage");
}
});
wx.onMenuShareTimeline({
title: share_title,
desc: share_desc,
link : PR.linkChange(share_link),
imgUrl: share_img,
success : function () {
PR.sendShare("timeline");
}
});
wx.onMenuShareQZone({
title: share_title,
desc: share_desc,
link : PR.linkChange(share_link),
imgUrl: share_img,
success : function (res) {
PR.sendShare("qzone");
}
});
wx.onMenuShareQQ({
title: share_title,
desc: share_desc,
link : PR.linkChange(share_link),
imgUrl: share_img,
success : function () {
PR.sendShare("qq");
}
});
wx.onMenuShareWeibo({
title: share_title,
desc: share_desc,
link : PR.linkChange(share_link),
imgUrl: share_img,
success : function () {
PR.sendShare("weibo");
}
});
完整示例: 微信JS-SDK需要在服务端实现, 无法给出示例, 请参考微信JS-SDK官方说明文档.
四 数据库及表
- 数据库 :
192.168.9.221:3306/PRIME_STATISTICS - 数据表 :
- ACCESS_INFO 访问信息表
- CLIENT_INFO 客户端信息表
- LEAVE_INFO 离开信息表
- SHARE_INFO 分享信息表
- USER_INFO 微信用户信息表
- 具体表结构请请直接到数据库查看
五 与数说相关图表结合
PV、UV、分享走势
- PV, UV, 分享在数据库中中的存储说明:
- 在ACCESS_INFO表中, 一条记录为一个PV
- 在ACCESS_INFO表中, 不同的PR_CK_ID确定不同的User
- 在SHARE_INFO表中, 一条记录为一次分享
PV SQL:
SELECT COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID'
- 如需要查询指定日期, 指定文章...等的PV, 请在SQL中加上相应的查询条件 AND DAY_ID=? AND ARTICLE_URL=? AND ...
UV SQL:
SELECT COUNT(DISTINCT PR_CK_ID) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' OR: SELECT PR_CK_ID,COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' GROUP BY PR_CK_ID
- 如需要查询指定日期, 指定文章...等的UV, 请在SQL中加上相应的查询条件 AND DAY_ID=? AND ARTICLE_URL=? AND ...
- 分享数 SQL:
SELECT count(*) FROM SHARE_INFO WHERE PR_TASK_ID='SOME_TASK_ID'
- 如需要查询指定日期, 指定文章...等的分享数, 请在SQL中加上相应的查询条件 AND DAY_ID=? AND ARTICLE_URL=? AND ...
传播层级
- 传播层级说明
- 实现了微信传播监测才有传播层级
- 传播层级在数据库在的字段为PR_LEVEL
- 数据库中默认的初始传播层级为0
- 传播层级SQL
SELECT COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND PR_LEVEL=SOME_PR_LEVEL OR: SELECT PR_LEVEL,COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' GROUP BY PR_LEVEL
分页详情
- 分页详情说明:
- 监测系统会识别当前文章的url并记录在ACCESS_INFO表的ARTICLE_URL字段中
- 分页详情 PV SQL:
SELECT COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND ARTICLE_URL=SOME_ARTICLE_URL OR: SELECT ARTICLE_URL,COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' GROUP BY ARTICLE_URL
- 分页详情 UV SQL:
SELECT COUNT(DISTINCT PR_CK_ID) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND ARTICLE_URL=SOME_ARTICLE_URL
分页详情 IP数 SQL:
- IP记录在CLIENT_INFO, 现在看起来这样不方便查询, 后续考虑把CLIENT_INFO表的内容并入ACCESS_INFO表.
- 把CLIENT_INFO表与ACCESS_INFO表对应起来的字段是VISIT_ID, VISIT_ID是一次访问唯一标识.
SELECT COUNT(DISTINCT ACCESS_INFO.PR_CK_ID) FROM ACCESS_INFO INNER JOIN CLIENT_INFO ON ACCESS_INFO.VISIT_ID=CLIENT_INFO.VISIT_ID WHERE ACCESS_INFO.PR_TASK_ID='SOME_TASK_ID' AND ACCESS_INFO.ARTICLE_URL='SOME_ARTICLE_URL'
- 分页详情 分享数 SQL:
SELECT count(*) FROM SHARE_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND ARTICLE_URL='SOME_ARTICLE_URL' OR: SELECT COUNT(SHARE_INFO.ID) FROM ACCESS_INFO INNER JOIN SHARE_INFO ON ACCESS_INFO.VISIT_ID=SHARE_INFO.VISIT_ID WHERE ACCESS_INFO.PR_TASK_ID='SOME_TASK_ID' AND ACCESS_INFO.ARTICLE_URL='SOME_ARTICLE_URL'
分页详情 跳出率 SQL:
- PR_SESSION_ID说明:
- 每一次访问都有一个PR_SESSION_ID, 如不关闭页面, 刷新,跳转到其它页面PR_SESSION_ID不变.
- 可以根据每个PR_SESSION_ID最后一次出现时对应的文章URL确定跳出的URL
先把跳出URL找出来: SELECT ARTICLE_URL FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' GROUP BY PR_SESSION_ID ORDER BY ID DESC 再COUNT(*) 每个跳出URL
停留时长分布
- PR_SESSION_ID说明:
- 停留时长说明
- 数据库中不直接记录停留时长, 而是ACCESS_INFO表中记录访问开始的时间, 在LEAVE_INFO中记录离开的时间, 两者相减得到停留时长.
- 停留时长分布 SQL
SELECT a.PR_TASK_ID, a.VISIT_ID,(l.LEAVE_TIMESTAMP-a.TIMESTAMP_ID) AS stay_time FROM ACCESS_INFO a INNER JOIN LEAVE_INFO l ON a.VISIT_ID=l.VISIT_ID WHERE a.PR_TASK_ID='SOME_TASK_ID'
访问时间分布
- 访问时间分布说明
- 页面每次被访问都会有一次记录插入ACCESS_INFO表, 并且有相应的访问时间timestamp, hourid, dayid, 等.
- 访问时间分布 SQL
SELECT COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND HOUR_ID=SOME_HOUR_ID
PV-微信内来源
- PV-微信内来源说明
- PV-微信内来源记录在ACCESS_INFO表中的FROM_TYPE字段
- 字段取值: 1:单人对话; 2:微信群; 3:朋友圈; 4:公众号文章; 0:其它
- PV-微信内来源 SQL
SELECT COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND FROM_TYPE=SOME_FROM_TYPE
分享去向
- 分享去向说明
- 分享去向记录在SHARE_INFO表中的SHARE_TYPE字段
- 分享去向 SQL
SELECT COUNT(*) FROM SHARE_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND SHARE_TYPE=SOME_SHARE_TYPE
微信传播图
- 可以通过PR_CK_ID与FROM_PR_CK_ID确定传播关系,PR_CK_ID为当前用户的唯一标识, FROM_PR_CK_ID为当前文章来源用户的唯一标识.
- 可以先确定第一个PR_CK_ID, 查看后续有没有FROM_PR_CK_ID与第一个的PR_CK_ID相同, 如果有, 则表示后续的那篇文章是第一个用户分享出来的.
关键传播用户
- PR_CK_ID唯一确定用户.
- 如果有授权信息, 则查看USER_INFO, 通过USER_INFO表中的PR_CK_ID与其它信息关联.
渠道投放效果
- PV
SELECT CHANNEL_ID,COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND CHANNEL_ID='SOME_CHANNEL_ID'
- UV
SELECT CHANNEL_ID,CLIENT_ID,COUNT(*) FROM ACCESS_INFO WHERE PR_TASK_ID='SOME_TASK_ID' AND CHANNEL_ID='SOME_CHANNEL_ID' GROUP BY CLIENT_ID
PV-地域分布
- CLIENT_INFO表中的LOCATION字段为地域信息, 具体SQL语句
SELECT CLIENT_INFO.LOCATION,COUNT(*) FROM ACCESS_INFO INNER JOIN CLIENT_INFO ON ACCESS_INFO.VISIT_ID=CLIENT_INFO.VISIT_ID WHERE ACCESS_INFO.PR_TASK_ID='SOME_TASK_ID' GROUP BY LOCATION
PV-移动终端品牌分布
- 该功能未完善
- 移动终端品牌分布记录在CLIENT_INFO表中的PHONE_TYPE字段
- SQL参照 PV-地域分布
用户标签
- 该功能未实现
性别分布
SELECT SEX,COUNT(*) FROM USER_INFO GROUP BY SEX
PV-APP分布
- PV-APP分布记录在CLIENT_INFO表中的APP_TYPE字段
- SQL参照 PV-地域分布
PV-操作系统分布
- PV-操作系统分布记录在CLIENT_INFO表中的OS字段
- SQL参照 PV-地域分布
六 用户授权相关说明
- 用户授权项目地址: http://192.168.9.201/usvn/svn/Crawler/trunk/Prime_Crawler_WxWebService
- 目前发布在:
92.168.8.75:/data/server/tomcats/tomcat7_8070_WxWebService - 授权页面:
http://wxweb.prime-research.com.cn/WxWebService/jsp/index.jsp
这个url可以测试分享,用户等监测, 可以查看源码源码看看是怎么实现的. - 微信用户授权官方文档:
http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html