fix: 修复 Umami v3 API 浏览量统计

This commit is contained in:
mckero committed 2025-11-21 12:27:49 +08:00
1 parent 294fe4c092
commit af0a425c72
4 files changed
+43 -50

No files matched your search

+6 -4
View File
@@ -122,14 +122,15 @@ const { remarkPluginFrontmatter } = await entry.render();
// 第一步:获取网站ID和token
const shareResponse = await fetch(`${umamiConfig.baseUrl}/api/share/${umamiConfig.shareId}`);
if (!shareResponse.ok) {
throw new Error('获取分享信息失败');
throw new Error(`获取分享信息失败: ${shareResponse.status}`);
}
const shareData = await shareResponse.json();
const { websiteId, token } = shareData;
// 第二步:获取统计数据
const currentTimestamp = Date.now();
const statsUrl = `${umamiConfig.baseUrl}/api/websites/${websiteId}/stats?startAt=0&endAt=${currentTimestamp}&unit=hour&timezone=${encodeURIComponent(umamiConfig.timezone)}&url=%2Fposts%2F${slug}%2F&compare=false`;
// 使用 path=eq. 前缀进行精确匹配
const statsUrl = `${umamiConfig.baseUrl}/api/websites/${websiteId}/stats?startAt=0&endAt=${currentTimestamp}&unit=hour&timezone=${encodeURIComponent(umamiConfig.timezone)}&path=eq./posts/${slug}/&compare=false`;
const statsResponse = await fetch(statsUrl, {
headers: {
@@ -138,11 +139,12 @@ const { remarkPluginFrontmatter } = await entry.render();
});
if (!statsResponse.ok) {
throw new Error('获取统计数据失败');
throw new Error(`获取统计数据失败: ${statsResponse.status}`);
}
const statsData = await statsResponse.json();
const pageViews = statsData.pageviews?.value || 0;
// Umami v2/v3 兼容:直接读取 pageviews
const pageViews = statsData.pageviews || 0;
const displayElement = document.getElementById(`page-views-${slug}`);
if (displayElement) {
+7 -5
View File
@@ -102,14 +102,15 @@ const className = Astro.props.class;
// 第一步:获取网站ID和token
const shareResponse = await fetch(`${umamiConfig.baseUrl}/api/share/${umamiConfig.shareId}`);
if (!shareResponse.ok) {
throw new Error('获取分享信息失败');
throw new Error(`获取分享信息失败: ${shareResponse.status}`);
}
const shareData = await shareResponse.json();
const { websiteId, token } = shareData;
// 第二步:获取统计数据
const currentTimestamp = Date.now();
const statsUrl = `${umamiConfig.baseUrl}/api/websites/${websiteId}/stats?startAt=0&endAt=${currentTimestamp}&unit=hour&timezone=${encodeURIComponent(umamiConfig.timezone)}&url=%2Fposts%2F${slug}%2F&compare=false`;
// 使用 path=eq. 前缀进行精确匹配
const statsUrl = `${umamiConfig.baseUrl}/api/websites/${websiteId}/stats?startAt=0&endAt=${currentTimestamp}&unit=hour&timezone=${encodeURIComponent(umamiConfig.timezone)}&path=eq./posts/${slug}/&compare=false`;
const statsResponse = await fetch(statsUrl, {
headers: {
@@ -118,12 +119,13 @@ const className = Astro.props.class;
});
if (!statsResponse.ok) {
throw new Error('获取统计数据失败');
throw new Error(`获取统计数据失败: ${statsResponse.status}`);
}
const statsData = await statsResponse.json();
const pageViews = statsData.pageviews?.value || 0;
const visits = statsData.visits?.value || 0;
// Umami v2/v3 兼容
const pageViews = statsData.pageviews || 0;
const visits = statsData.visitors || 0;
const displayElement = document.getElementById('page-views-display');
if (displayElement) {
+5 -4
View File
@@ -56,12 +56,12 @@ const config = profileConfig;
// 第一步:获取网站ID和token
const shareResponse = await fetch(`${umamiConfig.baseUrl}/api/share/${umamiConfig.shareId}`);
if (!shareResponse.ok) {
throw new Error('获取分享信息失败');
throw new Error(`获取分享信息失败: ${shareResponse.status}`);
}
const shareData = await shareResponse.json();
const { websiteId, token } = shareData;
// 第二步:获取全站统计数据(不指定url参数获取全站数据)
// 第二步:获取全站统计数据(不指定path参数获取全站数据)
const currentTimestamp = Date.now();
const statsUrl = `${umamiConfig.baseUrl}/api/websites/${websiteId}/stats?startAt=0&endAt=${currentTimestamp}&unit=hour&timezone=${encodeURIComponent(umamiConfig.timezone)}&compare=false`;
@@ -72,11 +72,12 @@ const config = profileConfig;
});
if (!statsResponse.ok) {
throw new Error('获取统计数据失败');
throw new Error(`获取统计数据失败: ${statsResponse.status}`);
}
const statsData = await statsResponse.json();
const pageviews = statsData.pageviews?.value || 0;
// Umami v2/v3 兼容
const pageviews = statsData.pageviews || 0;
const statsElement = document.getElementById('site-stats');
if (statsElement) {