# Spec v1 · 其他社媒搜索 - Twitter/X（v7.4.1）

> 业务规格权威来源 · 公共上下文：`other_social_search_common_context_v1.md`
>
> 上游输入来源：`input_v3.md`

---

## §零 功能概述与公共约定

### 0.1 版本信息

| 属性 | 内容 |
|------|------|
| 版本号 | v7.4.1 (Spec v1) |
| 修订日期 | 2026-03-18 |
| 涉及平台 | WEB（Desktop First） |
| 涉及模块 | 其他社媒搜索 / Twitter 频道详情页 |

### 0.2 模块列表

| 模块 ID | 模块名称 | 核心职责 |
|---------|---------|---------|
| M1 | Twitter 搜索框架继承 | 在 `740` 旧框架内接入真实 Twitter 搜索 |
| M2 | Twitter 结果卡与筛选 | 定义结果卡内容、筛选结构、详情跳转 |
| M3 | Twitter 频道详情页 | 定义页头与四分区业务规则 |

### 0.3 全局业务规则

- **框架继承**：`741` 搜索侧必须沿用 `740`「其他社媒搜索」页面骨架，不重做整页结构。
- **改动范围**：本期只改 Twitter 链路，Facebook 维持 `740` 现状。
- **对象切换**：Twitter 搜索对象从“关联展示”切换为“真实 Twitter 账号”。
- **站内闭环**：Twitter 链路需从“站内占位 + 站外跳出”升级为“站内发现 + 站内深看”。
- **详情页定位**：Twitter 详情页是标准频道详情页，不是搜索结果的展开层。
- **直达访问**：本期支持 Twitter 详情页直达访问，但 URL 结构暂不在本 Spec 中写死。
- **主闭环**：本期优先做顺“发现 → 进入详情 → 看懂并判断”。
- **后续动作**：收藏、联系网红属于必要动作锚点，但本 Spec 不重定义其后续业务承接逻辑。

### 0.4 本期明确不做

- 不改 Facebook 搜索能力。
- 不重做「其他社媒搜索」整页框架。
- 不在本期强行落地新的频道质量评分模型。
- 不在本期强行落地合作价格 / CPM 计算模型。
- 不在本期重做收藏、联系网红等后续动作链路。

---

## §一 M1 · Twitter 搜索框架继承

### 1.1 页面结构继承规则

Twitter 搜索页必须沿用以下结构顺序：

1. 平台切换区
2. 搜索区
3. 一级筛选区
4. 筛选抽屉 / 其他增强能力
5. 结果列表区

### 1.2 平台切换规则

- 平台切换仍保留 `Facebook / Twitter` 两个平台。
- `741` 中选择 Twitter 时，结果列表必须返回真实 Twitter 账号结果。
- `741` 中选择 Facebook 时，继续走 `740` 既有能力，不做联动改造。

### 1.3 搜索对象定义

- Twitter Tab 下的主结果对象定义为 **Twitter 账号**。
- 搜索召回、结果展示、详情页跳转，均以 Twitter 账号作为主对象。
- 旧版依赖 YouTube 关联来表达 Twitter 信息的方式，在 Twitter Tab 下不再作为主链路。

### 1.4 结果列表组织规则

- 结果列表仍保留旧框架下的高信息密度结构。
- 但 Twitter 结果行中的主身份区、主内容区、主跳转目标必须替换为 Twitter 链路。
- 若账号存在其他平台关联信息，可继续作为辅助识别信息展示，但不得替代 Twitter 主结果本身。

### 1.5 搜索结果默认排序

- 搜索结果默认使用**综合排序**。
- 综合排序的产品语义是兼顾账号可发现性与判断效率，而不是单纯按最新或单纯按热度。

---

## §二 M2 · Twitter 结果卡与筛选

### 2.1 结果卡主任务

Twitter 结果卡优先服务以下三件事：

1. 让用户识别当前账号是谁。
2. 让用户快速判断账号是否值得继续看。
3. 让用户决定是否进入详情页。

### 2.2 结果卡信息结构

结果卡第一版必须包含以下信息：

#### 2.2.1 身份识别区

- 头像
- 频道名
- `@handle`

#### 2.2.2 基础画像区

- 频道类别
- 频道地区

#### 2.2.3 核心判断区

- 粉丝数
- 内容总数
- 平均互动率
- 预估曝光量

### 2.3 近期内容预览规则

结果卡允许展示近期贴文预览，其规则如下：

- 若内容带媒体，优先展示缩略图。
- 若内容无媒体，展示文本卡。
- 近期内容预览必须来自 Twitter 内容本身，不得继续沿用旧版关联平台内容。

### 2.4 详情页跳转规则

结果卡中只有以下区域承担进入 Twitter 详情页的职责：

- 头像
- 频道名
- `@handle`

其他区域默认不整卡跳转详情页。

### 2.5 一级筛选规则

搜索框附近必须保留以下三个主筛选项：

- 频道类别
- 频道地区
- 粉丝量

其定位为高频、低认知负担的一级筛选。

### 2.6 筛选抽屉规则

筛选抽屉承载完整筛选体系。

#### 2.6.1 频道组

- 语言
- 最后更新日期
- 平均互动率
- 预估曝光量
- 平均观看量
- 平均点赞量
- 平均收藏量
- 平均评论量

### 2.7 搜索侧保留规则

- 收藏入口若当前已存在于结果卡，则继续保留视觉入口。
- 收藏逻辑沿用现有模块，不在本 Spec 内定义新的收藏业务流程。
- 若某筛选项最终受限于数据可用性，必须在实现时明确降级，而不能静默失效。
- 受众画像筛选不属于本期真实交付能力，但保留在抽屉中用于功能曝光。
- 受众画像筛选在本期以整组置灰 + “敬请期待”方式承接。

### 2.8 结果卡字段来源映射

| 展示项 | 字段 / 来源 | 类型 | 规则 |
|------|-------------|------|------|
| 头像 | `avatar` | 直接字段 | 用于身份识别与详情入口 |
| 频道名 | `username` | 直接字段 | 允许与 handle 不同 |
| `@handle` | `alias` | 直接字段 | 详情入口主锚点 |
| 频道地区 | `location` / `country` | 直接字段 | 展示优先 `location`，筛选优先 `country` |
| 粉丝数 | `followers` | 直接字段 | 搜索卡核心指标 |
| 内容总数 | `posts_number` | 直接字段 | 搜索卡核心指标 |
| 最近更新时间 | `generated_at` | 直接字段 | 优先用于抽屉筛选，不强制外显在卡片主区 |
| 平均互动率 | 推文聚合结果 | 聚合字段 | 使用实时聚合口径，不依赖预计算字段 |
| 预估曝光量 | 推文聚合结果 / 业务计算结果 | 聚合字段 | 当前不锁死最终计算公式 |
| 频道类别 | 现有分类体系 / 内容标签派生 | 派生字段 | 不以 raw `category` 字段是否为空作为唯一前提 |
| 近期内容预览 | `description` / `thumbnails` / `pub_date` | 直接字段 | 有图走媒体预览，无图走文本卡 |

### 2.9 结果卡布局规则

Twitter 结果卡第一版应保持以下分层：

1. **左侧身份区**
   - 头像
   - 频道名
   - `@handle`
   - 收藏入口（如当前列表已有）
2. **中部判断区**
   - 类别、地区
   - 粉丝数、内容总数
   - 平均互动率、预估曝光量
3. **右侧内容预览区**
   - 展示近期 Tweet 预览
   - 支持媒体卡 / 文本卡两种形态

### 2.10 并列与辅助信息规则

- 旧框架中若仍需保留其他平台关联信息，可将其作为辅助识别层展示。
- 辅助平台信息不得抢占 Twitter 作为主对象的视觉层级。
- 右侧近期内容区不得继续展示其他平台内容来冒充 Twitter 近期内容。

### 2.11 搜索结果空态与降级规则

- 搜索空结果需要区分两类场景：
  - **无搜索条件**：返回默认推荐/热门账号列表作为默认结果态。
  - **有搜索条件但无召回**：展示“暂无搜索结果”的空态占位图。
- 无媒体预览时，必须回退为文本卡，不允许空白占位。
- 无类别派生结果时，类别位允许隐藏或以空态样式处理，不得展示错误类别。
- 无平均互动率 / 预估曝光量时，必须以“暂无数据”或等价方式降级，不得展示误导性默认值。
- 受众画像筛选不属于本期真实交付能力，但保留在抽屉中用于功能曝光。
- 受众画像筛选在本期以整组置灰 + “敬请期待”方式承接。

### 2.12 筛选字段来源映射

#### 2.12.1 一级筛选

| 筛选项 | 字段 / 来源 | 类型 | 规则 |
|--------|-------------|------|------|
| 频道类别 | 分类体系 / 内容标签派生 | 派生字段 | 不以 raw `category` 是否为空作为唯一前提 |
| 频道地区 | `country` / `location` | 直接字段 | 筛选优先 `country`，展示优先 `location` |
| 粉丝量 | `followers` | 直接字段 | 支持区间筛选 |

#### 2.12.2 抽屉筛选

| 筛选项 | 字段 / 来源 | 类型 | 规则 |
|--------|-------------|------|------|
| 语言 | 账号 / 内容语言字段 | 直接或聚合字段 | 若口径冲突，以最终数据组口径为准 |
| 最后更新日期 | `generated_at` | 直接字段 | 指数据更新时间，不等于发布时间 |
| 平均互动率 | 推文聚合结果 | 聚合字段 | 需有稳定口径后开放 |
| 预估曝光量 | 推文聚合 / 业务计算 | 聚合字段 | 需有稳定口径后开放 |
| 平均观看量 | `views` 聚合 | 聚合字段 | 需定义观测窗口 |
| 平均点赞量 | `likes` 聚合 | 聚合字段 | 需定义观测窗口 |
| 平均收藏量 | `bookmarks` 聚合 | 聚合字段 | 需定义观测窗口 |
| 平均评论量 | `comments` 聚合 | 聚合字段 | 需定义观测窗口 |
| 受众地区 | 受众画像数据 | 占位能力 | 本期整组置灰，不作为可用筛选上线 |
| 受众年龄 | 受众画像数据 | 占位能力 | 本期整组置灰，不作为可用筛选上线 |
| 受众性别占比 | 受众画像数据 | 占位能力 | 本期整组置灰，不作为可用筛选上线 |
| 受众语言 | 受众画像数据 | 占位能力 | 本期整组置灰，不作为可用筛选上线 |

### 2.13 搜索侧排序与交互约束

- 搜索结果默认不以“最新内容”作为唯一排序标准。
- 搜索结果卡中的辅助平台信息若存在，不得成为默认主点击目标。
- 非身份区保持信息展示或已有轻操作，不承担整卡跳详情的职责。

---

## §三 M3 · Twitter 频道详情页

### 3.1 详情页主入口

- 本版主入口为 Twitter 搜索结果卡中的头像、频道名、`@handle`。
- 本版支持详情页直达访问。
- `handle` 用于展示与用户识别，但是否承担路由角色仍待定。

### 3.2 详情页整体结构

详情页由以下两层组成：

1. **页头区**
2. **一级分区 Tab**
   - 数据总览
   - 受众数据
   - 内容数据
   - 品牌数据

其中：

- 数据总览、内容数据为本期主交付
- 受众数据、品牌数据为本期占位曝光分区

### 3.2A 详情页路由与访问规则

- 详情页支持直达访问。
- 详情页 URL 结构（`handle` / `ID` / 混合方案）保留为唯一未定项。
- 搜索结果进入详情页时，前端应携带或可解析出可唯一定位账号的路由参数。
- 直达访问来源包括搜索结果页、分享链接、其他模块对 Twitter 详情页的引用链接等任意有效入口。
- 直达访问场景下：
  - **不可识别 / 非法参数**：走 404。
  - **账号可识别但暂无可展示数据**：走产品级空态页，不走 404。
- 若当前账号已通过站内关联机制确认存在同主体的其他平台频道，可在详情页内展示平台切换入口。
- 平台切换入口只承载“已确认关联频道”的切换，不承担搜索页级别的平台切换职责。
- 若无已确认关联频道，则不展示平台切换入口。

### 3.3 页头区规则

页头区必须承担“进入页面后的第一判断层”，其必做摘要指标为：

- 粉丝量
- 最近发布时间
- 平均曝光量
- 平均互动率

补充规则：

- `平均曝光量` 当前按“平均近期内容曝光量”理解，最终字段口径待数据组确认。
- `平均互动率` 页头优先体现近期内容层面的平均表现，且采用实时聚合口径。
- 页头区不承载完整账号质量模型，不在本版引入新的评分体系。

### 3.4 一级分区优先级

本版优先级如下：

1. 数据总览
2. 内容数据
3. 受众数据（占位曝光）
4. 品牌数据（占位曝光）

说明：

- 本期保留四个分区。
- 第一版允许呈现非对称深度，不要求四个分区同等完整。

### 3.5 页头字段来源映射

| 页头项 | 字段 / 来源 | 类型 | 规则 |
|------|-------------|------|------|
| 粉丝量 | `followers` | 直接字段 | 必做 |
| 最近发布时间 | 推文 `pub_time` / `pub_date` 聚合 | 聚合字段 | 取最近一条内容发布时间 |
| 平均曝光量 | 近期推文 `views` 聚合 | 聚合字段 | 以近期内容为主，不锁死窗口长度 |
| 平均互动率 | 近期推文互动聚合结果 | 聚合字段 | 实时聚合，且与页头“近期内容表现”口径保持一致 |

### 3.6 页头身份区规则

页头身份区除摘要指标外，应保留基础身份信息：

- 头像
- 频道名
- `@handle`
- 地区 / 语言等基础识别信息（若数据可用）

该区域目标是帮助用户确认“我看的就是这个账号”，不是承载复杂画像或品牌合作结论。

### 3.7 页头动作与关联切换规则

- 页头需保留现有通用动作入口，如收藏。
- 若当前账号存在已确认关联的其他平台频道，可在页头提供平台切换入口。
- 平台切换入口的展示前提是：
  - 站内已确认同主体关联关系；
  - 对应平台频道详情页已存在可访问目标。
- 平台切换入口为次级动作，不得压过当前 Twitter 身份与摘要指标。
- 平台切换后，进入对应平台的频道详情页，不改变“标准频道详情页”的整体体验骨架。

---

## §四 数据总览 Tab

### 4.1 分区目标

数据总览负责回答两个问题：

1. 这个账号当前整体表现如何。
2. 这个账号近期是在增长、停滞还是下滑。

### 4.2 必做模块

第一版必须包含：

- 基本数据的核心指标卡
- 增长数据

### 4.3 基本数据模块规则

基本数据模块用于展示账号级与近期表现级的核心判断指标。

本模块规则：

- 采用指标卡形式组织。
- 指标卡内容应优先复用现有已可直接支撑的 Twitter 数据。
- 不依赖额外评分模型即可成立。

### 4.4 增长数据模块规则

增长数据模块用于展示账号在可观测窗口内的趋势变化。

本模块规则：

- 粉丝趋势基于天级历史数据表生成。
- 第一版默认展示近 30 天趋势。
- 至少支持一个时间维度的趋势展示。
- 若仅有部分增长数据可用，应优先保证趋势可读性，而非追求复杂对比维度。
- 若增长时间序列不足，必须降级展示为较轻量的趋势表达，而不是空白占坑。

### 4.5 暂不强制模块

以下模块本版不作为强制项：

- 频道质量
- 合作价格 / CPM

原因：

- 依赖数据组额外计算或建模能力
- 当前尚不具备稳定口径

### 4.6 数据总览字段口径要求

- 基本数据卡优先使用账号级直接字段或明确聚合字段。
- 账号基础信息与趋势数据按 T+1 日更口径理解。
- 内容数据与互动率按详情页请求时读取最新已采集数据口径理解。
- 若某指标依赖复杂模型、跨表计算或人工定义评分，不得默认塞入第一版核心卡片。
- 增长数据至少需要明确：
  - 观测对象是什么
  - 观测时间窗是什么
  - 无法提供历史序列时如何降级

### 4.7 数据总览降级规则

- 若增长时间序列不足，允许降级为单指标趋势摘要，不强行展示完整图表。
- 若只有部分指标可用，优先保留能支持“整体判断”的指标，不为凑版面新增弱价值卡片。

### 4.8 数据总览最小交付清单

第一版最小交付应至少满足：

- 存在可读的基础指标卡区
- 存在至少一种增长趋势表达
- 不依赖额外评分模型也能完成整体判断

---

## §五 受众数据 Tab

### 5.1 分区定位

受众数据在本期保留为可访问分区，但不交付真实画像能力。

### 5.2 第一版规则

- 受众数据 Tab 正常显示、正常可点击。
- 进入后展示“敬请期待”占位页。
- 不展示真实受众地区、语言、年龄、性别数据。

### 5.3 占位规则

- 占位页需明确传达：该能力已在规划中，但本期尚未交付。
- 占位页模板与品牌数据占位页保持同构，只更换标题与分区名称。
- 搜索抽屉中的受众筛选分组与详情页中的受众数据 Tab，统一使用同一类占位语义。

---

## §六 内容数据 Tab

### 6.1 分区目标

内容数据负责支持用户理解：

1. 这个账号最近在发什么。
2. 这些内容表现如何。
3. 这个账号的发布时间和内容主题有什么规律。

### 6.2 第一版必做模块

- 基本数据
- 内容标签
- 发布时间频率分析
- 全量内容列表 + 筛选

### 6.3 内容标签模块规则

- 内容标签用于抽象账号近期内容主题。
- 标签表达优先体现“这个账号在讲什么”，而不是做复杂文本分析报告。
- 标签可来源于现有分类体系、内容标签抽取或主题聚类，但必须给出稳定、可解释的结果。

### 6.4 发布时间频率分析规则

- 用于帮助用户理解账号是否稳定更新，以及大致更新规律。
- 可以采用频率图、时间分布图或等价表达。
- 目标是可判断，不要求在第一版做复杂算法结论。
- 若只能拿到发布时间原始数据，应优先输出“发帖频率”和“发布时间分布”两个基础维度。

### 6.5 全量内容列表规则

#### 6.5.1 列表目标

全量内容列表需要支持：

- 回看内容本身
- 按条件筛选内容
- 按关键指标重新排序

#### 6.5.2 筛选项

- 发布日期
- 文字内容匹配

#### 6.5.3 排序项

- 按发布日期
- 按点赞量
- 按评论量
- 按互动率

默认排序：

- 详情页内容列表默认按**发布日期倒序**。

#### 6.5.4 列表展示方式

- 默认采用高信息密度卡片流。
- 不采用纯表格作为默认主视图。
- 不采用仅适合原生 Tweet 阅读的低信息密度长列表作为默认主视图。

#### 6.5.5 单条内容卡片要素

单条 Tweet 卡片必须包含：

- 正文摘录
- 首图（若存在）
- 发布日期
- 观看量
- 点赞量
- 评论量

#### 6.5.6 列表字段来源映射

| 卡片要素 | 字段 / 来源 | 类型 | 规则 |
|----------|-------------|------|------|
| 正文摘录 | `description` | 直接字段 | 长文本需截断 |
| 首图 | `thumbnails` | 直接字段 | 无图则隐藏 |
| 发布日期 | `pub_date` / `pub_time` | 直接字段 | 统一到同一显示格式 |
| 观看量 | `views` | 直接字段 | 允许为 0，但不得误写成缺失 |
| 点赞量 | `likes` | 直接字段 | 直接展示 |
| 评论量 | `comments` | 直接字段 | 直接展示 |

#### 6.5.7 列表降级规则

- 若 `views` 不稳定或存在大量 0 值，仍可展示，但需避免把 0 解释为“低表现结论”。
- 若 Tweet 为纯转发内容，正文区允许保留转发语义，不强制做二次清洗。
- 若某条内容既无媒体也无足够正文，可保留极简文本卡，不从列表中静默删除。

---

## §七 品牌数据 Tab

### 7.1 分区定位

品牌数据在本版中保留结构位，但不作为真实交付能力落地。

### 7.2 第一版规则

- 必须保留 `品牌数据` tab。
- 本期不交付真实品牌能力，以占位页保留结构与曝光。

### 7.3 品牌数据占位规则

- 占位态必须明确告诉用户：当前能力建设中或暂无稳定数据支撑。
- 占位态不应伪装成完整能力页，也不应展示低可信度演示数据。
- 占位页模板与受众数据占位页保持同构，只更换标题与分区名称。

---

## §八 状态、降级与边界

### 8.1 搜索侧降级规则

- 若 Twitter 近期内容无媒体，结果卡必须回退到文本卡预览。
- 若部分筛选项受数据可用性限制，需在实现中明确做不可用或降级处理。
- 若结果卡处于“数据采集中”状态，仍允许通过身份区进入详情页，由详情页承接为空态或占位页。

### 8.2 详情侧降级规则

- 若数据总览中的某些高级指标暂时不可用，不影响页头和基础模块先落地。
- 若品牌数据暂时不足，可保留 tab 结构位并以占位页承接。
- 若受众数据本期未交付真实能力，则以占位页承接，不展示部分真实能力与部分占位混搭状态。
- 若内容列表中的部分排序字段不稳定，应优先保留日期排序，再逐步开放高阶排序。
- 若通过直达访问进入详情页时账号存在但详情数据不足，必须落到产品空态页，不得直接 404。

### 8.3 本版保留问题

以下问题本版允许带着进入实现准备阶段，但必须在后续与数据组继续确认：

- 平均曝光量最终计算口径
- 详情页 URL 结构最终方案
- 品牌数据最低可交付内容

---

## §九 待数据组确认项

| 项目 | 当前状态 | 影响模块 |
|------|----------|----------|
| 平均曝光量口径 | 待确认 | 页头、搜索卡、数据总览 |
| 详情页 URL 结构 | 待确认 | 详情页路由与分享 |
| 品牌数据最低可交付内容 | 待确认 | 品牌数据 Tab |

---

## §十 实现前检查点

- `spec_v1.md` 与 `input_v3.md` 的核心目标不得冲突。
- `design_v1.md` 必须引用 `other_social_search_common_context_v1.md` 的结构与视觉令牌。
- 搜索侧与详情侧都必须以 Twitter 真实对象为主线，不得回退到旧版“关联展示”逻辑。
