修复视频列表表头假记录+时长显示:export_video_map 过滤非数字 aweme_id;fmtDuration 兼容 mm:ss 文本

- 根因1:export_video_map.py 未过滤表头行(aweme_id='视频ID' 非空被当数据导入)
- 根因2:fmtDuration 只认秒数,Number('01:31')=NaN→全部显示 '-';库存/接口为 mm:ss 文本
- 修复:aweme_id 纯数字校验过滤表头;fmtDuration 双兼容(数字秒+mm:ss/hh:mm:ss);清理库内表头假记录
- 验证:导出 136 条无异常,库 total=136/表头0/无时长0,接口 duration 正常显示
This commit is contained in:
maogeigei committed 2026-09-01 10:20:44 +08:00
1 parent d455ddd01a
commit b34929e7db
3 files changed
+30 -2

No files matched your search

@@ -18,7 +18,26 @@ const fmtTitleQ = (t) => {
const rest = s.slice(idx).trim();
return '《' + title + '》' + (rest ? '\n' + rest : '');
};
const fmtDuration = (v) => { const s = Number(v); if (!Number.isFinite(s) || s <= 0) return '-'; const m = Math.floor(s / 60); const sec = Math.round(s % 60); return m > 0 ? `${m}分${sec}秒` : `${sec}秒`; };
// 时长格式化:兼容「数字秒」与「mm:ss / hh:mm:ss 文本」(xlsx 视频时长列为 mm:ss 文本,09-01 修复:旧实现只认秒数导致全部显示 '-')
const fmtDuration = (v) => {
if (v == null || String(v).trim() === '') return '-';
const s = String(v).trim();
if (/^\d+(\.\d+)?$/.test(s)) {
const n = Number(s);
if (!Number.isFinite(n) || n <= 0) return '-';
const m = Math.floor(n / 60); const sec = Math.round(n % 60);
return m > 0 ? `${m}分${sec}秒` : `${sec}秒`;
}
const parts = s.split(':').map(Number);
if (parts.length < 2 || parts.some((x) => !Number.isFinite(x))) return '-';
if (parts.length === 2) {
const [m, sec] = parts;
if (m === 0) return `${sec}秒`;
return `${m}分${String(sec).padStart(2, '0')}秒`;
}
const [h, m, sec] = parts;
return h > 0 ? `${h}时${String(m).padStart(2, '0')}分${String(sec).padStart(2, '0')}秒` : `${m}分${String(sec).padStart(2, '0')}秒`;
};
const fmtTime = (t) => { if (!t) return '-'; const d = new Date(t); if (Number.isNaN(d.getTime())) return String(t); const p = (n) => String(n).padStart(2, '0'); return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`; };
function pagerHtml(total, page, pageSize, onChange) {
@@ -35,7 +35,8 @@ def main():
if not row or len(row) < 3:
continue
aweme_id, title = row[1], row[2]
if aweme_id is None or not title:
# 过滤表头/非数据行:aweme_id 必须是纯数字(抖音视频ID),表头行「视频ID」等非数字行直接跳过(09-01 修复:表头曾被当数据导入)
if aweme_id is None or not str(aweme_id).strip().isdigit() or not title:
continue
rec = {
"aweme_id": str(aweme_id).strip(),