不蒜子.rs

简洁的网站访客统计服务 · Rust 高性能实现

-
站点访问 (PV)
-
站点访客 (UV)
-
本页访问

特性

零外部依赖
单一二进制
SQLite 持久化
内存级性能
兼容原版 busuanzi
完整管理后台

API 接口

POST /api 统计并返回 PV/UV
GET /api 仅获取 PV/UV(不计数)
PUT /api 仅提交统计(不返回)
GET /ping 健康检查
请求头:需携带 x-bsz-referer 为当前页面完整 URL。
访客识别:通过 Cookie(busuanziId)自动管理,与原版 busuanzi 兼容。

响应格式

{
  "success": true,
  "data": {
    "site_pv": 1234,   // 站点总访问量
    "site_uv": 567,    // 站点独立访客数
    "page_pv": 89      // 当前页面访问量
  }
}

快速接入

只需几行代码即可为你的网站添加访客统计:

发送请求
const res = await fetch('https://bsz.saop.cc/api', {
  method: 'POST',
  credentials: 'include',
  headers: { 'x-bsz-referer': location.href }
});
解析数据
const { data } = await res.json();
// data.site_pv  - 站点 PV
// data.site_uv  - 站点 UV
// data.page_pv  - 页面 PV
展示数据
document.getElementById('pv').textContent = data.site_pv;

完整示例

复制以下代码到你的 HTML 页面,修改域名即可使用:

<!-- 访客统计展示 -->
<p>本站总访问 <span id="pv">-</span> 次,访客 <span id="uv">-</span> 人</p>
<p>本页访问 <span id="ppv">-</span> 次</p>

<script>
(async () => {
  const res = await fetch('https://bsz.saop.cc/api', {
    method: 'POST',
    credentials: 'include',
    headers: { 'x-bsz-referer': location.href }
  });
  const { success, data } = await res.json();
  if (success) {
    document.getElementById('pv').textContent = data.site_pv;
    document.getElementById('uv').textContent = data.site_uv;
    document.getElementById('ppv').textContent = data.page_pv;
  }
})();
</script>

仅获取数据(不计数)

使用 GET 方法可以获取统计数据但不增加计数,适用于管理页面或仪表盘:

const res = await fetch('https://bsz.saop.cc/api', {
  headers: { 'x-bsz-referer': 'https://your-site.com/page' }
});
const { data } = await res.json();

静默统计

使用 PUT 方法只提交访问记录不返回数据,适用于仅需记录不展示的场景:

fetch('https://bsz.saop.cc/api', {
  method: 'PUT',
  credentials: 'include',
  headers: { 'x-bsz-referer': location.href }
});

评论