最终还是没有一条路走到黑。
中午在朋友的提醒下发现原始消息的json其实包含了链接对应博文的部分文本。
(text的截断规则不太明了,大概是保留第一个段落。)
也确认了包含微博链接的群聊消息都会有 url_objects 字段。
接下来就是这样提取两个信息:
- url_objects → status → user → screen_name
- url_objects → status → text
然后,按照一定的格式覆写回原来的content末尾。
简单来说就是,白忙活一上午后发现只需要下面这个function就能解决问题。
def insert_url_objects_text(records):
"""对含有 url_objects 的条目插入「←链接内容:@screen_name:text」"""
modified = 0
for rec in records:
url_objs = rec.get("url_objects")
if not isinstance(url_objs, list) or not url_objs:
continue
additions = []
for uo in url_objs:
screen_name = safe_get(uo, "status", "user", "screen_name")
text = safe_get(uo, "status", "text")
if not screen_name or not text:
continue
text_clean = str(text).replace("\n", " ").strip()
additions.append(f"@{screen_name}:{text_clean}")
if additions:
suffix = " ←链接内容:" + " ".join(additions)
content = str(rec.get("content") or "").rstrip()
rec["content"] = content + suffix
modified += 1
return modified
已经合到原来的采集脚本里了w