fix(export_sns): _load_comments 过滤已撤回的点赞/评论 (#120)
微信对撤回的点赞/评论不硬删, 只在 SnsMessage_tmp3 行上打 del_status 标记. 老 _load_comments 直接 SELECT 不带任何 WHERE, 结果导出的 likes/comments 里混着撤回行 — 等于 "对方撤回的赞还能在本地导出里看到", 违反用户预期.
修复: SQL 加 WHERE COALESCE(del_status, 0) = 0
- COALESCE 兜底: 老 schema NULL 视作 0 (保留)
- WHERE 而非 Python 端过滤: 大 db 少传 row
- 函数签名/返回结构不变
- 缺列时仍走现有 try/except 路径, 返回 {} 不崩
测试: LoadCommentsTests 3 case (撤回过滤 / NULL 保留 / 缺列兜底), 全合成 sqlite 无 PII. baseline 17 → 20 全过.
承接 #119 的 SNS 导出可靠性线: #119 修 "老 XML 让整行帖子丢失", 本 PR 修 "互动里混入已撤回 row".
This commit is contained in:
@@ -601,13 +601,19 @@ def _parse_timeline_xml(content_xml):
|
||||
|
||||
|
||||
def _load_comments(conn):
|
||||
"""加载 SnsMessage_tmp3 评论/点赞,按 feed_id 分组"""
|
||||
"""加载 SnsMessage_tmp3 评论/点赞,按 feed_id 分组。
|
||||
|
||||
`del_status != 0` 表示对方撤回该互动 —— 微信本地不真删,只设删除标记,
|
||||
不过滤会把已撤回的点赞 / 评论也导出。COALESCE 兜底老 schema 缺列时
|
||||
`NULL` 视作 0。
|
||||
"""
|
||||
comments = {}
|
||||
try:
|
||||
rows = conn.execute(
|
||||
"SELECT feed_id, create_time, type, from_username, from_nickname,"
|
||||
" to_username, to_nickname, content"
|
||||
" FROM SnsMessage_tmp3 ORDER BY create_time"
|
||||
" FROM SnsMessage_tmp3 WHERE COALESCE(del_status, 0) = 0"
|
||||
" ORDER BY create_time"
|
||||
).fetchall()
|
||||
for feed_id, ctime, ctype, from_u, from_n, to_u, to_n, content in rows:
|
||||
if feed_id not in comments:
|
||||
|
||||
Reference in New Issue
Block a user