684 字
3 分钟
静态博客也想展示文章浏览量?当然可以!
2025-06-18
加载中...

引言#

如果你用过WordPress,Halo等动态博客框架,你大概会在用户视角访问博文的时候看到浏览量这个信息。

这个原理很简单,因为动态博客依赖于一个VPS,只需要让用户每次访问的时候给浏览量+1即可。

那么如果我们是静态博客呢?

我们可以依赖一些第三方服务,比如Umami Cloud。在你的静态博客的head注入一个js,这样你就可以看到你的站点分析了,类似下图

现在我们确实可以看到每个文章(即/posts/xxx)的访问量了,但是我们要如何展示给用户呢?

使用Umami API查询#

这个API太煞笔了,API文档到处乱扔,调用接口每一页都不一样。但是我已经帮你们摸清楚了😋

首先我们要创建一个API Key

接下来获取你的站点ID,请不要泄露!否则你的站点统计数据可能会不再真实!

拼接URL,尝试手动调用。参考文档: https://umami.is/docs/api/website-stats-api

curl --location 'https://api.umami.is/v1/websites/你的站点ID/pageviews?startAt=0&endAt=1750177628313&unit=year&timezone=Asia/Shanghai&url=要查询的路径' \
--header 'x-umami-api-key: 你的Umami Cloud API Key'

这里解释几个关键Params,其他的照搬

startAt:统计开始时间。Unix时间戳,我们填写为0让Umami从1970年开始统计

endAt:统计结束时间。Unix时间戳,我们可以使用 Date.now() ,即当前时间,和startAt参数联动即可实现统计总浏览量

url:要查询的路径,填写为你的文章页去除了Host的路径,如 /posts/hello 。注意!Umami会将 /posts/hello/posts/hello 视为两个不同的路径,请注意你的博客框架是否使用 /

最终你大概会得到一个这样的响应,如图

{
    "pageviews": [
        {
            "x": "2024-12-31T16:00:00Z",
            "y": 12932
        }
    ],
    "sessions": [
        {
            "x": "2024-12-31T16:00:00Z",
            "y": 3253
        }
    ]
}

这就代表你的这篇文章的浏览量为12932次,而访问数为3253

Tips:浏览量记录为任意用户只要访问了则计数一次。而访问数记录不会记录单IP多次重复访问和同一时间段的多次请求不同页面

需要注意,Umami Cloud API有速率限制:每个 API 密钥限制为每 15 秒 50 次调用。

你当然可以创建多个API做API池,但是我们不能直接将API Key暴露给用户,所以无论如何,我们都需要一个反代API来帮我们查询

使用Cloudflare Worker代理查询#

具体代码就不写了,AI时代自己实现吧。

大致逻辑为帮你查询然后记录到KV设置缓存(防止Umami API到达速率限制)

Over,享受它吧!最终效果:

静态博客也想展示文章浏览量?当然可以!
https://afo.im/posts/static-view/
作者
AcoFork
发布于
2025-06-18
许可协议
CC BY-NC-SA 4.0