工作台赛道筛选白名单:三榜只保留所需赛道(含「全部」)
- dsh-data.js 新增 RANK_KEEP 白名单(生活记录/生活vlog/小剧场/亲子/美食/旅行,覆盖账号榜与作品榜两套赛道枚举) - collectCategories:赛道下拉=白名单∩实际出现,按白名单顺序(当期 0 条赛道不显示) - getRanking:hot/likes 条目无条件白名单过滤(选「全部」也只保留白名单条目),再按请求赛道过滤;week 不变 - 验证:week 250/5 赛道不变;hot 下拉 4 赛道全 29 条;likes 下拉 4 赛道全 28 条;服务 5500 运行
This commit is contained in:
1 parent
250d51c8c2
commit
d22310ffb3
2 files changed
+31
-11
No files matched your search
@@ -343,6 +343,12 @@ const RANK_FILE_RE = {
|
||||
likes: /^抖音周榜_点赞榜_(\d{4}-\d{2}-\d{2})\.json$/,
|
||||
};
|
||||
|
||||
// 工作台所需赛道白名单(09-03 定:与账号周榜 douyin-top-account 保留 5 赛道同口径)
|
||||
// 口径差异:账号榜 type=「生活vlog」;作品榜条目 category=「生活记录」——并集同时放行。
|
||||
// 生效范围:hot/likes(全品类文件)赛道下拉与列表(含「全部」)只保留白名单条目;week 文件名赛道天然在白名单内。
|
||||
const RANK_KEEP = ['生活记录', '生活vlog', '小剧场', '亲子', '美食', '旅行'];
|
||||
const RANK_KEEP_SET = new Set(RANK_KEEP);
|
||||
|
||||
function rankFilePath(dir, name) {
|
||||
return dir ? path.join(RANKING_DIR, dir, name) : path.join(RANKING_DIR, name);
|
||||
}
|
||||
@@ -373,17 +379,21 @@ function listRankFiles(board) {
|
||||
return out.sort((a, b) => b.date.localeCompare(a.date));
|
||||
}
|
||||
|
||||
// week:文件名赛道;hot/likes:条目 category 并集(「全部」文件读 list 去重)
|
||||
// 赛道下拉:白名单内且当期数据实际出现者,按 RANK_KEEP 顺序输出
|
||||
// week:文件名赛道;hot/likes:条目 category 并集
|
||||
function collectCategories(board, files) {
|
||||
if (board === 'week') return [...new Set(files.map((f) => f.category))];
|
||||
const set = new Set();
|
||||
for (const pf of files) {
|
||||
try {
|
||||
const d = JSON.parse(fs.readFileSync(rankFilePath(pf.dir, pf.name), 'utf8'));
|
||||
for (const it of (d.list || [])) { const c = String(it.category || '').trim(); if (c) set.add(c); }
|
||||
} catch (e) {}
|
||||
const found = new Set();
|
||||
if (board === 'week') {
|
||||
for (const f of files) found.add(f.category);
|
||||
} else {
|
||||
for (const pf of files) {
|
||||
try {
|
||||
const d = JSON.parse(fs.readFileSync(rankFilePath(pf.dir, pf.name), 'utf8'));
|
||||
for (const it of (d.list || [])) { const c = String(it.category || '').trim(); if (c) found.add(c); }
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
return [...set].sort();
|
||||
return RANK_KEEP.filter((c) => found.has(c));
|
||||
}
|
||||
|
||||
function rankingMeta(board = 'week') {
|
||||
@@ -416,8 +426,12 @@ function getRanking({ board = 'week', date = '', category = '', sortBy = '', ord
|
||||
for (const pf of selFiles) {
|
||||
try { items = items.concat(JSON.parse(fs.readFileSync(rankFilePath(pf.dir, pf.name), 'utf8')).list || []); } catch (e) {}
|
||||
}
|
||||
if (board !== 'week' && category && category !== '全部') {
|
||||
items = items.filter((it) => String(it.category || '').trim() === category);
|
||||
// 全品类单文件(hot/likes):①白名单过滤(含「全部」也只保留所需赛道条目)②按请求赛道条目过滤
|
||||
if (board !== 'week') {
|
||||
items = items.filter((it) => RANK_KEEP_SET.has(String(it.category || '').trim()));
|
||||
if (category && category !== '全部') {
|
||||
items = items.filter((it) => String(it.category || '').trim() === category);
|
||||
}
|
||||
}
|
||||
// 默认排序键随榜:week=综合得分 / hot=点赞 / likes=新增点赞(同分按排名升序)
|
||||
const DEF_KEY = board === 'week' ? 'comprehensiveScore' : board === 'hot' ? 'likeCount' : 'add_digg_count';
|
||||
|
||||
Reference in new issue
Block a user