在 Astro 博客中优雅使用 51.la 统计数据

news/2025/10/24 20:06:47/文章来源:https://www.cnblogs.com/zxc7563598/p/19164148

作为老牌网站流量统计服务商,51.la 提供每月高达 1000 万次的免费统计额度,非常适合个人博客或小型网站使用。不过,51.la 默认的统计展示是通过嵌入 JS 文件自动渲染的,这种展示方式对美观性和自定义性有限,对于追求页面整洁或者想要自己设计展示风格的博主来说不太方便。

我之所以想自己处理 51.la 的统计,是因为我希望更直观地看到有多少人访问我的博客,了解访客的访问情况,从而改进内容和布局。经过尝试,我找到了一个方法:解析 51.la 的 widget JS 数据,自行在 Astro 中渲染统计数据,既保留统计功能,又可以完全控制展示效果。下面分享我的完整经验。


配置文件管理

在 Astro 中,一般会有一个全局配置文件,用来集中管理各种配置。我们可以把 51.la 的相关信息放在一起,示例:

export const metrics: { enable: boolean; sdk: string; id: string; ck: string; widget: string } = {// 51.la 统计开关enable: true,// 统计网站的配置信息,在后台获取// See: https://v6.51.la/report/setup/params/statisticssdk: 'https://sdk.51.la/js-sdk-pro.min.js',id: 'xxxxxxxxxxxxxxxx',ck: 'xxxxxxxxxxxxxxxx',// 数据挂件 javascript 地址// See: https://v6-widget.51.la/v6/xxxxxxxxxxxxxxxx/quote.jswidget: 'https://v6-widget.51.la/v6/xxxxxxxxxxxxxxxx/quote.js'
}

如果你的项目中没有配置文件,可以在 src 下创建一个 TS 文件,然后在 tsconfig.jsonpaths 中添加,例如:

"@/site-config": ["src/site.config.ts"]

这样,在 Astro 页面中就可以直接引入:

---
import { metrics } from '@/site-config'
---

集中管理配置的好处是,一旦需要修改统计信息,只需改一处即可,方便维护。


在入口加载统计

为了统计用户访问情况,我们需要在页面入口加载 51.la 的 SDK。不同主题的入口文件可能不同,Astro 默认的入口是 src/layouts/Layout.astro。如果不确定,可以从 pages/index.astro 开始反推去找包含完整 HTML 结构的布局文件。在布局文件的 <head> 中加入:

{metrics.enable && <script is:inline src={metrics.sdk} />}
<script is:inline type='module' data-astro-rerun define:vars={{ metrics: metrics }}>if (metrics.enable) {LA.init({ id: metrics.id, ck: metrics.ck })}
</script>

注意:对应的文件顶部需要引入配置:import { metrics } from '@/site-config'

这样,每次用户访问页面时都会触发 51.la 的统计,后台就能记录访客数据。


创建数据展示组件

为了美观,我们可以自己在 components 里创建一个组件(例如 Metrics.astro)来展示数据,这样就不依赖 51.la 默认的 JS 渲染。示例:

---
import { metrics } from '@/site-config'
---<div id='widget'>加载中...
</div><script is:inline type='module' data-astro-rerun define:vars={{ metrics: metrics }}>if (metrics.enable && metrics.widget) {fetch(metrics.widget).then((res) => res.text()).then((data) => {let num = data.match(/(<\/span><span>).*?(\/span><\/p>)/g)if (!num) {console.warn('51.la 数据匹配失败')return}num = num.map((el) => el.replace(/(<\/span><span>|<\/span><\/p>)/g, ''))const titles = ['最近活跃','今日人数','今日访问','昨日人数','昨日访问','本月访问','总访问量']const container = document.getElementById('widget')let html = ''for (let i = 0; i < num.length; i++) {html += `<div>标题:${titles[i]}</div>`html += `<div>内容:${num[i]}</div>`}container.innerHTML = html}).catch((err) => {console.error('51.la 数据获取失败:', err)document.getElementById('widget').innerHTML = '加载失败'})}
</script>

样式可以根据自己的需求进行美化,例如网格布局、卡片样式等。这里的重点是把数据准确展示出来,让访客统计信息可视化。


总结

通过这种方式,你可以:

  • 保留 51.la 的统计功能,无需自己搭建后端统计系统。
  • 自定义统计数据显示方式,让数据展示更美观、更符合博客风格。
  • 在 Astro 项目中简单集成,配置和组件化管理清晰。

我之所以选择自己解析 widget 数据,是希望在博客上直观看到访客情况,了解每天有多少人访问、哪些内容更受欢迎。这样可以更有针对性地优化博客内容,同时也享受了 51.la 提供的免费统计额度。

注意:如果 51.la 的 widget JS 结构有改动,正则匹配可能需要更新。但在目前版本下,这种方法非常稳妥。


这样,你就可以既“白嫖” 51.la 免费流量统计,又能自由控制数据展示效果,同时清楚了解自己的博客访问情况。

可以来我的博客查看效果:hejunjie.life

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

申威服务器安装Java11(swjdk-11u-9.ky10.sw_64.rpm)详细操作步骤(附安装包)

申威服务器安装Java11(swjdk-11u-9.ky10.sw_64.rpm)详细操作步骤(附安装包)​这是申威架构(国产芯片,常见于Kylin V10等国产系统)专用的 ​Java 11 版本(RPM安装包)​,包名为 java-11.0.7-swjdk-11u-9.ky10.…

str.endswith() 类似的方法

在Python中,与str.endswith()类似的方法(主要涉及字符串的开头/结尾检查、子串搜索等)有很多,以下是核心方法及其功能对比: 1. 开头检查:str.startswith()功能:检查字符串是否以指定前缀开头,返回True/False。…

深度剖析OpenHarmony AI Engine:开发板端侧大模型推理插件机制全链路拆解 - 实践

深度剖析OpenHarmony AI Engine:开发板端侧大模型推理插件机制全链路拆解 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

Linux下的拼音输入法 (3)

此贴简介libgooglepinyin-0.1.2,刚看了几分钟(持续更新中): data/下: 730 2012年 2月 3日 CMakeLists.txt227 2012年 2月 3日 googlepinyin.pc.in3.5M 2012年 2月 3日 rawdict_utf16_65105_freq.be.txt3.5M 2012年…

P2606 [ZJOI2010] 排列计数 分析

题目概述 题目链接:https://www.luogu.com.cn/problem/P2606。 称一个 \(1 \sim n\) 的排列 \(p_1,p_2, \dots ,p_n\) 是 Magic 的,当且仅当 \[\forall i \in [2,n],p_i > p_{\lfloor i/2 \rfloor} \]计算 \(1 \s…

实用指南:MacOS - Clang使用bits/stdc++.h - 非官方(竞赛用) - 通用方法

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

cgroup

cgroupcgroup v1使用流程: mount -t tmpfs cgroup_root /sys/fs/cgroup mkdir -p /sys/fs/cgroup/cpu mkdir -p /sys/fs/cgroup/memory mount -t cgroup -o cpu none /sys/fs/cgroup/cpu mount -t cgroup -o memory n…

设计模式:代码界的 “光之巨人” 养成指南(附 C++ 实战)

参考 https://bbs.huaweicloud.com/blogs/397606 https://refactoring.guru/design-patterns/catalog 一、概述 1.1、什么是设计模式 官方定义说得有点绕:“一套被反复使用、多数人知晓、分类编目的代码设计经验总结”…

详细介绍:17-Language Modeling with Gated Convolutional Networks

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

数字人:数字人公司排行榜及技术深度剖析

数字人企业:探索虚拟与现实的融合新纪元 数字人企业的创新之路与市场机遇解析 数字人企业排行榜及技术深度剖析 正文: 在当今科技飞速发展的时代,数字人企业正成为推动数字化转型的重要力量。它们不仅重塑了人机交互…

【同余最短路】学习笔记

例题 \(1\):P3403 跳楼机:给定正整数 \(h,x,y,z\),求有多少 \(d\in[1,h]\) 满足 \(ax+by+cz=d-1\),其中 \(a,b,c\) 为非负整数。这道题第一眼给我的印象是一道数论题,但仔细想了想发现做不了。注意到 \(x,y,z\) 的…

ESP32-S3入门第七天:UART串口通信与设备交互 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

数字人:数字人公司深度解析与未来展望

数字人企业 数字人企业新趋势:虚拟与现实的融合探索 数字人企业深度解析与未来展望 在当今科技飞速发展的时代,数字人企业正成为推动创新与变革的重要力量。数字人,作为虚拟与现实交互的桥梁,不仅改变了人机交互的…

CSP/NOIP 复习:单调栈

最近模拟赛打的都不是太好,先随便复习复习吧,马上就要 CSPS 了,我可以考好的。 这里放一些单调栈的题目,笛卡尔树先不说,这个我已经忘了,后天复习一下。 本体 栈中维护有单调性的数据,入栈时维护这个单调性,这…

数字人企业:数字人公司排行榜深度解析

数字人企业新纪元:创新科技重塑未来生态 探秘数字人企业的核心驱动力与市场前景 数字人企业排行榜深度解析与趋势洞察 正文: 在数字化浪潮席卷全球的今天,数字人企业正成为科技领域的一颗新星,推动着虚拟与现实的深…

数字人公司:数字人新趋势技术驱动与市场前景解析

数字人企业 数字人企业新趋势:技术驱动与市场前景解析 数字人企业排行榜与深度点评 在当今科技飞速发展的时代,数字人企业正成为人工智能和虚拟交互领域的热门焦点。这些企业通过创新技术,推动着虚拟数字人在娱乐、…

算法分析--生成排列

排列简介全排列,有顺序要求。 递归实现如何实现查找第u位置有哪些数字可以用,选择查到的第一个,填上去。if(u > n){for(int i=1;i<=n;i++)cout<<path[i]<<" ";cout<<endl; }再去…

三大安全认证授权协议深度对比:OAuth、OpenID Connect与SAML

本文深入解析OAuth、OpenID Connect和SAML三大主流安全认证协议的技术原理、架构差异与应用场景,帮助开发者在Web应用中实现安全可靠的身份验证与授权机制,涵盖协议流程、安全机制对比及最佳实践建议。安全认证与授权…

数据绑定相关概念理解

中文译本将 Data Binding 译为了数据绑定,很大程度上其实是拼音音译,没有实际意义。WPF 中的Binding 更多地是表达一种桥梁关系。Binding 对象的两端,分别是源(Source)和目标(Target),源即数据来源,目标就是数据要…