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:
+17
-1
@@ -36,7 +36,7 @@
|
||||
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Dict, Mapping, Pattern, Tuple
|
||||
from typing import Any, Dict, Mapping, Optional, Pattern, Tuple
|
||||
|
||||
from .platforms import PLATFORM_XHS
|
||||
|
||||
@@ -90,6 +90,18 @@ class PlatformAdapter:
|
||||
comment_fields: Mapping[str, str]
|
||||
cover_fields: Tuple[str, ...]
|
||||
|
||||
# 时间戳换算成毫秒要乘的数。**小红书给毫秒、抖音给秒**,差 1000 倍;不换算的话
|
||||
# 2026 年的作品会显示成 1970 年(实测踩到过:抖音作品发布日期显示 1970-01-22,
|
||||
# 抖音评论的时间同理)。库里统一存毫秒,展示层才不用关心来源。
|
||||
time_scale: int
|
||||
|
||||
def to_ms(self, value: Any) -> Optional[int]:
|
||||
"""把平台的时间戳换算成毫秒;解析不出来返回 None(不伪造 0)。"""
|
||||
try:
|
||||
return int(value) * self.time_scale
|
||||
except (TypeError, ValueError):
|
||||
return None
|
||||
|
||||
def note_url(self, note_id: str) -> str:
|
||||
"""作品的可点击链接。拼法与监控目标的链接是同一个形状 —— 通知里给的就是
|
||||
人能直接点开看的那一个。"""
|
||||
@@ -154,6 +166,8 @@ XHS = PlatformAdapter(
|
||||
"parent_comment_id": "parent_comment_id",
|
||||
},
|
||||
cover_fields=("image_list",),
|
||||
# 小红书的时间戳本来就是毫秒(实测 time=1790923011000)。
|
||||
time_scale=1,
|
||||
)
|
||||
|
||||
# 抖音的 id 形状与小红书完全不同(见 media_platform/douyin/help.py:101-164):
|
||||
@@ -201,6 +215,8 @@ DY = PlatformAdapter(
|
||||
"parent_comment_id": "parent_comment_id",
|
||||
},
|
||||
cover_fields=("cover_url",),
|
||||
# 抖音给的是**秒**(实测 create_time=1790574515,即 2026-09-28)。
|
||||
time_scale=1000,
|
||||
)
|
||||
|
||||
ADAPTERS: Dict[str, PlatformAdapter] = {
|
||||
|
||||
Reference in New Issue
Block a user