From 45ecbeda3633f445ddb8cb9aebcf966ff9934750 Mon Sep 17 00:00:00 2001 From: SessionHu <102411014+SessionHu@users.noreply.github.com> Date: Tue, 8 Jul 2025 11:08:21 +0800 Subject: [PATCH] feat: rich text nodes for opus or dynamic --- docs/dynamic/all.md | 62 +---- docs/dynamic/dynamic_enum.md | 23 +- docs/opus/rich_text_nodes.md | 422 +++++++++++++++++++++++++++++++++++ 3 files changed, 425 insertions(+), 82 deletions(-) create mode 100644 docs/opus/rich_text_nodes.md diff --git a/docs/dynamic/all.md b/docs/dynamic/all.md index 693854a..169337b 100644 --- a/docs/dynamic/all.md +++ b/docs/dynamic/all.md @@ -277,48 +277,9 @@ | 字段 | 类型 | 内容 | 备注 | | --- | --- | --- | --- | -| rich_text_nodes | array | 富文本节点列表 | [富文本节点类型](./dynamic_enum.md#富文本节点类型) | +| rich_text_nodes | array | 富文本节点列表 | [富文本节点类型](../opus/rich_text_nodes.md#富文本节点类型) | | text | str | 动态的文字内容 | | -`data.items[n].modules.module_dynamic.desc.rich_text_nodes[o]`: - -| 字段 | 类型 | 内容 | 备注 | -| --- | --- | --- | --- | -| orig_text | str | 原始文本 | | -| text | str | 替换后的文本 | | -| type | str | 节点类型 | [富文本节点类型](./dynamic_enum.md#富文本节点类型) | -| emoji | obj | 表情信息 | | -| jump_url | str | 跳转URL | | -| rid | str | 关联id | | -| goods | obj | 商品信息 | | -| icon_name | str | 图标名称 | `taobao` | -| pics | arr | 图片信息 | | - -`data.items[n].modules.module_dynamic.desc.rich_text_nodes[o].emoji`: - -| 字段 | 类型 | 内容 | 备注 | -| --- | --- | --- | --- | -| icon_url | str | 表情图片URL | | -| size | num | 表情尺寸 | `1` `2` | -| text | str | 表情的文字代码 | | -| type | num | 表情类型 | `1` `2` `3` | - -`data.items[n].modules.module_dynamic.desc.rich_text_nodes[o].goods`: - -| 字段 | 类型 | 内容 | 备注 | -| --- | --- | --- | --- | -| jump_url | str | 跳转URL | | -| type | num | `1` | | - -`data.items[n].modules.module_dynamic.desc.rich_text_nodes[o].pics[p]`: - -| 字段 | 类型 | 内容 | 备注 | -| --- | --- | --- | --- | -| height | num | 高度 | | -| size | num | 大小? | 单位为 K | -| src | str | 图片 URL | | -| width | num | 宽度 | | - `data.items[n].modules.module_dynamic.major`: | 字段 | 类型 | 内容 | 备注 | @@ -584,28 +545,9 @@ | 字段 | 类型 | 内容 | 备注 | | --- | --- | --- | --- | -| rich_text_nodes | array | 富文本节点列表 | [富文本节点类型](./dynamic_enum.md#富文本节点类型) | +| rich_text_nodes | array | 富文本节点列表 | [富文本节点类型](../opus/rich_text_nodes.md#富文本节点类型) | | text | str | 评论内容 | | -`data.items[n].modules.module_interaction.items[o].desc.rich_text_nodes`数组中的: - -| 字段 | 类型 | 内容 | 备注 | -| --- | --- | --- | --- | -| orig_text | str | 原始文本 | | -| rid | str | 关联ID | 用户UID | -| text | str | 替换后文本 | | -| type | str | 富文本节点类型 | [富文本节点类型](./dynamic_enum.md#富文本节点类型) | -| emoji | obj | 表情信息 | | - -`data.items[n].modules.module_interaction.items[o].desc.rich_text_nodes[n].emoji`: - -| 字段 | 类型 | 内容 | 备注 | -| --- | --- | --- | --- | -| icon_url | str | 表情图片URL | | -| size | num | 表情尺寸 | `1` `2` | -| text | str | 表情的文字代码 | | -| type | num | 表情类型 | `1` `2` `3` | - `data.items[n].modules.module_fold`: | 字段 | 类型 | 内容 | 备注 | diff --git a/docs/dynamic/dynamic_enum.md b/docs/dynamic/dynamic_enum.md index bdab471..1ae2919 100644 --- a/docs/dynamic/dynamic_enum.md +++ b/docs/dynamic/dynamic_enum.md @@ -29,28 +29,7 @@ ## 富文本节点类型 -| 类型 | 说明 | 示例 | -|---------------------------------|------|-----------------------------------------------------------------| -| RICH_TEXT_NODE_TYPE_NONE | | | -| RICH_TEXT_NODE_TYPE_TEXT | 文字节点 | [721295772787671059](https://t.bilibili.com/721295772787671059) | -| RICH_TEXT_NODE_TYPE_AT | @用户 | [721296515797090324](https://t.bilibili.com/721296515797090324) | -| RICH_TEXT_NODE_TYPE_LOTTERY | 互动抽奖 | [720907383182721040](https://t.bilibili.com/720907383182721040) | -| RICH_TEXT_NODE_TYPE_VOTE | 投票 | [721203899129659408](https://t.bilibili.com/721203899129659408) | -| RICH_TEXT_NODE_TYPE_TOPIC | 话题 | [721188862459641879](https://t.bilibili.com/721188862459641879) | -| RICH_TEXT_NODE_TYPE_GOODS | 商品链接 | [721282703208480790](https://t.bilibili.com/721282703208480790) | -| RICH_TEXT_NODE_TYPE_BV | 视频链接 | [716752002311258165](https://t.bilibili.com/716752002311258165) | -| RICH_TEXT_NODE_TYPE_AV | | | -| RICH_TEXT_NODE_TYPE_EMOJI | 表情 | [716751108968546393](https://t.bilibili.com/716751108968546393) | -| RICH_TEXT_NODE_TYPE_USER | | | -| RICH_TEXT_NODE_TYPE_CV | | | -| RICH_TEXT_NODE_TYPE_VC | | | -| RICH_TEXT_NODE_TYPE_VIEW_PICTURE | 查看图片 | [1069394178937454662](https://t.bilibili.com/1069394178937454662) | -| RICH_TEXT_NODE_TYPE_WEB | 网页链接 | [716751027361022055](https://t.bilibili.com/716751027361022055) | -| RICH_TEXT_NODE_TYPE_TAOBAO | | | -| RICH_TEXT_NODE_TYPE_MAIL | 邮箱地址 | [721314095109767220](https://t.bilibili.com/721314095109767220) | -| RICH_TEXT_NODE_TYPE_OGV_SEASON | 剧集信息 | [721282046064853080](https://t.bilibili.com/721282046064853080) | -| RICH_TEXT_NODE_TYPE_OGV_EP | | | -| RICH_TEXT_NODE_TYPE_SEARCH_WORD | | | +参见 [图文富文本节点类型](../opus/rich_text_nodes.md#富文本节点类型) ## 作者类型 diff --git a/docs/opus/rich_text_nodes.md b/docs/opus/rich_text_nodes.md new file mode 100644 index 0000000..9695004 --- /dev/null +++ b/docs/opus/rich_text_nodes.md @@ -0,0 +1,422 @@ +# 富文本节点 + +补充: 已知动态与图文接口获取结果的富文本节点与发送时的 `type` 等有关 + +## 富文本节点类型 + +| 类型 | 说明 | type | biz_id | 示例 | +| ---- | ---- | ---- | ------ | ---- | +| RICH_TEXT_NODE_TYPE_NONE | | | | | +| RICH_TEXT_NODE_TYPE_TEXT | 文字节点 | 1 | 空 | [106514206257210983](https://t.bilibili.com/106514206257210983) | +| RICH_TEXT_NODE_TYPE_AT | @用户 | 2 | 用户 mid (UID) | [721296515797090324](https://t.bilibili.com/721296515797090324) | +| RICH_TEXT_NODE_TYPE_LOTTERY | 互动抽奖 | 3 | 抽奖 id | [720907383182721040](https://t.bilibili.com/720907383182721040) | +| RICH_TEXT_NODE_TYPE_VOTE | 投票 | 4 | 投票 id | [721203899129659408](https://t.bilibili.com/721203899129659408) | +| RICH_TEXT_NODE_TYPE_TOPIC | 话题 | | | [721188862459641879](https://t.bilibili.com/721188862459641879) | +| RICH_TEXT_NODE_TYPE_GOODS | 商品链接 | | | [721282703208480790](https://t.bilibili.com/721282703208480790) | +| RICH_TEXT_NODE_TYPE_BV | 视频链接 | | | [716752002311258165](https://t.bilibili.com/716752002311258165) | +| RICH_TEXT_NODE_TYPE_AV | | | | | +| RICH_TEXT_NODE_TYPE_EMOJI | 表情 | 9 | 空 | [1069394178937454662](https://t.bilibili.com/1069394178937454662) | +| RICH_TEXT_NODE_TYPE_CV | 专栏 | | | | +| RICH_TEXT_NODE_TYPE_VIEW_PICTURE | 查看图片 | | | [1069394178937454662](https://t.bilibili.com/1069394178937454662) | +| RICH_TEXT_NODE_TYPE_WEB | 网页链接 | | | [716751027361022055](https://t.bilibili.com/716751027361022055) | +| RICH_TEXT_NODE_TYPE_TAOBAO | | | | | +| RICH_TEXT_NODE_TYPE_MAIL | 邮箱地址 | | | ~~721314095109767220~~ | +| RICH_TEXT_NODE_TYPE_OGV_SEASON | 剧集信息 | | | ~~721282046064853080~~ | +| RICH_TEXT_NODE_TYPE_OGV_EP | | | | | + +## 富文本节点对象 + +### RICH_TEXT_NODE_TYPE_TEXT + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| orig_text | string | 原始文本 | | +| text | string | 显示文本 | 一般与 `orig_text` 内容相同 | +| type | string | `RICH_TEXT_NODE_TYPE_TEXT` | | + +**示例:** + +
+查看示例: + +```json +{ + "orig_text": "【洛天依·共鸣宝石收藏家】设定也分享给大家~!", + "text": "【洛天依·共鸣宝石收藏家】设定也分享给大家~!", + "type": "RICH_TEXT_NODE_TYPE_TEXT" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_AT + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| orig_text | string | 原始文本 | | +| rid | string | 用户 mid (UID) | | +| text | string | 显示文本 | 一般与 `orig_text` 内容相同 | +| type | string | `RICH_TEXT_NODE_TYPE_AT` | | + +**示例:** + +
+查看示例: + +```json +{ + "orig_text": "@wuziqian211 ", + "rid": "425503913", + "text": "@wuziqian211 ", + "type": "RICH_TEXT_NODE_TYPE_AT" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_LOTTERY + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| orig_text | string | 原始文本 | 一般为 `互动抽奖` | +| rid | string | 抽奖 id | | +| text | string | 显示文本 | 一般为 `互动抽奖` | +| type | string | `RICH_TEXT_NODE_TYPE_LOTTERY` | | + +**示例:** + +
+查看示例: + +```json +{ + "orig_text": "互动抽奖", + "rid": "116067", + "text": "互动抽奖", + "type": "RICH_TEXT_NODE_TYPE_LOTTERY" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_VOTE + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| orig_text | string | 原始文本 | | +| rid | string | 抽奖 id | | +| text | string | 显示文本 | 一般与 `orig_text` 一致 | +| type | string | `RICH_TEXT_NODE_TYPE_VOTE` | | + +**示例:** + +
+查看示例: + +```json +{ + "orig_text": "次の文の ★ に入る最もよいものを一つ選びなさい。", + "rid": "3925886", + "text": "次の文の ★ に入る最もよいものを一つ選びなさい。", + "type": "RICH_TEXT_NODE_TYPE_VOTE" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_TOPIC + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| jump_url | string | 跳转 URL | 无协议头 | +| orig_text | string | 原始文本 | | +| text | string | 显示文本 | 一般与 `orig_text` 一致 | +| type | string | `RICH_TEXT_NODE_TYPE_TOPIC ` | | + +**示例:** + +
+查看示例: + +```json +{ + "jump_url": "//search.bilibili.com/all?keyword=ASOUL%E7%9A%84%E5%A5%87%E5%A6%99%E5%AE%87%E5%AE%99", + "orig_text": "#ASOUL的奇妙宇宙#", + "text": "#ASOUL的奇妙宇宙#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_GOODS + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| goods | object | 商品信息 | | +| icon_name | string | 图标名称 | `shop` `taobao` | +| jump_url | string | 跳转 URL | | +| orig_text | string | 原始文本 | | +| rid | string | | | +| text | string | 显示文本 | 一般与 `orig_text` 一致 | +| type | string | `RICH_TEXT_NODE_TYPE_GOODS` | | + +`goods` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| jump_url | string | 跳转 URL | 一般与根对象下的 `jump_url` 相同 | +| type | number | `1` | | + +**示例:** + +
+查看示例: + +```json +{ + "goods": { + "jump_url": "https://s.click.taobao.com/t?e=m%3D2%26s%3DhRVW5Ol4GrZw4vFB6t2Z2ueEDrYVVa64XoO8tOebS%2BdRAdhuF14FMcvdLjw%2BYA8F1aH1Hk3GeOgLhuv3v%2BUO0FVeaszYyErWfp5XqHpg%2Bfwn9kK7XrZu6WxZ8BPtnRZfqGXK58Jc1%2BhtJfOipEYQaSY0lFm97JITUXK%2FCnFktAT05J9EjZ4Cg6Q6sZp7gNLmb4%2BNtrBbTSxr7mxbAs%2BuXGY7X5f4YTwUTi8eJkfcZdQxNgzykgJnxNGRxz%2FytfH1UnsQ1Sg4FG%2Fgk553RHFro7zDM6tzzB%2FwUFU78FEla0%2F6liDBUuxx%2BfRWY0eqeyPKGJZJ34Yh7cK34L0nA6HzjPrdYgTMW7Qubh8ReVU%2F9k2Huec2Q%2B1T%2BJwkZZwMWMdb2FGsw09L73Dq%2F8VFknkEdmd1Il7G%2BufOO%2FbGmELtDp4hhQs2DjqgEA%3D%3D&union_lens=lensId:TAPI@1674460806@212ccf35_0bed_185dda43d7a_a840@01", + "type": 1 + }, + "icon_name": "taobao", + "jump_url": "https://s.click.taobao.com/t?e=m%3D2%26s%3DhRVW5Ol4GrZw4vFB6t2Z2ueEDrYVVa64XoO8tOebS%2BdRAdhuF14FMcvdLjw%2BYA8F1aH1Hk3GeOgLhuv3v%2BUO0FVeaszYyErWfp5XqHpg%2Bfwn9kK7XrZu6WxZ8BPtnRZfqGXK58Jc1%2BhtJfOipEYQaSY0lFm97JITUXK%2FCnFktAT05J9EjZ4Cg6Q6sZp7gNLmb4%2BNtrBbTSxr7mxbAs%2BuXGY7X5f4YTwUTi8eJkfcZdQxNgzykgJnxNGRxz%2FytfH1UnsQ1Sg4FG%2Fgk553RHFro7zDM6tzzB%2FwUFU78FEla0%2F6liDBUuxx%2BfRWY0eqeyPKGJZJ34Yh7cK34L0nA6HzjPrdYgTMW7Qubh8ReVU%2F9k2Huec2Q%2B1T%2BJwkZZwMWMdb2FGsw09L73Dq%2F8VFknkEdmd1Il7G%2BufOO%2FbGmELtDp4hhQs2DjqgEA%3D%3D&union_lens=lensId:TAPI@1674460806@212ccf35_0bed_185dda43d7a_a840@01", + "orig_text": "​啊脑袋周边抱枕", + "rid": "688066082845462528", + "text": "​啊脑袋周边抱枕", + "type": "RICH_TEXT_NODE_TYPE_GOODS" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_BV + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| jump_url | string | 跳转 URL | | +| orig_text | string | 原始文本 | | +| rid | string | 视频 bvid | | +| text | string | 显示文本 | 视频标题 | +| type | string | `RICH_TEXT_NODE_TYPE_BV` | | + +**示例:** + +
+查看示例: + +```json +{ + "jump_url": "https://www.bilibili.com/video/BV1xx411c7mD/", + "orig_text": "https://www.bilibili.com/video/BV1xx411c7mD/", + "rid": "BV1xx411c7mD", + "text": "字幕君交流场所", + "type": "RICH_TEXT_NODE_TYPE_BV" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_EMOJI + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| emoji | object | 表情信息 | | +| orig_text | string | 原始文本 | | +| text | string | 显示文本 | 一般与 `orig_text` 一致 | +| type | string | `RICH_TEXT_NODE_TYPE_EMOJI` | | + +`emoji` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| icon_url | string | 表情图片 URL | | +| size | number | 表情尺寸 | 1: small
2: middle | +| text | string | 表情的文字代码 | 一般与根对象的 `text` 一致 | +| type | number | 表情类型 | `1` `2` `3` | + +**示例:** + +
+查看示例: + +```json +{ + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/5ce649d5f716566db41dbf68c2e319517516d321.png", + "size": 2, + "text": "[热词系列_干杯]", + "type": 1 + }, + "orig_text": "[热词系列_干杯]", + "text": "[热词系列_干杯]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_CV + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| jump_url | string | 跳转 URL | 无协议名 | +| orig_text | string | 原始文本 | | +| rid | string | 专栏 CV 号 | | +| text | string | 显示文本 | | +| type | string | `RICH_TEXT_NODE_TYPE_CV` | | + +**示例:** + +
+查看示例: + +```json +{ + "jump_url": "//www.bilibili.com/read/cv1/", + "orig_text": "1", + "rid": "1", + "text": "未知的光", + "type": "RICH_TEXT_NODE_TYPE_CV" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_VIEW_PICTURE + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| jump_url | string | | | +| orig_text | string | 原始文本 | | +| pics | object[] | 图片信息 | | +| rid | string | 本条动态 id | | +| text | string | 显示文本 | 一般与 `orig_text` 一致 | +| type | string | `RICH_TEXT_NODE_TYPE_VIEW_PICTURE ` | | + +`pics[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| height | number | 高度 | | +| size | number | 大小? | 单位为 K | +| src | string | 图片 URL | | +| width | number | 宽度 | | + +**示例:** + +
+查看示例: + +```json +{ + "jump_url": "//www.bilibili.com/read/cv/", + "orig_text": "查看图片", + "pics": [ + { + "height": 4000, + "size": 4218.501, + "src": "http://i0.hdslb.com/bfs/new_dyn/d13a5793f7101824e9c9181ebc4df1a936081646.png", + "width": 6411 + } + ], + "rid": "1069394178937454662", + "text": "查看图片", + "type": "RICH_TEXT_NODE_TYPE_VIEW_PICTURE" +} +``` +
+ + + +## RICH_TEXT_NODE_TYPE_WEB + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| jump_url | string | 跳转 URL | | +| orig_text | string | 原始文本 | | +| style | object \| null | 样式信息 | | +| text | string | 显示文本 | | +| type | string | `RICH_TEXT_NODE_TYPE_WEB` | | + +`style` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| font_level | string | 字体等级 | `regular` | +| font_size | number | 字体大小 | `17` | + +**示例:** + +
+查看示例: + +```json +{ + "jump_url": "https://api.bilibili.com/x/web-interface/nav", + "orig_text": "https://api.bilibili.com/x/web-interface/nav", + "style": { + "font_level": "regular", + "font_size": 17 + }, + "text": "网页链接", + "type": "RICH_TEXT_NODE_TYPE_WEB" +} +``` + +```json +{ + "jump_url": "//www.bilibili.com/video/av1", + "orig_text": "//www.bilibili.com/video/av1", + "style": null, + "text": "av1", + "type": "RICH_TEXT_NODE_TYPE_WEB" +} +``` + +
+ + + +## RICH_TEXT_NODE_TYPE_OGV_SEASON + +参考 [RICH_TEXT_NODE_TYPE_BV](#rich-text-node-type-bv) + +## RICH_TEXT_NODE_TYPE_OGV_EP + +参考 [RICH_TEXT_NODE_TYPE_BV](#rich-text-node-type-bv) + +## RICH_TEXT_NODE_TYPE_AV + +参考 [RICH_TEXT_NODE_TYPE_BV](#rich-text-node-type-bv)