fix(monitor): 抖音的时间戳是秒、小红书是毫秒,不换算会把 2026 年显示成 1970 年
上一个提交把作品发布日期透到界面之后,抖音那一行显示成 1970-01-22。查原始产物: 小红书 time = 1790923011000 → 毫秒 → 2026-10-02 ✓ 抖音 create_time = 1790574515 → 秒 → 2026-09-28 ✗(被当毫秒 → 1970-01-22) 抖音给的是**秒**。而且这条路径不只影响新增的发布日期 —— **评论的 create_time 走的是 同一条路**,所以抖音评论的时间一直是错的,只是之前界面上没显示出来,没人发现。 时间单位的换算正是 adapters 该管的事,所以加在那边: * `PlatformAdapter.time_scale`(小红书 1、抖音 1000)+ `to_ms()`,解析不出来返回 None 而不是伪造 0。 * ingest 用它换算作品的 published_at 和评论的 create_time。落库统一毫秒,展示层不必 关心来源。 * 已入库的数据要能自愈:published_at 和评论 create_time 原先都是**只写一次**的,换算 改对了老数据也修不回来。现在它们会在重采时跟着刷新(昵称早就是这么做的)。 测试 +1:抖音记录落库后 published_at 是 1790574515 * 1000,且年份是 2026 不是 1970。 dy 的 fixture 也改成用真实的秒值(原来写的是毫秒形态,所以测不出这个 bug)。 注意:库里那条抖音记录**仍带着错的值**,要等抖音下一次成功采集才会被修回来 —— 而它 现在正被平台风控挡着(account blocked),见下一条说明。
This commit is contained in:
+12
-2
@@ -334,7 +334,8 @@ async def _ingest_notes(
|
||||
creator_hash=adapter.note_field(record, "creator_hash") or "",
|
||||
creator_name=adapter.note_field(record, "creator_name") or "",
|
||||
source_kind=adapter.note_field(record, "source_kind") or "",
|
||||
published_at=_as_int(adapter.note_field(record, "published_at")),
|
||||
# 经 to_ms 换算:小红书给毫秒、抖音给秒,差 1000 倍。
|
||||
published_at=adapter.to_ms(adapter.note_field(record, "published_at")),
|
||||
first_seen_run_id=run.id,
|
||||
first_seen_at=now,
|
||||
last_seen_run_id=run.id,
|
||||
@@ -365,6 +366,11 @@ async def _ingest_notes(
|
||||
creator_name = adapter.note_field(record, "creator_name")
|
||||
if creator_name:
|
||||
note.creator_name = creator_name
|
||||
# 发布时间也刷。正常情况下它不会变,但**换算单位改过之后**(抖音是秒、
|
||||
# 小红书是毫秒),已经入库的那批只能靠重采修回来。
|
||||
published = adapter.to_ms(adapter.note_field(record, "published_at"))
|
||||
if published is not None:
|
||||
note.published_at = published
|
||||
note.last_seen_run_id = run.id
|
||||
note.last_seen_at = now
|
||||
|
||||
@@ -491,9 +497,13 @@ async def _ingest_comments(
|
||||
refreshed = adapter.comment_field(record, "creator_name")
|
||||
if refreshed:
|
||||
existing.nickname = refreshed
|
||||
# 时间同理:单位换算修好之后,老数据要重采才能纠正。
|
||||
created = adapter.to_ms(adapter.comment_field(record, "create_time"))
|
||||
if created is not None:
|
||||
existing.create_time = created
|
||||
continue
|
||||
|
||||
create_time = _as_int(adapter.comment_field(record, "create_time"))
|
||||
create_time = adapter.to_ms(adapter.comment_field(record, "create_time"))
|
||||
session.add(
|
||||
MonitorComment(
|
||||
task_id=run.task_id,
|
||||
|
||||
Reference in New Issue
Block a user