import { api } from "../api.js";
import { escapeHtml } from "../format.js";
function weightRows(weights) {
return Object.entries(weights || {})
.map(([metric, value]) => `
数据来源与更新
- 所有数据来自 B 站以及部分 MCN 统计网站。
- 新视频人工入库;库内视频数据每天更新一次;最新数据日:${escapeHtml(data.data_date || "暂无")}。
- 当前视频数据覆盖 ${data.snapshot_days} 天${data.snapshot_first_date ? `(起始 ${escapeHtml(data.snapshot_first_date)})` : ""};历史快照无法从 B 站回填,只能从部署当天开始积累。
- 咻咻满粉丝数据的起点日期为 ${fansStart}。
${data.preview ? `当前为预览数据,不影响真实数据库。
` : ""}
三个时间概念
- 发布时间(
pubdate):视频在 B 站发布的时刻。
- 入库时间(
first_seen):本站第一次录入该视频的时刻。
- 快照日期(
stat_date):每天更新一次视频的播放与互动数据。缺失日不插值,曲线直接断开。
因此,同一个视频的“发布后 7 天数据”和“入库后 7 天数据”可能不是同一段区间;详情页会同时展示发布时间与入库时间。
指标口径
- 播放 / 投币 / 收藏 / 评论:直接取当日快照;弹幕与转发不单列,已并入“互动”。
- 互动:点赞 + 投币 + 收藏。综合热度也使用全部七项指标,按配置权重加权。
- 互动率:(点赞 + 投币 + 收藏) / 播放;播放不足 100 不计算。
- 综合热度:每项先
log1p,再按中位数与 IQR 做稳健标准化,最后加权求和。分数只用于同一批数据内排序,不能跨日期比较。
- 内容效率:播放 / 内容小时。内容小时 = 视频总时长(多 P 为各 P 之和)÷ 3600。榜单里的单条视频用收缩后的估计:
(播放 + κ·μ₀) / (小时 + κ),κ 默认 ${analytics.video_shrink_minutes} 分钟、μ₀ 为全库播放/小时;详情页保留原始播放/小时。
- 互动效率:互动 / 内容小时,互动口径与收缩方式同上。
- UP 内容效率:把该 UP 的全部视频合并后计算,并用 Gamma–Poisson 经验贝叶斯向全库均值收缩,避免单条视频或极小样本冲榜。收缩强度 κ ${analytics.shrink_minutes ? `固定为 ${analytics.shrink_minutes} 分钟` : "取全库 UP 总内容分钟的中位数"}。
- 累计触达:总播放。它是规模指标,不代表吸引力;高产 UP 排在前列是正常结果。
- 分 P:
pages 是分 P 数,duration 是该 bvid 各 P 时长之和。B 站不公开单 P 播放,因此没有单 P 榜;分 P 数只用于详情展示,不参与排序。
榜单筛选
- 内容效率与互动效率只统计时长 ≥ ${analytics.min_duration_seconds} 秒的视频,排除结构不同的短视频与切片。
- 只统计发布满 ${analytics.maturity_days} 天的视频;reaction 视频通常在发布前两天完成数据积累,两周内接近平台期,过早比较会系统性低估新视频。
- 不引入无界的“年龄惩罚”:超过成熟窗口后不再按天加分或扣分。
duration 为空或 ≤ 0 的视频(通常只在失效视频上出现)不进入任何时长相关榜,也不做插补。
- 播放低于 ${analytics.min_view_for_ranking} 的视频不进入内容效率、互动效率与综合热度榜;这是为了避免小样本噪声冲榜。
综合热度权重
${weightRows(data.heat_weights)}
权重是主观配置,可在配置文件中调整;页面展示的是当前生效值。
UP 粉丝快照
- 视频入库时记录一次 UP 当前粉丝数,后续更新视频数据不刷新 UP 的入库时粉丝数。
- 历史视频的粉丝数是回填值,会标记
backfilled;它与真实的“入库时”存在时间差,暂不用于榜单排序。
- 当前覆盖:${followers.videos_covered} / ${followers.videos_total} 条视频(${coverage}%),涉及 ${followers.ups_tracked} 个 UP;缺失 ${followers.videos_missing} 条,可运行
app.py backfill-followers 补齐。
已知局限
- 播放是累计值,受发布时间影响;效率榜用成熟窗口过滤,但无法完全消除历史推荐差异。
- B 站不公开完播率与单 P 播放,内容小时是“供给时长”,不是“实际观看时长”。
- 多 P 可能让同一用户产生多次播放计数,本站不单独校正,属于已知偏差。
- 粉丝数可能包含不活跃账号;粉丝快照暂不参与任何榜单。
- 近 7/30 日增长仍要跨日快照。近 1 日:当日发布按 0 起算;更早发布的新入库按入库时播放量起算,需当天至少两次采样。样本不足时显示提示,不伪造 0。
技术信息
- 数据库 schema 版本
${data.schema_version}。
- ${data.preview ? "当前为预览数据,不影响真实数据库。" : "当前为真实数据库。"}
`;
}