浏览量统计有挺多种的,不乏像不蒜子、LeanCloud 等统计方式,但始终不能如意。
例如不蒜子无法导入/修改数据,浏览量是通过 href 来统计的,对「镜像站」的不友好,以及 Safari 上的抽风…
又像 LeanCloud 的哪麻烦的设置与「缓慢」的 API…
最终都让我放弃,偶然在 PRIN BLOG 发现可以利用 Google Analytics 的数据来进行浏览量,但需要部署在 VPS 上,见作者说部署到 Serverless 平台失败,就以为无法白嫖,直到 Spencer 的这篇博文出来。二话不说,开搞 😋!
详细教程可以看这篇博文,这里就简单复述一下呢
开启 Google Analytics API
可以按照 Google 官方教程 走,也可以直接按下面的步骤来。
setup tools 并根据提示进行设置,选择一个项目(或创建新的项目,比如 ga-hit-count),之后一路继续,就可以为我们这一项目开启 Google API 咯~
然后页面就会跳转到 Google API 的凭据设置页面,API 选择 Analytics Reporting API
,调用方法选择 网页服务器
,最后选择 不会使用 App Engine 或 Compute Engine
即可。
最后根据提示设置基本信息,例如设置服务账号名称(随意设置),选定「角色」为 Service Account User
,按继续后就将会有一个 json 文件下载下来
json 文件长这样,需要的几个信息都在这儿了
{ |
要让 API 访问到 Google Analytics 的数据,需要打开 Google Analytics 后台将 client_email 定义的邮箱作为新用户加入,这里有官方教程
记住,一定要保管好它们,不然丢了谁都不认你 🤪
部署到 Vercel
这里是用 Vercel 来部署 Serverless API 项目,贴个大佬项目的原地址 spencerwooo/ga-hit-count-serverless,大家 Fork 下来修改下 api/config.ts
里的配置就可以用了
修改 config.ts 的配置
/** |
这是配置文件的样子
这里就直接引用原文~(虽然本来就是与原文差不多的说
其中,这些内容我们都需要一一进行设置:
viewId
:是你的 Google Analytics 视图 ID,可以在 Google Analytics 后台的 Admin » View » View Settings 中找到;projectId
:是刚刚凭证 JSON 文件中的project_id
,直接按照刚刚的凭证填写即可;privateKey
:是通过 Vercel 环境变量获取到的 API 凭证私钥,这里不要更改;clientEmail
:是刚刚凭证 JSON 文件中的client_email
,直接按照刚刚的凭证填写即可;allFilter
:是通过 Google API 查询时的前缀过滤器,比如你的网站中文章路径以/post
开头,那么就可以设置为['/post']
。默认为['/20']
(因为我的文章路径是以/2020
或/2019
开头的);startDate
:是通过 Google API 查询时设定时间段的开始时间,设定一个比较久远的时间即可,默认为2010-01-01
。
这里千万千万不要直接将刚刚凭证中获取到的私钥直接粘贴进入 privateKey 一项之中,因为这样当我们将 config.ts 签入 git 之后,privateKey 将以明文形式保存,非常危险。
导入 Vercel
Vercel(这家伙又又又换名字了),用 GitHub 注册后,直接将刚刚 Fork 并修改好配置文件的项目导入即可,啥都不用管就是 Continue
导入完成后还需要设置 privateKey
,在项目的 Project Settings
- General
- Environment Variables
- Production
中添加一个
NAME
为PRIVATE_KEY
VALUE
为private_key
- 这个
private_key
是上面的哪个 json 里的对应值,需要注意的是要把\n
全部删除,换成换行(command + D 大胜利!)
- 这个
的变量
最后需要重新触发一次部署,随便 commit 点东西更新一下就行啦
调用 API
Vercel 应该会给你分配一个类似于 https://xxxx.vercel.app
的域名,在根域名后面添加 /api/ga
访问,看看是否会将 Google Analytics 里面全部路径与访问量拉取并以 JSON response 给出
这个请求方法是后面带个 ?page={WEBSITE_PAGE_PATH}
,其中 {WEBSITE_PAGE_PATH}
是你博文的相对路径,这样就会返回给定路径的浏览量啦 😆
例如现在的这篇博文,相对路径是 /posts/google-analytics-hit-count/
,那么请求的将是
https://xxxx.vercel.app/api/ga?page=/posts/google-analytics-hit-count/ |
⚠️ 注意:我设置了自定义域名,访问的将是这样的(你可以点进去看看)
它就会返回数据给你,现在我这篇博文的浏览量是 0
,返回的数据是下面这样的
[{"page":"/posts/google-analytics-hit-count/","hit":"0"}] |
原文有的就到这儿了,有了 API 那该怎么用呢?下面便是一个简单的使用方法
集成到 Hexo 主题
这下,API 有了,请求格式也有了,那么就可以将它集成在自己的主题里啦 😆
下面将以我现在使用的 Hexo 主题 hexo-theme-suka 为例
这个简单的 js 就开源到 GitHub 上了,这里是地址 Lufsx/ga-hit-count,之后会写点 README,最近在考试,没啥时间呢(没啥时间搞这些?)
现在的这个 js 有一些问题,但还用还是能用哒 🤣(有时间再完善呢
创建 EJS
首先根据原主题的规范,在 /layout/_plugin/
新建了个文件夹,用于存放所需要用到的 EJS 文件
接下来就是新建文件啦 🤪
先给它新建个 import_js.ejs
用来在头部引入 js
文件,传递一个已经搭建好的 API 地址的参数
下面是代码呢(菜鸡一个,如果有更好的写法,欢迎提出呀 🤣)
<script> |
前面四行是定义了一个变量 window.post_views_api
,值为主题配置文件中
ga_hit_count: |
它传递了你 API 所在的地址
后面的五行则是引入了 js 文件,顺便判断了下有无自定义 js 地址,没有就返回内置的,这个自定义地址在主题配置文件中长这样
vendors: |
接着在同目录下创建个 post-counter.ejs
<!-- GA Hit Count Post Views --> |
这里是直接复制主题带的另外一个浏览量统计的(懒
定义了一个 id 为 post-meta-views
的 <span>
包裹着 pv-counter
的 <span>
引入 EJS
全局引入的 EJS 文件是这个 /layout/_partial/source/footer.ejs
简单添加几句直接带走
+ /* GA Hit Count */ |
这里判断主题文件中的 enable
值是否为 true
,是则引入 _plugin/hit-count/import_js
我主题在博文页面引入统计所用的 EJS 文件是这个 /layout/_partial/post/header-info.ejs
简单添加几句再次带走 😆
+ <% if ( (theme.ga_hit_count.enable) ) { %> |
这里判断主题文件中的 enable
值是否为 true
,是则引入 _plugin/hit-count/post-counter
ga_hit_count: |
核心 js
引入都搞好啦,那么最核心的地方就是编写 js 了(虽然没啥技术含量,还实现的不太完美)
js 文件开源在 GitHub 上,这里是地址 Lufsx/ga-hit-count
相关作用与解释直接打注释上了(懒~
(async () => { |
js 的效果大概就是获取浏览量,获取完成后写入,再将元素设置为可见
成果
最后,主题配置文件是这样子的
ga_hit_count: |
最终效果就如你现在浏览的这一篇博文一样呢
碎碎念
终于又重上了浏览量统计啦
这个东西的好处就是直接使用 Google Analytics 数据,一个 Google Analytics 统计代码通吃
但数据更新不太及时呢,而且原 Google Analytics 又特别阻碍页面的加载,不过还好,可以使用 SukkaW/cloudflare-workers-async-google-analytics、giuem/ga-proxy 等解决方案
什么?你问我 macOS 应用推荐第二期去哪儿了?当然是咕了 🤪
不过已经在写了(指新建文件