一个基于LeanCloud的访问量统计工具

LeanCloud-Counter 项目简介

基于LeanCloud的访问量统计工具,理论上可以接入任意站点。在 Jekyll使用LeanCloud记录文章的访问次数 这篇文章的基础上,增加针对站点PV(访问量)、UV(访客数)的统计,以及访客地理位置(https://api.ip.sb)、UserAgent(UAParser.js)等信息的统计功能。相比原作者的方案主要有以下优点:

1、使用querySelectAll()替换jQuery的$

2、实现基于REST API, 不再依赖leancloud-storage

快速开始

1、在页面中引入以下JavaScript代码片段:

<script src="/leancloud-counter.min.js"></script> <script> (function () { new VisitorCounter().init({ appId: <Your appId>, //应用ID, 必输 appKey: <Your appKey>, //应用Key, 必输 region: '华北', //华东, 华北, 国际, 默认华北 domain: '', //自定义域名, 选填 collectIP: true, //是否收集IP及位置信息, 默认开启 collectUA: true //是否收集UserAgent, 默认开启 }); })(); </script>

2、在页面中加入以下HTML片段:

/* 页面PV */ <span id="lc_counter_value_page_pv"></span> /* 页面UV */ <span id="lc_counter_value_page_uv"></span> /* 站点PV */ <span id="lc_counter_value_site_pv"></span> /* 站点UV */ <span id="lc_counter_value_site_uv"></span>

3、在LeanCloud后台云引擎->部署模块内增加下面两个Hooks函数,并完成部署:

AV.Cloud.afterSave('VisitorRecord', async function(request) { var query = new AV.Query('VisitorCounter'); var page_url = request.object.get('page_url'); console.log('query page_url: ' + page_url); query.equalTo('page_url', page_url); return query.find().then(function (counters) { if (counters.length > 0){ counters[0].increment('page_uv'); console.log('increment UV of page_url: ' + page_url + ", " + counters[0].get('page_pv')); return counters[0].save() } }); }); AV.Cloud.afterUpdate('VisitorCounter', async function(request) { var page_url = request.object.get('page_url'); if(page_url.indexOf('//') == -1){ return; } var site_url = page_url.split('//')[1]; site_url = site_url.substring(0, site_url.indexOf('/')); console.log('now to update site PV/UV with: ' + site_url); if (request.object.updatedKeys.indexOf('page_pv') != -1) { var query = new AV.Query('VisitorCounter'); query.equalTo('page_url',site_url); query.find().then(function(counters){ if(counters.length>0){ counters[0].increment('page_pv'); console.log('update site PV of ' + site_url + ", " + counters[0].get('page_pv')); return counters[0].save(); } }); } else if (request.object.updatedKeys.indexOf('page_uv') != -1) { var query = new AV.Query('VisitorCounter'); query.equalTo('page_url',site_url); query.find().then(function(counters){ if(counters.length>0){ counters[0].increment('page_uv'); console.log('update site PV of ' + site_url + ", " + counters[0].get('page_uv')); return counters[0].save(); } }); } }); Q & A

Q:这可能是我见过最麻烦的Quick Start,尤其是第三点

A:如果不需要统计站点的PV/UV,其实是不需要第三点的,这样是不是相当地Quick啦

Q:为什么这里需要使用Hooks这种对使用者不太友好的东西

A:因为LeanCloud里使用的是Mongodb这种非关系型数据库,它无法使用Sum()这类聚合方法,而离线分析等高级用法只有商业版支持,况且我不想在客户端处理数据。

Q:这样统计出来的UVPV感觉不太准确啊,每次刷新都视为一次点击吗?

A:也许加入时间的判断逻辑会更好一点,可如果想做一个通用型的方案,这样子算是无功无过吧!

版权声明:

1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。
2、网站不提供资料下载,如需下载请到原作者页面进行下载。