← 返回首页

提取群聊消息url指向的正文

发布时间: 2025-10-09 22:23(北京时间)

摘要: 作者回顾了从群聊消息中提取微博链接正文的过程,最初因误解数据格式而白费时间,后通过分析JSON结构发现可直接从url_objects字段获取用户昵称和文本,并实现了一个Python函数来格式化插入内容。整体语调带有自嘲和效率反思,强调从错误中学习。

标签: 数据提取, JSON解析, 代码优化, 自嘲, 反思, 效率, 技术笔记

字数: 286

原文链接: /7402396589/Q8nlMayCT

最终还是没有一条路走到黑。
中午在朋友的提醒下发现原始消息的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