diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..b5cfe71 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [SocialSisterYi] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: https://afdian.com/@ShakaiAneE diff --git a/.github/ISSUE_TEMPLATE/1-add-request.yml b/.github/ISSUE_TEMPLATE/1-add-request.yml new file mode 100644 index 0000000..d632a1a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-add-request.yml @@ -0,0 +1,56 @@ +name: "新增请求" +description: "请求添加文档中未收录的 API 定义" +title: "[新增请求] " +labels: ["新增/Add"] +body: + - type: checkboxes + id: reminders + attributes: + label: "提交前请确认" + options: + - label: "我已阅读贡献指南, 已检索仓库中文档,确认不包含所提及内容,且 Issues、Pull Requests 中无相关提交" + required: true + - type: dropdown + id: source + attributes: + label: "API 来源" + description: "该 API 在何平台中使用" + multiple: true + options: + - "Web 端(含 H5)" + - "PC 客户端(Electron)" + - "Android 客户端(含粉版、平板版、蓝版、概念版、国际版等)" + - "TV 客户端(含云视听小电视、车机、物联网版等)" + - "iOS 客户端(含粉版、平板版、概念版等)" + - "必剪客户端" + - "漫画客户端" + - "其他(请在详情中备注)" + validations: + required: true + - type: dropdown + id: type + attributes: + label: "API 类型" + description: "API 所使用的协议标准及调用方式" + options: + - "REST" + - "gRPC" + - "长连接数据帧(含 WS、TCP)" + - "其他类型(请在详情中备注)" + validations: + required: true + - type: input + id: address + attributes: + label: "API 地址" + description: "REST 的 URL,或 gRPC 的包名+服务名" + placeholder: "eg: https://api.bilibili.com/2333333" + validations: + required: true + - type: textarea + id: details + attributes: + label: "详情描述" + description: "请描述该 API 的使用场景、请求及响应字段等,可附上原始抓包记录" + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/2-update-request.yml b/.github/ISSUE_TEMPLATE/2-update-request.yml new file mode 100644 index 0000000..cc2a1fc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-update-request.yml @@ -0,0 +1,29 @@ +name: "更新请求" +description: "请求补充或更新文档中已有的 API 定义" +title: "[更新请求] <title>" +labels: ["更新/Update"] +body: + - type: checkboxes + id: reminders + attributes: + label: "提交前请确认" + options: + - label: "我已阅读贡献指南, 已确认文档中相关内容存在错误或不足,且 Issues、Pull Requests 中无相关提交" + required: true + - type: input + id: document_link + attributes: + label: "原文档链接" + description: | + 需要更新的文档链接,指定到具体 API<br> + eg: https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/bangumi/info.md#获取剧集明细web端ssidepid方式<br> + https://socialsisteryi.github.io/bilibili-API-collect/docs/bangumi/info.html#获取剧集明细-web端-ssid-epid方式 + validations: + required: true + - type: textarea + id: details + attributes: + label: "更新内容" + description: "请指出原文档中与最新 API 行为不符之处,并附上已知的最新改动和验证信息" + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/3-mistake-report.yml b/.github/ISSUE_TEMPLATE/3-mistake-report.yml new file mode 100644 index 0000000..22df22c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3-mistake-report.yml @@ -0,0 +1,64 @@ +name: "错误修正" +description: "发现文档内容有误并提交修正请求" +title: "[错误修正] <title>" +labels: ["错误/Mistakes"] +body: + - type: checkboxes + id: confirmations + attributes: + label: "提交前请确认" + options: + - label: "我已阅读贡献指南, 已确认文档中有错误存在,且 Issues、Pull Requests 中无相同修正" + required: true + - label: "我已验证修正内容的正确性" + required: false + + - type: input + id: document_link + attributes: + label: "错误所在文档链接" + description: | + 需要修正的文档链接,指定到具体 API<br> + eg: https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/bangumi/info.md#获取剧集明细web端ssidepid方式<br> + https://socialsisteryi.github.io/bilibili-API-collect/docs/bangumi/info.html#获取剧集明细-web端-ssid-epid方式 + validations: + required: true + + - type: dropdown + id: error_type + attributes: + label: "错误类型" + multiple: true + options: + - "API 地址/鉴权方式错误" + - "参数错误" + - "响应数据结构或响应示例错误" + - "描述性内容错误(如拼写/流程说明)" + - "接口已弃用或下线" + - "其他(请在下文说明)" + validations: + required: true + + - type: textarea + id: error_description + attributes: + label: "错误描述" + description: "请详细说明具体错误所在,如有多个错误请编号列出" + validations: + required: true + + - type: textarea + id: evidence + attributes: + label: "纠错依据" + description: "如果有,请提供抓包记录等佐证,方便确认。如果有多个错误,请将依据对应错误描述的编号列出" + validations: + required: false + + - type: textarea + id: correction + attributes: + label: "修正方案" + description: "如果可以,请提供修正后的内容,如有多个修正点请编号列出" + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..e65606e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: 参与讨论 + url: https://github.com/SocialSisterYi/bilibili-API-collect/discussions + about: 代码用例、情报分享等内容请使用 Discussions diff --git a/.github/workflows/vuepress-deploy.yml b/.github/workflows/vuepress-deploy.yml new file mode 100644 index 0000000..46c3e95 --- /dev/null +++ b/.github/workflows/vuepress-deploy.yml @@ -0,0 +1,37 @@ +name: deploy and publish + +on: + workflow_dispatch: + push: + branches: + - master + +permissions: + contents: write + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + # if: github.repository == 'SocialSisterYi/bilibili-API-collect' + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Node.js environment + uses: actions/setup-node@v4.0.3 + with: + node-version: 22 + cache: yarn + - name: Build with yarn + run: yarn && yarn build + - name: Commit & Push + run: | + cd .vuepress/dist/ + git init -b gh_pages + git config user.name "github-actions" + git config user.email "github-actions@github.com" + git remote add origin https://user:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} + git add -A . + git commit -m "generated" + git push -fu origin gh_pages diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7307447 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +/.vuepress/.cache/ +/.vuepress/.temp/ +/.vuepress/dist/ +/node_modules/ +.idea/ +.vscode/ +.DS_Store +*.swp +/*.*js +/*.json +/*.sh diff --git a/.vuepress/client.js b/.vuepress/client.js new file mode 100644 index 0000000..0509372 --- /dev/null +++ b/.vuepress/client.js @@ -0,0 +1,8 @@ +import { defineClientConfig } from '@vuepress/client' +import Layout from './theme/layouts/Layout.vue' + +export default defineClientConfig({ + layouts: { + Layout, + }, +}) diff --git a/.vuepress/config.js b/.vuepress/config.js new file mode 100644 index 0000000..dbe9307 --- /dev/null +++ b/.vuepress/config.js @@ -0,0 +1,64 @@ +import { defineUserConfig } from "vuepress"; +import { viteBundler } from '@vuepress/bundler-vite' +import { defaultTheme } from "@vuepress/theme-default"; +import markdownItTaskLists from "markdown-it-task-lists"; +import { searchPlugin } from "@vuepress/plugin-search"; +import { shikiPlugin } from '@vuepress/plugin-shiki' + +const base = "/bilibili-API-collect/"; + +export default defineUserConfig({ + bundler: viteBundler(), + base: base, + lang: "zh-CN", + title: "BAC Document", + description: "社区开源的第三方哔哩哔哩 API 文档", + head: [["link", { rel: "icon", href: base + "logo2.jpg" }]], + locales: { + "/": { + lang: "zh-CN", + }, + }, + theme: defaultTheme({ + logo: "/logo2.jpg", + navbar: [ + { text: "首页", link: "/" }, + { text: "目录", link: "/#🍴目录" }, + { text: "贡献指南", link: "/CONTRIBUTING.html" }, + { + text: "相关社群", + children: [ + { + text: "QQ交流群(综合技术交流)", + link: "http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&group_code=191187164", + }, + { + text: "Telegram交流群(Github Bot推送)", + link: "https://t.me/bilibili_API_collect_community", + }, + ], + }, + ], + repo: "https://github.com/SocialSisterYi/bilibili-API-collect", + docsBranch: "master", + editLinkText: "在 GitHub 上编辑此页", + colorMode: "auto", + themePlugins: { + prismjs: false + } + }), + plugins: [ + searchPlugin({}), + shikiPlugin({ + theme: 'dark-plus', + langs: [ + 'javascript', 'typescript', 'markdown', 'protobuf', 'json', 'jsonc', + 'shell', 'go', 'html', 'http', 'java', 'kotlin', 'python', 'rust', 'c', + 'c++', 'cs', 'php', 'swift', 'text' + ] + }) + ], + extendsMarkdown: (md) => { + md.use(markdownItTaskLists); + } +}); diff --git a/.vuepress/public/logo2.jpg b/.vuepress/public/logo2.jpg new file mode 100644 index 0000000..199eefc Binary files /dev/null and b/.vuepress/public/logo2.jpg differ diff --git a/.vuepress/theme/layouts/Layout.vue b/.vuepress/theme/layouts/Layout.vue new file mode 100644 index 0000000..75d2f21 --- /dev/null +++ b/.vuepress/theme/layouts/Layout.vue @@ -0,0 +1,28 @@ +<template> + <ParentLayout> + <template #page-bottom> + <footer style="text-align: center"> + Copyright © 2020-2025 + <a href="https://github.com/SocialSisterYi/">SocialSisterYi</a> | + <a + href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE" + >CC-BY-NC-4.0 Licensed</a + > + </footer> + </template> + </ParentLayout> +</template> + +<style> + /* README.md */ + .shields a { + margin: auto .25em; + } + .shields a::after { + display: none !important; + } +</style> + +<script setup> +import ParentLayout from '@vuepress/theme-default/layouts/Layout.vue'; +</script> diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..8856cab --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,285 @@ +# 贡献指南 + +欢迎来到 bilibili-API-collect 社区贡献指南,本文主要面向想要对本项目参与贡献的用户, 请务必认真阅读本文正文与潜在的注释 + +## 总则 + +[bilibili-API-collect](https://github.com/SocialSisterYi/bilibili-API-collect) 项目(简称 BAC 或 b-a-c)是一个仅用于学习研究、社区开源、公益性质的 [B 站(哔哩哔哩)](https://www.bilibili.com/)API(应用程序接口)文档,使用 [CC-BY-NC 4.0 协议](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE)开源,它将无差别收集整理相关的**主站业务接口**。 + +该项目使用 [Markdown](https://zh.wikipedia.org/zh-cn/Markdown) 语法进行文档书写,按照业务类型及功能以**路径**+**文件**形式索引,任何用户都可通过 Issue、Pull Request 与 Discussion 提供自己分析出的接口地址与使用说明。 + +本项目收集的接口类型包括但不限于 REST API、gRPC、WebSocket,文档内统一优先使用安全套接字协议,如 `https`、`securityRpc`、`wss`。 + +## Issue、Discussion 与社群讨论 + +对文档内容存在**不理解**之处、以及发现文档内容有所**缺失**或**错误**,可直接提出,强烈建议以提交 **Issue** 的形式 添加 / 补充 / 更新 文档中的说明,以发起 **Discussion** 的形式提出问题、代码用例、情报分享,并希望关于本项目的各种交流都是**公开进行**的,因为这样才可以保证关键信息的一致性。 + +提交 Issue 请遵守以下原则: + +1. 标题需要点明 API 的用处, `<title>` 要替换为标题主要内容而不是保留不动,切勿仅填写 `补充`、`修复`,形式良好的标题可以是 `[新增请求] 新增 xx 接口`、`[更新请求] xx 接口地址已失效`、`[更新请求] xx 接口的参数有变化` +2. 正文请按照 Issue 模板进行填写,标明 API 来源(Web、Android、iOS、TV 等)、API 类型(REST、gRPC、WebSocket 等)、API 地址 +3. 详情描述需要提供该 API 的使用场景、请求及响应字段等,可附上原始抓包记录 (文本格式优先);在更新时还需指出原文档中与最新 API 行为不符之处,并附上已知的最新改动。例如:“在前端页面某地址 / APP 某界面访问某 API(标明地址),它的某参数与文档中不符(标明文档地址)” + +发起 Discussion 请遵守以下原则: + +1. 标题言简意骇,说明欲提出的问题要点,如 `如何通过 xx 接口获取 yy`、`关于 xx 字段意义的探讨`、`建议将 xx 加入 yy 分类` 等标题;切勿使用表意含糊不清或索取性的标题,如 `怎么解决风控`、`搜索的接口是什么`、`好兄弟有没有投稿的接口` 等标题 +2. Discussion 正文应对遇到的问题进行尽可能详细的描述,展开并聚焦有关的信息,例如: “按照文档中某位置的说明进行了某操作,为什么无法获得预期结果”、“请问某 API 的某字段的具体含义是什么” +3. 提出问题时注意[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)并且[别像弱智一样提问](https://github.com/tangx/Stop-Ask-Questions-The-Stupid-Ways) + +同时,您还可以通过加入社群的方式参与讨论 + +- QQ 交流群:[邀请链接](https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&group_code=191187164) +- Telegram 交流群:[@bilibili_API_collect_community](https://t.me/bilibili_API_collect_community) + +::: tip 提示 + +QQ 交流群为综合技术交流群(兼 Owner 的粉丝群),可交流探讨任何技术,包括但不限于 [BAC 项目](https://github.com/SocialSisterYi/bilibili-API-collect) + +Telegram 交流群主要用作 [BAC 项目](https://github.com/SocialSisterYi/bilibili-API-collect)的 Github Bot 接收,也可以进行项目相关的讨论,但不建议在此讨论交流其他内容(公开群) + +::: + +::: warning 注意 + +群内讨论同样需要遵守**公开交流**的原则,以及群内会定期清理不活跃成员。 + +**QQ 交流群**的加群问题答案可以去 [Owner 的主页](https://github.com/SocialSisterYi) Contact 部分找到,如果您填写“我不知道,从 Github 来的”那么管理员将有理由禁止您进群讨论! + +::: + +::: danger 禁止 + +项目 Issue 及其相关社群中**禁止**询问讨论 风控解除、爬虫(采集)、破解、漏洞利用、买卖代码和账号 相关内容,抵制基于本项目进行的一切黑产行为! + +::: + +## 目录与路径结构 + +### 目录 + +文档目录以 **Markdown 无序列表**语法写在 [README.md](README.md) 中,使用缩进标识文档的层级,如 `视频` 下存在 `基本信息`、`快照`、`视频推荐`、`TAG` 等子分类,使用 **Markdown 复选框**语法该标注文档是否编写完成, 新文档写完后记得在目录添加入口 + +```markdown +- [ ] 视频 + - [x] 基本信息 + - [x] 快照 + - [x] 视频推荐 + - [ ] TAG +``` + +### 路径 + +路径层级应当与文档目录一致,以文件夹的形式存放在项目中的 `/docs` 路径下,命名统一使用英文小写,如 `video`、`danmaku`、`comment`, 不建议出现 `&` 等特殊字符 + +二级、三级路径应当存在二级三级目录,可选添加 `README.md` 以描述该子目录 + +### 文件 + +各个子接口集整理为 Markdown (.md) 文件,命名统一使用英文小写,如 `info.md`、`action.md`、`list.md` + +文档文件中用于存放相关的接口的说明,如 `video/` 下的 `info.md`,存在 `查询视频基本信息`、`查询视频简介`、`查询视频分P列表` 等内容 + +## Markdown 文档内容格式 + +文档使用 [VuePress](https://vuepress.vuejs.org/) 生成,可以使用 [VuePress Markdown 扩展语法](https://vuepress.vuejs.org/guide/markdown.html)编写 + +注:以下文档范式主要针对接口类文档, 可根据**实际情况**进行调整, 你也可以使用 [`json-apidoc-gen`](https://github.com/SessionHu/json-apidoc-gen) 工具直接生成模板自行填充内容. 非接口类文档, 如算法等, 可以参考已有的内容 + +### 头部 + +文档首行为**一级标签**格式标题,如 `# 用户基本信息` + +**文档头部不需要手写索引**,索引由 VuePress 自动生成 + +### 接口说明 + +文档中可存在多个接口说明,应当遵守同一范式,依次排列在文档中 + +接口说明分为 `标题`、`地址`、`说明`、`请求参数`、`响应正文`、`示例` 这些部分 + +接口标题为**二级以下**的标签<!--别顶着一级标题就开写-->,接口地址使用**块引用**语法,地址只保留 REST API 路径,不应携带 query 等内容 + +接口地址下方需要注明接口的请求方法,如 `GET`、`POST`、`PUT` 等,使用*斜体*语法 + +若接口存在认证或鉴权,需要在说明中注明,如 `Cookie (SESSDATA)`、`APP`(认证是针对用户的,鉴权是针对接口使用的) + +其他使用说明也可写在这里,如 `限制游客访问的视频需要登录` + +e.g.: + +```markdown +## 获取视频详细信息_web端 + +> https://api.bilibili.com/x/web-interface/view + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +限制游客访问的视频需要登录 +``` + +**请求参数**应在**接口说明**的下方,应注明参数类型 URL 参数或正文参数(正文参数应注明 `Content-Type`,如 `application/x-www-form-urlencoded` 或 `multipart/form-data`),使用**加粗**语法 + +对象的字段及其含义使用**表格**进行整理,表头统一依次为 `参数名`、`类型`、`内容`、`必要性`、`备注`,使用 `object`、`number`、`string`、`boolean`、`number[]`、`string[]`、`file` 等这种类似 TypeScript 的类型系统,必要性为 `必要`、`非必要`、`必要 (可选)` 等,表格内每个字段为一行 + +e.g.: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------- | ----------- | ----------------- | +| aid | num | 稿件 avid | 必要 (可选) | avid 与 bvid 任选 | +| bvid | str | 稿件 bvid | 必要 (可选) | avid 与 bvid 任选 | + +**响应正文**应在**请求参数**的下方,接口响应的数据格式应标注,如 `JSON 回复`、`XML 回复`、`ProtoBuf 回复`,使用**加粗**语法 + +JSON Object 或 ProtoBuf Message 应以对象的**表格**形式书写,表头为 `根对象` 或 `xx 中的 yy 对象` 或 `xx.yy.zz 对象`,若对象位于数组中则为 `xx 数组中的对象` 或 `xx[] 中的对象` + +表头统一依次为 `字段`、`类型`、`内容`、`备注`,类型为 JSON / Protobuf 的标准类型,具体同请求参数一致 + +不明确定义的字段说明在内容的末尾添加问号,如 `播放数?`;定义尚未明确的字段使用 `(?)` 在内容中占位,并在备注中填写 `作用尚不明确` + +多个对象及数组,使用**遍历树**的顺序进行排列, 若数组中的每一项结构均相同也可以直接省略为像 `xxx 数组中的对象` 这样的格式 + +e.g.: + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------- | ------------ | +| bvid | str | 稿件 bvid | | +| aid | num | 稿件 avid | | +| videos | num | 稿件分P总数 | 默认为 1 | +| tid | num | 分区 tid | | +| no_cache | bool | (?) | 作用尚不明确 | + +Json Array 或 ProtoBuf Repeated 类型使用数组的**表格**形式书写,表头统一依次为 `项`、`类型`、`内容`、`备注`,无限长度数组表尾需要添加**省略号** + +数组每项内容若与实际数据有关联,`内容` 字段则可标为 `(n+1)P 视频内容` 这样的形式 + +e.g.: + +`data` 中的 `pages` 数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------- | +| 0 | obj | 1P 视频内容 | 无分 P 仅有此项 | +| n | obj | (n+1)P 视频内容 | | +| …… | obj | …… | …… | + +**示例**部分位于所有**响应正文**部分下方,需要**加粗**格式,分为请求命令示例与响应体示例两部分 + +请求命令示例为一段可测试该接口的 cURL 命令或某种编程语言的代码,使用**代码块**语法书写,命令应当尽可能简短、便于使人阅读, 代码缩进为 **2** 个 **空格 (U+0020)** + +示例命令中的认证信息应做**脱敏处理**,如 Cookie、Token、access_key 等,可替换为 `xxx` 占位 + +示例命令前后可以适当添加一些文字说明 + +响应体示例为一段格式化后的 JSON 或 ProtoBuf Message,使用**代码块**语法书写, 代码块语言填写清楚, 注意 `json` `jsonc` 区别. 并使用 `<details>` 标签进行折叠, 仍一律使用 **2** 个 **空格** 进行缩进 + +e.g.: + +````markdown +**示例:** + +获取视频 `av85440373` 的基本信息 + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view' \ + --data-urlencode 'aid=85440373' +``` + +<details> +<summary>查看响应示例:</summary> + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "bvid": "BV117411r7R1", + "aid": 85440373, + "videos": 1, + "tid": 28, + "tname": "原创音乐", + "copyright": 1, + // ... + } +} +``` + +</details> +```` + +### 枚举值与属性位 + +接口返回或请求中若存在一些 enum 类型或二进制属性位,应当单独进行探讨,如视频的属性位 `attribute` 或视频清晰度 `qn` + +这些值及其说明使用**表格**进行整理,表头统一为 `位` / `代码` / `值`、`含义`、`备注` + +这些枚举值或属性位的用法应附加文字说明 + +e.g.: + +| 值 | 含义 | 备注 | +| ---- | ------------- | ------------------------------------------------------------ | +| 6 | 240P 极速 | 仅 MP4 格式支持<br />仅 `platform=html5` 时有效 | +| 16 | 360P 流畅 | | +| 32 | 480P 清晰 | | +| 64 | 720P 高清 | WEB 端默认值<br />B 站前端需要登录才能选择,但是直接发送请求可以不登录就拿到 720P 的取流地址<br />**无 720P 时则为 720P60** | +| 74 | 720P60 高帧率 | 需要登录认证 | +| 80 | 1080P 高清 | TV 端与 APP 端默认值<br />需要登录认证 | + +## Proto 定义格式 + +proto 文件为 [Protocol Buffers](https://protobuf.dev/) 以及 [gRPC](https://grpc.io/docs/) 的数据结构体定义,多用于客户端的接口,本文档也做相关的收集 + +存放于项目的 `/grpc_api` 路径下,使用包名进行路径层级的组织,如: + +``` +/grpc_api/bilibili/main/community/reply/v1/reply.proto +/grpc_api/bilibili/app/archive/v1/archive.proto +/grpc_api/bilibili/app/view/v1/view.proto +``` + +proto 文件内使用**单行注释**标注字段或对象的含义,如: + +```protobuf +// UP主信息 +message Author { + // UP主mid + int64 mid = 1; + // UP主昵称 + string name = 2; + // UP主头像url + string face = 3; +} +``` + +## 文档提交 + +### 拉取 (Pull) 与 提交 (Commit) + +本项目仓库仅托管于 GitHub, 使用 Git 作为版本控制系统, 你需要对两者有基础的了解 + +请先 fork, 然后在自己的 fork 上进行修改<!--废话--> + +提交的标题不要使用默认的 `Update xxx`, 请遵循 [Conventional Commits (约定式提交) 规范](https://www.conventionalcommits.org/zh-hans/v1.0.0/), 标题语言可根据个人习惯 + +<!--下面这两段属于常识, 但好像还有人不知道--> +当发现远程与本地仓库不一致时, 若你操作的 fork 的 branch 无打开的 PR, 建议使用变基拉取, 而不是生成一个额外的合并提交的合并拉取, 反之则相反 + +移动文件请使用 `git mv`, 而不是删除并添加同一个文件于不同位置 (该问题在 VSCode 的 GUI 版 Git 中存在<!--某个易姓owner干过-->), 以便后续 blame 操作 + +### 拉取请求 (Pull Request) + +使用 拉取请求 (Pull Request, PR) 将修改后的文档提交到 `master` 分支,标题需写明修改或新增的内容, 同样也需要遵循约定式提交规范, `gh_pages` 分支将在 PR 合并后自动更新 + +如果你还没有完成计划的全部修改, 请创建 Draft Pull Request 表示你还没有做好被合并的准备 ~~(抢占先机, 精神可嘉, 值得鼓励)~~ + +PR 正文使用 **无序列表** 写明更改的每一项内容, 可以使用复选框表明进度, 需要关闭的 Issue 请使用 `close #xxxx` 这样的格式一并包含在内 + +如果内容包含代码等, 请一并提供测试的输入与输出的文本或截图, 最好可以附上完整的测试环境及相关可执行文件等 + +<!--这也是常识喵--> +PR 合并后, 请及时删除或更新分支. 特别是在使用压缩合并或变基合并后, 请 `Discard changes` 或直接删除分支, 以免在下一次 PR 后出现重复相同提交的问题 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..973f6ce --- /dev/null +++ b/LICENSE @@ -0,0 +1,352 @@ +Creative Commons Attribution-NonCommercial 4.0 International + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright and +certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + +- Considerations for licensors: Our public licenses are intended for + use by those authorized to give the public permission to use + material in ways otherwise restricted by copyright and certain other + rights. Our licenses are irrevocable. Licensors should read and + understand the terms and conditions of the license they choose + before applying it. Licensors should also secure all rights + necessary before applying our licenses so that the public can reuse + the material as expected. Licensors should clearly mark any material + not subject to the license. This includes other CC-licensed + material, or material used under an exception or limitation to + copyright. More considerations for licensors : + wiki.creativecommons.org/Considerations_for_licensors + +- Considerations for the public: By using one of our public licenses, + a licensor grants the public permission to use the licensed material + under specified terms and conditions. If the licensor's permission + is not necessary for any reason–for example, because of any + applicable exception or limitation to copyright–then that use is not + regulated by the license. Our licenses grant only permissions under + copyright and certain other rights that a licensor has authority to + grant. Use of the licensed material may still be restricted for + other reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, such + as asking that all changes be marked or described. Although not + required by our licenses, you are encouraged to respect those + requests where reasonable. More considerations for the public : + wiki.creativecommons.org/Considerations_for_licensees + +Creative Commons Attribution-NonCommercial 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and conditions. + +- Section 1 – Definitions. + + - a. Adapted Material means material subject to Copyright and + Similar Rights that is derived from or based upon the Licensed + Material and in which the Licensed Material is translated, + altered, arranged, transformed, or otherwise modified in a + manner requiring permission under the Copyright and Similar + Rights held by the Licensor. For purposes of this Public + License, where the Licensed Material is a musical work, + performance, or sound recording, Adapted Material is always + produced where the Licensed Material is synched in timed + relation with a moving image. + - b. Adapter's License means the license You apply to Your + Copyright and Similar Rights in Your contributions to Adapted + Material in accordance with the terms and conditions of this + Public License. + - c. Copyright and Similar Rights means copyright and/or similar + rights closely related to copyright including, without + limitation, performance, broadcast, sound recording, and Sui + Generis Database Rights, without regard to how the rights are + labeled or categorized. For purposes of this Public License, the + rights specified in Section 2(b)(1)-(2) are not Copyright and + Similar Rights. + - d. Effective Technological Measures means those measures that, + in the absence of proper authority, may not be circumvented + under laws fulfilling obligations under Article 11 of the WIPO + Copyright Treaty adopted on December 20, 1996, and/or similar + international agreements. + - e. Exceptions and Limitations means fair use, fair dealing, + and/or any other exception or limitation to Copyright and + Similar Rights that applies to Your use of the Licensed + Material. + - f. Licensed Material means the artistic or literary work, + database, or other material to which the Licensor applied this + Public License. + - g. Licensed Rights means the rights granted to You subject to + the terms and conditions of this Public License, which are + limited to all Copyright and Similar Rights that apply to Your + use of the Licensed Material and that the Licensor has authority + to license. + - h. Licensor means the individual(s) or entity(ies) granting + rights under this Public License. + - i. NonCommercial means not primarily intended for or directed + towards commercial advantage or monetary compensation. For + purposes of this Public License, the exchange of the Licensed + Material for other material subject to Copyright and Similar + Rights by digital file-sharing or similar means is NonCommercial + provided there is no payment of monetary compensation in + connection with the exchange. + - j. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, + distribution, dissemination, communication, or importation, and + to make material available to the public including in ways that + members of the public may access the material from a place and + at a time individually chosen by them. + - k. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and + of the Council of 11 March 1996 on the legal protection of + databases, as amended and/or succeeded, as well as other + essentially equivalent rights anywhere in the world. + - l. You means the individual or entity exercising the Licensed + Rights under this Public License. Your has a corresponding + meaning. + +- Section 2 – Scope. + + - a. License grant. + - 1. Subject to the terms and conditions of this Public + License, the Licensor hereby grants You a worldwide, + royalty-free, non-sublicensable, non-exclusive, irrevocable + license to exercise the Licensed Rights in the Licensed + Material to: + - A. reproduce and Share the Licensed Material, in whole + or in part, for NonCommercial purposes only; and + - B. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + - 2. Exceptions and Limitations. For the avoidance of doubt, + where Exceptions and Limitations apply to Your use, this + Public License does not apply, and You do not need to comply + with its terms and conditions. + - 3. Term. The term of this Public License is specified in + Section 6(a). + - 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter + created, and to make technical modifications necessary to do + so. The Licensor waives and/or agrees not to assert any + right or authority to forbid You from making technical + modifications necessary to exercise the Licensed Rights, + including technical modifications necessary to circumvent + Effective Technological Measures. For purposes of this + Public License, simply making modifications authorized by + this Section 2(a)(4) never produces Adapted Material. + - 5. Downstream recipients. + - A. Offer from the Licensor – Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + - B. No downstream restrictions. You may not offer or + impose any additional or different terms or conditions + on, or apply any Effective Technological Measures to, + the Licensed Material if doing so restricts exercise of + the Licensed Rights by any recipient of the Licensed + Material. + - 6. No endorsement. Nothing in this Public License + constitutes or may be construed as permission to assert or + imply that You are, or that Your use of the Licensed + Material is, connected with, or sponsored, endorsed, or + granted official status by, the Licensor or others + designated to receive attribution as provided in Section + 3(a)(1)(A)(i). + - b. Other rights. + - 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, + to the extent possible, the Licensor waives and/or agrees + not to assert any such rights held by the Licensor to the + limited extent necessary to allow You to exercise the + Licensed Rights, but not otherwise. + - 2. Patent and trademark rights are not licensed under this + Public License. + - 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + +- Section 3 – License Conditions. + + Your exercise of the Licensed Rights is expressly made subject to + the following conditions. + + - a. Attribution. + - 1. If You Share the Licensed Material (including in modified + form), You must: + - A. retain the following if it is supplied by the + Licensor with the Licensed Material: + - i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if designated); + - ii. a copyright notice; + - iii. a notice that refers to this Public License; + - iv. a notice that refers to the disclaimer of + warranties; + - v. a URI or hyperlink to the Licensed Material to + the extent reasonably practicable; + - B. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + - C. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + - 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may + be reasonable to satisfy the conditions by providing a URI + or hyperlink to a resource that includes the required + information. + - 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + - 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + +- Section 4 – Sui Generis Database Rights. + + Where the Licensed Rights include Sui Generis Database Rights that + apply to Your use of the Licensed Material: + + - a. for the avoidance of doubt, Section 2(a)(1) grants You the + right to extract, reuse, reproduce, and Share all or a + substantial portion of the contents of the database for + NonCommercial purposes only; + - b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; + and + - c. You must comply with the conditions in Section 3(a) if You + Share all or a substantial portion of the contents of the + database. + + For the avoidance of doubt, this Section 4 supplements and does not + replace Your obligations under this Public License where the + Licensed Rights include other Copyright and Similar Rights. + +- Section 5 – Disclaimer of Warranties and Limitation of Liability. + + - a. Unless otherwise separately undertaken by the Licensor, to + the extent possible, the Licensor offers the Licensed Material + as-is and as-available, and makes no representations or + warranties of any kind concerning the Licensed Material, whether + express, implied, statutory, or other. This includes, without + limitation, warranties of title, merchantability, fitness for a + particular purpose, non-infringement, absence of latent or other + defects, accuracy, or the presence or absence of errors, whether + or not known or discoverable. Where disclaimers of warranties + are not allowed in full or in part, this disclaimer may not + apply to You. + - b. To the extent possible, in no event will the Licensor be + liable to You on any legal theory (including, without + limitation, negligence) or otherwise for any direct, special, + indirect, incidental, consequential, punitive, exemplary, or + other losses, costs, expenses, or damages arising out of this + Public License or use of the Licensed Material, even if the + Licensor has been advised of the possibility of such losses, + costs, expenses, or damages. Where a limitation of liability is + not allowed in full or in part, this limitation may not apply to + You. + - c. The disclaimer of warranties and limitation of liability + provided above shall be interpreted in a manner that, to the + extent possible, most closely approximates an absolute + disclaimer and waiver of all liability. + +- Section 6 – Term and Termination. + + - a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply + with this Public License, then Your rights under this Public + License terminate automatically. + - b. Where Your right to use the Licensed Material has terminated + under Section 6(a), it reinstates: + + - 1. automatically as of the date the violation is cured, + provided it is cured within 30 days of Your discovery of the + violation; or + - 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect + any right the Licensor may have to seek remedies for Your + violations of this Public License. + + - c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing + so will not terminate this Public License. + - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + +- Section 7 – Other Terms and Conditions. + + - a. The Licensor shall not be bound by any additional or + different terms or conditions communicated by You unless + expressly agreed. + - b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + +- Section 8 – Interpretation. + + - a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could + lawfully be made without permission under this Public License. + - b. To the extent possible, if any provision of this Public + License is deemed unenforceable, it shall be automatically + reformed to the minimum extent necessary to make it enforceable. + If the provision cannot be reformed, it shall be severed from + this Public License without affecting the enforceability of the + remaining terms and conditions. + - c. No term or condition of this Public License will be waived + and no failure to comply consented to unless expressly agreed to + by the Licensor. + - d. Nothing in this Public License constitutes or may be + interpreted as a limitation upon, or waiver of, any privileges + and immunities that apply to the Licensor or You, including from + the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, +Creative Commons may elect to apply one of its public licenses to +material it publishes and in those instances will be considered the +"Licensor." The text of the Creative Commons public licenses is +dedicated to the public domain under the CC0 Public Domain Dedication. +Except for the limited purpose of indicating that material is shared +under a Creative Commons public license or as otherwise permitted by the +Creative Commons policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark "Creative +Commons" or any other trademark or logo of Creative Commons without its +prior written consent including, without limitation, in connection with +any unauthorized modifications to any of its public licenses or any +other arrangements, understandings, or agreements concerning use of +licensed material. For the avoidance of doubt, this paragraph does not +form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..aa10099 --- /dev/null +++ b/README.md @@ -0,0 +1,408 @@ +<p align="center"> + <img src="./assets/img/logo.png" width="250" height="200" /> +</p> +<h1 align="center">哔哩哔哩 - API 收集整理</h1> +<p align="center" class="shields"> + <a href="https://github.com/SocialSisterYi/bilibili-API-collect/issues" style="text-decoration: none;"> + <img src="https://img.shields.io/github/issues/SocialSisterYi/bilibili-API-collect.svg?style=flat&color=red" alt="GitHub issues"/> + </a> + <a href="https://github.com/SocialSisterYi/bilibili-API-collect/stargazers" style="text-decoration: none;"> + <img src="https://img.shields.io/github/stars/SocialSisterYi/bilibili-API-collect.svg?style=flat&color=yellow" alt="GitHub stars"/> + </a> + <a href="https://github.com/SocialSisterYi/bilibili-API-collect/network" style="text-decoration: none;"> + <img src="https://img.shields.io/github/forks/SocialSisterYi/bilibili-API-collect.svg?style=flat&color=blue" alt="GitHub forks"/> + </a> + <a href="https://github.com/SocialSisterYi/bilibili-API-collect/actions" style="text-decoration: none;"> + <img src="https://img.shields.io/github/actions/workflow/status/SocialSisterYi/bilibili-API-collect/vuepress-deploy.yml?style=flat" alt="Build status"/> + </a> + <a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE" style="text-decoration: none;"> + <img src="https://img.shields.io/badge/License-CC%20BY--NC%204.0-lightgrey.svg?style=flat" alt="GitHub license"/> + </a> +</p> +<p align="center" class="trendshift"> + <a href="https://trendshift.io/repositories/3218" target="_blank"> + <img src="https://trendshift.io/api/badge/repositories/3218" alt="Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/> + </a> +</p> +<h3 align="center">野生 API 文档</h3> +<h3 align="center">不断更新中....</h3> + +本项目旨在对 B 站 WEB、APP、TV 等客户端中,散落在世界各地的野生 API 进行收集整理,研究使用方法并对其进行说明,运用了黑箱法、控制变量法、代码逆向分析、拆包及反编译法、网络抓包法等研究办法 + +本文档探讨的对象是主站业务接口,[官方开放平台](https://openhome.bilibili.com/doc) 和 [直播开放平台](https://open-live.bilibili.com/document/) 均不属于本项目范畴,请移步 + +B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接口为 WebSocket;REST API 接口请求数据大多为 url query 表单或 JSON,返回数据大多为 JSON 或 Protobuf,强制使用 https 协议 + +📖阅读地址:[Github Pages](https://socialsisteryi.github.io/bilibili-API-collect/) + +小小的 Demo:~~av583785685~~ [视频失效原因](https://shakaianee.top/archives/56/) ([Youtube 备链](https://www.youtube.com/watch?v=nfF91Z6fqGk)) + +::: warning 声明 + +1. 本项目遵守 CC-BY-NC 4.0 协议,禁止一切商业使用,如需转载请注明作者 ID +2. **请勿滥用,本项目仅用于学习和测试!请勿滥用,本项目仅用于学习和测试!请勿滥用,本项目仅用于学习和测试!** +3. 利用本项目提供的接口、文档等造成不良影响及后果与本人无关 +4. 由于本项目的特殊性,可能随时停止开发或删档 +5. 本项目为开源项目,不接受任何形式的催单和索取行为,更不容许存在付费内容 +6. **上传任何信息时请注意脱敏,删去账户密码、敏感 cookies 等可能泄漏个人信息的数据(例如 `SESSDATA`、`bili_jct` 之类的 cookies)** + +::: + +## 🌱参与贡献 + +欢迎各位 dalao 对本项目做出贡献,也希望每个使用者都能提出宝贵的意见 + +目前本项目存在的问题包括但不限于: + +1. 文档二级目录尚未完成 +2. 部分文档较旧,修改与更新没有跟进 +3. 目前文档使用 Markdown 语法编写,不易生成编程语言的 SDK,详见 [#604](https://github.com/SocialSisterYi/bilibili-API-collect/issues/604) + +更多信息请浏览 [贡献指南](CONTRIBUTING.md) + +## 🍴目录 + +计划整理分类 & 目录:(文档已完结请选中 checkbox) + +- [ ] [接口签名与验证](docs/misc/sign) + - [x] [APP API 签名](docs/misc/sign/APP.md)(`appkey` 与 `sign`) + - [x] [已知的 APPKey](docs/misc/sign/APPKey.md) + - [x] [Wbi 签名](docs/misc/sign/wbi.md)(`wts`与`w_rid`) + - [ ] [bili_ticket](docs/misc/sign/bili_ticket.md) + - [ ] [v_voucher 验证](docs/misc/sign/v_voucher.md) +- [ ] [杂项](docs/misc) + - [x] [获取当前时间戳](docs/misc/time_stamp.md) + - [x] [公共错误码](docs/misc/errcode.md) + - [x] [图片格式化](docs/misc/picture.md) + - [x] [表达式渲染](docs/misc/mathjax.md) + - [x] [bvid 说明](docs/misc/bvid_desc.md) + - [ ] [设备唯一标识 BUVID](docs/misc/device_identity.md) + - [ ] [获取 buvid3 / buvid4 / b_nut](docs/misc/buvid3_4.md) + - [ ] [b23.tv 短链](docs/misc/b23tv.md) +- [ ] [gRPC API 接口定义](grpc_api) +- [ ] [登录](docs/login) + - [x] [登录操作 (人机认证)](docs/login/login_action) + - [x] [短信登录](docs/login/login_action/SMS.md) + - [x] [密码登录](docs/login/login_action/password.md) + - [x] [二维码登录](docs/login/login_action/QR.md) + - [ ] SNS 登录 (QQ & 微信 & 微博) + - [x] [登录基本信息](docs/login/login_info.md) + - [ ] [个人中心](docs/login/member_center.md) + - [ ] [注销登录](docs/login/exit.md) + - [x] [登录记录](docs/login/login_notice.md) + - [x] [Web 端 Cookie 刷新](docs/login/cookie_refresh.md) +- [ ] [消息中心](docs/message) + - [ ] [通知类消息](docs/message/msg.md) + - [x] [私信](docs/message/private_msg.md) + - [x] [私信消息类型、内容说明](docs/message/private_msg_content.md) + - [x] [设置](docs/message/settings.md) +- [ ] [用户](docs/user) + - [x] [基本信息](docs/user/info.md) + - [x] [状态数](docs/user/status_number.md) + - [x] [关系](docs/user/relation.md) + - [ ] [个人空间](docs/user/space.md) + - [x] ~~[检查昵称是否可注册](docs/user/check_nickname.md)~~ (已失效) + - [x] [用户注册](docs/user/register.md) + - [x] [用户认证类型一览](docs/user/official_role.md) + - [ ] [加入老粉计划](docs/user/contract.md) + - [x] [所有粉丝勋章](docs/user/medals.md) + - [ ] [批量查询](docs/user/batch.md) +- [ ] [大会员](docs/vip) + - [ ] [大会员基本信息](docs/vip/info.md) + - [ ] [大会员中心](docs/vip/center.md) + - [ ] [大会员签到](docs/vip/clockin.md) + - [ ] [大会员操作](docs/vip/action.md) +- [ ] [视频](docs/video) + - [x] [视频分区一览 (分区代码)](docs/video/video_zone.md) + - [ ] [视频分区一览 (分区代码) (v2)](docs/video/video_zone_v2.md) + - [x] [基本信息](docs/video/info.md) + - [x] ~~[状态数](docs/video/status_number.md)~~ (已失效) + - [x] [快照](docs/video/snapshot.md) + - [x] [点赞 & 投币 & 收藏 & 分享](docs/video/action.md) + - [ ] [TAG](docs/video/tags.md) + - [x] [视频推荐](docs/video/recommend.md) + - [x] [播放 & 下载地址 (视频流)](docs/video/videostream_url.md) + - [ ] [互动视频](docs/video/interact_video.md) + - [x] [高能进度条](docs/video/pbp.md) + - [ ] [信息上报 (心跳及记录历史)](docs/video/report.md) + - [x] [视频属性数据](docs/video/attribute_data.md) + - [x] [视频在线人数](docs/video/online.md) + - [x] [视频 AI 摘要](docs/video/summary.md) + - [ ] [稿件投诉](docs/video/appeal.md) + - [ ] [视频合集](docs/video/collection.md) + - [ ] [播放器](docs/video/player.md) +- [ ] [剧集 (番剧、影视)](docs/bangumi) + - [ ] [基本信息](docs/bangumi/info.md) + - [ ] [播放 & 下载地址(视频流)](docs/bangumi/videostream_url.md) + - [ ] [时间轴](docs/bangumi/timeline.md) + - [ ] [索引](docs/bangumi/season_index.md) + - [ ] [追番相关](docs/bangumi/follow.md) + - [ ] 状态数 + - [ ] 操作 +- [ ] [视频弹幕](docs/danmaku) + - [x] [protobuf 实时弹幕](docs/danmaku/danmaku_proto.md) + - [x] [protobuf 弹幕元数据(BAS 弹幕 / 互动弹幕)](docs/danmaku/danmaku_view_proto.md) + - [x] [xml 实时弹幕](docs/danmaku/danmaku_xml.md) + - [x] [历史弹幕](docs/danmaku/history.md) + - [x] [快照](docs/danmaku/snapshot.md) + - [ ] [弹幕操作](docs/danmaku/action.md) + - [ ] 高级弹幕 + - [ ] 屏蔽管理 + - [ ] [智能防挡弹幕](docs/danmaku/webmask.md) + - [x] [弹幕个人配置修改](docs/danmaku/config.md) + - [x] [名词解释](docs/danmaku/buzzword.md) + - [x] [点赞查询](docs/danmaku/thumbup.md) +- [x] [视频笔记](docs/note) + - [x] [笔记列表](docs/note/list.md) + - [x] [笔记详细信息](docs/note/info.md) + - [x] [笔记操作](docs/note/action.md) +- [ ] [图文](docs/opus) + - [x] [图文详细](docs/opus/detail.md) + - [x] [空间图文](docs/opus/space.md) + - [ ] [功能模块](docs/opus/features.md) + - [ ] [富文本节点](docs/opus/rich_text_nodes.md) +- [ ] [专栏](docs/article) + - [ ] [专栏内容](docs/article/view.md) + - [ ] [专栏分类](docs/article/category.md) + - [x] [卡片信息](docs/article/card.md) + - [X] [基本信息](docs/article/info.md) + - [X] [点赞 & 投币 & 收藏 & 分享](docs/article/action.md) + - [X] [文集基本信息](docs/article/articles.md) +- [ ] [动态](docs/dynamic) + - [ ] [获取动态列表](docs/dynamic/all.md) + - [ ] [用户空间动态](docs/dynamic/space.md) + - [ ] [动态基本信息](docs/dynamic/basicInfo.md) + - [ ] [动态卡片信息字段](docs/dynamic/card_info.md) + - [ ] [获取动态详情](docs/dynamic/detail.md) + - [ ] [动态类型对照](docs/dynamic/dynamic_enum.md) + - [ ] [动态信息](docs/dynamic/content.md) + - [ ] [发送 & 转载动态](docs/dynamic/publish.md) + - [ ] [根据关键字搜索用户(at 别人时的填充列表)](docs/dynamic/atlist.md) + - [ ] [操作](docs/dynamic/action.md) + - [ ] [话题](docs/dynamic/topic.md) + - [ ] [动态内容](docs/dynamic/get_dynamic_detail.md) + - [ ] [导航栏动态](docs/dynamic/nav.md) + - [x] [首页公告栏](docs/dynamic/banner.md) +- [ ] [创作中心](docs/creativecenter) + - [ ] [投稿](docs/creativecenter/upload.md) + - [ ] [统计与数据](docs/creativecenter/statistics&data.md) + - [ ] 列表查询相关 + - [x] [电磁力数据](docs/creativecenter/railgun.md) + - [ ] [合集管理](docs/creativecenter/season.md) + - [ ] [视频相关杂项](docs/creativecenter/videos.md) + - [ ] [图文操作](docs/creativecenter/opus.md) +- [ ] [音频](docs/audio) + - [x] [歌曲基本信息](docs/audio/info.md) + - [ ] [歌单 & 音频收藏夹详细信息](docs/audio/music_list.md) + - [ ] [状态数](docs/audio/status_number.md) + - [ ] [投币 & 收藏](docs/audio/action.md) + - [x] [播放 & 下载地址(音频流)](docs/audio/musicstream_url.md) + - [x] [音频榜单](docs/audio/rank.md) +- [ ] [排行榜 & 最新视频](docs/video_ranking) + - [ ] [排行榜](docs/video_ranking/ranking.md) + - [ ] [热门视频](docs/video_ranking/popular.md) + - [ ] [最新视频](docs/video_ranking/dynamic.md) + - [x] [入站必刷视频](docs/video_ranking/precious_videos.md) +- [ ] [搜索](docs/search) + - [x] [搜索请求](docs/search/search_request.md) + - [x] [搜索结果](docs/search/search_response.md) + - [x] [默认搜索 & 热搜](docs/search/hot.md) + - [x] [搜索建议](docs/search/suggest.md) +- [ ] [小黑屋](docs/blackroom) + - [ ] 基本信息 + - [x] [封禁公示](docs/blackroom/banlist.md) + - [x] [风纪委员及众裁案件相关](docs/blackroom/jury) + - [x] [风纪委员基本信息](docs/blackroom/jury/base_info.md) + - [x] [众裁案件基本信息](docs/blackroom/jury/judgement_info.md) + - [x] [裁决操作](docs/blackroom/jury/action.md) +- [x] [评论区](docs/comment) + - [x] [评论区明细](docs/comment/list.md) + - [x] [操作](docs/comment/action.md) +- [ ] [表情](docs/emoji) + - [x] [表情及表情包信息](docs/emoji/list.md) + - [x] [操作](docs/emoji/action.md) +- [x] [实时广播(通讯协议)](docs/broadcast) + - [x] [视频内广播](docs/broadcast/video_room.md) +- [ ] [充电](docs/electric) + - [ ] [包月充电](docs/electric/monthly.md) + - [ ] 自定义充电 + - [x] [B 币方式充电](docs/electric/Bcoin.md) + - [x] [微信 & 支付宝方式充电](docs/electric/WeChat&Alipay.md) + - [x] [充电留言](docs/electric/charge_msg.md) + - [x] [充电列表](docs/electric/charge_list.md) +- [ ] ~~[相簿](docs/album)~~ (已下线) + - [x] ~~[基本信息](docs/album/info.md)~~ + - [x] ~~[相簿列表](docs/album/list.md)~~ + - [x] ~~[推荐作者](docs/album/recommend_author.md)~~ + - [x] ~~[活动列表](docs/album/activity_list.md)~~ + - [x] ~~[操作](docs/album/action.md)~~ + - [ ] ~~投稿~~ +- [ ] [历史记录 & 稍后再看](docs/historytoview) + - [x] [历史记录](docs/historytoview/history.md) + - [x] [稍后再看](docs/historytoview/toview.md) +- [ ] [收藏夹](docs/fav) + - [x] [基本信息](docs/fav/info.md) + - [x] [收藏夹内容](docs/fav/list.md) + - [ ] [收藏夹操作](docs/fav/action.md) +- [ ] [课程](docs/cheese) + - [x] [课程基本信息](docs/cheese/info.md) + - [ ] 已购课程 + - [ ] 分区推荐列表 + - [ ] 操作 + - [x] [播放 & 下载地址(视频流)](docs/cheese/videostream_url.md) +- [ ] [直播](docs/live) + - [ ] [直播间基本信息](docs/live/info.md) + - [ ] [直播推荐](docs/live/recommend.md) + - [ ] [直播分区](docs/live/live_area.md) + - [ ] [直播间管理](docs/live/manage.md) + - [ ] 直播间操作 + - [ ] [直播视频流](docs/live/live_stream.md) + - [ ] [直播信息流](docs/live/message_stream.md) + - [ ] [直播红包](docs/live/redpocket.md) + - [ ] [直播间表情包](docs/live/emoticons.md) + - [ ] [直播间用户实用 API](docs/live/user.md) + - [x] [直播间禁言相关](docs/live/silent_user_manage.md) + - [ ] [关注UP直播情况](docs/live/follow_up_live.md) + - [ ] [直播心跳上报](docs/live/report.md) + - [ ] [直播间弹幕](docs/live/danmaku.md) + - [ ] [直播流水](docs/live/live_bill.md) + - [ ] [礼物相关](docs/live/gift.md) + - [ ] [大航海/粉丝团](docs/live/guard.md) + - [ ] [直播回放](docs/live/live_replay.md) + - [ ] [直播数据](docs/live/live_data.md) + - [ ] [直播投票](docs/live/live_vote.md) +- [ ] [活动](docs/activity) + - [ ] [活动列表](docs/activity/list.md) + - [ ] [活动主题信息](docs/activity/info.md) +- [ ] [转正答题](docs/newbie_exam) + - [x] [查询信息](docs/newbie_exam/info.md) + - [x] [拉取题目](docs/newbie_exam/fetch.md) + - [x] [操作](docs/newbie_exam/action.md) +- [ ] [青少年守护](docs/teenager/) + - [x] [青少年模式](docs/teenager/teenager_mode.md) + - [ ] 亲子平台 + - [ ] 课堂模式 +- [ ] [B 币钱包](docs/wallet/) + - [ ] [基本信息](docs/wallet/info.md) + - [ ] B 币充值 + - [ ] 贝壳相关 +- [ ] [哔哩哔哩漫画](docs/manga) + - [ ] 用户信息 + - [x] [签到](docs/manga/ClockIn.md) + - [x] [积分商城](docs/manga/point_shop.md) + - [x] [漫画操作](docs/manga/Comic.md) + - [ ] [漫画任务操作](docs/manga/Activity.md) + - [x] [漫画赛季](docs/manga/Season.md) + - [x] [漫读券/已购相关](docs/manga/User.md) + - [x] [下载](docs/manga/Download.md) + - [x] [data.index 解析](docs/manga/index_file.md) + - [ ] [获取轻享卡信息](docs/manga/light_card.md) +- [ ] 哔哩哔哩游戏 +- [ ] [终端网络查询](docs/clientinfo) + - [x] [基于 IP 的地理位置查询](docs/clientinfo/ip.md) +- [ ] [客服中心](docs/customerservice) + - [ ] [客服消息](docs/customerservice/msg.md) +- [ ] [web 端组件](docs/web_widget) + - [x] [分区当日投稿数](docs/web_widget/zone_upload.md) + - [x] [404 页漫画收集](docs/web_widget/404_manga.md) + - [ ] [首页横幅头图](docs/web_widget/header.md) + - [ ] [分区横幅轮播图](docs/web_widget/banner.md) +- [ ] [APP 端组件](docs/APP_widget) + - [x] [开屏图片 + 恰饭珍贵录像](docs/APP_widget/splash.md) + - [ ] [获取最新 APP 版本](docs/APP_widget/ver.md) +- [ ] [个性装扮](docs/garb) + - [x] [APP 主题](docs/garb/skin.md) + - [x] [主题色](docs/garb/color.md) + - [ ] [装扮/收藏集](docs/garb/lottery.md) + +## ✨鸣谢 + +你们的存在,让社区更美好 + +[![contributors](https://opencollective.com/bilibili-api-collect/contributors.svg?width=860&button=false)](https://github.com/SocialSisterYi/bilibili-API-collect/graphs/contributors) + +## 📖相关协议基础 + +HTTP 协议:[传送门](https://www.cnblogs.com/an-wen/p/11180076.html) + +JSON 序列格式:[传送门](https://www.sojson.com/json/json_index.html) + +XML 序列格式:[传送门](https://www.w3school.com.cn/xml/xml_intro.asp) + +ProtoBuf 序列格式:[传送门](https://www.jianshu.com/p/a24c88c0526a) + +## 💦交流 + +<img src="https://avatars.githubusercontent.com/u/45892418" width="100" height="100" /> + +⚠注意:开源社群欢迎交流探讨,**拒绝**咨询、**不支持**合作,**黑产号**一经发现立即拉黑并举报相关 SRC + +- QQ 交流群:[邀请链接](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&group_code=191187164) +- Telegram 交流群:[@bilibili_API_collect_community](https://t.me/bilibili_API_collect_community) + +## 🧋发电 + +欢迎来~~交♂易~~,大家的支持就是我继续开发的动力! + +~~请可爱的易姐喝杯奶茶~~ + +WeChat & Alipay: + +<img src="./assets/img/sponsorQR.jpg" width="300" height="300" /> + +OR Aifadian:[https://afdian.com/@ShakaiAneE](https://afdian.com/@ShakaiAneE) + +## 🔗相关项目推荐 + +### 库及文档 + +- [jingyuexing/bilibiliAPI](https://github.com/jingyuexing/bilibiliAPI) +- [fython/BilibiliAPIDocs](https://github.com/fython/BilibiliAPIDocs) +- [czp3009/bilibili-api](https://github.com/czp3009/bilibili-api) +- [Vespa314/bilibili-api](https://github.com/Vespa314/bilibili-api) +- [Pengfei00/bili-utils](https://github.com/Pengfei00/bili-utils): bilibili 工具箱 +- [lovelyyoshino/Bilibili-Live-API](https://github.com/lovelyyoshino/Bilibili-Live-API): Bilibili 直播/番剧 API 文档 +- [flaribbit/bilibili-manga-spider](https://github.com/flaribbit/bilibili-manga-spider): Bilibili 漫画爬虫 +- [simon300000/bili-api](https://github.com/simon300000/bili-api): Bilibili Node.js API +- [iyear/biligo](https://github.com/iyear/biligo): Bilibili API SDK in Golang +- [bilibili-openplatform/demo](https://github.com/bilibili-openplatform/demo): 哔哩哔哩开放平台示例代码库 +- [ddiu8081/blive-message-listener](https://github.com/ddiu8081/blive-message-listener): Bilibili-live danmu listener with type. Bilibili 直播间弹幕监听库,支持类型输出。 +- [Nemo2011/bilibili-api](https://github.com/Nemo2011/bilibili-api): 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。工具齐全。 +- [CuteReimu/bilibili](https://github.com/CuteReimu/bilibili): 哔哩哔哩API的Go版本SDK + +### 成品 + +- [NullPointerException/AnimePipe](https://codeberg.org/NullPointerException/AnimePipe): 功能完善的Android流媒体综合客户端,支持Bilibili, Youtube, NicoNico +- [3Shain/Comen](https://github.com/3Shain/Comen): 基于h5的B站直播弹幕姬 +- [AncientLysine/BiliLocal](https://github.com/AncientLysine/BiliLocal): 本地弹幕播放器 +- [zyzsdy/biliroku](https://github.com/zyzsdy/biliroku): bilibili 生放送(直播)录制 +- [otakustay/danmaku-to-ass](https://github.com/otakustay/danmaku-to-ass): A站B站弹幕转字幕文件 +- [bilibili-helper/bilibili-helper-o](https://github.com/bilibili-helper/bilibili-helper-o): 哔哩哔哩 (bilibili.com) 辅助工具,可以下载视频,查询弹幕发送人以及一些十分实用的直播区功能。 +- [apachecn/CDNDrive](https://github.com/apachecn/CDNDrive): 基于B站相簿上传的文件分块索引存储器 +- [Hsury/BiliDrive](https://github.com/Hsury/BiliDrive): 基于B站相簿上传的文件分块索引存储器 +- [Tsuk1ko/bilibili-live-chat](https://github.com/Tsuk1ko/bilibili-live-chat): 无后端的仿 YouTube Live Chat 风格的简易 Bilibili 弹幕姬 +- [ironmanic/crawler_target_users_good](https://github.com/ironmanic/crawler_target_users_good): 搜索bilibili特定视频,为评论 点赞,关注,私信,一体化服务 +- [dd-center/DDatElectron](https://github.com/dd-center/DDatElectron): DD@Home 分布式项目, 桌面客户端 +- [dd-center/vtbs.moe](https://github.com/dd-center/vtbs.moe): B站VTB数据中心 +- [the1812/Bilibili-Evolved](https://github.com/the1812/Bilibili-Evolved): 强大的哔哩哔哩增强脚本: 下载视频、音乐、封面、弹幕 / 简化直播间、评论区、首页 / 自定义顶栏、删除广告、夜间模式 / 触屏设备支持 +- [xlzy520/bili-short-url](https://github.com/xlzy520/bili-short-url): 哔哩哔哩短链生成器 +- [zjkwdy/bili_app_splash](https://github.com/zjkwdy/bili_app_splash): B站壁纸娘和开屏图自动下载,每天使用Actions自动同步 +- [Jannchie/BiliOB](https://github.com/Jannchie/BiliOB): BiliOB观测者是一个观测B站UP主及视频数据变化,并予以分析的Web应用程序 +- [biliob233/biliob233.github.io](https://github.com/biliob233/biliob233.github.io): ~~无可奉告~~ +- [biliup/biliup](https://github.com/biliup/biliup): 全自动录播、投稿工具,支持录制直播弹幕,也支持Youtube、twitch直播回放列表自动搬运到B站 +- [ddiu8081/bilicli](https://github.com/ddiu8081/bilicli): Bilibili-live danmu dashboard in your terminal. +- [MotooriKashin/Bilibili-Old](https://github.com/MotooriKashin/Bilibili-Old): 恢复旧版Bilibili页面,为了那些念旧的人。 +- [SocialSisterYi/bcut-asr](https://github.com/SocialSisterYi/bcut-asr): 使用必剪API的语音字幕识别 +- [CzJam/Bili_Realtime_Data](https://github.com/CzJam/Bili_Realtime_Data): Bilibili粉丝与视频实时数据统计 +- [kingwingfly/fav](https://github.com/kingwingfly/fav): 自动同步bili收藏夹、合集视频到本地的CLI工具(Rust实现,并提供一个文档测试完善的Rust风格的用于构建有状态爬虫的核心库) +- [linyuye/Bilibili_crawler](https://github.com/linyuye/Bilibili_crawler): 基于bilibili懒加载api爬取b站动态,视频等评论区 +- [ouzexi/bilibili-hot-tags](https://github.com/ouzexi/bilibili-hot-tags): 一个B站热门视频标签检索统计小工具 +- [SpenserCai/rust-video-downloader](https://github.com/SpenserCai/rust-video-downloader): Rust实现的高性能跨平台视频下载器(目前支持Bilibili),基本覆盖了BBDown的所有功能。 + +### 其他 + +- [kuresaru/geetest-validator](https://github.com/kuresaru/geetest-validator): GeeTest 调试器 +- [bloomrpc/bloomrpc](https://github.com/bloomrpc/bloomrpc): GUI Client for GRPC Services +- [grpc/grpc](https://github.com/grpc/grpc): The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#) +- [glideapps/quicktype](https://github.com/glideapps/quicktype): quicktype generates strongly-typed models and serializers from JSON, JSON Schema, TypeScript, and GraphQL queries, making it a breeze to work with JSON type-safely in many programming languages. 一键生成多种语言的JSON反序列化所需类,以便于快速反序列化,有网页版 +- [SessionHu/json-apidoc-gen](https://github.com/SessionHu/json-apidoc-gen): Simple CLI tool for generating BAC document template diff --git a/assets/img/2233login.png b/assets/img/2233login.png new file mode 100644 index 0000000..3d9ff56 Binary files /dev/null and b/assets/img/2233login.png differ diff --git a/assets/img/activit.svg b/assets/img/activit.svg new file mode 100644 index 0000000..b210f77 --- /dev/null +++ b/assets/img/activit.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> +<path d="M518.656 475.904a223.488 223.488 0 0 1-23.296-75.52 366.08 366.08 0 0 1 81.408 14.592 623.104 623.104 0 0 1-58.112 60.928m-69.888-119.04c-11.52-58.112-8.704-55.296-25.6-156.928a265.984 265.984 0 0 0-78.336 46.592c51.2 104.448 60.928 165.376 92.928 290.304 51.2-5.632 211.968-40.704 226.56-130.56 8.704-64-142.336-64-215.04-49.408M486.4 624.128a263.424 263.424 0 0 0-107.52 69.632l43.52 153.6a47.872 47.872 0 0 1-92.928 23.296L216.576 473.088l-72.704-204.8c2.816-5.632 5.888-8.704 8.704-14.336l-14.592-51.2a46.08 46.08 0 0 1 32-57.856A47.616 47.616 0 0 1 228.096 179.2v2.816a334.848 334.848 0 0 1 98.816-43.52c177.152-46.592 203.264 55.04 429.824 23.296L890.368 588.8c-171.52 90.112-232.448-11.52-403.712 35.072" fill="#F39800"> +</svg> \ No newline at end of file diff --git a/assets/img/add.svg b/assets/img/add.svg new file mode 100644 index 0000000..ecdea95 --- /dev/null +++ b/assets/img/add.svg @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 838 838" enable-background="new 0 0 838 838" xml:space="preserve"> +<path fill="#1497C7" d="M419,838c-118.67-3.33-217.33-44.33-296-123S3.33,537.67,0,419c3.33-118.67,44.33-217.33,123-296 + S300.33,3.33,419,0c118.67,3.33,217.33,44.33,296,123s119.67,177.33,123,296c-3.33,118.67-44.33,217.33-123,296 + S537.67,834.67,419,838z M372,372H233v94h139v139h94V466h139v-94H466V233h-94V372z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/assets/img/aiSummary.svg b/assets/img/aiSummary.svg new file mode 100644 index 0000000..efa4420 --- /dev/null +++ b/assets/img/aiSummary.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024"><defs><clipPath id="master_svg0_1_5"><rect x="0" y="0" width="1024" height="1024" rx="0"/></clipPath><linearGradient x1="-0.03559274226427078" y1="0.14154286682605743" x2="0.3670809864997864" y2="1.0495315790176392" id="master_svg1_1_92"><stop offset="0%" stop-color="#393946" stop-opacity="1"/><stop offset="40.115898847579956%" stop-color="#23232E" stop-opacity="1"/><stop offset="100%" stop-color="#191924" stop-opacity="1"/></linearGradient><linearGradient x1="1.0356004238128662" y1="0.14154286682605743" x2="0.6329137682914734" y2="1.0495315790176392" id="master_svg2_1_93"><stop offset="0%" stop-color="#393946" stop-opacity="1"/><stop offset="40.115898847579956%" stop-color="#23232E" stop-opacity="1"/><stop offset="100%" stop-color="#191924" stop-opacity="1"/></linearGradient><filter id="master_svg3_1_05" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="-5" y="-5" width="831.2000732421875" height="728.800048828125"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="1" dx="1"/><feGaussianBlur stdDeviation="1.5"/><feColorMatrix type="matrix" values="0 0 0 0 0.03954499959945679 0 0 0 0 0.08450230211019516 0 0 0 0 0.20010699331760406 0 0 0 0.8500000238418579 0"/><feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter><filter id="master_svg4_1_12" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="0" y="0" width="887.4667358398438" height="750.933349609375"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feColorMatrix in="SourceAlpha" type="matrix" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="3.714289903640747" dx="2.785710096359253"/><feGaussianBlur stdDeviation="1.3928600549697876"/><feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/><feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/><feBlend mode="normal" in2="shape" result="effect1_innerShadow"/><feColorMatrix in="SourceAlpha" type="matrix" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="-1.8571399450302124" dx="-2"/><feGaussianBlur stdDeviation="1.8571399450302124"/><feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0.15444999933242798 0 0 0 0 0.45426398515701294 0 0 0 0.10999999940395355 0"/><feBlend mode="normal" in2="effect1_innerShadow" result="effect2_innerShadow"/></filter><linearGradient x1="0.21811191737651825" y1="0.21849091351032257" x2="0.6896499991416931" y2="1.0494545698165894" id="master_svg5_1_95"><stop offset="0%" stop-color="#F4FCFF" stop-opacity="1"/><stop offset="100%" stop-color="#EAF5F9" stop-opacity="1"/></linearGradient></defs><g clip-path="url(#master_svg0_1_5)"><g><g><path d="M257.357049609375,80.1351999267578C279.080249609375,62.032609926757814,311.364849609375,64.96772992675781,329.467549609375,86.69049992675781L414.802349609375,189.09079992675782C432.902349609375,210.8137999267578,429.967349609375,243.0987999267578,408.245349609375,261.2007999267578C386.522349609375,279.30379992675785,354.239349609375,276.3687999267578,336.135049609375,254.6457999267578L250.801749609375,152.2452999267578C232.699149609375,130.5224999267578,235.634279609375,98.2374999267578,257.357049609375,80.1351999267578Z" fill-rule="evenodd" fill="url(#master_svg1_1_92)" fill-opacity="1"/></g><g><path d="M749.5745874023437,80.1351999267578C727.8525874023437,62.032609926757814,695.5695874023438,64.96772992675781,677.4648874023437,86.69049992675781L592.1314874023437,189.09079992675782C574.0306074023438,210.8137999267578,576.9660174023437,243.0987999267578,598.6884874023438,261.2007999267578C620.4109874023437,279.30379992675785,652.6942874023438,276.3687999267578,670.7985874023437,254.6457999267578L756.1315874023437,152.2452999267578C774.2325874023437,130.5224999267578,771.3005874023438,98.2374999267578,749.5745874023437,80.1351999267578Z" fill-rule="evenodd" fill="url(#master_svg2_1_93)" fill-opacity="1"/></g><g style="opacity:0.20000000298023224;" filter="url(#master_svg3_1_05)"><g><path d="M921.6000244140625,623.0460183105469C921.6000244140625,854.0370183105468,738.2150244140626,921.6000183105468,512.0000244140625,921.6000183105468C285.7840244140625,921.6000183105468,102.4000244140625,854.0370183105468,102.4000244140625,623.0460183105469C102.4000244140625,392.05501831054687,133.9078244140625,204.80001831054688,512.0000244140625,204.80001831054688C905.8480244140625,204.80001831054688,921.6000244140625,392.05501831054687,921.6000244140625,623.0460183105469Z" fill="#D9D9D9" fill-opacity="1"/></g></g><g filter="url(#master_svg4_1_12)"><g><path d="M955.7336625976562,646.7890183105469C955.7336625976562,909.8580183105469,757.0666625976562,955.7330183105469,511.99966259765625,955.7330183105469C266.93266259765625,955.7330183105469,68.26666259765625,909.8580183105469,68.26666259765625,646.7890183105469C68.26666259765625,341.3330183105469,102.39996259765624,204.80001831054688,511.99966259765625,204.80001831054688C938.6666625976562,204.80001831054688,955.7336625976562,341.3330183105469,955.7336625976562,646.7890183105469Z" fill="url(#master_svg5_1_95)" fill-opacity="1"/></g></g><g><path d="M163.36666870117188,485.00368701171874C163.36666870117188,407.0843870117187,219.98396870117188,340.03798701171877,297.34866870117185,330.76228701171874C450.79566870117185,312.36440701171875,572.3406687011718,311.68546701171874,727.4906687011719,330.44178701171876C804.5126687011718,339.7532870117187,860.6616687011718,406.65778701171877,860.6616687011718,484.2426870117188L860.6616687011718,655.0866870117188C860.6616687011718,728.1596870117187,810.8406687011719,792.7736870117187,738.8226687011719,805.1506870117187C576.9556687011718,832.9626870117188,449.55266870117185,827.6006870117187,292.1596687011719,802.6006870117187C217.16826870117188,790.6886870117187,163.36666870117188,724.7296870117187,163.36666870117188,648.7996870117188L163.36666870117188,485.00368701171874Z" fill="#191924" fill-opacity="1"/></g><g><path d="M639.7466748046875,522.6667022705078L639.7466748046875,617.7519022705078Q639.7466748046875,618.5060022705078,639.7836748046875,619.2593022705078Q639.8206748046875,620.0125022705079,639.8945748046875,620.7630022705079Q639.9684748046875,621.5135022705078,640.0791748046875,622.2595022705078Q640.1898748046875,623.0057022705078,640.3369748046875,623.7447022705078Q640.4840748046875,624.4847022705078,640.6672748046875,625.2167022705078Q640.8505748046875,625.9477022705078,641.0694748046875,626.6697022705079Q641.2883748046875,627.3907022705079,641.5424748046875,628.1007022705078Q641.7964748046875,628.8117022705078,642.0850748046875,629.5077022705078Q642.3736748046875,630.2047022705078,642.6961748046875,630.8867022705078Q643.0185748046875,631.5677022705078,643.3740748046876,632.2337022705078Q643.7295748046874,632.8987022705078,644.1172748046876,633.5447022705079Q644.5049748046875,634.1917022705078,644.9239748046875,634.8187022705079Q645.3428748046875,635.4457022705078,645.7921748046875,636.0517022705078Q646.2413748046876,636.6577022705078,646.7197748046875,637.2407022705078Q647.1981748046875,637.8237022705079,647.7046748046876,638.3827022705078Q648.2110748046875,638.9407022705078,648.7443748046875,639.4747022705078Q649.2775748046874,640.0077022705078,649.8363748046875,640.5137022705078Q650.3951748046875,641.0207022705079,650.9780748046875,641.4987022705078Q651.5610748046875,641.9777022705078,652.1667748046875,642.4267022705078Q652.7724748046875,642.8757022705079,653.3995748046875,643.2947022705079Q654.0265748046875,643.7137022705078,654.6734748046875,644.1017022705078Q655.3202748046875,644.4887022705078,655.9853748046875,644.8447022705078Q656.6504748046875,645.1997022705078,657.3321748046875,645.5227022705078Q658.0138748046875,645.8447022705078,658.7106748046875,646.1337022705078Q659.4073748046875,646.4217022705078,660.1173748046875,646.6757022705078Q660.8274748046875,646.9307022705078,661.5491348046875,647.1487022705078Q662.2707948046875,647.3677022705078,663.0023248046875,647.5517022705078Q663.7338548046876,647.7347022705078,664.4735048046875,647.8817022705078Q665.2131448046875,648.0287022705078,665.9591148046875,648.1397022705078Q666.7050848046875,648.2497022705078,667.4555848046875,648.3237022705079Q668.2060948046875,648.3977022705078,668.9593148046876,648.4347022705078Q669.7125408046875,648.4717022705079,670.4666748046875,648.4717022705079Q671.2208088046875,648.4717022705079,671.9740348046874,648.4347022705078Q672.7272548046875,648.3977022705078,673.4777648046875,648.3237022705079Q674.2282648046875,648.2497022705078,674.9742348046875,648.1397022705078Q675.7202048046875,648.0287022705078,676.4598448046875,647.8817022705078Q677.1994948046874,647.7347022705078,677.9310248046875,647.5517022705078Q678.6625548046875,647.3677022705078,679.3842148046875,647.1487022705078Q680.1058748046875,646.9307022705078,680.8159748046875,646.6757022705078Q681.5259748046875,646.4217022705078,682.2226748046875,646.1337022705078Q682.9194748046875,645.8447022705078,683.6011748046875,645.5227022705078Q684.2828748046875,645.1997022705078,684.9479748046875,644.8447022705078Q685.6130748046875,644.4887022705078,686.2598748046875,644.1017022705078Q686.9067748046875,643.7137022705078,687.5337748046875,643.2947022705079Q688.1608748046875,642.8757022705079,688.7665748046875,642.4267022705078Q689.3722748046875,641.9777022705078,689.9552748046875,641.4987022705078Q690.5381748046875,641.0207022705079,691.0969748046875,640.5137022705078Q691.6557748046876,640.0077022705078,692.1889748046875,639.4747022705078Q692.7222748046875,638.9407022705078,693.2286748046874,638.3827022705078Q693.7351748046875,637.8237022705079,694.2135748046875,637.2407022705078Q694.6919748046874,636.6577022705078,695.1411748046875,636.0517022705078Q695.5904748046875,635.4457022705078,696.0093748046875,634.8187022705079Q696.4283748046875,634.1917022705078,696.8160748046874,633.5447022705079Q697.2037748046876,632.8987022705078,697.5592748046874,632.2337022705078Q697.9147748046875,631.5677022705078,698.2371748046875,630.8867022705078Q698.5596748046875,630.2047022705078,698.8482748046875,629.5077022705078Q699.1368748046875,628.8117022705078,699.3908748046875,628.1007022705078Q699.6449748046875,627.3907022705079,699.8638748046875,626.6697022705079Q700.0827748046875,625.9477022705078,700.2660748046875,625.2167022705078Q700.4492748046875,624.4847022705078,700.5963748046875,623.7447022705078Q700.7434748046875,623.0057022705078,700.8541748046875,622.2595022705078Q700.9648748046875,621.5135022705078,701.0387748046875,620.7630022705079Q701.1126748046875,620.0125022705079,701.1496748046875,619.2593022705078Q701.1866748046875,618.5060022705078,701.1866748046875,617.7519022705078L701.1866748046875,522.6667022705078Q701.1866748046875,521.9125682705078,701.1496748046875,521.1593422705079Q701.1126748046875,520.4061222705078,701.0387748046875,519.6556122705078Q700.9648748046875,518.9051122705079,700.8541748046875,518.1591422705078Q700.7434748046875,517.4131722705079,700.5963748046875,516.6735322705078Q700.4492748046875,515.9338822705079,700.2660748046875,515.2023522705078Q700.0827748046875,514.4708222705078,699.8638748046875,513.7491622705078Q699.6449748046875,513.0275022705079,699.3908748046875,512.3174022705078Q699.1368748046875,511.6074022705078,698.8482748046875,510.91070227050784Q698.5596748046875,510.2139022705078,698.2371748046875,509.5322022705078Q697.9147748046875,508.85050227050783,697.5592748046874,508.18540227050784Q697.2037748046876,507.52030227050784,696.8160748046874,506.8735022705078Q696.4283748046875,506.2266022705078,696.0093748046875,505.59960227050783Q695.5904748046875,504.9725022705078,695.1411748046875,504.36680227050783Q694.6919748046874,503.7611022705078,694.2135748046875,503.1781022705078Q693.7351748046875,502.5952022705078,693.2286748046874,502.03640227050784Q692.7222748046875,501.4776022705078,692.1889748046875,500.9444022705078Q691.6557748046876,500.4111022705078,691.0969748046875,499.9047022705078Q690.5381748046875,499.3982022705078,689.9552748046875,498.91980227050783Q689.3722748046875,498.4414022705078,688.7665748046875,497.9922022705078Q688.1608748046875,497.5429022705078,687.5337748046875,497.1240022705078Q686.9067748046875,496.7050022705078,686.2598748046875,496.3173022705078Q685.6130748046875,495.9296022705078,684.9479748046875,495.5741022705078Q684.2828748046875,495.2186022705078,683.6011748046875,494.89620227050784Q682.9194748046875,494.5737022705078,682.2226748046875,494.2851022705078Q681.5259748046875,493.9965022705078,680.8159748046875,493.7425022705078Q680.1058748046875,493.48840227050783,679.3842148046875,493.2695022705078Q678.6625548046875,493.0506022705078,677.9310248046875,492.8673022705078Q677.1994948046874,492.6841022705078,676.4598448046875,492.5370022705078Q675.7202048046875,492.38990227050783,674.9742348046875,492.2792022705078Q674.2282648046875,492.1685022705078,673.4777648046875,492.09460227050783Q672.7272548046875,492.0207022705078,671.9740348046874,491.9837022705078Q671.2208088046875,491.9467022705078,670.4666748046875,491.9467022705078Q669.7125408046875,491.9467022705078,668.9593148046876,491.9837022705078Q668.2060948046875,492.0207022705078,667.4555848046875,492.09460227050783Q666.7050848046875,492.1685022705078,665.9591148046875,492.2792022705078Q665.2131448046875,492.38990227050783,664.4735048046875,492.5370022705078Q663.7338548046876,492.6841022705078,663.0023248046875,492.8673022705078Q662.2707948046875,493.0506022705078,661.5491348046875,493.2695022705078Q660.8274748046875,493.48840227050783,660.1173748046875,493.7425022705078Q659.4073748046875,493.9965022705078,658.7106748046875,494.2851022705078Q658.0138748046875,494.5737022705078,657.3321748046875,494.89620227050784Q656.6504748046875,495.2186022705078,655.9853748046875,495.5741022705078Q655.3202748046875,495.9296022705078,654.6734748046875,496.3173022705078Q654.0265748046875,496.7050022705078,653.3995748046875,497.1240022705078Q652.7724748046875,497.5429022705078,652.1667748046875,497.9922022705078Q651.5610748046875,498.4414022705078,650.9780748046875,498.91980227050783Q650.3951748046875,499.3982022705078,649.8363748046875,499.9047022705078Q649.2775748046874,500.4111022705078,648.7443748046875,500.9444022705078Q648.2110748046875,501.4776022705078,647.7046748046876,502.03640227050784Q647.1981748046875,502.5952022705078,646.7197748046875,503.1781022705078Q646.2413748046876,503.7611022705078,645.7921748046875,504.36680227050783Q645.3428748046875,504.9725022705078,644.9239748046875,505.59960227050783Q644.5049748046875,506.2266022705078,644.1172748046876,506.8735022705078Q643.7295748046874,507.52030227050784,643.3740748046876,508.18540227050784Q643.0185748046875,508.85050227050783,642.6961748046875,509.5322022705078Q642.3736748046875,510.2139022705078,642.0850748046875,510.91070227050784Q641.7964748046875,511.6074022705078,641.5424748046875,512.3174022705078Q641.2883748046875,513.0275022705079,641.0694748046875,513.7491622705078Q640.8505748046875,514.4708222705078,640.6672748046875,515.2023522705078Q640.4840748046875,515.9338822705079,640.3369748046875,516.6735322705078Q640.1898748046875,517.4131722705079,640.0791748046875,518.1591422705078Q639.9684748046875,518.9051122705079,639.8945748046875,519.6556122705078Q639.8206748046875,520.4061222705078,639.7836748046875,521.1593422705079Q639.7466748046875,521.9125682705078,639.7466748046875,522.6667022705078Z" fill-rule="evenodd" fill="#2CFFFF" fill-opacity="1"/></g><g><path d="M375.2577557128906,485.21440764160155L375.2550557128906,485.2118076416016Q375.24655571289065,485.20330764160155,375.2380557128906,485.1948076416016Q375.1149557128906,485.07190764160157,374.99045571289065,484.95040764160154Q374.9815557128906,484.94170764160157,374.9726557128906,484.93300764160153Q374.4414557128906,484.4154076416016,373.8859557128906,483.9240076416016Q373.33035571289065,483.4326076416016,372.7517557128906,482.9686076416016Q372.17305571289063,482.5046076416016,371.5727557128906,482.0691076416016Q370.97235571289065,481.63350764160157,370.35165571289065,481.22750764160156Q369.7310557128906,480.8214076416016,369.09145571289065,480.44580764160156Q368.45195571289065,480.07010764160157,367.79505571289064,479.7258076416016Q367.1380557128906,479.38150764160156,366.4652557128906,479.06930764160154Q365.79255571289065,478.75700764160155,365.1054557128906,478.47760764160154Q364.4183557128906,478.1982076416016,363.7186557128906,477.9523076416016Q363.0189057128906,477.7064076416016,362.3081057128906,477.49460764160153Q361.5973057128906,477.2827076416016,360.8771057128906,477.1054076416016Q360.1569157128906,476.92810764160157,359.42899571289064,476.78570764160156Q358.70108571289063,476.6434076416016,357.96715571289064,476.53640764160156Q357.2332157128906,476.42930764160155,356.4949757128906,476.35780764160154Q355.7567257128906,476.2863076416016,355.0158957128906,476.2505076416016Q354.2750557128906,476.21470764160154,353.5333557128906,476.21470764160154L353.5325367328906,476.21470764160154Q352.1499857128906,476.21470764160154,350.7730257128906,476.33900764160154Q349.44232571289064,476.45900764160154,348.12707571289064,476.69420764160157Q346.81182571289065,476.92930764160155,345.52195571289064,477.2777076416016Q344.23208571289064,477.6262076416016,342.97735571289064,478.08530764160156Q341.72255571289065,478.54440764160154,340.51245571289064,479.11070764160155Q339.3022557128906,479.67700764160156,338.14585571289064,480.3463076416016Q336.9894557128906,481.0155076416016,335.89555571289065,481.78260764160154Q334.8015557128906,482.54980764160155,333.77835571289063,483.40900764160153Q332.75515571289066,484.2682076416016,331.81045571289064,485.21300764160156Q331.8019557128906,485.22150764160153,331.79345571289065,485.23000764160156Q331.67055571289063,485.3531076416016,331.5490557128906,485.47760764160154Q331.54035571289063,485.4865076416016,331.5316557128906,485.49540764160156Q331.01405571289064,486.0266076416016,330.52265571289064,486.58210764160157Q330.03125571289064,487.13770764160154,329.56725571289064,487.7163076416016Q329.10325571289064,488.29500764160156,328.66775571289065,488.89530764160156Q328.23215571289063,489.49570764160154,327.8261557128906,490.11640764160154Q327.42005571289064,490.73700764160156,327.0444557128906,491.37660764160154Q326.66875571289063,492.01610764160154,326.32445571289065,492.67300764160154Q325.9801557128906,493.3300076416016,325.6679557128906,494.0028076416016Q325.3556557128906,494.67550764160154,325.0762557128906,495.3626076416016Q324.79685571289065,496.0497076416016,324.55095571289064,496.7494076416016Q324.30505571289063,497.4491576416016,324.0932557128906,498.15996764160155Q323.88135571289064,498.8707576416016,323.70405571289064,499.59095764160156Q323.52675571289063,500.31114764160156,323.3843557128906,501.03906764160155Q323.24205571289065,501.76697764160156,323.13495571289064,502.50090764160154Q323.0279557128906,503.23484764160156,322.9564557128906,503.9730876416016Q322.88495571289064,504.7113376416016,322.84915571289065,505.4521676416016Q322.8133557128906,506.1930076416016,322.8133557128906,506.93470764160156L322.8133557128906,506.9355266216016Q322.8133557128906,508.3180776416016,322.9376557128906,509.6950376416016Q323.0576557128906,511.02573764160155,323.2928557128906,512.3409876416016Q323.5279557128906,513.6562376416016,323.87635571289064,514.9461076416015Q324.22485571289064,516.2359776416016,324.6839557128906,517.4907076416016Q325.1430557128906,518.7455076416015,325.7093557128906,519.9556076416015Q326.2756557128906,521.1658076416015,326.94495571289065,522.3222076416016Q327.61415571289064,523.4786076416016,328.3812557128906,524.5725076416015Q329.1484557128906,525.6665076416016,330.0076557128906,526.6897076416016Q330.86685571289064,527.7129076416015,331.8116557128906,528.6576076416015L331.8142557128906,528.6602076416016L373.4799557128906,570.3237076416016L331.8116557128906,611.9897076416016Q331.27835571289063,612.5227076416015,330.7718557128906,613.0817076416016Q330.2654557128906,613.6407076416016,329.78695571289063,614.2237076416015Q329.3085557128906,614.8067076416015,328.85935571289065,615.4117076416015Q328.41005571289065,616.0177076416015,327.9910557128906,616.6447076416016Q327.57205571289063,617.2717076416016,327.18435571289064,617.9187076416016Q326.79665571289064,618.5657076416015,326.44115571289063,619.2307076416016Q326.0856557128906,619.8957076416016,325.76315571289064,620.5777076416016Q325.4407557128906,621.2587076416015,325.1520557128906,621.9557076416015Q324.86345571289064,622.6527076416015,324.60935571289065,623.3627076416016Q324.3553557128906,624.0727076416016,324.13635571289063,624.7947076416016Q323.9174557128906,625.5157076416016,323.73415571289064,626.2477076416016Q323.55095571289064,626.9787076416015,323.40375571289064,627.7187076416016Q323.2566557128906,628.4587076416016,323.1459557128906,629.2047076416015Q323.0352557128906,629.9507076416015,322.9613557128906,630.7007076416015Q322.88745571289064,631.4517076416016,322.85035571289063,632.2047076416015Q322.8133557128906,632.9577076416016,322.8133557128906,633.7117076416016L322.8133557128906,633.7127076416016Q322.8133557128906,634.4507076416015,322.84875571289064,635.1877076416015Q322.8827557128906,635.8947076416016,322.94925571289065,636.5997076416015Q323.01585571289064,637.3047076416016,323.1147557128906,638.0057076416016Q323.2136557128906,638.7067076416015,323.34485571289065,639.4017076416015Q323.4759557128906,640.0977076416016,323.6389557128906,640.7867076416015Q323.8019557128906,641.4757076416015,323.99655571289065,642.1567076416015Q324.19115571289063,642.8377076416016,324.4169557128906,643.5087076416016Q324.64265571289064,644.1797076416016,324.89905571289063,644.8387076416016Q325.15555571289065,645.4987076416015,325.44205571289064,646.1467076416016Q325.7286557128906,646.7937076416016,326.04465571289063,647.4277076416015Q326.36075571289064,648.0607076416015,326.70565571289063,648.6787076416016Q327.0505557128906,649.2977076416016,327.42365571289065,649.8987076416015Q327.79665571289064,650.5007076416016,328.19705571289063,651.0847076416015Q328.59735571289065,651.6687076416016,329.02425571289064,652.2337076416015Q329.45105571289065,652.7987076416016,329.9034557128906,653.3427076416016Q330.3558557128906,653.8877076416015,330.83285571289065,654.4107076416016Q331.3098557128906,654.9337076416016,331.81045571289064,655.4347076416016Q332.3436557128906,655.9677076416016,332.9024557128906,656.4747076416015Q333.46125571289065,656.9807076416016,334.0442557128906,657.4587076416016Q334.6271557128906,657.9377076416015,335.2329557128906,658.3867076416016Q335.8386557128906,658.8357076416016,336.46575571289065,659.2547076416015Q337.0927557128906,659.6737076416016,337.7396557128906,660.0617076416015Q338.3864557128906,660.4497076416015,339.0515557128906,660.8047076416016Q339.7166557128906,661.1607076416016,340.3984557128906,661.4827076416016Q341.08015571289064,661.8057076416015,341.77695571289064,662.0937076416016Q342.4736557128906,662.3827076416015,343.1837557128906,662.6367076416016Q343.89382571289065,662.8907076416016,344.6155157128906,663.1097076416015Q345.3371957128906,663.3287076416016,346.0687557128906,663.5117076416016Q346.80030571289063,663.6957076416015,347.5399757128906,663.8427076416016Q348.2796457128906,663.9897076416016,349.0256357128906,664.1007076416015Q349.7716357128906,664.2107076416016,350.5221657128906,664.2847076416016Q351.27269571289065,664.3587076416015,352.02594571289063,664.3957076416016Q352.7791957128906,664.4327076416016,353.5333557128906,664.4327076416016Q354.32820271289063,664.4327076416016,355.1220457128906,664.3917076416016Q355.8255057128906,664.3547076416015,356.5265657128906,664.2867076416015Q357.22762571289064,664.2177076416016,357.92480571289065,664.1177076416016Q358.62198571289065,664.0167076416016,359.3138057128906,663.8837076416016Q360.00563571289064,663.7517076416016,360.6906657128906,663.5877076416016Q361.3756957128906,663.4237076416016,362.0524757128906,663.2277076416016Q362.7292557128906,663.0327076416015,363.39637571289063,662.8067076416016Q364.06345571289063,662.5807076416015,364.7195557128906,662.3237076416016Q365.3755557128906,662.0667076416016,366.0191557128906,661.7807076416016Q366.6627557128906,661.4947076416015,367.2926557128906,661.1787076416016Q367.9224557128906,660.8637076416015,368.5370557128906,660.5197076416016Q369.15175571289063,660.1757076416015,369.7500557128906,659.8037076416016Q370.3483557128906,659.4317076416016,370.9289557128906,659.0327076416015Q371.5094557128906,658.6337076416016,372.07115571289063,658.2087076416016Q372.6328557128906,657.7837076416015,373.17455571289065,657.3337076416016Q373.7161557128906,656.8827076416015,374.2365557128906,656.4087076416015Q374.7569557128906,655.9337076416016,375.2550557128906,655.4357076416015L438.6475557128906,592.0466076416016Q439.18075571289063,591.5134076416016,439.68725571289065,590.9546076416016Q440.19365571289063,590.3959076416015,440.6721557128906,589.8129076416016Q441.15055571289065,589.2300076416016,441.59985571289064,588.6243076416016Q442.0490557128906,588.0186076416015,442.46805571289065,587.3915076416016Q442.88705571289063,586.7645076416015,443.2747557128906,586.1177076416016Q443.6624557128906,585.4708076416016,444.0179557128906,584.8058076416015Q444.3735557128906,584.1407076416016,444.6959557128906,583.4590076416016Q445.0184557128906,582.7773076416015,445.30705571289064,582.0805076416016Q445.5956557128906,581.3838076416016,445.8497557128906,580.6738076416016Q446.10375571289063,579.9637076416016,446.3227557128906,579.2421076416016Q446.54165571289064,578.5204076416015,446.7249557128906,577.7889076416016Q446.9081557128906,577.0573076416016,447.0553557128906,576.3177076416016Q447.20245571289064,575.5781076416016,447.31315571289065,574.8321076416016Q447.4238557128906,574.0861076416015,447.49775571289064,573.3356076416015Q447.5716557128906,572.5851076416016,447.6087557128906,571.8319076416016Q447.6457557128906,571.0787076416016,447.6457557128906,570.3246076416016Q447.6457557128906,569.5704076416016,447.6087557128906,568.8172076416016Q447.5718557128906,568.0640076416016,447.49795571289064,567.3135076416015Q447.4240557128906,566.5630076416015,447.3133557128906,565.8170076416015Q447.2027557128906,565.0710076416016,447.0556557128906,564.3314076416016Q446.90855571289063,563.5917076416016,446.72535571289063,562.8602076416016Q446.54215571289063,562.1286076416015,446.3232557128906,561.4070076416016Q446.10435571289065,560.6853076416015,445.85025571289066,559.9753076416016Q445.59625571289064,559.2652076416016,445.3076557128906,558.5685076416015Q445.01905571289063,557.8717076416016,444.6966557128906,557.1900076416016Q444.37425571289066,556.5082076416015,444.01875571289065,555.8432076416016Q443.6633557128906,555.1781076416015,443.2756557128906,554.5312076416016Q442.88795571289063,553.8844076416016,442.46895571289065,553.2573076416015Q442.05005571289064,552.6303076416016,441.6008557128906,552.0245076416015Q441.1515557128906,551.4188076416016,440.6731557128906,550.8358076416016Q440.19475571289064,550.2528076416015,439.6883557128906,549.6941076416016Q439.1819557128906,549.1353076416016,438.6486557128906,548.6020076416015L375.2577557128906,485.21440764160155Z" fill-rule="evenodd" fill="#2CFFFF" fill-opacity="1"/></g></g></g></svg> \ No newline at end of file diff --git a/assets/img/akari.jpg b/assets/img/akari.jpg new file mode 100644 index 0000000..5e5ea0b Binary files /dev/null and b/assets/img/akari.jpg differ diff --git a/assets/img/ban.png b/assets/img/ban.png new file mode 100644 index 0000000..a51f5b9 Binary files /dev/null and b/assets/img/ban.png differ diff --git a/assets/img/battery-100.png b/assets/img/battery-100.png new file mode 100644 index 0000000..4336d56 Binary files /dev/null and b/assets/img/battery-100.png differ diff --git a/assets/img/bilibili.svg b/assets/img/bilibili.svg new file mode 100644 index 0000000..e5cd8ee --- /dev/null +++ b/assets/img/bilibili.svg @@ -0,0 +1,44 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2250 1024"> +<path d="M2079.44,914.36c-10,0-19-0.33-27-1c-17.33-1.33-34.33-2-51-2c-10.67,0-10.67-0.33-12-11l-16-182l-16-151 + l-11-93l-10-81l-18-126c-6-44.67-13.33-89.33-22-134c-1.33-6.67-1-7.67,7-9c31.33-6,63-9,95-9h11c5.33,0.67,8.33,4,9,10 + c1.33,23.33,2.67,46.33,4,69l28,373l14,171l9,98L2079.44,914.36z M853.44,115.36c4.67,0,10.67,0,18,0c9.33,0,11,2.67,11,12l8,121 + l18,251l11,131l8,101l16,174c0,8-1,9-9,9c-24-1.33-48-2.33-72-3c-5.33,0.67-8-1.67-8-7c-1.33-11.33-2.33-23-3-35 + c-3.33-30-6-60.33-8-91l-16-158l-17-143l-12-101l-13-92c-6-41.33-12.67-82.67-20-124l-5-28c-1.33-4.67,0.33-7.33,5-8 + C793.44,119.03,820.11,114.03,853.44,115.36z M1859.44,518.36c25.33,0,28,1,32,25c4.67,30,8.67,60,12,90l11,97l21,206 + c1.33,4.67-0.33,7-5,7l-78,9c-8,1.33-9.67,0-11-8l-45-230l-28-153l-4-21c-0.67-4,1-6.67,5-8 + C1800.11,525.03,1830.11,520.36,1859.44,518.36z M722.44,518.36c26.67-1.33,30.33,1.67,33,27c6.67,40.67,12,81.33,16,122l13,120 + l8,81l7,65c0,9.33-1,10.67-9,12l-74,7c-8,1.33-9.67,0-11-8l-61-314l-16-89c-1.33-4.67,0.67-7.67,6-9 + C665.11,525.03,694.44,520.36,722.44,518.36z M1104.44,828.36v124v4c0.67,6-2,8.67-8,8c-8,0-16,0-24,0c-17.33,0-34.33,0.67-51,2 + c-9.33,1.33-9.67,0.67-11-10l-16-180l-8-89l-12-136c-1.33-10.67,0.67-12.67,10-14c28-2.67,56-3.33,84-2c6.67,0.67,13.67,1.67,21,3 + c8,2.67,9,4,9,12c1.33,18,2.33,36,3,54l1,60C1103.78,719.03,1104.44,773.7,1104.44,828.36z M2239.44,834.36v117v6 + c0,5.33-2.33,7.67-7,7h-36c-14,0-27.67,0.67-41,2c-8,1.33-8.67,0.33-10-9l-21-234l-11-116l-4-59c-1.33-8,1-10,9-10 + c33.33-4,66.67-5,100-1c13.33,1.33,14.67,4.67,16,18c1.33,44.67,2.33,89,3,133C2238.78,735.03,2238.11,782.36,2239.44,834.36z + M1830.44,305.36c10,0,18.67,0.67,26,2c4.67,0.67,7.33,3.33,8,8l13,139c2.67,12,1,14-11,14l-34,2c-6.67,1.33-10,1.67-10-9 + c-4.67-37.33-9.33-75-14-113l-4-32c-1.33-6,1-9.33,7-10L1830.44,305.36z M697.44,305.36c8,0,15.67,0.67,23,2c4,0.67,6.33,3.33,7,8 + l4,35l10,109c1.33,8,1,9-7,9c-12.67,0.67-25.67,1.33-39,2c-8,1.33-8.67,0-10-8l-9-80c-2.67-22.67-5.33-45-8-67 + c-1.33-5.33,0.67-8,6-8C681.78,306.03,689.44,305.36,697.44,305.36z M1096.44,405.36c0,23.33,0,46.33,0,69c1.33,10.67-0.67,11-10,11 + c-12.67,0-25-0.67-37-2c-8-1.33-9.33-1-8-9l-3-85c0-18.67-0.33-37.67-1-57c-1.33-9.33-0.33-10,9-10c14,0,28,1,42,3c8,0,8,2,8,10 + V405.36z M2232.44,406.36c0,22.67,0,45.67,0,69c0,9.33-0.67,10-10,10c-12.67-0.67-25.33-1.33-38-2c-6-0.67-8.67-3.67-8-9l-3-143 + c0-8,1-9,9-9c12.67,0,25,0.67,37,2c14.67,1.33,13,4.33,13,15V406.36z M666.44,460.36c1.33,12,0,13.67-12,15l-24,6 + c-8,2.67-8.67,0.67-10-6l-25-141c-2.67-9.33-1.33-10.67,8-12l35-6c8-1.33,10-1,10,7c3.33,17.33,6,34.33,8,51l10,80V460.36z + M1730.44,323.36c15.33-2.67,31-5,47-7c4.67-0.67,7.33,1.67,8,7c2.67,18.67,5.33,37,8,55c4,26.67,6.67,53.67,8,81v8 + c0.67,4-1,6.67-5,8l-32,7c-4.67,0.67-7.33-1.33-8-6l-26-149V323.36z M1020.44,431.36c0,16-0.67,31-2,45c0,4.67-2.33,7.33-7,8l-31,3 + c-4.67,0.67-7-1.67-7-7c-2-14.67-3.33-29.33-4-44c-2-27.33-3.67-55-5-83l-2-20c-0.67-4,1-6,5-6c13.33-1.33,27-2.33,41-3 + c6.67,0,9,1,9,9L1020.44,431.36z M2154.44,415.36c0.67,19.33,0.67,38.67,0,58c1.33,9.33-0.67,11-10,11l-28,3c-5.33,0.67-8-1.67-8-7 + c-1.33-25.33-3-50.67-5-76l-4-70c-0.67-4.67,1-7,5-7c13.33-1.33,26.67-2.33,40-3c6.67,0,8,1,8,9 + C2154.44,360.7,2155.11,388.03,2154.44,415.36z M627.44,756.36c16,18.67,18.67,40.33,12,63c-6,22-17,41-33,57 + c-26,27.33-55.67,49.33-89,66c-56.67,30-116.33,50.67-179,62c-44.67,9.33-89.67,15.33-135,18c-14,0.67-28,1-42,1h-30 + c-8,0-9.67-2-11-10l-7-97l-19-191l-21-182l-12-97l-13-93c-7.33-51.33-15.67-102.33-25-153c-6.67-41.33-14.33-82.33-23-123 + c-1.33-5.33,0.33-8.67,5-10l139-58c8.67-4,17.33-7,26-9c6-1.33,8.67,1,8,7c0,16-0.33,32.33-1,49l-1,13c-1.33,58-1.33,116.33,0,175 + c1.33,51.33,3.67,102.67,7,154c5.33,80,13,160.33,21,239c0,8,0.67,8.33,10,7c16.67-2.67,33.33-4,50-4c53.33,0,105.67,6.33,157,19 + c44.67,10.67,88.33,25.67,131,45c20.67,10,40,22,58,36C617.11,745.03,622.78,750.36,627.44,756.36z M1754.44,747.36 + c20.67,17.33,28,39.67,22,67c-5.33,22-15.33,41.33-30,58c-24,26.67-51.67,48.33-83,65c-60,33.33-124,56-192,68 + c-36.67,7.33-73.67,12.67-111,16c-21.33,2-43.67,2.67-67,2h-27c-6,0.67-9-2-9-8c-2-28-4.33-56-7-84l-16-171l-17-149l-21-168 + c-3.33-29.33-7.33-58.67-12-88l-18-112c-8-53.33-17.67-106.33-29-159l-1-7c-2-5.33-0.33-8.67,5-10c49.33-20,96.67-42.33,146-61 + c13.33-5.33,29.33-11,28,1c-4,37.33-2.67,74-4,110c-1.33,30-1,59.67,1,89c0,8,0,15.67,0,23c0,36,1.33,71.67,4,107 + c2,47.33,5,94.67,9,142c2.67,34,5.67,67.67,9,101c1.33,18.67,3.33,37.33,6,56c0,10.67,1.67,10.33,11,9c18-2.67,36-4,54-4 + c62.67,1.33,124,10.67,184,28c40.67,10.67,80,26,118,46C1724.11,723.7,1739.78,734.7,1754.44,747.36z M308.44,923.36 + c15.33-8.67,41-27.17,77-55.5s58.33-47.5,67-57.5c-54-24-110-45.33-168-64L308.44,923.36z M1585.44,815.36c2.67-2.67,2.33-5-1-7 + l-24-10c-42-18-84.33-34-127-48l-6-2c-2-0.67-4.33-0.33-7,1l24,173c2.67,0,4.67-0.67,6-2c39.33-28,78.33-57.33,117-88 + C1573.44,827.03,1579.44,821.36,1585.44,815.36z" fill="#FB7299"/> +</svg> diff --git a/assets/img/blackroom.svg b/assets/img/blackroom.svg new file mode 100644 index 0000000..10c801d --- /dev/null +++ b/assets/img/blackroom.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><path d="M139.264 529.152a27.136 27.136 0 0 1-14.592-2.816A32 32 0 0 1 113.152 486.4l130.816-236.032a28.416 28.416 0 1 1 49.152 28.928l-130.56 235.52a25.6 25.6 0 0 1-23.296 14.336" fill="#F99E4A"></path><path d="M380.416 529.152a34.56 34.56 0 0 1-25.6-14.592l-131.328-235.264a30.208 30.208 0 0 1 11.52-37.632 25.6 25.6 0 0 1 37.888 11.52l130.816 235.264a25.6 25.6 0 0 1-11.776 37.888c-2.816 0-8.704 2.816-11.52 2.816m261.376 0a25.6 25.6 0 0 1-14.336-2.816 29.44 29.44 0 0 1-11.776-37.888l130.816-235.264a28.928 28.928 0 0 1 37.632-11.52 29.44 29.44 0 0 1 11.776 37.632L665.6 514.56a25.6 25.6 0 0 1-23.296 14.592" fill="#F99E4A"></path><path d="M883.968 529.152a34.56 34.56 0 0 1-25.6-14.336l-130.56-235.52a27.392 27.392 0 0 1 11.52-37.632 25.6 25.6 0 0 1 37.888 11.52l130.56 235.52a25.6 25.6 0 0 1-11.776 37.632c-2.816 0-8.704 2.816-11.776 2.816" fill="#F99E4A"></path><path d="M801.536 241.664l-130.56-51.2A129.536 129.536 0 0 0 640 183.552H380.416a153.6 153.6 0 0 0-32 5.632L217.6 241.664A21.248 21.248 0 0 0 226.304 281.6h569.6a21.248 21.248 0 0 0 5.632-40.704M458.752 281.6v520.704a51.2 51.2 0 0 0 104.704 0V281.6z" fill="#FFD043"></path><path d="M561.152 183.296A51.2 51.2 0 0 0 512 139.776a52.992 52.992 0 0 0-51.2 46.336h102.4z" fill="#FFD043"></path><path d="M755.2 877.824H267.008A41.472 41.472 0 0 1 230.4 816.896l55.04-122.112a44.8 44.8 0 0 1 37.888-25.6h373.76a37.12 37.12 0 0 1 37.632 25.6L790.016 819.2a37.888 37.888 0 0 1-34.816 58.112" fill="#F99E4A"></path><path d="M900.352 494.336a9.216 9.216 0 0 1 8.704 8.704 148.48 148.48 0 0 1-296.192 0 7.68 7.68 0 0 1 8.704-8.704z m-502.528 0a9.216 9.216 0 0 1 8.704 8.704 151.808 151.808 0 0 1-148.224 142.336 150.016 150.016 0 0 1-148.224-142.336 7.68 7.68 0 0 1 8.704-8.704z" fill="#FFD043"></path></svg> \ No newline at end of file diff --git a/assets/img/channel.svg b/assets/img/channel.svg new file mode 100644 index 0000000..308e4df --- /dev/null +++ b/assets/img/channel.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path fill="#23c9ed" d="M837,192c1.3-8,10-14,18-10c46.7,24,75,70.7,75,124v299c-1.3,78.7-60.3,137.7-139,139H352 + c-53.3,0-100-28-124-76c-4-6.7,2-15.7,10-17h506c53.3-1.3,91.7-39.7,93-93V192z M93,0h605c50.7,0,91.7,41,93,93v419 + c-1.3,50.7-42.3,91.7-93,93H93c-52-1.3-93-42.3-93-93V93C0,41,41,0,93,0z M508,321c12-9.3,12-28.7,0-38L339,165 + c-16-10.7-35.7,0.3-37,19v236c1.3,18.7,21,29.7,37,19L508,321z"/> +</svg> diff --git a/assets/img/class.svg b/assets/img/class.svg new file mode 100644 index 0000000..51797d1 --- /dev/null +++ b/assets/img/class.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path fill="#0BA395" d="M107.7,3.2C45,16.5,1,68.8-0.3,134.2v582c1.3,65.3,45.3,117.7,108,131V3.2z M625.7,0.2h-452v850h452 + c76-2.7,132.7-58,134-134v-582C758.4,58.2,701.7,2.8,625.7,0.2z M385.7,117.2c0-18.7,14.3-33,33-33h213c18.7,0,31.7,14.3,33,33v237 + c-0.7,13.3-6.7,23.3-18,30c-10.7,4-23.3,4.7-34-2l-92-63l-82,62c-22.7,14.7-51.7-0.3-53-27V117.2z M670.7,704.2 + c0,18.7-14.3,33-33,33h-354c-42.1,0-41.2-63.1,0-66h354C656.4,672.5,670.7,685.5,670.7,704.2z M670.7,555.2c0,18.7-14.3,33-33,33 + h-354c-42.1,0-41.2-63.1,0-66h354C656.4,523.5,670.7,536.5,670.7,555.2z"/> +</svg> \ No newline at end of file diff --git a/assets/img/coin.svg b/assets/img/coin.svg new file mode 100644 index 0000000..d58a86e --- /dev/null +++ b/assets/img/coin.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path d="M472,244h119c47.06,0,47.06-65,0-65H281c-45.49,0-45.49,65,0,65h125v60c-112,8-192,93-196,205v44 + c3.12,40.52,62.97,42.37,66,0v-44c1.33-74.67,55.33-133.33,130-140v305c2.98,41.69,63.02,41.69,66,0V369 + c74.67,6.67,128.67,65.33,130,140v44c0,41.73,65,41.73,65,0v-44c-2.67-112-82.67-197-196-205v-60H472z M439,878 + c-124-3.33-227.33-46.33-310-129S3.33,563,0,439c3.33-124,46.33-227.33,129-310S315,3.33,439,0c124,3.33,227.33,46.33,310,129 + s125.67,186,129,310c-3.33,124-46.33,227.33-129,310S563,874.67,439,878z" fill="#FB7299"/> +</svg> diff --git a/assets/img/collect.svg b/assets/img/collect.svg new file mode 100644 index 0000000..b382480 --- /dev/null +++ b/assets/img/collect.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> + <path fill="#F3A034" d="M646.6,837.1c-50.8,0-119.6-23.4-204.4-69.5l-0.2-0.1l-0.2,0.1c-84.7,45.8-153.4,69.1-204.2,69.1 + c-36,0-63.8-11.7-82.8-34.6c-17.8-21.5-28.2-53.6-31.1-95.4c-2.9-41.8,1.7-94.5,13.8-156.5l0.1-0.3l-0.2-0.2 + c-53.4-49.2-91.6-94.1-113.6-133.2c-21.9-39.1-28.3-73.6-19-102.7c9.4-29.2,35-53.7,76.1-72.8c41.2-19.1,99.1-33.4,172.1-42.4 + l0.3,0l0.1-0.2c31.3-65.6,63.1-115.6,94.4-148.4C379,17.1,410.7,0.5,441.9,0.5c31.2,0,62.9,16.6,94.1,49.3 + c31.3,32.8,63.1,82.7,94.4,148.4l0.1,0.2l0.3,0c73.2,9,131.2,23.3,172.5,42.4c41.2,19.1,66.9,43.6,76.2,72.9 + c9.3,29,2.9,63.6-19.1,102.6c-22.1,39.2-60.4,84-113.9,133.2l-0.2,0.2l0.1,0.3c12,62.2,16.7,115,13.8,156.9 + c-2.9,41.8-13.4,74-31.2,95.5C710.1,825.4,682.4,837.1,646.6,837.1z"/> +</svg> \ No newline at end of file diff --git a/assets/img/comment.svg b/assets/img/comment.svg new file mode 100644 index 0000000..f5cf6b1 --- /dev/null +++ b/assets/img/comment.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 823"> +<path fill="#1497C7" d="M892,329c-2-74-28.8-135.8-80.5-185.5C759.8,93.8,695,68,617,66H343c-78,2-142.8,27.8-194.5,77.5 + S70.3,255,69,329c1.3,74.7,27.8,136.8,79.5,186.5S265,591,343,593h79l32,107l117-107h46c78-2,142.8-27.8,194.5-77.5 + C863.2,465.8,890,403.7,892,329z M343,0h274c96.7,2.7,177.3,35,242,97s98.3,139.3,101,232c-2.7,93.3-36.3,171-101,233 + s-145.3,94.3-242,97h-19L419,823l-49-164h-27c-96.7-2.7-177.3-35-242-97S2.7,422.3,0,329c2.7-92.7,36.3-170,101-232S246.3,2.7,343,0 + z"/> +</svg> \ No newline at end of file diff --git a/assets/img/delete.svg b/assets/img/delete.svg new file mode 100644 index 0000000..6901d1a --- /dev/null +++ b/assets/img/delete.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 844 844"> +<path fill="#A0A0A0" d="M269,697V286c0-12,9.67-22,23-22c13.33,0,30,10,30,22v411c0,13.33-16.67,23-30,23 + C278.67,720,269,710.33,269,697z M391,697V286c0-27.72,50.75-29.26,54,0v411c-1.33,13.33-16.67,23-30,23 + C401.67,720,392.33,710.33,391,697z M522,697V286c0-12,9.67-22,23-22s30,10,30,22v411c0,13.33-16.67,23-30,23S522,710.33,522,697z + M644,759l40-565H164l36,549c0,20,7.33,44.33,46,47h375C634.33,790,641.33,781.67,644,759z M622,844H230 + c-54.67-2.67-82.67-39.33-84-70l-36-580H23c-12,0-23-10.67-23-24c0-13.33,9.67-30,23-30h215V55c1.33-38.67,30.33-55,61-55h246 + c13.33,0,27.33,1.33,46,24c14.67,17.33,15,27.33,15,38v78h215c13.33,0,23,16.67,23,30c0,13.33-11,24-23,24h-86l-39,597 + C694.67,807,672.67,841.33,622,844z M530,55H318c-18.67,0-27.33,11.67-26,29v56h260V84C552,65.33,539.33,55,530,55z"/> +</svg> \ No newline at end of file diff --git a/assets/img/download.svg b/assets/img/download.svg new file mode 100644 index 0000000..dca94f2 --- /dev/null +++ b/assets/img/download.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path fill="#1497C7" d="M512,0C366.7,3.3,245.8,53.2,149.5,149.5S3.3,366.7,0,512c3.3,145.3,53.2,266.2,149.5,362.5 + S366.7,1020.7,512,1024c145.3-3.3,266.2-53.2,362.5-149.5S1020.7,657.3,1024,512c-3.3-145.3-53.2-266.2-149.5-362.5S657.3,3.3,512,0 + z M326,463c4-4,8.7-6,14-6h81V311c0-10.7,7.3-18,18-18h146c10.7,0,18,7.3,18,18v146h81c17.3,1.3,23.7,20,13,32L524,647 + c-6.7,6.7-17.3,6.7-24,0L327,489C320.3,482.3,319.3,471,326,463z M713,731c0,10.7-8.7,19-18,19H329c-9.3,0-18-8.3-18-19v-36 + c0-10.7,7.3-18,18-18h366c10.7,0,18,7.3,18,18V731z"/> +</svg> diff --git a/assets/img/fav.svg b/assets/img/fav.svg new file mode 100644 index 0000000..eea2122 --- /dev/null +++ b/assets/img/fav.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path d="M661.53,260c-42.67-6.67-77.67-33.33-95-72l-72-151c-25.33-49.33-86.67-49.33-116,0l-68,151 + c-20,38.67-53.67,65.33-95,72l-162,25c-52,10.67-71,65.67-35,107l122,126c29.33,28,40.33,68.67,35,110l-28,175 + c-6.67,56,43.33,90,94,66l137-75c38.67-22.67,84.33-22.67,123,0l138,75c49.33,24,96.67-10,94-66l-32-175c-5.33-41.33,5.67-82,35-110 + l122-126c36-41.33,17-96.33-35-107L661.53,260z" fill="#FB7299"/> +</svg> diff --git a/assets/img/follow.svg b/assets/img/follow.svg new file mode 100644 index 0000000..900076b --- /dev/null +++ b/assets/img/follow.svg @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 244.04 55.01" enable-background="new 0 0 244.04 55.01" xml:space="preserve"> +<path fill="#19AAD5" d="M5.39,55.01h233.26c2.98,0,5.39-2.41,5.39-5.39V5.39c0-2.98-2.41-5.39-5.39-5.39L5.39,0 + C2.41,0,0,2.41,0,5.39l0,44.22C0,52.6,2.41,55.01,5.39,55.01z"/> +<path fill="#FFFFFF" d="M79.26,24.77V8.37c0.08-1.52,1.22-2.68,2.73-2.68s2.66,1.16,2.73,2.68v16.4h16.4 + c1.52,0.08,2.68,1.22,2.68,2.73c0,1.52-1.16,2.66-2.68,2.73h-16.4v16.4c-0.08,1.52-1.22,2.68-2.73,2.68s-2.66-1.16-2.73-2.68v-16.4 + h-16.4c-1.52-0.08-2.68-1.22-2.68-2.73c0-1.52,1.16-2.66,2.68-2.73H79.26z"/> +<g> + <path fill="#FFFFFF" d="M105.14,44.25c9.46-3.33,15.11-8.12,16.93-14.37h-16.13V26.9h16.71c0.05-0.56,0.08-3.05,0.08-7.48h-14.45 + v-2.98h9.5c-2.27-2.47-4.21-4.45-5.82-5.95l2.3-2.04c2.27,2.01,4.34,3.93,6.22,5.76l-2.53,2.23h9.44c2.05-2.86,3.85-5.53,5.4-8.03 + l3.29,1.8c-1.82,2.3-3.5,4.37-5.03,6.23h10.02v2.98h-14.97c0,3.84-0.02,6.33-0.06,7.48h17.36v2.98h-16.81 + c3.1,6.57,8.94,11.07,17.52,13.51c-1.08,1.1-2.06,2.15-2.93,3.17c-8.13-3.13-13.65-7.84-16.57-14.13 + c-2.15,6.11-7.87,10.99-17.16,14.64C106.75,46.18,105.99,45.24,105.14,44.25z"/> + <path fill="#FFFFFF" d="M147.35,19.11c1.9,1.31,4.24,3.08,7.01,5.33c-0.98,1.1-1.76,1.94-2.34,2.54c-2.77-2.51-4.99-4.39-6.65-5.64 + L147.35,19.11z M150.92,30.39c1.08,0.47,2.13,0.9,3.13,1.29c-1.45,4.59-2.97,9.61-4.55,15.04l-3.41-1.17 + C147.75,41.08,149.36,36.03,150.92,30.39z M148.86,8.97c2.56,1.91,4.84,3.81,6.85,5.72c-0.9,0.89-1.69,1.68-2.38,2.39 + c-1.42-1.49-3.59-3.47-6.49-5.95L148.86,8.97z M155.15,41.67h13.3V30.55h-10.29v-2.98h10.29v-9.48h-11.4v-2.98h12.63 + c-1.24-1.94-2.51-3.72-3.8-5.33l2.61-1.64c1.77,2.04,3.17,3.84,4.2,5.4l-2.47,1.57h13.29v2.98h-11.72v9.48h10.29v2.98h-10.29v11.12 + h12.83v2.98h-29.46V41.67z"/> +</g> +</svg> diff --git a/assets/img/history.png b/assets/img/history.png new file mode 100644 index 0000000..dc42b04 Binary files /dev/null and b/assets/img/history.png differ diff --git a/assets/img/home.svg b/assets/img/home.svg new file mode 100644 index 0000000..21b5eb9 --- /dev/null +++ b/assets/img/home.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path fill="#29B28A" d="M632.4,855h35c60.4,0,112-51,112-112V518c1.3-32,24-54.7,56-56h4 + c21.3,0,37.3-13,44-33c4-17.3-1-33.7-13-47l-349-349c-46.7-44-112.3-44-159,0l-349,349c-14.7,14.7-17.3,35.3-8,54 + c9.3,14.7,23.7,23,41,23h3c32,1.3,54.7,25.3,56,56v225c1.3,64,48,110.3,112,113h35c12-1.3,21.7-9,23-21c12-86.7,79-147.7,167-149 + c88,1.3,156,62.3,168,149C610.4,845.3,620.4,855,632.4,855z"/> +</svg> \ No newline at end of file diff --git a/assets/img/like.svg b/assets/img/like.svg new file mode 100644 index 0000000..cfc8cb1 --- /dev/null +++ b/assets/img/like.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path d="M250,767.13v-551h4l154-189c33.33-33.33,86-36.67,122-6c18.67,18.67,30.67,43,28,71l-6,124h235 + c29.33,0,56.33,13,75,37c16,22.67,19.67,52.67,13,78l-100,328c-17.33,62.67-68.33,104-135,108H250z M193,767.13h-80 + c-61.82,4.12-110.87-48.32-113-108v-331c0-41.33,21-77.33,57-96c18.67-9.33,37.33-13.33,56-16h80V767.13z" fill="#FB7299"/> +</svg> diff --git a/assets/img/live.svg b/assets/img/live.svg new file mode 100644 index 0000000..4bd4e55 --- /dev/null +++ b/assets/img/live.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><path d="M392.448 275.911111a92.416 92.416 0 1 1-184.832 0 92.416 92.416 0 0 1 184.832 0" fill="#23ADE5"></path><path d="M826.624 464.583111l-63.744 36.864v-48.64a72.206222 72.206222 0 0 0-71.68-71.936H190.72a72.192 72.192 0 0 0-71.936 71.936V748.231111a71.936 71.936 0 0 0 71.936 71.936H691.2a71.936 71.936 0 0 0 71.936-71.936v-23.808l63.488 37.888a51.2 51.2 0 0 0 76.8-44.544V508.871111a51.2 51.2 0 0 0-76.8-44.288M572.928 369.351111c79.459556 0.142222 143.985778-64.156444 144.128-143.616 0.142222-79.459556-64.156444-143.985778-143.616-144.128-79.260444-0.142222-143.701333 63.857778-144.128 143.104-0.426667 79.459556 63.644444 144.213333 143.104 144.64h0.512" fill="#48CFE5"></path><path d="M425.216 512.967111l124.16 71.936a25.6 25.6 0 0 1 0 42.496l-124.16 71.68a25.6 25.6 0 0 1-37.12-21.248V534.471111a25.6 25.6 0 0 1 37.12-21.504" fill="#FDDE80"></path></svg> \ No newline at end of file diff --git a/assets/img/loadTV.gif b/assets/img/loadTV.gif new file mode 100644 index 0000000..33ebcd8 Binary files /dev/null and b/assets/img/loadTV.gif differ diff --git a/assets/img/logo.png b/assets/img/logo.png new file mode 100644 index 0000000..57fedbd Binary files /dev/null and b/assets/img/logo.png differ diff --git a/assets/img/logo2.jpg b/assets/img/logo2.jpg new file mode 100644 index 0000000..199eefc Binary files /dev/null and b/assets/img/logo2.jpg differ diff --git a/assets/img/musicplus.svg b/assets/img/musicplus.svg new file mode 100644 index 0000000..a32c24e --- /dev/null +++ b/assets/img/musicplus.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><path d="M128 256m25.6 0l716.8 0q25.6 0 25.6 25.6l0 512q0 25.6-25.6 25.6l-716.8 0q-25.6 0-25.6-25.6l0-512q0-25.6 25.6-25.6Z" fill="#3DA9D3"></path><path d="M153.6 256h153.6v563.2H153.6a25.6 25.6 0 0 1-25.6-25.6V281.6a25.6 25.6 0 0 1 25.6-25.6zM870.4 256h-153.6v563.2h153.6a25.6 25.6 0 0 0 25.6-25.6V281.6a25.6 25.6 0 0 0-25.6-25.6z" fill="#7DD3E0"></path><path d="M768 320m15.36 0l46.08 0q15.36 0 15.36 15.36l0 20.48q0 15.36-15.36 15.36l-46.08 0q-15.36 0-15.36-15.36l0-20.48q0-15.36 15.36-15.36Z" fill="#3DA9D3"></path><path d="M768 448m15.36 0l46.08 0q15.36 0 15.36 15.36l0 20.48q0 15.36-15.36 15.36l-46.08 0q-15.36 0-15.36-15.36l0-20.48q0-15.36 15.36-15.36Z" fill="#3DA9D3"></path><path d="M768 576m15.36 0l46.08 0q15.36 0 15.36 15.36l0 20.48q0 15.36-15.36 15.36l-46.08 0q-15.36 0-15.36-15.36l0-20.48q0-15.36 15.36-15.36Z" fill="#3DA9D3"></path><path d="M768 704m15.36 0l46.08 0q15.36 0 15.36 15.36l0 20.48q0 15.36-15.36 15.36l-46.08 0q-15.36 0-15.36-15.36l0-20.48q0-15.36 15.36-15.36Z" fill="#3DA9D3"></path><path d="M576 180.736c8.7808-2.6112 15.8976-1.92 21.3504 2.0736 5.4784 3.9936 11.008 9.8304 16.64 17.4592 5.6064 7.6544 12.544 16.256 20.7616 25.856 8.2432 9.5744 19.456 18.5088 33.6896 26.7776 12.2368 7.68 22.9632 12.9536 32.2048 15.7696l25.9584 7.8592c8.2176 2.432 16.128 5.5296 23.6544 9.2672 0 0 17.7408 9.984 25.5232 20.48 8.1152 10.9056 14.8736 19.6608 16.6144 30.976 1.7152 11.3408 1.6128 21.9136-0.4608 31.6928a72.7296 72.7296 0 0 1-9.5744 24.576c-4.2752 6.5792-7.8592 9.9328-10.752 9.9328-2.8672 0.0256-5.4016-1.6128-7.6032-5.0432-2.2272-3.3792-3.84-9.984-4.864-19.7632-1.6896-15.872-6.656-27.0336-14.976-33.4592-8.32-6.4256-21.3504-9.984-39.1424-10.7264a96.0512 96.0512 0 0 1-48.9216-15.616c-12.3648-8.0384-24.064-16.9984-34.9696-26.8032-8.8832-7.3728-15.7952-9.5488-20.8896-6.2976-4.992 3.2256-7.5776 8.1152-7.7312 14.7456l-0.5632 26.752-6.7072 273.792-0.7936 35.4048c0.1536 9.856-1.664 21.1968-5.4272 33.9968-3.7888 12.8-10.6752 25.2928-20.6592 37.4528-9.9328 12.16-23.0912 23.2192-39.4752 33.2288s-36.5824 17.3568-60.5952 22.0672c-24.448 4.7616-46.4128 3.584-65.8944-3.5072-19.456-7.0912-34.3808-17.4336-44.7744-31.0272-10.24-12.928-15.4368-29.5936-14.7712-47.5136 0.6912-18.048 8.8576-36.0448 24.4736-53.9648 15.616-17.92 32.4352-31.2832 50.432-40.1152a198.8096 198.8096 0 0 1 51.8144-17.7152 178.8416 178.8416 0 0 1 44.3136-3.0208c13.0048 1.0496 22.5792 2.3808 28.7488 3.9424 0 0 6.4512-280.1664 8.2944-341.6064 0.2304-12.1088 3.584-22.3232 9.9328-30.976 6.4-8.5504 14.7712-14.208 25.1392-16.9472z m160.9216 288.1792a12.8 12.8 0 0 1 0.3584 2.9696v40.96l41.728-6.912a12.8 12.8 0 0 1 14.8992 12.5952v15.0016a12.8 12.8 0 0 1-10.7008 12.6464l-45.952 7.6288 0.0256 45.3632a12.8 12.8 0 0 1-9.8304 12.4416l-15.36 3.6608a12.8 12.8 0 0 1-15.7696-12.4416V560.64l-41.1136 6.8608a12.8 12.8 0 0 1-14.8992-12.6208v-15.0016a12.8 12.8 0 0 1 10.7008-12.6464l45.312-7.552v-44.1344a12.8 12.8 0 0 1 9.8304-12.4672l15.36-3.6352a12.8 12.8 0 0 1 15.4112 9.472z" fill="#FFD469"></path><path d="M179.2 320m15.36 0l46.08 0q15.36 0 15.36 15.36l0 20.48q0 15.36-15.36 15.36l-46.08 0q-15.36 0-15.36-15.36l0-20.48q0-15.36 15.36-15.36Z" fill="#3DA9D3"></path><path d="M179.2 448m15.36 0l46.08 0q15.36 0 15.36 15.36l0 20.48q0 15.36-15.36 15.36l-46.08 0q-15.36 0-15.36-15.36l0-20.48q0-15.36 15.36-15.36Z" fill="#3DA9D3"></path><path d="M179.2 576m15.36 0l46.08 0q15.36 0 15.36 15.36l0 20.48q0 15.36-15.36 15.36l-46.08 0q-15.36 0-15.36-15.36l0-20.48q0-15.36 15.36-15.36Z" fill="#3DA9D3"></path><path d="M179.2 704m15.36 0l46.08 0q15.36 0 15.36 15.36l0 20.48q0 15.36-15.36 15.36l-46.08 0q-15.36 0-15.36-15.36l0-20.48q0-15.36 15.36-15.36Z" fill="#3DA9D3"></path></svg> \ No newline at end of file diff --git a/assets/img/ploading.gif b/assets/img/ploading.gif new file mode 100644 index 0000000..1a8c97d Binary files /dev/null and b/assets/img/ploading.gif differ diff --git a/assets/img/ranking.svg b/assets/img/ranking.svg new file mode 100644 index 0000000..c827ff1 --- /dev/null +++ b/assets/img/ranking.svg @@ -0,0 +1,4 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 770"> +<path d="M352,0h192c36,1.33,62.67,28,64,64v704H288V64C289.33,28,316,1.33,352,0z M64,256h160v512H0V320 + C1.33,284,28,257.33,64,256z M672,320h160c36,1.33,62.67,28,64,64v384H672V320z" fill="#00a1d6"/> +</svg> diff --git a/assets/img/read.svg b/assets/img/read.svg new file mode 100644 index 0000000..8d16156 --- /dev/null +++ b/assets/img/read.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><path d="M778.496 142.08h-537.6a56.832 56.832 0 0 0-60.16 54.016v630.528a56.832 56.832 0 0 0 59.136 54.016h537.6a56.832 56.832 0 0 0 59.136-54.016V196.096a56.832 56.832 0 0 0-59.136-54.016z" fill="#54E2E2"></path><path d="M298.496 679.168h421.376a25.6 25.6 0 0 0 0-52.736H298.496a25.6 25.6 0 1 0 0 52.736zM719.872 732.928H298.496a25.6 25.6 0 1 0 0 52.736h421.376a25.6 25.6 0 0 0 0-52.736z" fill="#23ADE5"></path><path d="M272.128 237.056m80.128 0l314.112 0q80.128 0 80.128 80.128l0 154.368q0 80.128-80.128 80.128l-314.112 0q-80.128 0-80.128-80.128l0-154.368q0-80.128 80.128-80.128Z" fill="#23ADE5"></path><path d="M404.992 361.472m-49.408 0a49.408 49.408 0 1 0 98.816 0 49.408 49.408 0 1 0-98.816 0Z" fill="#2EC3E5"></path><path d="M375.552 551.936l120.832-144.384a44.544 44.544 0 0 1 68.352 0l120.832 144.384z" fill="#2EC3E5"></path></svg> \ No newline at end of file diff --git a/assets/img/relation.svg b/assets/img/relation.svg new file mode 100644 index 0000000..a9e42ec --- /dev/null +++ b/assets/img/relation.svg @@ -0,0 +1,10 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 953.46 738.35"> +<path fill="#9FA0A0" d="M675.64,504c106.67-2.67,186.33-78.33,189-181c-1.33-77.33-49-143.33-125-170 + c-38.96-14.98-18.21-73.06,21-61c101.33,37.33,166.67,124.33,168,231c0,88-45.33,162-116,206c49.33,18.67,93,46,131,82 + c29.48,29.48-13.97,73.03-44,46c-61.33-57.33-140-89-224-89C633.92,568,633.92,504,675.64,504z M193.64,572 + c-97.33-53.33-159.67-150-161-266c2-86.67,32.83-158.83,92.5-216.5S259.64,2,349.64,0c89.33,2,163.83,31.83,223.5,89.5 + c59.67,57.67,90.83,129.83,93.5,216.5c-1.33,116-63.33,212.67-162,266c69.33,23.33,130.67,60,184,110c27.73,30.81-14.42,74.52-45,47 + c-80-76-183.33-118-294-118s-215,42-295,118c-29.5,29.5-75.63-17.63-44-47C63.31,632,124.31,595.33,193.64,572z M349.64,548 + c72-2,131.67-25.83,179-71.5c47.33-45.67,72-102.5,74-170.5c-2-68.67-26.67-125.67-74-171c-47.33-45.33-107-69-179-71 + c-72,2-131.83,25.67-179.5,71s-72.17,102.33-73.5,171c1.33,68,25.83,124.83,73.5,170.5S277.64,546,349.64,548z"/> +</svg> \ No newline at end of file diff --git a/assets/img/share.svg b/assets/img/share.svg new file mode 100644 index 0000000..ca3b8fc --- /dev/null +++ b/assets/img/share.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path d="M388.29,243V55c1.33-30.67,23.33-55,54-55c13.33,0,25,4.33,35,13l378,322c29.33,25.33,29.33,71.33,0,98 + l-378,322c-22.67,18.67-57.33,15.67-76-7c-8.67-10.67-13-22.67-13-36V539c-89.33,0-160.67,17.67-214,53s-104.33,87.67-153,157 + c-5.33,6.67-19.67,9.33-21-12c-3.33-138,21.67-253.83,75-347.5S232.96,247,388.29,243z" fill="#FB7299"/> +</svg> diff --git a/assets/img/sponsorQR.jpg b/assets/img/sponsorQR.jpg new file mode 100644 index 0000000..9178ffc Binary files /dev/null and b/assets/img/sponsorQR.jpg differ diff --git a/assets/img/sub.svg b/assets/img/sub.svg new file mode 100644 index 0000000..907fce8 --- /dev/null +++ b/assets/img/sub.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path fill="#EB5D47" d="M490,783.7c-58-1.3-150.3-48.3-277-141S15.3,417.4,0,244.7C2.7,127.4,77.7,32.4,191,5.7 + c114.7-24,223,28.7,275,134c52-105.3,160.3-158,275-134c113.3,26.7,188.7,121.7,190,239c-12.7,168-75.3,299.3-188,394 + S546,781.7,490,783.7z"/> +</svg> \ No newline at end of file diff --git a/assets/img/tebietuijian.svg b/assets/img/tebietuijian.svg new file mode 100644 index 0000000..4623fa6 --- /dev/null +++ b/assets/img/tebietuijian.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><path d="M215.04 153.6h593.92c33.93024 0 61.44 27.50976 61.44 61.44v643.3792a30.72 30.72 0 0 1-45.96224 26.6752L512 706.56l-312.43776 178.5344A30.72 30.72 0 0 1 153.6 858.4192V215.04c0-33.93024 27.50976-61.44 61.44-61.44z" fill="#9696ED"></path><path d="M512 555.392l-90.05056 46.60736a19.27168 19.27168 0 0 1-27.84256-20.41856l17.12128-98.2784-72.2432-69.32992a19.27168 19.27168 0 0 1 10.61376-32.98304l100.1216-14.32064 45.05088-89.8816a19.27168 19.27168 0 0 1 34.4576 0l45.05088 89.8816 100.11648 14.32064a19.27168 19.27168 0 0 1 10.61888 32.98304l-72.2432 69.32992 17.12128 98.2784a19.27168 19.27168 0 0 1-27.84768 20.41856L512 555.392z" fill="#FFD778"></path></svg> \ No newline at end of file diff --git a/assets/img/topic.svg b/assets/img/topic.svg new file mode 100644 index 0000000..b26e7a0 --- /dev/null +++ b/assets/img/topic.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><path d="M880.64 520.448C880.64 642.56 768 742.4 627.712 742.4H409.6l-165.632 74.496-92.928-258.56a146.688 146.688 0 0 1-3.072-37.888v-37.888c0-122.112 110.592-226.56 250.112-226.56h232.704c136.448 0 249.856 104.448 249.856 226.56v37.888zM642.304 209.408h-256a280.064 280.064 0 0 0-279.04 273.152v43.776a250.88 250.88 0 0 0 3.072 46.336L215.04 878.08l183.04-90.112h244.224c153.6 0 279.04-116.48 279.04-261.632v-43.776a279.808 279.808 0 0 0-279.04-273.152z m58.112 351.744a51.2 51.2 0 0 1-51.2-51.2 55.552 55.552 0 0 1 58.112-52.48 54.528 54.528 0 0 1 51.2 55.296 57.088 57.088 0 0 1-58.112 49.408m-179.2 0a51.2 51.2 0 0 1-51.2-51.2 55.552 55.552 0 0 1 58.112-52.48 54.528 54.528 0 0 1 51.2 55.296A59.392 59.392 0 0 1 521.216 563.2m-179.2 0a51.2 51.2 0 0 1-51.2-51.2 55.552 55.552 0 0 1 58.112-52.48 54.528 54.528 0 0 1 51.2 55.296 59.648 59.648 0 0 1-58.112 49.408m279.04-270.336h-208.384c-122.112 0-224 87.296-224 188.928V512a111.36 111.36 0 0 0 3.072 31.744L267.264 768l110.592-58.112H645.12A194.048 194.048 0 0 0 842.752 512v-29.44c-2.816-104.448-102.4-191.744-223.744-191.744" fill="#8FC31F"></path></svg> \ No newline at end of file diff --git a/assets/img/toview.png b/assets/img/toview.png new file mode 100644 index 0000000..cd1e0ae Binary files /dev/null and b/assets/img/toview.png differ diff --git a/assets/img/tuiguang.svg b/assets/img/tuiguang.svg new file mode 100644 index 0000000..52aac0e --- /dev/null +++ b/assets/img/tuiguang.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><path d="M324.5568 660.31616v56.832c0 30.19264 24.4736 54.67136 54.67136 54.67136 30.19264 0 54.67136-24.4736 54.67136-54.67136v-14.04928l-109.34272-42.78272z m186.4704 72.96512C503.0656 799.0016 447.09376 849.92 379.22816 849.92c-73.32864 0-132.77184-59.4432-132.77184-132.77184v-87.3984l-117.15584-45.83936v0.06656a39.05024 39.05024 0 1 1-78.10048 0V411.71968a39.05024 39.05024 0 0 1 78.10048 0v0.06656l499.85024-195.59424v-23.54176a39.05024 39.05024 0 1 1 78.1056 0v610.39616a39.05024 39.05024 0 1 1-78.1056 0v-23.54176l-118.1184-46.22336z" fill="#FFD778"></path><path d="M808.78592 458.73152h124.96384A39.05024 39.05024 0 0 1 972.8 497.78176v0.13312a39.05024 39.05024 0 0 1-39.05024 39.05024h-124.96384a39.05024 39.05024 0 0 1-39.05024-39.05024v-0.13312a39.05024 39.05024 0 0 1 39.05024-39.05024z m-3.31264 130.43712l108.25728 62.61248a39.05024 39.05024 0 0 1 14.2848 53.2992l-0.05632 0.1024a39.04512 39.04512 0 0 1-53.376 14.30016l-108.25728-62.6176a39.05024 39.05024 0 0 1-14.2848-53.2992l0.05632-0.09728a39.04512 39.04512 0 0 1 53.376-14.30016z m-39.14752-250.3424l108.25728-62.61248a39.04512 39.04512 0 0 1 53.376 14.30528l0.0512 0.09216a39.05024 39.05024 0 0 1-14.2848 53.30432L805.4784 406.528a39.04512 39.04512 0 0 1-53.376-14.30016l-0.0512-0.09728a39.05024 39.05024 0 0 1 14.27968-53.2992z" fill="#FB813A"></path></svg> \ No newline at end of file diff --git a/assets/img/video_up.svg b/assets/img/video_up.svg new file mode 100644 index 0000000..e8987f5 --- /dev/null +++ b/assets/img/video_up.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"> +<path fill="#17AACC" d="M618,131.5l47-47c41.7-47.6-25-112.2-72-71l-107,106c-3.3,3.3-6,7-8,11H361c-1.3-2.7-3.3-5-6-7l-112-111 + c-21.3-17.3-51-17-71,3s-20.3,49.7-3,71l45,44H105c-56.7,0-105,48.3-105,105v417c0,56.7,48.3,105,105,105h57 + c-17.9,49.6,19.9,105,73.5,105c55.4,0,90.4-55.3,74.5-105h218c-15.9,49.7,19.1,105,74.5,105c53.6,0,91.4-55.4,73.5-105h57 + c56.7,0,105-48.3,105-105v-417c0-57.6-48.3-104-105-104L618,131.5L618,131.5z"/> +</svg> diff --git a/assets/zone_icon/ad.svg b/assets/zone_icon/ad.svg new file mode 100644 index 0000000..3004bbf --- /dev/null +++ b/assets/zone_icon/ad.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M576.768 153.6c32.768-32.512 132.096 13.824 221.952 103.68s136.448 189.184 103.68 221.952a27.648 27.648 0 0 1-6.144 4.608c-37.632 22.784-640 377.6-640 377.6a110.592 110.592 0 0 1-48.384-30.976 140.288 140.288 0 0 1-34.56-49.152s381.184-588.8 399.36-620.8a34.56 34.56 0 0 1 4.096-6.912z" + fill="#9796ED"></path> + <path + d="M172.288 780.032c-4.864 3.328-35.328 19.968-51.2 28.928a18.688 18.688 0 0 0-9.728 19.456 104.192 104.192 0 0 0 31.488 58.368 117.504 117.504 0 0 0 59.392 33.024 19.2 19.2 0 0 0 19.968-8.448c10.752-17.152 32-51.2 33.024-51.2a110.592 110.592 0 0 1-48.384-30.976 140.288 140.288 0 0 1-34.56-49.152z" + fill="#9289F0"></path> + <path + d="M576.768 153.6c32.768-32.512 132.096 13.824 221.952 103.68s136.448 189.184 103.68 221.952a27.648 27.648 0 0 1-6.144 4.608c-37.632 22.784-102.4 60.16-102.4 60.16s-64-4.096-173.312-113.664c-102.4-102.4-112.128-171.008-112.128-171.008s39.936-61.696 62.464-98.816a34.56 34.56 0 0 1 5.888-6.912z" + fill="#F7DF88"></path> + <path + d="M680.45816 374.49224a230.144 83.712 45 1 0 118.386645-118.386645 230.144 83.712 45 1 0-118.386645 118.386645Z" + fill="#8683EA"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/animal.svg b/assets/zone_icon/animal.svg new file mode 100644 index 0000000..4f7708d --- /dev/null +++ b/assets/zone_icon/animal.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M517.376 465.152a144.924444 144.924444 0 0 1 137.528889 99.214222c1.28 3.925333 2.275556 7.850667 2.901333 11.804445a132.266667 132.266667 0 0 1-14.279111 263.765333h-263.054222a132.266667 132.266667 0 0 1-14.250667-263.793778c0.625778-3.982222 1.592889-7.907556 2.872889-11.776a144.924444 144.924444 0 0 1 137.528889-99.214222h10.752zM420.693333 418.104889c50.261333-3.783111 85.617778-59.164444 79.047111-123.733333-6.599111-64.568889-52.650667-113.891556-102.912-110.108445-50.232889 3.754667-85.617778 59.164444-79.018666 123.733333 6.599111 64.568889 52.650667 113.863111 102.912 110.08zM603.306667 418.104889c50.232889 3.754667 96.284444-45.511111 102.883555-110.108445 6.599111-64.568889-28.785778-119.978667-79.018666-123.733333-50.261333-3.783111-96.312889 45.511111-102.912 110.08-6.599111 64.568889 28.785778 119.978667 79.018666 123.733333zM717.425778 551.139556c39.082667 21.816889 96.910222-4.266667 129.137778-58.225778 32.256-53.959111 26.709333-115.370667-12.373334-137.187556-39.111111-21.816889-96.938667 4.266667-129.166222 58.225778-32.256 53.959111-26.709333 115.370667 12.401778 137.187556zM306.574222 551.139556c39.111111-21.816889 44.657778-83.228444 12.401778-137.187556-32.227556-53.959111-90.055111-80.042667-129.137778-58.225778-39.111111 21.816889-44.657778 83.228444-12.430222 137.187556 32.256 53.959111 90.083556 80.042667 129.166222 58.225778z" + fill="#FB7299"></path> + <path + d="M621.511111 113.777778c76.231111-0.938667 138.467556 74.012444 149.504 173.340444 37.745778-13.312 75.861333-12.913778 107.292445 4.323556 70.712889 38.769778 80.753778 147.968 22.442666 243.911111a272.327111 272.327111 0 0 1-71.111111 78.336c9.159111 22.869333 14.222222 47.843556 14.222222 73.984V711.111111a199.111111 199.111111 0 0 1-199.111111 199.111111h-265.500444a199.111111 199.111111 0 0 1-199.111111-199.111111v-23.438222c0-26.168889 5.063111-51.114667 14.222222-74.012445a272.099556 272.099556 0 0 1-71.111111-78.307555c-58.311111-95.943111-48.270222-205.141333 22.442666-243.911111 31.431111-17.237333 69.546667-17.635556 107.320889-4.352C264.021333 187.790222 326.257778 112.839111 402.488889 113.777778c42.410667 0.540444 81.152 24.462222 109.511111 62.776889 28.359111-38.286222 67.100444-62.236444 109.511111-62.776889z" + fill="#FFD7E7"></path> + <path + d="M512 465.152a141.198222 141.198222 0 0 1 134.741333 98.958222l0.085334 0.256c1.905778 6.087111 3.015111 12.231111 3.356444 18.289778a132.266667 132.266667 0 0 1-9.728 264.163556h-256.910222a132.266667 132.266667 0 0 1-9.671111-264.192l-0.199111 4.579555c0-7.736889 1.194667-15.445333 3.498666-22.840889l0.085334-0.284444A141.198222 141.198222 0 0 1 512 465.180444zM420.693333 418.104889c50.261333-3.783111 85.617778-59.164444 79.047111-123.733333-6.599111-64.568889-52.650667-113.891556-102.912-110.108445-50.232889 3.754667-85.617778 59.164444-79.018666 123.733333 6.599111 64.568889 52.650667 113.863111 102.912 110.08zM603.306667 418.104889c50.232889 3.754667 96.284444-45.511111 102.883555-110.108445 6.599111-64.568889-28.785778-119.978667-79.018666-123.733333-50.261333-3.783111-96.312889 45.511111-102.912 110.08-6.599111 64.568889 28.785778 119.978667 79.018666 123.733333zM717.425778 551.139556c39.082667 21.816889 96.910222-4.266667 129.137778-58.225778 32.256-53.959111 26.709333-115.370667-12.373334-137.187556-39.111111-21.816889-96.938667 4.266667-129.166222 58.225778-32.256 53.959111-26.709333 115.370667 12.401778 137.187556zM306.574222 551.139556c39.111111-21.816889 44.657778-83.228444 12.401778-137.187556-32.227556-53.959111-90.055111-80.042667-129.137778-58.225778-39.111111 21.816889-44.657778 83.228444-12.430222 137.187556 32.256 53.959111 90.083556 80.042667 129.166222 58.225778z" + fill="#FB7299"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/anime.svg b/assets/zone_icon/anime.svg new file mode 100644 index 0000000..fd797d3 --- /dev/null +++ b/assets/zone_icon/anime.svg @@ -0,0 +1,16 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M588.8 359.68l-12.032-7.424 150.272-206.592a30.976 30.976 0 0 0-51.2-36.352l-153.6 210.176L281.6 170.24a30.976 30.976 0 1 0-33.024 52.736L486.4 369.92l-22.784 31.488a30.976 30.976 0 1 0 51.2 36.352l25.6-35.072 16.128 9.728A30.976 30.976 0 1 0 588.8 359.68z" + fill="#FB813A"></path> + <path d="M763.648 850.688m-53.248 0a53.248 53.248 0 1 0 106.496 0 53.248 53.248 0 1 0-106.496 0Z" fill="#FB813A"> + </path> + <path d="M261.12 797.44a53.248 53.248 0 1 0 53.504 53.248 53.248 53.248 0 0 0-53.504-53.248z" fill="#FB813A"></path> + <path + d="M141.312 314.368m92.928 0l556.288 0q92.928 0 92.928 92.928l0 360.704q0 92.928-92.928 92.928l-556.288 0q-92.928 0-92.928-92.928l0-360.704q0-92.928 92.928-92.928Z" + fill="#FDDE80"></path> + <path d="M520.448 575.232m-128.256 0a128.256 128.256 0 1 0 256.512 0 128.256 128.256 0 1 0-256.512 0Z" + fill="#FFFFFF"></path> + <path + d="M476.928 546.56c0-26.88 19.2-37.632 42.24-25.6l49.664 28.672a25.6 25.6 0 0 1 0 48.64l-49.664 28.672c-23.04 13.568-42.24 2.56-42.24-24.32z" + fill="#FB813A"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/car.svg b/assets/zone_icon/car.svg new file mode 100644 index 0000000..6d30f0a --- /dev/null +++ b/assets/zone_icon/car.svg @@ -0,0 +1,20 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M210.688 588.8h25.6a51.2 51.2 0 0 1 51.2 45.568l14.08 128A51.2 51.2 0 0 1 256 819.2H225.024a51.2 51.2 0 0 1-51.2-45.568l-14.08-128A51.2 51.2 0 0 1 204.8 588.8zM788.224 588.8h25.6a51.2 51.2 0 0 1 51.2 51.2 41.984 41.984 0 0 1 0 5.632l-14.08 128a51.2 51.2 0 0 1-51.2 45.568h-25.6a51.2 51.2 0 0 1-51.2-51.2 41.984 41.984 0 0 1 0-5.632l14.08-128a51.2 51.2 0 0 1 51.2-45.568zM906.496 392.96a38.656 38.656 0 0 1-25.6 48.128l-25.6 7.424a38.4 38.4 0 0 1-22.528-73.472l25.6-7.424a38.144 38.144 0 0 1 48.128 25.344zM215.296 422.912a38.4 38.4 0 0 1-47.872 25.6l-25.6-7.424a38.656 38.656 0 0 1-25.6-48.128 38.144 38.144 0 0 1 47.872-25.6l25.6 7.424a38.4 38.4 0 0 1 25.6 48.128z" + fill="#23ADE5"></path> + <path + d="M292.608 201.216A1109.76 1109.76 0 0 1 512 179.2a1165.568 1165.568 0 0 1 224 22.016 51.2 51.2 0 0 1 38.144 32L870.4 486.4v230.4a25.6 25.6 0 0 1-25.6 25.6H179.2a25.6 25.6 0 0 1-25.6-25.6v-230.4l102.4-253.696a51.2 51.2 0 0 1 36.608-31.488z" + fill="#48CFE5"></path> + <path + d="M204.8 512m25.6 0l102.4 0q25.6 0 25.6 25.6l0 25.6q0 25.6-25.6 25.6l-102.4 0q-25.6 0-25.6-25.6l0-25.6q0-25.6 25.6-25.6Z" + fill="#FFFFFF"></path> + <path + d="M665.6 512m25.6 0l102.4 0q25.6 0 25.6 25.6l0 25.6q0 25.6-25.6 25.6l-102.4 0q-25.6 0-25.6-25.6l0-25.6q0-25.6 25.6-25.6Z" + fill="#FFFFFF"></path> + <path + d="M327.68 270.848a1000.96 1000.96 0 0 1 172.032-14.848 1429.248 1429.248 0 0 1 196.864 15.36 25.6 25.6 0 0 1 20.992 18.176l39.68 134.656a25.6 25.6 0 0 1-17.408 31.744 24.064 24.064 0 0 1-9.472 0q-125.184-12.032-230.4-12.032a1894.4 1894.4 0 0 0-204.8 11.264 25.6 25.6 0 0 1-28.16-22.784 25.6 25.6 0 0 1 0-9.984L307.2 288.768a25.6 25.6 0 0 1 20.48-17.92z" + fill="#FDDE80"></path> + <path + d="M614.4 358.4a102.4 102.4 0 0 0-100.864 86.784h51.2a51.2 51.2 0 0 1 99.072 5.12l51.2 4.352A102.4 102.4 0 0 0 614.4 358.4z" + fill="#23ADE5"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/cinephile.svg b/assets/zone_icon/cinephile.svg new file mode 100644 index 0000000..cad39f4 --- /dev/null +++ b/assets/zone_icon/cinephile.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M147.2 201.728m79.616 0l571.136 0q79.616 0 79.616 79.616l0 458.24q0 79.616-79.616 79.616l-571.136 0q-79.616 0-79.616-79.616l0-458.24q0-79.616 79.616-79.616Z" + fill="#9796ED"></path> + <path + d="M222.976 269.312h77.056v57.856H222.976zM390.144 269.312h77.056v57.856h-77.056zM557.312 269.312h77.056v57.856h-77.056zM724.48 269.312h77.056v57.856H724.48zM222.976 693.76h77.056v57.856H222.976zM390.144 693.76h77.056v57.856h-77.056zM557.312 693.76h77.056v57.856h-77.056zM147.2 375.296h730.368v270.08H147.2z" + fill="#7B78EA"></path> + <path + d="M521.369822 529.707066m23.351494-23.351495l2.534271-2.53427q23.351494-23.351494 46.702989 0l199.664327 199.664327q23.351494 23.351494 0 46.702989l-2.534271 2.534271q-23.351494 23.351494-46.702988 0l-199.664328-199.664328q-23.351494-23.351494 0-46.702989Z" + fill="#FFD043"></path> + <path + d="M708.352 418.816h-25.6v-24.32a13.568 13.568 0 0 0-13.568-13.568H665.6a13.312 13.312 0 0 0-13.312 13.568v24.32h-25.6a13.568 13.568 0 0 0-13.568 13.568v5.632a13.568 13.568 0 0 0 13.568 13.568h25.6v24.32a13.312 13.312 0 0 0 13.312 13.568h5.632a13.568 13.568 0 0 0 13.568-13.568v-24.32h25.6a13.312 13.312 0 0 0 13.312-13.568v-5.632a13.312 13.312 0 0 0-15.36-13.568zM517.888 418.816h-25.6v-24.32a13.312 13.312 0 0 0-13.312-13.568h-5.632a13.568 13.568 0 0 0-13.568 13.568v24.32H435.2a13.312 13.312 0 0 0-13.312 13.568v5.632a13.312 13.312 0 0 0 13.312 13.568h25.6v24.32a13.568 13.568 0 0 0 13.568 13.568h5.632a13.312 13.312 0 0 0 13.312-13.568v-24.32h25.6a13.312 13.312 0 0 0 13.312-13.568v-5.632a13.312 13.312 0 0 0-14.336-13.568zM493.568 572.16h-18.432v-18.432a10.24 10.24 0 0 0-10.24-10.24H460.8a10.24 10.24 0 0 0-10.24 10.24v18.432h-18.432a10.24 10.24 0 0 0-10.24 10.24v4.352a10.24 10.24 0 0 0 10.24 10.24h18.432V614.4a10.24 10.24 0 0 0 10.24 10.24h4.352a10.24 10.24 0 0 0 10.24-10.24v-18.432h18.432a10.24 10.24 0 0 0 10.24-10.24v-4.352a10.24 10.24 0 0 0-10.496-9.216z" + fill="#FFD778"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/comic.svg b/assets/zone_icon/comic.svg new file mode 100644 index 0000000..bb78da2 --- /dev/null +++ b/assets/zone_icon/comic.svg @@ -0,0 +1,20 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M722.204444 843.491556H170.524444a70.144 70.144 0 0 1-69.973333-69.916445V400.896a70.144 70.144 0 0 1 69.973333-69.944889H722.204444a70.144 70.144 0 0 1 69.916445 69.973333v372.622223a70.144 70.144 0 0 1-69.916445 69.944889" + fill="#FDDE80"></path> + <path + d="M710.314667 341.703111c22.613333-7.338667 38.200889-29.098667 36.067555-52.792889a143.616 143.616 0 0 0-6.542222-32.142222c-39.480889-121.628444-229.12-169.045333-423.566222-105.898667C121.799111 214.016-3.783111 363.804444 35.697778 485.461333c3.413333 10.524444 7.992889 20.451556 13.596444 29.809778 12.231111 20.423111 37.603556 28.871111 60.216889 21.532445l600.803556-195.100445z" + fill="#9796ED"></path> + <path + d="M281.031111 123.676444l11.235556 34.616889c4.977778 15.331556 21.617778 23.779556 36.920889 18.801778 15.331556-4.977778 23.808-21.589333 18.830222-36.920889l-11.235556-34.588444a29.383111 29.383111 0 0 0-36.920889-18.801778c-15.36 4.949333-23.808 21.589333-18.830222 36.892444" + fill="#7B78EB"></path> + <path + d="M444.16 714.069333a139.747556 139.747556 0 0 0 138.296889-119.552 17.493333 17.493333 0 0 0-17.123556-20.195555h-242.346666a17.493333 17.493333 0 0 0-17.123556 20.195555 139.776 139.776 0 0 0 138.296889 119.552" + fill="#FFAF66"></path> + <path + d="M704.796444 680.903111L618.951111 640.284444s12.288 55.751111 71.395556 92.672c-0.085333 0.739556-0.284444 1.422222-0.369778 2.190223-12.714667 94.549333 38.200889 179.399111 113.692444 189.553777 75.491556 10.126222 146.972444-58.311111 159.687111-152.860444 12.686222-94.520889-38.200889-179.399111-113.720888-189.525333-60.017778-8.078222-117.418667 33.649778-144.839112 98.588444z" + fill="#9796ED"></path> + <path + d="M856.064 682.012444l-19.797333 99.157334a6.570667 6.570667 0 0 1-6.456889 5.290666h-17.777778a6.599111 6.599111 0 0 1-6.542222-7.537777l14.478222-99.128889a6.542222 6.542222 0 0 1 6.485333-5.660445h23.153778c4.181333 0 7.281778 3.811556 6.456889 7.879111m-22.897778 136.078223l-2.986666 16.298666a6.570667 6.570667 0 0 1-6.456889 5.404445h-20.963556a6.599111 6.599111 0 0 1-6.485333-7.651556l2.645333-16.270222a6.599111 6.599111 0 0 1 6.485333-5.546667h21.276445c4.124444 0 7.253333 3.726222 6.485333 7.765334" + fill="#C5C2FF"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/dance.svg b/assets/zone_icon/dance.svg new file mode 100644 index 0000000..87a5ad1 --- /dev/null +++ b/assets/zone_icon/dance.svg @@ -0,0 +1,10 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M956.672 513.792a476.416 476.416 0 0 0-890.368 0L512 727.296l-95.232 45.568a117.76 117.76 0 0 0 192.256 0L512 727.04z" + fill="#FC6B8A"></path> + <path d="M512 727.296l208.64-99.84a222.976 222.976 0 0 0-416.768 0z" fill="#FFFFFF"></path> + <path d="M405.4528 751.5392l541.184-258.5856 14.0288 29.312-541.184 258.6112z" fill="#FF5C7A"></path> + <path + d="M666.624 545.792l-18.688-15.36-112.64 135.424 40.192-173.056-23.552-5.632-40.192 172.544-40.448-172.544-23.808 5.632 40.704 173.056-112.896-135.424-18.688 15.36 111.616 134.144-391.68-186.88-13.824 29.184 541.184 258.56 14.08-29.44-87.552-41.728 136.192-163.84z" + fill="#F14767"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/digital.svg b/assets/zone_icon/digital.svg new file mode 100644 index 0000000..56ea8f9 --- /dev/null +++ b/assets/zone_icon/digital.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M298.496 284.928l17.664-51.2a36.608 36.608 0 0 1 33.28-22.016h325.376a37.12 37.12 0 0 1 34.304 22.016l17.408 51.2h88.576a69.376 69.376 0 0 1 66.56 70.656v377.344a69.12 69.12 0 0 1-67.84 70.144H209.92a69.12 69.12 0 0 1-68.352-70.144V355.584a69.376 69.376 0 0 1 68.352-70.656z" + fill="#FFBA7B"></path> + <path d="M141.568 457.728h740.096v271.36a69.632 69.632 0 0 1-73.728 73.984H210.688a69.12 69.12 0 0 1-69.12-69.376z" + fill="#FB952C"></path> + <path d="M512 358.4a197.376 197.376 0 1 1-197.376 197.376A197.632 197.632 0 0 1 512 358.4z" fill="#FB952C"></path> + <path d="M512 409.6a148.224 148.224 0 1 1-147.968 147.968A147.968 147.968 0 0 1 512 409.6z" fill="#FFFFFF"></path> + <path d="M512 457.728a98.816 98.816 0 1 1-98.56 98.56A98.56 98.56 0 0 1 512 457.728z" fill="#FB952C"></path> + <path + d="M733.696 358.4h73.984a25.6 25.6 0 0 1 25.6 25.6 25.6 25.6 0 0 1-25.6 25.6h-73.984a25.6 25.6 0 0 1-25.6-25.6 25.6 25.6 0 0 1 25.6-25.6z" + fill="#FFFFFF"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/documentary.svg b/assets/zone_icon/documentary.svg new file mode 100644 index 0000000..fcaf707 --- /dev/null +++ b/assets/zone_icon/documentary.svg @@ -0,0 +1,31 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M404.9 386.765c-70.8975-2.565-143.3475 12.06-196.65 38.1825-48.8475 23.9625-117.63 89.46-121.9275 135.5625h735.3225c-3.2175 0-12.015-9.4275-14.7375-11.52-5.0175-3.825-9.7425-7.8075-14.76-11.5425-11.9025-8.91-24.66-16.8975-37.1475-24.975a1040.175 1040.175 0 0 0-77.0625-45.585c-52.47-27.945-107.865-50.805-165.69-65.0025a533.88 533.88 0 0 0-107.3475-15.12" + fill="#47CFE5"></path> + <path + d="M744.605 489.1625c-12.7125 32.31-136.71 36.765-181.395 36.765H137.8025c-15.2325 0-29.7675 5.1975-39.7575 14.265-9.9 8.9775-14.1075 20.7675-11.7 32.355 0 0.1125 0 0.27 0.09 0.3375 9.2925 43.6725 35.73 83.34 76.365 114.6825 1.62 1.26 3.2625 2.52 4.9275 3.735 106.74 78.4575 292.5225 81.1575 423.45 43.875 41.445-11.79 80.865-28.17 115.1775-49.635 38.9925-24.39 78.795-57.3075 102.3075-91.7325 3.465-5.0625 41.22-61.1775 41.9625-60.885l-106.02-43.7625z" + fill="#47CFE5"></path> + <path + d="M918.0575 505.3175l-29.88-17.0775a75.0825 75.0825 0 0 0-70.11-2.1375 75.375 75.375 0 0 0-37.4175-59.355l-29.925-17.0775a11.4525 11.4525 0 0 0-15.66 4.275l-7.83 13.7025a59.0625 59.0625 0 0 0 21.96 80.5725l15.795 9.045a0.045 0.045 0 0 1-0.045 0.045l51.48 29.43 0.045-0.045 17.46 9.99a59.085 59.085 0 0 0 80.5725-21.9375l7.83-13.725a11.5425 11.5425 0 0 0-4.275-15.705" + fill="#2BBAE4"></path> + <path + d="M654.515 712.4975C351.3275 720.8675 266.3 564.425 266.3 564.425H85.7825a31.995 31.995 0 0 0 0.63 8.46c9.2925 43.6725 35.73 83.34 76.365 114.6825 1.62 1.2825 3.2625 2.52 4.9275 3.735 106.7175 78.4575 292.5 81.18 423.4275 43.875a509.6925 509.6925 0 0 0 63.3825-22.68" + fill="#E5E6E6"></path> + <path + d="M654.515 712.4975c-65.16 1.8-120.15-4.41-166.5675-14.2425-49.005-10.3725-26.1675 59.31-3.2175 56.79 37.485-4.0725 73.665-10.5975 106.4025-19.9125a502.3575 502.3575 0 0 0 63.3825-22.635" + fill="#E4E5E4"></path> + <path + d="M407.1275 674.9225c21.5775 69.84 69.705 117.6525 116.775 113.6475 3.735-0.3375 6.2325-4.0725 5.5125-7.74l-24.435-125.6175a5.715 5.715 0 0 0-6.6825-4.5l-86.715 16.8975a5.7825 5.7825 0 0 0-4.455 7.3125" + fill="#47CFE5"></path> + <path d="M441.2375 614.7125a29.295 29.295 0 1 1-58.6125 0.0225 29.295 29.295 0 0 1 58.6125-0.0225" fill="#0099BC"> + </path> + <path + d="M252.5975 310.4675a64.2825 64.2825 0 0 1 64.305-64.1025c18.81 0 35.73 8.1225 47.52 21.1275a64.17 64.17 0 0 1 111.7125 42.975 16.56 16.56 0 0 1-16.5825 16.5825 16.56 16.56 0 0 1-16.605-16.5825 31.05 31.05 0 0 0-61.9875-2.16h-0.18l0.1125 77.4675a16.5825 16.5825 0 1 1-33.1875 0v-75.3975c0-17.0325-13.9275-30.9375-30.96-30.9375a31.05 31.05 0 0 0-31.0275 31.0275 16.56 16.56 0 1 1-33.12 0" + fill="#47CFE5"></path> + <path + d="M364.3325 408.0275a22.2525 22.2525 0 0 1-22.2075-22.23V310.4a25.3575 25.3575 0 1 0-50.715 0.09 22.23 22.23 0 0 1-44.415 0c0-38.4525 31.365-69.75 69.9075-69.75a69.75 69.75 0 0 1 47.52 18.765 70.2 70.2 0 0 1 47.61-18.765c38.4525 0 69.75 31.2975 69.75 69.75a22.23 22.23 0 0 1-44.4375 0 25.425 25.425 0 0 0-50.7375-1.7775l-0.1575 2.385 0.09 74.7a22.2525 22.2525 0 0 1-22.2075 22.23z m-47.5425-134.19c20.16 0 36.5625 16.4025 36.5625 36.5625v75.42a10.98 10.98 0 1 0 21.915 0l-0.09-83.0925h0.9225a36.7425 36.7425 0 0 1 35.82-28.8675c20.205 0 36.6525 16.4475 36.6525 36.6525a10.98 10.98 0 0 0 21.9375 0c0-32.265-26.235-58.5-58.5-58.5-16.4475 0-32.2875 7.02-43.4475 19.305l-4.1625 4.545-4.1625-4.6125a58.635 58.635 0 0 0-43.335-19.2825 58.635 58.635 0 0 0-58.6575 58.5 10.9575 10.9575 0 0 0 21.915 0 36.675 36.675 0 0 1 36.63-36.63z" + fill="#47CFE5"></path> + <path + d="M389.87 621.2825h-66.33a47.79 47.79 0 0 1-35.0325-15.5925l-23.715-25.695a28.575 28.575 0 0 0-20.88-9.2925H91.0475a6.525 6.525 0 1 1 0-13.095h152.8875c11.4525 0 22.5675 4.9275 30.4875 13.5225l23.715 25.7175c6.66 7.2 15.93 11.34 25.425 11.34h66.33a6.525 6.525 0 1 1-0.0225 13.095" + fill="#0099BC"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/douga.svg b/assets/zone_icon/douga.svg new file mode 100644 index 0000000..5cf324c --- /dev/null +++ b/assets/zone_icon/douga.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M273.408 166.912h477.696c58.368 0 105.984 47.616 105.984 105.984v477.696c0 58.368-47.616 105.984-105.984 105.984H273.408c-58.368 0-105.984-47.616-105.984-105.984V273.408C166.912 215.04 215.04 166.912 273.408 166.912z" + fill="#7B78EB"></path> + <path + d="M512 525.312v98.816c33.28-14.848 72.704 0.512 87.552 33.792 14.848 33.28-0.512 72.704-33.792 87.552-16.896 7.68-35.84 7.68-53.248 0v111.616H273.408c-58.368 0-105.984-47.616-105.984-105.984V512h137.216c-21.504 19.456-24.064 53.248-4.608 74.752 19.456 21.504 53.248 24.064 74.752 4.608 21.504-18.944 24.064-53.248 4.608-74.752l-4.608-4.608H512v-40.96c-4.096 0.512-9.216 0.512-13.312 0-51.2 0-86.016-47.616-86.016-105.984s20.992-108.032 86.016-108.032h13.312V166.912h238.592c58.368 0 105.984 47.616 105.984 105.984v251.904h-120.832c20.992-23.552 19.456-59.392-3.584-80.896-23.552-20.992-59.392-19.456-80.896 3.584-19.968 21.504-19.968 55.296 0 76.8H512z" + fill="#9796ED"></path> + <path + d="M512 525.312v98.816l13.312-4.096c35.84-7.68 72.704 15.872 79.872 52.224 7.68 35.84-18.432 72.192-54.272 78.848-4.096 1.024-8.704 1.024-13.312 1.024-9.216 0-16.384-3.072-25.088-6.144v111.616h-14.336v-132.608l18.432 8.192c27.136 11.776 58.368-0.512 70.144-27.648 11.776-27.136-0.512-58.368-27.648-70.144-13.312-5.632-28.672-5.632-42.496 0l-18.432 8.192v-117.76H399.872c14.848 33.28-0.512 72.704-33.792 87.552-33.28 14.848-72.704-0.512-87.552-33.792-7.68-16.896-7.68-35.84 0-53.248H166.912V512h137.216c-21.504 19.456-24.064 53.248-4.608 74.752 19.456 21.504 53.248 24.064 74.752 4.608 21.504-19.456 24.064-53.248 4.608-74.752l-4.608-4.608H512v-39.936h-13.312c-51.2 0-86.016-47.104-86.016-105.984s20.992-109.568 86.016-109.568h13.312V166.912h13.312v105.984h-26.624c-49.664 0-73.216 33.28-73.216 94.208 0 53.248 30.72 92.672 73.216 92.672 3.584 0.512 7.68 0.512 11.264 0l15.36-2.048V512h102.912c-13.824-35.84 4.096-76.8 40.448-90.624 35.84-13.824 76.8 4.096 90.624 40.448 6.144 15.872 6.144 33.792 0 50.176h97.792v13.312h-120.832c20.992-23.552 19.456-59.392-3.584-80.896-23.552-20.992-59.392-19.456-80.896 3.584-19.968 21.504-19.968 55.296 0 76.8H512z" + fill="#6A68C6"></path> + <path + d="M444.928 693.248c-23.04 13.312-52.224 5.12-65.024-17.408-4.096-7.68-6.144-15.36-6.144-24.064V392.192c0-26.624 20.992-47.616 47.616-47.616 8.704 0 16.896 2.048 24.576 6.656l221.696 132.608c23.04 13.312 30.208 42.496 16.896 65.024-4.096 6.656-10.24 12.8-16.896 16.896" + fill="#FDDE80"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/ent.svg b/assets/zone_icon/ent.svg new file mode 100644 index 0000000..d938420 --- /dev/null +++ b/assets/zone_icon/ent.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M534.442796 378.982175m36.203867 36.203867l30.592268 30.592268q36.203867 36.203867 0 72.407734l-360.590518 360.590518q-36.203867 36.203867-72.407734 0l-30.592268-30.592268q-36.203867-36.203867 0-72.407735l360.590518-360.590517q36.203867-36.203867 72.407734 0Z" + fill="#FF8693"></path> + <path + d="M369.92 543.744l137.472-137.472a38.912 38.912 0 0 1 54.528 0l48.384 48.64a38.4 38.4 0 0 1 0 54.528l-137.984 137.984z" + fill="#FC6376"></path> + <path + d="M286.133941 631.021801m12.854616 12.85013l72.601422 72.576083q12.854616 12.850129 0.004486 25.704746l-1.62889 1.629458q-12.850129 12.854616-25.704745 0.004486l-72.601422-72.576083q-12.854616-12.850129-0.004486-25.704745l1.62889-1.629459q12.850129-12.854616 25.704745-0.004486Z" + fill="#FFA9B1"></path> + <path + d="M737.024 547.584a99.328 99.328 0 0 1 62.72-62.72l51.2-13.568a27.136 27.136 0 0 0 13.056-49.664L826.624 384a98.816 98.816 0 0 1-22.784-85.76l16.896-63.232c7.168-27.136-8.96-43.52-36.096-36.096l-63.232 16.896a98.816 98.816 0 0 1-85.76-23.04l-37.376-36.864a27.136 27.136 0 0 0-49.408 13.312l-13.824 51.2a97.792 97.792 0 0 1-62.464 62.72l-51.2 13.824a27.136 27.136 0 0 0-13.312 49.408L445.44 384a97.536 97.536 0 0 1 23.04 85.504l-16.896 63.232c-7.424 27.392 8.96 43.52 36.096 36.352l63.232-16.896a97.792 97.792 0 0 1 85.76 22.784l37.376 37.376a26.88 26.88 0 0 0 49.408-13.312z" + fill="#FDDE80"></path> + <path + d="M886.272 417.536l-74.752-75.008 30.464-114.432a41.216 41.216 0 0 0-8.704-41.472A41.728 41.728 0 0 0 791.808 179.2l-114.432 30.72-74.752-76.032A41.728 41.728 0 0 0 563.2 120.576a41.216 41.216 0 0 0-28.416 31.488l-27.392 102.4L404.48 281.6a42.24 42.24 0 0 0-31.744 28.16 42.24 42.24 0 0 0 13.312 40.448L460.8 425.216l-30.72 114.432a41.728 41.728 0 0 0 8.96 41.472 37.888 37.888 0 0 0 27.392 10.752 56.832 56.832 0 0 0 14.08-2.048l114.432-30.72 74.752 75.008a45.824 45.824 0 0 0 31.232 14.336 34.304 34.304 0 0 0 8.96 0 41.216 41.216 0 0 0 28.416-31.488l27.392-102.4 102.4-27.392a41.984 41.984 0 0 0 31.488-28.416 40.96 40.96 0 0 0-13.312-41.216z m-84.736-203.52h5.12a16.896 16.896 0 0 1 0 5.12l-25.6 93.696-72.96-73.728z m-32 139.776l-34.56 128-128 34.56-102.4-102.4 34.56-128 128-34.56z m-199.424-192c0-2.56 1.792-4.096 1.792-4.608a9.984 9.984 0 0 1 4.096 3.072l59.648 59.648-87.296 23.296z m-157.696 162.048L409.6 320a12.8 12.8 0 0 1 4.864-2.048l81.152-21.76-23.552 87.808z m58.368 230.4a18.944 18.944 0 0 1-5.12 0 17.92 17.92 0 0 1 0-5.12l25.6-93.696L563.2 528.64z m230.4 51.2c0 2.816-1.536 4.096-1.536 4.864a20.992 20.992 0 0 1-4.352-3.328l-59.392-59.392 87.296-23.552z m156.16-156.16l-81.152 21.76 23.296-87.04 59.392 59.392a40.96 40.96 0 0 1 3.328 3.84 12.8 12.8 0 0 1-4.096 2.56z" + fill="#FCC029"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/fashion.svg b/assets/zone_icon/fashion.svg new file mode 100644 index 0000000..cfb6621 --- /dev/null +++ b/assets/zone_icon/fashion.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M691.2 204.8a44.032 44.032 0 0 1 29.952 34.048 117.76 117.76 0 0 1-13.056 76.8s-19.2 29.952-24.32 39.936a235.008 235.008 0 0 0-25.6 107.008v40.704H365.312v-39.424a235.008 235.008 0 0 0-25.6-107.008c-5.12-9.984-24.32-39.936-24.32-39.936a117.76 117.76 0 0 1-13.056-76.8A44.544 44.544 0 0 1 336.896 204.8V147.712a29.952 29.952 0 0 1 27.136-31.744 29.952 29.952 0 0 1 27.648 31.744v73.728A237.056 237.056 0 0 0 512 253.952a241.408 241.408 0 0 0 125.184-35.072V147.712a27.136 27.136 0 1 1 53.76 0z" + fill="#FF6A9B"></path> + <path + d="M658.432 487.936H365.312L204.8 780.288a36.352 36.352 0 0 0 10.24 46.592 492.288 492.288 0 0 0 595.456 0 36.608 36.608 0 0 0 8.704-47.36z" + fill="#FF9DC6"></path> + <path + d="M409.6 537.6a9.984 9.984 0 0 0-13.568 4.608l-124.16 250.624a10.496 10.496 0 0 0 4.608 13.568 14.848 14.848 0 0 0 4.608 0 9.984 9.984 0 0 0 8.96-5.632l124.16-250.88A10.24 10.24 0 0 0 409.6 537.6zM455.936 643.072a9.984 9.984 0 0 0-12.032 7.424l-40.448 170.752a10.24 10.24 0 0 0 7.424 12.288h2.304a9.728 9.728 0 0 0 9.728-7.936l40.448-170.752a9.984 9.984 0 0 0-7.424-11.776zM750.848 791.808l-124.16-250.624A9.984 9.984 0 0 0 614.4 537.6a10.24 10.24 0 0 0-4.608 13.312l124.16 250.88a9.984 9.984 0 0 0 8.96 5.632 14.848 14.848 0 0 0 4.608 0 10.496 10.496 0 0 0 3.328-15.616zM579.84 650.496a9.984 9.984 0 0 0-19.456 4.608l40.448 170.752a9.728 9.728 0 0 0 9.728 7.936h2.304a10.24 10.24 0 0 0 7.424-12.288z" + fill="#FF6A9B"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/food.svg b/assets/zone_icon/food.svg new file mode 100644 index 0000000..e554eb5 --- /dev/null +++ b/assets/zone_icon/food.svg @@ -0,0 +1,32 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M192.075294 503.883294m-75.294118 0a75.294118 75.294118 0 1 0 150.588236 0 75.294118 75.294118 0 1 0-150.588236 0Z" + fill="#FA942D"></path> + <path + d="M342.663529 411.211294m-75.294117 0a75.294118 75.294118 0 1 0 150.588235 0 75.294118 75.294118 0 1 0-150.588235 0Z" + fill="#FA942D"></path> + <path + d="M284.747294 480.722824m-75.294118 0a75.294118 75.294118 0 1 0 150.588236 0 75.294118 75.294118 0 1 0-150.588236 0Z" + fill="#FE5D79"></path> + <path + d="M765.470118 532.841412m-127.427765 0a127.427765 127.427765 0 1 0 254.855529 0 127.427765 127.427765 0 1 0-254.855529 0Z" + fill="#FA942D"></path> + <path + d="M632.259765 457.547294m-133.210353 0a133.210353 133.210353 0 1 0 266.420706 0 133.210353 133.210353 0 1 0-266.420706 0Z" + fill="#FA942D"></path> + <path + d="M672.798118 556.016941m-150.588236 0a150.588235 150.588235 0 1 0 301.176471 0 150.588235 150.588235 0 1 0-301.176471 0Z" + fill="#FE5D79"></path> + <path + d="M932.291765 474.925176a28.762353 28.762353 0 0 1 28.747294 28.762353l-0.045177 1.355295-0.090353 1.355294c-14.305882 150.919529-130.605176 272.865882-280.741647 299.188706l20.178824 80.745411a23.160471 23.160471 0 0 1-22.467765 28.777412H343.371294a23.160471 23.160471 0 0 1-22.467765-28.777412l20.178824-80.745411C192.813176 779.595294 77.552941 660.329412 60.928 512.015059l-0.557176-5.376a28.958118 28.958118 0 0 1 28.822588-31.713883h843.083294z" + fill="#FDDC7A"></path> + <path + d="M442.548706 196.924235h136.146823c21.263059 0 39.800471 14.456471 44.950589 35.087059l60.732235 242.913882H336.865882l60.732236-242.898823a46.336 46.336 0 0 1 44.950588-35.102118z" + fill="#F6C338"></path> + <path + d="M688.037647 192.903529c9.441882-30.177882 28.385882-29.409882 34.680471-47.585882 7.062588-20.449882 9.366588-45.718588 6.927058-75.821176 16.850824 17.935059 25.976471 37.014588 30.945883 62.283294 4.894118 24.937412-9.125647 44.182588-29.06353 74.480941-19.922824 30.313412-8.809412 67.614118 0 94.915765-16.850824-17.92-59.904-55.777882-43.474823-108.272942zM283.361882 154.247529c11.324235-37.707294 34.063059-36.773647 41.60753-59.482353 8.493176-25.554824 11.264-57.133176 8.31247-94.765176 20.239059 22.407529 31.201882 46.260706 37.165177 77.854118 5.872941 31.171765-10.947765 55.220706-34.876235 93.108706-23.943529 37.872941-10.601412 84.48 0 118.633411-20.239059-22.422588-71.936-69.722353-52.208942-135.348706z" + fill="#C6D2E1"></path> + <path + d="M510.629647 706.605176a92.672 92.672 0 0 1 92.672 92.672v115.832471H417.957647v-115.832471a92.672 92.672 0 0 1 92.672-92.672z" + fill="#F5BC20"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/game.svg b/assets/zone_icon/game.svg new file mode 100644 index 0000000..59a2188 --- /dev/null +++ b/assets/zone_icon/game.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M166.4 166.144m90.112 0l510.976 0q90.112 0 90.112 90.112l0 510.976q0 90.112-90.112 90.112l-510.976 0q-90.112 0-90.112-90.112l0-510.976q0-90.112 90.112-90.112Z" + fill="#58D598"></path> + <path d="M307.2 325.632h136.448v136.448H307.2zM580.096 325.632h136.448v136.448h-136.448z" fill="#17AD8A"></path> + <path + d="M443.648 462.336v75.776h-64.256v204.544h59.392v-68.096H585.216v68.096h59.136v-204.544h-64.256v-75.776h-136.448z" + fill="#17AD8A"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/guochuang.svg b/assets/zone_icon/guochuang.svg new file mode 100644 index 0000000..a10c3e9 --- /dev/null +++ b/assets/zone_icon/guochuang.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M873.472 321.792c-46.08-46.592-102.4-73.472-161.536-40.192a177.152 177.152 0 0 0-51.2-161.536s-83.456 107.52-15.104 219.648c-12.288 13.568-24.32 27.136-36.352 39.424-26.88 27.136 14.592 69.12 41.216 41.984l68.608-69.632c40.704-40.96 76.8-23.808 112.896 12.288 26.624 26.88 68.096-15.104 41.472-41.984z" + fill="#58D598"></path> + <path + d="M705.024 344.576a189.696 189.696 0 0 0-270.848 0 195.072 195.072 0 0 0-41.216 62.464 249.088 249.088 0 0 0-177.664 74.496 256 256 0 0 0 0 359.68 248.576 248.576 0 0 0 354.816 0 256 256 0 0 0 73.472-179.2 190.976 190.976 0 0 0 61.44-41.728 195.84 195.84 0 0 0 0-275.712z" + fill="#FF5C7A"></path> + <path + d="M514.304 808.704a187.136 187.136 0 0 1-267.264-5.12 193.536 193.536 0 0 1 5.12-271.104s-45.056 120.832 43.776 214.272a210.176 210.176 0 0 0 218.368 61.952" + fill="#F14767"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/information.svg b/assets/zone_icon/information.svg new file mode 100644 index 0000000..c33d838 --- /dev/null +++ b/assets/zone_icon/information.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M760.685714 768a21.942857 21.942857 0 0 0 19.836343 21.840457L782.628571 789.942857a21.942857 21.942857 0 0 0 21.840458-19.836343L804.571429 768V321.828571h29.257142a58.514286 58.514286 0 0 1 58.514286 58.514286v438.857143a58.514286 58.514286 0 0 1-58.514286 58.514286H190.171429a58.514286 58.514286 0 0 1-58.514286-58.514286V204.8a58.514286 58.514286 0 0 1 58.514286-58.514286h512a58.514286 58.514286 0 0 1 58.514285 58.514286v563.2z" + fill="#7DD3E0"></path> + <path + d="M219.428571 234.057143m29.257143 0l394.971429 0q29.257143 0 29.257143 29.257143l0 263.314285q0 29.257143-29.257143 29.257143l-394.971429 0q-29.257143 0-29.257143-29.257143l0-263.314285q0-29.257143 29.257143-29.257143Z" + fill="#3DA9D3"></path> + <path + d="M404.772571 300.514743l129.462858 80.925257a15.945143 15.945143 0 0 1 0 27.062857l-129.462858 80.925257a15.945143 15.945143 0 0 1-24.429714-13.531428V314.046171a15.945143 15.945143 0 0 1 24.429714-13.531428z" + fill="#FFD469"></path> + <path + d="M219.428571 614.4m29.257143 0l394.971429 0q29.257143 0 29.257143 29.257143l0 0q0 29.257143-29.257143 29.257143l-394.971429 0q-29.257143 0-29.257143-29.257143l0 0q0-29.257143 29.257143-29.257143Z" + fill="#3DA9D3"></path> + <path + d="M219.428571 731.428571m29.257143 0l219.428572 0q29.257143 0 29.257143 29.257143l0 0q0 29.257143-29.257143 29.257143l-219.428572 0q-29.257143 0-29.257143-29.257143l0 0q0-29.257143 29.257143-29.257143Z" + fill="#3DA9D3"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/kichiku.svg b/assets/zone_icon/kichiku.svg new file mode 100644 index 0000000..2d74f85 --- /dev/null +++ b/assets/zone_icon/kichiku.svg @@ -0,0 +1,16 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M918.784 510.208a187.904 187.904 0 0 0-88.832-159.488 156.416 156.416 0 0 0 1.792-22.016 150.784 150.784 0 0 0-210.944-138.496 151.04 151.04 0 0 0-216.32 0 150.784 150.784 0 0 0-210.944 138.496 156.416 156.416 0 0 0 1.792 22.016 187.648 187.648 0 0 0-13.824 309.504v1.536a215.296 215.296 0 0 0 332.8 179.2 215.04 215.04 0 0 0 332.8-179.2v-2.56a187.904 187.904 0 0 0 71.68-148.992z" + fill="#FC6B8A"></path> + <path + d="M680.704 479.744A150.528 150.528 0 0 1 572.672 435.2a150.016 150.016 0 0 1-120.064 0 150.528 150.528 0 0 1-108.032 45.824h-11.264v167.168a166.4 166.4 0 0 0 165.888 165.888h33.536a166.4 166.4 0 0 0 165.888-165.888v-169.728a137.216 137.216 0 0 1-17.92 1.28z" + fill="#FFFFFF"></path> + <path d="M510.464 651.264m-33.536 0a33.536 33.536 0 1 0 67.072 0 33.536 33.536 0 1 0-67.072 0Z" fill="#E2006C"> + </path> + <path + d="M635.904 554.496H614.4v-21.504a12.032 12.032 0 0 0-11.776-11.776h-4.864a12.032 12.032 0 0 0-11.776 11.776v21.504h-21.248a11.776 11.776 0 0 0-11.776 11.52v5.12a11.776 11.776 0 0 0 11.776 11.52h21.248v21.504a12.032 12.032 0 0 0 11.776 11.776h4.864a12.032 12.032 0 0 0 11.776-11.776v-21.504h21.248a11.776 11.776 0 0 0 11.776-11.52v-5.12a11.776 11.776 0 0 0-11.52-11.52zM455.936 554.496H435.2v-21.504a12.032 12.032 0 0 0-11.776-11.776h-4.864a12.032 12.032 0 0 0-11.776 11.776v21.504H384a11.776 11.776 0 0 0-11.776 11.52v5.12a11.776 11.776 0 0 0 11.776 11.52h21.248v21.504a12.032 12.032 0 0 0 11.776 11.776h4.864a12.032 12.032 0 0 0 13.312-11.776v-21.504h21.248a11.52 11.52 0 0 0 11.776-11.52v-5.12a11.52 11.52 0 0 0-12.288-11.52z" + fill="#FF5C7A"></path> + <path + d="M600.32 651.008a12.288 12.288 0 0 0-12.288 12.544c0 34.048-34.816 61.696-76.8 61.696s-76.8-27.648-76.8-61.696a12.544 12.544 0 1 0-25.6 0c0 47.616 45.824 86.528 102.4 86.528s102.4-38.912 102.4-86.528a12.544 12.544 0 0 0-13.312-12.544z" + fill="#EB53A8"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/knowledge.svg b/assets/zone_icon/knowledge.svg new file mode 100644 index 0000000..8ede0d7 --- /dev/null +++ b/assets/zone_icon/knowledge.svg @@ -0,0 +1,18 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M492.270933 147.729067A255.342933 255.342933 0 0 1 627.2 620.2624v51.2a37.546667 37.546667 0 0 1-25.6 34.133333h-221.866667a44.654933 44.654933 0 0 1-25.6-34.133333v-51.2a256.648533 256.648533 0 0 1 138.1376-472.533333z" + fill="#FFA200"></path> + <path + d="M550.4 534.929067v-76.8h51.2c46.609067 0 51.2-26.786133 51.2-42.666667v-128c0-23.1168-17.2032-42.666667-51.2-42.666667h-213.333333c-42.103467 0-59.733333 21.111467-59.733334 42.666667v76.8h102.4v-68.266667h119.466667v119.466667h-51.2c-60.501333-0.5632-76.8 24.405333-76.8 42.666667v76.8h128z m-62.6688 24.533333a59.733333 59.733333 0 1 1-59.733333 59.733333 59.733333 59.733333 0 0 1 59.733333-59.733333z" + fill="#FFF0D3"></path> + <path d="M354.133333 739.7376h273.066667v8.533333a128 128 0 0 1-128 128h-17.066667a128 128 0 0 1-128-128v-8.533333z" + fill="#5FB5EC"></path> + <path + d="M746.666667 210.6624h119.466666a17.066667 17.066667 0 0 1 0 34.133333h-119.466666a17.066667 17.066667 0 0 1 0-34.133333z m59.733333-59.733333a17.066667 17.066667 0 0 1 17.066667 17.066666v119.466667a17.066667 17.066667 0 0 1-34.133334 0v-119.466667a17.066667 17.066667 0 0 1 17.066667-17.066666z" + fill="#FFE074"></path> + <path + d="M157.866667 662.929067h119.466666a17.066667 17.066667 0 0 1 0 34.133333h-119.466666a17.066667 17.066667 0 0 1 0-34.133333z m59.733333-59.733334a17.066667 17.066667 0 0 1 17.066667 17.066667v119.466667a17.066667 17.066667 0 0 1-34.133334 0v-119.466667a17.066667 17.066667 0 0 1 17.066667-17.066667z" + fill="#FFE074"></path> + <path d="M200.533333 662.9376h34.133334v34.133333h-34.133334z" fill="#FFE074"></path> + <path d="M789.333333 210.670933h34.133334v34.133334h-34.133334z" fill="#FFE074"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/life.svg b/assets/zone_icon/life.svg new file mode 100644 index 0000000..ad03a79 --- /dev/null +++ b/assets/zone_icon/life.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M881.408 664.064V504.32a168.192 168.192 0 0 0-128-162.56l-7.936-1.792v144.896a12.288 12.288 0 0 1-14.592 11.776 170.752 170.752 0 0 0-30.464-2.816h-138.752v-27.648a37.632 37.632 0 0 1 11.776-27.648 175.872 175.872 0 0 0 57.856-135.68A179.2 179.2 0 0 0 460.8 132.352a175.872 175.872 0 0 0-180.992 176.128V409.6h32.256a225.536 225.536 0 0 0 15.872 19.2 36.608 36.608 0 0 1 9.472 25.6v42.496A193.792 193.792 0 0 0 179.2 712.96a197.12 197.12 0 0 0 197.12 166.656h325.12a148.48 148.48 0 0 0 45.568-6.144 217.088 217.088 0 0 0 64.256-31.744 176.896 176.896 0 0 0 18.176-15.616l4.608-4.352a156.16 156.16 0 0 0 47.36-111.872v-35.84c0.512-3.072 0.256-6.656 0-9.984z" + fill="#FFD778"></path> + <path + d="M468.736 238.592a40.192 40.192 0 1 0 40.192 40.192 40.192 40.192 0 0 0-40.192-40.192zM323.584 362.752H217.6a34.816 34.816 0 1 0 0 69.376h106.24a34.816 34.816 0 1 0 0-69.376z" + fill="#FB813A"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/movie.svg b/assets/zone_icon/movie.svg new file mode 100644 index 0000000..5f691a4 --- /dev/null +++ b/assets/zone_icon/movie.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M954.624 452.864H919.04v-168.96a37.376 37.376 0 0 0-25.6-36.608A36.608 36.608 0 0 0 846.848 281.6v170.24H199.936v-168.96a37.632 37.632 0 0 0-25.6-36.608A36.352 36.352 0 0 0 128 281.6v170.24H92.16a15.616 15.616 0 0 0-15.36 15.872v82.688a15.36 15.36 0 0 0 15.36 15.616h26.88v85.248a135.68 135.68 0 0 0 134.4 136.192h114.432a135.68 135.68 0 0 0 134.4-136.192v-20.992a7.936 7.936 0 0 1 7.68-7.936h25.6a7.68 7.68 0 0 1 7.68 7.936v20.992a135.936 135.936 0 0 0 134.4 136.192H793.6a135.68 135.68 0 0 0 134.4-136.192v-85.248h25.6a15.36 15.36 0 0 0 15.36-15.616v-81.664a15.616 15.616 0 0 0-15.36-15.872" + fill="#E5E6E6"></path> + <path + d="M361.216 727.552h-102.4A87.296 87.296 0 0 1 172.8 640v-79.872a61.184 61.184 0 0 1 60.416-61.44h153.6a61.184 61.184 0 0 1 60.416 61.44V640a87.296 87.296 0 0 1-86.528 87.552" + fill="#FF5C7A"></path> + <path + d="M685.568 727.552h102.4A87.296 87.296 0 0 0 873.984 640v-79.872a61.184 61.184 0 0 0-60.416-61.44h-153.6a61.184 61.184 0 0 0-60.416 61.44V640a87.296 87.296 0 0 0 86.528 87.552" + fill="#2CBAE5"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/music.svg b/assets/zone_icon/music.svg new file mode 100644 index 0000000..408c93c --- /dev/null +++ b/assets/zone_icon/music.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M881.92 460.8A335.36 335.36 0 0 0 547.584 125.696h-73.216A335.616 335.616 0 0 0 139.776 460.8v313.6a18.688 18.688 0 0 0 18.432 18.688h41.984c13.568 46.336 37.888 80.384 88.576 80.384h98.304a37.376 37.376 0 0 0 37.376-36.864l1.28-284.672a36.864 36.864 0 0 0-37.12-37.12h-99.84a111.616 111.616 0 0 0-51.2 12.8v-73.216a242.432 242.432 0 0 1 241.664-241.664h67.328a242.176 242.176 0 0 1 241.408 241.664v74.496a110.592 110.592 0 0 0-54.272-14.08h-99.84a36.864 36.864 0 0 0-37.12 37.12v284.672a37.376 37.376 0 0 0 37.376 36.864h98.304c51.2 0 75.008-34.048 88.576-80.384h41.984a18.688 18.688 0 0 0 18.432-18.688z" + fill="#45C7DD"></path> + <path + d="M646.141043 825.220963m0.045396-32.511969l0.273801-196.095809q0.045395-32.511968 32.557364-32.466573l1.023999 0.00143q32.511968 0.045395 32.466573 32.557364l-0.273802 196.095809q-0.045395 32.511968-32.557363 32.466573l-1.023999-0.00143q-32.511968-0.045395-32.466573-32.557364Z" + fill="#FF5C7A"></path> + <path + d="M307.222608 825.246563m0.045395-32.511969l0.273801-196.095809q0.045395-32.511968 32.557364-32.466573l1.023999 0.00143q32.511968 0.045395 32.466573 32.557364l-0.273801 196.095809q-0.045395 32.511968-32.557364 32.466573l-1.023999-0.00143q-32.511968-0.045395-32.466573-32.557364Z" + fill="#FF5C7A"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/sports.svg b/assets/zone_icon/sports.svg new file mode 100644 index 0000000..bd4c97e --- /dev/null +++ b/assets/zone_icon/sports.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M497.8944 517.8624l23.8848 29.2608a58.5728 58.5728 0 0 1-5.6064 80.0512L241.9456 880.7424a47.7184 47.7184 0 0 1-65.6128-0.768 49.8176 49.8176 0 0 1-4.3008-66.816l108.5696-136.3712 126.1056-158.3616a58.5728 58.5728 0 0 1 91.1872-0.5632z" + fill="#1BAD8B"></path> + <path + d="M698.9312 153.6a117.1456 117.1456 0 0 1 11.4176 233.728l60.416 45.9008c4.352 3.328 10.1632 3.9168 15.104 1.5872l73.6256-34.6368a46.2848 46.2848 0 0 1 59.1104 17.5872 44.3392 44.3392 0 0 1-11.9296 59.3152l-125.952 90.2656a58.5728 58.5728 0 0 1-65.9456 1.5616l-66.048-42.752-44.1344 47.7696 70.6048 83.328c1.664 1.9456 3.2 4.0192 4.608 6.1952l1.9456 3.3024a58.5728 58.5728 0 0 1-22.8608 79.616l-192.1024 106.3424a49.3824 49.3824 0 0 1-65.7408-16.9984 52.096 52.096 0 0 1 11.904-68.5824l105.5488-83.1744-106.2912-68.3008-1.536-1.024a59.7504 59.7504 0 0 1-0.896-0.6144l-13.824-7.168a58.5728 58.5728 0 0 1-23.296-82.2784l71.68-118.8864-30.72-13.824a14.6432 14.6432 0 0 0-14.336 1.3312l-80.4864 55.6032a48.8704 48.8704 0 0 1-62.6688-5.9648 39.3472 39.3472 0 0 1 1.792-56.8576l128.2816-115.1488a58.5728 58.5728 0 0 1 57.4464-12.032l143.5392 47.2576A117.1456 117.1456 0 0 1 698.9312 153.6z" + fill="#57D59A"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/tech.svg b/assets/zone_icon/tech.svg new file mode 100644 index 0000000..4c3795b --- /dev/null +++ b/assets/zone_icon/tech.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path d="M510.208 683.264h-114.176l-50.688 209.408H674.816l-50.688-209.408h-113.92z" fill="#FFD778"></path> + <path + d="M535.552 150.528v-28.16a25.6 25.6 0 1 0-51.2 0v28.16a271.872 271.872 0 0 0-244.992 269.568v97.28a25.6 25.6 0 0 0 26.88 26.88h487.936a25.6 25.6 0 0 0 25.6-26.88v-97.28a271.616 271.616 0 0 0-244.224-269.568z" + fill="#48CFE5"></path> + <path + d="M125.696 464.64m103.168 0l562.432 0q103.168 0 103.168 103.168l0 15.36q0 103.168-103.168 103.168l-562.432 0q-103.168 0-103.168-103.168l0-15.36q0-103.168 103.168-103.168Z" + fill="#2CBAE5"></path> + <path + d="M742.4 537.6a37.632 37.632 0 1 0 37.632 37.632A37.376 37.376 0 0 0 742.4 537.6zM276.736 537.6a37.632 37.632 0 1 0 37.632 37.632A37.632 37.632 0 0 0 276.736 537.6z" + fill="#FFD778"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_icon/teleplay.svg b/assets/zone_icon/teleplay.svg new file mode 100644 index 0000000..a6a39af --- /dev/null +++ b/assets/zone_icon/teleplay.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"> + <path + d="M271.616 247.808a212.224 212.224 0 0 0-49.664 172.8l25.6 126.72c56.832 21.76 60.16 87.552 67.328 149.248a1167.872 1167.872 0 0 1 190.208-14.08 1247.488 1247.488 0 0 1 196.096 14.08c7.68-61.696 4.352-126.72 59.904-148.736l25.6-128a211.712 211.712 0 0 0-49.92-172.288 218.624 218.624 0 0 0-165.12-74.752h-134.912a218.624 218.624 0 0 0-165.12 74.752" + fill="#FFB161"></path> + <path + d="M505.088 412.672l-34.816-34.56a19.456 19.456 0 0 0-27.392 27.392l25.6 25.6-25.6 25.6a19.456 19.456 0 0 0 27.392 27.392l34.816-34.56 35.072 34.56a18.688 18.688 0 0 0 13.568 5.632 19.456 19.456 0 0 0 13.824-33.024l-25.6-25.6 25.6-25.6a19.456 19.456 0 0 0-13.824-33.024 18.688 18.688 0 0 0-13.568 5.632z" + fill="#FFE494"></path> + <path + d="M822.016 482.56a130.816 130.816 0 0 0-133.888 128v68.864l-368.128 1.536v-69.376a130.304 130.304 0 0 0-120.32-128h-13.568A81.92 81.92 0 0 0 102.4 563.2a76.8 76.8 0 0 0 0 13.312 79.104 79.104 0 0 0 38.912 54.784l8.96 4.352h2.304a25.6 25.6 0 0 1 15.36 22.016v63.744a112.384 112.384 0 0 0 80.896 105.472 51.2 51.2 0 0 0 98.816 5.888h313.088a51.2 51.2 0 0 0 98.816-5.888 112.384 112.384 0 0 0 79.104-105.472V650.752a25.6 25.6 0 0 1 8.192-11.52h1.536l4.608-2.816a80.384 80.384 0 0 0 51.2-61.44v-12.032a81.92 81.92 0 0 0-83.712-79.616" + fill="#FB952C"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/ai.svg b/assets/zone_v2_icon/ai.svg new file mode 100644 index 0000000..797fd6f --- /dev/null +++ b/assets/zone_v2_icon/ai.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M6.11152 13.3818L12.7385 13.3818L14.074 16.2091L4.77077 16.2091L6.11152 13.3818z" + fill="#00B9E7ff"></path> + <path + d="M7.51228 5.77233C7.6183 5.49296 7.88599 5.30823 8.18479 5.30823L10.302 5.30823C10.5325 5.30823 10.6918 5.53896 10.61 5.75451L5.38035 19.5351C5.27433 19.8144 5.00664 19.9992 4.70783 19.9992L3.15565 19.9992C2.65222 19.9992 2.30452 19.4953 2.48314 19.0247L7.51228 5.77233z" + fill="#00B9E7ff"></path> + <path + d="M17.7595 5.24761C17.3688 5.24499 17.0508 5.5496 17.0515 5.92584L17.0642 19.3231C17.0648 19.6966 17.3794 19.9991 17.7673 19.9991L19.4532 19.9991C19.8415 19.9991 20.1563 19.6959 20.1563 19.322L20.1563 5.93605C20.1563 5.56393 19.8444 5.26155 19.458 5.25897L17.7595 5.24761z" + fill="#59E0F9ff"></path> + <path + d="M11.4125 5.77007C11.3065 5.4907 11.0388 5.30597 10.74 5.30597L8.14548 5.30597L13.5445 19.5328C13.6505 19.8122 13.9182 19.9969 14.217 19.9969L15.7691 19.9969C16.2726 19.9969 16.6203 19.4931 16.4417 19.0224L11.4125 5.77007z" + fill="#59E0F9ff"></path> + <path + d="M21.8385 2.26096C21.9179 2.10202 22.1446 2.10202 22.224 2.26096L22.3536 2.52039C22.6034 3.02047 22.9711 3.45233 23.4249 3.77874L23.663 3.95005C23.7826 4.03605 23.7826 4.21395 23.663 4.29994L23.4249 4.47126C22.9711 4.79767 22.6034 5.22952 22.3536 5.72961L22.224 5.98904C22.1446 6.14798 21.9179 6.14798 21.8385 5.98904L21.7089 5.72961C21.4591 5.22952 21.0914 4.79767 20.6376 4.47126L20.3995 4.29994C20.2799 4.21395 20.2799 4.03605 20.3995 3.95005L20.6376 3.77874C21.0914 3.45233 21.4591 3.02047 21.7089 2.52039L21.8385 2.26096z" + fill="#FDDE80ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/animal.svg b/assets/zone_v2_icon/animal.svg new file mode 100644 index 0000000..74cb01e --- /dev/null +++ b/assets/zone_v2_icon/animal.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M14.36582 3.67143C15.80352 3.65373 17.00323 4.92678 17.39434 6.70047C17.46086 7.00223 17.7719 7.19548 18.07651 7.14389C18.6671 7.04388 19.24147 7.11564 19.73645 7.38712C21.21533 8.19796 21.42538 10.48176 20.20589 12.48835C19.88563 13.02058 19.48099 13.49606 19.00848 13.89667C18.84211 14.0377 18.77798 14.26694 18.84067 14.47584C18.95462 14.85523 19.01606 15.25757 19.01606 15.67392L19.01606 16.1641C19.01606 17.26858 18.57734 18.32774 17.79638 19.1087C17.01542 19.88966 15.95626 20.32838 14.85178 20.32838L9.29912 20.32838C8.19468 20.32838 7.1355 19.88966 6.35456 19.1087C5.57361 18.32774 5.13488 17.26858 5.13488 16.1641L5.13488 15.67392C5.13488 15.25699 5.19634 14.85485 5.31033 14.47517C5.37301 14.26637 5.3088 14.03712 5.14245 13.89619C4.66991 13.49578 4.26526 13.02038 3.94509 12.48835C2.72556 10.48176 2.93556 8.19796 4.41446 7.38712C4.90967 7.11554 5.48421 7.04383 6.07527 7.14374C6.37981 7.19522 6.69059 7.0019 6.75702 6.70026C7.14757 4.92688 8.34733 3.65373 9.78518 3.67143C10.47494 3.68023 11.11843 3.98481 11.64941 4.49674C11.88154 4.72055 12.26957 4.72063 12.5017 4.49685C13.03267 3.98511 13.67597 3.68023 14.36582 3.67143z" + fill="#FF5C7Aff"></path> + <path + d="M11.7289 7.80475C11.84861 8.98123 11.20435 9.99031 10.28861 10.05924C9.3728 10.12819 8.53423 9.22949 8.41399 8.05301C8.29375 6.87653 8.93848 5.86693 9.85373 5.79852C10.76957 5.72959 11.60861 6.62827 11.7289 7.80475zM15.7225 8.05301C15.60221 9.23001 14.76317 10.12762 13.8479 10.05924C12.93264 9.99083 12.28733 8.98071 12.40762 7.80423C12.52781 6.62775 13.36694 5.72959 14.28269 5.79852C15.19795 5.86693 15.84269 6.87653 15.7225 8.05301zM18.16906 11.42227C17.58182 12.4055 16.52822 12.8807 15.8161 12.48317C15.10349 12.08573 15.0024 10.96675 15.59011 9.98358C16.17734 9.00041 17.23104 8.52516 17.94365 8.92267C18.65578 9.32019 18.75677 10.43914 18.16906 11.42227zM8.55615 9.98358C9.14388 10.96675 9.04281 12.08573 8.33018 12.48317C7.61808 12.8807 6.56443 12.4055 5.97671 11.42227C5.38951 10.43914 5.49057 9.32019 6.20319 8.92267C6.9153 8.52516 7.96895 9.00041 8.55615 9.98358z" + fill="#FFCFE6ff"></path> + <path + d="M12.17328 11.43072C12.72787 11.43072 13.26845 11.60534 13.71821 11.92982C13.89734 12.05904 14.06899 12.21734 14.21914 12.39619C14.67053 12.9337 15.25728 13.46515 15.83606 13.8623C16.0105 13.98192 16.16976 14.12496 16.30896 14.28874C16.70842 14.75875 16.91242 15.36394 16.8791 15.97978C16.84579 16.59562 16.57757 17.17526 16.12973 17.5993C15.68189 18.02342 15.08851 18.25968 14.47181 18.25949L9.67882 18.25949C9.06126 18.26083 8.46676 18.02506 8.018 17.60074C7.56923 17.17651 7.30045 16.59619 7.26714 15.97949C7.23383 15.36288 7.43852 14.75693 7.83897 14.28682C7.97802 14.12352 8.137 13.98096 8.31101 13.86173C8.89154 13.46381 9.5054 12.94397 9.94973 12.39821C10.10381 12.20899 10.27306 12.04474 10.43242 11.92982C10.88218 11.60534 11.42275 11.43072 11.97734 11.43072L12.17328 11.43072z" + fill="#FFCFE6ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/car.svg b/assets/zone_v2_icon/car.svg new file mode 100644 index 0000000..9dd5705 --- /dev/null +++ b/assets/zone_v2_icon/car.svg @@ -0,0 +1,23 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M21.24202 9.24032C21.31075 9.46754 21.28675 9.71272 21.1753 9.92231C21.06374 10.13194 20.87386 10.2888 20.64701 10.35888L20.0521 10.53139C19.93997 10.56576 19.82218 10.57776 19.70544 10.56653C19.5887 10.55539 19.47533 10.52141 19.37174 10.4664C19.26816 10.41149 19.17638 10.33661 19.1017 10.24618C19.02701 10.15574 18.97094 10.05152 18.93658 9.9394C18.90221 9.82728 18.89021 9.70949 18.90134 9.59275C18.91248 9.47601 18.94656 9.36261 19.00147 9.25902C19.05648 9.15543 19.13126 9.06369 19.2217 8.98902C19.31213 8.91435 19.41638 8.85823 19.52851 8.82385L20.12352 8.65131C20.23555 8.61552 20.35363 8.6024 20.47085 8.61272C20.58806 8.62304 20.70211 8.65659 20.80618 8.71141C20.91034 8.76624 21.0025 8.84124 21.07728 8.93204C21.15206 9.02286 21.20813 9.12765 21.24202 9.24032zM5.17807 9.93642C5.10935 10.16285 4.95356 10.35264 4.74493 10.46419C4.53631 10.57574 4.29192 10.59994 4.06548 10.53139L3.47052 10.35888C3.2437 10.2888 3.0538 10.13194 2.94231 9.92231C2.83084 9.71272 2.80684 9.46754 2.87556 9.24032C2.9089 9.12779 2.96424 9.02298 3.03839 8.932C3.11254 8.84102 3.20402 8.76568 3.30752 8.71033C3.41101 8.65499 3.52448 8.62074 3.64131 8.60959C3.75815 8.59843 3.87604 8.6106 3.98814 8.64536L4.5831 8.8179C4.69586 8.85188 4.80079 8.90785 4.89181 8.98257C4.98284 9.05729 5.05818 9.1493 5.11349 9.25328C5.16879 9.35725 5.20298 9.47115 5.21406 9.58839C5.22515 9.70564 5.21291 9.82393 5.17807 9.93642z" + fill="#00B9E7ff"></path> + <path + d="M6.97476 4.78406C8.65316 4.44467 10.36118 4.27327 12.07354 4.27239C13.82131 4.27461 15.56477 4.44596 17.27952 4.78406C17.47834 4.82236 17.6641 4.91076 17.81923 5.04089C17.97437 5.17104 18.0937 5.33861 18.16598 5.52776L20.34038 11.24707C20.38176 11.35603 20.40307 11.47171 20.40307 11.58826L20.40307 16.76659C20.40307 16.92442 20.34038 17.07571 20.22874 17.18726C20.11718 17.29882 19.96589 17.3615 19.80806 17.3615L4.33908 17.3615C4.18129 17.3615 4.02996 17.29882 3.91837 17.18726C3.8068 17.07571 3.74412 16.92442 3.74412 16.76659L3.74412 11.59834C3.74412 11.47526 3.76781 11.35325 3.8139 11.23901L6.12396 5.51586C6.19464 5.33331 6.30926 5.17102 6.45767 5.04336C6.60609 4.91571 6.7837 4.82665 6.97476 4.78406z" + fill="#00B9E7ff"></path> + <path + d="M5.529 12.00691L7.90884 12.00691C8.30549 12.00691 8.5038 12.20515 8.5038 12.60182L8.5038 13.19683C8.5038 13.59341 8.30549 13.79174 7.90884 13.79174L5.529 13.79174C5.13236 13.79174 4.93404 13.59341 4.93404 13.19683L4.93404 12.60182C4.93404 12.20515 5.13236 12.00691 5.529 12.00691z" + fill="#FDDE80ff"></path> + <path + d="M16.2383 12.00691L18.61814 12.00691C19.01482 12.00691 19.21315 12.20515 19.21315 12.60182L19.21315 13.19683C19.21315 13.59341 19.01482 13.79174 18.61814 13.79174L16.2383 13.79174C15.84173 13.79174 15.64339 13.59341 15.64339 13.19683L15.64339 12.60182C15.64339 12.20515 15.84173 12.00691 16.2383 12.00691z" + fill="#FDDE80ff"></path> + <path + d="M7.79001 6.40233C9.11029 6.17235 10.44797 6.05689 11.78813 6.05724C13.31962 6.07062 14.84832 6.1899 16.36339 6.41422C16.47677 6.43024 16.58304 6.47862 16.66954 6.55355C16.75613 6.62846 16.8192 6.72677 16.85126 6.83665L17.77344 9.96614C17.79533 10.04115 17.80224 10.11974 17.7937 10.19741C17.78525 10.27507 17.76154 10.35034 17.724 10.41878C17.68637 10.48733 17.63568 10.54771 17.57482 10.59667C17.51386 10.64554 17.44387 10.68202 17.3689 10.7039C17.29622 10.7185 17.22144 10.7185 17.14877 10.7039C15.20918 10.51747 13.42426 10.42426 11.79408 10.42426C10.20394 10.4255 8.61508 10.51286 7.0344 10.68605C6.95666 10.6943 6.87804 10.6871 6.80307 10.66502C6.72808 10.64285 6.6582 10.60608 6.59743 10.55693C6.53665 10.50778 6.48615 10.4471 6.44884 10.37837C6.41152 10.30963 6.38811 10.23427 6.37995 10.15651C6.36471 10.07993 6.36471 10.00109 6.37995 9.9245L7.31404 6.81879C7.3462 6.71165 7.40791 6.61574 7.4921 6.54207C7.57629 6.46841 7.67954 6.41997 7.79001 6.40233z" + fill="#59E1F9ff"></path> + <path + d="M3.74414 15.65299C3.74414 14.85763 4.38885 14.21299 5.18414 14.21299L5.28938 14.21299C6.08466 14.21299 6.72938 14.85763 6.72938 15.65299L6.72938 17.70653C6.72938 18.50189 6.08466 19.14653 5.28938 19.14653L5.18414 19.14653C4.38885 19.14653 3.74414 18.50189 3.74414 17.70653L3.74414 15.65299z" + fill="#00B9E7ff"></path> + <path + d="M17.42822 15.65299C17.42822 14.85763 18.07296 14.21299 18.86822 14.21299L18.97344 14.21299C19.7688 14.21299 20.41344 14.85763 20.41344 15.65299L20.41344 17.70653C20.41344 18.50189 19.7688 19.14653 18.97344 19.14653L18.86822 19.14653C18.07296 19.14653 17.42822 18.50189 17.42822 17.70653L17.42822 15.65299z" + fill="#00B9E7ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/cinephile.svg b/assets/zone_v2_icon/cinephile.svg new file mode 100644 index 0000000..de746dc --- /dev/null +++ b/assets/zone_v2_icon/cinephile.svg @@ -0,0 +1,32 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M5.16093 18.89558L18.83645 18.89558C19.63171 18.89558 20.27645 18.25085 20.27645 17.45558L20.27645 6.34031C20.27645 5.54503 19.63171 4.90031 18.83645 4.90031L5.16094 4.90031C4.36565 4.90031 3.72094 5.54503 3.72094 6.34031L3.72094 17.45558C3.72094 18.25085 4.36565 18.89558 5.16093 18.89558z" + fill="#9796EDff"></path> + <path + d="M5.49187 7.15125C5.49187 7.54889 5.81423 7.87125 6.21187 7.87125L7.53881 7.87125C7.93645 7.87125 8.25881 7.54889 8.25881 7.15125C8.25881 6.75361 7.93645 6.43125 7.53881 6.43125L6.21187 6.43125C5.81423 6.43125 5.49187 6.75361 5.49187 7.15125z" + fill="#6D69E4ff"></path> + <path + d="M10.6897 7.15125C10.6897 7.54889 11.01206 7.87125 11.4097 7.87125L12.73661 7.87125C13.13424 7.87125 13.45661 7.54889 13.45661 7.15125C13.45661 6.75361 13.13424 6.43125 12.73661 6.43125L11.4097 6.43125C11.01206 6.43125 10.6897 6.75361 10.6897 7.15125z" + fill="#6D69E4ff"></path> + <path + d="M15.88733 7.15125C15.88733 7.54889 16.2097 7.87125 16.60733 7.87125L17.93424 7.87125C18.33187 7.87125 18.65424 7.54889 18.65424 7.15125C18.65424 6.75361 18.33187 6.43125 17.93424 6.43125L16.60733 6.43125C16.2097 6.43125 15.88733 6.75361 15.88733 7.15125z" + fill="#6D69E4ff"></path> + <path + d="M5.49187 17.14742C5.49187 17.54515 5.81423 17.86742 6.21187 17.86742L7.53881 17.86742C7.93645 17.86742 8.25881 17.54515 8.25881 17.14742C8.25881 16.74979 7.93645 16.42742 7.53881 16.42742L6.21187 16.42742C5.81423 16.42742 5.49187 16.74979 5.49187 17.14742z" + fill="#6D69E4ff"></path> + <path + d="M10.6897 17.14742C10.6897 17.54515 11.01206 17.86742 11.4097 17.86742L12.73661 17.86742C13.13424 17.86742 13.45661 17.54515 13.45661 17.14742C13.45661 16.74979 13.13424 16.42742 12.73661 16.42742L11.4097 16.42742C11.01206 16.42742 10.6897 16.74979 10.6897 17.14742z" + fill="#6D69E4ff"></path> + <path + d="M15.88733 17.14742C15.88733 17.54515 16.2097 17.86742 16.60733 17.86742L17.93424 17.86742C18.33187 17.86742 18.65424 17.54515 18.65424 17.14742C18.65424 16.74979 18.33187 16.42742 17.93424 16.42742L16.60733 16.42742C16.2097 16.42742 15.88733 16.74979 15.88733 17.14742z" + fill="#6D69E4ff"></path> + <path + d="M3.72094 14.9591L20.27645 14.9591L20.27645 8.83594L3.72094 8.83594L3.72094 14.9591z" + fill="#6D69E4ff"></path> + <path + d="M9.8783 12.948C9.91536 12.84787 9.93389 12.79776 9.95213 12.77434C10.02883 12.67565 10.17802 12.67565 10.25482 12.77434C10.27296 12.79776 10.29149 12.84787 10.32854 12.948C10.53485 13.50557 10.97443 13.94515 11.532 14.15146C11.63222 14.18851 11.68224 14.20704 11.70566 14.22528C11.80435 14.30198 11.80435 14.45117 11.70566 14.52787C11.68224 14.54611 11.63222 14.56464 11.532 14.6017C10.97443 14.808 10.53485 15.24758 10.32854 15.80515C10.29149 15.90528 10.27296 15.95539 10.25482 15.97882C10.17802 16.0775 10.02883 16.0775 9.95213 15.97882C9.93389 15.95539 9.91536 15.90528 9.8783 15.80515C9.672 15.24758 9.23242 14.808 8.67487 14.6017C8.5747 14.56464 8.52462 14.54611 8.50123 14.52787C8.40254 14.45117 8.40254 14.30198 8.50123 14.22528C8.52462 14.20704 8.5747 14.18851 8.67487 14.15146C9.23242 13.94515 9.672 13.50557 9.8783 12.948z" + fill="#FDDE80ff"></path> + <path + d="M13.42128 6.99748C13.50605 6.76846 13.54838 6.65394 13.58995 6.60048C13.76544 6.37484 14.10653 6.37484 14.28202 6.60048C14.32358 6.65394 14.36592 6.76846 14.45069 6.99748C14.92234 8.27225 15.92746 9.27733 17.20224 9.74909C17.4313 9.83376 17.54573 9.87619 17.5992 9.91776C17.8249 10.09325 17.8249 10.43424 17.5992 10.60973C17.54573 10.6513 17.4313 10.69373 17.20224 10.7785C15.92746 11.25014 14.92234 12.25526 14.45069 13.53005C14.36592 13.75901 14.32358 13.87354 14.28202 13.92701C14.10653 14.1527 13.76544 14.1527 13.58995 13.92701C13.54838 13.87354 13.50605 13.75901 13.42128 13.53005C12.94954 12.25526 11.94451 11.25014 10.66973 10.7785C10.44067 10.69373 10.32614 10.6513 10.27267 10.60973C10.04707 10.43424 10.04707 10.09325 10.27267 9.91776C10.32614 9.87619 10.44067 9.83376 10.66973 9.74909C11.94451 9.27733 12.94954 8.27225 13.42128 6.99748z" + fill="#FDDE80ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/dance.svg b/assets/zone_v2_icon/dance.svg new file mode 100644 index 0000000..1082252 --- /dev/null +++ b/assets/zone_v2_icon/dance.svg @@ -0,0 +1,23 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M22.45853 11.58826C22.62758 11.94816 22.47293 12.37699 22.11302 12.54614L11.7097 17.43446C11.34979 17.60362 10.92096 17.44896 10.7519 17.08906C10.58275 16.72915 10.73741 16.30032 11.09731 16.13117L21.50064 11.24285C21.86054 11.0737 22.28938 11.22845 22.45853 11.58826z" + fill="#FFCFE6ff"></path> + <path + d="M17.59709 7.57625C17.94307 7.77225 18.06461 8.21161 17.86867 8.55759L12.62534 17.81386C12.42941 18.15984 11.99002 18.28138 11.64403 18.08544C11.29805 17.88941 11.17642 17.45002 11.37245 17.10403L16.61568 7.84786C16.81171 7.50186 17.2511 7.38026 17.59709 7.57625z" + fill="#FFCFE6ff"></path> + <path + d="M12.16022 6.47833C12.55786 6.47833 12.88022 6.80069 12.88022 7.19833L12.88022 17.40806C12.88022 17.8057 12.55786 18.12806 12.16022 18.12806C11.76259 18.12806 11.44022 17.8057 11.44022 17.40806L11.44022 7.19833C11.44022 6.80069 11.76259 6.47833 12.16022 6.47833z" + fill="#FFCFE6ff"></path> + <path + d="M6.70345 8.53544C7.03465 8.31539 7.48154 8.40548 7.7016 8.73668L13.0248 16.74845C13.24493 17.07965 13.15478 17.52653 12.82358 17.74656C12.49238 17.96669 12.0455 17.87654 11.82547 17.54534L6.5022 9.53359C6.28214 9.20239 6.37225 8.7555 6.70345 8.53544z" + fill="#FFCFE6ff"></path> + <path + d="M9.66182 17.5007C9.57036 17.28797 9.68467 17.0519 9.89453 16.95398L12.09898 15.92611L14.30141 16.95312C14.51126 17.05094 14.6256 17.28691 14.5343 17.49955C14.1288 18.44381 13.1905 19.10515 12.09782 19.10515C11.00554 19.10515 10.06752 18.44429 9.66182 17.5007z" + fill="#FFCFE6ff"></path> + <path + d="M7.16267 14.97974C7.7695 12.8303 9.75514 11.23526 12.09878 11.23526C14.44253 11.23526 16.4183 12.81062 17.02512 14.96026L22.13731 12.53549C22.50115 12.36288 22.67424 11.93654 22.5119 11.568C22.49309 11.52528 22.47504 11.48554 22.45862 11.45078C20.62118 7.57511 16.67299 4.89487 12.09878 4.89487C7.45255 4.89487 3.4522 7.66017 1.65375 11.63472L1.65375 11.63472C1.49874 11.97734 1.64364 12.38957 1.98407 12.54922C3.48774 13.25472 7.16267 14.97974 7.16267 14.97974z" + fill="#FF5C7Aff"></path> + <path + d="M1.65842 11.60611C1.82741 11.24611 2.2562 11.09126 2.61615 11.26032L12.85507 16.06723C13.21507 16.23619 13.36982 16.66502 13.20086 17.02493C13.0319 17.38493 12.60307 17.53968 12.24317 17.37072L2.00419 12.56381C1.64424 12.39485 1.48943 11.96602 1.65842 11.60611z" + fill="#FFCFE6ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/douga.svg b/assets/zone_v2_icon/douga.svg new file mode 100644 index 0000000..00a4f8c --- /dev/null +++ b/assets/zone_v2_icon/douga.svg @@ -0,0 +1,26 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M5.67687 4.05598L5.67687 4.05598C4.8817 4.05598 4.23687 4.70064 4.23687 5.49582L4.23687 11.94893L8.11451 15.3912L12.12979 11.94893L12.12979 4.05598L5.67687 4.05598z" + fill="#6D69E4ff"></path> + <path + d="M15.57206 15.82656L12.12979 19.72838L5.67687 19.72838C4.88158 19.72838 4.23687 19.08365 4.23687 18.28838L4.23687 11.94893L6.74114 11.94893C6.63916 12.15446 6.58075 12.38554 6.58075 12.63053C6.58075 13.47792 7.26776 14.16461 8.11482 14.16461C8.96189 14.16461 9.64886 13.47792 9.64886 12.63053C9.64886 12.38554 9.59049 12.15446 9.48819 11.94893L12.12979 11.94893L15.57206 15.82656z" + fill="#9796EDff"></path> + <path + d="M16.00752 8.16033L12.12989 11.63318L12.12989 14.24419C12.33542 14.14195 12.56659 14.08349 12.81158 14.08349C13.65898 14.08349 14.34566 14.77046 14.34566 15.61757C14.34566 16.46467 13.65898 17.15165 12.81158 17.15165C12.56659 17.15165 12.33542 17.09357 12.12989 16.99094L12.12989 19.72838L18.46934 19.72838C19.26461 19.72838 19.90934 19.08365 19.90934 18.28838L19.90934 11.63318L16.00752 8.16033z" + fill="#6D69E4ff"></path> + <path + d="M18.46934 4.05598C19.26461 4.05598 19.90934 4.70069 19.90934 5.49598L19.90934 11.94893L17.38723 11.94893C17.48947 11.74339 17.54755 11.51222 17.54755 11.26694C17.54755 10.41984 16.86086 9.73286 16.01357 9.73286C15.16646 9.73286 14.47949 10.41984 14.47949 11.26694C14.47949 11.51222 14.53786 11.74339 14.64019 11.94893L12.12989 11.94893L12.12989 9.3073C11.92435 9.40959 11.69328 9.46768 11.44829 9.46768C10.6009 9.46768 9.91392 8.781 9.91392 7.93361C9.91392 7.08655 10.6009 6.39986 11.44829 6.39986C11.69328 6.39986 11.92435 6.45795 12.12989 6.56025L12.12989 4.05598L18.46934 4.05598z" + fill="#9796EDff"></path> + <path + d="M12.12979 9.04368L10.4809 8.09169C9.47782 7.51265 8.65694 7.98655 8.65694 9.14492L8.65694 14.57338C8.65694 14.69107 8.66543 14.80176 8.68171 14.90496L12.12979 11.94893L12.12979 9.04368z" + fill="#FDDE80ff"></path> + <path + d="M13.72944 13.75075L10.4809 15.6263C9.47782 16.20557 8.65694 15.73171 8.65694 14.57338L8.65694 14.06611C9.23658 13.84704 9.64886 13.28707 9.64886 12.63053C9.64886 12.38554 9.59049 12.15446 9.48819 11.94893L12.12979 11.94893L13.72944 13.75075z" + fill="#FDDE80ff"></path> + <path + d="M13.88794 10.05869L15.1823 10.80595C16.18531 11.38522 16.18531 12.33302 15.1823 12.9121L13.10477 14.11152C13.00982 14.09309 12.91181 14.08349 12.81158 14.08349C12.56659 14.08349 12.33542 14.14195 12.12989 14.24419L12.12989 11.63318L13.88794 10.05869z" + fill="#FDDE80ff"></path> + <path + d="M8.65694 9.14491C8.65694 7.98655 9.47781 7.51266 10.4808 8.09169L15.18221 10.80586C16.18522 11.38522 16.18522 12.33302 15.18221 12.9121L10.4808 15.6263C9.47781 16.20557 8.65694 15.73171 8.65694 14.57338L8.65694 9.14491z" + fill="#FDDE80ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/emotion.svg b/assets/zone_v2_icon/emotion.svg new file mode 100644 index 0000000..8ed2de6 --- /dev/null +++ b/assets/zone_v2_icon/emotion.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M11.64326 6.75353C8.80572 2.45969 3.05423 4.99012 3.47601 9.85922C3.84148 14.0784 8.01705 17.41958 10.97002 19.14355C11.38675 19.38691 11.89891 19.38691 12.31574 19.14355C15.26842 17.41958 19.44403 14.0783 19.8095 9.85922C20.23123 4.99012 14.48035 2.45969 11.64326 6.75353z" + fill="#FF5C7Aff"></path> + <path + d="M16.95014 12.98275C16.39747 10.17744 12.90787 10.2649 12.09763 12.85632C11.43677 14.97024 12.67536 17.39645 13.7856 18.93235C14.06842 19.32355 14.54659 19.51978 15.02266 19.44C16.89158 19.12675 19.47754 18.27005 20.49216 16.30128C21.73584 13.88774 19.31395 11.37437 16.95014 12.98275z" + fill="#FFCFE6ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/entertainment.svg b/assets/zone_v2_icon/entertainment.svg new file mode 100644 index 0000000..b69d02f --- /dev/null +++ b/assets/zone_v2_icon/entertainment.svg @@ -0,0 +1,20 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M5.92972 20.481C5.34469 21.0726 4.39035 21.075 3.80205 20.4867L3.42324 20.1078C2.83711 19.5217 2.83752 18.5713 3.42416 17.9856L12.0134 9.41117C12.372 9.05293 12.9589 9.05293 13.3175 9.41117L14.4768 10.5692C14.8355 10.9275 14.8355 11.5132 14.4768 11.8714C12.0808 14.2648 7.88596 18.5029 5.92972 20.481z" + fill="#FF5C7Aff"></path> + <path + d="M8.72852 12.693L12.0139 9.41126C12.3725 9.05302 12.9593 9.05302 13.318 9.41126L14.4773 10.5693C14.836 10.9276 14.836 11.5137 14.4773 11.872L11.1758 15.1698L8.72852 12.693z" + fill="#FC6376ff"></path> + <path + d="M16.2118 14.531C16.5704 14.8893 16.971 14.782 17.1024 14.2925L19.5843 5.04082C19.7152 4.55181 19.422 4.25849 18.932 4.38973L9.67009 6.86887C9.18053 6.99964 9.07312 7.40025 9.43176 7.75849L16.2118 14.531z" + fill="#FDDE80ff"></path> + <path + d="M20.7561 9.99241C21.1147 10.3507 21.0073 10.7508 20.5173 10.882L11.2554 13.3612C10.7658 13.4919 10.4722 13.1991 10.6036 12.7096L13.0855 3.45795C13.2164 2.96893 13.6174 2.86165 13.9761 3.21989L20.7561 9.99241z" + fill="#FDDE80ff"></path> + <path + d="M6.6992 14.7177L9.17585 17.167L8.47269 17.878L5.99603 15.4287L6.6992 14.7177z" + fill="#FFCFE6ff"></path> + <path + d="M8.67909 12.7448L11.1456 15.2003L10.44 15.909L7.97356 13.4535L8.67909 12.7448z" + fill="#FFCFE6ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/fashion.svg b/assets/zone_v2_icon/fashion.svg new file mode 100644 index 0000000..5572bef --- /dev/null +++ b/assets/zone_v2_icon/fashion.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M16.0695 2.7305C12.7258 3.85612 10.9074 4.09695 8.30573 2.7305L12.1298 8.01044L16.0695 2.7305z" + fill="#FFCFE6ff"></path> + <path + d="M8.37409 10.243C6.22673 12.7549 5.26956 15.1018 4.17298 18.4108C4.09425 18.6483 4.10943 18.9135 4.27234 19.1035C6.38097 21.5625 16.2982 21.696 19.208 19.118C19.4281 18.923 19.4887 18.6141 19.4071 18.3315C18.4274 14.9392 16.8594 12.462 14.8639 10.243L8.37409 10.243z" + fill="#FF5C7Aff"></path> + <path + d="M6.71505 2.5833C7.21559 2.4809 7.56291 2.47743 8.05183 2.52926C8.29103 2.55462 8.50926 2.67534 8.66566 2.85809L11.0339 5.6253C11.3497 5.99425 11.9202 5.99425 12.236 5.6253L14.5849 2.88068C14.7528 2.68446 14.9917 2.56125 15.2493 2.54369C15.689 2.51373 16.0305 2.51088 16.555 2.59268C17.7675 2.77617 18.4473 4.98552 18.4928 6.49521C18.5014 6.77775 18.3517 7.04445 18.089 7.1489C17.3664 7.43628 16.3941 7.44278 15.6755 7.33024L14.8472 10.6895C12.29 11.0952 10.8825 11.103 8.42274 10.6895L7.60432 7.36766C6.85494 7.52539 5.78994 7.47444 5.07016 7.13883C4.84587 7.03425 4.71412 6.80481 4.71142 6.55735C4.69584 5.13103 5.45156 3.01836 6.71505 2.5833z" + fill="#FF5C7Aff"></path> + <path + d="M8.19688 9.85347C9.66073 10.5601 13.5345 10.7668 15.1159 9.75003L15.6793 11.2107C12.9174 12.2073 9.85241 12.1155 7.65021 11.2107L8.19688 9.85347z" + fill="#FFCFE6ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/food.svg b/assets/zone_v2_icon/food.svg new file mode 100644 index 0000000..b9ada08 --- /dev/null +++ b/assets/zone_v2_icon/food.svg @@ -0,0 +1,23 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M3.18094 10.5647C3.18094 11.01408 3.35942 11.44493 3.67714 11.76269C3.99484 12.08035 4.42574 12.25882 4.87505 12.25882C5.32436 12.25882 5.75527 12.08035 6.07298 11.76269C6.39068 11.44493 6.56917 11.01408 6.56917 10.5647C6.56917 10.11542 6.39068 9.68453 6.07298 9.36682C5.75527 9.04911 5.32436 8.87062 4.87505 8.87062C4.42574 8.87062 3.99484 9.04911 3.67714 9.36682C3.35942 9.68453 3.18094 10.11542 3.18094 10.5647z" + fill="#FB813Aff"></path> + <path + d="M5.69523 9.30581C5.69518 9.60927 5.76987 9.90977 5.91502 10.19011C6.06016 10.47053 6.27294 10.72531 6.54118 10.93987C6.80942 11.15443 7.12788 11.32474 7.47837 11.4408C7.82887 11.55696 8.20452 11.61677 8.5839 11.61677C8.96327 11.61677 9.33893 11.55696 9.68938 11.4408C10.03987 11.32474 10.3584 11.15443 10.62662 10.93987C10.89485 10.72531 11.10758 10.47053 11.25274 10.19011C11.39789 9.90977 11.47258 9.60927 11.47258 9.30581C11.47258 9.00234 11.39789 8.70184 11.25274 8.42147C11.10758 8.1411 10.89485 7.88634 10.62662 7.67174C10.3584 7.45715 10.03987 7.28693 9.68938 7.17079C9.33893 7.05465 8.96327 6.99487 8.5839 6.99487C8.20452 6.99487 7.82887 7.05465 7.47837 7.17079C7.12788 7.28693 6.80942 7.45715 6.54118 7.67174C6.27294 7.88634 6.06016 8.1411 5.91502 8.42147C5.76987 8.70184 5.69518 9.00234 5.69523 9.30581z" + fill="#FB813Aff"></path> + <path + d="M14.90909 11.21645C14.90899 11.59296 14.9832 11.96582 15.1272 12.31373C15.2713 12.66163 15.4825 12.97766 15.7487 13.24397C16.01501 13.51018 16.33104 13.72147 16.67894 13.86557C17.02675 14.00966 17.39962 14.08378 17.77622 14.08378C18.15274 14.08378 18.5256 14.00966 18.87341 13.86557C19.22131 13.72147 19.53744 13.51018 19.80365 13.24397C20.06986 12.97766 20.28106 12.66163 20.42515 12.31373C20.56925 11.96582 20.64336 11.59296 20.64326 11.21645C20.64336 10.83994 20.56925 10.46707 20.42515 10.11917C20.28106 9.77126 20.06986 9.45516 19.80365 9.1889C19.53744 8.92264 19.22131 8.71142 18.87341 8.56733C18.5256 8.42322 18.15274 8.34905 17.77622 8.34905C17.39962 8.34905 17.02675 8.42322 16.67894 8.56733C16.33104 8.71142 16.01501 8.92264 15.7487 9.1889C15.4825 9.45516 15.2713 9.77126 15.1272 10.11917C14.9832 10.46707 14.90899 10.83994 14.90909 11.21645z" + fill="#FB813Aff"></path> + <path + d="M11.7816 9.52223C11.7816 9.91584 11.85907 10.3056 12.0097 10.66925C12.16032 11.0329 12.38112 11.36323 12.65942 11.64163C12.93773 11.91994 13.26816 12.14074 13.63181 12.29136C13.99546 12.44198 14.38522 12.51946 14.77882 12.51946C15.17242 12.51946 15.56218 12.44198 15.92582 12.29136C16.28947 12.14074 16.61981 11.91994 16.89821 11.64163C17.17651 11.36323 17.39722 11.0329 17.54784 10.66925C17.69846 10.3056 17.77603 9.91584 17.77603 9.52223C17.77603 8.72732 17.46029 7.96496 16.89821 7.40287C16.33603 6.84078 15.5737 6.525 14.77882 6.525C13.98384 6.525 13.2215 6.84078 12.65942 7.40287C12.09734 7.96496 11.7816 8.72732 11.7816 9.52223z" + fill="#FB813Aff"></path> + <path + d="M21.52992 9.91312C21.70147 9.91322 21.86602 9.98144 21.98736 10.10275C22.10861 10.22419 22.17677 10.38874 22.17677 10.56029L22.17571 10.59082L22.1737 10.62125C21.85181 14.01696 19.23504 16.76074 15.85699 17.35306L16.31107 19.16976C16.33027 19.24666 16.33171 19.32682 16.3153 19.40429C16.29878 19.48176 16.26499 19.55443 16.21622 19.61683C16.16746 19.67923 16.10515 19.72973 16.03402 19.76448C15.96288 19.79923 15.88474 19.81728 15.80554 19.81728L8.27921 19.81728C8.20003 19.81728 8.12188 19.79923 8.05071 19.76448C7.97955 19.72973 7.91723 19.67923 7.8685 19.61683C7.81977 19.55443 7.7859 19.48176 7.76947 19.40429C7.75305 19.32682 7.75449 19.24666 7.7737 19.16976L8.22772 17.35306C4.89166 16.76822 2.29831 14.08474 1.92424 10.74768L1.91171 10.62672C1.90307 10.53629 1.9134 10.44509 1.94207 10.35898C1.97073 10.27286 2.01708 10.19366 2.07813 10.12646C2.13919 10.05928 2.21362 10.0056 2.29664 9.96886C2.37965 9.93212 2.46943 9.91314 2.56021 9.91312L21.52992 9.91312z" + fill="#FDDE80ff"></path> + <path + d="M10.51066 3.65813L13.57402 3.65813C14.05238 3.65813 14.4695 3.9834 14.58538 4.44758L15.95184 9.91314L8.13281 9.91314L9.49929 4.44792C9.55566 4.22235 9.68582 4.02209 9.86909 3.87899C10.05235 3.73588 10.27814 3.65814 10.51066 3.65813z" + fill="#FDDE80ff"></path> + <path + d="M12.04234 15.12614C12.5953 15.12614 13.1257 15.34579 13.5167 15.7368C13.90771 16.1279 14.12746 16.65821 14.12746 17.21126L14.12746 19.81747L9.95722 19.81747L9.95722 17.21126C9.95722 16.65821 10.17686 16.1279 10.56787 15.7368C10.95898 15.34579 11.48928 15.12614 12.04234 15.12614z" + fill="#FB813Aff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/game.svg b/assets/zone_v2_icon/game.svg new file mode 100644 index 0000000..7fe5842 --- /dev/null +++ b/assets/zone_v2_icon/game.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M5.73713 20.26694L18.61296 20.26694C19.40822 20.26694 20.05296 19.6223 20.05296 18.82694L20.05296 5.83225C20.05296 5.03696 19.40822 4.39225 18.61296 4.39225L5.73712 4.39225C4.94183 4.39225 4.29712 5.03696 4.29712 5.83225L4.29713 18.82694C4.29713 19.6223 4.94184 20.26694 5.73713 20.26694z" + fill="#57D587ff"></path> + <path + d="M7.73276 8.05963C7.60831 8.05963 7.50647 8.16223 7.50647 8.28763L7.50647 10.96666C7.50647 11.09203 7.60831 11.19466 7.73276 11.19466L10.39162 11.19466C10.51603 11.19466 10.61789 11.09203 10.61789 10.96666L10.61789 8.28763C10.61789 8.16223 10.51603 8.05963 10.39162 8.05963L7.73276 8.05963z" + fill="#1F9F81ff"></path> + <path + d="M16.84051 8.28763C16.84051 8.16223 16.73875 8.05963 16.61424 8.05963L13.95542 8.05963C13.83091 8.05963 13.72915 8.16223 13.72915 8.28763L13.72915 10.96666C13.72915 11.09203 13.83091 11.19466 13.95542 11.19466L16.61424 11.19466C16.73875 11.19466 16.84051 11.09203 16.84051 10.96666L16.84051 8.28763z" + fill="#1F9F81ff"></path> + <path + d="M10.84416 11.19456C10.71974 11.19456 10.61789 11.29718 10.61789 11.42256L10.61789 12.70666C10.61789 12.83203 10.51603 12.93466 10.39162 12.93466L9.37919 12.93466C9.25473 12.93466 9.1529 13.03728 9.1529 13.16266L9.1529 14.27395L9.1529 14.72995L9.1529 15.84163L9.1529 16.29763L9.1529 17.40893C9.1529 17.5343 9.25473 17.63693 9.37919 17.63693L10.27843 17.63693C10.40294 17.63693 10.5047 17.5343 10.5047 17.40893L10.5047 16.29763C10.5047 16.17226 10.60656 16.06963 10.73098 16.06963L11.85658 16.06963L12.17338 16.06963L12.49066 16.06963L13.61616 16.06963C13.74058 16.06963 13.84243 16.17226 13.84243 16.29763L13.84243 17.40893C13.84243 17.5343 13.94429 17.63693 14.0687 17.63693L14.96755 17.63693C15.09197 17.63693 15.19382 17.5343 15.19382 17.40893L15.19382 16.29763L15.19382 15.84163L15.19382 14.72995L15.19382 14.27395L15.19382 13.16266C15.19382 13.03728 15.09197 12.93466 14.96755 12.93466L13.95562 12.93466C13.8311 12.93466 13.72934 12.83203 13.72934 12.70666L13.72934 11.42256C13.72934 11.29718 13.62749 11.19456 13.50298 11.19456L10.84416 11.19456z" + fill="#1F9F81ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/gym.svg b/assets/zone_v2_icon/gym.svg new file mode 100644 index 0000000..4b1e3a8 --- /dev/null +++ b/assets/zone_v2_icon/gym.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M2.00343 12.04454C2.00343 11.51434 2.41329 11.08454 2.91886 11.08454L21.22742 11.08454C21.73296 11.08454 22.14278 11.51434 22.14278 12.04454C22.14278 12.57475 21.73296 13.00454 21.22742 13.00454L2.91886 13.00454C2.41329 13.00454 2.00343 12.57475 2.00343 12.04454z" + fill="#FF8834ff"></path> + <path + d="M18.79498 5.27997L17.35498 5.27997L17.35498 18.72L18.79498 18.72C19.59034 18.72 20.23498 18.07526 20.23498 17.28L20.23498 6.71994C20.23498 5.92466 19.59024 5.27997 18.79498 5.27997z" + fill="#FFD671ff"></path> + <path + d="M8.23125 5.27997L6.79125 5.27997L6.79125 18.72L8.23125 18.72C9.02654 18.72 9.67123 18.07526 9.67123 17.28L9.67123 6.71995C9.67123 5.92467 9.02653 5.27997 8.23125 5.27997z" + fill="#FF8834ff"></path> + <path + d="M15.91498 5.28L17.35498 5.28L17.35498 18.72L15.91498 18.72C15.11971 18.72 14.47498 18.07526 14.47498 17.28L14.47498 6.71983C14.47498 5.92466 15.11981 5.28 15.91498 5.28z" + fill="#FF8834ff"></path> + <path + d="M5.35125 5.27997L6.79125 5.27997L6.79125 18.72L5.35125 18.72C4.55596 18.72 3.91125 18.07526 3.91125 17.28L3.91125 6.71994C3.91125 5.92466 4.55597 5.27997 5.35125 5.27997z" + fill="#FFD671ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/handmake.svg b/assets/zone_v2_icon/handmake.svg new file mode 100644 index 0000000..96f3bcc --- /dev/null +++ b/assets/zone_v2_icon/handmake.svg @@ -0,0 +1,23 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M12.62496 14.23738C12.36461 14.6424 11.77267 14.6424 11.51222 14.23757L10.54176 12.72902C10.4015 12.5111 10.4015 12.23146 10.54157 12.01344L16.35754 2.96447C16.50086 2.74146 16.80134 2.67425 16.99843 2.85151C18.05741 3.80375 18.30067 5.40988 17.50579 6.64666L12.62496 14.23738z" + fill="#6D69E4ff"></path> + <path + d="M11.37398 12.43008L12.56045 13.11504L10.65005 16.42397L9.46356 15.73901L11.37398 12.43008z" + fill="#6D69E4ff"></path> + <path + d="M11.49312 14.24842C11.75386 14.64998 12.34176 14.65008 12.60259 14.24861L13.58832 12.73152C13.73069 12.51245 13.73069 12.23011 13.58851 12.01094L7.71324 2.95969C7.56982 2.73875 7.2717 2.67196 7.07455 2.84664C6.00046 3.79827 5.75254 5.40777 6.55671 6.64666L11.49312 14.24842z" + fill="#9796EDff"></path> + <path + d="M11.37398 13.11504L12.56045 12.43008L14.40605 15.62678L13.21958 16.31174L11.37398 13.11504z" + fill="#9796EDff"></path> + <path + d="M6.8168 18.86678C5.84817 18.24422 5.56763 16.95437 6.1902 15.98573C6.81276 15.01709 8.10268 14.73648 9.07131 15.35914C10.03997 15.9817 10.32048 17.27155 9.69792 18.24019C9.07535 19.20883 7.78543 19.48934 6.8168 18.86678zM5.96217 20.19648C4.25917 19.10189 3.76595 16.83408 4.86051 15.13104C5.95507 13.4281 8.22294 12.93485 9.92592 14.02944C11.62896 15.12394 12.12221 17.39184 11.02762 19.09478C9.93302 20.79782 7.66517 21.29107 5.96217 20.19648z" + fill="#FDDE80ff"></path> + <path + d="M15.05808 18.86678C14.08944 18.24422 13.80893 16.95437 14.43149 15.98573C15.05405 15.01709 16.3439 14.73648 17.31254 15.35914C18.28118 15.9817 18.56179 17.27155 17.93914 18.24019C17.31658 19.20883 16.02672 19.48934 15.05808 18.86678zM14.20349 20.19648C12.50045 19.10189 12.0072 16.83408 13.10179 15.13104C14.19638 13.4281 16.46419 12.93485 18.16723 14.02944C19.87018 15.12394 20.36342 17.39184 19.26883 19.09478C18.17434 20.79782 15.90643 21.29107 14.20349 20.19648z" + fill="#FDDE80ff"></path> + <path + d="M13.07414 12.32688C13.07414 12.87965 12.62602 13.32778 12.07325 13.32778C11.52048 13.32778 11.07235 12.87965 11.07235 12.32688C11.07235 11.77411 11.52048 11.32598 12.07325 11.32598C12.62602 11.32598 13.07414 11.77411 13.07414 12.32688z" + fill="#FDDE80ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/health.svg b/assets/zone_v2_icon/health.svg new file mode 100644 index 0000000..ee172e4 --- /dev/null +++ b/assets/zone_v2_icon/health.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M3.67336 7.39739C3.67336 6.59091 3.67336 6.18766 3.83031 5.87964C3.96837 5.60868 4.18866 5.38838 4.45961 5.25033C4.76765 5.09338 5.17089 5.09338 5.97736 5.09338L18.14179 5.09338C18.94829 5.09338 19.35149 5.09338 19.65955 5.25033C19.93046 5.38838 20.15078 5.60868 20.28883 5.87964C20.44579 6.18766 20.44579 6.5909 20.44579 7.39738L20.44579 16.60262C20.44579 17.40912 20.44579 17.81232 20.28883 18.12038C20.15078 18.3913 19.93046 18.61162 19.65955 18.74966C19.35149 18.90662 18.94829 18.90662 18.14179 18.90662L5.97735 18.90662C5.17089 18.90662 4.76765 18.90662 4.45961 18.74966C4.18866 18.61162 3.96837 18.3913 3.83031 18.12038C3.67336 17.81232 3.67336 17.40912 3.67336 16.60262L3.67336 7.39739z" + fill="#FF5C7Aff"></path> + <path + d="M3.09983 7.20505L3.09983 7.20505C3.09983 6.57943 3.09983 6.26662 3.19538 6.01756C3.34163 5.63638 3.64284 5.33518 4.02401 5.18893C4.27307 5.09338 4.58588 5.09338 5.2115 5.09338L5.2115 5.09338L18.93494 5.09338L18.93494 5.09338C19.56058 5.09338 19.87344 5.09338 20.12246 5.18893C20.50368 5.33518 20.80483 5.63637 20.95114 6.01757C21.04666 6.26662 21.04666 6.57944 21.04666 7.20505L21.04666 7.20505C21.04666 7.41359 21.04666 7.51786 21.01478 7.60088C20.96602 7.72794 20.8656 7.82834 20.73859 7.87709C20.65555 7.90894 20.5513 7.90894 20.34278 7.90894L3.80372 7.90894C3.59518 7.90894 3.49091 7.90894 3.40789 7.87709C3.28083 7.82834 3.18043 7.72794 3.13167 7.60088C3.09983 7.51786 3.09983 7.41359 3.09983 7.20505z" + fill="#FFCFE6ff"></path> + <path + d="M13.20672 11.86099L13.20672 9.88544C13.20672 9.62034 12.99187 9.40544 12.72672 9.40544L11.39251 9.40544C11.12736 9.40544 10.91251 9.62034 10.91251 9.88544L10.91251 11.86099L8.93696 11.86099C8.67185 11.86099 8.45696 12.07584 8.45696 12.34099L8.45696 13.6752C8.45696 13.94035 8.67185 14.1552 8.93696 14.1552L10.91251 14.1552L10.91251 16.13078C10.91251 16.39584 11.12736 16.61078 11.39251 16.61078L12.72672 16.61078C12.99187 16.61078 13.20672 16.39584 13.20672 16.13078L13.20672 14.1552L15.1823 14.1552C15.44736 14.1552 15.6623 13.94035 15.6623 13.6752L15.6623 12.34099C15.6623 12.07584 15.44736 11.86099 15.1823 11.86099L13.20672 11.86099z" + fill="#FFCFE6ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/home.svg b/assets/zone_v2_icon/home.svg new file mode 100644 index 0000000..066b5dd --- /dev/null +++ b/assets/zone_v2_icon/home.svg @@ -0,0 +1,26 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M5.59324 5.04454C5.59324 4.24928 6.2378 3.60457 7.03307 3.60457C7.06633 3.60457 7.09987 3.60457 7.13368 3.60457L14.02454 3.60457C14.05824 3.60457 14.09174 3.60457 14.12486 3.60457C14.92022 3.60456 15.56496 4.24931 15.56496 5.04468L15.56496 20.40461L7.13367 20.40461C6.28292 20.40461 5.59324 19.79482 5.59324 19.04246L5.59324 5.04454z" + fill="#FF8834ff"></path> + <path + d="M9.42703 11.3329C9.42703 11.06784 9.64195 10.8529 9.90701 10.8529L11.2512 10.8529C11.51626 10.8529 11.7312 11.06784 11.7312 11.3329L11.7312 12.67699C11.7312 12.94214 11.51626 13.15699 11.2512 13.15699L9.90701 13.15699C9.64195 13.15699 9.42703 12.94214 9.42703 12.67699L9.42703 11.3329z" + fill="#FFD671ff"></path> + <path + d="M9.42703 7.04062C9.42703 6.77553 9.64195 6.56062 9.90701 6.56062L11.2512 6.56062C11.51626 6.56062 11.7312 6.77553 11.7312 7.04062L11.7312 8.38475C11.7312 8.64985 11.51626 8.86475 11.2512 8.86475L9.90701 8.86475C9.64195 8.86475 9.42703 8.64985 9.42703 8.38475L9.42703 7.04062z" + fill="#FFD671ff"></path> + <path + d="M9.42703 15.62506C9.42703 15.36 9.64195 15.14506 9.90701 15.14506L11.2512 15.14506C11.51626 15.14506 11.7312 15.36 11.7312 15.62506L11.7312 16.96915C11.7312 17.2343 11.51626 17.44915 11.2512 17.44915L9.90701 17.44915C9.64195 17.44915 9.42703 17.2343 9.42703 16.96915L9.42703 15.62506z" + fill="#FFD671ff"></path> + <path + d="M15.56496 8.80705L19.03325 8.80705C19.82851 8.80705 20.47325 9.45176 20.47325 10.24704L20.47325 10.24704L20.47325 18.96461C20.47325 19.75987 19.82851 20.40461 19.03325 20.40461L15.56496 20.40461L15.56496 8.80705z" + fill="#FFD671ff"></path> + <path + d="M17.15616 11.3327C17.15616 11.06755 17.37101 10.8527 17.63616 10.8527L18.40205 10.8527C18.6672 10.8527 18.88205 11.06755 18.88205 11.3327L18.88205 12.6768C18.88205 12.94186 18.6672 13.1568 18.40205 13.1568L17.63616 13.1568C17.37101 13.1568 17.15616 12.94186 17.15616 12.6768L17.15616 11.3327z" + fill="#FF8834ff"></path> + <path + d="M17.15616 15.62486C17.15616 15.35971 17.37101 15.14486 17.63616 15.14486L18.40205 15.14477C18.6672 15.14477 18.88205 15.35971 18.88205 15.62477L18.88205 16.96896C18.88205 17.23402 18.6672 17.44896 18.40205 17.44896L17.63616 17.44896C17.37101 17.44896 17.15616 17.23402 17.15616 16.96896L17.15616 15.62486z" + fill="#FF8834ff"></path> + <path + d="M4.46813 19.8047C4.46813 19.2745 4.89793 18.8447 5.42813 18.8447L20.63626 18.8447C21.16646 18.8447 21.59626 19.2745 21.59626 19.8047C21.59626 20.33491 21.16646 20.7647 20.63626 20.7647L5.42813 20.7647C4.89793 20.7647 4.46813 20.33491 4.46813 19.8047z" + fill="#FF8834ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/information.svg b/assets/zone_v2_icon/information.svg new file mode 100644 index 0000000..68a2917 --- /dev/null +++ b/assets/zone_v2_icon/information.svg @@ -0,0 +1,20 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M20.7696 9.43989C20.7696 8.64461 20.12486 7.99991 19.3296 7.99988C16.87613 7.9998 14.42275 7.99956 11.96928 7.99979C11.17411 7.99986 10.52957 8.64452 10.52957 9.4397L10.52957 18.96499C10.52957 19.76026 11.17421 20.40499 11.96957 20.40499C14.42285 20.40499 16.87622 20.40499 19.3296 20.40499C20.12486 20.40499 20.7696 19.76026 20.7696 18.96499C20.7696 15.78998 20.7696 12.61498 20.7696 9.43989z" + fill="#00B9E7ff"></path> + <path + d="M17.56512 4.12356L5.86988 4.12356C5.16028 4.12356 4.58508 4.65644 4.58508 5.3136L4.58508 19.21469C4.58508 19.8719 5.16028 20.4047 5.86988 20.4047L17.56512 20.4047C18.27427 20.4047 18.8495 19.8719 18.8495 19.21469L18.8495 5.3136C18.8495 4.65644 18.27427 4.12356 17.56512 4.12356z" + fill="#59E1F9ff"></path> + <path + d="M6.55239 15.36586C6.55239 14.96861 6.87441 14.64662 7.27164 14.64662L16.14778 14.64662C16.54493 14.64662 16.86701 14.96861 16.86701 15.36586C16.86701 15.7631 16.54493 16.08509 16.14778 16.08509L7.27164 16.08509C6.87441 16.08509 6.55239 15.7631 6.55239 15.36586z" + fill="#00B9E7ff"></path> + <path + d="M6.55239 17.90045C6.55239 17.5032 6.87441 17.18122 7.27164 17.18122L16.14778 17.18122C16.54493 17.18122 16.86701 17.5032 16.86701 17.90045C16.86701 18.2977 16.54493 18.61968 16.14778 18.61968L7.27164 18.61968C6.87441 18.61968 6.55239 18.2977 6.55239 17.90045z" + fill="#00B9E7ff"></path> + <path + d="M15.61574 13.17888L7.81898 13.17888C7.13058 13.17888 6.56738 12.61891 6.56738 11.93443L6.56738 7.62798C6.56738 6.94351 7.13058 6.38353 7.81898 6.38353L15.61574 6.38353C16.30416 6.38353 16.86701 6.94351 16.86701 7.62798L16.86701 11.93443C16.86701 12.61891 16.30416 13.17888 15.61574 13.17888z" + fill="#00B9E7ff"></path> + <path + d="M10.3943 8.60394C10.3943 8.06573 10.77312 7.84541 11.23603 8.11452L13.40477 9.37584C13.86768 9.64495 13.86768 10.08557 13.40477 10.35466L11.23603 11.616C10.77312 11.88566 10.3943 11.66534 10.3943 11.12659L10.3943 8.60394z" + fill="#FDDE80ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/kichiku.svg b/assets/zone_v2_icon/kichiku.svg new file mode 100644 index 0000000..a02252b --- /dev/null +++ b/assets/zone_v2_icon/kichiku.svg @@ -0,0 +1,20 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M21.44573 11.95363C21.44573 9.55713 19.50038 7.61437 17.10058 7.61437C15.08016 7.61437 13.38701 8.99326 12.90048 10.85837C12.61642 10.97539 12.34656 11.1191 12.09197 11.28422C11.8248 11.11114 11.54035 10.9632 11.24141 10.8431C10.7495 8.98562 9.05986 7.61437 7.04517 7.61437C4.64539 7.61437 2.7 9.55713 2.7 11.95363C2.7 13.36733 3.37985 14.61888 4.42758 15.41136C4.42758 15.4225 4.42605 15.43315 4.42605 15.4439C4.42605 18.18326 6.64974 20.40394 9.39251 20.40394C10.38893 20.40394 11.31456 20.10806 12.09197 19.60387C12.86947 20.10806 13.7951 20.40394 14.7911 20.40394C17.5343 20.40394 19.75795 18.18326 19.75795 15.4439C19.75795 15.42365 19.75488 15.40406 19.75488 15.38381C20.78198 14.59027 21.44573 13.35091 21.44573 11.95363z" + fill="#FF5C7Aff"></path> + <path + d="M12.58224 5.53555L11.71478 5.53555C9.34452 5.53555 7.40521 7.47222 7.40521 9.83926L7.40521 15.31181C7.40521 17.67888 9.34452 19.61558 11.71478 19.61558L12.58224 19.61558C14.95258 19.61558 16.89187 17.67888 16.89187 15.31181L16.89187 9.83926C16.89187 7.47222 14.95258 5.53555 12.58224 5.53555z" + fill="#ffffffff"></path> + <path + d="M9.46395 12.41309C9.51499 12.25402 9.73997 12.25402 9.79104 12.41309L9.80074 12.44323C9.99446 13.04669 10.41043 13.55386 10.96445 13.86182C11.0785 13.92528 11.0785 14.08934 10.96445 14.1527C10.41043 14.46067 9.99446 14.96784 9.80074 15.5713L9.79104 15.60154C9.73997 15.76051 9.51499 15.76051 9.46395 15.60154L9.45425 15.5713C9.26053 14.96784 8.84449 14.46067 8.29054 14.1527C8.17648 14.08934 8.17648 13.92528 8.29054 13.86182C8.84449 13.55386 9.26053 13.04669 9.45425 12.44323L9.46395 12.41309z" + fill="#FF5C7Aff"></path> + <path + d="M14.28221 12.41309C14.33328 12.25402 14.55821 12.25402 14.60928 12.41309L14.61898 12.44323C14.8127 13.04669 15.22877 13.55386 15.78269 13.86182C15.89674 13.92528 15.89674 14.08934 15.78269 14.1527C15.22877 14.46067 14.8127 14.96784 14.61898 15.5713L14.60928 15.60154C14.55821 15.76051 14.33328 15.76051 14.28221 15.60154L14.27251 15.5713C14.07878 14.96784 13.66282 14.46067 13.1088 14.1527C12.99475 14.08934 12.99475 13.92528 13.1088 13.86182C13.66282 13.55386 14.07878 13.04669 14.27251 12.44323L14.28221 12.41309z" + fill="#FF5C7Aff"></path> + <path + d="M15.88627 4.34697C15.40176 4.34697 14.94173 4.44877 14.52384 4.62983C13.90205 3.99273 13.03459 3.59566 12.07315 3.59566C11.11171 3.59566 10.24426 3.99273 9.62208 4.62983C9.20452 4.44877 8.74409 4.34697 8.25997 4.34697C6.36862 4.34697 4.83576 5.87813 4.83576 7.76653C4.83576 9.65493 6.36862 11.18611 8.25997 11.18611C9.22144 11.18611 10.08883 10.78906 10.71072 10.1519C11.12861 10.33296 11.58864 10.43482 12.07315 10.43482C12.55766 10.43482 13.0177 10.33296 13.4352 10.1519C14.05738 10.78906 14.92483 11.18611 15.88627 11.18611C17.77728 11.18611 19.3105 9.65493 19.3105 7.76653C19.3105 5.87813 17.77728 4.34697 15.88627 4.34697z" + fill="#FF5C7Aff"></path> + <path + d="M13.46515 16.05629C13.46515 16.85155 12.81917 17.49658 12.02285 17.49658C11.22586 17.49658 10.58064 16.85155 10.58064 16.05629C10.58064 15.26102 11.22586 14.616 12.02285 14.616C12.81917 14.616 13.46515 15.26102 13.46515 16.05629z" + fill="#FF5C7Aff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/knowledge.svg b/assets/zone_v2_icon/knowledge.svg new file mode 100644 index 0000000..154fe65 --- /dev/null +++ b/assets/zone_v2_icon/knowledge.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M11.314 2.23489C12.9446 2.23067 14.532 2.75886 15.8349 3.73921C17.1379 4.71955 18.0852 6.09845 18.5329 7.66636C18.9806 9.23427 18.9042 10.9055 18.3154 12.426C17.8016 13.7526 16.9223 14.9013 15.7852 15.7421C15.4744 15.972 15.2705 16.326 15.2705 16.7125L15.2705 17.592C15.2617 17.8153 15.2705 18.4288 15.2705 18.4288C15.2705 18.4288 14.2951 18.5929 13.8545 18.5929C13.4139 18.5929 8.6663 18.5929 8.6663 18.5929C8.23657 18.5929 7.26348 18.3716 7.26348 18.3716C7.26348 18.3716 7.26348 17.3741 7.26348 16.9398L7.26348 16.6997C7.26348 16.3201 7.06671 15.9714 6.76507 15.741C5.64258 14.8837 4.78051 13.7248 4.28335 12.394C3.71494 10.8724 3.65406 9.20783 4.10982 7.64882C4.56557 6.08982 5.51348 4.7201 6.81195 3.7443C8.11043 2.7685 9.68976 2.239 11.314 2.23489z" + fill="#FF8834ff"></path> + <path + d="M12.1195 12.5257C12.3663 12.5257 12.5664 12.3256 12.5664 12.0788L12.5664 11.3639C12.5664 11.1171 12.7665 10.917 13.0133 10.917L13.6389 10.917C14.6152 10.917 14.7114 10.3559 14.7114 10.0232L14.7114 6.7135C14.7114 6.22927 14.351 5.81976 13.6389 5.81976L9.17018 5.81976C8.28824 5.81976 7.91895 6.26199 7.91895 6.7135L7.91895 8.50456C7.91895 8.75099 8.11871 8.95076 8.36514 8.95076L9.61773 8.95076C9.86415 8.95076 10.0639 8.75099 10.0639 8.50456L10.0639 7.96765C10.0639 7.72085 10.264 7.52078 10.5108 7.52078L12.1195 7.52078C12.3663 7.52078 12.5664 7.72085 12.5664 7.96765L12.5664 9.57638C12.5664 9.82318 12.3663 10.0232 12.1195 10.0232L11.4939 10.0232C10.2266 10.0114 9.88517 10.5345 9.88517 10.917L9.88517 12.0788C9.88517 12.3256 10.0852 12.5257 10.332 12.5257L12.1195 12.5257zM11.2537 13.0396C11.5011 13.0396 11.7431 13.113 11.9488 13.2505C12.1546 13.388 12.315 13.5834 12.4097 13.812C12.5044 14.0407 12.5291 14.2922 12.4809 14.535C12.4326 14.7777 12.3134 15.0006 12.1384 15.1756C11.9634 15.3506 11.7405 15.4698 11.4978 15.518C11.2551 15.5663 11.0035 15.5415 10.7748 15.4468C10.5462 15.3521 10.3508 15.1918 10.2133 14.986C10.0758 14.7802 10.0024 14.5383 10.0024 14.2909C10.0024 13.959 10.1343 13.6407 10.3689 13.4061C10.6036 13.1714 10.9218 13.0396 11.2537 13.0396z" + fill="#FFE8AFff"></path> + <path + d="M7.61193 19.1082C7.56041 18.8267 7.79538 18.593 8.0816 18.593L14.5507 18.593C14.8369 18.593 15.0719 18.8267 15.0204 19.1082C14.9 19.7663 14.5593 20.4539 14.0385 20.8941C13.3787 21.4518 12.4838 21.7652 11.5507 21.7652L11.0816 21.7652C10.1485 21.7652 9.25362 21.4518 8.59382 20.8941C8.073 20.4539 7.73233 19.7663 7.61193 19.1082z" + fill="#00B9E7ff"></path> + <path + d="M6.53796 17.9091C6.53796 17.4028 6.94835 16.9924 7.45459 16.9924L14.9778 16.9924C15.484 16.9924 15.8944 17.4028 15.8944 17.9091L15.8944 18.0758C15.8944 18.582 15.484 18.9924 14.9778 18.9924L7.45459 18.9924C6.94835 18.9924 6.53796 18.582 6.53796 18.0758L6.53796 17.9091z" + fill="#FFD671ff"></path> + <path + d="M20.289 3.28204C20.345 3.15749 20.5218 3.15749 20.5779 3.28204L20.8592 3.90715C21.1186 4.4836 21.5405 4.97188 22.0732 5.31218L22.267 5.43598C22.3971 5.51903 22.3971 5.70894 22.267 5.79199L22.0821 5.91013C21.5438 6.25396 21.1188 6.74879 20.8602 7.33278L20.5783 7.96932C20.5226 8.09501 20.3442 8.09501 20.2886 7.96932L20.0206 7.36425C19.7533 6.76065 19.3084 6.25278 18.7453 5.90825L18.5589 5.79416C18.4242 5.71178 18.4242 5.51619 18.5589 5.43381L18.7543 5.3142C19.3118 4.9731 19.7535 4.47182 20.0217 3.87581L20.289 3.28204z" + fill="#FFD671ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/life_experience.svg b/assets/zone_v2_icon/life_experience.svg new file mode 100644 index 0000000..2ef38e2 --- /dev/null +++ b/assets/zone_v2_icon/life_experience.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M10.61434 6.33318C10.44384 7.21354 10.50317 8.08513 10.75046 8.88596L5.69662 13.35926L5.69921 13.36157C5.57936 13.47024 5.465 13.58765 5.35702 13.7137C3.97257 15.33053 4.16094 17.76355 5.77777 19.14806C7.39459 20.53248 9.82762 20.34413 11.21203 18.7273C11.30314 18.62093 11.38742 18.51101 11.46499 18.39811L15.31018 12.58262C17.97302 12.82781 20.43984 11.0184 20.9593 8.33736C21.17885 7.20411 21.01738 6.0853 20.56435 5.11334C20.37149 4.69955 19.82563 4.66821 19.52582 5.01252L17.27568 7.59697C17.10634 7.79142 16.81142 7.81181 16.61702 7.6425L15.29088 6.48796C15.09648 6.31865 15.07603 6.02376 15.24538 5.82931L17.46605 3.27885C17.7697 2.93007 17.65584 2.38682 17.2104 2.26236C17.07254 2.22383 16.9319 2.19058 16.78886 2.16287C13.93229 1.60943 11.16778 3.47652 10.61434 6.33318z" + fill="#FDDE80ff"></path> + <path + d="M7.35426 17.3065C6.75449 16.79299 6.68461 15.8904 7.19819 15.29059C7.71177 14.69088 8.61432 14.62099 9.21409 15.1345C9.81389 15.6481 9.88378 16.55069 9.37018 17.1504C8.8566 17.75021 7.95404 17.8201 7.35426 17.3065z" + fill="#FB813Aff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/life_joy.svg b/assets/zone_v2_icon/life_joy.svg new file mode 100644 index 0000000..1b31b60 --- /dev/null +++ b/assets/zone_v2_icon/life_joy.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M4.07763 7.63768C4.05931 6.56311 5.5539 6.83651 6.30349 7.10752C7.97693 7.98802 10.8193 9.80818 8.8013 10.0448C6.27878 10.3405 4.10053 8.98089 4.07763 7.63768z" + fill="#FB813Aff"></path> + <path + d="M4.55611 14.4882C4.84141 11.4532 7.31628 10.1389 8.31998 9.82821C8.48729 9.82821 9.61772 10.5076 13.464 11.2928C16.0255 11.8156 17.6628 11.0097 18.4364 9.93394C18.805 9.42136 19.3229 9.07939 19.7434 9.55032C20.3467 10.226 21.0067 11.5269 21.0067 13.5405C21.0067 17.3561 18.0324 20.9886 12.5657 20.9886C7.48437 20.9886 4.24105 17.8397 4.55611 14.4882z" + fill="#FDDE80ff"></path> + <path + d="M14.8068 7.41519C14.8068 9.84733 12.8352 11.819 10.4031 11.819C7.97092 11.819 5.99929 9.84733 5.99929 7.41519C5.99929 4.98305 7.97092 3.01141 10.4031 3.01141C12.8352 3.01141 14.8068 4.98305 14.8068 7.41519z" + fill="#FDDE80ff"></path> + <path + d="M10.0014 7.74284C10.0014 8.297 9.5522 8.74623 8.99804 8.74623C8.44388 8.74623 7.99465 8.297 7.99465 7.74284C7.99465 7.18868 8.44388 6.73944 8.99804 6.73944C9.5522 6.73944 10.0014 7.18868 10.0014 7.74284z" + fill="#FB813Aff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/music.svg b/assets/zone_v2_icon/music.svg new file mode 100644 index 0000000..10c5f58 --- /dev/null +++ b/assets/zone_v2_icon/music.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M20.36371 11.11344C20.36371 7.03327 17.00093 3.69495 12.89088 3.69495L11.25552 3.69495C7.1455 3.69495 3.78273 7.03327 3.78273 11.11344L3.78273 17.13898C3.78273 17.88566 4.38811 18.49114 5.1349 18.49114C5.43671 19.51978 5.98057 20.27731 7.11021 20.27731L8.35096 20.27731C8.80764 20.27731 9.17878 19.91088 9.18128 19.45718L9.21324 13.14941C9.21532 12.69274 8.84292 12.32102 8.38293 12.32102L7.11021 12.32102C6.69256 12.32102 6.29858 12.42566 5.95151 12.60826L5.95151 10.98528C5.95151 8.03846 8.38018 5.62746 11.34854 5.62746L12.85142 5.62746C15.81984 5.62746 18.24845 8.03846 18.24845 10.98528L18.24845 12.63706C17.88893 12.4368 17.47546 12.32102 17.03616 12.32102L15.76349 12.32102C15.30346 12.32102 14.93107 12.69274 14.93318 13.14941L14.96515 19.45718C14.96765 19.91088 15.33878 20.27731 15.79546 20.27731L17.03616 20.27731C18.16589 20.27731 18.70973 19.51978 19.01155 18.49114C19.75834 18.49114 20.36371 17.88566 20.36371 17.13898L20.36371 11.11344z" + fill="#59E0F9ff"></path> + <path + d="M5.11552 15.22608C5.11552 14.15078 5.11552 13.61309 5.32479 13.2024C5.50887 12.84115 5.8026 12.54739 6.16386 12.36336C6.57458 12.15408 7.11223 12.15408 8.18752 12.15408L8.61742 12.15408C9.15507 12.15408 9.4239 12.15408 9.62928 12.25872C9.80986 12.35078 9.95674 12.49757 10.0488 12.67824C10.15344 12.88358 10.15344 13.15238 10.15344 13.69008L10.15344 18.74131C10.15344 19.27891 10.15344 19.54781 10.0488 19.75315C9.95674 19.93373 9.80986 20.08061 9.62928 20.17267C9.4239 20.27731 9.15507 20.27731 8.61742 20.27731L8.18752 20.27731C7.11223 20.27731 6.57458 20.27731 6.16386 20.06803C5.8026 19.884 5.50887 19.59024 5.32479 19.22899C5.11552 18.81821 5.11552 18.28061 5.11552 17.20531L5.11552 15.22608z" + fill="#00B9E7ff"></path> + <path + d="M19.03075 15.22608C19.03075 14.15078 19.03075 13.61309 18.82147 13.2024C18.63734 12.84115 18.34368 12.54739 17.98243 12.36336C17.57165 12.15408 17.03405 12.15408 15.95875 12.15408L15.52675 12.15408C14.98906 12.15408 14.72026 12.15408 14.51491 12.25872C14.33424 12.35078 14.18736 12.49757 14.09539 12.67824C13.99075 12.88358 13.99075 13.15238 13.99075 13.69008L13.99075 18.74131C13.99075 19.27891 13.99075 19.54781 14.09539 19.75315C14.18736 19.93373 14.33424 20.08061 14.51491 20.17267C14.72026 20.27731 14.98906 20.27731 15.52675 20.27731L15.95875 20.27731C17.03405 20.27731 17.57165 20.27731 17.98243 20.06803C18.34368 19.884 18.63734 19.59024 18.82147 19.22899C19.03075 18.81821 19.03075 18.28061 19.03075 17.20531L19.03075 15.22608z" + fill="#00B9E7ff"></path> + <path + d="M13.9992 12.87389C13.9992 12.34349 14.42928 11.91341 14.95968 11.91341L14.95968 11.91341C15.49018 11.91341 15.92026 12.34349 15.92026 12.87389L15.92026 19.55741C15.92026 20.0879 15.49018 20.51798 14.95968 20.51798L14.95968 20.51798C14.42928 20.51798 13.9992 20.0879 13.9992 19.55741L13.9992 12.87389z" + fill="#FDDE80ff"></path> + <path + d="M8.24077 12.87389C8.24077 12.34349 8.67081 11.91341 9.20127 11.91341L9.20127 11.91341C9.73171 11.91341 10.16179 12.34349 10.16179 12.87389L10.16179 19.55741C10.16179 20.0879 9.73171 20.51798 9.20127 20.51798L9.20127 20.51798C8.67081 20.51798 8.24077 20.0879 8.24077 19.55741L8.24077 12.87389z" + fill="#FDDE80ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/outdoors.svg b/assets/zone_v2_icon/outdoors.svg new file mode 100644 index 0000000..0af234d --- /dev/null +++ b/assets/zone_v2_icon/outdoors.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M9.29448 4.11732C9.64829 3.40975 10.65802 3.40975 11.01178 4.11732L18.0985 18.29069C18.4176 18.92899 17.95344 19.68 17.23978 19.68L3.06644 19.68C2.3528 19.68 1.88864 18.92899 2.20779 18.29069L9.29448 4.11732z" + fill="#1F9F81ff"></path> + <path + d="M3.05915 19.68019C2.34988 19.67482 1.89021 18.92698 2.20821 18.29098L5.83356 11.04019L6.34665 12.06643C6.62966 12.63245 7.43746 12.63245 7.72048 12.06643L8.3349 10.83754C8.68868 10.13002 9.6984 10.13002 10.05216 10.83754L12.10666 14.94643C12.38966 15.51245 13.19741 15.51245 13.48051 14.94643L14.95354 12.00029L18.09888 18.29098C18.41808 18.92928 17.95392 19.68029 17.24026 19.68029L3.26428 19.68029C3.26216 19.68019 3.26004 19.68019 3.25792 19.68019L3.05915 19.68019z" + fill="#57D587ff"></path> + <path + d="M16.01443 9.87732C16.36829 9.16975 17.37802 9.16975 17.73178 9.87732L21.9385 18.29069C22.2576 18.92899 21.79344 19.68 21.07978 19.68L12.66643 19.68C11.95277 19.68 11.48861 18.92899 11.80781 18.29069L16.01443 9.87732z" + fill="#1F9F81ff"></path> + <path + d="M19.51354 13.44L21.93888 18.29069C22.25808 18.92899 21.79392 19.68 21.08026 19.68L12.66682 19.68C11.95325 19.68 11.48909 18.92899 11.80819 18.29069L14.95354 12L17.16422 16.42138C17.34115 16.77514 17.84602 16.77514 18.02285 16.42138L19.51354 13.44z" + fill="#57D587ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/painting.svg b/assets/zone_v2_icon/painting.svg new file mode 100644 index 0000000..2e0cd81 --- /dev/null +++ b/assets/zone_v2_icon/painting.svg @@ -0,0 +1,23 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M12.3744 18.84662C12.69341 20.00419 13.71994 21.08438 14.85139 20.68234C18.26458 19.46938 20.71642 16.13021 20.71642 12.20093C20.71642 7.24727 16.81949 3.23156 12.01248 3.23156C7.20531 3.23156 3.30844 7.24727 3.30844 12.20093C3.33446 12.77126 3.45612 13.28774 3.61254 13.63834C4.17721 14.90381 5.61394 15.15859 6.73392 15.12922C8.03405 15.09514 9.63226 15.24019 10.56096 16.00886C11.59786 16.8671 12.11866 17.91859 12.3744 18.84662z" + fill="#FDDE80ff"></path> + <path + d="M8.78526 10.49779C8.78526 11.44157 8.02013 12.20669 7.07629 12.20669C6.13247 12.20669 5.36734 11.44157 5.36734 10.49779C5.36734 9.55393 6.13247 8.78881 7.07629 8.78881C8.02013 8.78881 8.78526 9.55393 8.78526 10.49779z" + fill="#FB813Aff"></path> + <path + d="M12.408 7.48322C12.408 8.20428 11.82355 8.78881 11.1025 8.78881C10.38144 8.78881 9.7969 8.20428 9.7969 7.48322C9.7969 6.76216 10.38144 6.17764 11.1025 6.17764C11.82355 6.17764 12.408 6.76216 12.408 7.48322z" + fill="#FB813Aff"></path> + <path + d="M16.3633 7.48323C16.3633 8.02254 15.92611 8.45974 15.38678 8.45974C14.84755 8.45974 14.41027 8.02254 14.41027 7.48323C14.41027 6.94392 14.84755 6.50672 15.38678 6.50672C15.92611 6.50672 16.3633 6.94392 16.3633 7.48323z" + fill="#FB813Aff"></path> + <path + d="M14.71584 14.62147C14.41421 14.09914 14.58682 13.43146 15.10368 13.1207L21.1801 9.46733C21.82541 9.07934 22.66397 9.30876 23.02195 9.97121C23.37216 10.61933 23.12429 11.4287 22.4711 11.76941L16.18522 15.04906C15.6599 15.32304 15.012 15.1345 14.71584 14.62147z" + fill="#FB813Aff"></path> + <path + d="M11.78429 14.75242C12.32054 14.68214 12.92227 13.98 13.23936 13.54013L15.35971 16.06061C13.86586 16.96474 11.96122 16.30694 11.5559 15.00941C11.51616 14.88211 11.65219 14.76979 11.78429 14.75242z" + fill="#FB813Aff"></path> + <path + d="M16.15882 14.96486C15.96509 15.86717 15.07661 16.44154 14.1743 16.24781C13.272 16.05408 12.69763 15.1655 12.89136 14.2633C13.08509 13.36099 13.97366 12.78662 14.87587 12.98035C15.77818 13.17408 16.35254 14.06256 16.15882 14.96486z" + fill="#FB813Aff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/parenting.svg b/assets/zone_v2_icon/parenting.svg new file mode 100644 index 0000000..719ea97 --- /dev/null +++ b/assets/zone_v2_icon/parenting.svg @@ -0,0 +1,26 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M5.96079 9.69571C5.59021 9.81677 5.26667 9.8328 4.86949 9.85738L9.89213 5.07405L10.87805 9.6721L15.83242 9.6721C17.87904 9.6721 19.53811 11.33117 19.53811 13.37779C19.53811 15.42432 17.87904 17.08339 15.83242 17.08339L10.16016 17.08339C7.92572 17.08339 6.09908 15.30134 6.04398 13.06752L5.96079 9.69571z" + fill="#FDDE80ff"></path> + <path + d="M9.6025 4.46082C10.41341 5.55808 9.75648 7.49415 8.20206 8.64297C6.64761 9.79181 3.96818 10.40179 3.055 9.26052C1.96426 7.89731 3.63332 5.60959 5.18777 4.46077C6.74222 3.31196 8.79157 3.36356 9.6025 4.46082z" + fill="#FDDE80ff"></path> + <path + d="M6.87196 6.71961C6.87196 7.12133 6.5463 7.447 6.14457 7.447C5.74284 7.447 5.41718 7.12133 5.41718 6.71961C5.41718 6.31788 5.74284 5.99222 6.14457 5.99222C6.5463 5.99222 6.87196 6.31788 6.87196 6.71961z" + fill="#FB813Aff"></path> + <path + d="M6.14543 12.70627L10.23763 14.1047L8.64211 18.77357L4.54988 17.37514L6.14543 12.70627z" + fill="#FDDE80ff"></path> + <path + d="M14.78726 14.63981L18.7393 12.88387L20.74282 17.3928L16.79078 19.14874L14.78726 14.63981z" + fill="#FDDE80ff"></path> + <path + d="M21.96979 15.99082C22.31914 16.3897 22.27901 16.99613 21.88022 17.34547C15.86986 22.61002 7.48995 22.30915 2.4827 17.30218C2.10779 16.9273 2.10778 16.31942 2.48267 15.94454C2.85756 15.56966 3.4654 15.56966 3.84032 15.94454C8.08284 20.18688 15.31133 20.54678 20.61514 15.90125C21.01392 15.5519 21.62045 15.59203 21.96979 15.99082z" + fill="#FB813Aff"></path> + <path + d="M19.39718 14.39482C19.72656 11.1407 18.06538 10.3655 17.14954 9.91958C17.37629 9.69235 18.31123 9.5818 19.1807 9.99101C20.37235 10.55174 21.10224 11.98934 21.42298 12.9239C21.54499 13.27949 21.33542 13.65331 20.98474 13.78877C20.39798 14.01523 19.57814 14.33251 19.39718 14.39482z" + fill="#FB813Aff"></path> + <path + d="M10.83811 9.66922C10.11696 4.5294 7.26305 3.30956 5.97503 3.99554C5.97565 3.79332 5.97577 3.52899 5.97581 3.2852C5.97588 2.91278 6.25105 2.59212 6.62292 2.5719C11.19946 2.32295 12.21792 7.17193 12.41837 9.66922C12.19757 9.69322 11.40576 9.66922 10.83811 9.66922z" + fill="#FB813Aff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/rural.svg b/assets/zone_v2_icon/rural.svg new file mode 100644 index 0000000..86890a6 --- /dev/null +++ b/assets/zone_v2_icon/rural.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M10.91453 10.73011C7.95237 9.85407 7.59103 5.97928 10.11072 4.12781C13.15738 5.65305 12.98035 8.82602 10.91453 10.73011z" + fill="#57D587ff"></path> + <path + d="M18.67613 9.33284C18.19392 12.384 14.39933 13.24752 12.2351 10.99085C13.34995 7.77122 16.51891 7.53296 18.67613 9.33284z" + fill="#57D587ff"></path> + <path + d="M11.30275 17.05469C7.42624 18.98832 3.35071 15.35866 4.16538 11.05008C8.74932 9.70172 11.6015 13.12618 11.30275 17.05469z" + fill="#57D587ff"></path> + <path + d="M19.80106 14.7049C19.08797 18.83357 13.92499 19.93133 11.03338 16.8288C12.60778 12.48394 16.91021 12.22205 19.80106 14.7049z" + fill="#57D587ff"></path> + <path + d="M16.30752 5.67904C16.56192 6.14421 16.39104 6.72755 15.92592 6.98196C13.72982 8.183 12.6264 10.43021 12.22214 12.83395C11.81539 15.25277 12.15562 17.6279 12.63734 18.80381C12.83827 19.29446 12.60346 19.8551 12.1128 20.05603C11.62224 20.25706 11.0616 20.02224 10.86058 19.53158C10.22304 17.97514 9.87216 15.2304 10.32874 12.51552C10.78781 9.78549 12.10214 6.88484 15.00461 5.29743C15.46973 5.04302 16.05312 5.21388 16.30752 5.67904z" + fill="#1F9F81ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/shortplay.svg b/assets/zone_v2_icon/shortplay.svg new file mode 100644 index 0000000..dae6736 --- /dev/null +++ b/assets/zone_v2_icon/shortplay.svg @@ -0,0 +1,26 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M3.28234 9.44915C3.28234 8.65385 3.92704 8.00915 4.72234 8.00915L18.60384 8.00915C19.3991 8.00915 20.04384 8.65385 20.04384 9.44915L20.04384 18.55642C20.04384 19.35168 19.3991 19.99642 18.60384 19.99642L4.72234 19.99642C3.92704 19.99642 3.28234 19.35168 3.28234 18.55642L3.28234 9.44915z" + fill="#6D69E4ff"></path> + <path + d="M3.30774 6.48804C3.30774 5.77451 3.83026 5.16858 4.53603 5.06368L10.46851 4.18192C11.26406 4.06368 12.07267 4.06356 12.86813 4.18158L18.81648 5.06397C19.52246 5.1687 20.04518 5.77471 20.04518 6.48839L20.04518 8.03538L3.30774 8.03538L3.30774 6.48804z" + fill="#FDDE80ff"></path> + <path + d="M3.2646 18.55642L3.2646 8.01092L10.72051 8.01092C10.72051 10.45459 8.77914 15.92371 4.72764 15.92371C6.42906 15.92371 6.81611 17.75664 6.79081 19.16352C6.78217 19.64362 6.36905 19.99642 5.88889 19.99642L4.7046 19.99642C3.90932 19.99642 3.2646 19.35168 3.2646 18.55642z" + fill="#9796EDff"></path> + <path + d="M20.04586 18.55642L20.04586 8.01094L12.59002 8.01094C12.59002 10.45459 14.53133 15.92371 18.58282 15.92371C16.88141 15.92371 16.49434 17.75664 16.51968 19.16352C16.52832 19.64362 16.94141 19.99642 17.4216 19.99642L18.60586 19.99642C19.40112 19.99642 20.04586 19.35168 20.04586 18.55642z" + fill="#9796EDff"></path> + <path + d="M6.42128 8.02812L3.28242 8.02812L3.28242 16.0439C6.1361 16.0439 6.56402 10.70006 6.42128 8.02812z" + fill="#6D69E4ff"></path> + <path + d="M16.90704 8.02812L20.04586 8.02812L20.04586 16.0439C17.19216 16.0439 16.76429 10.70006 16.90704 8.02812z" + fill="#6D69E4ff"></path> + <path + d="M3.2646 15.24941L5.88621 15.24941C6.4164 15.24941 6.84621 15.6792 6.84621 16.20941L6.84621 16.20941C6.84621 16.73962 6.4164 17.16941 5.88621 17.16941L3.2646 17.16941L3.2646 15.24941z" + fill="#FDDE80ff"></path> + <path + d="M20.04586 15.24941L17.42016 15.24941C16.88995 15.24941 16.46016 15.6792 16.46016 16.20941L16.46016 16.20941C16.46016 16.73962 16.88995 17.16941 17.42016 17.16941L20.04586 17.16941L20.04586 15.24941z" + fill="#FDDE80ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/sports.svg b/assets/zone_v2_icon/sports.svg new file mode 100644 index 0000000..70f6360 --- /dev/null +++ b/assets/zone_v2_icon/sports.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M11.96112 11.90266L12.51312 12.57888C12.73104 12.84586 12.83904 13.18579 12.81494 13.52957C12.79085 13.87334 12.63658 14.19494 12.38362 14.4289L6.04611 20.28893C5.83904 20.48045 5.56644 20.58538 5.2844 20.58211C5.00236 20.57875 4.7323 20.46749 4.52977 20.27117C4.32434 20.07216 4.20036 19.80374 4.18199 19.51834C4.16362 19.23283 4.25216 18.95078 4.43037 18.7271L6.93946 15.57552L9.85382 11.91571C9.97968 11.7576 10.13942 11.62973 10.32115 11.54141C10.50298 11.45309 10.70227 11.40653 10.90435 11.40528C11.10643 11.40403 11.3063 11.4481 11.48918 11.53411C11.67206 11.62022 11.83334 11.74618 11.96112 11.90266z" + fill="#1F9F81ff"></path> + <path + d="M16.60733 3.48445C17.30227 3.48483 17.97043 3.75239 18.47347 4.23176C18.97651 4.71111 19.27603 5.36557 19.30992 6.05964C19.34381 6.75371 19.10957 7.43424 18.65558 7.96035C18.2017 8.48647 17.56282 8.81788 16.87123 8.88599L18.26746 9.94675C18.36806 10.02369 18.50237 10.0373 18.61651 9.98345L20.31802 9.18298C20.5559 9.07102 20.82662 9.05058 21.07862 9.12555C21.33053 9.20052 21.54614 9.36564 21.6841 9.58942C21.82022 9.81035 21.86755 10.07472 21.81638 10.32912C21.76522 10.58362 21.61939 10.80912 21.40838 10.96022L18.49757 13.0463C18.27658 13.2047 18.01296 13.29283 17.74118 13.29926C17.46931 13.3057 17.20186 13.23014 16.97357 13.0824L15.44717 12.09437L14.42717 13.19837L16.05888 15.12403C16.09757 15.16934 16.13309 15.21725 16.16544 15.26726L16.21037 15.34358C16.38432 15.6576 16.42637 16.02787 16.3273 16.37299C16.22822 16.71802 15.9961 17.00957 15.68208 17.18352L11.24246 19.64112C10.98701 19.78234 10.6872 19.82035 10.40458 19.7473C10.12205 19.67424 9.87821 19.49568 9.72317 19.24829C9.56556 18.99667 9.50644 18.69571 9.55721 18.4031C9.60797 18.11059 9.76512 17.84707 9.9983 17.66333L12.43757 15.74112L9.98122 14.16269L9.9457 14.13898C9.93869 14.13437 9.93178 14.12966 9.92496 14.12486L9.60547 13.95917C9.44086 13.87421 9.29545 13.75632 9.17823 13.6129C9.06103 13.46938 8.9745 13.30339 8.92404 13.12512C8.87357 12.94694 8.86022 12.76022 8.88483 12.57658C8.90943 12.39293 8.97147 12.21638 9.06708 12.0577L10.72368 9.31018L10.01366 8.9907C9.96048 8.96686 9.90202 8.95716 9.84403 8.96255C9.78595 8.96794 9.73027 8.98823 9.68237 9.02147L7.82232 10.30646C7.60337 10.45786 7.338 10.52707 7.07301 10.50182C6.80803 10.47658 6.56048 10.35859 6.37402 10.16861C6.28791 10.08096 6.22047 9.97679 6.17576 9.86235C6.13105 9.74791 6.10999 9.62558 6.11386 9.50278C6.11773 9.37997 6.14645 9.25923 6.19828 9.14782C6.25011 9.03642 6.32398 8.93669 6.41543 8.85463L9.38007 6.1935C9.55734 6.03445 9.77347 5.925 10.00656 5.87618C10.23965 5.82735 10.48147 5.8409 10.70765 5.91543L14.02493 7.00758C13.89667 6.60188 13.86595 6.17168 13.93507 5.75185C14.00419 5.33202 14.17133 4.93441 14.42285 4.59125C14.67437 4.24808 15.00326 3.96903 15.38275 3.77674C15.76234 3.58444 16.18186 3.4843 16.60733 3.48445L16.60733 3.48445z" + fill="#57D587ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/tech.svg b/assets/zone_v2_icon/tech.svg new file mode 100644 index 0000000..9874d4e --- /dev/null +++ b/assets/zone_v2_icon/tech.svg @@ -0,0 +1,23 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M12.02688 16.19126L9.47718 16.19126L8.48827 20.24736C8.41458 20.54966 8.64349 20.84102 8.95461 20.84102L12.02688 20.84102L15.09946 20.84102C15.41059 20.84102 15.63955 20.54966 15.56582 20.24736L14.57693 16.19126L12.02688 16.19126z" + fill="#FDDE80ff"></path> + <path + d="M12.0265 5.11161C11.68627 5.11161 11.40749 4.83518 11.40749 4.49694L11.40749 2.92935C11.40749 2.59111 11.68627 2.31468 12.0265 2.31468C12.36662 2.31468 12.6455 2.59111 12.6455 2.92935L12.6455 4.49694C12.6455 4.83518 12.36662 5.11161 12.0265 5.11161z" + fill="#00B9E7ff"></path> + <path + d="M5.44948 12.45869L5.44948 10.1089C5.44948 6.51677 8.40948 3.57738 12.02678 3.57738C15.64464 3.57738 18.60461 6.51677 18.60461 10.1089L18.60461 12.45869C18.60461 12.81619 18.31267 13.10611 17.95267 13.10611L6.1014 13.10611C5.74138 13.10611 5.44948 12.81619 5.44948 12.45869z" + fill="#00B9E7ff"></path> + <path + d="M18.30816 16.26451L5.74677 16.26451C4.34618 16.26451 3.20062 15.15648 3.20062 13.80269C3.20062 12.44851 4.34618 11.34048 5.74677 11.34048L18.30816 11.34048C19.7088 11.34048 20.85427 12.44851 20.85427 13.80269C20.85427 15.15648 19.7088 16.26451 18.30816 16.26451z" + fill="#59E1F9ff"></path> + <path + d="M18.0864 13.80269C18.0864 14.2633 17.71018 14.63683 17.2463 14.63683C16.78205 14.63683 16.40621 14.2633 16.40621 13.80269C16.40621 13.34208 16.78205 12.96845 17.2463 12.96845C17.71018 12.96845 18.0864 13.34208 18.0864 13.80269z" + fill="#00B9E7ff"></path> + <path + d="M7.64822 13.80259C7.64822 14.2632 7.272 14.63683 6.80816 14.63683C6.3439 14.63683 5.9681 14.2632 5.9681 13.80259C5.9681 13.34198 6.3439 12.96835 6.80816 12.96835C7.272 12.96835 7.64822 13.34198 7.64822 13.80259z" + fill="#00B9E7ff"></path> + <path + d="M12.91315 13.8025C12.91315 14.2631 12.53693 14.63674 12.07315 14.63674C11.6089 14.63674 11.23306 14.2631 11.23306 13.8025C11.23306 13.34189 11.6089 12.96826 12.07315 12.96826C12.53693 12.96826 12.91315 13.34189 12.91315 13.8025z" + fill="#00B9E7ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/travel.svg b/assets/zone_v2_icon/travel.svg new file mode 100644 index 0000000..e2891a1 --- /dev/null +++ b/assets/zone_v2_icon/travel.svg @@ -0,0 +1,26 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M7.28637 20.13062C7.28637 19.42819 7.85893 18.85872 8.56137 18.85872C9.2638 18.85872 9.83635 19.42819 9.83635 20.13062C9.83635 20.83306 9.2638 21.40253 8.56137 21.40253C7.85893 21.40253 7.28637 20.83306 7.28637 20.13062z" + fill="#59E1F9ff"></path> + <path + d="M14.51731 20.13062C14.51731 19.42819 15.08986 18.85872 15.79229 18.85872C16.49472 18.85872 17.06726 19.42819 17.06726 20.13062C17.06726 20.83306 16.49472 21.40253 15.79229 21.40253C15.08986 21.40253 14.51731 20.83306 14.51731 20.13062z" + fill="#59E1F9ff"></path> + <path + d="M9.77107 3.69966C9.29394 3.69966 8.90712 4.08648 8.90712 4.56366L8.90712 9.36919L7.75512 9.36919L7.75512 4.56366C7.75512 3.45025 8.65771 2.54766 9.77107 2.54766L14.35613 2.54766C15.46954 2.54766 16.37213 3.45025 16.37213 4.56366L16.37213 9.63337L15.22013 9.63337L15.22013 4.56366C15.22013 4.08648 14.83325 3.69966 14.35613 3.69966L9.77107 3.69966z" + fill="#59E1F9ff"></path> + <path + d="M7.37112 4.56367C7.37112 3.23819 8.44563 2.16366 9.77107 2.16366L14.35613 2.16366C15.6816 2.16366 16.75613 3.23818 16.75613 4.56366L16.75613 10.01737L14.83613 10.01737L14.83613 4.56366C14.83613 4.29856 14.62118 4.08366 14.35613 4.08366L9.77107 4.08366C9.50603 4.08366 9.29112 4.29856 9.29112 4.56367L9.29112 9.7532L7.37112 9.7532L7.37112 4.56367zM9.77107 2.93166C8.86979 2.93166 8.13912 3.66233 8.13912 4.56367L8.13912 8.9852L8.52312 8.9852L8.52312 4.56367C8.52312 3.87442 9.08187 3.31566 9.77107 3.31566L14.35613 3.31566C15.04541 3.31566 15.60413 3.87441 15.60413 4.56366L15.60413 9.24937L15.98813 9.24937L15.98813 4.56366C15.98813 3.66233 15.25747 2.93166 14.35613 2.93166L9.77107 2.93166z" + fill="#59E1F9ff"></path> + <path + d="M9.77146 4.03555C9.47984 4.03555 9.24345 4.27194 9.24345 4.56355L9.24345 4.80656C9.24345 5.31025 8.83513 5.71857 8.33145 5.71857C7.82776 5.71857 7.41945 5.31025 7.41945 4.80656L7.41945 4.56355C7.41945 3.26458 8.47247 2.21155 9.77146 2.21155L14.35642 2.21155C15.65539 2.21155 16.70842 3.26458 16.70842 4.56355L16.70842 4.90056C16.70842 5.40424 16.30013 5.81256 15.79642 5.81256C15.2928 5.81256 14.88442 5.40424 14.88442 4.90056L14.88442 4.56355C14.88442 4.27194 14.64806 4.03555 14.35642 4.03555L9.77146 4.03555z" + fill="#59E1F9ff"></path> + <path + d="M5.11429 8.49827C5.11429 7.7029 5.75914 7.05815 6.55452 7.05827C10.23398 7.05876 13.91347 7.05902 17.59296 7.05831C18.38842 7.05816 19.03334 7.70292 19.03334 8.49836L19.03334 18.42451C19.03334 19.21978 18.3887 19.86451 17.59334 19.86451C13.91366 19.86451 10.23398 19.86451 6.55429 19.86451C5.75901 19.86451 5.11429 19.21978 5.11429 18.42451L5.11429 8.49827z" + fill="#00B9E7ff"></path> + <path + d="M8.86945 11.22643C8.86945 10.69622 9.29926 10.26643 9.82944 10.26643C10.35965 10.26643 10.78944 10.69622 10.78944 11.22643L10.78944 15.69638C10.78944 16.22659 10.35965 16.65638 9.82944 16.65638C9.29926 16.65638 8.86945 16.22659 8.86945 15.69638L8.86945 11.22643z" + fill="#FDDE80ff"></path> + <path + d="M13.35821 11.22643C13.35821 10.69622 13.788 10.26643 14.31821 10.26643C14.84842 10.26643 15.27821 10.69622 15.27821 11.22643L15.27821 15.69638C15.27821 16.22659 14.84842 16.65638 14.31821 16.65638C13.788 16.65638 13.35821 16.22659 13.35821 15.69638L13.35821 11.22643z" + fill="#FDDE80ff"></path> +</svg> \ No newline at end of file diff --git a/assets/zone_v2_icon/vlog.svg b/assets/zone_v2_icon/vlog.svg new file mode 100644 index 0000000..bb8343d --- /dev/null +++ b/assets/zone_v2_icon/vlog.svg @@ -0,0 +1,26 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="100%" height="100%"> + <path + d="M19.21968 13.77802C19.42733 13.68547 19.56115 13.47936 19.56115 13.25194L19.56115 10.74586L20.71315 9.59381L20.71315 14.2224C20.71315 14.90957 20.30602 15.53146 19.67616 15.80621L13.80115 18.3696L10.51142 17.65949L19.21968 13.77802z" + fill="#6D69E4ff"></path> + <path + d="M19.56115 10.74586L20.71315 10.74586L20.71315 11.32186C20.71315 11.6399 20.4552 11.89786 20.13715 11.89786L19.56115 11.89786L19.56115 10.74586z" + fill="#6D69E4ff"></path> + <path + d="M18.40877 7.866C18.40877 7.54788 18.66662 7.29 18.98477 7.29L20.13677 7.29C20.45491 7.29 20.71277 7.54788 20.71277 7.866L20.71277 10.74595C20.71277 11.0641 20.45491 11.32195 20.13677 11.32195L18.98477 11.32195C18.66662 11.32195 18.40877 11.0641 18.40877 10.74595L18.40877 7.866z" + fill="#6D69E4ff"></path> + <path + d="M17.54477 3.8339L5.44875 3.8339C4.65346 3.8339 4.00875 4.47862 4.00875 5.2739L4.00875 12.76195C4.00875 13.55722 4.65347 14.20195 5.44875 14.20195L17.54477 14.20195C18.34003 14.20195 18.98477 13.55722 18.98477 12.76195L18.98477 5.2739C18.98477 4.47862 18.34003 3.8339 17.54477 3.8339z" + fill="#6D69E4ff"></path> + <path + d="M6.31312 6.13781C6.31312 5.50158 6.82889 4.98581 7.46512 4.98581L14.95315 4.98581C15.58934 4.98581 16.10515 5.50158 16.10515 6.13781L16.10515 11.89786C16.10515 12.53405 15.58934 13.04986 14.95315 13.04986L7.46512 13.04986C6.82889 13.04986 6.31312 12.53405 6.31312 11.89786L6.31312 6.13781z" + fill="#FDDE80ff"></path> + <path + d="M9.76877 7.50189C9.76877 7.04184 10.2815 6.76744 10.66426 7.02263L13.08182 8.63436C13.42387 8.86236 13.42387 9.36489 13.08182 9.59289L10.66426 11.20464C10.2815 11.45981 9.76877 11.18544 9.76877 10.72531L9.76877 7.50189z" + fill="#6D69E4ff"></path> + <path + d="M10.34515 16.50586C10.34515 15.7105 10.98989 15.06586 11.78515 15.06586L13.51315 15.06586C14.30842 15.06586 14.95315 15.7105 14.95315 16.50586L14.95315 19.09786C14.95315 19.89312 14.30842 20.53786 13.51315 20.53786L11.78515 20.53786C10.98989 20.53786 10.34515 19.89312 10.34515 19.09786L10.34515 16.50586z" + fill="#6D69E4ff"></path> + <path + d="M10.34515 17.8895L14.95315 17.8895L14.95315 18.8495L10.34515 18.8495L10.34515 17.8895z" + fill="#9796EDff"></path> +</svg> \ No newline at end of file diff --git a/docs/APP_widget/splash.md b/docs/APP_widget/splash.md new file mode 100644 index 0000000..2a3179c --- /dev/null +++ b/docs/APP_widget/splash.md @@ -0,0 +1,567 @@ +# APP端开屏图片 + +## 获取APP端开屏图片列表 + +> https://app.bilibili.com/x/v2/splash/brand/list + +*请求方式:GET* + +鉴权方式:APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-----|-------|---------|-----| +| appkey | str | APP密钥 | APP方式必要 | | +| ts | num | 当前时间戳 | APP方式必要 | | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|---------------------------------------| +| code | num | 返回值 | 0:成功<br />-3:API校验密匙错误<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------------|-------|--------|--------| +| pull_interval | num | 1800 | 作用尚不明确 | +| forcibly | bool | false | 作用尚不明确 | +| rule | str | order | 作用尚不明确 | +| list | array | 开屏图片列表 | | +| show | array | 默认显示项 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|-----------|-----| +| 0 | obj | 开屏图片1 | | +| n | obj | 开屏图片(n+1) | | +| …… | obj | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|---------------------|-----| +| id | num | 开屏图片id | | +| thumb | str | 开屏图片url | | +| logo_url | str | “bilibili”logo图片url | | + +`data`中的`show`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|-------|-----| +| 0 | obj | 套了个娃? | | + +`show`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|--------|--------| +| id | num | 开屏图片id | | +| begin_time | num | 起始时间? | 时间戳 | +| end_time | num | 结束时间? | 时间戳 | +| probability | num | 0 | 作用尚不明确 | +| duration | num | 显示时间? | 单位为毫秒 | + +**示例:** + +```shell +curl -G 'https://app.bilibili.com/x/v2/splash/brand/list' \ +--data-urlencode 'appkey=1d8b6e7d45233436' \ +--data-urlencode 'ts=0' \ +--data-urlencode 'sign=78a89e153cd6231a4a4d55013aa063ce' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "pull_interval": 1800, + "forcibly": false, + "rule": "order", + "list": [ + { + "id": 10, + "thumb": "http://i0.hdslb.com/bfs/archive/e2d2f57e08b511d1a47203859f7bddb4ef9d4e16.png", + "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png" + }, + { + "id": 11, + "thumb": "http://i0.hdslb.com/bfs/archive/fe737da5cdedf9dad038e5fd30e957be8a063bc2.png", + "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png" + }, + { + "id": 12, + "thumb": "http://i0.hdslb.com/bfs/archive/574469a4a20f41ba4dc9ecd41d15f94eea875ed9.png", + "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png" + }, + { + "id": 13, + "thumb": "http://i0.hdslb.com/bfs/archive/af0f4f611faa34340bd4f91def1973ccbfb8fbb3.png", + "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png" + }, + { + "id": 14, + "thumb": "http://i0.hdslb.com/bfs/archive/1d40e975b09d5c87b11b3ae0c9ce6c6b82f63d9e.png", + "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png" + } + ], + "show": [ + { + "id": 12, + "begin_time": 1597564800, + "end_time": 1630753108, + "probability": 0, + "duration": 700 + } + ] + } +} +``` + +</details> + +如id=11的图片为: + +<img src="https://i0.hdslb.com/bfs/archive/fe737da5cdedf9dad038e5fd30e957be8a063bc2.png" referrerpolicy="no-referrer" /> + + +## 获取APP端开屏幕广告信息 + +> https://app.bilibili.com/x/v2/splash/list + +*请求方式: GET* + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|-----------------------|-----|-----| +| build | int | 客户端内部版本号 | 必要 | | +| mobi_app | str | android, iphone, ipad | 必要 | | +| platform | str | android, ios | 必要 | | +| height | int | 屏幕高度 | 必要 | | +| width | int | 屏幕宽度 | 必要 | | +| birth | str | 生日日期(四位数,例 0101) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|---------------------------------------| +| code | num | 返回值 | 0:成功<br />-3:API校验密匙错误<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------|--------|---------------------|---------| +| splash_request_id | 当前请求id | 长度为33, 前13位是当前秒级时间戳 | | +| max_time | int | 最长显示时间? | | +| min_interval | int | 最少显示时间? | 千分之一秒单位 | +| pull_interval | int | 显示时间? | | +| keep_ids | int | 显示时间? | | +| list | list | 广告 list | | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------------------|-------|---------------|--------| +| id | int | 广告id | | +| type | int | 1 | | +| card_type | int | 39 | | +| duration | int | 持续时间? | | +| begin_time | int | 开始展示时间 | 秒级时间戳 | +| end_time | int | 停止展示时间 | 毫秒级时间戳 | +| thumb | url | 广告图片 | | +| hash | str | 作用尚不明确 | | +| logo_url | str | 空值 | | +| logo_hash | str | 空值 | | +| skip | int | 是否跳转? | | +| uri | str | 跳转的url | | +| video_url | str | 视频url | | +| video_hash | str | 视频hash | | +| video_width | num | 视频宽度 | | +| video_height | num | 视频高度 | | +| uri_title | str | 空值 | | +| source | int | 929 | | +| cm_mark | int | 1 | | +| ad_cb | str | 作用尚不明确 | | +| resource_id | int | 926 | | +| request_id | str | 作用尚不明确 | | +| client_ip | str | 客户端IP | | +| is_ad | bool | 作用尚不明确 | | +| is_ad_loc | bool | 作用尚不明确 | | +| schema_title | str | 滑动进入第三方应用 | | +| schema_callup_white_list | array | 跳转的 APP 的白名单 | | +| extra | obj | 显示信息? | | +| enable_pre_download | bool | 是否可以当场下载 APP? | | +| enable_background_download | bool | 是否可以静默下载 APP? | | +| interact_type | int | 是否可以跳转(互动)? | | +| interact_url | str | 跳转(互动) url | | +| interact_distance | int | 作用尚不明确 | | +| guide_button_list | array | 所有的按钮 | | +| mark_with_skip_style | num | 作用尚不明确 | | +| skip_button_height | num | 作用尚不明确 | | + +`extra`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------------------|-------|-----|-----| +| use_ad_web_v2 | bool | | | +| show_urls | array | | | +| click_urls | array | | | +| show_1s_urls | array | | | +| download_whitelist | array | | | +| open_whitelist | array | | | +| card | obj | | | +| report_time | num | | | +| sales_type | num | | | +| special_industry | bool | | | +| preload_landingpage | num | | | +| share_info | obj | | | +| upzone_entrance_type | num | | | +| upzone_entrance_report_id | num | | | +| topview_pic_url | str | | | +| topview_video_url | str | | | +| click_area | num | | | +| shop_id | num | | | +| up_mid | num | | | +| track_id | str | | | +| enable_store_direct_launch | int | | | +| enable_double_jump | bool | | | +| store_callup_card | bool | | | +| enable_h5_alert | bool | | | +| special_industry_style | num | | | +| macro_replace_priority | num | | | +| feedback_panel_style | num | | | +| ad_content_type | num | | | +| enable_h5_pre_load | num | | | +| hot_activity_id | num | | | +| product_id | num | | | +| landingpage_download_style | num | | | + +`guide_button_list` 中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|------------------------------|-------|-----|-------| +| id | int | | | +| x | int | | | +| y | int | | | +| bg_color | str | | | +| bg_color_night | str | | | +| text_color | str | | | +| text_color_night | str | | | +| guide_instructions | str | | | +| guide_instructions_new | str | 空值 | | +| width | str | | | +| jump_url | str | | | +| schema_package_name | str | | | +| schema_title | str | | | +| schema_title_new | str | 空值 | | +| height | str | | | +| slide_threshold_value | str | | | +| slide_border_color | str | | | +| guide_image_url | str | | | +| guide_image_md5 | str | | | +| interact_style | str | | | +| jump_image_url | str | | | +| jump_image_md5 | str | | | +| schema_image_url | str | | | +| schema_image_md5 | str | | | +| click_expand_ratio | str | | | +| logo_image_url | str | | | +| logo_image_md5 | str | | | +| related_ids | array | 空 | | +| schema_list | array | 空 | | +| font_ratio | num | | | +| seq | num | | | +| degrade_type | num | | | +| twist_angle | num | | | +| twist_speed | num | | | +| secondary_guide_instructions | str | | | +| secondary_font_ratio | num | | | +| secondary_text_color | str | | | +| secondary_text_color_night | str | | | +| activity_time | num | | 秒级时间戳 | +| time_show_type | num | | | + +**示例:** + +```shell +curl -X GET 'https://app.bilibili.com/x/v2/splash/list' \ + --data-urlencode 'build=999999999' \ + --data-urlencode 'mobi_app=android' \ + --data-urlencode 'platform=android' \ + --data-urlencode 'height=1920' \ + --data-urlencode 'width=1080' \ + --data-urlencode 'birth=0101' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "max_time": 4, + "min_interval": 14400, + "pull_interval": 900, + "keep_ids": null, + "list": [ + { + "id": 9460, + "type": 1, + "card_type": 39, + "duration": 5, + "begin_time": 1663689600, + "end_time": 1663775999, + "thumb": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/cb001c291c6011940e29531dcce6b1e8.webp", + "hash": "712d3df973f99fdcd30c2419d19630dc", + "logo_url": "", + "logo_hash": "", + "skip": 1, + "uri": "https://market.m.taobao.com/app/mwdk-industry/mwdk-shopping-base/pages/peppa.html?disableNav=YES&merchantCode=HM&pageId=105240&path=%2Fact%2Frax%2Fmanual1455861656935693595&renderChannelCode=HM&siteCode=HM_8_7dd8299642994fa196f9a9aae4fd4391_3&spma=a225z&usePayment=alipayMiniApp&utm_campaign=dwlx&utm_source=1234&targetShopId=199273419", + "video_url": "http://upos-sz-static.bilivideo.com/ssaxcode/89/jl/n220831a21uql976d44zun4y0ykmjl89-1-SPLASH.mp4", + "video_hash": "ae10333c160452cc2755d079db10b597", + "video_width": 1080, + "video_height": 1920, + "uri_title": "", + "source": 929, + "cm_mark": 1, + "ad_cb": "COfrARC7jxUY9EkgADDWwCE4oQdCIDE2NjM2NDY2MzY1ODhxMTcyYTI2YTE5MmE5NnE1NDE0SKy0xMi1MFIG5aSp5rSlaP///////////wFw////////////AYABS4gB5+sBsgEg8mQFw0bBxGOGYE8OBhMOd3DE8OGFZXhookrFX4s3UrrwAruPFdgD9Ek=", + "resource_id": 926, + "request_id": "1663646636588q172a26a192a96q5414", + "client_ip": "117.14.146.37", + "is_ad": true, + "is_ad_loc": true, + "schema_title": "滑动进入第三方应用", + "schema_callup_white_list": [ + "tmall", + "taobao", + "openapp.jdmobile", + "weixin", + "alipays", + "tbopen", + "eleme", + "qqmusic", + "pddopen", + "upwallet", + "yocial://plaza/?tab=0", + "hiapplink", + "meiju", + "midea-meiju", + "uclink", + "qklink", + "taobaolite", + "lazyaudio", + "meituanwaimai", + "baiduboxapp://", + "baiduboxapp", + "fleamarket", + "dewuapp", + "duappmoblink", + "cmblife", + "imeituan", + "vmall", + "music", + "pinduoduo" + ], + "extra": { + "use_ad_web_v2": true, + "show_urls": [ + "https://g.cn.miaozhen.com/x/k=2315612&p=8EUuC&dx=__IPDX__&rt=2&pro=s&ns=__IP__&ni=__IESID__&v=__LOC__&xa=__ADPLATFORM__&tr=__REQUESTID__&vg=__AUTOPLAY__&nh=__AUTOREFRESH__&mo=__OS__&m0=__OPENUDID__&m0a=__DUID__&m1=__ANDROIDID1__&m1a=__ANDROIDID__&m2=__IMEI__&m4=__AAID__&m5=__IDFA__&m6=__MAC1__&m6a=__MAC__&m11=__OAID__&m14=__CAID__&m5a=__IDFV__&mn=__ANAME__&m5b=__IDFA1__&m11a=__OAID1__&m14a=__CAID1__&o=" + ], + "click_urls": [ + "https://e.cn.miaozhen.com/r/k=2315612&p=8EUuC&dx=__IPDX__&rt=2&pro=s&ns=__IP__&ni=__IESID__&v=__LOC__&xa=__ADPLATFORM__&tr=__REQUESTID__&mo=__OS__&m0=__OPENUDID__&m0a=__DUID__&m1=__ANDROIDID1__&m1a=__ANDROIDID__&m2=__IMEI__&m4=__AAID__&m5=__IDFA__&m6=__MAC1__&m6a=__MAC__&m11=__OAID__&m14=__CAID__&m5a=__IDFV__&mn=__ANAME__&m5b=__IDFA1__&m11a=__OAID1__&m14a=__CAID1__&o=" + ], + "show_1s_urls": [], + "download_whitelist": [], + "open_whitelist": [ + "tmall", + "taobao", + "openapp.jdmobile", + "weixin", + "alipays", + "tbopen", + "eleme", + "qqmusic", + "pddopen", + "upwallet", + "yocial://plaza/?tab=0", + "hiapplink", + "meiju", + "midea-meiju", + "uclink", + "qklink", + "taobaolite", + "lazyaudio", + "meituanwaimai", + "baiduboxapp://", + "baiduboxapp", + "fleamarket", + "dewuapp", + "duappmoblink", + "cmblife", + "imeituan", + "vmall", + "music", + "pinduoduo" + ], + "card": { + "card_type": 0, + "extreme_team_status": false, + "support_transition": false, + "under_player_interaction_style": 0, + "grade_denominator": 0, + "star_level": 0, + "live_booking_population_threshold": 0, + "ori_mark_hidden": 0, + "use_multi_cover": false, + "fold_time": 0, + "live_room_popularity": 0, + "live_tag_show": false, + "grade_level": 0 + }, + "report_time": 0, + "sales_type": 75, + "special_industry": false, + "preload_landingpage": 0, + "share_info": {}, + "upzone_entrance_type": 0, + "upzone_entrance_report_id": 0, + "topview_pic_url": "", + "topview_video_url": "", + "click_area": 0, + "shop_id": 0, + "up_mid": 0, + "track_id": "pbaes.Y5ATuPVlG6ysPF6cvl6W8B-BYexhSJzrKH3NYfC3KIHDb9W5cxPA4_FTEPWYDED5DjfRwb3tcrLppYAqQ87SSg==", + "enable_store_direct_launch": 0, + "enable_double_jump": false, + "store_callup_card": false, + "enable_h5_alert": false, + "special_industry_style": 0, + "macro_replace_priority": 1, + "feedback_panel_style": 0, + "ad_content_type": 0, + "enable_h5_pre_load": 0, + "hot_activity_id": 0, + "product_id": 0, + "landingpage_download_style": 2 + }, + "enable_pre_download": true, + "enable_background_download": true, + "interact_type": 1, + "interact_url": "https://market.m.taobao.com/app/mwdk-industry/mwdk-shopping-base/pages/peppa.html?disableNav=YES&merchantCode=HM&pageId=105240&path=%2Fact%2Frax%2Fmanual1455861656935693595&renderChannelCode=HM&siteCode=HM_8_7dd8299642994fa196f9a9aae4fd4391_3&spma=a225z&usePayment=alipayMiniApp&utm_campaign=dwlx&utm_source=1234&targetShopId=199273419", + "interact_distance": 60, + "guide_button_list": [ + { + "id": 49037, + "x": 50, + "y": 78, + "bg_color": "#80000000", + "bg_color_night": "#80000000", + "text_color": "#FFFFFFFF", + "text_color_night": "#FFFFFFFF", + "guide_instructions": "点击进入活动页", + "guide_instructions_new": "", + "width": 70, + "jump_url": "https://market.m.taobao.com/app/mwdk-industry/mwdk-shopping-base/pages/peppa.html?disableNav=YES&merchantCode=HM&pageId=105240&path=%2Fact%2Frax%2Fmanual1455861656935693595&renderChannelCode=HM&siteCode=HM_8_7dd8299642994fa196f9a9aae4fd4391_3&spma=a225z&usePayment=alipayMiniApp&utm_campaign=dwlx&utm_source=1234&targetShopId=199273419", + "schema_package_name": "", + "schema_title": "", + "schema_title_new": "", + "height": 7, + "slide_threshold_value": 5, + "slide_border_color": "#40FFFFFF", + "guide_image_url": "", + "guide_image_md5": "", + "interact_style": 6, + "jump_image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/f61a66cf54bc71d9bd1b81bde79c0140.json", + "jump_image_md5": "26d8b4b516f83a3f9b15fef643464cc6", + "schema_image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/f61a66cf54bc71d9bd1b81bde79c0140.json", + "schema_image_md5": "26d8b4b516f83a3f9b15fef643464cc6", + "click_expand_ratio": 100, + "logo_image_url": "https://i0.hdslb.com/bfs/sycp/mgk/img/202106/17006d50ec506813727b1cb5c6fc58b1.png", + "logo_image_md5": "86bc1b68ce4708d918cd4e01a975ca17", + "related_ids": [], + "schema_list": [], + "font_ratio": 0.23, + "seq": 0, + "degrade_type": 1, + "twist_angle": 0, + "twist_speed": -1, + "secondary_guide_instructions": "", + "secondary_font_ratio": 0, + "secondary_text_color": "", + "secondary_text_color_night": "", + "activity_time": 1662532059, + "time_show_type": 0 + }, + { + "id": 49040, + "x": 50, + "y": 83, + "bg_color": "#80000000", + "bg_color_night": "#80000000", + "text_color": "#FFFFFFFF", + "text_color_night": "#FFFFFFFF", + "guide_instructions": "即可前往 开吃新品", + "guide_instructions_new": "", + "width": 64, + "jump_url": "https://market.m.taobao.com/app/mwdk-industry/mwdk-shopping-base/pages/peppa.html?disableNav=YES&merchantCode=HM&pageId=105240&path=%2Fact%2Frax%2Fmanual1455861656935693595&renderChannelCode=HM&siteCode=HM_8_7dd8299642994fa196f9a9aae4fd4391_3&spma=a225z&usePayment=alipayMiniApp&utm_campaign=dwlx&utm_source=1234&targetShopId=199273419", + "schema_package_name": "", + "schema_title": "滑动进入第三方应用", + "schema_title_new": "", + "height": 3, + "slide_threshold_value": 5, + "slide_border_color": "#40FFFFFF", + "guide_image_url": "", + "guide_image_md5": "", + "interact_style": 3, + "jump_image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/f61a66cf54bc71d9bd1b81bde79c0140.json", + "jump_image_md5": "26d8b4b516f83a3f9b15fef643464cc6", + "schema_image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/f61a66cf54bc71d9bd1b81bde79c0140.json", + "schema_image_md5": "26d8b4b516f83a3f9b15fef643464cc6", + "click_expand_ratio": 100, + "logo_image_url": "https://i0.hdslb.com/bfs/sycp/mgk/img/202106/17006d50ec506813727b1cb5c6fc58b1.png", + "logo_image_md5": "86bc1b68ce4708d918cd4e01a975ca17", + "related_ids": [ + 49037 + ], + "schema_list": [], + "font_ratio": 0.23, + "seq": 99, + "degrade_type": 0, + "twist_angle": 0, + "twist_speed": -1, + "secondary_guide_instructions": "", + "secondary_font_ratio": 0, + "secondary_text_color": "", + "secondary_text_color_night": "", + "activity_time": 1662532059, + "time_show_type": 0 + } + ], + "mark_with_skip_style": 0, + "skip_button_height": 0.0557 + } + ], + "splash_request_id": "1663646636605q172a24a57a232q5796" + } +} +``` +</details> diff --git a/docs/APP_widget/ver.md b/docs/APP_widget/ver.md new file mode 100644 index 0000000..3296c87 --- /dev/null +++ b/docs/APP_widget/ver.md @@ -0,0 +1,236 @@ +# 获取最新 APP 版本 + +## 获取版本信息 + +> https://app.bilibili.com/x/v2/version + +*请求方法: GET* + +<!--{ + "from": { + "url": "https://app.bilibili.com/" + } +}--> + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| mobi_app | str | 目标客户端类型 | 不必要 | 留空为最新有更新的平台<br />android: Android 版<br />iphone: iPhone 版<br />ipad: iPad HD 版<br />win: UWP 版<br />android_tv_yst: TV 版<br />android_car: 车机版<br />pc_client: PC 客户端 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | int | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 `0` | +| ttl | int | 1 | | +| data | array | 版本信息列表 | | + +`data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| plat | int | 平台 | 0: Android<br />1: iPhone<br />2: iPad HD<br />3: UWP<br />12: TV 版<br />35: 车机版<br />40: PC 客户端 | +| desc | str | 版本描述 | | +| version | str | 版本号 | | +| build | int | 内部版本号 | | + +**示例:** + +```shell +curl -G 'https://app.bilibili.com/x/v2/version' \ +--url-query'mobi_app=android' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "plat": 0, + "desc": "-修复了一些bug,切了个大西瓜~", + "version": "8.9.0", + "build": 8090300, + "ptime": 1723612377 + }, + // ... + { + "plat": 0, + "desc": "[修正]横屏状态下,视频列表加载失败的问题\n[修正]超过48kHz采样率的音频无法播放的问题\n[修正]部分系统黑屏的问题\nPS:帮下面的同学祈祷早日上架", + "version": "2.0.4", + "build": 0, + "ptime": 1382630400 + } + ] +} +``` + +</details> + +## 版本升级 + +> https://app.bilibili.com/x/v2/version/fawkes/upgrade + +*请求方式: GET* + +鉴权方式(非必须):[APP API 签名与鉴权](../misc/sign/APP.md) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| - | - | - | - | - | +| abi | str | 设备 CPU ABI | 不必要 | 如 `arm64-v8a` | +| appid | str | 客户端类型 | 不必要 | 如 `tv.danmaku.bili` | +| brand | str | 设备品牌 | 不必要 | 如 `google` | +| build | int | 当前 APP 版本号 | 必要 | 如 `8000200` | +| channel | str | APP 分发渠道 | 必要 | 如 `master` | +| deviceid | str | 设备唯一 ID | 不必要 | 即 XU-Prefixed BUVID,见 [device_identity](../misc/device_identity.md) | +| env | str | APP 分发环境 | 不必要 | 默认 `prod` | +| iv | int | 当前 APP innerVer | 不必要 | 如 `8000210` | +| mobi_app | str | APP mobi_app | 必要 | 如 `android` | +| model | str | 设备型号 | 不必要 | 如 `Pixel 2 XL` | +| nt | str | - | 必要 | 默认 `1` | +| ov | str | 设备 OS 版本 | 必要 | 安卓即 API Level,如 Android 11 为 `30` | +| platform | str | 设备平台 | 不必要 | 如 `android` | +| screen | str | 设备屏幕参数 | 不必要 | 如 `2712_1440@537.882_537.882` +| sn | int | 当前 APP SN | 必要 | 如 `15088473` | +| vn | str | 当前 APP 版本名称 | 必要 | 如 `8.0.0` | + +**标头参数(Headers):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| - | - | - | - | - | +| app-key | str | APPKey 名称 | 必要 | 大体等同于 [`mobi_app`](../misc/sign/APPKey.md)。特别地:64 位版本粉版客户端应为 `android64` | +| buvid | str | BUVID | 必要 | XU-Prefixed BUVID,见 [device_identity](../misc/device_identity.md) | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| code | int | 返回值 | 0: 成功<br />-304: 木有改动<br />-400: 请求异常 | +| message | str | 错误信息 | 默认为 `0` | +| ttl | int | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| title | str | 标题 | | +| content | str | 内容 | | +| version | str | 最新版本名称 | | +| version_code | int | 最新版本号 | 即 `build` | +| url | str | 下载地址 | | +| size | int | 大小 | 单位字节 | +| md5 | str | MD5 值 | | +| silent | int | 是否静默安装? | | +| upgrade_type | int | 升级类型? | | +| cycle | int | 升级周期? | | +| policy | int | 升级策略? | | +| policy_url | str | 升级策略链接? | | +| ptime | int | 发布时间 | | + +**示例:** + +```shell +curl -G 'https://app.bilibili.com/x/v2/version/fawkes/upgrade' \ +--url-query 'build=1145141' \ +--url-query 'channel=apt' \ +--url-query 'mobi_app=android' \ +--url-query 'nt=awa' \ +--url-query 'ov=qwq' \ +--url-query 'platform=archlinux' \ +--url-query 'sn=919810' \ +--url-query 'vn=!!!' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "title": "升级提醒", + "content": "-修复了一些bug,并吃了一桶冰淇凌~\n-记得检查暑假作业哦!", + "version": "8.10.0", + "version_code": 8100300, + "url": "https://dl.hdslb.com/mobile/pack/android64/15793300/iBiliPlayer-apinkRelease-8.10.0-b15793300.apk", + "size": 132432843, + "md5": "f196c0ea68ff894dab0cf380cafad802", + "silent": 0, + "upgrade_type": 1, + "cycle": 4, + "policy": 0, + "policy_url": "", + "is_gray": 0, + "ptime": 1724207041 + } +} +``` + +</details> + +## 拼接最新版本下载地址 + +> https://api.bilibili.com/x/web-frontend/getappversion + +*请求方法: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---- | ---- | ---- | ---- | ---- | +| target | string | 目标平台 | 目测仅 `pc_electron`, 错误的值会导致返回 `HTTP 404` | +| cdn_url | string | CDN URL | 任意字符串, 默认 `https://dl.hdslb.com/mobile/fixed/bili_win/bili_win-install.exe` | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功<br />-1: need target | +| message | string | 错误消息 | 成功时无此项 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cdn_url | string | CDN URL | 内容同请求参数 `cdn_url` | +| sole_cdn_url | string | 带版本的 CDN URL | `cdn_url + "?v=" + 最新版本` | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/web-frontend/getappversion' \ +--url-query 'target=pc_electron' \ +--url-query 'cdn_url=https://dl.hdslb.com/mobile/fixed/bili_win/bili_win-install.exe' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "cdn_url": "https://dl.hdslb.com/mobile/fixed/bili_win/bili_win-install.exe", + "sole_cdn_url": "https://dl.hdslb.com/mobile/fixed/bili_win/bili_win-install.exe?v=1.16.1-2" + } +} +``` + +</details> diff --git a/docs/activity/info.md b/docs/activity/info.md new file mode 100644 index 0000000..ddf2f68 --- /dev/null +++ b/docs/activity/info.md @@ -0,0 +1,93 @@ +# 活动主题信息 + +## 主题信息 + +> https://api.bilibili.com/x/activity/subject/info + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| - | - | - | - | - | +| sid | num | 活动 id | 必要 | | +| bvid | str | 来源视频 bvid | 非必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| code | num | 返回值 | 0: 成功<br />-400: 请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| id | num | 活动 id | | +| oid | num | 0 | | +| type | num | 13 | | +| state | num | 1 | | +| stime | num | 开始时间 | UNIX 秒级时间戳 | +| etime | num | 结束时间 | UNIX 秒级时间戳 | +| ctime | num | 创建时间 | UNIX 秒级时间戳 | +| mtime | num | 修改时间 | UNIX 秒级时间戳 | +| name | str | 活动名称 | | +| act_url | str | 活动链接 | | +| lstime | num | ? | 作用尚不明确 | +| letime | num | ? | 作用尚不明确 | +| cover | str | 封面图片 | | +| dic | str | 简介 | | +| h5_cover | str | H5 封面 | | +| android_url | str | Android 端活动链接 | | +| ios_url | str | iOS 端活动链接 | | +| child_sids | str | 子活动 id? | | +| calendar | str | 日历? | 空 或 `{}`? | +| lid | num | ? | 仅在传入 bvid 时存在 | + +**示例:** + +```shell +curl -G --url 'https://api.bilibili.com/x/activity/subject/info' \ +--url-query 'sid=4017552' \ +--url-query 'bvid=BV1mKY4e8ELy' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 4017552, + "oid": 0, + "type": 13, + "state": 1, + "stime": 1720540800, + "etime": 1728575999, + "ctime": 1720439769, + "mtime": 1720591285, + "name": "科技猎手2024第2季", + "act_url": "https://www.bilibili.com/blackboard/era/kejilieshou2PC.html", + "lstime": 1720540800, + "letime": 1728575999, + "cover": "https://i0.hdslb.com/bfs/activity-plat/static/98bc38873cc71e154019070975cd20a0/fLOEOStVUV.jpg", + "dic": "科技猎手召集中!投稿赢奖金>>", + "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/98bc38873cc71e154019070975cd20a0/PTIFsXkV0o.jpg", + "android_url": "https://www.bilibili.com/blackboard/era/kejilieshou2H5.html", + "ios_url": "https://www.bilibili.com/blackboard/era/kejilieshou2H5.html", + "child_sids": "", + "calendar": "", + "lid": 294258214 + } +} +``` + +</details> diff --git a/docs/activity/list.md b/docs/activity/list.md new file mode 100644 index 0000000..f187bd5 --- /dev/null +++ b/docs/activity/list.md @@ -0,0 +1,213 @@ +# 活动列表 + +## 获取活动列表 + +> https://api.bilibili.com/x/activity/page/list + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| plat | str | 活动平台类型? | 必要 | 可选范围 [1, 3], 以半角逗号分隔, 默认 `1,3` | +| mold | int | 0 | 非必要 | | +| http | int | 3 | 非必要 | | +| pn | int | 目标页码 | 非必要 | 默认为 `1` | +| ps | int | 每页条数 | 非必要 | 默认为 `15` | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| code | int | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | int | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| list | array | 活动列表 | | +| num | int | 当前页码 | | +| size | int | 每页条数 | | +| total | int | 总条数 | | + +`list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| id | int | 活动 ID | | +| state | int | 1 | | +| stime | int | 开始时间 | UNIX 秒级时间戳 | +| etime | int | 结束时间 | UNIX 秒级时间戳 | +| ctime | int | 创建时间? | UNIX 秒级时间戳, 可能为 0 | +| mtime | int | 修改时间? | UNIX 秒级时间戳, 可能为 0 | +| name | str | 活动名称 | | +| author | str | 空 || +| pc_url | str | 空 || +| rank | int | 0 | | +| h5_url | str | 活动链接 | | +| pc_cover | str | 空 | | +| h5_cover | str | 活动封面 | | +| page_name | str | 页面名称 | | +| plat | int | 活动平台类型? | 即 URL 中 `plat` 参数 | +| desc | str | 活动描述 | | +| click | int | 0 | | +| type | int | 0 | | +| mold | int | 0 | | +| series | int | 0 | | +| dept | int | 0 | | +| reply_id | int | 0 | | +| tp_id | int | 0 | | +| ptime | int | 0 | | +| catalog | int | 0 | | +| creator | str | 空 | | +| spm_id | str | 空 | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/activity/page/list' \ +--url-query 'plat=1,2,3' \ +--url-query 'ps=4' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "id": 207, + "state": 1, + "stime": 1723262400, + "etime": 1724774399, + "ctime": 0, + "mtime": 0, + "name": "原神fes2024", + "author": "", + "pc_url": "", + "rank": 0, + "h5_url": "https://www.bilibili.com/blackboard/era/DK8i0NS7fxwcLBgm.html", + "pc_cover": "", + "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/d32c2bb79f59192cb072d7bf79b61c6d/In2tYOLFTZ.png", + "page_name": "原神fes2024", + "plat": 2, + "desc": "", + "click": 0, + "type": 0, + "mold": 0, + "series": 0, + "dept": 0, + "reply_id": 0, + "tp_id": 0, + "ptime": 0, + "catalog": 0, + "creator": "", + "spm_id": "" + }, + { + "id": 210, + "state": 1, + "stime": 1723219200, + "etime": 1725983999, + "ctime": 0, + "mtime": 0, + "name": "暗区突围端游海外版全员夺金冲榜挑战赛", + "author": "", + "pc_url": "", + "rank": 0, + "h5_url": "https://www.bilibili.com/blackboard/era/UP8CZSTfboDVZuGr.html", + "pc_cover": "", + "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/f9a67e268d55d029e6b27d81246fc59a/LPN9dlcRlW.png", + "page_name": "暗区突围端游海外版全员夺金冲榜挑战赛", + "plat": 2, + "desc": "", + "click": 0, + "type": 0, + "mold": 0, + "series": 0, + "dept": 0, + "reply_id": 0, + "tp_id": 0, + "ptime": 0, + "catalog": 0, + "creator": "", + "spm_id": "" + }, + { + "id": 199, + "state": 1, + "stime": 1723089600, + "etime": 1725897599, + "ctime": 0, + "mtime": 0, + "name": "剑与远征:启程公测创作者激励", + "author": "", + "pc_url": "", + "rank": 0, + "h5_url": "https://www.bilibili.com/blackboard/era/HkHatvvW9nJZXEMh.html", + "pc_cover": "", + "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/7785e7ecb0434c85530b92e3586f32ff/CgKENr0ftC.jpeg", + "page_name": "剑与远征:启程公测创作者激励", + "plat": 2, + "desc": "", + "click": 0, + "type": 0, + "mold": 0, + "series": 0, + "dept": 0, + "reply_id": 0, + "tp_id": 0, + "ptime": 0, + "catalog": 0, + "creator": "", + "spm_id": "" + }, + { + "id": 203, + "state": 1, + "stime": 1723089600, + "etime": 1724255999, + "ctime": 0, + "mtime": 0, + "name": "王者荣耀新英雄少司缘创作激励", + "author": "", + "pc_url": "", + "rank": 0, + "h5_url": "https://www.bilibili.com/blackboard/era/g0gn2j4ZENrCLYLn.html", + "pc_cover": "", + "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/a99ba278036e9fbfa81b9100d13d9e7e/9UHZg6r0Y5.jpg", + "page_name": "王者荣耀新英雄少司缘创作激励", + "plat": 2, + "desc": "", + "click": 0, + "type": 0, + "mold": 0, + "series": 0, + "dept": 0, + "reply_id": 0, + "tp_id": 0, + "ptime": 0, + "catalog": 0, + "creator": "", + "spm_id": "" + } + ], + "num": 1, + "size": 4, + "total": 5391 + } +} +``` + +</details> diff --git a/docs/album/action.md b/docs/album/action.md new file mode 100644 index 0000000..1d42821 --- /dev/null +++ b/docs/album/action.md @@ -0,0 +1,174 @@ +# 相簿操作 + +<details> +<summary>功能已下线</summary> + +## ~~点赞相簿~~ + +> https://api.vc.bilibili.com/link_draw/v2/Vote/operate + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ---------------------- | +| doc_id | num | 相簿id | 必要 | | +| type | num | 操作方式 | 必要 | 1:点赞<br />2:取消赞 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />1:参数错误<br />3:未登录<br />110022:已经操作过了 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---------------------- | +| type | num | 操作方式 | 1:点赞<br />2:取消赞 | + +**示例:** + +点赞相簿`id=99184721` + +```shell +curl 'https://api.vc.bilibili.com/link_draw/v2/Vote/operate' \ +--data-urlencode 'doc_id=99184721' \ +--data-urlencode 'type=1' \ +--data-urlencode 'csrf_token=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "type": 1 + } +} +``` + +</details> + +## ~~收藏相簿~~ + +> https://api.vc.bilibili.com/user_plus/v1/Fav/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ------------ | +| fav_id | num | 相簿id | 必要 | | +| biz_type | num | 2 | 必要 | 作用尚不明确 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:参数错误<br />-500:未登录<br />-507:已收藏 | +| msg | str | 错误信息 | 默认为OK | +| message | str | 错误信息 | 默认为OK | +| data | array | 空 | | + +**示例:** + +收藏相簿`id=99184721` + +```shell +curl 'https://api.vc.bilibili.com/user_plus/v1/Fav/add' \ +--data-urlencode 'fav_id=99184721' \ +--data-urlencode 'biz_type=2' \ +--data-urlencode 'csrf_token=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code": 0, + "msg": "OK", + "message": "OK", + "data": [] +} +``` + +</details> + +## 取消收藏相簿 + +> https://api.vc.bilibili.com/user_plus/v1/Fav/delete + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ------------ | +| fav_id | num | 相簿id | 必要 | | +| biz_type | num | 2 | 必要 | 作用尚不明确 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | --------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:参数错误<br />-500:未登录 | +| msg | str | 错误信息 | 默认为OK | +| message | str | 错误信息 | 默认为OK | +| data | array | 空 | | + +**示例:** + +取消收藏相簿`id=99184721` + +```shell +curl 'https://api.vc.bilibili.com/user_plus/v1/Fav/delete' \ +--data-urlencode 'fav_id=99184721' \ +--data-urlencode 'biz_type=2' \ +--data-urlencode 'csrf_token=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code": 0, + "msg": "OK", + "message": "OK", + "data": [] +} +``` + +</details> +</details> diff --git a/docs/album/activity_list.md b/docs/album/activity_list.md new file mode 100644 index 0000000..4c82f37 --- /dev/null +++ b/docs/album/activity_list.md @@ -0,0 +1,152 @@ +# 相簿活动列表 + +<details> +<summary>功能已下线</summary> + +## 获取相簿热门活动列表 + +> https://api.vc.bilibili.com/photo_activity/v2/Activity/list + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | --------------------------------------------- | +| type | num | 活动类型 | 非必要 | 0:全部<br/>1:展示类<br/>2:比赛类 | +| biz | num | 分区 | 非必要 | 0:全部<br />1:画友<br/>2:摄影<br />默认为0 | +| page_num | num | 页码 | 非必要 | 默认为4 | +| page_size | num | 每页项数 | 非必要 | 默认为0 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------ | +| code | num | 返回值 | 0:成功<br />1:参数错误 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------- | ---- | +| total_count | str | 总计活动数 | | +| items | array | 活动列表 | | + +`data`中的`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ---- | +| 0 | obj | 活动 1 | | +| n | obj | 活动 (n+1) | | +| …… | obj | …… | …… | + +`data`中的`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------- | ------------------------ | +| cover | str | 活动图片url | | +| title | str | 活动标题 | | +| link | str | 活动页面url | | +| type | num | 活动类型 | 1:展示类<br/>2:比赛类 | +| biz | num | 所属分区 | 1:画友<br/>2:摄影 | +| tag | str | 活动关联的TAG | | +| start_time | num | 开始时间 | 时间戳 | +| end_time | num | 结束时间 | 时间戳 | +| desc | str | 备注 | | +| desc_type | num | 活动状态 | 1:已结束<br />2:进行中 | + +**示例:** + +获取`画友`分区,全部类型的5条活动 + +```shell +curl -G 'https://api.vc.bilibili.com/photo_activity/v2/Activity/list' \ +--data-urlencode 'type=0' \ +--data-urlencode 'biz=1' \ +--data-urlencode 'page_num=0' \ +--data-urlencode 'page_size=5' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "total_count": 21, + "items": [ + { + "cover": "http://i0.hdslb.com/bfs/vc/344d175cf88f217ce8bd0f004a2c5e770eff2e03.png", + "title": "#月饼拟人#创作大赛!丰厚奖励等你来拿!", + "link": "https://www.bilibili.com/read/cv1102416", + "type": 1, + "biz": 1, + "tag": "", + "start_time": 1535817600, + "end_time": 1540915200, + "desc": "已结束", + "desc_type": 1 + }, + { + "cover": "http://i0.hdslb.com/bfs/vc/63d48fbc37f0142a9c72e06ebc950d4089f881d6.png", + "title": "「ISLAND」同人绘画大赛", + "link": "https://www.bilibili.com/blackboard/activity-rkOlNomMQ.html", + "type": 2, + "biz": 1, + "tag": "ISLAND同人绘画", + "start_time": 1530720000, + "end_time": 1534435200, + "desc": "已结束", + "desc_type": 1 + }, + { + "cover": "http://i0.hdslb.com/bfs/vc/08d20bc6c10e1e310946ebaaf56c2c90c921644d.jpg", + "title": "我家大师兄脑子有坑同人绘画大赛", + "link": "https://www.bilibili.com/blackboard/activity-S1lV0Ot6M.html", + "type": 2, + "biz": 1, + "tag": "兄坑同人绘画大赛", + "start_time": 1525449600, + "end_time": 1528473600, + "desc": "已结束", + "desc_type": 1 + }, + { + "cover": "http://i0.hdslb.com/bfs/vc/4eb48398ec0824e96fc878235536f2e0b4a8aef5.jpg", + "title": "国宝复“活”计划", + "link": "https://www.bilibili.com/blackboard/activity-SJ4hL_UFz.html", + "type": 2, + "biz": 1, + "tag": "国宝复“活”计划", + "start_time": 1521388800, + "end_time": 1525017600, + "desc": "已结束", + "desc_type": 1 + }, + { + "cover": "http://i0.hdslb.com/bfs/vc/9068f91f62ea5a36cbafff263d7e47af99cc9836.jpg", + "title": "画师专访——管郁生", + "link": "https://www.bilibili.com/blackboard/interview-guanyusheng.html", + "type": 1, + "biz": 1, + "tag": "", + "start_time": 1517414400, + "end_time": 0, + "desc": "进行中", + "desc_type": 2 + } + ] + } +} +``` + +</details> +</details> diff --git a/docs/album/info.md b/docs/album/info.md new file mode 100644 index 0000000..5489857 --- /dev/null +++ b/docs/album/info.md @@ -0,0 +1,249 @@ +# 相簿基本信息 + +<details> +<summary>功能已下线</summary> + +## 获取相簿详细信息 + +>https://api.vc.bilibili.com/link_draw/v1/doc/detail + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | ---- | +| doc_id | num | 目标相簿id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------- | +| code | num | 返回值 | 0:成功<br />110001:找不到目标相簿 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| user | obj | 作者信息 | | +| item | obj | 相簿信息 | | + +`data`中的`user`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------- | ---- | +| uid | num | 作者mid | | +| head_url | str | 头像url | | +| name | str | 昵称 | | +| vip | obj | 会员信息 | | +| upload_count | str | 相簿投稿数 | | + +`user`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ------------------------------------------------- | +| vipType | num | 会员类型 | 0:无<br />1:月度大会员<br />2:年度及以上大会员 | +| vipDueDate | num | 会员到期时间 | 毫秒 时间戳 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 会员开通状态 | 0:无<br />1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +`data`中的`item`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ------------------ | ------------------------------------------------------------ | +| biz | num | 相簿分区 | 1:画友<br />2:摄影<br />3:日常 | +| doc_id | num | 相簿id | | +| poster_uid | num | 作者mid | | +| category | str | 子分区标识 | cos:cosplay<br />daily:日常<br />illustration:插画<br />comic:漫画<br />draw:其他<br />sifu:私服 | +| type | num | 相簿类型 | 0:原创<br />1:同人 | +| title | str | 标题 | | +| tags | array | 相簿TAG | | +| pictures | array | 相簿图片 | | +| source | null | | 作用尚不明确 | +| upload_time | str | 投稿时间(时间码) | YYYY-MM-DD hh:mm:ss | +| upload_timestamp | num | 投稿时间(时间戳) | | +| upload_time_text | str | 投稿时间(文本) | | +| description | str | 简介 | | +| role | null | | 作用尚不明确 | +| settings | obj | 权限配置 | | +| already_collected | num | 是否已收藏 | 需要登录(Cookie)<br />否则恒为0 | +| already_liked | num | 0 | 作用尚不明确 | +| user_status | num | 0 | 作用尚不明确 | +| at_control | str | 空 | 作用尚不明确 | +| view_count | num | 观看数 | | +| like_count | num | 0 | 作用尚不明确 | +| collect_count | num | 收藏数 | | +| verify_status | num | 1 | 作用尚不明确 | +| already_voted | num | 是否已点赞 | 需要登录(Cookie)<br />否则恒为0 | +| vote_count | num | 点赞数 | | +| comment_count | num | 评论数 | | + +`item`中的`tags`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | TAG 1 | | +| n | obj | TAG (n+1) | | +| …… | obj | …… | …… | + +`item`中的`tags`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | --------------- | --------------- | +| tag | str | TAG名 | | +| type | num | 类型? | | +| category | str | TAG所属子分区名 | | +| link | str | 活动页面url | 是活动TAG有此项 | +| text | str | TAG名 | | +| name | str | TAG名 | | + +`item`中的`pictures`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ---- | +| 0 | obj | 图片 1 | | +| n | obj | 图片 (n+1) | | +| …… | obj | …… | …… | + +`item`中的`pictures`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ----------- | +| img_src | str | 图片url | | +| img_width | num | 图片宽度 | | +| img_height | num | 图片高度 | | +| img_size | num | 图片大小 | 单位为KByte | + +`item`中的`settings`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------ | ------------------------------------------------------------ | +| copy_forbidden | num | 禁止转载标志 | 0:不设置转载权限<br />1:开放授权-署名-非商用转载<br />2:作者授权-署名-非商用转载<br />3:禁止转载 | + +**示例:** + +查询相簿`id=99184721`的详细信息 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/detail' \ +--data-urlencode 'doc_id=99184721' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "user": { + "uid": 813818, + "head_url": "https://i2.hdslb.com/bfs/face/26b12390399f3e82fb913922938f8a6662d28665.jpg", + "name": "QYS3", + "vip": { + "vipType": 2, + "vipDueDate": 1613750400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "upload_count": "171" + }, + "item": { + "biz": 1, + "doc_id": 99184721, + "poster_uid": 813818, + "category": "illustration", + "type": 1, + "title": "旅行", + "tags": [ + { + "tag": "魔女之旅", + "type": 4, + "category": "illustration", + "text": "魔女之旅", + "name": "魔女之旅" + }, + { + "tag": "伊蕾娜", + "type": 3, + "category": "illustration", + "text": "伊蕾娜", + "name": "伊蕾娜" + }, + { + "tag": "旅行", + "type": 3, + "category": "illustration", + "text": "旅行", + "name": "旅行" + }, + { + "tag": "魔女", + "type": 3, + "category": "illustration", + "text": "魔女", + "name": "魔女" + } + ], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/d531e3dae34ef65b44ecdb2914d4cc4f5a4da998.jpg", + "img_width": 1236, + "img_height": 1600, + "img_size": 508 + } + ], + "source": null, + "upload_time": "2020-11-23 23:03:12", + "upload_timestamp": 1606143792, + "upload_time_text": "3天前", + "description": "伊蕾娜世界第一~!", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 143699, + "like_count": 0, + "collect_count": 54, + "verify_status": 1, + "already_voted": 0, + "vote_count": 2258, + "comment_count": 98 + } + } +} +``` + +</details> +</details> diff --git a/docs/album/list.md b/docs/album/list.md new file mode 100644 index 0000000..44adb6f --- /dev/null +++ b/docs/album/list.md @@ -0,0 +1,2438 @@ +# 相簿列表 + +<details> +<summary>功能已下线</summary> + +## 获取画友首页列表 + +> https://api.vc.bilibili.com/link_draw/v2/Doc/index + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | ------------------------------------------- | +| type | str | 排序方式 | 必要 | recommend:推荐<br/>hot:最热<br/>new:最新 | +| page_num | num | 页码 | 非必要 | 默认为1 | +| page_size | num | 每页项数 | 非必要 | 默认为45 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------ | +| code | num | 返回值 | 0:成功<br />1:参数错误 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------- | ---- | +| items | array | 相簿列表 | | +| total_count | num | 总计条目数 | | + +`data`中的`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ---- | +| 0 | obj | 相簿 1 | | +| n | obj | 相簿 (n+1) | | +| …… | obj | …… | …… | + +`data`中的`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| user | obj | 作者信息 | | +| item | obj | 相簿信息 | | + +`data`中的`items`数组中的对象中的`user`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------- | ---- | +| uid | num | 作者mid | | +| head_url | str | 头像url | | +| name | str | 昵称 | | + +`data`中的`items`数组中的对象中的`item`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ----- | ---------- | --------------------------------- | +| doc_id | num | 相簿id | | +| poster_uid | num | 作者mid | | +| pictures | array | 相簿图片 | | +| title | str | 标题 | | +| category | str | 子分区名 | | +| upload_time | num | 投稿时间 | 时间戳 | +| already_liked | num | 0 | 作用尚不明确 | +| already_voted | num | 是否已点赞 | 需要登录(Cookie)<br />否则恒为0 | + +`item`中的`pictures`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ---- | +| 0 | obj | 图片 1 | | +| n | obj | 图片 (n+1) | | +| …… | obj | …… | …… | + +`item`中的`pictures`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ---- | +| img_src | str | 图片url | | +| img_width | num | 图片宽度 | | +| img_height | num | 图片高度 | | + +**示例:** + +用按热度排序方式获取画友首页列表 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v2/Doc/index' \ +--data-urlencode 'type=hot' \ +--data-urlencode 'page_num=1' \ +--data-urlencode 'page_size=5' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "items": [ + { + "user": { + "uid": 813818, + "head_url": "http://i2.hdslb.com/bfs/face/26b12390399f3e82fb913922938f8a6662d28665.jpg", + "name": "QYS3" + }, + "item": { + "doc_id": 99184721, + "poster_uid": 813818, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/album/d531e3dae34ef65b44ecdb2914d4cc4f5a4da998.jpg", + "img_width": 1236, + "img_height": 1600, + "img_size": 508 + } + ], + "title": "旅行", + "category": "illustration", + "upload_time": 1606143792, + "already_liked": 0, + "already_voted": 1 + } + }, + { + "user": { + "uid": 813818, + "head_url": "http://i2.hdslb.com/bfs/face/26b12390399f3e82fb913922938f8a6662d28665.jpg", + "name": "QYS3" + }, + "item": { + "doc_id": 99456663, + "poster_uid": 813818, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/album/cb202244684de733f026240b60ac28bb32ba39fd.jpg", + "img_width": 849, + "img_height": 1200, + "img_size": 513 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/30b8fb29d4ab3237018be7aeddc678fff9860885.jpg", + "img_width": 849, + "img_height": 1200, + "img_size": 513 + } + ], + "title": "大头", + "category": "illustration", + "upload_time": 1606405574, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 2244861, + "head_url": "http://i2.hdslb.com/bfs/face/7fd263548d587465b9f2ad5797e483b6c9182941.jpg", + "name": "Slancx" + }, + "item": { + "doc_id": 186801, + "poster_uid": 2244861, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/vc/cd9443a37ce08ec5b3df65166107f7cae23172e3.jpg", + "img_width": 1939, + "img_height": 2841, + "img_size": 1824 + }, + { + "img_src": "http://i0.hdslb.com/bfs/vc/8c282a9d76372c4ff3cc27b92fbeb2feb6b45767.jpg", + "img_width": 1954, + "img_height": 2902, + "img_size": 1996 + }, + { + "img_src": "http://i0.hdslb.com/bfs/vc/a9e0163001ce17f996b205f95627ea550b5793db.jpg", + "img_width": 3778, + "img_height": 5728, + "img_size": 6070 + } + ], + "title": "边边封面", + "category": "illustration", + "upload_time": 1504255746, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 751036, + "head_url": "http://i2.hdslb.com/bfs/face/be1cf20d37cd104b32e2e935fb2ef65bfe09e2bc.jpg", + "name": "洛书23333333" + }, + "item": { + "doc_id": 1091581, + "poster_uid": 751036, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/album/e78d3f6bbc487a003a3a72677c1975f781ac2090.jpg", + "img_width": 1289, + "img_height": 1108, + "img_size": 188 + } + ], + "title": "青鸟", + "category": "illustration", + "upload_time": 1512041349, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 21833522, + "head_url": "http://i2.hdslb.com/bfs/face/9037fc1027d780083ecc2e818b512b69b9267e7c.jpg", + "name": "欧阳鹏杰-OY" + }, + "item": { + "doc_id": 835730, + "poster_uid": 21833522, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/vc/acb88974c768aa24c092927ae59291023d55f175.jpg", + "img_width": 1200, + "img_height": 832, + "img_size": 914 + }, + { + "img_src": "http://i0.hdslb.com/bfs/vc/9dff2455d595835c8a214d73f3cf10633304acbe.jpg", + "img_width": 3000, + "img_height": 2000, + "img_size": 2305 + }, + { + "img_src": "http://i0.hdslb.com/bfs/vc/643f775358085c55b598b1d6f5941ea0114344ea.jpg", + "img_width": 1494, + "img_height": 1000, + "img_size": 475 + } + ], + "title": "OY超写实钢笔画:轨迹", + "category": "illustration", + "upload_time": 1509533004, + "already_liked": 0, + "already_voted": 0 + } + } + ] + } +} +``` + +</details> + +## 获取摄影首页列表 + +> https://api.vc.bilibili.com/link_draw/v2/Photo/index + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | --------------- | +| type | str | 排序方式 | 必要 | recommend:推荐 | +| page_num | num | 页码 | 非必要 | 默认为1 | +| page_size | num | 每页项数 | 非必要 | 默认为45 | + +**json回复:** + +见[获取画友首页列表](#获取画友首页列表)中的响应内容 + +**示例:** + +用推荐方式获取画友首页列表 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v2/Photo/index' \ +--data-urlencode 'type=recommend' \ +--data-urlencode 'page_num=1' \ +--data-urlencode 'page_size=5' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "items": [ + { + "user": { + "uid": 2487587, + "head_url": "https://i0.hdslb.com/bfs/face/4cd0d05708c4826737eef2cf3c5cb3c5361a2a2a.jpg", + "name": "是茶茶茶茶子呀" + }, + "item": { + "doc_id": 1164937, + "poster_uid": 2487587, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/07019ac09fa0bc63a6403eb28db1222792ab4768.jpg", + "img_width": 2048, + "img_height": 3623, + "img_size": 3501 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/469cdb91f88822cbaf9639b2fa12b0a481e3ac60.jpg", + "img_width": 2048, + "img_height": 3072, + "img_size": 3173 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/61d5a369f93debbc3187026fd35df8f994156f3b.jpg", + "img_width": 2048, + "img_height": 1365, + "img_size": 1788 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/39f4bf47a96842a5834e5a49420fbf960bc7f5b7.jpg", + "img_width": 2048, + "img_height": 1365, + "img_size": 2046 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/4f14ad7008f0b5ce3a99c4234543f8ee05ecbfd8.jpg", + "img_width": 2048, + "img_height": 1365, + "img_size": 2154 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/6aebb9afb4139b8a83da8f276a20ab9201b29bb9.jpg", + "img_width": 2048, + "img_height": 3072, + "img_size": 3109 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/1942e0ffd95283898b0ee0fa5e236cdf146cf492.jpg", + "img_width": 2048, + "img_height": 1365, + "img_size": 1342 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/02e83961560492ae947347b2c49ae0aad305790b.jpg", + "img_width": 2048, + "img_height": 1365, + "img_size": 1537 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/8cadaf8660136fae7f75cb35b56fd6b39fe4913c.jpg", + "img_width": 2048, + "img_height": 3072, + "img_size": 3430 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/1ac1fdbb883b68a65d5e575a43c68c56afa98b91.jpg", + "img_width": 2048, + "img_height": 3072, + "img_size": 4446 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/352242d86a6689fb9935a76360ddc010edc844ea.jpg", + "img_width": 2048, + "img_height": 1365, + "img_size": 1443 + } + ], + "title": "COS 明日香", + "category": "cos", + "upload_time": 1512184831, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 13104471, + "head_url": "https://i1.hdslb.com/bfs/face/af36442eafccc5b743cc1aff7922d84fd9279005.jpg", + "name": "Shika小鹿鹿鹿" + }, + "item": { + "doc_id": 1225984, + "poster_uid": 13104471, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/6ba1d9a136566c21a3950c8707a6c3b3121b81bb.jpg", + "img_width": 1728, + "img_height": 1080, + "img_size": 315 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/be5d659cde3b17c8ec60db503e33769a6a0183ae.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 348 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/14676962db356877a81b175024da24230305688e.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 256 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/ee3f7b04f17c2b612311b145a7dde5bf782e91ae.jpg", + "img_width": 1728, + "img_height": 1080, + "img_size": 242 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/88e88b000379d0e51346e74d84dfc3952f17d34b.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 312 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/16342927703a298024fce2e0a16018bdf9f3e634.jpg", + "img_width": 1728, + "img_height": 1080, + "img_size": 318 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/1098a86a0b186840b4eec74cae6a92b16dcfaf5c.jpg", + "img_width": 1728, + "img_height": 1080, + "img_size": 288 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/7bd01b575e391f218a4c86e04964fab514aed2b7.jpg", + "img_width": 1728, + "img_height": 1080, + "img_size": 336 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/2aca94992789eb6ea35a4a398f0f98c83ac48449.jpg", + "img_width": 1620, + "img_height": 1080, + "img_size": 302 + } + ], + "title": "清月之辉——阎魔", + "category": "cos", + "upload_time": 1512472775, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 2651372, + "head_url": "https://i1.hdslb.com/bfs/face/06285d510887ab8f08f3639de021273d31aa6e9f.jpg", + "name": "假酒澡堂" + }, + "item": { + "doc_id": 1161521, + "poster_uid": 2651372, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/41b7f22f31faedf0e6fb7ea694e5cd460ed01744.jpg", + "img_width": 2667, + "img_height": 4000, + "img_size": 7063 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/66af6e9685516820a92aa959caf47776afd95899.jpg", + "img_width": 4000, + "img_height": 2667, + "img_size": 5164 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/f69af7f3802aec88616e3d0567930eb74a0c0b49.jpg", + "img_width": 4000, + "img_height": 2667, + "img_size": 6863 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/cabd2bd20c2b47bcebb8a33c2f645ecbfe610aac.jpg", + "img_width": 6480, + "img_height": 4320, + "img_size": 13374 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/2780c80797cfb709d3d00b884f0c8c491c2fb33e.jpg", + "img_width": 2667, + "img_height": 4000, + "img_size": 5553 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/c221300d9c9949eb2654dc65288437d2509716e9.jpg", + "img_width": 6480, + "img_height": 4320, + "img_size": 14213 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/be4710e76452d48aaae6a45e4ad813248a79efe2.jpg", + "img_width": 4000, + "img_height": 2667, + "img_size": 4733 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/c87cabbfcdca90e9136d7c66e4b9b9ec586af957.jpg", + "img_width": 4000, + "img_height": 2667, + "img_size": 5654 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/65892d474ae09290f4e7f64461f0c21b4ee4664c.jpg", + "img_width": 4000, + "img_height": 2667, + "img_size": 4657 + } + ], + "title": "奥雅之光-异梦守护者", + "category": "cos", + "upload_time": 1512168749, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 7732095, + "head_url": "https://i0.hdslb.com/bfs/face/d0c465d55d457bd15760651e2eb7f9278055b40c.jpg", + "name": "超高校级的鲷鱼烧" + }, + "item": { + "doc_id": 1159580, + "poster_uid": 7732095, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/256ee4ccd4f3ed859fd71702513a345c2b4beeb4.jpg", + "img_width": 2159, + "img_height": 1569, + "img_size": 801 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/c76707f83078c61d48a8ff1ee2888542bb64cef3.jpg", + "img_width": 1480, + "img_height": 1973, + "img_size": 617 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/a363e8ac04a90d4aecb567ff278a88b051886122.jpg", + "img_width": 1620, + "img_height": 2160, + "img_size": 876 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/06bc09d1927ba65e7210650e0cfe887d37b7871b.jpg", + "img_width": 1620, + "img_height": 2160, + "img_size": 885 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/ea5e47d7c99b1be8f799b1bf356ef81d58926a0c.jpg", + "img_width": 2160, + "img_height": 1620, + "img_size": 701 + } + ], + "title": "lolita私影", + "category": "sifu", + "upload_time": 1512148075, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 65579886, + "head_url": "https://i2.hdslb.com/bfs/face/b5f66542be47c508dd425d13fb7245655bc02413.jpg", + "name": "丹砂Scorpius" + }, + "item": { + "doc_id": 1177247, + "poster_uid": 65579886, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/53b14da232bb4aacc7bfeeba0caf8ebb1d9f0395.jpg", + "img_width": 3000, + "img_height": 2001, + "img_size": 3959 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/58f2fbc6c285571fa31cc032fb790fae5f8ffac0.jpg", + "img_width": 3000, + "img_height": 2001, + "img_size": 4106 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/018f4ddacf1ae792d2e6169ee394f336155d369e.jpg", + "img_width": 4000, + "img_height": 2668, + "img_size": 6534 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/874e31e7e3d6a3653c797583e6643d5d778d7a2c.jpg", + "img_width": 3000, + "img_height": 2001, + "img_size": 5484 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/7ff9b60bcecd80b5923194dee4de29251b37ce2c.jpg", + "img_width": 2000, + "img_height": 2998, + "img_size": 5969 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/0926b507b8e6ff11951b36732e9a089d49836e0e.jpg", + "img_width": 2000, + "img_height": 3000, + "img_size": 3671 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/c55994fbf1e8a20425066bd6f4acc4347c197d11.jpg", + "img_width": 3000, + "img_height": 2001, + "img_size": 3069 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/03e621a23626d8d9f584a0d0663e1a77bd2832f1.jpg", + "img_width": 3000, + "img_height": 2001, + "img_size": 4339 + } + ], + "title": "天涯明月刀ol明月心", + "category": "cos", + "upload_time": 1512214505, + "already_liked": 0, + "already_voted": 0 + } + } + ], + "total_count": 200 + } +} +``` + +</details> + +## 获取画友列表 + +> https://api.vc.bilibili.com/link_draw/v2/Doc/list + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | ------------------------------------------------------------ | +| category | str | 类型 | 必要 | all:全部<br/>illustration:插画<br/>comic:漫画<br/>draw:其他 | +| type | str | 排序方式 | 必要 | hot:最热<br/>new:最新 | +| page_num | num | 页码 | 非必要 | 默认为1 | +| page_size | num | 每页项数 | 非必要 | 默认为45 | + +**json回复:** + +见[获取画友首页列表](#获取画友首页列表)中的响应内容 + +**示例:** + +用按热度排序方式获取`全部`类型的画友列表 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v2/Doc/list' \ +--data-urlencode 'category=all' \ +--data-urlencode 'type=hot' \ +--data-urlencode 'page_num=1' \ +--data-urlencode 'page_size=5' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "total_count": 500, + "items": [ + { + "user": { + "uid": 1403138, + "head_url": "https://i0.hdslb.com/bfs/face/member/noface.jpg", + "name": "莉莎娜" + }, + "item": { + "doc_id": 99421434, + "poster_uid": 1403138, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/5191163a4f1a2e567adda32f4dd6d4c024455d8d.png", + "img_width": 2286, + "img_height": 1760, + "img_size": 4147 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/74943ba725ee352d95e8356d9c7f823b329e51bf.png", + "img_width": 812, + "img_height": 1218, + "img_size": 885 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/c0b17e496963203fb966ea046bddcc0d26dee066.png", + "img_width": 812, + "img_height": 1218, + "img_size": 892 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/099327c21f789294c6e8f2e9de9a280bed80eea5.png", + "img_width": 812, + "img_height": 1216, + "img_size": 895 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/4ae0365073300541ab34b214499a7e4e79d6d205.png", + "img_width": 812, + "img_height": 1216, + "img_size": 875 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/5912fd5dc436580f3d5d59e089c4119da532635a.png", + "img_width": 812, + "img_height": 1218, + "img_size": 921 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/6e0ac1a10d1e55439cb8347df8948d263321cc42.png", + "img_width": 812, + "img_height": 1218, + "img_size": 971 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/fa4738bfda93079e9db0df0bdd67ecf316eba099.png", + "img_width": 812, + "img_height": 1218, + "img_size": 860 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/d841f61d1ffdcdd8ae0831307c6479f3b8a2c803.png", + "img_width": 812, + "img_height": 1216, + "img_size": 839 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/685b75cff31f98af4881e3c1af5f58703ef8780e.png", + "img_width": 812, + "img_height": 1216, + "img_size": 928 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/2deb81f4813843c628a0cfbd3fe033e3f70ddd95.png", + "img_width": 812, + "img_height": 1218, + "img_size": 932 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/d93d03bc4f17ef4bf684f8eb8b0f48ef4c52f204.png", + "img_width": 812, + "img_height": 1218, + "img_size": 875 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/06e00c35e198de27a69a00284fb99b1ca6b77ca0.png", + "img_width": 812, + "img_height": 1216, + "img_size": 991 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/f1c18fd5cc062623d0b7789fc20ee5938aa83c37.png", + "img_width": 846, + "img_height": 725, + "img_size": 877 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/7f937d022f34f72fd9c7dcf25122671b9d6c87b4.png", + "img_width": 847, + "img_height": 733, + "img_size": 896 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/5e693c5d3b995d5553357b2b2e270ccc68562f91.png", + "img_width": 848, + "img_height": 740, + "img_size": 967 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/e8f1574af6244f8f4df5876f2bce4a9b03b02021.png", + "img_width": 848, + "img_height": 741, + "img_size": 1181 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/ceca23740750a545b26c2b35b12d357e24b887af.png", + "img_width": 856, + "img_height": 748, + "img_size": 1246 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/98439a15f2a8fdaa16c20b18d436894f2a667969.png", + "img_width": 837, + "img_height": 745, + "img_size": 1248 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/cda219582d4bc824a0f3b276944bb440f94c3365.jpg", + "img_width": 550, + "img_height": 441, + "img_size": 53 + } + ], + "title": "ufotable 剧场版", + "category": "draw", + "upload_time": 1606386642, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 5030761, + "head_url": "https://i0.hdslb.com/bfs/face/2feef28d962b0e5c8bbd573cffe84d5e13277747.jpg", + "name": "深井玑" + }, + "item": { + "doc_id": 3674543, + "poster_uid": 5030761, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/c52e9b3a1fa307095cac0e82f5932baba4f0a286.png", + "img_width": 6142, + "img_height": 4724, + "img_size": 5314 + } + ], + "title": "小02", + "category": "illustration", + "upload_time": 1524970836, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 401154, + "head_url": "https://i1.hdslb.com/bfs/face/4c57866c6c8f21ff2fc8577369a613ed8397fae8.jpg", + "name": "oO大黄Oo" + }, + "item": { + "doc_id": 979620, + "poster_uid": 401154, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/vc/8f5342382b5c92a14cd37f93e887124813ba2163.jpg", + "img_width": 1920, + "img_height": 1051, + "img_size": 549 + } + ], + "title": "八云家的早晨", + "category": "illustration", + "upload_time": 1510916676, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 21833522, + "head_url": "https://i2.hdslb.com/bfs/face/9037fc1027d780083ecc2e818b512b69b9267e7c.jpg", + "name": "欧阳鹏杰-OY" + }, + "item": { + "doc_id": 663050, + "poster_uid": 21833522, + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/vc/7b20f041ad7c04bbaf8c54ba520be6fd4953583e.jpg", + "img_width": 770, + "img_height": 999, + "img_size": 798 + }, + { + "img_src": "https://i0.hdslb.com/bfs/vc/0710b08b54013b06249170e8adf08b41a41030aa.jpg", + "img_width": 1024, + "img_height": 1024, + "img_size": 475 + }, + { + "img_src": "https://i0.hdslb.com/bfs/vc/09f168697210ce4ff62df3f0f1284574795ea96b.png", + "img_width": 863, + "img_height": 1283, + "img_size": 1257 + } + ], + "title": "OY手绘:白玫瑰", + "category": "illustration", + "upload_time": 1507952704, + "already_liked": 0, + "already_voted": 0 + } + } + ] + } +} +``` + +</details> + +## 获取摄影列表 + +> https://api.vc.bilibili.com/link_draw/v2/Photo/list + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | --------------------------- | +| category | str | 类型 | 必要 | cos:Cosplay<br/>sifu:私服 | +| type | str | 排序方式 | 必要 | hot:最热<br/>new:最新 | +| page_num | num | 页码 | 非必要 | 默认为1 | +| page_size | num | 每页项数 | 非必要 | 默认为45 | + +**json回复:** + +见[获取画友首页列表](#获取画友首页列表)中的响应内容 + +**示例:** + +用按热度排序方式获取`Cosplay`类型的摄影列表 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v2/Photo/list' \ +--data-urlencode 'category=cos' \ +--data-urlencode 'type=hot' \ +--data-urlencode 'page_num=1' \ +--data-urlencode 'page_size=5' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "total_count": 500, + "items": [ + { + "user": { + "uid": 639050, + "head_url": "http://i0.hdslb.com/bfs/face/cb5ea5f15e4503cc26598bd307faa2a5413f914f.jpg", + "name": "Mayuri阮陌" + }, + "item": { + "doc_id": 1207334, + "poster_uid": 639050, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/album/323049c9389d31525ab301e22915a3343172216e.jpg", + "img_width": 969, + "img_height": 599, + "img_size": 210 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/3e2fb000f8865092f378a480ab454fea3aa09380.jpg", + "img_width": 1920, + "img_height": 2880, + "img_size": 1369 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/b3aa55a8529935692be9a2d9e0ccf65e9bae6d87.jpg", + "img_width": 1920, + "img_height": 2880, + "img_size": 520 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/90a1b083e7d1c876aa6a82cf6440d11e84d8b4c3.jpg", + "img_width": 1920, + "img_height": 2880, + "img_size": 1442 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/eb1af3d84f2238ca63717a5c7e10a23d55d577c7.jpg", + "img_width": 1920, + "img_height": 2880, + "img_size": 1155 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/69bae275fce8d85cc1822cd520675281fa8f89a9.jpg", + "img_width": 1920, + "img_height": 2880, + "img_size": 1606 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/fbb77786fd531d081ea2867ae93cc1231326da58.jpg", + "img_width": 1920, + "img_height": 2880, + "img_size": 1329 + } + ], + "title": "式雪鸟", + "category": "cos", + "upload_time": 1512360622, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 55183010, + "head_url": "http://i0.hdslb.com/bfs/face/9484cb85e2f3acc4fcc953deab4090424b5a5aa3.jpg", + "name": "HaneAme雨波" + }, + "item": { + "doc_id": 99103637, + "poster_uid": 55183010, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/album/99cfb9601146d85622d0950b4689e2016e827ca6.jpg", + "img_width": 1366, + "img_height": 2048, + "img_size": 395 + } + ], + "title": "雨波 cos少女前线 OTS14 cos", + "category": "cos", + "upload_time": 1606070733, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 55183010, + "head_url": "http://i0.hdslb.com/bfs/face/9484cb85e2f3acc4fcc953deab4090424b5a5aa3.jpg", + "name": "HaneAme雨波" + }, + "item": { + "doc_id": 99103785, + "poster_uid": 55183010, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/album/bfb54c1ef7b9891ab458f2171fb1c115b8c94147.jpg", + "img_width": 1366, + "img_height": 2048, + "img_size": 601 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/2e8fd0d327cabc6ff9aa3fdc7f21d12949cd3774.jpg", + "img_width": 1366, + "img_height": 2048, + "img_size": 383 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/82050a1badfd2cce0e3888b0de501da8d0052285.jpg", + "img_width": 2048, + "img_height": 1366, + "img_size": 445 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/25223cd3d5bb7e4e96bdf5dded8538e9737762c4.jpg", + "img_width": 1366, + "img_height": 2048, + "img_size": 497 + } + ], + "title": "雨波 cos 英雄联盟阿狸KDA cos", + "category": "cos", + "upload_time": 1606071173, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 12429622, + "head_url": "http://i2.hdslb.com/bfs/face/af7fd8dfba51c0735303a381e1d7115c6dd13ad5.jpg", + "name": "ayaco_" + }, + "item": { + "doc_id": 6029076, + "poster_uid": 12429622, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/album/41bd20d921f8310243856665ee15c9f4a2dca89a.jpg", + "img_width": 1080, + "img_height": 720, + "img_size": 775 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/e6f7ea5b8f74d97239d307db43851341a802ee58.jpg", + "img_width": 591, + "img_height": 5672, + "img_size": 2714 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/af1795fb3873202f4668d0a598c36371f4b0addb.jpg", + "img_width": 591, + "img_height": 5641, + "img_size": 2305 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/15cf752ba3c3568828c5245cedd21d74b05b79cc.jpg", + "img_width": 591, + "img_height": 5602, + "img_size": 2158 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/6b19e916ad10e167503d1e002211cf84457f780b.jpg", + "img_width": 1080, + "img_height": 720, + "img_size": 571 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/a92b4286a1322c1315a18520af27759ee13bee69.jpg", + "img_width": 591, + "img_height": 887, + "img_size": 580 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/104001f3ea13753f5a74ca40f302c8bf82fd75ee.jpg", + "img_width": 591, + "img_height": 887, + "img_size": 479 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/6edb8fe0835c2ab284012889abe5306ed0122eb1.jpg", + "img_width": 1080, + "img_height": 720, + "img_size": 622 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/ef1be9ab93fae60f5425c2a5e6411bdb72a16bee.jpg", + "img_width": 591, + "img_height": 887, + "img_size": 389 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/7250c928a6458cd30face9403889c8bb9eda19ef.jpg", + "img_width": 1080, + "img_height": 635, + "img_size": 550 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/34439287647262eb80d6d4f16f38b4801f32c193.jpg", + "img_width": 591, + "img_height": 887, + "img_size": 472 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/253325d97fce756812a73eb609d8e082bf1eae12.jpg", + "img_width": 1080, + "img_height": 720, + "img_size": 576 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/00a05300453d0b14e44ba2051cc3714dabc46fd1.jpg", + "img_width": 1080, + "img_height": 720, + "img_size": 1047 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/1416e50ce1ab2e364212ebb2503cec247ca8642d.jpg", + "img_width": 1080, + "img_height": 720, + "img_size": 582 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/23661c4843e4c1d32aa7432683153be3813d771a.jpg", + "img_width": 591, + "img_height": 887, + "img_size": 372 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/161753dced7278876055e38114e3773106dbedf5.jpg", + "img_width": 4743, + "img_height": 3162, + "img_size": 1395 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/224ff973a91566b3dc364fde122e71520b56fdc6.jpg", + "img_width": 591, + "img_height": 887, + "img_size": 432 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/6495534c72147d512c79b4c2bbc06011635d4913.jpg", + "img_width": 591, + "img_height": 886, + "img_size": 453 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/0474e1479a0228cc6e97891f0f4d1cdbc1370222.jpg", + "img_width": 591, + "img_height": 887, + "img_size": 370 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/5a19599960129f2060c125e3896d20dccf5a6f25.jpg", + "img_width": 591, + "img_height": 887, + "img_size": 367 + } + ], + "title": "剑网3cos明教成女", + "category": "cos", + "upload_time": 1532692182, + "already_liked": 0, + "already_voted": 0 + } + }, + { + "user": { + "uid": 25000899, + "head_url": "http://i2.hdslb.com/bfs/face/4017d03cfe42da7a0c93277cb46fb5a47a9b2415.jpg", + "name": "狩子和光哥" + }, + "item": { + "doc_id": 13690635, + "poster_uid": 25000899, + "pictures": [ + { + "img_src": "http://i0.hdslb.com/bfs/album/5f497ae7b064c5e323ad1e008b0068d3fb95b3f0.jpg", + "img_width": 1908, + "img_height": 3332, + "img_size": 3852 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/96e6743d04b0d31e9c17e171d767ceab75c9ac35.jpg", + "img_width": 1908, + "img_height": 3392, + "img_size": 3444 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/2116c3fe1bb5fbfd77a641fd0c29c6e6408b050e.jpg", + "img_width": 1908, + "img_height": 3328, + "img_size": 3793 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/6de08b62d633a84e5e50c8da0b42334f88ca50cb.jpg", + "img_width": 1812, + "img_height": 3176, + "img_size": 3513 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/02f1e419e79e45572c671a534f4271f411f2771f.jpg", + "img_width": 1908, + "img_height": 3392, + "img_size": 3660 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/348bf5b4f887f3ecd690cb1a1442bdda43898652.jpg", + "img_width": 3814, + "img_height": 3392, + "img_size": 7891 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/c50a2cc182c8ad07850e2f364b76d14cd6b1729c.jpg", + "img_width": 3839, + "img_height": 2160, + "img_size": 1630 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/b051883ca18556c78e72bf07d3981324394541c8.jpg", + "img_width": 2437, + "img_height": 2159, + "img_size": 1869 + }, + { + "img_src": "http://i0.hdslb.com/bfs/album/42e5f13601067a772d5ddc47a8756fecfec9f8cb.jpg", + "img_width": 2121, + "img_height": 3023, + "img_size": 2021 + } + ], + "title": "玉藻前", + "category": "cos", + "upload_time": 1548154774, + "already_liked": 0, + "already_voted": 0 + } + } + ] + } +} +``` + +</details> + +## 获取指定用户的相簿列表 + +> https://api.vc.bilibili.com/link_draw/v1/doc/others + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------- | ------ | --------------------------------------------- | +| biz | num | 分区 | 非必要 | 0:全部<br />1:画友<br/>2:摄影<br />默认为0 | +| poster_uid | num | 作者mid | 必要 | 默认为20 | +| page_num | num | 页码 | 非必要 | 默认为1 | +| page_size | num | 每页项数 | 非必要 | 默认为45 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------ | +| code | num | 返回值 | 0:成功<br />1:参数错误 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------- | ---- | +| total_count | str | 总计相簿数 | | +| user | obj | 作者信息 | | +| items | array | 相簿列表 | | + +`data`中的`user`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------- | ---- | +| uid | str | 作者mid | | +| head_url | str | 头像url | | +| name | str | 昵称 | | + +`data`中的`item`对象: + +同[获取画友首页列表](#获取画友首页列表)中的`item`对象 + +**示例:** + +获取用户` 1360010 `的所有类型相簿 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/others' \ +--data-urlencode 'biz=0' \ +--data-urlencode 'poster_uid=1360010' \ +--data-urlencode 'page_num=1' \ +--data-urlencode 'page_size=5' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "total_count": "290", + "user": { + "uid": "1360010", + "head_url": "https://i2.hdslb.com/bfs/face/865c7b03575a69822e503ef291ac26199c6a540a.jpg", + "name": "楚楚子" + }, + "items": [ + { + "biz": 3, + "doc_id": 85097979, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/65604d9697a644686c6ad811f9663a9fe308b164.jpg", + "img_width": 1347, + "img_height": 1792, + "img_size": 363 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/3f4448059ddaa8cbcd9094851ecfb84b184b0dc9.jpg", + "img_width": 1347, + "img_height": 1792, + "img_size": 506 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/edd1b6b424c078ba6a5b267db355cf7e8522f27a.jpg", + "img_width": 1347, + "img_height": 1792, + "img_size": 424 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/a615ce43ce3412060e487c3fcbc73ed08da23c56.jpg", + "img_width": 2268, + "img_height": 4032, + "img_size": 2192 + } + ], + "source": null, + "upload_time": "2020-08-03 16:48:30", + "upload_timestamp": 1596444510, + "upload_time_text": "3月前", + "description": "“绝望吧~!”\n#江之岛盾子#弹丸论破# \n黑历史重刷,终于又出了盾子 ​​​", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 53822, + "like_count": 0, + "collect_count": 40, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 84200785, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/8aa4ad3fc7b9f01a21f4c398565788bbe92cff2d.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2059 + } + ], + "source": null, + "upload_time": "2020-07-29 18:06:52", + "upload_timestamp": 1596017212, + "upload_time_text": "4月前", + "description": "莫西莫西?", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 49659, + "like_count": 0, + "collect_count": 6, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 83943309, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/4f4321bec1ddc55a3ed98b63a40175ec90820b4a.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2432 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/e2ed6aecfa713e109867198a1b0292eb9180aec9.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 1949 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/92694ea7db527663a8c97a6747125e12c6300bc4.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 1978 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/1757e958088dc7477fae30f2bf0daba034dd5de2.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 1849 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/60d55f032f4332387a165d6aa4e7ab0d2f628b1d.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2032 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/12bdbda0c8ea40505449ef4f4ad764780ad991ec.jpg", + "img_width": 1623, + "img_height": 2160, + "img_size": 1068 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/4e51f06fb2c9aedfd077eb9341ada50aea5a2d50.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2106 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/5e8d27655c9741b0cb8c3e257677b9fc14b4cb5b.jpg", + "img_width": 2996, + "img_height": 3289, + "img_size": 3347 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/0018b04da7f9897b0a80dae64267fda16a7d3249.jpg", + "img_width": 700, + "img_height": 659, + "img_size": 122 + } + ], + "source": null, + "upload_time": "2020-07-28 02:18:39", + "upload_timestamp": 1595873919, + "upload_time_text": "4月前", + "description": "CP26第一天的集邮#CP26#\np1@流一_喵喵喵喵喵喵 流一爸爸太好看呜呜\np2@星之迟迟 我迟哥天仙下凡 新本太可了推荐\np3@紅吸式咖啡 师姐是俺永远的珍宝!\np4@伏笔小哥哥 我家儿子人间导弹杀伤力巨大[doge]\np5@鹤祈W 我家鹅鹅[喜极而泣]老色批又偷偷亲我\np6@拉花一哥虚年gg 虚虚今天也是又白又可口\np7@沐阳_阳阳阳阳羊哞 又御又有气场爱了\nP8战利品?", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "[{\"type\":1,\"location\":86,\"length\":7,\"data\":\"44500220\"}]", + "view_count": 67546, + "like_count": 0, + "collect_count": 18, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 83305352, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/9700a04ea0adc0fc4e0d0be54432210f7cb0ca08.jpg", + "img_width": 2996, + "img_height": 4096, + "img_size": 3687 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/bea5b177169027506afb7f11f91aecaf770f50a8.jpg", + "img_width": 2232, + "img_height": 4032, + "img_size": 2435 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/94c170c09acfc22bcdf541dc2a173cac0c3ca5eb.jpg", + "img_width": 1080, + "img_height": 1080, + "img_size": 349 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/53b082a3352a4cbf05dd796b60fe06ad5ba443f9.jpg", + "img_width": 2148, + "img_height": 2864, + "img_size": 1712 + } + ], + "source": null, + "upload_time": "2020-07-24 11:12:03", + "upload_timestamp": 1595560323, + "upload_time_text": "4月前", + "description": "cp26认衣服。?[笑哭]\nD1, 瑶-遇见神鹿(游场\nD2,嘉德罗斯-酒吞童子(凹凸世界展台8.1馆CPB25 ​​​", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 45415, + "like_count": 0, + "collect_count": 5, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 81307632, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/bf3e274cf5a013a9ae8ddfaa756ad4f22d643ff4.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2418 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/e8ad8f1297048e9adbcd70c8ca589dc306679c6e.jpg", + "img_width": 1656, + "img_height": 2205, + "img_size": 692 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/44e2d7d566833a67b151b5f0eba67bb70c34e6b7.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2430 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/0c11a891a71a567899b45801049cb44e8e09984b.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2513 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/92e0f0a0e6c38c693511b705acfd25caa9c14125.jpg", + "img_width": 1656, + "img_height": 2205, + "img_size": 664 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/235e63ecfa8db0bb21a4dbd4d82c7be321c96b73.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2149 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/98a3eb965f07a75b24d59cc6446a7752ad8211bd.jpg", + "img_width": 1656, + "img_height": 2205, + "img_size": 580 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/0dc3637addb53bf8ebea2a1896f41bcedafee42f.jpg", + "img_width": 1656, + "img_height": 2205, + "img_size": 669 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/f1ccbe4b61022cea2545eaa4cd26ac0617f9c12c.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 3329 + } + ], + "source": null, + "upload_time": "2020-07-12 01:03:34", + "upload_timestamp": 1594487014, + "upload_time_text": "4月前", + "description": "绿茶公主切?听说你想和我一起喝奶茶\n新风格自拍⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄希望喜欢\n\n裙子和领结是我家 海盐气泡", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 80832, + "like_count": 0, + "collect_count": 110, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 80611117, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/4cb935b7f542891c42e5b90a8cd6a9cc3817fdad.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 1136 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/d99cd3d16fb1353a4dd42e72f4a1b4dce786bdf7.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 1429 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/4a5b947929a8a748a1cd8a165e07e39cf9efbac1.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 1052 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/c9972c6681e22d50f03bc80337f09c5bca12ce83.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 1324 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/57137ce057e0c8098b17ed7ef9dbd6230cc08f31.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 1361 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/f6ef2ffe0de5e336e12be620a2460fb9226da2d7.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 1261 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/75c9012a5447025f533539e7e0c91aa7d47436e1.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 986 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/07088481611b53a35bffc797e00ab39361cac764.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 1361 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/2126d4a1f5882d1bd37db64e5acb17b3ba70a454.jpg", + "img_width": 1728, + "img_height": 3072, + "img_size": 991 + } + ], + "source": null, + "upload_time": "2020-07-07 14:13:32", + "upload_timestamp": 1594102412, + "upload_time_text": "4月前", + "description": "出镜:楚楚子\n摄影@猫尾先生DK \n服装@诺琪旗舰店 \n后勤:鹤祈 伏笔\n#cosplay##cos##cos正片##初音未来##初音ミク##初音##Miku##初音miku# ​​​", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 72419, + "like_count": 0, + "collect_count": 93, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 80314152, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/8debaeafd8463f06132f46776d2e100d7fc7da62.jpg", + "img_width": 2160, + "img_height": 3840, + "img_size": 2793 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/c930d2b3b8533b28c18ebd69d7bb62027a96dc64.jpg", + "img_width": 3072, + "img_height": 4096, + "img_size": 3688, + "img_tags": [ + { + "tid": 0, + "orientation": 2, + "type": 2, + "text": "鹤祈w", + "mid": 319699970, + "textString": "@鹤祈w", + "x": 69531, + "y": 74547, + "source_type": 0, + "item_id": 0 + }, + { + "tid": 0, + "orientation": 2, + "type": 2, + "text": "楚楚子", + "mid": 1360010, + "textString": "@楚楚子", + "x": 24845, + "y": 88315, + "source_type": 0, + "item_id": 0 + } + ] + } + ], + "source": null, + "upload_time": "2020-07-05 15:30:19", + "upload_timestamp": 1593934219, + "upload_time_text": "4月前", + "description": "又出了拉姆蕾姆双子快乐!#蕾姆##拉姆##从零开始的异世界生活#", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 53346, + "like_count": 0, + "collect_count": 27, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 78948058, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/63d3158d33e4e7e74b04ad522841b746795a2c58.jpg", + "img_width": 1080, + "img_height": 1080, + "img_size": 321 + } + ], + "source": null, + "upload_time": "2020-06-25 12:47:54", + "upload_timestamp": 1593060474, + "upload_time_text": "5月前", + "description": "端午节安康哦!大家", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 56377, + "like_count": 0, + "collect_count": 19, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 78732068, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/bce1fbe78f222b669cd2ecf154faee55fffa4c22.jpg", + "img_width": 828, + "img_height": 1295, + "img_size": 431 + } + ], + "source": null, + "upload_time": "2020-06-23 20:06:14", + "upload_timestamp": 1592913974, + "upload_time_text": "5月前", + "description": "阿荣正片发我微博了(楚楚子w)\n还有转发抽500软妹币哦~[tv_调侃]", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 49872, + "like_count": 0, + "collect_count": 2, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 78601963, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/952125a9d23e9845c359752919d7a4919c5146b2.jpg", + "img_width": 2160, + "img_height": 3840, + "img_size": 2219 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/206a554bf8ca9f8f5b20f819a3a3d4caaf8cc7c8.jpg", + "img_width": 2160, + "img_height": 3840, + "img_size": 2093 + } + ], + "source": null, + "upload_time": "2020-06-22 17:17:02", + "upload_timestamp": 1592817422, + "upload_time_text": "5月前", + "description": "“拉菲…喜欢指挥官”\n#碧蓝航线#", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 47885, + "like_count": 0, + "collect_count": 6, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 77719612, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/8c78cfc991f160e649530ef124958a40174d1edf.jpg", + "img_width": 2464, + "img_height": 3280, + "img_size": 2902 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/e7e5d9fd004461ccc06bd4a2070fe8984cc910ab.jpg", + "img_width": 1906, + "img_height": 1080, + "img_size": 182 + } + ], + "source": null, + "upload_time": "2020-06-15 11:59:27", + "upload_timestamp": 1592193567, + "upload_time_text": "5月前", + "description": "#转生成为了只有乙女游戏破灭FLAG的邪恶##转生恶役只好拔除破灭旗标##卡塔丽娜##COS#\n猴王来了(不是)", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 52101, + "like_count": 0, + "collect_count": 5, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 77344908, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/a7d74d4ee9fc7b000ce325f56d7f20c2f46097ce.jpg", + "img_width": 614, + "img_height": 584, + "img_size": 35 + } + ], + "source": null, + "upload_time": "2020-06-12 17:58:43", + "upload_timestamp": 1591955923, + "upload_time_text": "5月前", + "description": "都和你们说了多少次了我没有男朋友,我有女朋友!!!!别问了[笑哭]giao", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 48760, + "like_count": 0, + "collect_count": 0, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 77340591, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/d53eae5957290841e99182b57dec41b73536c31f.jpg", + "img_width": 1440, + "img_height": 1080, + "img_size": 247 + } + ], + "source": null, + "upload_time": "2020-06-12 17:20:47", + "upload_timestamp": 1591953647, + "upload_time_text": "5月前", + "description": "昨天的自拍[tv_斜眼笑][tv_doge]", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 43730, + "like_count": 0, + "collect_count": 1, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 77255303, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/0ec917d17f79e7dbd07e60c4eba78add95f8db1e.jpg", + "img_width": 1080, + "img_height": 1619, + "img_size": 292 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/d3509348d52329d415a0022a1d79651645201dfc.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 531 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/6e2b6f49b6c8650ade51e66c4dc6008a4fd10b9e.jpg", + "img_width": 1619, + "img_height": 1080, + "img_size": 235 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/c31455b0d11a982f09fdcd13ce24354743410a95.jpg", + "img_width": 1080, + "img_height": 1619, + "img_size": 353 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/d6bcaf3c8cdcd5d680e359f20b7514e39337ed0c.jpg", + "img_width": 1619, + "img_height": 1080, + "img_size": 253 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/4151fe1cf8f4a47c3843f12ae10eb8449660d80f.jpg", + "img_width": 1080, + "img_height": 1619, + "img_size": 413 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/29e2f6361e0773342b9f8adae7c44515231415da.jpg", + "img_width": 1619, + "img_height": 1080, + "img_size": 337 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/88b42ea572b95ba2d0bbdec0253f3cf5f87bf1e9.jpg", + "img_width": 1080, + "img_height": 1619, + "img_size": 459 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/4f96eea84478eaeccf80b5e34b263e6d7e04e382.jpg", + "img_width": 1619, + "img_height": 1080, + "img_size": 325 + } + ], + "source": null, + "upload_time": "2020-06-11 21:10:12", + "upload_timestamp": 1591881012, + "upload_time_text": "5月前", + "description": "#LOLITA##国牌LOLITA##LOLITA装扮#\n 🌹雾都小姐🍷酒红色🍷\n\n出镜:楚楚子\n裙子:@Neverland星芙颂 \n\n摄影感谢@夜_綰灵 ​​​", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 48652, + "like_count": 0, + "collect_count": 20, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 76904631, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/d89d1ae4dbb98c7b4ab40d3cb76543b4d5b9d471.jpg", + "img_width": 3987, + "img_height": 4032, + "img_size": 2898 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/8292a3ffe10baaf3b957605bc9fa450848746598.jpg", + "img_width": 3987, + "img_height": 4032, + "img_size": 3059 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/e6992efada737c6340b400ad8541ec8f550cd490.jpg", + "img_width": 4016, + "img_height": 4000, + "img_size": 2628 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/b4af594407dc4115779aa82d30000005f1940cee.jpg", + "img_width": 4000, + "img_height": 4012, + "img_size": 2602 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/6bc9ed0a4456806972793c8c9ff6b6dab7d82492.jpg", + "img_width": 828, + "img_height": 831, + "img_size": 156 + } + ], + "source": null, + "upload_time": "2020-06-08 17:19:55", + "upload_timestamp": 1591607995, + "upload_time_text": "5月前", + "description": "做了粉丝向小周边是蕾姆cos的扑克牌\n可以拿去打扑克[tv_点赞]搜店铺【楚王的宝库】就看到了,54张➕铁盒包装➕包邮 ​​​", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 40875, + "like_count": 0, + "collect_count": 1, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 76895569, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/0f35f75e31dd1298673207292f06ed73c44ab7d6.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 290 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/487f3ba4891b52825965337cc67b386cd61ef2ae.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 403 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/01e0a911f6efab97191def3d3fab36d656f395a4.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 306 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/62903ff9bad9d8f67fa44d0ec745f041f7c48e69.jpg", + "img_width": 1620, + "img_height": 1080, + "img_size": 230 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/f4ff78679627139c8f0bad222cd4a148cfc48212.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 277 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/8444278d213ee9a88ee4e0672999625b9fe08ac3.jpg", + "img_width": 1080, + "img_height": 1620, + "img_size": 244 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/b726178928cd90091dbb424a1d67e65509b27415.jpg", + "img_width": 1080, + "img_height": 1512, + "img_size": 322 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/736c90c02dafb3bf846936220084505a0da2ff55.jpg", + "img_width": 1620, + "img_height": 1080, + "img_size": 394 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/3fe89476c5f6572e7c42f10af219adf8cb80fa5b.jpg", + "img_width": 1620, + "img_height": 1080, + "img_size": 370 + } + ], + "source": null, + "upload_time": "2020-06-08 15:41:20", + "upload_timestamp": 1591602080, + "upload_time_text": "5月前", + "description": "死亡爱丽丝联动蕾姆\n\n蕾姆:楚楚子\n服装@悠悠cos微博 \n摄影@菜菜1911 \n\n#从零开始的异世界生活##蕾姆##COSPLAY#", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "[{\"type\":1,\"location\":32,\"length\":8,\"data\":\"92962087\"}]", + "view_count": 62523, + "like_count": 0, + "collect_count": 74, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 76277041, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/04b5e6ca741e16504e32a8afcaff02d26e3dbb02.jpg", + "img_width": 2105, + "img_height": 2105, + "img_size": 756 + } + ], + "source": null, + "upload_time": "2020-06-03 20:58:17", + "upload_timestamp": 1591189097, + "upload_time_text": "5月前", + "description": "听说最近虚拟女友很火?我也想应聘一下(๑¯ω¯๑)\n你们喜欢哪种声音的呢?\n定制虚拟恋人的方式在评论区\n顺便我在评论区抓一个粉丝做一期体验视频\n记得关注我和【甜味陪伴】哦[tv_害羞]", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 53645, + "like_count": 0, + "collect_count": 4, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 74762578, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/6d9c4a1c5a313880c9917b7a37810d37d06df056.png", + "img_width": 1792, + "img_height": 828, + "img_size": 4752 + }, + { + "img_src": "https://i0.hdslb.com/bfs/album/9a5e21c9e620fd58f4ffa0f23c6758c6be004c16.png", + "img_width": 1792, + "img_height": 828, + "img_size": 5322 + } + ], + "source": null, + "upload_time": "2020-05-23 10:33:32", + "upload_timestamp": 1590201212, + "upload_time_text": "6月前", + "description": "我冲了!#碧蓝航线#", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 71068, + "like_count": 0, + "collect_count": 1, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 74397184, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/de4711846523f58a1e17da281a3033b40296e5c6.jpg", + "img_width": 5304, + "img_height": 7952, + "img_size": 16275 + } + ], + "source": null, + "upload_time": "2020-05-20 13:34:51", + "upload_timestamp": 1589952891, + "upload_time_text": "6月前", + "description": "是金发辣妹风格的jk\n520表白大家\n裙子是我家的万佳灯火@风間original \n感谢摄影:远野咲夜", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 74593, + "like_count": 0, + "collect_count": 12, + "verify_status": 1 + }, + { + "biz": 3, + "doc_id": 74246310, + "poster_uid": 1360010, + "category": "daily", + "type": 0, + "title": "", + "tags": [], + "pictures": [ + { + "img_src": "https://i0.hdslb.com/bfs/album/e4541718610d4f19c9228bebf580db4f96e7a911.png", + "img_width": 1792, + "img_height": 828, + "img_size": 3884 + } + ], + "source": null, + "upload_time": "2020-05-19 10:06:53", + "upload_timestamp": 1589854013, + "upload_time_text": "6月前", + "description": "上古老婆队我也有了[tv_微笑]开心", + "role": null, + "settings": { + "copy_forbidden": 0 + }, + "already_collected": 0, + "already_liked": 0, + "user_status": 0, + "at_control": "", + "view_count": 48537, + "like_count": 0, + "collect_count": 0, + "verify_status": 1 + } + ] + } +} +``` + +</details> +</details> diff --git a/docs/album/recommend_author.md b/docs/album/recommend_author.md new file mode 100644 index 0000000..ba57f07 --- /dev/null +++ b/docs/album/recommend_author.md @@ -0,0 +1,169 @@ +# 相簿推荐作者 + +<details> +<summary>功能已下线</summary> + +## 获取摄影推荐作者 + +> https://api.vc.bilibili.com/link_draw/v2/Photo/uper + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ------- | +| num | num | 请求数量 | 非必要 | 默认为6 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | array | 信息本体 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ---- | +| 0 | obj | 作者 1 | | +| n | obj | 作者 (n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------- | ------------ | +| uid | num | 作者mid | | +| head_url | str | 头像url | | +| name | str | 昵称 | | +| is_followed | num | 0 | 作用尚不明确 | + +**示例:** + +请求获取摄影推荐作者,数量为5 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v2/Photo/uper' \ +--data-urlencode 'num=5' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": [ + { + "uid": 36974706, + "head_url": "https://i2.hdslb.com/bfs/face/fa7ef3a5124e2ebfd2094e0bc2f42c752c1abd21.jpg", + "name": "幹物小幺", + "is_followed": 0 + }, + { + "uid": 3223860, + "head_url": "https://i0.hdslb.com/bfs/face/c5400d25eb7700cd41d88dff5b800bd55ec27cfe.jpg", + "name": "您算哪根葱", + "is_followed": 0 + }, + { + "uid": 941228, + "head_url": "https://i2.hdslb.com/bfs/face/f38f000d4df21e9bea96d3573efdf81ae02f4ddf.jpg", + "name": "碳酸熊卡", + "is_followed": 0 + }, + { + "uid": 2624541, + "head_url": "https://i0.hdslb.com/bfs/face/86ccd746af8b1e8bfcdd432de7f0ce1e2b2cb8b0.jpg", + "name": "_一之濑光", + "is_followed": 0 + }, + { + "uid": 29963706, + "head_url": "https://i1.hdslb.com/bfs/face/c054f097f1b882fc6ad8a67d0f0f88e3acd3bc88.jpg", + "name": "公子温温温如", + "is_followed": 0 + } + ] +} +``` + +</details> + +## 获取画友推荐作者 + +> https://api.vc.bilibili.com/link_draw/v2/Doc/drawer + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ------- | +| num | num | 请求数量 | 非必要 | 默认为6 | + +**json回复:** + +见[获取摄影推荐作者](#获取摄影推荐作者)中的响应内容 + +**示例:** + +请求获取画友推荐作者,数量为5 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v2/Doc/drawer' \ +--data-urlencode 'num=5' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": [ + { + "uid": 7905675, + "head_url": "http://i1.hdslb.com/bfs/face/d4765fd020e8b96e331861cb4d6a3afde4e70d1d.jpg", + "name": "我真的是离城", + "is_followed": 0 + }, + { + "uid": 20356494, + "head_url": "http://i0.hdslb.com/bfs/face/0686141506894df969832d7dda91f2a0c4cdc24b.jpg", + "name": "ZM-PANDA", + "is_followed": 0 + }, + { + "uid": 4836885, + "head_url": "http://i1.hdslb.com/bfs/face/48822c5aa7aeae9d3dd2010388baa2b0e1c5cc0a.jpg", + "name": "六六子w", + "is_followed": 0 + }, + { + "uid": 2575079, + "head_url": "http://i1.hdslb.com/bfs/face/cb3d6f4fb2fbe5aa85ab8773a1a19cec6d8ff1e1.jpg", + "name": "念萦墨葵", + "is_followed": 0 + }, + { + "uid": 1904878, + "head_url": "http://i0.hdslb.com/bfs/face/f6de926b3905ec7bb9e36202d80eb931d12f70ac.jpg", + "name": "fedsnk", + "is_followed": 0 + } + ] +} +``` + +</details> +</details> diff --git a/docs/article/action.md b/docs/article/action.md new file mode 100644 index 0000000..c195594 --- /dev/null +++ b/docs/article/action.md @@ -0,0 +1,172 @@ +# 专栏点赞&投币&收藏 + +## 点赞文章 + +<img src="../../assets/img/like.svg" width="100" height="100"/> + +> https://api.bilibili.com/x/article/like + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------- | ------ | ---------------------- | +| id | num | 文章cvid | 必要 | | +| type | num | 操作方式 | 必要 | 1:点赞<br />2:取消赞 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功 <br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />10003:不存在该稿件<br />65006:已赞过<br />65004:取消点赞失败 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +为文章`cv5806746`点赞 + +```shell +curl 'https://api.bilibili.com/x/article/like' \ +--data-urlencode 'id=5806746' \ +--data-urlencode 'type=1' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 投币文章 + +<img src="../../assets/img/coin.svg" width="100" height="100"/> + +> https://api.bilibili.com/x/web-interface/coin/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------- | ------ | ------- | +| aid | num | 文章cvid | 必要 | | +| upid | num | 文章作者mid | 必要 | | +| multiply | num | 投币数量 | 必要 | 上限为2 | +| avtype | num | 2 | 必要 | 必须为2 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-104:硬币不足<br />-111:csrf校验失败<br />-400:请求错误<br />10003:不存在该稿件<br />34002:不能给自己投币<br />34003:非法的投币数量<br />34005:超过投币上限 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ----------------------------------------------------- | +| like | bool | 是否点赞成功 | true:成功<br />false:失败<br />已赞过则附加点赞失败 | + +**示例:** + +为文章`cv5806746`投币1枚 + +```shell +curl 'https://api.bilibili.com/x/web-interface/coin/add' \ +--data-urlencode 'aid=5806746' \ +--data-urlencode 'upid=486980924' \ +--data-urlencode 'multiply=1' \ +--data-urlencode 'avtype=2' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "like": false + } +} +``` + +</details> + +## 收藏文章 + +<img src="../../assets/img/fav.svg" width="100" height="100"/> + +>https://api.bilibili.com/x/article/favorites/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------- | ------ | ---- | +| id | num | 文章cvid | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项 | +| message | str | 错误信息 | 正确为success | +| data | obj | 信息本体 | | + +**示例:** + +收藏文章`cv5806746` + +```shell +curl 'https://api.bilibili.com/x/article/favorites/add' \ +--data-urlencode 'id=5806746' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> diff --git a/docs/article/articles.md b/docs/article/articles.md new file mode 100644 index 0000000..0890ca9 --- /dev/null +++ b/docs/article/articles.md @@ -0,0 +1,311 @@ +# 文集基本信息 + +## 获取文集基本信息 + +> https://api.bilibili.com/x/article/list/web/articles + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 文集rlid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此信息 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ---------------- | ------------------------------------------------------------ | +| list | obj | 文集概览 | | +| articles | array | 文集内的文章列表 | | +| author | obj | 文集作者信息 | | +| last | obj | - | 作用尚不明确<br />结构与data.articles[]中相似 | +| attention | bool | 是否关注文集作者 | false:未关注<br />true:已关注<br />需要登录(Cookie) <br />未登录为false | + +`data`中的`list`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | --------------- | ------------ | +| id | num | 文集rlid | | +| mid | num | 文集作者mid | | +| name | str | 文集名称 | | +| image_url | str | 文集封面图片url | | +| update_time | num | 文集更新时间 | 时间戳 | +| ctime | num | 文集创建时间 | 时间戳 | +| publish_time | num | 文集发布时间 | 时间戳 | +| summary | str | 文集简介 | | +| words | num | 文集字数 | | +| read | num | 文集阅读量 | | +| articles_count | num | 文集内文章数量 | | +| state | num | 1或3 | 作用尚不明确 | +| reason | str | 空 | 作用尚不明确 | +| apply_time | str | 空 | 作用尚不明确 | +| check_time | str | 空 | 作用尚不明确 | + +`data`中的`articles`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---- | +| 0 | obj | 文集中第1篇文章 | | +| n | obj | 文集中第(n+1)篇文章 | | + +`data`中的`articles`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ----- | -------------- | ------------------------------------------------------------ | +| id | num | 专栏cvid | | +| title | str | 文章标题 | | +| state | num | 0 | 作用尚不明确 | +| publish_time | num | 发布时间 | 秒时间戳 | +| words | num | 文章字数 | | +| image_urls | array | 文章封面 | | +| category | obj | 文章标签 | | +| categories | array | 文章标签列表 | | +| summary | str | 文章摘要 | | +| stats | obj | 文章状态数信息 | | +| like_state | num | 是否点赞 | 0:未点赞<br />1:已点赞<br />需要登录(Cookie) <br />未登录为0 | + +`articles`数组中的对象中的`stats`: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ---- | +| view | num | 阅读数 | | +| favorite | num | 收藏数 | | +| like | num | 点赞数 | | +| dislike | num | 点踩数 | | +| reply | num | 评论数 | | +| share | num | 分享数 | | +| coin | num | 投币数 | | +| dynamic | num | 动态转发数 | | + +`articles`数组中的对象中的`author`: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | -------------- | ---- | +| mid | num | 作者mid | | +| name | str | 作者昵称 | | +| face | str | 作者头像url | | +| official_verify | obj | 作者认证信息 | | +| nameplate | obj | 作者勋章 | | +| vip | obj | 作者大会员状态 | | + +**示例:** + +查询文集`rl207146`的基本信息 + +```shell +curl -G 'https://api.bilibili.com/x/article/list/web/articles' \ +--data-urlencode 'id=207146' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": { + "id": 207146, + "mid": 293793435, + "name": "B站api研究笔记", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1585036952, + "ctime": 1582718126, + "publish_time": 1585045493, + "summary": "", + "words": 8697, + "read": 1654, + "articles_count": 3, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + "articles": [ + { + "id": 4815593, + "title": "【B站API】api研究笔记ep1-视频基本信息", + "state": 0, + "publish_time": 1582643908, + "words": 2906, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/00497c8df7130f22e5b953694b8931a22d32f133.jpg" + ], + "category": { + "id": 26, + "parent_id": 17, + "name": "数码" + }, + "categories": [ + { + "id": 17, + "parent_id": 0, + "name": "科技" + }, + { + "id": 26, + "parent_id": 17, + "name": "数码" + } + ], + "summary": "各位小可爱们大家好啊,终于可以结束我长达一年的咕咕了.........在这蝠想联翩的日子里也闲的没事,除了上课就是睡觉,还不如搞点事情哪个猿不想拥有自己的B站爬虫呢(误),当然自制一个B站的综合信息台也是可以的,比如显示粉丝数 获赞数(掉粉警告)于是就萌生了这个研究B站api的想法,以后也会继续不定期分享我的主体思路是利用Chrome中的F12工具进行分析,再用curl进行验证先从视频下手吧qwq我们以av2075941为例network检测下,有各种图片、视频、网页、js。。。。。的传输记录", + "stats": { + "view": 578, + "favorite": 19, + "like": 26, + "dislike": 0, + "reply": 19, + "share": 6, + "coin": 10, + "dynamic": 0 + }, + "like_state": 0 + }, + { + "id": 4820548, + "title": "【B站API】api研究笔记ep2-视频其他信息", + "state": 0, + "publish_time": 1582688189, + "words": 4319, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/2416ee72759a5c2c8bba0f10d42e789fc0c0ae2b.jpg" + ], + "category": { + "id": 26, + "parent_id": 17, + "name": "数码" + }, + "categories": [ + { + "id": 17, + "parent_id": 0, + "name": "科技" + }, + { + "id": 26, + "parent_id": 17, + "name": "数码" + } + ], + "summary": "大家中午好鸭昨天我们研究了B站api的获取方法和使用方法 这一期我们继续分享另一个从网页中寻找api的方法以及研究视频的其他api接口以av170001为例首先打开视频,在F12的network下的监控中加载页面筛选XHR对象用搜索法的效率较低,不如我们直接进行筛选&观察通过对资源路径的观察可以猜到某些有关的项比如playurl有可能是播放的地址,pagelist可能是分P列表,view不就是昨天研究的『视频基本信息』吗通过继续分析我总结出了以下api这个可以在只想获取简介时应用,而不用处理多余", + "stats": { + "view": 737, + "favorite": 14, + "like": 18, + "dislike": 0, + "reply": 14, + "share": 1, + "coin": 1, + "dynamic": 0 + }, + "like_state": 0 + }, + { + "id": 5263184, + "title": "【B站API】api研究笔记Special-AV与BV互转", + "state": 0, + "publish_time": 1585045493, + "words": 1472, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/b520939046899303cfcac1511308eb87ede760d7.jpg" + ], + "category": { + "id": 26, + "parent_id": 17, + "name": "数码" + }, + "categories": [ + { + "id": 17, + "parent_id": 0, + "name": "科技" + }, + { + "id": 26, + "parent_id": 17, + "name": "数码" + } + ], + "summary": "昨天视频新编号BV上线了,所有视频的编号默认都变成了BVxxx,不再是avxxx,兼容在链接和搜索中输入av号,评论区和动态av和bv都可以一键传送显然日益增长的投稿量对于编号是个问题,int是有上限的,但一串“乱码”缺少了灵魂,还会让我们想到磁力链接或者熊掌盘的链接(手动狗头)看到av170001,我会想到“法克儿~~”,但看到BV17x411w7KC,我?????其实av号并没有消失,只不过它已经隐藏于大众的视野里了,av和bv本质上是可以双向转换的方法一(电脑版推荐):打开一个视频,会发现", + "stats": { + "view": 343, + "favorite": 9, + "like": 13, + "dislike": 0, + "reply": 9, + "share": 0, + "coin": 2, + "dynamic": 0 + }, + "like_state": 0 + } + ], + "author": { + "mid": 293793435, + "name": "社会易姐QwQ", + "face": "http://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0 + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "nameplate": { + "nid": 4, + "name": "青铜殿堂", + "image": "http://i1.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", + "image_small": "http://i1.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", + "level": "普通勋章", + "condition": "单个自制视频总播放数>=1万" + }, + "vip": { + "type": 2, + "status": 1, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": null + } + }, + "last": { + "id": 0, + "title": "", + "state": 0, + "publish_time": 0, + "words": 0, + "image_urls": [ ], + "category": { + "id": 0, + "parent_id": 0, + "name": "" + }, + "categories": [ ], + "summary": "" + }, + "attention": true + } +} +``` + +</details> \ No newline at end of file diff --git a/docs/article/card.md b/docs/article/card.md new file mode 100644 index 0000000..a21a25f --- /dev/null +++ b/docs/article/card.md @@ -0,0 +1,463 @@ +# 卡片信息 + +## 获取专栏显示卡片信息 + +> https://api.bilibili.com/x/article/cards + +*请求方法: GET* + +鉴权方式: 请求头 `Referer` 在 `.bilibili.com` 下 + +**URL 参数:** + +| 参数 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ------ | ---- | ------ | ---- | +| ids | string | 被查询的 id 列表 | 不必要 | 以 `,` 分隔, 可填视频完整 AV/BV 号, 专栏 CV 号, 直播间长短 lv 号 (可能会合并同类项) | +| web_location | string | `333.1305` | 不必要 | | +| w_rid | string | WBI 签名 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | +| wts | number | UNIX 秒级时间戳 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +以请求时 `ids` 字段中每一项为键, 其内容对象为值的表, 注意可能会合并同类项 + +`data` 中代表视频的对象 (`avxxx` 或 `Bvxxxxxxxxxx`): + +详细可参见 [视频基本信息] (../video/info.md) + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| aid | number | | | +| bvid | string | | | +| cid | number | | | +| copyright | number | | | +| cover43 | string | | | +| ctime | number | | | +| desc | string | | | +| dimension | object | | | +| duration | number | | | +| dynamic | string | | | +| owner | object | | | +| pic | string | | | +| pubdate | number | | | +| rights | object | | | +| short_link_v2 | string | | | +| stat | object | | | +| state | number | | | +| tid | number | | | +| title | string | | | +| tname | string | | | +| videos | number | | | +| vt_switch | boolean | | | + +`data` 中代表专栏的对象 (`cvxxx`): + +详细可参见 [专栏内容](view.md) + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| act_id | number | | | +| apply_time | string | | | +| attributes | number | | | +| authenMark | null | | | +| author | object | | | +| banner_url | string | | | +| categories | object[] | | | +| category | object | | | +| check_state | number | | | +| check_time | string | | | +| content_pic_list | null | | | +| cover_avid | number | | | +| ctime | number | | | +| dispute | null | | | +| dynamic | string | | | +| id | number | | | +| image_urls | string[] | | | +| is_like | boolean | | | +| list | object | | | +| media | object | | | +| mtime | number | | | +| origin_image_urls | string[] | | | +| origin_template_id | number | | | +| original | number | | | +| private_pub | number | | | +| publish_time | number | | | +| reprint | number | | | +| state | number | | | +| stats | object | | | +| summary | string | | | +| template_id | number | | | +| title | string | | | +| top_video_info | null | | | +| type | number | | | +| words | number | | | + +`data` 中代表直播间的对象: + +详细可参见 [直播间基本信息](../live/info.md) + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| area_v2_name | string | 分区完整名称 | | +| cover | string | 直播封面 | | +| face | string | 主播头像 | | +| live_status | number | 直播状态 | | +| online | number | 在线人数 | | +| pendent_ru | string | | | +| pendent_ru_color | string | | | +| pendent_ru_pic | string | | | +| role | number | | | +| room_id | number | 直播间长 id | | +| title | string | 直播间标题 | | +| uid | number | 主播 UID (mid) | | +| uname | string | 主播用户名 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/article/cards?ids=av2,cv1,cv2,15111509,lv1,lv5440' \ + --referer 'https://www.bilibili.com/' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "av2": { + "aid": 2, + "bvid": "BV1xx411c7mD", + "cid": 62131, + "copyright": 2, + "cover43": "", + "ctime": 1497344798, + "desc": "www", + "dimension": { + "height": 360, + "rotate": 0, + "width": 480 + }, + "duration": 2055, + "dynamic": "", + "owner": { + "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "mid": 2, + "name": "碧诗" + }, + "pic": "http://static.hdslb.com/images/transparent.gif", + "pubdate": 1252458549, + "rights": { + "arc_pay": 0, + "autoplay": 1, + "bp": 0, + "download": 0, + "elec": 0, + "hd5": 0, + "is_cooperation": 0, + "movie": 0, + "no_background": 0, + "no_reprint": 0, + "pay": 0, + "pay_free_watch": 0, + "ugc_pay": 0, + "ugc_pay_preview": 0 + }, + "short_link_v2": "https://b23.tv/BV1xx411c7mD", + "stat": { + "aid": 2, + "coin": 38042, + "danmaku": 121342, + "dislike": 0, + "favorite": 107375, + "his_rank": 0, + "like": 261036, + "now_rank": 0, + "reply": 86021, + "share": 20052, + "view": 4983587, + "vt": 0, + "vv": 0 + }, + "state": 0, + "tid": 130, + "title": "字幕君交流场所", + "tname": "音乐综合", + "videos": 1, + "vt_switch": false + }, + "cv1": { + "act_id": 0, + "apply_time": "", + "attributes": 24, + "authenMark": null, + "author": { + "face": "https://i1.hdslb.com/bfs/face/89fe260a17891fdadc3365a9698fee52796c7765.jpg", + "fans": 0, + "level": 0, + "mid": 91221505, + "name": "健行见远渐忘", + "nameplate": { + "condition": "2018.6.26-7.8某一天是年度大会员", + "image": "https://i2.hdslb.com/bfs/face/421179426c929dfeaed4117461c83f5d07ffb148.png", + "image_small": "https://i1.hdslb.com/bfs/face/682001c2e1c2ae887bdf2a0e18eef61180c48f84.png", + "level": "稀有勋章", + "name": "大会员2018年度勋章", + "nid": 74 + }, + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/face/7ae15f06f8c912435206a2578509d6bc77c12353.png", + "name": "作文鬼才", + "pid": 255 + }, + "vip": { + "avatar_subscript": 1, + "due_date": 0, + "label": { + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员" + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "banner_url": "https://i0.hdslb.com/bfs/article/b1e1029c08d8ad1bb06460d736839a7741dd7925.jpg", + "categories": [ + { + "id": 3, + "name": "生活", + "parent_id": 0 + }, + { + "id": 15, + "name": "日常", + "parent_id": 3 + } + ], + "category": { + "id": 15, + "name": "日常", + "parent_id": 3 + }, + "check_state": 0, + "check_time": "", + "content_pic_list": null, + "cover_avid": 0, + "ctime": 1497973729, + "dispute": null, + "dynamic": "It's now or never !", + "id": 1, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/d2eedf1fd338bceca10099e2f7b33fa9017c859b.jpg" + ], + "is_like": false, + "list": { + "apply_time": "", + "articles_count": 0, + "check_time": "", + "ctime": 1588601669, + "id": 253534, + "image_url": "", + "mid": 91221505, + "name": "静夜思", + "publish_time": 1625900652, + "read": 0, + "reason": "", + "state": 1, + "summary": "", + "update_time": 1625900518, + "words": 3059 + }, + "media": { + "area": "", + "cover": "", + "media_id": 0, + "score": 0, + "season_id": 0, + "spoiler": 0, + "title": "", + "type_id": 0, + "type_name": "" + }, + "mtime": 1589209079, + "origin_image_urls": [ + "https://i0.hdslb.com/bfs/article/b1e1029c08d8ad1bb06460d736839a7741dd7925.jpg" + ], + "origin_template_id": 4, + "original": 0, + "private_pub": 0, + "publish_time": 1519913233, + "reprint": 0, + "state": 0, + "stats": { + "coin": 2545, + "dislike": 1, + "dynamic": 0, + "favorite": 17524, + "like": 32489, + "reply": 14399, + "share": 616, + "view": 1631442 + }, + "summary": "天空像是倾倒出的墨水,黑得静谧而深邃。黎明还远,光亮全无。夜不能寐。披衣,起床。茶香的弥漫,一盏灯的相伴。夜,你是我久别重逢的朋友,那一刹那的相见,带给了我久违的安思。如果不是梦魇的皮闹,我本不该投入", + "template_id": 4, + "title": "未知的光", + "top_video_info": null, + "type": 0, + "words": 1190 + }, + "cv2": { + "act_id": 0, + "apply_time": "", + "authenMark": null, + "author": { + "face": "http://i0.hdslb.com/bfs/face/ff6b51c3b339dae5f341d1693f52132ab11c86b6.jpg", + "fans": 0, + "level": 0, + "mid": 144900660, + "name": "专栏小天使", + "nameplate": { + "condition": "", + "image": "", + "image_small": "", + "level": "", + "name": "", + "nid": 0 + }, + "official_verify": { + "desc": "专栏小天使 官方账号", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "name": "", + "pid": 0 + }, + "vip": { + "avatar_subscript": 0, + "due_date": 0, + "label": { + "label_theme": "", + "path": "", + "text": "" + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0, + "vip_pay_type": 0 + } + }, + "banner_url": "https://i0.hdslb.com/bfs/article/131b1d41b857d5308f5bff36591d117bddc48d96.jpg@90p.webp", + "categories": [ + { + "id": 3, + "name": "生活", + "parent_id": 0 + }, + { + "id": 15, + "name": "日常", + "parent_id": 3 + } + ], + "category": { + "id": 15, + "name": "日常", + "parent_id": 3 + }, + "check_state": 0, + "check_time": "", + "content_pic_list": null, + "cover_avid": 0, + "ctime": 1497973871, + "dispute": null, + "id": 2, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/0a72422ce8e77d8512f010d93b1b7f9bc4e64e52.jpg" + ], + "is_like": false, + "list": null, + "media": { + "area": "", + "cover": "", + "media_id": 0, + "score": 0, + "season_id": 0, + "spoiler": 0, + "title": "", + "type_id": 0, + "type_name": "" + }, + "mtime": 1640696950, + "origin_image_urls": [ + "https://i0.hdslb.com/bfs/article/131b1d41b857d5308f5bff36591d117bddc48d96.jpg" + ], + "origin_template_id": 4, + "original": 0, + "private_pub": 0, + "publish_time": 1509517123, + "reprint": 1, + "state": 0, + "stats": { + "coin": 3590, + "dislike": 0, + "dynamic": 0, + "favorite": 5614, + "like": 16956, + "reply": 1944, + "share": 371, + "view": 1184187 + }, + "summary": "欢迎各位使用Bilibili专栏,为了保证Bilibili专栏的内容质量,维护专栏的内容生态,让创作者和读者都拥有良好的使用体验和阅读体验,请各位谨遵以下规范条例:\n\n严令禁止条例\nbilibili严", + "template_id": 4, + "title": "专栏行为准则 ", + "top_video_info": null, + "type": 0, + "words": 3711 + }, + "lv5440": { + "area_v2_name": "历史·人文·综合", + "cover": "https://i0.hdslb.com/bfs/live/9fe50921ab9b49e80dcb398f65135191d1b8252c.jpg", + "face": "https://i0.hdslb.com/bfs/face/8f6a614a48a3813d90da7a11894ae56a59396fcd.jpg", + "live_status": 2, + "online": 0, + "pendent_ru": "", + "pendent_ru_color": "", + "pendent_ru_pic": "", + "role": 0, + "room_id": 5440, + "title": "一场穿越20年的直播|梦回千禧文学", + "uid": 9617619, + "uname": "哔哩哔哩直播" + } + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-04-26T08:24:57.605652577Z --> diff --git a/docs/article/category.md b/docs/article/category.md new file mode 100644 index 0000000..833fa40 --- /dev/null +++ b/docs/article/category.md @@ -0,0 +1,81 @@ +# 专栏分类 + +## 游戏 + +| id | parent_id | name | +|-----|-----------|------| +| 1 | 0 | 游戏 | +| 6 | 1 | 单机游戏 | +| 7 | 1 | 电子竞技 | +| 8 | 1 | 手机游戏 | +| 9 | 1 | 网络游戏 | +| 10 | 1 | 桌游棋牌 | + +## 动画 + +| id | parent_id | name | +|-----|-----------|------| +| 2 | 0 | 动画 | +| 4 | 2 | 动漫杂谈 | +| 5 | 2 | 动漫资讯 | +| 31 | 2 | 动画技术 | + +## 生活 + +| id | parent_id | name | +|-----|-----------|------| +| 3 | 0 | 生活 | +| 13 | 3 | 美食 | +| 14 | 3 | 时尚 | +| 15 | 3 | 日常 | +| 21 | 3 | 萌宠 | +| 22 | 3 | 运动 | + +## 轻小说 + +| id | parent_id | name | +|-----|-----------|------| +| 16 | 0 | 轻小说 | +| 18 | 16 | 原创连载 | +| 19 | 16 | 同人连载 | +| 20 | 16 | 小说杂谈 | +| 32 | 16 | 短篇小说 | + +## 科技 + +| id | parent_id | name | +|-----|-----------|------| +| 17 | 0 | 科技 | +| 25 | 17 | 人文历史 | +| 26 | 17 | 数码 | +| 27 | 17 | 汽车 | +| 33 | 17 | 自然 | +| 34 | 17 | 学习 | + +## 影视 + +| id | parent_id | name | +|-----|-----------|------| +| 28 | 0 | 影视 | +| 12 | 28 | 电影 | +| 35 | 28 | 电视剧 | +| 36 | 28 | 纪录片 | +| 37 | 28 | 综艺 | + +## 兴趣 + +| id | parent_id | name | +|-----|-----------|------| +| 29 | 0 | 兴趣 | +| 11 | 29 | 模型手办 | +| 23 | 29 | 绘画 | +| 24 | 29 | 手工 | +| 38 | 29 | 摄影 | +| 39 | 29 | 音乐舞蹈 | + +## 笔记 + +| id | parent_id | name | +|-----|-----------|------| +| 41 | 0 | 笔记 | +| 42 | 41 | 全部笔记 | diff --git a/docs/article/info.md b/docs/article/info.md new file mode 100644 index 0000000..7e986f0 --- /dev/null +++ b/docs/article/info.md @@ -0,0 +1,182 @@ +# 专栏基本信息 + +## 获取专栏文章基本信息 + +> https://api.bilibili.com/x/article/viewinfo + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 专栏cvid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此信息 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ------ | ---------------- | ------------------------------------------------------------ | +| like | num | 是否点赞 | 0:未点赞<br />1:已点赞<br />需要登录(Cookie) <br />未登录为0 | +| attention | bool | 是否关注文章作者 | false:未关注<br />true:已关注<br />需要登录(Cookie) <br />未登录为false | +| favorite | bool | 是否收藏 | false:未收藏<br />true:已收藏<br />需要登录(Cookie) <br />未登录为false | +| coin | num | 为文章投币数 | | +| stats | obj | 状态数信息 | | +| title | str | 文章标题 | | +| banner_url | str | 文章头图url | | +| mid | num | 文章作者mid | | +| author_name | str | 文章作者昵称 | | +| is_author | bool | true | 作用尚不明确 | +| image_urls | array | 动态封面 | | +| origin_image_urls | array | 封面图片 | | +| shareable | bool | true | 作用尚不明确 | +| show_later_watch | bool | true | 作用尚不明确 | +| show_small_window | bool | true | 作用尚不明确 | +| in_list | bool | 是否收于文集 | false:否<br />true:是 | +| pre | num | 上一篇文章cvid | 无为0 | +| next | num | 下一篇文章cvid | 无为0 | +| share_channels | array | 分享方式列表 | | +| type | num | 文章类别 | 0:文章<br />2:笔记 | + + +`stats`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ---- | +| view | num | 阅读数 | | +| favorite | num | 收藏数 | | +| like | num | 点赞数 | | +| dislike | num | 点踩数 | | +| reply | num | 评论数 | | +| share | num | 分享数 | | +| coin | num | 投币数 | | +| dynamic | num | 动态转发数 | | + +`data`中的`image_urls`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | str | 动态封面图片url | | + +`data`中的`origin_image_urls`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | str | 文章封面图片url | | + +`data`中的`share_channels`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | obj | 分享项:qq | | +| 1 | obj | 分享项:qq空间 | | +| 2 | obj | 分享项:微信 | | +| 3 | obj | 分享项:朋友圈 | | +| 4 | obj | 分享项:微博 | | + +`data`中的`share_channels`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ----------- | ---- | +| name | str | 分享名称 | | +| picture | str | 分享图片url | | +| share_channel | str | 分享代号 | | + +**示例:** + +查询文章`cv2`的基本信息 + +```shell +curl -G 'https://api.bilibili.com/x/article/viewinfo' \ +--data-urlencode 'id=2' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "like": 0, + "attention": false, + "favorite": false, + "coin": 0, + "stats": { + "view": 1072619, + "favorite": 5481, + "like": 16465, + "dislike": 0, + "reply": 1865, + "share": 351, + "coin": 3436, + "dynamic": 37 + }, + "title": "专栏行为准则 ", + "banner_url": "https://i0.hdslb.com/bfs/article/131b1d41b857d5308f5bff36591d117bddc48d96.jpg@90p.webp", + "mid": 144900660, + "author_name": "专栏小天使", + "is_author": true, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/0a72422ce8e77d8512f010d93b1b7f9bc4e64e52.jpg" + ], + "origin_image_urls": [ + "https://i0.hdslb.com/bfs/article/131b1d41b857d5308f5bff36591d117bddc48d96.jpg" + ], + "shareable": true, + "show_later_watch": true, + "show_small_window": true, + "in_list": false, + "pre": 115914, + "next": 38575, + "share_channels": [ + { + "name": "QQ", + "picture": "https://i0.hdslb.com/bfs/album/114ccfb3a999df9c4d11f274c8c61a804c8f8803.png", + "share_channel": "QQ" + }, + { + "name": "QQ空间", + "picture": "https://i0.hdslb.com/bfs/album/30e9608bbce725bca45b5910866f60ab4d5e18b3.png", + "share_channel": "QZONE" + }, + { + "name": "微信", + "picture": "https://i0.hdslb.com/bfs/album/658af3c22431cd78bb7c50be3394f7c032eba12c.png", + "share_channel": "WEIXIN" + }, + { + "name": "朋友圈", + "picture": "https://i0.hdslb.com/bfs/album/c1ebcec8c5302f29f792d15f04e0d6dcef53ec27.png", + "share_channel": "WEIXIN_MONMENT" + }, + { + "name": "微博", + "picture": "https://i0.hdslb.com/bfs/album/3707fc23f7d3e24022712320284b0de9aa78c87d.png", + "share_channel": "SINA" + } + ], + "type": 0, + "video_url": "", + "location": "", + "disable_share": false + } +} +``` + +</details> diff --git a/docs/article/view.md b/docs/article/view.md new file mode 100644 index 0000000..d763068 --- /dev/null +++ b/docs/article/view.md @@ -0,0 +1,1346 @@ +# 专栏内容 + +## 获取专栏正文内容 + +> https://api.bilibili.com/x/article/view + +*请求方法: GET* + +鉴权方式: 请求头 `User-Agent` + +**URL 参数:** + +| 参数 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ------ | ----------- | ------ | ---- | +| id | number | 专栏文章 ID | 必要 | | +| gaia_source | string | `main_web` | 不必要 | | +| w_rid | string | WBI 签名 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | +| wts | number | UNIX 秒级时间戳 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功<br />-352: 请求被风控<br />-400: 请求错误<br />-404: 啥都木有 | +| data | object | 数据本体 | 见下 | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| act_id | number | 操作 ID? | | +| apply_time | string | 应用时间? | | +| attributes | number | 属性位? | 可能不存在 | +| authenMark | null | 授权码? | | +| author | object | 作者信息 | 参考 [用户基本信息](../user/info.md) | +| banner_url | string | 文章头图 URL | 空则为无 | +| categories | object[] | 专栏分类信息 | 首项为主分区, 第二项为子分区 | +| category | object | 专栏分类信息 | 子分区 | +| check_state | number | 检查状态? | | +| check_time | string | 检查时间? | | +| content | string | 文章内容 | `type` 字段为 `0` 为 HTML, `3` 为 JSON | +| content_pic_list | unknown | 内容图片列表? | | +| cover_avid | number | 封面视频 AV 号 | `0` 为无视频 | +| ctime | number | 创建时间 | UNIX 秒级时间戳 | +| dispute | unknown | 争议信息? | | +| dyn_id_str | string | 动态 opus id | | +| dynamic | string | 动态信息? | 可能不存在 | +| id | number | 专栏文章 ID | | +| image_urls | string[] | 图片 URL | | +| is_like | boolean | 是否喜欢? | | +| keywords | string | 关键词 | 以 `,` 分隔 | +| list | object | 文集信息 | 见下 | +| media | object | 媒体信息? | | +| mtime | number | 修改时间 | UNIX 秒级时间戳 | +| opus | object | opus 信息 | 当 `type` 字段为 `3` 时存在, 包含了更加详细的富文本信息 | +| origin_image_urls | string[] | 原始图片 URL | | +| origin_template_id | number | 原始模板 ID? | | +| original | number | 是否原创 | 0: 非原创<br />1: 原创 | +| private_pub | number | 仅自己可见 | | +| publish_time | number | 发布时间 | UNIX 秒级时间戳 | +| reprint | number | 是否允许转载 | 0: 不允许<br />1: 允许规范转载 | +| state | number | 专栏状态 | | +| stats | object | 统计数据 | | +| summary | string | 专栏开头部分内容 | 纯文本 | +| tags | object[] | 专栏标签 | | +| template_id | number | 模板 ID? | | +| title | string | 专栏标题 | | +| top_video_info | unknown | 封面食品信息? | | +| total_art_num | number | 作者总文章数 | | +| type | number | 类型? | | +| version_id | number | 版本 ID? | | +| words | number | 文章总词数 | | + +`data.categories[]` 对象: + +另见 [专栏分类](category.md) + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| id | number | 分类 ID | | +| name | string | 分类名称 | | +| parent_id | number | 父分类 ID | | + +`data.category` 对象: + +同 `data.categories[]` 中的对象 + +`data.content` 为字符串形式的 JSON 时代表的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ---- | ---- | +| ops | object[] | 以 JSON 呈现的文本内容 | 套了个娃 | + +`data.content` 代表的对象中的 `ops` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ---- | ---- | +| attribute | object? | 属性 | 见下 | +| insert | string \| object | 插入内容 | | + + +`data.content` 代表的对象中的 `ops[].attribute` 对象: + +注: 此处属性备注为页面实际渲染的情况 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | -------- | ---- | ---- | +| align | string? | 文字对齐 | 参见 [text-align](https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-align) | +| blockquote | boolean? | 块级引用 | 参见 [\<blockquote\>:块级引用元素](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/blockquote) | +| bold | boolean? | 加粗 | 参见 [\<strong\>](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/strong) | +| class | string? | 类名 | 参见 [class](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Global_attributes/class) | +| color | string? | 颜色 | 十六进制颜色值, 参见 [color](https://developer.mozilla.org/zh-CN/docs/Web/CSS/color) | +| header | number? | 标题级别 | 参见 [\<h1\>–\<h6\>:HTML 区域标题元素](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/Heading_Elements) | +| strike | boolean? | 删除线 | 参见 [\<s\>](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/s) | +| link | string? | 站内链接 | 参见 [\<a\>:锚元素](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/a) | +| italic | boolean? | 斜体 | 参见 [\<em\>:强调元素](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/em) | list | string? | 列表 | `bullet`: 无序列表, 参见 [\<ul\>:无序列表元素](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/ul)<br />`ordered`: 有序列表, 参见 [\<ol\>](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/ol) | + +`data.content` 代表的对象中的 `ops[].insert` 为对象时的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| native-image | object? | 原生图片 | 见下, 另见 [\<img\>:图像嵌入元素](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/img) | +| cut-off | object? | 分割线 | 见下 | +| video-card | object? | 视频卡片 | 见下 | +| article-card | object? | 专栏卡片 | 见下 | +| vote-card | object? | 投票卡片 | 见下 | +| live-card | object? | 投票卡片 | 见下 | + +`data.content` 代表的对象中的 `ops[].insert.native-image` 对象: + +注: 此处属性备注为页面实际渲染的情况 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| alt | string | 图像的备用文本描述 | 即 `<img>` 的 `alt` 属性 | +| url | string | 图像的 URL | 即 `<img>` 的 `src` 属性 | +| width | number | 图像的宽度 | 即 `<img>` 的 `data-w` 属性 | +| height | number | 图像的高度 | 即 `<img>` 的 `data-h` 属性 | +| size | number | 图像的文件大小 | 即 `<img>` 的 `data-size` 属性 | +| status | number | `"loaded"` | 即 `<img>` 的 `data-status` 属性 | + +`data.content` 代表的对象中的 `ops[].insert.cut-off` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| type | string | 类型 | 没错, 就是字符串 | +| url | string | 分割线图片 URL | | + +`data.content` 代表的对象中的 `ops[].insert.video-card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| alt | string | | | +| height | number | 卡片高度 | 似乎恒定为 `352` | +| id | string | 视频 id | 如 `av99999999` | +| size | null | | | +| status | string | `loaded` | | +| tid | number | `1.1` | | +| url | string | 卡片图片 URL | | +| width | number | 卡片宽度 | 似乎恒定为 `2632` | + +`data.content` 代表的对象中的 `ops[].insert.article-card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| alt | string | | | +| height | number | 卡片高度 | 似乎恒定为 `320` | +| id | string | 文章 id | 如 `cv1` | +| size | null | | | +| status | string | `loaded` | | +| tid | number | `2` | | +| url | string | 卡片图片 URL | | +| width | number | 卡片宽度 | 似乎恒定为 `2632` | + +`data.content` 代表的对象中的 `ops[].insert.vote-card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| alt | string | | | +| height | number | 卡片高度 | 似乎恒定为 `320` | +| id | string | 投票 id | 确实是字符串, 如 `15111509` | +| size | null | | | +| status | string | `loaded` | | +| tid | number | `7` | | +| url | string | 卡片图片 URL | | +| width | number | 卡片宽度 | 似乎恒定为 `2632` | + +`data.content` 代表的对象中的 `ops[].insert.live-card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| alt | string | | | +| height | number | 卡片高度 | 似乎恒定为 `352` | +| id | string | 直播间 id | 可能为长也可能为短, 如 `lv1` `lv5440` | +| size | null | | | +| status | string | `loaded` | | +| tid | number | `8` | | +| url | string | 卡片图片 URL | | +| width | number | 卡片宽度 | 似乎恒定为 `2632` | + + +`data.list` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| apply_time | string | 空 | | +| articles_count | number | 0 | | +| check_time | string | 空 | | +| ctime | number | 创建时间 | UNIX 秒级时间戳 | +| id | number | 文集 ID | | +| image_url | string | 文集封面 URL | | +| mid | number | 作者 mid | | +| name | string | 文集名称 | | +| publish_time | number | 最新发布时间 | UNIX 秒级时间戳 | +| read | number | 0 | | +| reason | string | 审核不通过理由? | | +| state | number | 文集状态 | | +| summary | string | 文集描述 | | +| update_time | number | 文集更新时间 | UNIX 秒级时间戳 | +| words | number | 文集总词数 | | + +`data.media` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| area | string | | | +| cover | string | | | +| media_id | number | | | +| score | number | | | +| season_id | number | | | +| spoiler | number | | | +| title | string | | | +| type_id | number | | | +| type_name | string | | | + +`data.stats` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| coin | number | 硬币数 | | +| dislike | number | 点踩数 | 0 | +| dynamic | number | 动态数? | | +| favorite | number | 收藏数 | | +| like | number | 点赞数 | | +| reply | number | 回复数 | | +| share | number | 分享数 | | +| view | number | 查看数 | | + +`data.tags[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| name | string | 标签名 | | +| tid | number | 标签 ID | | + +**示例:** + +`type=0`: `cv1` 未知的光 + +```shell +curl -G 'https://api.bilibili.com/x/article/view' \ +--url-query 'id=1' \ +-A 'Mozilla/5.0' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "act_id": 0, + "apply_time": "", + "attributes": 24, + "authenMark": null, + "author": { + "face": "https://i1.hdslb.com/bfs/face/89fe260a17891fdadc3365a9698fee52796c7765.jpg", + "fans": 3051, + "level": 6, + "mid": 91221505, + "name": "健行见远渐忘", + "nameplate": { + "condition": "2018.6.26-7.8某一天是年度大会员", + "image": "https://i0.hdslb.com/bfs/face/421179426c929dfeaed4117461c83f5d07ffb148.png", + "image_small": "https://i0.hdslb.com/bfs/face/682001c2e1c2ae887bdf2a0e18eef61180c48f84.png", + "level": "稀有勋章", + "name": "大会员2018年度勋章", + "nid": 74 + }, + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/face/7ae15f06f8c912435206a2578509d6bc77c12353.png", + "name": "作文鬼才", + "pid": 255 + }, + "vip": { + "avatar_subscript": 1, + "due_date": 0, + "label": { + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员" + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "banner_url": "https://i0.hdslb.com/bfs/article/b1e1029c08d8ad1bb06460d736839a7741dd7925.jpg", + "categories": [ + { + "id": 3, + "name": "生活", + "parent_id": 0 + }, + { + "id": 15, + "name": "日常", + "parent_id": 3 + } + ], + "category": { + "id": 15, + "name": "日常", + "parent_id": 3 + }, + "check_state": 0, + "check_time": "", + "content": "<p>天空像是倾倒出的墨水,黑得静谧而深邃。黎明还远,光亮全无。</p><p>夜不能寐。披衣,起床。茶香的弥漫,一盏灯的相伴。夜,你是我久别重逢的朋友,那一刹那的相见,带给了我久违的安思。如果不是梦魇的皮闹,我本不该投入你的怀抱,此时此刻,万念侵扰,思绪咆哮。</p><p>台灯在角落里静静注视着我,不稳定的电流偶尔会吱吱作响。一切都像打在海绵上的水,渐渐消失,慢慢隐身于黑夜,独独留下我自己。一盏灯就可以把夜撕出个伤口,我似乎听到夜逃离光亮的脚步声,窸窸窣窣。它在蔓延,吞噬的野心已越过了窗沿。</p><p>我捧着茶杯,仿佛是在捧着一整个空间,凝重而诡异。茶香绕过茶杯脱落的瓷层向四周扩散,空气闻到了茶香,于是身边的气息似乎活跃了起来。转念一想,人生如茶。器皿的束缚不是茶香的归宿,所以人生的低谷也不是生命的全部。黑暗是光明的束缚,但光明却是黑暗的归宿。</p><p>灯光下,书架上一本金色题字的书的书名熠熠发光,我起身取下书,发现是海伦写的《假如给我三天光明》,我内心一热,忽然间有些感动。一个身体残疾的孩子,孱弱的身躯却支撑起了刚劲的灵魂。她的眼前一片漆黑,但内心世界却是光彩艳丽的。她的心中永远都有一抹无形的光,指引着她踏遍人生的路途。</p><p>时钟告诉我现在是凌晨四点。我舒展下筋骨,刚要起身,一只飞虫不偏不斜恰好闯入我的视线。灯光是它唯一的追寻。我不敢有任何的动作,只好也只能静静看着这只可爱的生灵。它好像不知道我是它的伙伴,也许它真的以为光亮是它唯一的追寻。但是我却欣慰于这突如其来的伙伴。光明可以带来很多东西,有时候也包括一份黑暗中的灵魂的一份安慰。我不忍打扰它与光明的约会,于是悄悄起身慢慢摸索着到了阳台。</p><p>阳台和我沉入了外面黑暗的梦乡。隐约可以听到一些不知名的昆虫在开着它们的舞会,我猜它们都端着无形的酒杯。它们在黑暗中买醉,因为明天的天明将是它们的散会。我有些感怀,也有些悲哀。</p><p>夜风股股咆哮着,我昂首顶住风头,仰望着漆黑的四周。很远很远处,灯塔若隐若现。它向来就是一头巨大的野兽,而此时它却空荡的像杯将尽的酒。它散发出柔弱的灯光在风中摇曳,忽明忽暗,像是一场与黑暗的决斗,随时都可能葬身在这黎明的前奏。</p><p>不忍心这惨烈的一幕,我踱步来到窗前。窗子很旧了,旧到已经无法再承受住时间的践踏了。可无论它多么陈旧,此时的它是神奇的——窗外黑暗窗内光。人心不也是一扇窗户吗?一半明媚一半伤。窗户把光亮的一面给了光明,人心是不是也应该把明媚的一半朝向世界呢?</p><p>屋内的灯倏忽闪了闪,我晃过神来,发现天边已经有抹淡红色了。黎明的脚步已经迈出了一半。那只与台灯约会的虫子似乎很满意,兴高采烈的向着呼之欲出的朝阳的方向窜去了。我望着它的背影,轻轻挥了挥手,心中暗念:“亲爱的朋友,恭喜你找到了属于自己的方向和追求,希望你能在光和热中接受生命的升华。”</p><p>天空见亮了,有点空灵,光晕中泛着感动。第一缕曙光穿透了云层,是的,我看到了,那一抹光,越来越近,越来越亮……</p>", + "content_pic_list": null, + "cover_avid": 0, + "ctime": 1497973729, + "dispute": null, + "dyn_id_str": "38554821905721204", + "dynamic": "It's now or never !", + "id": 1, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/d2eedf1fd338bceca10099e2f7b33fa9017c859b.jpg" + ], + "is_like": false, + "keywords": "天空像是倾倒出的墨水,黑得静谧而深邃。黎明还远,光亮全无。夜不能寐。披衣,起床。茶香的弥漫,一盏灯的相伴。夜,你是我久别重逢的朋友,那一刹那的相见,带给了我久违的安思。如果不是梦魇的皮闹,我本不该投入", + "list": { + "apply_time": "", + "articles_count": 0, + "check_time": "", + "ctime": 1588601669, + "id": 253534, + "image_url": "", + "mid": 91221505, + "name": "静夜思", + "publish_time": 1625900652, + "read": 0, + "reason": "", + "state": 1, + "summary": "", + "update_time": 1625900518, + "words": 3059 + }, + "media": { + "area": "", + "cover": "", + "media_id": 0, + "score": 0, + "season_id": 0, + "spoiler": 0, + "title": "", + "type_id": 0, + "type_name": "" + }, + "mtime": 1589209079, + "origin_image_urls": [ + "https://i0.hdslb.com/bfs/article/b1e1029c08d8ad1bb06460d736839a7741dd7925.jpg" + ], + "origin_template_id": 4, + "original": 0, + "private_pub": 0, + "publish_time": 1519913233, + "reprint": 0, + "state": 0, + "stats": { + "coin": 2543, + "dislike": 1, + "dynamic": 0, + "favorite": 17520, + "like": 32484, + "reply": 14399, + "share": 616, + "view": 1631212 + }, + "summary": "天空像是倾倒出的墨水,黑得静谧而深邃。黎明还远,光亮全无。夜不能寐。披衣,起床。茶香的弥漫,一盏灯的相伴。夜,你是我久别重逢的朋友,那一刹那的相见,带给了我久违的安思。如果不是梦魇的皮闹,我本不该投入", + "tags": [ + { + "name": "静夜思", + "tid": 239416 + } + ], + "template_id": 4, + "title": "未知的光", + "top_video_info": null, + "total_art_num": 5, + "type": 0, + "version_id": 0, + "words": 1190 + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-04-22T16:42:30.354080534Z --> + +`type=3`: `cv41358718` 通过 DevTools 绕过 SSR 抓包某站专栏正文接口 + +```shell +curl 'https://api.bilibili.com/x/article/view?id=41358718' \ +-A 'Mozilla/10.0' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 41358718, + "category": { + "id": 26, + "parent_id": 17, + "name": "数码" + }, + "categories": [ + { + "id": 17, + "parent_id": 0, + "name": "科技" + }, + { + "id": 26, + "parent_id": 17, + "name": "数码" + } + ], + "title": "通过 DevTools 绕过 SSR 抓包某站专栏正文接口", + "summary": "背景\n最近没什么事做, 又回 BAC 看看有什么接口可以抓, 于是看到了陈年的专栏正文内容的 Issue #859\n由于泽生自己是写前端的, 对于浏览器 DevTools 的各项调试工具还算是比较了解, 打算想办法把专栏正文的接口抓下来 :)\n思路\n由于专栏正文完整的内容在页面加载的时候就已经通过 SSR (Server-Side Rendering, 服务端渲染) 的方式通过 <script> 标签注入到 HTML 网页中, 直接通过看 DevTools 的网络面板肯定是没用的\n[图片]\n最直接的方法是", + "banner_url": "", + "template_id": 4, + "state": 0, + "author": { + "mid": 645769214, + "name": "Session小胡", + "face": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg", + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0 + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "nameplate": { + "nid": 4, + "name": "青铜殿堂", + "image": "https://i2.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", + "image_small": "https://i0.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", + "level": "普通勋章", + "condition": "单个自制视频总播放数>=1万" + }, + "vip": { + "type": 1, + "status": 0, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans": 347, + "level": 4 + }, + "reprint": 1, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/9071997152b6fec0ae465fe2a86b580e645769214.jpg" + ], + "publish_time": 1744789930, + "ctime": 1744789930, + "mtime": 1744789930, + "stats": { + "view": 51, + "favorite": 2, + "like": 3, + "dislike": 0, + "reply": 0, + "share": 0, + "coin": 2, + "dynamic": 0 + }, + "tags": [ + { + "tid": 12005, + "name": "HTML" + }, + { + "tid": 336733, + "name": "API" + }, + { + "tid": 854101, + "name": "BAC" + }, + { + "tid": 2573142, + "name": "JavaScript" + }, + { + "tid": 2709088, + "name": "Bilibili" + }, + { + "tid": 2719113, + "name": "GitHub" + }, + { + "tid": 2822654, + "name": "Web" + }, + { + "tid": 3161936, + "name": "Chromium" + }, + { + "tid": 3416147, + "name": "DevTools" + } + ], + "words": 2039, + "origin_image_urls": [ + "https://i0.hdslb.com/bfs/article/9071997152b6fec0ae465fe2a86b580e645769214.jpg" + ], + "list": { + "id": 326286, + "mid": 645769214, + "name": "电脑", + "image_url": "", + "update_time": 1744789924, + "ctime": 1601636259, + "publish_time": 1744789930, + "summary": "", + "words": 9501, + "read": 0, + "articles_count": 0, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + "is_like": false, + "media": { + "score": 0, + "media_id": 0, + "title": "", + "cover": "", + "area": "", + "type_id": 0, + "type_name": "", + "spoiler": 0, + "season_id": 0 + }, + "apply_time": "", + "check_time": "", + "original": 1, + "act_id": 0, + "dispute": null, + "authenMark": null, + "cover_avid": 0, + "top_video_info": null, + "type": 3, + "check_state": 0, + "origin_template_id": 4, + "private_pub": 0, + "content_pic_list": null, + "content": "{\"ops\":[{\"insert\":\"背景\"},{\"attributes\":{\"header\":2},\"insert\":\"\\n\"},{\"insert\":\"最近没什么事做, 又回 BAC 看看有什么接口可以抓, 于是看到了陈年的专栏正文内容的 Issue #859\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"由于泽生自己是写前端的, 对于浏览器 DevTools 的各项调试工具还算是比较了解, 打算想办法把专栏正文的接口抓下来 :)\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"思路\"},{\"attributes\":{\"header\":2},\"insert\":\"\\n\"},{\"insert\":\"由于专栏正文完整的内容在页面加载的时候就已经通过 SSR (Server-Side Rendering, 服务端渲染) 的方式通过 <script> 标签注入到 HTML 网页中, 直接通过看 DevTools 的网络面板肯定是没用的\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"attributes\":{\"class\":\"normal-img\"},\"insert\":{\"native-image\":{\"alt\":\"read-normal-img\",\"url\":\"https://i0.hdslb.com/bfs/new_dyn/7bb121008990850bbd333fe504eebc90645769214.png\",\"width\":748,\"height\":494,\"size\":185239,\"status\":\"loaded\"}}},{\"insert\":\"最直接的方法是找到专栏相关的 JavaScript 代码, 通过大脑在没有 SourceMap 的情况下沿着 bundle 逆向出接口, 这种方法对于泽生明显不可行, 其中一个原因是屏幕太小而源码太大 (-.-;)\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"另一个方法是通过伪造 SSR 不工作, 从而诱导页面脚本手动通过 API 去获取内容, 不过伪造的方法也比较麻烦, 但可行度相对较高 😆\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"关于如何伪造 SSR 不工作的现象, 就需要分析 SSR 是如何被使用的, 某站的 SSR 是通过向页面注入 JavaScript 代码实现的, 具体是在 window 全局对象上加了个属性 __INITIAL_STATE__, 具体结构需要具体页面分析\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"目标就是要在读取之前移除这个属性, 移除方法简单, 无非是直接 window.__INITIAL_STATE__ = undefined (或者任意无效值), 或者 delete window.__INITIAL_STATE__, 别的 ES6 的反射之类的方法就不说了, 这不是重点\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"但这个脚本注入的位置就很恶心, 不在 <head> 里面, 也不在 <body> 底部, 就刚好在读取 __INITIAL_STATE__ 的脚本前面, 这使得无法使用篡改猴一类的用户脚本插件进行修改, 因为提供的用户脚本执行方式会出现还没写属性和已经读过属性的问题 (゜-゜)\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"接着就是传统的 DevTools 调试面板, 但正常手动暂停脚本执行往往已经脚本执行完成了, 解决方法就是网络节流或者 <head> 处用户脚本 debugger 语句\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"正好篡改猴高级设置允许用户脚本执行前暂停开始调试, 原理就是 debugger 语句, 只要把脚本执行位置放在 <body> 之前就有机会打断点把 __INITIAL_STATE__ 删掉 💥\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"attributes\":{\"class\":\"normal-img\"},\"insert\":{\"native-image\":{\"alt\":\"read-normal-img\",\"url\":\"https://i0.hdslb.com/bfs/new_dyn/1a20d186e8c8cddc043b5295d481c719645769214.png\",\"width\":625,\"height\":563,\"size\":320286,\"status\":\"loaded\"}}},{\"insert\":\"实践\"},{\"attributes\":{\"header\":2},\"insert\":\"\\n\"},{\"insert\":\"使用 Chromium (理论上 Firefox 也可以, 但其 DevTools 泽生用起来不是很舒服) 安装篡改猴扩展 🐒, 新建一个用户脚本, 里面是否写内容无所谓, 执行位置为 document-head, 然后在篡改猴的设置里面把调试脚本打开\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"接着打开一个使用 SSR 的网页, 不过注意要保持 DevTools 打开, 否则调试就不会生效, 页面脚本自动暂停后, 你将看到你的脚本和该页面已经加载的内容, 包含 HTML 网页, JavaScript 代码, 和 CSS 文本\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"你所需要做的就是检查 SSR 的情况是否如你所想的那样, 放在 window.__INITIAL_STATE__ 那里, 如果是直接渲染成页面元素的话, 抱歉上帝来了也救不了你, 某站 JavaScript 前端可不会管 HTML 的事情 🫠\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"如果在 __INITIAL_STATE__ 里面, 恭喜, 你可以直接继续了. 如果不是, 那就检查一下当前页面路径之类的, 看看有没有不同版本的相同内容, 毕竟专栏分新旧版, 专栏网页也分新旧版, 往往旧版能带来惊喜 ✨\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"找到了合适的 __INITIAL_STATE__, 你只需要在原地打个断点, 然后继续执行脚本, 页面就会在那里暂停, 接着执行下一步, 此时赋值完成, 可以开始改属性了\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"切到控制台, 执行那句期待已久的语句: window.__INITIAL_STATE__ = undefined, 大功告成! 🎉\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"恢复页面脚本执行, 你会看到页面好像卡了一下, 然后文章还是加载了出来, 这个时候就可以看看网络面板的情况了\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"attributes\":{\"class\":\"normal-img\"},\"insert\":{\"native-image\":{\"alt\":\"read-normal-img\",\"url\":\"https://i0.hdslb.com/bfs/new_dyn/87c88df1e15195996e34835456493d55645769214.png\",\"width\":892,\"height\":831,\"size\":473706,\"status\":\"loaded\"}}},{\"insert\":\"可以观察到, 多了一个你从来没见到过的叫 view 的野生请求, 点开详细, 复制地址, 记下参数, 保存响应, 发 Issue 去也~\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"如果这时回过头看控制台, 你会发现有这么一段错误十分显眼, 无法读取 undefined 的属性, 正是由于这个错误, 加之某站程序员的细心, 你才得以看到文章和抓到接口\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"后话\"},{\"attributes\":{\"header\":2},\"insert\":\"\\n\"},{\"insert\":\"Issue 已经发了, 估计写到文档里也是泽生的事情 🥴\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"这样的因 SSR 而省下的相关接口应该也有很多, 一个个慢慢打断点抓也不是个长久之计, 毕竟一旦直接渲染成 HTML, 就没的办法了 😮‍💨\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"学习正经的前端知识还是有利于不正经的逆向的 📚\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"希望大家都能来一起帮忙, Make BAC Great Again! 🥂\"},{\"attributes\":{\"list\":\"bullet\"},\"insert\":\"\\n\"},{\"insert\":\"有改动, 原文地址: https://sess.xhustudio.eu.org/posts/2025/devtools-vs-ssr-bac/\"},{\"attributes\":{\"blockquote\":true},\"insert\":\"\\n\"}]}", + "keywords": "BULLET,HEADER,WINDOW,LIST,SSR,WIDTH,html,undefined,VIEW,FIREFOX,BAC,JAVASCRIPT,CLASS,脚本插件,SIZE,TRUE,es6,ALT,长久之计,HTTPS,CSS,控制台,一起帮,A_PI,解决方法,期待已久,大功告成,没什么,有什么,浏览器,很舒服,无所谓,有没有,程序员,有利于,不正经", + "version_id": 0, + "opus": { + "opus_id": 1056353752004427792, + "opus_source": 2, + "title": "通过 DevTools 绕过 SSR 抓包某站专栏正文接口", + "content": { + "paragraphs": [ + { + "para_type": 1, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "背景", + "font_size": 22, + "style": { + "bold": true + }, + "font_level": "xLarge" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 1 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "最近没什么事做, 又回 BAC 看看有什么接口可以抓, 于是看到了陈年的专栏正文内容的 Issue #859", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 2 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "由于泽生自己是写前端的, 对于浏览器 DevTools 的各项调试工具还算是比较了解, 打算想办法把专栏正文的接口抓下来 :)", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 1, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "思路", + "font_size": 22, + "style": { + "bold": true + }, + "font_level": "xLarge" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 1 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "由于专栏正文完整的内容在页面加载的时候就已经通过 SSR (Server-Side Rendering, 服务端渲染) 的方式通过 <script> 标签注入到 HTML 网页中, 直接通过看 DevTools 的网络面板肯定是没用的", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 2, + "pic": { + "pics": [ + { + "url": "https://i0.hdslb.com/bfs/new_dyn/7bb121008990850bbd333fe504eebc90645769214.png", + "width": 748, + "height": 494, + "size": 180.8974609375 + } + ], + "style": 1 + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 1 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "最直接的方法是找到专栏相关的 JavaScript 代码, 通过大脑在没有 SourceMap 的情况下沿着 bundle 逆向出接口, 这种方法对于泽生明显不可行, 其中一个原因是屏幕太小而源码太大 (-.-;)", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 2 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "另一个方法是通过伪造 SSR 不工作, 从而诱导页面脚本手动通过 API 去获取内容, 不过伪造的方法也比较麻烦, 但可行度相对较高 😆", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 3 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "关于如何伪造 SSR 不工作的现象, 就需要分析 SSR 是如何被使用的, 某站的 SSR 是通过向页面注入 JavaScript 代码实现的, 具体是在 window 全局对象上加了个属性 __INITIAL_STATE__, 具体结构需要具体页面分析", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 4 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "目标就是要在读取之前移除这个属性, 移除方法简单, 无非是直接 window.__INITIAL_STATE__ = undefined (或者任意无效值), 或者 delete window.__INITIAL_STATE__, 别的 ES6 的反射之类的方法就不说了, 这不是重点", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 5 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "但这个脚本注入的位置就很恶心, 不在 <head> 里面, 也不在 <body> 底部, 就刚好在读取 __INITIAL_STATE__ 的脚本前面, 这使得无法使用篡改猴一类的用户脚本插件进行修改, 因为提供的用户脚本执行方式会出现还没写属性和已经读过属性的问题 (゜-゜)", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 6 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "接着就是传统的 DevTools 调试面板, 但正常手动暂停脚本执行往往已经脚本执行完成了, 解决方法就是网络节流或者 <head> 处用户脚本 debugger 语句", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 7 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "正好篡改猴高级设置允许用户脚本执行前暂停开始调试, 原理就是 debugger 语句, 只要把脚本执行位置放在 <body> 之前就有机会打断点把 __INITIAL_STATE__ 删掉 💥", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 2, + "pic": { + "pics": [ + { + "url": "https://i0.hdslb.com/bfs/new_dyn/1a20d186e8c8cddc043b5295d481c719645769214.png", + "width": 625, + "height": 563, + "size": 312.779296875 + } + ], + "style": 1 + } + }, + { + "para_type": 1, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "实践", + "font_size": 22, + "style": { + "bold": true + }, + "font_level": "xLarge" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 1 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "使用 Chromium (理论上 Firefox 也可以, 但其 DevTools 泽生用起来不是很舒服) 安装篡改猴扩展 🐒, 新建一个用户脚本, 里面是否写内容无所谓, 执行位置为 document-head, 然后在篡改猴的设置里面把调试脚本打开", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 2 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "接着打开一个使用 SSR 的网页, 不过注意要保持 DevTools 打开, 否则调试就不会生效, 页面脚本自动暂停后, 你将看到你的脚本和该页面已经加载的内容, 包含 HTML 网页, JavaScript 代码, 和 CSS 文本", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 3 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "你所需要做的就是检查 SSR 的情况是否如你所想的那样, 放在 window.__INITIAL_STATE__ 那里, 如果是直接渲染成页面元素的话, 抱歉上帝来了也救不了你, 某站 JavaScript 前端可不会管 HTML 的事情 🫠", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 4 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "如果在 __INITIAL_STATE__ 里面, 恭喜, 你可以直接继续了. 如果不是, 那就检查一下当前页面路径之类的, 看看有没有不同版本的相同内容, 毕竟专栏分新旧版, 专栏网页也分新旧版, 往往旧版能带来惊喜 ✨", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 5 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "找到了合适的 __INITIAL_STATE__, 你只需要在原地打个断点, 然后继续执行脚本, 页面就会在那里暂停, 接着执行下一步, 此时赋值完成, 可以开始改属性了", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 6 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "切到控制台, 执行那句期待已久的语句: window.__INITIAL_STATE__ = undefined, 大功告成! 🎉", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 7 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "恢复页面脚本执行, 你会看到页面好像卡了一下, 然后文章还是加载了出来, 这个时候就可以看看网络面板的情况了", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 2, + "pic": { + "pics": [ + { + "url": "https://i0.hdslb.com/bfs/new_dyn/87c88df1e15195996e34835456493d55645769214.png", + "width": 892, + "height": 831, + "size": 462.603515625 + } + ], + "style": 1 + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 1 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "可以观察到, 多了一个你从来没见到过的叫 view 的野生请求, 点开详细, 复制地址, 记下参数, 保存响应, 发 Issue 去也~", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 2 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "如果这时回过头看控制台, 你会发现有这么一段错误十分显眼, 无法读取 undefined 的属性, 正是由于这个错误, 加之某站程序员的细心, 你才得以看到文章和抓到接口", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 1, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "后话", + "font_size": 22, + "style": { + "bold": true + }, + "font_level": "xLarge" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 1 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "Issue 已经发了, 估计写到文档里也是泽生的事情 🥴", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 2 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "这样的因 SSR 而省下的相关接口应该也有很多, 一个个慢慢打断点抓也不是个长久之计, 毕竟一旦直接渲染成 HTML, 就没的办法了 😮‍💨", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 3 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "学习正经的前端知识还是有利于不正经的逆向的 📚", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 6, + "format": { + "list_format": { + "level": 1, + "order": 4 + } + }, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "希望大家都能来一起帮忙, Make BAC Great Again! 🥂", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + }, + { + "para_type": 4, + "text": { + "nodes": [ + { + "node_type": 1, + "word": { + "words": "有改动, 原文地址: https://sess.xhustudio.eu.org/posts/2025/devtools-vs-ssr-bac/", + "font_size": 17, + "style": {}, + "font_level": "regular" + } + } + ] + } + } + ] + }, + "tags": [ + { + "tag": { + "show_text": "HTML", + "link_type": 36 + } + }, + { + "tag": { + "show_text": "API", + "link_type": 36 + } + }, + { + "tag": { + "show_text": "BAC", + "link_type": 36 + } + }, + { + "tag": { + "show_text": "JavaScript", + "link_type": 36 + } + }, + { + "tag": { + "show_text": "Bilibili", + "link_type": 36 + } + }, + { + "tag": { + "show_text": "GitHub", + "link_type": 36 + } + }, + { + "tag": { + "show_text": "Web", + "link_type": 36 + } + }, + { + "tag": { + "show_text": "Chromium", + "link_type": 36 + } + }, + { + "tag": { + "show_text": "DevTools", + "link_type": 36 + } + } + ], + "pub_info": { + "uid": 645769214, + "pub_time": 1744789930 + }, + "article": { + "category_id": 26, + "list_id": 326286, + "originality": 1, + "reproduced": 1, + "cover": [ + { + "url": "http://i0.hdslb.com/bfs/article/9071997152b6fec0ae465fe2a86b580e645769214.jpg", + "width": 768, + "height": 430, + "size": 58.13671875 + } + ], + "biz_tags": [ + "JavaScript", + "HTML", + "Chromium", + "DevTools", + "BAC", + "GitHub", + "API", + "Bilibili", + "Web" + ] + }, + "version": { + "cvid": 41358718, + "version_id": 140614555890906624 + } + }, + "dyn_id_str": "1056353752004427792", + "total_art_num": 4 + } +} +``` + +</details> diff --git a/docs/audio/action.md b/docs/audio/action.md new file mode 100644 index 0000000..8199f05 --- /dev/null +++ b/docs/audio/action.md @@ -0,0 +1,148 @@ +# 音频投币&收藏 + +## 查询音频收藏状态 + +> https://www.bilibili.com/audio/music-service-c/web/collections/songs-coll + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`存在且不为0 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />72000000:参数错误<br />72010002:账号未登陆<br />7201006:该音频不存在或已被下架 | +| msg | str | 错误信息 | 默认为success | +| data | bool | 是否收藏 | false:未收藏<br />true:已收藏 | + +**示例:** + +查询音频`au13598`的收藏状态 + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/collections/songs-coll' \ +--data-urlencode 'sid=13598' \ +-b 'SESSDATA=xxx;DedeUserID=1;' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": true +} +``` + +</details> + +## 查询音频投币数 + +> https://www.bilibili.com/audio/music-service-c/web/coin/audio + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`存在且不为0 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />72000000:参数错误<br />72010002:账号未登陆<br />7201006:该音频不存在或已被下架 | +| msg | str | 错误信息 | 默认为success | +| data | num | 投币数量 | 0为未投币,上限为2 | + +**示例:** + +查询音频`au13598`的投币数 + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/coin/audio' \ +--data-urlencode 'sid=15664' \ +-b 'SESSDATA=xxx;DedeUserID=1;' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": 1 +} +``` + +</details> + +## 投币音频 + +> https://www.bilibili.com/audio/music-service-c/web/coin/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------- | ------ | ---- | +| sid | num | 音频 auid | 必要 | | +| multiply | num | 投币数量(最大为 2) | 必要 | | +| csrf | str | CSRF Token(位于 cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />72000000:参数错误<br />72010002:账号未登陆<br />7201006:该音频不存在或已被下架 | +| msg | str | 错误信息 | 默认为 0 | +| data | str | 当前投币数量 | 0 为未投币,上限为 2 | + +**示例:** + +为音频`au13598`投币 + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/coin/add' \ +--data-urlencode 'sid=15664' \ +-b 'SESSDATA=xxx;DedeUserID=1;' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "0", + "data": "1" +} +``` + +</details> diff --git a/docs/audio/info.md b/docs/audio/info.md new file mode 100644 index 0000000..2b296ff --- /dev/null +++ b/docs/audio/info.md @@ -0,0 +1,425 @@ +# 歌曲基本信息 + +## 查询歌曲基本信息 + +> https://www.bilibili.com/audio/music-service-c/web/song/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />72000000:参数错误<br />7201006:该音频不存在或已被下架<br />72010027:版权音乐重定向 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj<br />错误时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ------ | ------------------ | ------------------ | +| id | num | 音频auid | | +| uid | num | UP主mid | | +| uname | str | UP主昵称 | | +| author | str | 作者名 | | +| title | str | 歌曲标题 | | +| cover | str | 封面图片url | | +| intro | str | 歌曲简介 | | +| lyric | str | lrc歌词url | | +| crtype | num | 1 | **作用尚不明确** | +| duration | num | 歌曲时间长度 | 单位为秒 | +| passtime | num | 歌曲发布时间 | 时间戳 | +| curtime | num | 当前请求时间 | 时间戳 | +| aid | num | 关联稿件avid | 无为0 | +| bvid | str | 关联稿件bvid | 无为空 | +| cid | num | 关联视频cid | 无为0 | +| msid | num | 0 | **作用尚不明确** | +| attr | num | 0 | **作用尚不明确** | +| limit | num | 0 | **作用尚不明确** | +| activityId | num | 0 | **作用尚不明确** | +| limitdesc | str | 空 | **作用尚不明确** | +| ctime | null | - | **作用尚不明确** | +| statistic | obj | 状态数 | | +| vipInfo | obj | UP主会员状态 | | +| collectIds | array | 歌曲所在的收藏夹mlid | 需要登录(SESSDATA) | +| coin_num | num | 投币数 | | + +`data`中的`statistic`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| sid | num | 音频auid | | +| play | num | 播放次数 | | +| collect | num | 收藏数 | | +| comment | num | 评论数 | | +| share | num | 分享数 | | + +`data`中的`vipInfo`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | ----------------------------------- | +| type | num | 会员类型 | 0:无<br />1:月会员<br />2:年会员 | +| status | num | 会员状态 | 0:无<br />1:有 | +| due_date | num | 会员到期时间 | 时间戳 毫秒 | +| vip_pay_type | num | 会员开通状态 | 0:无<br />1:有 | + +`data`中的`collectIds`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------------- | ---- | +| 0 | num | 第1个所在的收藏夹mlid | | +| n | num | 第(n+1)个所在的收藏夹mlid | | +| …… | num | …… | …… | + +**示例:** + +查询音频`au13598`的基本信息 + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/song/info' \ +--data-urlencode 'sid=13598' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": { + "id": 13598, + "uid": 486183, + "uname": "排骨教主", + "author": "排骨教主", + "title": "牵丝戏", + "cover": "http://i0.hdslb.com/bfs/music/cf50d93b4dc08bfc6d3112041d6de0e56045ac5b.jpg", + "intro": "自制 这次要特别感谢山东省京剧院的各位年轻的老师们对我戏腔发声的悉心指导\n关注排骨的微博@排骨节操收割机\n排骨QQ群456237456\n感谢@妄北没睡够(新浪微博) 画的视频图,太美了!!!!!\n", + "lyric": "http://i0.hdslb.com/bfs/music/150587810313598.lrc", + "crtype": 1, + "duration": 239, + "passtime": 1501640683, + "curtime": 1590154258, + "aid": 2554020, + "bvid": "BV1us411S7E6", + "cid": 3990196, + "msid": 0, + "attr": 0, + "limit": 0, + "activityId": 0, + "limitdesc": "", + "ctime": null, + "statistic": { + "sid": 13598, + "play": 1028516, + "collect": 30914, + "comment": 523, + "share": 384 + }, + "vipInfo": { + "type": 2, + "status": 1, + "due_date": 1620316800000, + "vip_pay_type": 0 + }, + "collectIds": [ + 15967839 + ], + "coin_num": 1777 + } +} +``` + +</details> + +## 查询歌曲TAG + +> https://www.bilibili.com/audio/music-service-c/web/tag/song + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | -------- | ------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为success | +| data | array | TAG列表 | 无为空 | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| 0 | str | TAG1 | | +| n | str | TAG(n+1) | | +| …… | str | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------- | ---------------- | +| type | str | song | **作用尚不明确** | +| subtype | num | ??? | **作用尚不明确** | +| key | num | TAG id?? | **作用尚不明确** | +| info | str | TAG名 | | + +**示例:** + +查询音频`au15664`的TAG + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/tag/song' \ +--data-urlencode 'sid=15664' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": [ + { + "type": "song", + "subtype": 0, + "key": 1, + "info": "音乐" + }, + { + "type": "song", + "subtype": 1, + "key": 3, + "info": "人声" + }, + { + "type": "song", + "subtype": 2, + "key": 2, + "info": "翻唱" + }, + { + "type": "song", + "subtype": 3, + "key": 33, + "info": "日语" + }, + { + "type": "song", + "subtype": 5, + "key": 41, + "info": "网络歌曲" + }, + { + "type": "song", + "subtype": 4, + "key": 7, + "info": "流行" + } + ] +} +``` + +</details> + +## 查询歌曲创作成员列表 + +> https://www.bilibili.com/audio/music-service-c/web/member/song + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ------------ | ------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为success | +| data | array | 成员类型列表 | 无为空 | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | str | 成员类型1 | | +| n | str | 成员类型(n+1) | | +| …… | str | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ------------ | ------------------------------------------------------------ | +| list | array | 成员列表 | | +| type | num | 成员类型代码 | 1:歌手<br />2:作词<br />3:作曲<br />4:编曲<br />5:后期/混音<br />7:封面制作<br />8:音源<br />9:调音<br />10:演奏<br />11:乐器<br />127:UP主 | + +`data`数组中的对象中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | str | 成员1 | | +| n | str | 成员(n+1) | | +| …… | str | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------- | ---------------- | +| mid | num | 0 | **作用尚不明确** | +| name | str | 成员名 | | +| member_id | num | 成员id?? | **作用尚不明确** | + +**示例:** + +查询音频`au815861`的创作成员信息 + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/member/song' \ +--data-urlencode 'sid=815861' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": [ + { + "list": [ + { + "mid": 0, + "name": "匀子Cyrena", + "member_id": 164341 + } + ], + "type": 1 + }, + { + "list": [ + { + "mid": 0, + "name": "圣月樱泪 ", + "member_id": 12349 + } + ], + "type": 2 + }, + { + "list": [ + { + "mid": 0, + "name": "Days的Wing翼", + "member_id": 13777 + } + ], + "type": 3 + }, + { + "list": [ + { + "mid": 0, + "name": "Days的Wing翼", + "member_id": 13777 + } + ], + "type": 4 + }, + { + "list": [ + { + "mid": 0, + "name": "嘟比Dubi", + "member_id": 40902 + } + ], + "type": 5 + }, + { + "list": [ + { + "mid": 0, + "name": "匀子Cyrena", + "member_id": 164222 + } + ], + "type": 127 + } + ] +} +``` + +</details> + +## 获取歌曲歌词 + +> https://www.bilibili.com/audio/music-service-c/web/song/lyric + +*请求方式:GET* + +同[查询歌曲基本信息](#查询歌曲基本信息)中的lrc歌词 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----------------------------- | --------------- | ------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:str<br />错误时:null | lrc格式歌词信息 | 无为空 | + +**示例:** + +获取音频`au15664`的歌词信息 + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/song/lyric' \ +--data-urlencode 'sid=15664' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": "[ar:萧忆情]\n\n[ti:威风堂堂]\n\n[00:26.64]引诱谁去摘下禁果\n\n[00:28.11]甜美滋味偷咬一口\n\n[00:30.03]触及到了最深处果核\n\n[00:31.82]身体开始颤抖\n\n[00:33.85]舌尖已濡湿双腿内侧\n\n[00:35.55]神经末梢警报响彻\n\n[00:37.39]自内而外逐渐变得火热\n\n[00:39.14]现在无须再遵守规则\n\n[00:42.14]还故作矜持说违心的话\n\n[00:45.84]为何动作不停下\n\n[00:47.85]停下来\n\n[00:48.39]已经快停不下来\n\n[00:49.42]还想索取更多\n\n[00:50.46]踩碎那PRIDE\n\n[00:51.41]忘记毫无意义的理智存在\n\n[00:53.27]让暧昧因子在四处的徘徊\n\n[00:55.19]给我收起你那\n\n[00:56.21]太虚伪的STYLE\n\n[00:57.01]直白赤裸的爱\n\n[00:58.00]最原始的DIVE\n\n[00:58.86]喘息中断续的声音叫期待\n\n[01:00.65]别掩饰此刻\n\n[01:01.50]那让人意乱情迷的SMILE\n\n[01:10.90]缓慢吐息迷惑双眼的雾\n\n[01:12.49]强制禁锢身下轻舔锁骨\n\n[01:14.23]就让封锁的心渐渐领悟\n\n[01:15.97]别继续装无辜\n\n[01:17.54]开始脱下的衬衫\n\n[01:19.08]最后的纽扣解开它\n\n[01:20.98]快感get\n\n[01:21.85]从此不顾一切\n\n[01:23.32]还在犹豫什么\n\n[01:24.78]Darling\n\n[01:26.54]站在自由世界的正中央\n\n[01:30.09]窥探你幻想的是否太过浪荡\n\n[01:33.99]太难耐\n\n[01:34.41]分分秒秒太难耐\n\n[01:35.61]床笫间的狩猎\n\n[01:36.63]充满野心的TRY\n\n[01:37.66]不承认口头上无理的摊牌\n\n[01:39.58]只想要在身体里深埋\n\n[01:41.34]现在由我掌控\n\n[01:42.36]随心所欲的LIFE\n\n[01:43.40]给你要的未来\n\n[01:44.41]永远不腐坏\n\n[01:45.32]所有的阴暗面统统藏起来\n\n[01:46.70]仅为你一人展现那能骄傲夸耀的MIND\n\n[01:49.90]将不安的情绪碾至粉末\n\n[01:53.14]抹在你胸口印上最鲜艳的红\n\n[02:21.06]别打算缩起来置身之外\n\n[02:22.64]无论何时\n\n[02:23.27]NO TIME\n\n[02:23.58]ALL RIGHT\n\n[02:24.21]打破一切的羞耻值\n\n[02:25.43]哪里奇怪\n\n[02:26.06]哪里奇怪\n\n[02:26.68]哪里奇怪\n\n[02:27.30]BURN BURN BURN\n\n[02:28.22]想要的就是那\n\n[02:29.17]啊 没错\n\n[02:29.87]再给我更多的触摸\n\n[02:31.62]顺位交换贴近肌肤的DANCE\n\n[02:33.34]好吧 肆无忌惮\n\n[02:34.98]停下来\n\n[02:35.35]已经快停不下来\n\n[02:36.50]还想索取更多\n\n[02:37.68]踩碎那PRIDE\n\n[02:38.38]忘记毫无意义的理智存在\n\n[02:40.27]让暧昧因子在四处的徘徊\n\n[02:42.11]给我收起你那\n\n[02:43.16]太虚伪的STYLE\n\n[02:44.00]直白赤裸的爱\n\n[02:45.06]最原始的DIVE\n\n[02:45.90]喘息中断续的声音叫期待\n\n[02:47.76]别掩饰此刻那让人意乱情迷的SMILE\n\n[02:50.64]将不安的情绪碾至粉末\n\n[02:54.09]抹在你胸口印上最鲜艳的红\n\n[02:58.35]抛弃所有只想拥有此刻\n\n" +} +``` + +</details> diff --git a/docs/audio/music_list.md b/docs/audio/music_list.md new file mode 100644 index 0000000..8e8dff0 --- /dev/null +++ b/docs/audio/music_list.md @@ -0,0 +1,782 @@ +# 歌单&音频收藏夹详细信息 + +## 查询自己创建的歌单 + +> https://www.bilibili.com/audio/music-service-c/web/collections/list + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`存在且不为0 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| pn | num | 页码 | 必要 | | +| ps | num | 每页项数 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----------------------------- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />72000000:参数错误<br />72010002:未登录 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj<br />错误时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | ------------ | ---- | +| curPage | num | 当前页码 | | +| pageCount | num | 总计页数 | | +| totalSize | num | 总计收藏夹数 | | +| pageSize | num | 当前页面项数 | | +| data | array | 歌单列表 | | + +`data`中的`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ---- | +| 0 | obj | 音频收藏夹mlid1 | | +| n | obj | 音频收藏夹mlid(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | ------------------------ | -------------------------------- | +| id | num | 音频收藏夹mlid | | +| uid | num | 创建用户mid | | +| uname | str | 创建用户昵称 | | +| title | str | 歌单标题 | | +| type | num | 收藏夹属性 | 0:普通收藏夹<br />1:默认收藏夹 | +| published | num | 是否公开 | 0:不公开<br />1:公开 | +| cover | str | 歌单封面图片url | | +| ctime | num | 歌单创建时间 | 时间戳 | +| song | num | 歌单中的音乐数量 | | +| desc | str | 歌单备注信息 | | +| sids | array | 歌单中的音乐 | | +| menuId | num | 音频收藏夹对应的歌单amid | | +| statistic | obj | 歌单状态数信息 | | + +`data`中的`sids`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---------------- | +| 0 | num | 收藏的音频auid1 | | +| n | num | 收藏的音频auid(n+1) | 按照歌单顺序排列 | +| …… | num | …… | …… | + +`data`中的`statistic`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------------------ | ---- | +| sid | num | 音频收藏夹对应的歌单amid | | +| play | num | 播放数 | | +| collect | num | 收藏数 | | +| comment | null | 评论数 | | +| share | num | 分享数 | | + +**示例:** + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/collections/list' \ +--data-urlencode 'ps=2' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx;DedeUserID=1;' +``` + +共计创建了两个歌单,如下 + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": { + "curPage": 1, + "pageCount": 1, + "totalSize": 2, + "pageSize": 2, + "data": [ + { + "id": 15967839, + "uid": 293793435, + "uname": "社会易姐QwQ", + "title": "默认歌单", + "type": 1, + "published": 1, + "cover": "http://i0.hdslb.com/bfs/music/1e079693701d2f525850c288fcc48fa4259a73f6.jpg", + "ctime": 1519295502, + "song": 13, + "desc": "", + "sids": [ + 11673, + 276404, + 15664, + 737904, + 108588, + 1286999, + 658085, + 682118, + 736952, + 48716, + 15711, + 13598, + 57744 + ], + "menuId": 15958713, + "statistic": { + "sid": 15958713, + "play": 0, + "collect": 0, + "comment": null, + "share": 0 + } + }, + { + "id": 30894022, + "uid": 293793435, + "uname": "社会易姐QwQ", + "title": "test", + "type": 0, + "published": 1, + "cover": "", + "ctime": 1590154346, + "song": 0, + "desc": "test1", + "sids": [], + "menuId": 30866686, + "statistic": { + "sid": 30866686, + "play": 0, + "collect": 0, + "comment": 0, + "share": 0 + } + } + ] + } +} +``` + +</details> + +## 查询音频收藏夹(默认歌单)信息 + +> https://www.bilibili.com/audio/music-service-c/web/collections/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`存在且不为0 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | ------------------ | +| sid | num | 音频收藏夹mlid | 必要 | 必须为默认收藏夹mlid | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----------------------------- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />72000000:参数错误<br />72010002:未登录 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj<br />错误时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | ------------------------ | ---------------------- | +| id | num | 音频收藏夹mlid | | +| uid | num | 创建用户mid | | +| uname | str | 创建用户昵称 | | +| title | str | 默认歌单 | 恒为`默认歌单` | +| type | num | 1 | 恒为`1` | +| published | num | 是否公开 | 0:不公开<br />1:公开 | +| cover | str | 歌单封面图片url | | +| ctime | num | 歌单创建时间 | 时间戳 | +| song | num | 歌单中的音乐数量 | | +| desc | str | 空 | 恒为空 | +| sids | array | 歌单中的音乐 | | +| menuId | num | 音频收藏夹对应的歌单amid | 与普通歌单不同通用 | +| statistic | obj | 歌单状态数信息 | | + +`data`中的`sids`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---------------- | +| 0 | num | 收藏的音频auid1 | | +| n | num | 收藏的音频auid(n+1) | 按照歌单顺序排列 | +| …… | num | …… | …… | + +`data`中的`statistic`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------------------ | ---- | +| sid | num | 音频收藏夹对应的歌单amid | | +| play | num | 0 | | +| collect | num | 0 | | +| comment | null | - | | +| share | num | 0 | | + +**示例:** + +查询我的默认歌单,id为` 15967839 ` + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/collections/info' \ +--data-urlencode 'sid=15967839 ' \ +-b 'SESSDATA=xxx;DedeUserID=1;' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": { + "id": 15967839, + "uid": 293793435, + "uname": "社会易姐QwQ", + "title": "默认歌单", + "type": 1, + "published": 1, + "cover": "http://i0.hdslb.com/bfs/music/1e079693701d2f525850c288fcc48fa4259a73f6.jpg", + "ctime": 1519295502, + "song": 13, + "desc": "", + "sids": [ + 11673, + 276404, + 15664, + 737904, + 108588, + 1286999, + 658085, + 682118, + 736952, + 48716, + 15711, + 13598, + 57744 + ], + "menuId": 15958713, + "statistic": { + "sid": 15958713, + "play": 0, + "collect": 0, + "comment": null, + "share": 0 + } + } +} +``` + +</details> + + +## 查询热门歌单 + +> https://www.bilibili.com/audio/music-service-c/web/menu/hit + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | ---- | --- | --- | +| pn | num | 页码 | 必要 | | +| ps | num | 每页项数 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | --------------------- | ---- | ----------------------------------------- | +| code | num | 返回值 | 0:成功<br />72000000:参数错误<br />72010002:未登录 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj<br />错误时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------ | --- | +| curPage | num | 当前页码 | | +| pageCount | num | 总计页数 | | +| totalSize | num | 总计收藏夹数 | | +| pageSize | num | 当前页面项数 | | +| data | array | 歌单列表 | | + +`data`中的`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | --- | -------------- | --- | +| 0 | obj | 音频收藏夹mlid1 | | +| n | obj | 音频收藏夹mlid(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | --- | -------------- | ----------------------------- | +| menuId | num | 音频收藏夹对应的歌单amid | | +| uid | num | 创建用户mid | | +| uname | str | 创建用户昵称 | | +| title | str | 歌单标题 | | +| cover | str | 歌单封面图片url | | +| intro | str | 歌单介绍 | | +| type | num | 歌单属性 | 1:普通歌单<br/>2:置顶歌单<br/>5:PGC歌单 | +| off | num | 歌单是否公开 | 0:公开<br/>1:私密 | +| ctime | num | 歌单创建时间 | 时间戳 | +| curtime | num | 当前时间 | 时间戳 | +| statistic | obj | 歌单状态数信息 | | +| snum | num | 歌单包含歌曲个数 | | + +`data`中的`statistic`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | --- | -------------- | --- | +| sid | num | 音频收藏夹对应的歌单amid | | +| play | num | 播放数 | | +| collect | num | 收藏数 | | +| comment | num | 评论数 | | +| share | num | 分享数 | | + +**示例:** + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/menu/hit' \ + +--data-urlencode 'ps=1' \ + +--data-urlencode 'pn=6' +``` + +使用参数:`ps=1&qn=2` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": { + "curPage": 1, + "pageCount": 1, + "totalSize": 11, + "pageSize": 3, + "data": [{ + "menuId": 10624, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "新曲推荐", + "cover": "http://i0.hdslb.com/bfs/music/a32c1ed4f6ec3f74f8240f4486a750dda3a509e5.jpg", + "intro": "每天11:00更新,为你推送最新音乐", + "type": 2, + "off": 0, + "ctime": 1501209433, + "curtime": 1655712354, + "statistic": { + "sid": 10624, + "play": 2366255, + "collect": 20565, + "comment": 1104, + "share": 622 + }, + "snum": 16, + "attr": 0, + "isDefault": 0, + "collectionId": 0 + }, { + "menuId": 125312, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "丧甜可口?你意想不到的软萌电音", + "cover": "http://i0.hdslb.com/bfs/music/04f6c29ed094368253bc05fecb7bf990cee2d3a3.jpg", + "intro": "这个化学反应是怦然心动?", + "type": 1, + "off": 0, + "ctime": 1533298738, + "curtime": 1655712354, + "statistic": { + "sid": 125312, + "play": 298018, + "collect": 9928, + "comment": 89, + "share": 239 + }, + "snum": 19, + "attr": 0, + "isDefault": 0, + "collectionId": 0 + }, { + "menuId": 26241, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "那些听了会泪目的动漫歌曲", + "cover": "http://i0.hdslb.com/bfs/music/006832318fc85fdf287667d51d83dba3b78be808.jpg", + "intro": "那些年陪伴我们的动漫歌曲,你还记得吗?\n", + "type": 1, + "off": 0, + "ctime": 1509608572, + "curtime": 1655712354, + "statistic": { + "sid": 26241, + "play": 370120, + "collect": 8390, + "comment": 110, + "share": 131 + }, + "snum": 12, + "attr": 0, + "isDefault": 0, + "collectionId": 0 + }] + } +} +``` + +</details> + +## 查询热门榜单 + +> https://www.bilibili.com/audio/music-service-c/web/menu/rank + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | ---- | --- | --- | +| pn | num | 页码 | 必要 | | +| ps | num | 每页项数 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | --------------------- | ---- | ----------------------------------------- | +| code | num | 返回值 | 0:成功<br />72000000:参数错误<br />72010002:未登录 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj<br />错误时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------ | --- | +| curPage | num | 当前页码 | | +| pageCount | num | 总计页数 | | +| totalSize | num | 总计收藏夹数 | | +| pageSize | num | 当前页面项数 | | +| data | array | 歌单列表 | | + +`data`中的`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | --- | -------------- | --- | +| 0 | obj | 音频收藏夹mlid1 | | +| n | obj | 音频收藏夹mlid(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------------- | ----------------------------- | +| menuId | num | 音频收藏夹对应的歌单amid | | +| uid | num | 创建用户mid | | +| uname | str | 创建用户昵称 | | +| title | str | 歌单标题 | | +| cover | str | 歌单封面图片url | | +| intro | str | 歌单介绍 | | +| type | num | 歌单属性 | 1:普通歌单<br/>2:置顶歌单<br/>5:PGC歌单 | +| off | num | 歌单是否公开 | 0:公开<br/>1:私密 | +| ctime | num | 歌单创建时间 | 时间戳 | +| curtime | num | 当前时间 | 时间戳 | +| statistic | obj | 歌单状态数信息 | | +| snum | num | 歌单包含歌曲个数 | | +| audios | array | 歌单中的音乐信息(部分) | | + +`data`数组中的`statistic`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | --- | -------------- | --- | +| sid | num | 音频收藏夹对应的歌单amid | | +| play | num | 收藏数 | | +| collect | num | 点赞数 | | +| comment | num | 评论数 | | +| share | num | 分享数 | | + +`data`数组中的`audios`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | --- | ------- | --- | +| 0 | obj | 音频1 | | +| n | obj | 音频(n+1) | | +| …… | obj | …… | …… | + +`audios`数组中的`audios`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | --- | ---- | ------- | +| id | num | 音频id | | +| title | str | 音频标题 | | +| duration | num | 音频时长 | 单位:秒(s) | + + + +**示例:** + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/menu/rank' \ + +--data-urlencode 'ps=1' \ + +--data-urlencode 'pn=6' +``` + +使用参数:`ps=1&qn=6` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": { + "curPage": 1, + "pageCount": 2, + "totalSize": 12, + "pageSize": 6, + "data": [{ + "menuId": 10624, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "新曲推荐", + "cover": "http://i0.hdslb.com/bfs/music/a32c1ed4f6ec3f74f8240f4486a750dda3a509e5.jpg", + "intro": "每天11:00更新,为你推送最新音乐", + "type": 2, + "off": 0, + "ctime": 1501209433, + "curtime": 1655713346, + "statistic": { + "sid": 10624, + "play": 2366255, + "collect": 20565, + "comment": 1104, + "share": 622 + }, + "snum": 16, + "attr": 0, + "isDefault": 0, + "collectionId": 0, + "audios": [{ + "id": 1572281, + "title": "【Mitchie M】Nechusho No!No! (feat. 初音未来 & MEIKO)", + "duration": 112 + }, { + "id": 1551077, + "title": "【洛天依原创】双星伴生", + "duration": 197 + }, { + "id": 1544428, + "title": "【小柔】寄り酔い(cover)", + "duration": 216 + }] + }, { + "menuId": 10627, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "热歌榜(每日11:00更新)", + "cover": "http://i0.hdslb.com/bfs/music/bc735b32ab123f7ddc602b9194defae2cd66062f.jpg", + "intro": "每日上午11:00更新,精选三日内热门投稿作品。", + "type": 2, + "off": 0, + "ctime": 1501211353, + "curtime": 1655713346, + "statistic": { + "sid": 10627, + "play": 2289612, + "collect": 11437, + "comment": 434, + "share": 223 + }, + "snum": 20, + "attr": 0, + "isDefault": 0, + "collectionId": 0, + "audios": [{ + "id": 1955567, + "title": "山海(原唱:草东没有派对)", + "duration": 215 + }, { + "id": 923884, + "title": "platiunm", + "duration": 181 + }, { + "id": 1954370, + "title": "Dark Dawn v1", + "duration": 200 + }] + }, { + "menuId": 10628, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "原创榜(每日11:00更新)", + "cover": "http://i0.hdslb.com/bfs/music/58782504cefb307878d12422fd365ed7f971fad1.jpg", + "intro": "每日上午11:00更新,精选三日内原创投稿音乐。", + "type": 2, + "off": 0, + "ctime": 1501211627, + "curtime": 1655713346, + "statistic": { + "sid": 10628, + "play": 395817, + "collect": 2583, + "comment": 314, + "share": 88 + }, + "snum": 20, + "attr": 0, + "isDefault": 0, + "collectionId": 0, + "audios": [{ + "id": 923884, + "title": "platiunm", + "duration": 181 + }, { + "id": 1954370, + "title": "Dark Dawn v1", + "duration": 200 + }, { + "id": 1954654, + "title": "张真源 - 你要快乐 (Live)", + "duration": 235 + }] + }, { + "menuId": 10629, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "中文人声三日榜", + "cover": "http://i0.hdslb.com/bfs/music/f547e3b96d3f283eaa6a3a071de22092fb5101f8.jpg", + "intro": "每日上午11:00更新,精选三日内中文人声投稿音乐。", + "type": 2, + "off": 0, + "ctime": 1501211818, + "curtime": 1655713346, + "statistic": { + "sid": 10629, + "play": 842507, + "collect": 5102, + "comment": 362, + "share": 137 + }, + "snum": 20, + "attr": 0, + "isDefault": 0, + "collectionId": 0, + "audios": [{ + "id": 1955567, + "title": "山海(原唱:草东没有派对)", + "duration": 215 + }, { + "id": 1955546, + "title": "爱你", + "duration": 86 + }, { + "id": 1954654, + "title": "张真源 - 你要快乐 (Live)", + "duration": 235 + }] + }, { + "menuId": 10630, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "日文人声三日榜", + "cover": "http://i0.hdslb.com/bfs/music/7dd5d629f50481e22e2f5eced510f5fbd89f5233.jpg", + "intro": "每日上午11:00更新,精选三日内日文人声投稿音乐。", + "type": 2, + "off": 0, + "ctime": 1501211959, + "curtime": 1655713346, + "statistic": { + "sid": 10630, + "play": 891268, + "collect": 8671, + "comment": 601, + "share": 169 + }, + "snum": 20, + "attr": 0, + "isDefault": 0, + "collectionId": 0, + "audios": [{ + "id": 1954053, + "title": "派对浪客诸葛孔明 插入歌『ChocoPate』久远七海 starring Lezel", + "duration": 117 + }, { + "id": 1956316, + "title": "ただ君に晴れ(只给予你的晴天)", + "duration": 196 + }, { + "id": 1956321, + "title": "うまぴょい伝説(马儿蹦跳传说)", + "duration": 262 + }] + }, { + "menuId": 10631, + "uid": 32708543, + "uname": "大家的音乐姬", + "title": "VOCALOID三日榜", + "cover": "http://i0.hdslb.com/bfs/music/ce8b1646cbbd5513de7976ba81d0fd9c340c1899.jpg", + "intro": "每日上午11:00更新,精选三日内VOCALOID投稿音乐。", + "type": 2, + "off": 0, + "ctime": 1501212166, + "curtime": 1655713346, + "statistic": { + "sid": 10631, + "play": 170112, + "collect": 2900, + "comment": 528, + "share": 60 + }, + "snum": 10, + "attr": 0, + "isDefault": 0, + "collectionId": 0, + "audios": [{ + "id": 1954717, + "title": "弦歌引-翻调", + "duration": 230 + }, { + "id": 1956148, + "title": "告RADIO - 春色リップ", + "duration": 253 + }, { + "id": 1954302, + "title": "susan说", + "duration": 195 + }] + }] + } +} +``` + +</details> diff --git a/docs/audio/musicstream_url.md b/docs/audio/musicstream_url.md new file mode 100644 index 0000000..26f9c2c --- /dev/null +++ b/docs/audio/musicstream_url.md @@ -0,0 +1,279 @@ +# 音频流URL + +<img src="../../assets/img/download.svg" width="100" height="100"/> + +## 音质qn参数定义 + +音质`qn`参数: + +| 代码 | 含义 | +| ---- | -------------------- | +| 0 | 流畅 128K | +| 1 | 标准 192K | +| 2 | 高品质 320K | +| 3 | 无损 FLAC (大会员) | + +## 获取音频流URL(web端) + +> https://www.bilibili.com/audio/music-service-c/web/url + +*请求方式:GET* + +**注:web端无法播放完整付费歌曲,付费歌曲为30s试听片段** + +本接口仅能获取192K音质的音频 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | +| quality | num | 2 | 不必要 | | +| privilege | num | 2 | 不必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ----------------------------------------------------------- | +| code | num | 返回值 | 0: 成功<br />4511006: 已跳过无法播放的歌曲<br />7201006:未找到或已下架<br />72000000:请求错误 | +| message | str | 返回值 | 字符串形式的 code | +| msg | str | 返回信息 | 成功为 success | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | --------- | --------------------------------------- | +| sid | num | 音频auid | | +| type | num | 音质标识 | -1:试听片段(192K)<br />1:192K | +| info | str | 空 | | +| timeout | num | 有效时长 | 单位为秒<br />一般为3h | +| size | num | 文件大小 | 单位为字节<br />当`type`为-1时`size`为0 | +| cdns | array | 音频流url | | +| qualities | null | | | +| title | str | 空 | | +| cover | str | 空 | | + +`data`对象的`cdns`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | str | 音频流url | | +| 1 | str | 备用音频流url | 可能不存在 | + +**示例:** + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/url' \ +--data-urlencode 'sid=777180' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "sid": 777180, + "title": "", + "cover": "", + "type": 1, + "info": "", + "timeout": 10800, + "size": 5579903, + "cdns": [ + "https://upos-sz-mirrorcos.bilivideo.com/ugaxcode/m190314ws1dikiap1oivtapctuj1agjc-192k.m4a?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1725013547&gen=playurlv2&os=cosbv&oi=1746706124&trid=493923009cef4225ab8e1b9bda42c635B&mid=0&platform=pc&og=cos&upsig=043779511e2770cf6c3da04ed8a89f25&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&bvc=vod&nettype=0&orderid=0,1&logo=00000000" + ], + "qualities": null + }, + "message": "0", + "msg": "success" +} +``` + +</details> + +## 获取音频流URL(可获取付费音频) + +> https://api.bilibili.com/audio/music-service-c/url + +*请求方式:GET* + +认证方式:APP或Cookie(SESSDATA) + +**注:付费音乐需要有带大会员或音乐包的账号登录(Cookie或APP),否则为试听片段** + +无损音质需要登录的用户为会员 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | -------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| songid | num | 音频auid | 必要 | | +| quality | num | 音质代码 | 必要 | **详情见上表** | +| privilege | num | 必须为`2` | 必要 | | +| mid | num | 当前用户mid | 必要 | 可为任意值 | +| platform | str | 平台标识 | 必要 | 可为任意值 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ----------------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />7201006:未找到或已下架<br />72000000:请求错误 | +| msg | str | 错误信息 | 默认为success | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ----------- | ------------------------------------------------------------ | +| sid | num | 音频auid | | +| type | num | 音质标识 | -1:试听片段(192K)<br />0:128K<br />1:192K<br />2:320K<br />3:FLAC | +| info | str | 空 | **作用尚不明确** | +| timeout | num | 有效时长 | 单位为秒<br />一般为3h | +| size | num | 文件大小 | 单位为字节<br />当`type`为-1时`size`为0 | +| cdns | array | 音频流url | | +| qualities | array | 音质列表 | | +| title | str | 音频标题 | | +| cover | str | 音频封面url | | + +`data`对象的`cdns`数组: + + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | str | 音频流url | | +| 1 | str | 备用音频流url | | + +`data`对象的`qualities`数组: + + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---------------- | +| 0 | obj | 音质1 | 音质由高向低顺序 | +| n | obj | 音质(n+1) | | + +`qualities`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | ---------------------- | +| type | num | 音质代码 | **详情见上表** | +| desc | str | 音质名称 | | +| size | num | 该音质的文件大小 | 单位为字节 | +| bps | str | 比特率标签 | | +| tag | str | 音质标签 | | +| require | num | 是否需要会员权限 | 0:不需要<br />1:需要 | +| requiredesc | str | 会员权限标签 | | + +**示例:** + +获取音频`au682118`的音频流url,音质为`3(无损)` + +Cookie方式: + +```shell +curl -G 'https://api.bilibili.com/audio/music-service-c/url' \ +--data-urlencode 'songid=682118' \ +--data-urlencode 'quality=3' \ +--data-urlencode 'privilege=2' \ +--data-urlencode 'platform=android' \ +--data-urlencode 'mid=293793435' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl -G 'https://api.bilibili.com/audio/music-service-c/url' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'songid=682118' \ +--data-urlencode 'quality=3' \ +--data-urlencode 'privilege=2' \ +--data-urlencode 'platform=android' \ +--data-urlencode 'mid=293793435' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": { + "sid": 682118, + "type": 3, + "info": "", + "timeout": 10800, + "size": 34456494, + "cdns": [ + "https://upos-sz-mirrorkodo.bilivideo.com/ugaxcode/m190102ws2pzf6jitbem841vq2x0du5x-flac.flac?deadline=1595332269&gen=uga&os=kodobv&uparams=deadline,gen,os&upsig=ac2284d97a61ef8758681eccf621c56d", + "https://upos-sz-mirrorks3.bilivideo.com/ugaxcode/m190102ws2pzf6jitbem841vq2x0du5x-flac.flac?deadline=1595332269&gen=uga&os=ks3bv&uparams=deadline,gen,os&upsig=3ac7d94dda5664f6f95dbfffeb289744" + ], + "qualities": [ + { + "type": 3, + "desc": "无损音质", + "size": 34456494, + "bps": "", + "tag": "SQ", + "require": 1, + "requiredesc": "付费享受" + }, + { + "type": 2, + "desc": "高品质", + "size": 10788682, + "bps": "320kbit/s", + "tag": "HQ", + "require": 0, + "requiredesc": "" + }, + { + "type": 1, + "desc": "标准", + "size": 6491973, + "bps": "192kbit/s", + "tag": "", + "require": 0, + "requiredesc": "" + }, + { + "type": 0, + "desc": "流畅", + "size": 4343667, + "bps": "128kbit/s", + "tag": "", + "require": 0, + "requiredesc": "" + } + ], + "title": "aLIEz", + "cover": "http://i0.hdslb.com/bfs/music/61d3f8cfdce14d2d1b006af59559c9bd22a2d21b.jpg" + } +} +``` + +</details> + +## 音频流的获取 + +将 `data.cdns[n]` 作为 URL 进行 GET 操作 + +需要验证请求头 `User-Agent` 不为空且不含敏感字串, 且 `Referer` 必须在 `.bilibili.com` 下 + +**示例:** + +使用 cURL + FFPlay 直接从音频流播放 + +```shell +curl -G "https://upos-sz-mirrorcos.bilivideo.com/ugaxcode/7bf6a3a3e94421ccc653f005457b1e8c-192k.m4a?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1725013121&gen=playurlv2&os=cosbv&oi=1823807031&trid=1a4703f1e7344bb891691c5857e8cfb9B&mid=0&platform=pc&og=cos&upsig=e3a9fba59b46ab2720c8b1807844e9f3&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&bvc=vod&nettype=0&orderid=0,1&logo=00000000" \ +--referer 'https://www.bilibili.com/' -A 'Mozilla/5.0' \ +--output - | ffplay - +``` diff --git a/docs/audio/rank.md b/docs/audio/rank.md new file mode 100644 index 0000000..ff2a809 --- /dev/null +++ b/docs/audio/rank.md @@ -0,0 +1,1160 @@ +# 音频榜单 + +以下接口均来自页面 https://music.bilibili.com/pc/rank + +## 获取音频榜单每期列表 + +> https://api.bilibili.com/x/copyright-music-publicity/toplist/all_period + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ------------------------ | ------ | ---------------------- | +| list_type | num | 榜单类型 | 必要 | 1:热榜<br />2:原创榜 | +| csrf | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| list | obj | 年份索引 | | + +`data`中的`list`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ---------------------- | ---- | +| {年份} | array | 对应年份索引的每期信息 | | +| …… | array | …… | | + +`list`中的`{年份}`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | ---- | +| 0 | obj | 该年中的单期数据 | | +| …… | obj | …… | …… | + +`{年份}`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | -------- | -------- | +| ID | num | 榜单 id | | +| priod | num | 榜单期数 | | +| publish_time | num | 发布时间 | 秒时间戳 | + +**示例:** + +```bash +curl -G 'https://api.bilibili.com/x/copyright-music-publicity/toplist/all_period' \ + --data-urlencode 'list_type=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": { + "2022": [ + { + "ID": 38, + "priod": 29, + "publish_time": 1672394399 + }, + { + "ID": 36, + "priod": 28, + "publish_time": 1671789599 + }, + { + "ID": 34, + "priod": 27, + "publish_time": 1671184800 + }, + { + "ID": 32, + "priod": 26, + "publish_time": 1670579999 + }, + { + "ID": 30, + "priod": 25, + "publish_time": 1669976540 + }, + { + "ID": 28, + "priod": 24, + "publish_time": 1669370757 + }, + { + "ID": 26, + "priod": 23, + "publish_time": 1668766987 + }, + { + "ID": 22, + "priod": 22, + "publish_time": 1668163419 + }, + { + "ID": 21, + "priod": 21, + "publish_time": 1667558276 + }, + { + "ID": 20, + "priod": 20, + "publish_time": 1666951199 + }, + { + "ID": 19, + "priod": 19, + "publish_time": 1666346399 + }, + { + "ID": 18, + "priod": 18, + "publish_time": 1665741599 + }, + { + "ID": 17, + "priod": 17, + "publish_time": 1665136799 + }, + { + "ID": 16, + "priod": 16, + "publish_time": 1664531999 + }, + { + "ID": 15, + "priod": 15, + "publish_time": 1663927199 + }, + { + "ID": 14, + "priod": 14, + "publish_time": 1663322399 + }, + { + "ID": 13, + "priod": 13, + "publish_time": 1662717599 + }, + { + "ID": 12, + "priod": 12, + "publish_time": 1662113559 + }, + { + "ID": 11, + "priod": 11, + "publish_time": 1661508657 + }, + { + "ID": 10, + "priod": 10, + "publish_time": 1660903199 + }, + { + "ID": 9, + "priod": 9, + "publish_time": 1660298400 + }, + { + "ID": 8, + "priod": 8, + "publish_time": 1659693599 + }, + { + "ID": 7, + "priod": 7, + "publish_time": 1659088799 + }, + { + "ID": 6, + "priod": 6, + "publish_time": 1658483999 + }, + { + "ID": 5, + "priod": 5, + "publish_time": 1657879200 + }, + { + "ID": 4, + "priod": 4, + "publish_time": 1657274399 + }, + { + "ID": 3, + "priod": 3, + "publish_time": 1656669600 + }, + { + "ID": 2, + "priod": 2, + "publish_time": 1656064800 + }, + { + "ID": 1, + "priod": 1, + "publish_time": 1655460091 + } + ], + "2023": [ + { + "ID": 76, + "priod": 48, + "publish_time": 1683885696 + }, + { + "ID": 74, + "priod": 47, + "publish_time": 1683281010 + }, + { + "ID": 72, + "priod": 46, + "publish_time": 1682675999 + }, + { + "ID": 70, + "priod": 45, + "publish_time": 1682071442 + }, + { + "ID": 68, + "priod": 44, + "publish_time": 1681466400 + }, + { + "ID": 66, + "priod": 43, + "publish_time": 1680861599 + }, + { + "ID": 64, + "priod": 42, + "publish_time": 1680256799 + }, + { + "ID": 62, + "priod": 41, + "publish_time": 1679652088 + }, + { + "ID": 60, + "priod": 40, + "publish_time": 1679047199 + }, + { + "ID": 58, + "priod": 39, + "publish_time": 1678442399 + }, + { + "ID": 56, + "priod": 38, + "publish_time": 1677837600 + }, + { + "ID": 54, + "priod": 37, + "publish_time": 1677232800 + }, + { + "ID": 52, + "priod": 36, + "publish_time": 1676628000 + }, + { + "ID": 50, + "priod": 35, + "publish_time": 1676023199 + }, + { + "ID": 48, + "priod": 34, + "publish_time": 1675418399 + }, + { + "ID": 46, + "priod": 33, + "publish_time": 1674813599 + }, + { + "ID": 44, + "priod": 32, + "publish_time": 1674208799 + }, + { + "ID": 42, + "priod": 31, + "publish_time": 1673603999 + }, + { + "ID": 40, + "priod": 30, + "publish_time": 1672999199 + } + ] + } + } +} +``` + +</details> + +## 查询音频榜单单期信息 + +> https://api.bilibili.com/x/copyright-music-publicity/toplist/detail + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | ------------------------------------------------ | +| list_id | num | 榜单 id | 必要 | 见 [获取音频榜单每期列表](#获取音频榜单每期列表) | +| csrf | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ----------------------- | ------------------------------------------------------------ | +| listen_fid | num | 畅听版歌单收藏夹原始 id | 非真实收藏夹 mlid<br />需要在后方拼接用户 mid 的后两位,如`16484498`->`1648449844` | +| all_fid | num | 完整版歌单收藏夹原始 id | 非真实收藏夹 mlid<br />算法同上 | +| fav_mid | num | 绑定收藏夹用户的 mid | 例如`1164440244`([音乐热榜bot](https://space.bilibili.com/1164440244)账号) | +| cover_url | str | 榜单封面 url | | +| is_subscribe | bool | 是否已订阅榜单 | `true`:已订阅<br />`false`:未订阅<br />需要登录(Cookie 或 APP),未登录恒为`false` | +| listen_count | num | 平台有版权音频的数量 | | + +**示例:** + +查询 [第 48 期音频榜单](https://music.bilibili.com/pc/rank?list_id=76)(id=76) 信息 + +```bash +curl -G 'https://api.bilibili.com/x/copyright-music-publicity/toplist/detail' \ + --data-urlencode 'list_id=76' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "listen_fid": 23317138, + "all_fid": 23672948, + "fav_mid": 1164440244, + "cover_url": "http://i0.hdslb.com/bfs/music-publicity/d8509dc6ee94dd5cc4658a2cbca4f525b4396df5.png", + "is_subscribe": false, + "listen_count": 5 + } +} +``` + +</details> + +## 获取音频榜单单期内容 + +> https://api.bilibili.com/x/copyright-music-publicity/toplist/music_list + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | ------------------------------------------------ | +| list_id | num | 榜单 id | 必要 | 见 [获取音频榜单每期列表](#获取音频榜单每期列表) | +| csrf | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------- | ---- | +| list | array | 内容列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | obj | 榜单内容 1 | | +| n | obj | 榜单内容 (n+1) | | +| …… | obj | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ------------------ | ------------------------------------------- | +| music_id | str | 音频 MAID | 例如`MA409252256362326366` | +| music_title | str | 音频标题 | | +| singer | str | 音频作者 | | +| album | str | 音频专辑 | | +| mv_aid | num | 音频 MV 的 avid | 若该音频无 MV 则该字段为 0 | +| mv_bvid | str | 音频 MV 的 bvid | | +| mv_cover | str | 音频封面 url | | +| heat | num | 热度值 | | +| rank | num | 排序值 | 1 为最高排序,DESC 方式 | +| can_listen | bool | 平台是否有版权 | `true`:平台有版权<br />`false`:平台无版权 | +| recommendation | str | (?) | | +| creation_aid | num | 关联稿件 avid | | +| creation_bvid | str | 关联稿件 bvid | | +| creation_cover | str | 关联稿件封面 url | | +| creation_title | str | 关联稿件标题 | | +| creation_up | num | 关联稿件 UP 主 mid | | +| creation_nickname | str | 关联稿件 UP 主昵称 | | +| creation_duration | num | 关联稿件时长 | 单位为秒 | +| creation_play | num | 关联稿件播放量 | | +| creation_reason | str | 关联稿件二级分区名 | | +| achievements | array | 获得成就 | | +| material_id | num | (?) | | +| material_use_num | num | (?) | | +| material_duration | num | (?) | | +| material_show | num | (?) | | +| song_type | num | (?) | | + +`list`数组中的对象中的`achievements`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | str | 成就文案 1 | | +| n | str | 成就文案 (n+1) | | +| …… | str | …… | …… | + +**示例:** + +查询 [第 48 期音频榜单](https://music.bilibili.com/pc/rank?list_id=76)(id=76) 榜单内容列表 + +```bash +curl -G 'https://api.bilibili.com/x/copyright-music-publicity/toplist/music_list' \ + --data-urlencode 'list_id=76' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "music_id": "MA409252256362326366", + "music_title": "極楽浄土", + "singer": "GARNiDELiA", + "album": "約束 -Promise code-", + "mv_aid": 28361833, + "mv_bvid": "BV1us41137Fd", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/07e0d9826c574e37df25387cab6df062.jpg", + "heat": 5328979, + "rank": 1, + "can_listen": true, + "recommendation": "", + "creation_aid": 910787823, + "creation_bvid": "BV1HM4y1b79Z", + "creation_cover": "http://i1.hdslb.com/bfs/archive/5780a05437ec9880301ed093537d6af97b0f8bdb.jpg", + "creation_title": "【MARiA】乘风2023初舞台!《极乐净土》,虽迟但到!", + "creation_up": 110352985, + "creation_nickname": "GARNiDELiA", + "creation_duration": 100, + "creation_play": 13487670, + "creation_reason": "官方现场", + "achievements": [ + "重回榜单", + "最高排名1" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA456045402056087707", + "music_title": "アイドル", + "singer": "YOASOBI", + "album": "アイドル", + "mv_aid": 227499491, + "mv_bvid": "BV17h411u7sb", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/4bf2fe90e9d2361c3c4ddf59064c6e69.jpg", + "heat": 1856277, + "rank": 2, + "can_listen": false, + "recommendation": "", + "creation_aid": 952765045, + "creation_bvid": "BV1Ws4y1A7fS", + "creation_cover": "http://i0.hdslb.com/bfs/archive/8326350bab039ffee9274d7e1f94240d170fa096.jpg", + "creation_title": "【中文字幕】我推的孩子「アイドル」官方MV(4K 60帧/Hi-Res)", + "creation_up": 11585165, + "creation_nickname": "爱莉丝青贝尔克", + "creation_duration": 226, + "creation_play": 3742892, + "creation_reason": "音乐MV", + "achievements": [ + "本期排名持平", + "最高排名1" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA458652518440821364", + "music_title": "野火wildfire", + "singer": "HOYO- Mix,Jonathan Steingard", + "album": "雪融于烬", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/e0825a2cfee22ce77f02d4d80826a1d9.jpg", + "heat": 1767135, + "rank": 3, + "can_listen": false, + "recommendation": "", + "creation_aid": 355732312, + "creation_bvid": "BV1ZX4y117Dx", + "creation_cover": "http://i0.hdslb.com/bfs/archive/c98bd629876e8b7b4c056d39bcfeaabe7327e996.jpg", + "creation_title": "这首“野火”神曲,我还能再听亿遍!!!", + "creation_up": 394861137, + "creation_nickname": "Hanserのcece", + "creation_duration": 219, + "creation_play": 2158925, + "creation_reason": "动画创作", + "achievements": [ + "本期排名↑1", + "最高排名3" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA459088929228874460", + "music_title": "不问别离", + "singer": "指尖笑", + "album": "不问别离", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/b1507c1649500a0dcf0295b4b68e4b15.jpg", + "heat": 1576823, + "rank": 4, + "can_listen": false, + "recommendation": "", + "creation_aid": 740818022, + "creation_bvid": "BV1Sk4y1E7qH", + "creation_cover": "http://i2.hdslb.com/bfs/archive/5301b2fee7ad520c8946b5eb92888cf8be563a80.jpg", + "creation_title": "日推歌单 | \"我叹那春花秋月不问别离 长风起孤城笛声里全是你\" |《不问ciaga》", + "creation_up": 550445292, + "creation_nickname": "peach63", + "creation_duration": 164, + "creation_play": 274898, + "creation_reason": "音乐MV", + "achievements": [ + "本期排名↑10", + "最高排名4" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA459819223808501000", + "music_title": "Spicy", + "singer": "aespa", + "album": "MY WORLD - The 3rd Mini Album", + "mv_aid": 570920682, + "mv_bvid": "BV1qz4y1a7m8", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/6455687e7d72dd838ffd2aa753fd7761.jpg", + "heat": 1441365, + "rank": 5, + "can_listen": false, + "recommendation": "", + "creation_aid": 570920682, + "creation_bvid": "BV1qz4y1a7m8", + "creation_cover": "http://i2.hdslb.com/bfs/archive/cd5456735bd645343a51b8df9b4a91236b08e657.jpg", + "creation_title": "aespa《Spicy》MV", + "creation_up": 3493085782739496, + "creation_nickname": "SMTOWN", + "creation_duration": 205, + "creation_play": 2363321, + "creation_reason": "官方MV", + "achievements": [ + "新晋上榜", + "最高排名5" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA458946536466866804", + "music_title": "UNFORGIVEN (feat. Nile Rodgers)", + "singer": "LE SSERAFIM,Nile Rodgers", + "album": "UNFORGIVEN", + "mv_aid": 528370662, + "mv_bvid": "BV1LM41137Pc", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/47e6685cfe44185ec4daab5e765e3b26.jpg", + "heat": 1362593, + "rank": 6, + "can_listen": true, + "recommendation": "", + "creation_aid": 698312930, + "creation_bvid": "BV1wm4y1y76i", + "creation_cover": "http://i1.hdslb.com/bfs/archive/4f097f5067fc3408118f7d59b2c36d8278660dd9.jpg", + "creation_title": "假如让金采源唱全曲......", + "creation_up": 496743369, + "creation_nickname": "YuueFriloeyyy_", + "creation_duration": 183, + "creation_play": 319267, + "creation_reason": "歌曲演唱", + "achievements": [ + "本期排名↑3", + "最高排名6" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA451591354456234292", + "music_title": "雪 Distance", + "singer": "Capper,罗言", + "album": "Uniconfication", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/5899008cea7ed157b8bdb6f9b89dd7ff.jpg", + "heat": 1233174, + "rank": 7, + "can_listen": false, + "recommendation": "", + "creation_aid": 355903423, + "creation_bvid": "BV1QX4y127jq", + "creation_cover": "http://i2.hdslb.com/bfs/archive/e3542cf8d7cf7cc58268c840d845bb12d4c52662.jpg", + "creation_title": "⚡️“可是雪啊,埋进土里”⚡️", + "creation_up": 22169833, + "creation_nickname": "寒了个羽", + "creation_duration": 158, + "creation_play": 2622705, + "creation_reason": "音乐创作", + "achievements": [ + "本期排名↓1", + "最高排名3" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA460246447678301091", + "music_title": "Ghost Face (鬼脸) (LIVE版)", + "singer": "法老", + "album": "中国说唱巅峰对决2023 第一期", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/0d4050feb7cac1a568849832d5fa9f67.jpg", + "heat": 1163291, + "rank": 8, + "can_listen": false, + "recommendation": "", + "creation_aid": 355995337, + "creation_bvid": "BV1qX4y1y78r", + "creation_cover": "http://i0.hdslb.com/bfs/archive/f5e7a51dbe1f48441042dad1e45148c400a3f9fe.jpg", + "creation_title": "【法老Pharaoh】虽迟但到!说唱巅峰对决《Ghost Face》live", + "creation_up": 12807175, + "creation_nickname": "法老爷爷", + "creation_duration": 79, + "creation_play": 885856, + "creation_reason": "官方现场", + "achievements": [ + "新晋上榜", + "最高排名8" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA458974797167092444", + "music_title": "F*ck My Life", + "singer": "SEVENTEEN", + "album": "SEVENTEEN 10th Mini Album 'FML'", + "mv_aid": 313423265, + "mv_bvid": "BV1tP41117mv", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/6723df38fcca9b2ab85b564e3809426e.jpg", + "heat": 735517, + "rank": 9, + "can_listen": true, + "recommendation": "", + "creation_aid": 313423265, + "creation_bvid": "BV1tP41117mv", + "creation_cover": "http://i1.hdslb.com/bfs/archive/38377552bd74cc32851d6466343dc3a26983c3b6.jpg", + "creation_title": "SEVENTEEN 'F*ck My Life' Official MV", + "creation_up": 692206640, + "creation_nickname": "SEVENTEEN", + "creation_duration": 220, + "creation_play": 1008830, + "creation_reason": "官方MV", + "achievements": [ + "新晋上榜", + "最高排名9" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA460247474041267107", + "music_title": "Control's Wishes", + "singer": "Steven Grove,塞壬唱片-MSR", + "album": "孤星OST", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/6068f2c64c6796f68b8dae7772f891ac.jpg", + "heat": 628233, + "rank": 10, + "can_listen": false, + "recommendation": "", + "creation_aid": 740625544, + "creation_bvid": "BV1ck4y1E7KJ", + "creation_cover": "http://i1.hdslb.com/bfs/archive/11381997120391d655c91b19bc08e110ca8201e5.jpg", + "creation_title": "【小提琴/钢琴】明日方舟四周年孤星PV曲《Control's Wishes》", + "creation_up": 2016022052, + "creation_nickname": "-桑榆墨景-", + "creation_duration": 193, + "creation_play": 37881, + "creation_reason": "器乐演奏", + "achievements": [ + "新晋上榜", + "最高排名10" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA459266635128138957", + "music_title": "花园种花(在小小的花园里种小小的花)", + "singer": "桃子老师花开富贵", + "album": "花园种花", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/fb1d6a44bb8337edf6c9d32c421e9c89.jpg", + "heat": 623604, + "rank": 11, + "can_listen": false, + "recommendation": "", + "creation_aid": 398216313, + "creation_bvid": "BV1uo4y1x7UF", + "creation_cover": "http://i0.hdslb.com/bfs/archive/9562b126010376f7dcfedf0397170696eb1a19c5.jpg", + "creation_title": "姬子老师:开拓者家长们,路上有点堵车,这节挖呀挖呀挖课来晚了", + "creation_up": 391636983, + "creation_nickname": "动漫跳舞姬", + "creation_duration": 33, + "creation_play": 566777, + "creation_reason": "动画创作", + "achievements": [ + "新晋上榜", + "最高排名11" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA455203227252613620", + "music_title": "Cupid", + "singer": "FIFTY FIFTY", + "album": "The Beginning: Cupid", + "mv_aid": 226830843, + "mv_bvid": "BV1sh41137rs", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/e91891c4e2573f4d4ada329db9a86b30.jpg", + "heat": 562273, + "rank": 12, + "can_listen": false, + "recommendation": "", + "creation_aid": 485862497, + "creation_bvid": "BV19T411b7nE", + "creation_cover": "http://i2.hdslb.com/bfs/archive/ece27463e3eb13f9fbbcb799436375495a795e3c.jpg", + "creation_title": "挑战在cp29和一百位coser比心!", + "creation_up": 1477074, + "creation_nickname": "菌儿rikushi", + "creation_duration": 148, + "creation_play": 1216246, + "creation_reason": "COSPLAY创作", + "achievements": [ + "重回榜单", + "最高排名12" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA457806074590836885", + "music_title": "星间旅行", + "singer": "HOYO-MiX,茶理理理子", + "album": "崩坏星穹铁道-星间旅行 Interstellar Journ", + "mv_aid": 612992200, + "mv_bvid": "BV1rh4y1n77f", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/20ddff696bbbd7f00fc8b76f7b5334f7.jpg", + "heat": 515238, + "rank": 13, + "can_listen": false, + "recommendation": "", + "creation_aid": 995418876, + "creation_bvid": "BV1vs4y197gt", + "creation_cover": "http://i0.hdslb.com/bfs/archive/2d6997320bd2bb20f50b363a894033f325fed871.jpg", + "creation_title": "《星穹铁道玩家现状》", + "creation_up": 551188239, + "creation_nickname": "企鹅带带北极熊", + "creation_duration": 88, + "creation_play": 1570181, + "creation_reason": "音乐创作", + "achievements": [ + "本期排名↓10", + "最高排名2" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA434298821720206219", + "music_title": "可愛くてごめん (feat. かぴ)", + "singer": "HoneyWorks,かぴ", + "album": "告白実行委員会 -FLYING SONGS- 恋してる", + "mv_aid": 779733306, + "mv_bvid": "BV1iy4y1Z7Ri", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/45ce3f52d31386741589a3a5ca9a420c.jpg", + "heat": 438720, + "rank": 14, + "can_listen": true, + "recommendation": "", + "creation_aid": 862702118, + "creation_bvid": "BV1gG4y117nV", + "creation_cover": "http://i1.hdslb.com/bfs/archive/38d94515fe5f6294bf7712d8b26eb049ec3cf627.jpg", + "creation_title": "这么可爱真是抱歉!❤️(*/∇\*)天台宅舞", + "creation_up": 434476793, + "creation_nickname": "优联酱uu", + "creation_duration": 140, + "creation_play": 1199819, + "creation_reason": "舞蹈创作", + "achievements": [ + "重回榜单", + "最高排名2" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA440555130794857381", + "music_title": "阳光开朗大男孩", + "singer": "卦者灵风", + "album": "阳光开朗大男孩", + "mv_aid": 421697247, + "mv_bvid": "BV1z341187Y9", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/220c674ca22acb91114f6e0705d0f426.jpg", + "heat": 371851, + "rank": 15, + "can_listen": true, + "recommendation": "", + "creation_aid": 995281134, + "creation_bvid": "BV1as4y1d7QR", + "creation_cover": "http://i0.hdslb.com/bfs/archive/4628837eb5baf879a2be79b16836c90e0466dd6c.jpg", + "creation_title": "【灵能手书】阳光开朗大男孩", + "creation_up": 8504036, + "creation_nickname": "kipoki", + "creation_duration": 81, + "creation_play": 627123, + "creation_reason": "动画创作", + "achievements": [ + "重回榜单", + "最高排名1" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA406539170333366962", + "music_title": "此生不换", + "singer": "青鸟飞鱼", + "album": "仙剑奇侠传三 电视剧原声带", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/450bd04688ef6a691b1adb816ace6155.jpg", + "heat": 361410, + "rank": 16, + "can_listen": false, + "recommendation": "", + "creation_aid": 545438082, + "creation_bvid": "BV1Cq4y1J7Ge", + "creation_cover": "http://i1.hdslb.com/bfs/archive/1b8b80f7ba9dccaf648cfb641b40e1d38965a4a4.jpg", + "creation_title": "开口爷青回!男生宿舍回忆向翻唱仙剑3插曲《此生不换》|我和室友的翻唱日常.", + "creation_up": 346782115, + "creation_nickname": "陈家淇_B11", + "creation_duration": 258, + "creation_play": 2976435, + "creation_reason": "歌曲演唱", + "achievements": [ + "重回榜单", + "最高排名15" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA444928930235832050", + "music_title": "太空电梯", + "singer": "阿鲲", + "album": "流浪地球2电影原声大碟", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/c64c10b911ace04ae45b3172abe3a1d8.jpg", + "heat": 352572, + "rank": 17, + "can_listen": false, + "recommendation": "", + "creation_aid": 269421756, + "creation_bvid": "BV1ic41157cc", + "creation_cover": "http://i0.hdslb.com/bfs/archive/39a27b9d804750325b260f6bc69a3afa8c01a1dc.jpg", + "creation_title": "都说是涂装问题了,看,这战斗力不就上来了吗!", + "creation_up": 478832800, + "creation_nickname": "大刀王五EP", + "creation_duration": 87, + "creation_play": 706377, + "creation_reason": "动画创作", + "achievements": [ + "重回榜单", + "最高排名1" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA400017093531020491", + "music_title": "兰亭序", + "singer": "周杰伦", + "album": "魔杰座", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/a03f7d174c3b01e4c6b3907a115c5434.jpg", + "heat": 347017, + "rank": 18, + "can_listen": false, + "recommendation": "", + "creation_aid": 825572396, + "creation_bvid": "BV1kg4y1L7v6", + "creation_cover": "http://i0.hdslb.com/bfs/archive/59e8436511ff45402e3d5dcf2c01feeb94897103.jpg", + "creation_title": "无关风月我题序等你回《兰亭序》", + "creation_up": 628615890, + "creation_nickname": "qqq还在梦里", + "creation_duration": 125, + "creation_play": 522133, + "creation_reason": "歌曲演唱", + "achievements": [ + "重回榜单", + "最高排名6" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA457811156946443719", + "music_title": "I'll Do It", + "singer": "Heidi Montag", + "album": "Superficial", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/e1d95f62257da69db1dc36e949f789f5.jpg", + "heat": 345773, + "rank": 19, + "can_listen": false, + "recommendation": "", + "creation_aid": 313275936, + "creation_bvid": "BV1XP411y7UD", + "creation_cover": "http://i1.hdslb.com/bfs/archive/c42e54074a50ee1eaddbd5495091c2152aad8ecf.jpg", + "creation_title": "“嗨,老婆” 【崩坏星穹铁道】", + "creation_up": 14158002, + "creation_nickname": "Ishi丶", + "creation_duration": 61, + "creation_play": 103542, + "creation_reason": "动画创作", + "achievements": [ + "本期排名↓12", + "最高排名6" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + }, + { + "music_id": "MA409255441550338398", + "music_title": "失恋阵线联盟", + "singer": "草蜢", + "album": "失恋阵线联盟", + "mv_aid": 0, + "mv_bvid": "", + "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/5d6b27035d5f7c0e7781b779871aca04.jpg", + "heat": 337176, + "rank": 20, + "can_listen": false, + "recommendation": "", + "creation_aid": 415864088, + "creation_bvid": "BV1QV411b7CT", + "creation_cover": "http://i1.hdslb.com/bfs/archive/8735563d73f86ef7073ed580a41e12c409bd2a5b.jpg", + "creation_title": "年会舞蹈《失恋阵线联盟》完整版", + "creation_up": 451425930, + "creation_nickname": "舞大师舞蹈工作室", + "creation_duration": 135, + "creation_play": 5336890, + "creation_reason": "舞蹈创作", + "achievements": [ + "重回榜单", + "最高排名20" + ], + "material_id": 0, + "material_use_num": 0, + "material_duration": 0, + "material_show": 1, + "song_type": 2 + } + ] + } +} +``` + +</details> + +## 订阅或退订榜单 + +> https://api.bilibili.com/x/copyright-music-publicity/toplist/subscribe/update + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | --------------- | ------------------------------------------------ | +| state | num | 操作代码 | 必要 | 1:订阅<br />2:退订 | +| list_id | num | 榜单 id | 非必要 | 见 [获取音频榜单每期列表](#获取音频榜单每期列表) | +| csrf | str | CSRF Token(位于cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 验证失败<br />400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | + +**示例:** + +```bash +curl 'https://api.bilibili.com/x/copyright-music-publicity/toplist/subscribe/update' \ + --data-urlencode 'state=1' \ + --data-urlencode 'state=76' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> diff --git a/docs/audio/status_number.md b/docs/audio/status_number.md new file mode 100644 index 0000000..62621c1 --- /dev/null +++ b/docs/audio/status_number.md @@ -0,0 +1,63 @@ +# 音频状态数 + +## 歌曲状态数 + +>https://www.bilibili.com/audio/music-service-c/web/stat/song + +*请求方式:GET* + +唯缺投币数2333333 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------------------------------- | +| code | num | 返回值 | 0:成功<br />72000000:参数错误 | +| msg | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| sid | num | 音频auid | | +| play | num | 播放次数 | | +| collect | num | 收藏数 | | +| comment | num | 评论数 | | +| share | num | 分享数 | | + +**示例:** + +查询歌曲`au15664`的状态数 + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/stat/song' \ +--data-urlencode 'sid=15664' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "data": { + "sid": 15664, + "play": 1377390, + "collect": 44340, + "comment": 2756, + "share": 4114 + } +} +``` + +</details> diff --git a/docs/bangumi/follow.md b/docs/bangumi/follow.md new file mode 100644 index 0000000..a614e27 --- /dev/null +++ b/docs/bangumi/follow.md @@ -0,0 +1,124 @@ +# 追番相关 + +## 追番 +> https://api.bilibili.com/pgc/web/follow/add + +*请求方式:POST* + +鉴权方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|--------|-----|-----| +| season_id | str | 剧集ssid | 必要 | | +| csrf | str | csrf token(位于cookies中的bili_jct) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------------------------------- | +| code | num | 返回值 | 0:成功<br />-111:csrf校验失败 | +| message | str | 信息 | 成功时:success | +| result | obj |见下表| | + +根对象中的`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ---- | +| fmid | num | 0 | | +| relation | bool | false | | +| status | num | 2 | | +| toast | str | 自己追的番就要好好看完哟^o^ | | + +**示例:** + +追番`ssid=41410`的番剧 + +```shell +curl -G 'https://api.bilibili.com/pgc/web/follow/add' \ +--data-urlencode 'season_id=41410' \ +--data-urlencode 'csrf=xxx' \ +``` + +<details> + +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "success", + "result": { + "fmid": 0, + "relation": false, + "status": 2, + "toast": "自己追的番就要好好看完哟^o^" + } +} +``` +</details> + +## 取消追番 + +> https://api.bilibili.com/pgc/web/follow/del + +*请求方式:POST* + +鉴权方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ----------------------------------- | ------ | ---- | +| season_id | str | 剧集ssid | 必要 | | +| csrf | str | csrf token(位于cookies中的bili_jct) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------------------------------- | +| code | num | 返回值 | 0:成功<br />-111:csrf校验失败 | +| message | str | 信息 | 成功时:success | +| result | obj | 见下表 | | + +根对象中的`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ---- | +| fmid | num | 0 | | +| relation | bool | true | | +| status | num | 0 | | +| toast | str | 已取消追番 | | + +**示例:** + +取消`ssid=41410`的追番 + +```shell +curl -G 'https://api.bilibili.com/pgc/web/follow/del' \ +--data-urlencode 'season_id=41410' \ +--data-urlencode 'csrf=xxx' \ +``` + +<details> + +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "success", + "result": { + "fmid": 0, + "relation": false, + "status": 0, + "toast": "已取消追番" + } +} +``` +</details> diff --git a/docs/bangumi/info.md b/docs/bangumi/info.md new file mode 100644 index 0000000..6345107 --- /dev/null +++ b/docs/bangumi/info.md @@ -0,0 +1,1510 @@ +# 剧集地区一览 + +| ID | 名称 | +|----|-------| +| 1 | 中国大陆 | +| 2 | 日本 | +| 3 | 美国 | +| 4 | 英国 | +| 5 | 加拿大 | +| 6 | 中国香港 | +| 7 | 中国台湾 | +| 8 | 韩国 | +| 9 | 法国 | +| 10 | 泰国 | +| 11 | 马来西亚 | +| 12 | 新加坡 | +| 13 | 西班牙 | +| 14 | 俄罗斯 | +| 15 | 德国 | +| 16 | 其他 | +| 17 | 丹麦 | +| 18 | 乌克兰 | +| 19 | 以色列 | +| 20 | 伊朗 | +| 21 | 保加利亚 | +| 22 | 克罗地亚 | +| 23 | 冰岛 | +| 24 | 匈牙利 | +| 25 | 南非 | +| 26 | 印尼 | +| 27 | 印度 | +| 28 | 哥伦比亚 | +| 30 | 土耳其 | +| 31 | 墨西哥 | +| 32 | 委内瑞拉 | +| 33 | 巴西 | +| 34 | 希腊 | +| 35 | 意大利 | +| 36 | 挪威 | +| 37 | 捷克 | +| 38 | 摩洛哥 | +| 39 | 新西兰 | +| 40 | 智利 | +| 41 | 比利时 | +| 42 | 波兰 | +| 43 | 澳大利亚 | +| 44 | 爱尔兰 | +| 45 | 瑞典 | +| 46 | 瑞士 | +| 47 | 芬兰 | +| 48 | 苏联 | +| 49 | 荷兰 | +| 50 | 越南 | +| 51 | 阿根廷 | +| 52 | 马耳他 | +| 53 | 古巴 | +| 54 | 菲律宾 | +| 55 | 哈萨克斯坦 | +| 56 | 黎巴嫩 | +| 57 | 塞浦路斯 | +| 58 | 卡塔尔 | +| 59 | 阿联酋 | +| 60 | 奥地利 | +| 61 | 西德 | +| 62 | 卢森堡 | +| 63 | 罗马尼亚 | +| 64 | 印度尼西亚 | +| 65 | 南斯拉夫 | +| 66 | 蒙古 | +| 70 | 葡萄牙 | + +# 剧集基本信息 + +## 剧集基本信息(mdid方式) + +> https://api.bilibili.com/pgc/review/user + +*请求方式:GET* + +鉴权方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|--------|-----|-----| +| media_id | str | 剧集mdid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|----------------------------------| +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:错误 | +| message | str | 错误信息 | 默认为success | +| result | obj | 信息本体 | | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------|-----|--------|----------| +| media | obj | 剧集信息 | | +| review | obj | 用户操作信息 | 仅登录时存在此项 | + +`result`中的`media`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------------|-------|-----------|--------------------------------------------------------------| +| areas | array | 地区 | | +| cover | str | 封面图片url | | +| horizontal_picture | str | 横板封面图片url | | +| media_id | num | 剧集mdid | | +| new_ep | obj | 最新一话信息 | | +| rating | obj | 评分信息 | | +| season_id | num | 剧集ssid | | +| share_url | url | 剧集详情页连接 | | +| title | str | 标题 | | +| type | num | 剧集类型id | 1:番剧<br/>2:电影<br/>3:纪录片<br/>4:国创<br/>5:电视剧<br/>6:漫画<br/>7:综艺 | +| type_name | str | 剧集类型 | | + +`media`中的`areas`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|-----------|-----| +| 0 | obj | 地区信息1 | | +| n | obj | 地区信息(n+1) | | +| …… | obj | …… | | + +`areas`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|-------------------| +| id | num | 所属地区编号 | [剧集地区一览](#剧集地区一览) | +| name | str | 所属地区名称 | | + +`media`中的`new_ep`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------------|-----|-----------|--------------------| +| id | num | 最新一话的epid | | +| index | str | 最新一话名称 | | +| index_show | str | 最新一话显示名称 | eg. `第1话`、`更新至第4话` | + +`media`中的`rating`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----|--------|-----| +| count | num | 总计评分人数 | | +| score | num | 评分 | | + +`result`中的`review`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|-----|--------| +| is_coin | num | 0 | 作用尚不明确 | +| is_open | num | 1 | 作用尚不明确 | + +**示例:** + +查询剧集`md28220978`的基本信息 + +```shell +curl -G 'https://api.bilibili.com/pgc/review/user' \ +--data-urlencode 'media_id=28220978' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "success", + "result": { + "media": { + "areas": [ + { + "id": 2, + "name": "日本" + } + ], + "cover": "http://i0.hdslb.com/bfs/bangumi/8aa0bfce050c72c6626b63d3093a88527c251026.jpg", + "horizontal_picture": "http://i0.hdslb.com/bfs/bangumi/8aa0bfce050c72c6626b63d3093a88527c251026.jpg", + "media_id": 28220978, + "new_ep": { + "id": 21278, + "index": "14", + "index_show": "全14话" + }, + "rating": { + "count": 80693, + "score": 9.9 + }, + "season_id": 1172, + "share_url": "https://www.bilibili.com/bangumi/media/md28220978", + "title": "轻音少女 第一季", + "type": 1, + "type_name": "番剧" + } + } +} +``` + +</details> + +## 获取剧集明细(web端)(ssid/epid方式) + +> https://api.bilibili.com/pgc/view/web/season + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----------|-----|--------|--------|---------------------| +| season_id | num | 番剧ssid | 必要(可选) | season_id与ep_id任选其一 | +| ep_id | num | 剧集epid | 必要(可选) | season_id与ep_id任选其一 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-------------------| +| code | num | 返回值 | 0:成功<br />-404:错误 | +| message | str | 错误信息 | 默认为success | +| result | obj | 信息本体 | | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------------|-------|----------------|----------------------------------------------------------| +| activity | obj | 参与的活动 | | +| actors | str | | | +| alias | str | 空 | 作用尚不明确 | +| areas | array | | | +| bkg_cover | str | 网页背景图片url | 无则为空 | +| cover | str | 剧集封面图片url | | +| delivery_fragment_video | bool | | | +| enable_vt | bool | | | +| episodes | array | 正片剧集列表 | | +| evaluate | str | 简介 | | +| freya | obj | | | +| hide_ep_vv_vt_dm | num | | | +| icon_font | obj | | | +| jp_title | str | 空 | 作用尚不明确 | +| link | str | 简介页面url | | +| media_id | num | 剧集mdid | | +| mode | num | 2 | 作用尚不明确 | +| multi_view_info | obj | | | +| new_ep | obj | 更新信息 | | +| payment | obj | 会员&付费信息 | 若无相关内容则无此项 | +| payPack | obj | 付费包信息 | 目前只有霹雳布袋戏付费套餐一种 | +| play_strategy | obj | | | +| positive | obj | | | +| publish | obj | 发布信息 | | +| rating | obj | 评分信息 | 若无相关内容则无此项 | +| record | str | 备案号 | 无则为空 | +| rights | obj | 属性标志信息 | | +| season_id | num | 番剧ssid | | +| season_title | str | 剧集标题 | | +| seasons | array | 同系列所有季信息 | | +| section | array | 花絮、PV、番外等非正片内容 | 若无相关内容则无此项 | +| section_bottom_desc | str | | | +| series | obj | 系列信息 | | +| share_copy | str | 《{标题}》+{备注} | | +| share_sub_title | str | 备注 | | +| share_url | str | 番剧播放页面url | | +| show | obj | 网页全屏标志 | | +| show_season_type | num | 1,2,3,4,5,7 | | +| square_cover | str | 方形封面图片url | | +| staff | str | 制作人员信息 | | +| stat | obj | 状态数 | | +| status | num | | | +| styles | array | 标签 | | +| subtitle | str | 剧集副标题 | | +| title | str | 剧集标题 | | +| total | num | 总计正片集数 | 未完结:大多为-1<br />已完结:正整数 | +| type | num | 剧集类型 | 1:番剧<br />2:电影<br />3:纪录片<br />4:国创<br />5:电视剧<br />7:综艺 | +| up_info | obj | UP主信息 | 若无相关内容则无此项 | +| user_status | obj | | | + +`result`中的`activity`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-------|------|--------| +| cover | str | | | +| head_bg_url | str | 空 | 作用尚不明确 | +| id | num | 活动id | | +| link | str | | | +| pendants | array | | | +| title | str | 活动标题 | | + +`activity`中的`pendants`数组 + +| 字段名 | 类型 | 内容 | 备注 | +|-------|-----|----|----| +| image | str | | | +| name | str | | | +| pid | num | | | + +`result`中的`areas`数组 + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|--------|-------------------| +| id | num | 所属地区编号 | [剧集地区一览](#剧集地区一览) | +| name | str | 所属地区名称 | | + +`result`中的`episodes`数组: + +| 项 | 类型 | 内容 | 备注 | +|----|-----|-----------|--------| +| 0 | obj | 正片第1集 | | +| n | obj | 正片第(n+1)集 | 按照顺序排列 | +| …… | obj | | | + +`episodes`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------------|-------|---------------------|----------------| +| aid | num | 单集稿件avid | | +| archive_attr | num | | | +| badge | str | 标签文字 | 例如`会员`、`限免`等 | +| badge_info | obj | | | +| badge_type | num | | | +| bvid | str | 单集稿件bvid | | +| cid | num | 视频cid | | +| cover | str | 单集封面url | | +| dimension | obj | 分辨率信息 | | +| duration | num | | | +| enable_vt | bool | | | +| ep_id | num | | | +| from | str | | | +| id | num | 单集epid | | +| interaction | obj | | | +| is_sub_view | bool | | | +| is_view_hide | bool | | | +| link | str | 单集网页url | | +| long_title | str | 单集完整标题 | | +| multi_view_eps | array | | | +| pub_time | num | 发布时间 | 时间戳 | +| pv | num | 0 | 作用尚不明确 | +| release_date | str | 空 | 作用尚不明确 | +| rights | obj | | | +| section_type | num | | | +| share_copy | str | 《{标题}》+第n话+{单集完整标题} | | +| share_url | str | 单集网页url | | +| short_link | str | 单集网页url短链接 | | +| show_title | str | | | +| showDrmLoginDialog | bool | | | +| skip | obj | | | +| status | num | | | +| subtitle | str | 单集副标题 | 观看次数文字 | +| title | str | 单集标题 | | +| toast_title | str | | | +| vid | str | 单集vid | vupload_+{cid} | + +`episodes`中的`badge_info`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------------|-----|----|----| +| bg_color | str | | | +| bg_color_night | str | | | +| text | str | | | + +`episodes`中的`dimension`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|--------|-----|----|----| +| height | num | | | +| rotate | num | | | +| width | num | | | + +`episodes`中的`interaction`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------------|------|----|----| +| graph_version | num | | | +| interaction | bool | | | + +`episodes`中的`multi_view_eps`数组 + +| 字段名 | 类型 | 内容 | 备注 | +|-------|-----|----|----| +| ep_id | num | | | + +`episodes`中的`rights`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------------|-----|----|----| +| allow_demand | num | | | +| allow_dm | num | | | +| allow_download | num | | | +| area_limit | num | | | + +`episodes`中的`skip`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----|-----|----|----| +| ed | obj | | | +| op | obj | | | + +`skip`对象中的`ed`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------|-----|----|----| +| end | num | | | +| start | num | | | + +`skip`对象中的`op`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------|-----|----|----| +| end | num | | | +| start | num | | | + +`result`中的`freya`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------------|-----|----|----| +| bubble_desc | str | | | +| bubble_show_cnt | num | | | +| icon_show | num | | | + +`result`中的`icon_font`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|----|----| +| name | str | | | +| text | str | | | + +`result`中的`multi_view_info`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------------------|------|----|----| +| changing_dance | str | | | +| is_multi_view_season | bool | | | + +`result`中的`new_ep`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------|-----|----------|--------------| +| desc | str | 更新备注 | | +| id | num | 最新一话epid | | +| is_new | num | 是否最新发布 | 0:否<br />1:是 | +| title | str | 最新一话标题 | | + +`result`中的`payment`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------------------|-----|---------|--------| +| discount | num | 折扣 | 100为原价 | +| pay_type | obj | 支付相关 | | +| price | str | 售价 | | +| promotion | str | 推广信息 | | +| tip | str | | | +| view_start_time | num | | | +| vip_discount | num | 大会员折扣 | | +| vip_first_promotion | str | | | +| vip_price | str | 大会员售价 | | +| vip_promotion | str | 大会员推广信息 | | + +`payment`中的`pay_type`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------------|-----|---------|----------------------| +| allow_discount | num | 启用折扣 | 0:否<br />1:是<br />下同 | +| allow_pack | num | | | +| allow_ticket | num | 启用票券 | | +| allow_time_limit | num | 启用时间限制 | | +| allow_vip_discount | num | 启用大会员折扣 | | +| forbid_bb | num | 禁止使用B币券 | | + +`result`中的`payPack`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------------------|-----|----|----| +| id | num | | | +| not_paid_text_for_app | str | | | +| paid_text_for_app | str | | | +| pay_pack_url | str | | | +| status | num | | | +| title | str | | | + +`result`中的`play_strategy`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------------|-------|----|----| +| strategies | array | | | + +`result`中的`positive`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----|----|----| +| id | num | | | +| title | str | | | + +`result`中的`publish`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------|-----|----------|----------------------| +| is_finish | num | 完结状态 | 0:未完结<br />1:已完结 | +| is_started | num | 是否发布 | 0:未发布<br />1:已发布 | +| pub_time | str | 发布时间 | YYYY-MM-DDD hh:mm:ss | +| pub_time_show | str | 发布时间文字介绍 | | +| unknow_pub_date | num | 0 | 作用尚不明确 | +| weekday | num | 0 | 作用尚不明确 | + +`result`中的`rating`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----|--------|----| +| count | num | 总计评分人数 | | +| score | num | 评分 | | + +`result`中的`rights`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------|-----|------|---------------------------| +| allow_bp | num | | | +| allow_bp_rank | num | | | +| allow_download | num | | | +| allow_review | num | | | +| area_limit | num | | | +| ban_area_show | num | | | +| can_watch | num | | | +| copyright | str | 版权标志 | bilibili:授权<br />dujia:独家 | +| forbid_pre | num | | | +| freya_white | num | | | +| is_cover_show | num | | | +| is_preview | num | | | +| only_vip_download | num | | | +| resource | str | | | +| watch_platform | num | | | + +`result`中的`seasons`数组: + +| 项 | 类型 | 内容 | 备注 | +|----|-----|------------|--------| +| 0 | obj | 同系列剧集1 | | +| n | obj | 同系列剧集(n+1) | 按照顺序排列 | +| …… | obj | | | + +`seasons`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------------|------|----|----| +| badge | str | | | +| badge_info | obj | | | +| badge_type | num | | | +| cover | str | | | +| enable_vt | bool | | | +| horizontal_cover_1610 | str | | | +| horizontal_cover_169 | str | | | +| icon_font | obj | | | +| media_id | num | | | +| new_ep | obj | | | +| season_id | num | | | +| season_title | str | | | +| season_type | num | | | +| stat | obj | | | + +`seasons`中的`badge_info`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------------|-----|----|----| +| bg_color | str | | | +| bg_color_night | str | | | +| text | str | | | + +`seasons`中的`icon_font`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|----|----| +| name | str | | | +| text | str | | | + +`seasons`中的`new_ep`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------------|-----|----|----| +| cover | str | | | +| id | num | | | +| index_show | str | | | + +`seasons`中的`stat`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------------|-----|----|----| +| favorites | num | | | +| series_follow | num | | | +| views | num | | | +| vt | num | | | + +`result`中的`section`数组: + +| 项 | 类型 | 内容 | 备注 | +|----|-----|------------|--------| +| 0 | obj | 其他内容块1 | | +| n | obj | 其他内容块(n+1) | 按照顺序排列 | +| …… | obj | | | + +`section`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-------|-------|----| +| attr | num | | | +| episode_id | num | 0 | | +| episode_ids | array | | | +| episodes | array | 板块内容 | | +| id | num | 板块id? | | +| report | obj | | | +| title | str | 板块标题 | | +| type | num | ? | | +| type2 | num | | | + +`episodes`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|--------------------|------|----|----| +| aid | num | | | +| archive_attr | num | | | +| badge | str | | | +| badge_info | obj | | | +| badge_type | num | | | +| bvid | str | | | +| cid | num | | | +| cover | str | | | +| dimension | obj | | | +| duration | num | | | +| enable_vt | bool | | | +| ep_id | num | | | +| from | str | | | +| icon_font | obj | | | +| id | num | | | +| interaction | obj | | | +| is_view_hide | bool | | | +| link | str | | | +| link_type | str | | | +| long_title | str | | | +| pub_time | num | | | +| pv | num | | | +| release_date | str | | | +| report | obj | | | +| rights | obj | | | +| section_type | num | | | +| share_copy | str | | | +| share_url | str | | | +| short_link | str | | | +| show_title | str | | | +| showDrmLoginDialog | bool | | | +| skip | obj | | | +| stat | obj | | | +| stat_for_unity | obj | | | +| status | num | | | +| subtitle | str | | | +| title | str | | | +| toast_title | str | | | +| up_info | obj | | | +| vid | str | | | + +`badge_info`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------------|-----|----|----| +| bg_color | str | | | +| bg_color_night | str | | | +| text | str | | | + +`dimension`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|--------|-----|----|----| +| height | num | | | +| rotate | num | | | +| width | num | | | + +`icon_font`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|----|----| +| name | str | | | +| text | str | | | + +`interaction`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------------|------|----|----| +| graph_version | num | | | +| interaction | bool | | | + +`report`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|--------------|-----|----|----| +| aid | str | | | +| ep_title | str | | | +| position | str | | | +| season_id | str | | | +| season_type | str | | | +| section_id | str | | | +| section_type | str | | | + +`rights`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------------|-----|----|----| +| allow_demand | num | | | +| allow_dm | num | | | +| allow_download | num | | | +| area_limit | num | | | + +`skip`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----|-----|----|----| +| ed | obj | | | +| op | obj | | | + +`ed`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------|-----|----|----| +| end | num | | | +| start | num | | | + +`op`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------|-----|----|----| +| end | num | | | +| start | num | | | + +`stat_for_unity`对象 + +### 根对象 -> `result`对象 -> `section`数组中的对象 -> `episodes`数组中的对象 -> `stat_for_unity`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------|-----|----|----| +| coin | num | | | +| danmaku | obj | | | +| likes | num | | | +| reply | num | | | +| vt | obj | | | + +`danmaku`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|-----|----|----| +| icon | str | | | +| pure_text | str | | | +| text | str | | | +| value | num | | | + +`vt`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|-----|----|----| +| icon | str | | | +| pure_text | str | | | +| text | str | | | +| value | num | | | + +`stat`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------|-----|----|----| +| coin | num | | | +| danmakus | num | | | +| likes | num | | | +| play | num | | | +| reply | num | | | +| vt | num | | | + +`up_info`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|--------------|-----|----|----| +| avatar | str | | | +| follower | num | | | +| is_follow | num | | | +| mid | num | | | +| uname | str | | | +| verify_type | num | | | +| verify_type2 | num | | | + +`report`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|--------------|-----|----|----| +| season_id | str | | | +| season_type | str | | | +| sec_title | str | | | +| section_id | str | | | +| section_type | str | | | + + +`result`中的`series`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-----|------|----| +| display_type | num | | | +| series_id | num | 系列id | | +| series_title | str | 系列名 | | + +`result`中的`show`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|------|----------------| +| wide_screen | num | 是否全屏 | 0:正常<br />1:全屏 | + +`result`中的`stat`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|-----|----| +| coins | num | 投币数 | | +| danmakus | num | 弹幕数 | | +| favorite | num | | | +| favorites | num | 收藏数 | | +| follow_text | str | | | +| hot | num | | | +| likes | num | 点赞数 | | +| reply | num | 评论数 | | +| share | num | 分享数 | | +| views | num | 播放数 | | +| vt | num | | | + +`result`中的`up_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------------|-----|---------|----| +| avatar | str | 头像图片url | | +| avatar_subscript_url | str | | | +| follower | num | 粉丝数 | | +| is_follow | num | 0 | | +| mid | num | UP主mid | | +| nickname_color | str | | | +| pendant | obj | | | +| theme_type | num | 0 | | +| uname | str | UP主昵称 | | +| verify_type | num | | | +| vip_label | obj | | | +| vip_status | num | | | +| vip_type | num | | | + +`up_info`中的`pendant`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------|-----|----|----| +| image | str | | | +| name | str | | | +| pid | num | | | + +`up_info`中的`vip_label`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|--------------|-----|----|----| +| bg_color | str | | | +| bg_style | num | | | +| border_color | str | | | +| text | str | | | +| text_color | str | | | + +`result`中的`user_status`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------------|-----|----|----| +| area_limit | num | | | +| ban_area_show | num | | | +| follow | num | | | +| follow_status | num | | | +| login | num | | | +| pay | num | | | +| pay_pack_paid | num | | | +| sponsor | num | | | + +# 获取剧集分集信息 + +> https://api.bilibili.com/pgc/web/season/section + +*请求方式:GET* + +鉴权方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----------|-----|--------|-----|-----| +| season_id | str | 剧集ssid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-------------------| +| code | num | 返回值 | 0:成功<br />-404:错误 | +| message | str | 错误信息 | 默认为success | +| result | obj | 信息本体 | | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-------|--------|-----| +| main_section | obj | 正片信息 | | +| section | array | 花絮、PV等 | | + +`result`中的`main_section`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-------|------------------------------|-----| +| episodes | array | 分集信息 | | +| id | num | 分组id | | +| type | num | 0:正片<br/>1:PV&其他<br/>2:OP&ED | | +| title | str | | | + +`episodes`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|----------|-----| +| aid | num | 视频av号 | | +| badge | str | | | +| badge_info | obj | | | +| badge_type | num | 0 | | +| cid | num | 分集cid | | +| cover | str | 分集封面 | | +| from | str | bangumi | | +| id | num | 分集epId | | +| is_premiere | num | 0 | | +| long_title | str | 长标题 | | +| share_url | str | 分集播放页url | | +| status | num | 2 | | +| title | str | 短标题 | | +| vid | str | | | + +`badge_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------|-----|-----|-----| +| bg_color | str | | | +| bg_color_night | str | | | +| text | str | | | + +`section`数组中的对象: + +**同`main_section`对象** + +**示例:** + +```shell +curl -L -X GET 'https://api.bilibili.com/pgc/web/season/section?season_id=42290' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "success", + "result": { + "main_section": { + "episodes": [ + { + "aid": 300876247, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 772096113, + "cover": "http://i0.hdslb.com/bfs/archive/c09aec64c1787e287b0187498a4443177cc2112c.jpg", + "from": "bangumi", + "id": 606591, + "is_premiere": 0, + "long_title": "瞒天过海!罪犯新选组", + "share_url": "https://www.bilibili.com/bangumi/play/ep606591", + "status": 2, + "title": "1", + "vid": "" + }, + { + "aid": 555940678, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 779868818, + "cover": "http://i0.hdslb.com/bfs/archive/52ccef75fc179c7f8a4f2ff989a1249c78f564e0.jpg", + "from": "bangumi", + "id": 606592, + "is_premiere": 0, + "long_title": "光芒四射!遗物日本刀", + "share_url": "https://www.bilibili.com/bangumi/play/ep606592", + "status": 2, + "title": "2", + "vid": "" + }, + { + "aid": 216208730, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 779450100, + "cover": "http://i0.hdslb.com/bfs/archive/7eee64ff758fb426b6cd16bc7d525f4de98fd4dc.jpg", + "from": "bangumi", + "id": 606596, + "is_premiere": 0, + "long_title": "乔装打扮!潜入花街", + "share_url": "https://www.bilibili.com/bangumi/play/ep606596", + "status": 2, + "title": "3", + "vid": "" + }, + { + "aid": 386385026, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 786667756, + "cover": "http://i0.hdslb.com/bfs/archive/6851be597e1fa496a8b1486000e83654c2fac45c.jpg", + "from": "bangumi", + "id": 606597, + "is_premiere": 0, + "long_title": "一探究竟!神秘妖刀", + "share_url": "https://www.bilibili.com/bangumi/play/ep606597", + "status": 2, + "title": "4", + "vid": "" + }, + { + "aid": 729094525, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 793386614, + "cover": "http://i0.hdslb.com/bfs/archive/5dfa30d48188b26c616a05745132a59f6823dade.jpg", + "from": "bangumi", + "id": 606598, + "is_premiere": 0, + "long_title": "展现无遗!和尚与医生的决心", + "share_url": "https://www.bilibili.com/bangumi/play/ep606598", + "status": 2, + "title": "5", + "vid": "" + }, + { + "aid": 599314561, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 798315932, + "cover": "http://i0.hdslb.com/bfs/archive/3daae9ee434d335ff9e5a9d8244bc1e6b7ffa8d0.jpg", + "from": "bangumi", + "id": 606599, + "is_premiere": 0, + "long_title": "直捣敌巢!败德白川屋", + "share_url": "https://www.bilibili.com/bangumi/play/ep606599", + "status": 2, + "title": "6", + "vid": "" + }, + { + "aid": 259686552, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 807199844, + "cover": "http://i0.hdslb.com/bfs/archive/9ff73932c210abe64373be6f3959c2eee6c7470b.jpg", + "from": "bangumi", + "id": 606600, + "is_premiere": 0, + "long_title": "全力阻止!新选组解散", + "share_url": "https://www.bilibili.com/bangumi/play/ep606600", + "status": 2, + "title": "7", + "vid": "" + }, + { + "aid": 514942530, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 814175863, + "cover": "http://i0.hdslb.com/bfs/archive/31a19bf3af61e58f1e8c4a387779fc3272cb47a7.jpg", + "from": "bangumi", + "id": 606601, + "is_premiere": 0, + "long_title": "激烈战斗!池田屋事件", + "share_url": "https://www.bilibili.com/bangumi/play/ep606601", + "status": 2, + "title": "8", + "vid": "" + }, + { + "aid": 515024193, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 819960797, + "cover": "http://i0.hdslb.com/bfs/archive/68a0a12a74e99b6cd85cfa0fb7be70d82d8b6558.jpg", + "from": "bangumi", + "id": 606602, + "is_premiere": 0, + "long_title": "真心炸裂!人之思绪 鬼之念想", + "share_url": "https://www.bilibili.com/bangumi/play/ep606602", + "status": 2, + "title": "9", + "vid": "" + }, + { + "aid": 430293537, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 827739564, + "cover": "http://i0.hdslb.com/bfs/archive/6411f71c947ba9b011ca0fe2891334147ef1e14d.jpg", + "from": "bangumi", + "id": 606603, + "is_premiere": 0, + "long_title": "全力守护!美利坚黑船", + "share_url": "https://www.bilibili.com/bangumi/play/ep606603", + "status": 2, + "title": "10", + "vid": "" + }, + { + "aid": 858116183, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 833436271, + "cover": "http://i0.hdslb.com/bfs/archive/48736284b5cf0f3515cddb95f1c1b8658ec6c5ff.jpg", + "from": "bangumi", + "id": 606604, + "is_premiere": 0, + "long_title": "勇往直前!京都大决战", + "share_url": "https://www.bilibili.com/bangumi/play/ep606604", + "status": 2, + "title": "11", + "vid": "" + }, + { + "aid": 773279679, + "badge": "会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "会员" + }, + "badge_type": 0, + "cid": 840839493, + "cover": "http://i0.hdslb.com/bfs/archive/316f7c8a750699bf53ee44d43669fabb0271be86.jpg", + "from": "bangumi", + "id": 606605, + "is_premiere": 0, + "long_title": "替身传说!罪犯新选组", + "share_url": "https://www.bilibili.com/bangumi/play/ep606605", + "status": 13, + "title": "12", + "vid": "" + } + ], + "id": 81861, + "title": "正片", + "type": 0 + }, + "section": [ + { + "episodes": [ + { + "aid": 898153042, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 766274696, + "cover": "http://i0.hdslb.com/bfs/archive/ac27ed20081e99fc36720ef0714f81d8df2c279a.png", + "from": "bangumi", + "id": 576387, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep576387", + "status": 2, + "title": "PV", + "vid": "" + }, + { + "aid": 215937670, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 773008915, + "cover": "http://i0.hdslb.com/bfs/archive/0a6b589e9175dfee1d9699fb55c5c0677941994a.png", + "from": "bangumi", + "id": 606995, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep606995", + "status": 2, + "title": "西川贵教", + "vid": "" + }, + { + "aid": 813460609, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 773007362, + "cover": "http://i0.hdslb.com/bfs/archive/6c8f4136731c1c2f8171f5c006f79f0603d11bdf.png", + "from": "bangumi", + "id": 606998, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep606998", + "status": 2, + "title": "幕末替身声优采访", + "vid": "" + }, + { + "aid": 556287340, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 785468206, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 660464, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep660464", + "status": 2, + "title": "声优对谈 01", + "vid": "" + }, + { + "aid": 984099086, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 792637456, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 669591, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep669591", + "status": 2, + "title": "声优对谈 02", + "vid": "" + }, + { + "aid": 259364452, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 798995285, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 670446, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep670446", + "status": 2, + "title": "声优对谈 03", + "vid": "" + }, + { + "aid": 772146427, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 808201440, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 672539, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep672539", + "status": 2, + "title": "声优对谈 04", + "vid": "" + }, + { + "aid": 687381109, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 814826609, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 676133, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep676133", + "status": 2, + "title": "声优对谈 05", + "vid": "" + }, + { + "aid": 730289528, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 826951152, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 676134, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep676134", + "status": 2, + "title": "声优对谈 07", + "vid": "" + }, + { + "aid": 602813211, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 826951370, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 676135, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep676135", + "status": 2, + "title": "声优对谈 08", + "vid": "" + }, + { + "aid": 515295782, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 826951255, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 676137, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep676137", + "status": 2, + "title": "声优对谈 09", + "vid": "" + }, + { + "aid": 815269384, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 826951558, + "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png", + "from": "bangumi", + "id": 676138, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep676138", + "status": 2, + "title": "声优对谈 10", + "vid": "" + } + ], + "id": 82126, + "title": "PV&其他", + "type": 1 + }, + { + "episodes": [ + { + "aid": 556712105, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 794382832, + "cover": "http://i0.hdslb.com/bfs/archive/1f4ab8b9af0689900e7c486c4e676e27988091be.png", + "from": "bangumi", + "id": 670062, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep670062", + "status": 2, + "title": "NCOP", + "vid": "" + }, + { + "aid": 259129266, + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "text": "" + }, + "badge_type": 0, + "cid": 794382772, + "cover": "http://i0.hdslb.com/bfs/archive/d08738a452187a0229c3b99beaf1cb4ff868a030.png", + "from": "bangumi", + "id": 670063, + "is_premiere": 0, + "long_title": "", + "share_url": "https://www.bilibili.com/bangumi/play/ep670063", + "status": 2, + "title": "NCED", + "vid": "" + } + ], + "id": 85065, + "title": "OP&ED", + "type": 2 + } + ] + } +} +``` + +</details> diff --git a/docs/bangumi/season_index.md b/docs/bangumi/season_index.md new file mode 100644 index 0000000..013227d --- /dev/null +++ b/docs/bangumi/season_index.md @@ -0,0 +1,806 @@ +# 剧集索引 + +## 获取剧集索引 + +> https://api.bilibili.com/pgc/season/index/result +> +*请求方式:GET* + +鉴权方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------------------- | ---- | --------------- | -------------- | --------------------------------------------------------------------------------------- | +| season_type | num | 类别 | 必要 | 番剧:`1`   电影:`2`   纪录片:`3`<br>国创:`4`   电视剧:`5`   综艺:`7` | +| type | num | 未知作用 | 必要 | 固定为 `1` | +| page | num | 页码 | 非必要 | 默认为 `1` | +| pagesize | num | 每页项数 | 非必要 | 定义域:[1,∞),<br>超出最大项数则返回最大项数 | +| season_version | num | 类型 | 非必要 | 全部:`-1`   正片:`1`   电影:`2`   其他:`3` | +| spoken_language_type | num | 配音 | 非必要 | 全部:`-1`   原声:`1`   中文配音:`2` | +| area | str | 地区 | 非必要 | 地区代码列表 ∈N∩[1,70] 例如日本:`2` 中国:`1,6,7` [完整地区代码见表](info.md#剧集地区一览)<br>`-1`代表全部,前端页面有具体国家则可以单独请求具体国家如日本`2`,<br>将[1,70]中前端页面有的国家排除后一一列出则代表其他如`1,4,5,6,7,8...69,70` | +| is_finish | num | 状态 | 非必要 | 全部:`-1`   完结:`1`   连载:`0` | +| copyright | str | 版权 | 非必要 | 全部:`-1`   独家:`3`   其他:`1,2,4` | +| season_status | str | 付费类型 | 非必要 | 全部:`-1`   免费:`1`   付费:`2,6`   大会员:`4,6` | +| season_month | num | 季度 | 非必要 | 全部:`-1`   一月:`1`   四月:`4`   七月:`7`   十月:`10` | +| year | str | 年份 | 非必要 | 适用于`国创`和`番剧`类别<br>除了`-1`代表全部外,其他情况以左闭右开区间形式表示,<br>如`[2025,2026)`代表2025年,`[2010,2015)`代表2010-2014年,`[1990,2000)`代表90年代,`[,1980)`代表更早 | +| release_date | str | 年份 | 非必要 | 适用于`电影`,`电视剧`和`纪录片`类别<br>和year参数类似只是精确到秒级,<br>如`[2025-01-01 00:00:00,2026-01-01 00:00:00)`代表2025年,<br>`[1990-01-01 00:00:00,2000-01-01 00:00:00)`代表90年代 | +| style_id | num | 风格 | 非必要 | 全部:`-1`   特定风格则值为该风格id,如原创:`10010` | +| producer_id | num | 出品方 | 非必要 | 全部:`-1`   特定出品方则值为该出品方id,如央视:`4` | +| order | num | 排序指标 | 非必要 | 更新时间:`0`   弹幕数量:`1`   播放数量:`2`  <br>追剧人数:`3`   最高评分:`4`   开播时间:`5`   上映时间:`6` | +| sort | num | 排序方向 | 非必要 | 增序:`1`   降序:`0` 默认为降序 | +| st | num | 未知作用 | 非必要 | 值与 `season_type` 相同,合理怀疑是其缩写 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------|------|----------|--------------------------------------------| +| code | num | 返回值 | 0:成功<br>-400:请求错误<br>-404:错误 | +| message | str | 错误信息 | 默认为 success | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------|--------|------------|--------------------| +| has_next | num | 是否有下一页 | 1:有<br>0:无 | +| list | array | 剧集列表 | | +| num | num | 当前页码 | | +| size | num | 每页数量 | | +| total | num | 总剧集数 | | + +`data` 中的 `list` 数组: + +| 项 | 类型 | 内容 | 备注 | +|------|------|-----------------|------| +| 0 | obj | 剧集信息 1 | | +| n | obj | 剧集信息 (n+1) | | +| …… | obj | …… | | + +`list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------------|--------|----------------|----------------------------------------------------------------------| +| badge | str | 角标文本 | 例如 `大会员`、`独家` 等 | +| badge_info | obj | 角标信息 | | +| badge_type | num | 角标类型 | | +| cover | str | 封面图片 URL | | +| first_ep | obj | 第一话信息 | | +| index_show | str | 剧集进度显示 | 例如 `全48话` | +| is_finish | num | 是否完结 | `1`:完结<br>`0`:未完结 | +| link | str | 剧集播放页链接 | | +| media_id | num | 剧集 md id | | +| order | str | 排序显示文本 | 例如 `9.9分` | +| order_type | str | 排序类型 | | +| score | str | 评分 | | +| season_id | num | 剧集 ss id | | +| season_status | num | 剧集状态 | 普通剧集为 `2`,大会员或独家等有角标的剧集为 `13` | +| season_type | num | 剧集类别 | 值同参数中的 `season_type` | +| subTitle | str | 副标题 | | +| title | str | 标题 | | +| title_icon | str | 标题图标 URL | | + +`list` 项中的 `badge_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------|------|-------------|----------| +| bg_color | str | 角标背景色 | 日间模式 | +| bg_color_night | str | 角标背景色 | 夜间模式 | +| text | str | 角标文本 | | + +`list` 项中的 `first_ep` 对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|------|----------------|------| +| cover | str | 第一话封面 URL | | +| ep_id | num | 第一话 ep id | | + +**示例:** + +查询番剧类别索引按最高评分降序排序 + +```shell +curl -G 'https://api.bilibili.com/pgc/season/index/result' \ +--data-urlencode 'type=1' \ +--data-urlencode 'season_type=1' \ +--data-urlencode 'order=4' \ +--data-urlencode 'sort=0' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "has_next": 1, + "list": [ + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/dc1d94ded94ae470db35d76edeb106f606e27e96.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/0a8ca0a60401b16838c8fae3d09223ead44f445a.png", + "ep_id": 2197678 + }, + "index_show": "全48话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss113090", + "media_id": 27736357, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 113090, + "season_status": 13, + "season_type": 1, + "subTitle": "平成刑侦风假面骑士", + "title": "假面骑士驰骑", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/834bdb5d36c401179b9e91fdc1de520a6664c2a7.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/ba36c397ede8ba668cc726c34e0aaf5c0195958c.jpg", + "ep_id": 1404783 + }, + "index_show": "全24话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss80512", + "media_id": 24449643, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 80512, + "season_status": 13, + "season_type": 1, + "subTitle": "穿越百夜,仰望千空", + "title": "Dr.STONE 石纪元 (第四季)", + "title_icon": "" + }, + { + "badge": "独家", + "badge_info": { + "bg_color": "#00C0FF", + "bg_color_night": "#0B91BE", + "text": "独家" + }, + "badge_type": 1, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/dcd6e746842fdb988775c8b5f8217ad19b6d4de2.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/400927077a6718848bd44de634bf09a3ad029d22.jpg", + "ep_id": 1938328 + }, + "index_show": "全12话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss102891", + "media_id": 26714035, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 102891, + "season_status": 13, + "season_type": 1, + "subTitle": "可燃乌龙茶又回来了", + "title": "碧蓝之海 第二季", + "title_icon": "" + }, + { + "badge": "独家", + "badge_info": { + "bg_color": "#00C0FF", + "bg_color_night": "#0B91BE", + "text": "独家" + }, + "badge_type": 1, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/c72d6ee8b3cba39355af14bebd4857935b4fb083.png", + "first_ep": { + "cover": "https://i0.hdslb.com/bfs/bangumi/image/f9c6876d58c7dc77f04f9780d51fcac08863f9fb.png", + "ep_id": 1655818 + }, + "index_show": "更新至第13话", + "is_finish": 0, + "link": "https://www.bilibili.com/bangumi/play/ss91812", + "media_id": 25581526, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 91812, + "season_status": 13, + "season_type": 1, + "subTitle": "一马当先,万马无光", + "title": "赛马娘 芦毛灰姑娘", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "http://i0.hdslb.com/bfs/bangumi/image/087b862b772ee4e644478a36c757a26db476193d.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/bangumi/1e47fe925cb543c09250a142c31c8e42ab4bcbbd.jpg", + "ep_id": 393434 + }, + "index_show": "全200话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss38157", + "media_id": 28233839, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 38157, + "season_status": 13, + "season_type": 1, + "subTitle": "最无厘头的热血动画", + "title": "银魂", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/f3ebb500b701a387f5abde67516c5c96bbd2faff.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/6f20908042a02bcbb4ab1e0e5f36c06cfb4eb781.png", + "ep_id": 779775 + }, + "index_show": "全28话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss46089", + "media_id": 21087073, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 46089, + "season_status": 13, + "season_type": 1, + "subTitle": "花海盛开,故人归来", + "title": "葬送的芙莉莲", + "title_icon": "" + }, + { + "badge": "独家", + "badge_info": { + "bg_color": "#00C0FF", + "bg_color_night": "#0B91BE", + "text": "独家" + }, + "badge_type": 1, + "cover": "http://i0.hdslb.com/bfs/bangumi/image/f6709b76e88f50aa132d1e09e2d8de9663a09b3e.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/bangumi/69c9e8b5548356e04f8a52a5a7e270fc1786123d.jpg", + "ep_id": 293001 + }, + "index_show": "全24话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss4213", + "media_id": 28223483, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 4213, + "season_status": 13, + "season_type": 1, + "subTitle": "真是high到不行", + "title": "JOJO的奇妙冒险 星尘远征军 埃及篇", + "title_icon": "" + }, + { + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "" + }, + "badge_type": 0, + "cover": "http://i0.hdslb.com/bfs/bangumi/065926cbda8f464a31293758054620cca15e5589.jpg", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/315d88aa2b1e723089b29ddc2febb5b937ef68c9.jpg", + "ep_id": 249469 + }, + "index_show": "全55话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss357", + "media_id": 132112, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 357, + "season_status": 2, + "season_type": 1, + "subTitle": "童年经典,百看不厌", + "title": "猫和老鼠 旧版", + "title_icon": "" + }, + { + "badge": "", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "" + }, + "badge_type": 0, + "cover": "http://i0.hdslb.com/bfs/bangumi/e46cc26d95a6b09541a8bda484f041eebb474c1a.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/bangumi/e15c1305e4d54ca1a92f44e0953eee5d6006397e.jpg", + "ep_id": 247270 + }, + "index_show": "全203话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss1376", + "media_id": 1376, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 1376, + "season_status": 2, + "season_type": 1, + "subTitle": "我的老师是婴儿", + "title": "家庭教师HITMAN REBORN!", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "http://i0.hdslb.com/bfs/bangumi/image/d432ca132f5b8e8d72257704817f270595f92148.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/c0fa966ef05e15a52625a764b8c829b9a204c984.jpg", + "ep_id": 396924 + }, + "index_show": "全52话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss38385", + "media_id": 28234069, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 38385, + "season_status": 13, + "season_type": 1, + "subTitle": "那一年,我变为了光", + "title": "迪迦奥特曼(中配)", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "http://i0.hdslb.com/bfs/bangumi/image/00e9bc51f9f3677f88dc9cea41fbf430ee4eff7a.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/adc9c65cd4b224da7d3c8a70593cf3b4ee0f4906.png", + "ep_id": 397306 + }, + "index_show": "全64话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss38158", + "media_id": 28233840, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 38158, + "season_status": 13, + "season_type": 1, + "subTitle": "最无厘头的热血动画", + "title": "银魂 第二季", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/60a1806c76d5816ddabf80ab5641c1a2bb112117.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/18ead60d3895843e4476bc8459a8cada1e55fba1.png", + "ep_id": 2081361 + }, + "index_show": "全13话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss109360", + "media_id": 27366597, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 109360, + "season_status": 13, + "season_type": 1, + "subTitle": "用怪兽打败怪兽", + "title": "奥特银河 大怪兽之战 无尽的圣战", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/8eb3d284a1109218ab6c61768d18942011b4a101.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/6912de2f07dd6223b1d321b3fabfc7ce031f8ba1.png", + "ep_id": 2081328 + }, + "index_show": "全13话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss109321", + "media_id": 27362342, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 109321, + "season_status": 13, + "season_type": 1, + "subTitle": "用怪兽打败怪兽", + "title": "奥特银河 大怪兽之战", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/c4bc29a81716afdcaa4e859176e889366a554021.png", + "first_ep": { + "cover": "https://i0.hdslb.com/bfs/bangumi/image/a5c64d1762845307cf8bb5de00327eaf7969d773.png", + "ep_id": 1718028 + }, + "index_show": "全1话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss99364?theme=movie", + "media_id": 26339285, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 99364, + "season_status": 13, + "season_type": 1, + "subTitle": "日剧感强的假面骑士", + "title": "假面骑士圣刃 深罪三重奏", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/f72fac0118e212e577ee4a3a0b0b0e3021c90e58.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/7b9294cbed2bd10e880a449923968d60762ae4e0.png", + "ep_id": 1692216 + }, + "index_show": "全13话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss98694", + "media_id": 26271690, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 98694, + "season_status": 13, + "season_type": 1, + "subTitle": "少年获得神奇手表", + "title": "少年骇客 第一季 中文配音", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/00983f73ba7043f14f8a473051e8ccdf502b4466.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/d49a210847788bb9b56ccdf7d117f67377470139.jpg", + "ep_id": 1670641 + }, + "index_show": "全26话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss97528", + "media_id": 26154494, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 97528, + "season_status": 13, + "season_type": 1, + "subTitle": "快看!是彩虹小马!", + "title": "小马宝莉 友谊的魔法 第一季 中文配音", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/f0aa6018ab3d68b981a874a2ffc2881a8eb1d3a9.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/8037892942512985339b60cb022a268596561eeb.png", + "ep_id": 1568817 + }, + "index_show": "全12话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss91765", + "media_id": 25576803, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 91765, + "season_status": 13, + "season_type": 1, + "subTitle": "天才变谐星?!", + "title": "失忆投捕", + "title_icon": "" + }, + { + "badge": "独家", + "badge_info": { + "bg_color": "#00C0FF", + "bg_color_night": "#0B91BE", + "text": "独家" + }, + "badge_type": 1, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/56af151182c0b499b37e59b582d756d7bae6bc9d.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/ea0fd1b78b85f5fd4242643eeec77e965c651aed.png", + "ep_id": 1518097 + }, + "index_show": "全1话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss91516", + "media_id": 25551928, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 91516, + "season_status": 13, + "season_type": 1, + "subTitle": "主打一个不滑滑板", + "title": "无限滑板 特别篇", + "title_icon": "" + }, + { + "badge": "独家", + "badge_info": { + "bg_color": "#00C0FF", + "bg_color_night": "#0B91BE", + "text": "独家" + }, + "badge_type": 1, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/2f5946880c07914d1cccd112702884f232b647e0.png", + "first_ep": { + "cover": "https://i0.hdslb.com/bfs/bangumi/image/e38897af6ec62b387918c5966d1fa60f27affff5.png", + "ep_id": 1524613 + }, + "index_show": "全12话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss90684", + "media_id": 25467691, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 90684, + "season_status": 13, + "season_type": 1, + "subTitle": "让AI顺应你的心", + "title": "末日后酒店", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/d2c1d3d379d385b2c6abcffd48a55a93deb6889d.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/cf4aca7382f42d01c3d2b10f3c8a0dcc9fd011a1.jpg", + "ep_id": 1404755 + }, + "index_show": "全13话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss76133", + "media_id": 24006597, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 76133, + "season_status": 13, + "season_type": 1, + "subTitle": "教练,我想学滑冰!", + "title": "金牌得主", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/6b431f3e7aef2fd476a11a59449096f20e5c34a4.jpg", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/57d3f50996c97c804ec03dbd769b2feee9ae6f3f.png", + "ep_id": 1113923 + }, + "index_show": "全12话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss48811", + "media_id": 23053814, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 48811, + "season_status": 13, + "season_type": 1, + "subTitle": "治愈之旅的延续", + "title": "夏目友人帐 第七季", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/6e9309a647368c4afabbfb23537f37e7b311a014.png", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/847348eeaec3e4617eaffd102a402409b1905106.png", + "ep_id": 835243 + }, + "index_show": "全40话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss48643", + "media_id": 22923892, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 48643, + "season_status": 13, + "season_type": 1, + "subTitle": "小羊肖恩拯救不开心", + "title": "小羊肖恩 第一季", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/93c420e293be6135c7b3474394239fce339bfc99.jpg", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/33d907c4af25805ea283aa3bdd1223f95653acad.png", + "ep_id": 812175 + }, + "index_show": "全50话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss47245", + "media_id": 21195727, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 47245, + "season_status": 13, + "season_type": 1, + "subTitle": "本大爷要支配世界!", + "title": "虫王战队超王者", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/67f7082099cf201a50a979a5788490c9b6989931.jpg", + "first_ep": { + "cover": "http://i0.hdslb.com/bfs/archive/df4429a10a9a113a9eac97aec1fd63d05ba475ad.png", + "ep_id": 771376 + }, + "index_show": "全272话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss45840", + "media_id": 20342554, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 45840, + "season_status": 13, + "season_type": 1, + "subTitle": "活泼又聪明的蓝精灵", + "title": "蓝精灵 中文配音", + "title_icon": "" + }, + { + "badge": "大会员", + "badge_info": { + "bg_color": "#FB7299", + "bg_color_night": "#D44E7D", + "text": "大会员" + }, + "badge_type": 0, + "cover": "https://i0.hdslb.com/bfs/bangumi/image/05b90f3e078e2f67a92df5cbf150bdd85d9f824b.jpg", + "first_ep": { + "cover": "https://i0.hdslb.com/bfs/bangumi/image/9e267f05ae866de3c368317983e5702cf46cbd72.jpg", + "ep_id": 744262 + }, + "index_show": "全52话", + "is_finish": 1, + "link": "https://www.bilibili.com/bangumi/play/ss45014", + "media_id": 20222550, + "order": "9.9分", + "order_type": "4", + "score": "9.9", + "season_id": 45014, + "season_status": 13, + "season_type": 1, + "subTitle": "如何在游戏中学习", + "title": "布鲁伊 第三季", + "title_icon": "" + } + ], + "num": 1, + "size": 25, + "total": 4147 + }, + "message": "success" +} +``` + +</details> diff --git a/docs/bangumi/timeline.md b/docs/bangumi/timeline.md new file mode 100644 index 0000000..6742cb7 --- /dev/null +++ b/docs/bangumi/timeline.md @@ -0,0 +1,799 @@ +# 番剧或影视时间线 + +## 获取番剧或影视时间线 + +> https://api.bilibili.com/pgc/web/timeline +*请求方式:GET* + +鉴权方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------ | ------ | ----------------------------- | +| types | str | 类别 | 必要 | 1:`番剧`<br />3:`电影`<br />4:`国创` | +| before | num | 开始于前几日 | 必要 | ∈N∩[0,7] | +| after | num | 结束于后几日 | 必要 | ∈N∩[0,7] | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:错误 | +| message | str | 错误信息 | 默认为success | +| result | array | 信息本体 | | + +`result`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------------- | ---- | +| 0 | obj | `before`天前信息 | | +| n | obj | 从`before`天前开始第n天信息 | | +| …… | obj | …… | | + +`result`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | -------------- | ----------------- | +| date | str | 当日日期 | | +| date_ts | num | 当日日期时间戳 | | +| day_of_week | num | 一周中第几天 | ∈N∩[1,7] | +| episodes | array | 剧集列表 | | +| is_today | num | 是否今日 | | + +`result`数组中的对象中的`episodes`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 剧集1 | | +| n | obj | 剧集(n+1) | | +| …… | obj | …… | | + +`episodes`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | --------------- | +| cover | str | 封面图url | | +| delay | num | 是否推迟 | | +| delay_id | num | 推迟一话epid | | +| delay_index | str | 推迟一话名称 | | +| delay_reason | str | 推迟原因 | | +| ep_cover | str | 最新一话图url | | +| episode_id | num | 最新一话的epid | | +| pub_index | str | 最新一话名称 | | +| pub_time | str | 发布时间 | | +| pub_ts | num | 发布时间戳 | | +| published | num | 是否已发布 | | +| follows | str | - | | +| plays | str | - | | +| season_id | num | 剧集ssid | | +| square_cover | str | 缩略图url | | +| title | str | 剧集标题 | | + +**示例:** + +查询从`3`天前到`7`天后的`番剧`时间轴 + +```shell +curl -G 'https://api.bilibili.com/pgc/web/timeline' \ +--data-urlencode 'types=1' \ +--data-urlencode 'before=3' \ +--data-urlencode 'after=7' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "success", + "result": [ + { + "date": "5-15", + "date_ts": 1652544000, + "day_of_week": 7, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/9918f6e67c26d6bd1ddad8dab70bcc7af3bfae9b.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/archive/0067a09911e2fa252a3ef5126d8dc5392189dd8a.jpg", + "episode_id": 508403, + "follows": "-", + "plays": "-", + "pub_index": "第3话", + "pub_time": "01:30", + "pub_ts": 1652549400, + "published": 1, + "season_id": 41416, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/926fd09277605204c2f7c94b322de3156ef9da52.png", + "title": "式守同学不只可爱而已" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/3a9815ca239735c51fc7daf2399c3721bbe00160.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/archive/56e8d4b13dac855c51060dcda286be049fde4a46.png", + "episode_id": 466766, + "follows": "-", + "plays": "-", + "pub_index": "第6话", + "pub_time": "11:00", + "pub_ts": 1652583600, + "published": 1, + "season_id": 41005, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/b3dd92da1ca35758f329fa5aa649991b118a98ca.png", + "title": "鬼灭之刃 无限列车篇 中配版" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/71d54cae830d32a5af776dcc46632146fbdba868.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/archive/00c1dff8457183671f0402e0a2826313a1994a9b.jpg", + "episode_id": 480434, + "follows": "-", + "plays": "-", + "pub_index": "第240话", + "pub_time": "17:30", + "pub_ts": 1652607000, + "published": 1, + "season_id": 5978, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/3121473d5dd03a9bcccb8490034207e724e731b3.jpg", + "title": "博人传 火影忍者新时代" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/91e75030be41d67b9f19b96bb512b0c98ae781bd.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/archive/e701f39cef52e6b0737e3463faf7cb0cee61e935.jpg", + "episode_id": 510647, + "follows": "-", + "plays": "-", + "pub_index": "第4话", + "pub_time": "20:00", + "pub_ts": 1652616000, + "published": 1, + "season_id": 41557, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/4329384cba4ab0390eae1a84a719e4649bf61cfb.png", + "title": "这个治疗有点烦" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/c9723d8c77d881a8debba2852d580e97826b43d0.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/archive/2a01ab590fd8b1331096b94cc6fc09dbdad1bbec.png", + "episode_id": 478918, + "follows": "-", + "plays": "-", + "pub_index": "第7话", + "pub_time": "21:00", + "pub_ts": 1652619600, + "published": 1, + "season_id": 41591, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/1ffa24e100583c3aa96812dea680943291c5c384.jpg", + "title": "恋爱游戏世界对路人角色很不友好" + } + ], + "is_today": 0 + }, + { + "date": "5-16", + "date_ts": 1652630400, + "day_of_week": 1, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/e468c854628b97b5373baaf4c43e1346a9806baa.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/archive/219161297558531d2475da73e863dc237e83baa1.png", + "episode_id": 511342, + "follows": "-", + "plays": "-", + "pub_index": "第1话", + "pub_time": "20:00", + "pub_ts": 1652702400, + "published": 1, + "season_id": 41419, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/75a291010c128ce2de17267fd2a4842d19898236.png", + "title": "魔法使黎明期" + } + ], + "is_today": 0 + }, + { + "date": "5-17", + "date_ts": 1652716800, + "day_of_week": 2, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/4e6c505b1b1631c542ea76c3da1ce08bb43faad6.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/archive/bf37e15c52889a7a9dca16346354bb7c6663c899.png", + "episode_id": 510132, + "follows": "-", + "plays": "-", + "pub_index": "第146话", + "pub_time": "18:00", + "pub_ts": 1652781600, + "published": 1, + "season_id": 23841, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/5c2f289eac0ec49bc5e6b9483f4191c42ffa2254.jpg", + "title": "美妙☆频道" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/9eef1df9ab157be52d2c4d70d3500442f00cafc3.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/archive/d9831c3170bcbba38edc2204ee5059f583823913.png", + "episode_id": 509043, + "follows": "-", + "plays": "-", + "pub_index": "第11话", + "pub_time": "18:00", + "pub_ts": 1652781600, + "published": 1, + "season_id": 38950, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/13fd7c96659a20c61409e155a2a913a59348d122.png", + "title": "魔法纪录 魔法少女小圆外传 第二季" + } + ], + "is_today": 0 + }, + { + "date": "5-18", + "date_ts": 1652803200, + "day_of_week": 3, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/fba0229f1a6eec6ed692b7ae91c634d5cbde0727.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/0ebefe529449ff98d544395d1576402bb0d0ae5b.png", + "episode_id": 510498, + "follows": "-", + "plays": "-", + "pub_index": "第7话", + "pub_time": "21:00", + "pub_ts": 1652878800, + "published": 0, + "season_id": 41413, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/247f8326019e035338529306e94baea3336c43b4.png", + "title": "盾之勇者成名录 第二季" + } + ], + "is_today": 1 + }, + { + "date": "5-19", + "date_ts": 1652889600, + "day_of_week": 4, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/99277ce3f41d1cb4dcda9f6010ebe9c9e6d345e5.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/c989d496e3a075e8bc134b0d4d53d6ca5c2ae634.jpg", + "episode_id": 510760, + "follows": "-", + "plays": "-", + "pub_index": "第2话", + "pub_time": "12:00", + "pub_ts": 1652932800, + "published": 0, + "season_id": 41417, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/ef45828cb99309169e95d1bf54ec833d7968bf22.png", + "title": "夏日重现" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/1cd26af47cf9d9ca045ec36f56ce14a66867438d.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/3dc8d348937528779b7ad9a3070d37276518080f.png", + "episode_id": 399655, + "follows": "-", + "plays": "-", + "pub_index": "第50话", + "pub_time": "18:00", + "pub_ts": 1652954400, + "published": 0, + "season_id": 38353, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/4bd7b0a4c270ce62ca2adf3e18487a96e4fde92e.png", + "title": "通灵王" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/5f5b16bc8edd1310fbf0ac8bce04a11144dc858e.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/aed167a32445ed294ea75ed674442c766d56cb2a.png", + "episode_id": 511494, + "follows": "-", + "plays": "-", + "pub_index": "第4话", + "pub_time": "23:00", + "pub_ts": 1652972400, + "published": 0, + "season_id": 41422, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/924c550415ccdd142145dbf102bd81fcbb018ffd.png", + "title": "骸骨骑士大人奇幻世界冒险中" + } + ], + "is_today": 0 + }, + { + "date": "5-20", + "date_ts": 1652976000, + "day_of_week": 5, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/a29f3b00a94d1b4a029054f72963cc10d98bae99.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/4b9b98677b039b9126614f5a5259aa1484cea227.jpg", + "episode_id": 510757, + "follows": "-", + "plays": "-", + "pub_index": "第2话", + "pub_time": "01:28", + "pub_ts": 1652981280, + "published": 0, + "season_id": 41520, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/2a0ca7be587039eef380f802f8ae71bd21d2ea2c.png", + "title": "街角魔族 第二季" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/ecb52c79def9f5a6099c5a0770f56e20479fb008.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/36d3079e1b24395b07f9f95128adc9568459c3e5.png", + "episode_id": 478238, + "follows": "-", + "plays": "-", + "pub_index": "第17话", + "pub_time": "02:25", + "pub_ts": 1652984700, + "published": 0, + "season_id": 40873, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/13f437706d3f27dee7566a5e489928605663e40f.png", + "title": "川尻小玉的懒散生活" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/a7517ca25c5c7a132a16f589e3a3c4d9f49af196.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/17f34f6c51b8b9371af1998f0612d51f0ba03df2.png", + "episode_id": 508842, + "follows": "-", + "plays": "-", + "pub_index": "第6话", + "pub_time": "07:00", + "pub_ts": 1653001200, + "published": 0, + "season_id": 41534, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/3267da68f7f832ccfc7eaa77c6ab3fb806d2de98.png", + "title": "银河英雄传说:全新命题 激战" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/fecb68763f24d371167389abedf05742b0bf024f.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/f4116e5dcc44d6104cd72d9e0e833cde3959a835.png", + "episode_id": 476164, + "follows": "-", + "plays": "-", + "pub_index": "第32话", + "pub_time": "18:25", + "pub_ts": 1653042300, + "published": 0, + "season_id": 38366, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/56b8e4369871fc0c55bfa9df3f3f8002d40f0691.png", + "title": "妖怪手表" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/81c9dc929e6071a2d42f1b5a207bbcef4a1aead7.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/7c62ad9f559ee6b0fafc1c08d990636c21c4fa8d.png", + "episode_id": 510653, + "follows": "-", + "plays": "-", + "pub_index": "第7话", + "pub_time": "21:30", + "pub_ts": 1653053400, + "published": 0, + "season_id": 41432, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/930ae7ff644dc31ada9abcb3ea30fee5fbc6f397.png", + "title": "约会大作战 第四季" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/d464543dd6720efd43e5487acee74b646423b4d1.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/ca7a19d51feb54162d8f286af416aa5a804e72c4.png", + "episode_id": 511497, + "follows": "-", + "plays": "-", + "pub_index": "第7话", + "pub_time": "22:00", + "pub_ts": 1653055200, + "published": 0, + "season_id": 41418, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/ab50117450baffba62c71c80052ecbad1842a1f3.png", + "title": "恋爱要在世界征服后" + } + ], + "is_today": 0 + }, + { + "date": "5-21", + "date_ts": 1653062400, + "day_of_week": 6, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/68aee547fc85b1eab8be3d5c7e946276e4252b79.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/75583ce830522c6fd391cd6ffac31e3ab96db50e.png", + "episode_id": 510568, + "follows": "-", + "plays": "-", + "pub_index": "第8话", + "pub_time": "00:30", + "pub_ts": 1653064200, + "published": 0, + "season_id": 39725, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/a4fa3f4ecaa4efc883aa1ef2ca7ed736edb38b8c.png", + "title": "理科生坠入情网,故尝试证明。 第二季" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/f711a34e0f18293ba5068fd85d8de891bb01c2be.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/aa3e0fc7ecb422c7c8ed107267befaa18f6dcf89.png", + "episode_id": 510935, + "follows": "-", + "plays": "-", + "pub_index": "第8话", + "pub_time": "00:30", + "pub_ts": 1653064200, + "published": 0, + "season_id": 41506, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/d2dea82606b8dd0ee7934c62dbc7016b0a17255f.png", + "title": "处刑少女的生存之道" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/91ec1f4bc4af307dbfbd68c9ba6d838b27adee0f.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/6d9499e4e5453e5e353939980524102c3b707edb.png", + "episode_id": 477129, + "follows": "-", + "plays": "-", + "pub_index": "第8话", + "pub_time": "01:25", + "pub_ts": 1653067500, + "published": 0, + "season_id": 39180, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/f23cf19d1d6068e83edfd6b3d207ce692ef58ef3.png", + "title": "测不准的阿波连同学" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/bad807ac5a8d4094ead26c08ec2d9b97dbb8c4a1.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/8e563a29a9fb6b91df791a12eb5f869d038fc1e9.png", + "episode_id": 510677, + "follows": "-", + "plays": "-", + "pub_index": "第2话", + "pub_time": "02:00", + "pub_ts": 1653069600, + "published": 0, + "season_id": 41533, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/4ef341fa95646a7c2549e08ba00358b411fba0ee.png", + "title": "舞动不止" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/4ab5cf1efbd1c5883b8f0580cb0304f5452c4665.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/8ea1f90444d04a0b989584df9f18e59a824b0e90.png", + "episode_id": 341403, + "follows": "-", + "plays": "-", + "pub_index": "第71话", + "pub_time": "09:30", + "pub_ts": 1653096600, + "published": 0, + "season_id": 34425, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/ae36d43ebe7ea7176d18bab794de3d8930284feb.png", + "title": "勇者斗恶龙 达伊的大冒险" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/23f393513ab8fdfbb351aa80e8b7423e7361ad98.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/d470a1bf53c96210f2238024dc1947f52cb58f3a.png", + "episode_id": 510681, + "follows": "-", + "plays": "-", + "pub_index": "第2话", + "pub_time": "18:00", + "pub_ts": 1653127200, + "published": 0, + "season_id": 41535, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/f3f69f8747e8464ba46b9bbe24678966809c8021.png", + "title": "Love All Play热血羽毛球" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/38e2a273f528fd01c34f1fc4df0f69c64487efad.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/6c108526eade13d04882b803f1d1e0dfe2a1886e.png", + "episode_id": 459329, + "follows": "-", + "plays": "-", + "pub_index": "第1101话", + "pub_time": "19:30", + "pub_ts": 1653132600, + "published": 0, + "season_id": 33378, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/ecc9a64f3f43eb00ee2bf1549b6ab76182cf5f8b.png", + "title": "名侦探柯南" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/f641f81aa1933d73c91d5ef76b525acbcdbcf3e7.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/c7ccf71fcf65b4e5655403b01a7af3529d2891e8.png", + "episode_id": 510754, + "follows": "-", + "plays": "-", + "pub_index": "第10话", + "pub_time": "20:00", + "pub_ts": 1653134400, + "published": 0, + "season_id": 39433, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/1b4cc42a3909ad2d03563d3163b105c6cad80d20.png", + "title": "鬼灭之刃 游郭篇" + } + ], + "is_today": 0 + }, + { + "date": "5-22", + "date_ts": 1653148800, + "day_of_week": 7, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/3a9815ca239735c51fc7daf2399c3721bbe00160.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/30908825b7c8076b9d7b58d8cd949a87f48866e6.png", + "episode_id": 466767, + "follows": "-", + "plays": "-", + "pub_index": "第7话", + "pub_time": "11:00", + "pub_ts": 1653188400, + "published": 0, + "season_id": 41005, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/b3dd92da1ca35758f329fa5aa649991b118a98ca.png", + "title": "鬼灭之刃 无限列车篇 中配版" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/71d54cae830d32a5af776dcc46632146fbdba868.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/3baf5335e3f1df882b54d69c0c6c9ffa76069eef.png", + "episode_id": 480435, + "follows": "-", + "plays": "-", + "pub_index": "第241话", + "pub_time": "17:30", + "pub_ts": 1653211800, + "published": 0, + "season_id": 5978, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/3121473d5dd03a9bcccb8490034207e724e731b3.jpg", + "title": "博人传 火影忍者新时代" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/91e75030be41d67b9f19b96bb512b0c98ae781bd.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/cff6617c1c7e28f8cd9db3d33d5366a5029e3aa9.png", + "episode_id": 510648, + "follows": "-", + "plays": "-", + "pub_index": "第5话", + "pub_time": "20:00", + "pub_ts": 1653220800, + "published": 0, + "season_id": 41557, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/4329384cba4ab0390eae1a84a719e4649bf61cfb.png", + "title": "这个治疗有点烦" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/c9723d8c77d881a8debba2852d580e97826b43d0.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/c91b2b96c272eb28aa3dd74aa58fc272fc62d577.png", + "episode_id": 478919, + "follows": "-", + "plays": "-", + "pub_index": "第8话", + "pub_time": "21:00", + "pub_ts": 1653224400, + "published": 0, + "season_id": 41591, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/1ffa24e100583c3aa96812dea680943291c5c384.jpg", + "title": "恋爱游戏世界对路人角色很不友好" + } + ], + "is_today": 0 + }, + { + "date": "5-23", + "date_ts": 1653235200, + "day_of_week": 1, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/e468c854628b97b5373baaf4c43e1346a9806baa.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/26f87214a2481680a93bfda294ac080c0b336a40.png", + "episode_id": 511343, + "follows": "-", + "plays": "-", + "pub_index": "第2话", + "pub_time": "20:00", + "pub_ts": 1653307200, + "published": 0, + "season_id": 41419, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/75a291010c128ce2de17267fd2a4842d19898236.png", + "title": "魔法使黎明期" + } + ], + "is_today": 0 + }, + { + "date": "5-24", + "date_ts": 1653321600, + "day_of_week": 2, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/4e6c505b1b1631c542ea76c3da1ce08bb43faad6.jpg", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/4e6c505b1b1631c542ea76c3da1ce08bb43faad6.jpg", + "episode_id": 510133, + "follows": "-", + "plays": "-", + "pub_index": "第147话", + "pub_time": "18:00", + "pub_ts": 1653386400, + "published": 0, + "season_id": 23841, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/5c2f289eac0ec49bc5e6b9483f4191c42ffa2254.jpg", + "title": "美妙☆频道" + }, + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/9eef1df9ab157be52d2c4d70d3500442f00cafc3.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/a651c55bb430cdea19d5f4253969d1f7b83567c7.png", + "episode_id": 509044, + "follows": "-", + "plays": "-", + "pub_index": "第12话", + "pub_time": "18:00", + "pub_ts": 1653386400, + "published": 0, + "season_id": 38950, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/13fd7c96659a20c61409e155a2a913a59348d122.png", + "title": "魔法纪录 魔法少女小圆外传 第二季" + } + ], + "is_today": 0 + }, + { + "date": "5-25", + "date_ts": 1653408000, + "day_of_week": 3, + "episodes": [ + { + "cover": "http://i0.hdslb.com/bfs/bangumi/image/fba0229f1a6eec6ed692b7ae91c634d5cbde0727.png", + "delay": 0, + "delay_id": 0, + "delay_index": "", + "delay_reason": "", + "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/0ebefe529449ff98d544395d1576402bb0d0ae5b.png", + "episode_id": 510499, + "follows": "-", + "plays": "-", + "pub_index": "第8话", + "pub_time": "21:00", + "pub_ts": 1653483600, + "published": 0, + "season_id": 41413, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/247f8326019e035338529306e94baea3336c43b4.png", + "title": "盾之勇者成名录 第二季" + } + ], + "is_today": 0 + } + ] +} +``` + +</details> \ No newline at end of file diff --git a/docs/bangumi/videostream_url.md b/docs/bangumi/videostream_url.md new file mode 100644 index 0000000..e8a53da --- /dev/null +++ b/docs/bangumi/videostream_url.md @@ -0,0 +1,359 @@ +# 视频流URL + +<img src="../../assets/img/download.svg" width="100" height="100"/> + +B站的番剧视频为http流媒体,需要对应的api以视频id获取取流url,并进行取流 + +## qn视频清晰度标识 + +**注:该值在dash模式且非下载模式时无效** + +| 值 | 含义 | 备注 | +|-----|-------------|-----------------------------------------------------------------------------| +| 6 | 240P 极速 | 仅mp4方式支持 | +| 16 | 360P 流畅 | | +| 32 | 480P 清晰 | | +| 64 | 720P 高清 | web端默认值<br />B站前端需要登录才能选择,但是直接发送请求可以不登录就拿到720P的取流地址<br />**无720P时则为720P60** | +| 74 | 720P60 高帧率 | 需要认证登录账号 | +| 80 | 1080P 高清 | TV端与APP端默认值<br />需要认证登录账号 | +| 100 | 智能修复 | 仅支持dash方式<br />需要`fnval&12240=12240`<br />需要认证登录账号 | +| 112 | 1080P+ 高码率 | 大多情况需求认证大会员账号 | +| 116 | 1080P60 高帧率 | 大多情况需求认证大会员账号 | +| 120 | 4K 超清 | 需要`fnval&128=128`且`fourk=1`<br />大多情况需求认证大会员账号 | +| 125 | HDR 真彩色 | 仅支持dash方式<br />需要`fnval&64=64`<br />大多情况需求认证大会员账号 | +| 126 | 杜比视界 | 仅支持dash方式<br />需要`fnval&512=512`<br />大多情况需求认证大会员账号 | +| 127 | 8K 超高清 | 仅支持dash方式<br />需要`fnval&1024=1024`<br />大多情况需求认证大会员账号 | + +例如:请求1080P+的视频,则`qn=112` + +## fnver视频流版本标识 + +目前该值恒为0,即`fnver=0` + +## fnval视频流格式标识 + +该代码为二进制属性位,如需组合功能需要使用`OR`运算结合一下数值 + +| 值 | 含义 | 备注 | +|------|-------------|-------------------------------------------------------------| +| 0 | flv格式 | 仅H.264编码<br />部分老视频存在分段现象<br />与mp4格式及dash格式互斥 | +| 1 | mp4格式 | 仅H.264编码<br />不存在视频分段<br />与flv格式及dash格式互斥 | +| 16 | dash格式 | H.264编码或H.265编码<br />部分老视频的清晰度上限低于flv格式<br />与mp4格式及flv格式互斥 | +| 64 | 是否需求 HDR 视频 | 必须为dash格式<br />需要`qn=125`<br />大多情况需求认证大会员账号 | +| 128 | 是否需求 4K 分辨率 | 该值与`fourk`字段协同作用<br />需要`qn=120`<br />大多情况需求认证大会员账号 | +| 256 | 是否需求杜比音频 | 必须为dash格式<br />大多情况需求认证大会员账号 | +| 512 | 是否需求杜比视界 | 必须为dash格式<br />大多情况需求认证大会员账号 | +| 1024 | 是否需求 8K 分辨率 | 必须为dash格式<br />需要`qn=127`<br />大多情况需求认证大会员账号 | +| 2048 | 是否需求 av1 编码 | 必须为dash格式 | +| 12240 | 是否需求智能修复 | 必须为dash格式<br />需要认证大会员账号 | + +例如:请求dash格式且需要HDR的视频流,则`fnval=16|64=80` + +## 视频编码代码 + +| 值 | 含义 | 备注 | +|-----|--------|----------| +| 7 | AVC编码 | 8K视频无此格式 | +| 12 | HEVC编码 | | +| 13 | AV1编码 | | + +## 视频伴音音质代码 + +| 值 | 含义 | +|-------|------| +| 30216 | 64K | +| 30232 | 132K | +| 30280 | 192K | + +## 获取番剧视频流URL + +> https://api.bilibili.com/pgc/player/web/playurl + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +--- + +关于视频流会员鉴权: + +- 获取480P及以上清晰度视频时需要登录(Cookie) + +- 获取高帧率(1080P60)/高码率(1080P+)视频时需要有大会员的账号登录(Cookie) + +- 获取会员专属番剧视频时需要登录(Cookie) + +--- + +获取的url有效时间为120min,超时失效需要重新获取 + +**部分视频**会有**分段**,需要特别注意 + +若视频有分P,仅为单P的视频的url,换P则需更换cid重新获取 + +需要设置Referer为`https://www.bilibili.com`,否则无法获取1080清晰度以上的流信息。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------------|-----|----------|--------|--------------------------------------------------------------------------------------------------| +| avid | num | 稿件avid | 非必要 | | +| bvid | str | 稿件bvid | 非必要 | | +| ep_id | num | 稿件epid | 必要(可选) | ep_id与cid任选一个 | +| cid | num | 视频cid | 必要(可选) | ep_id与cid任选一个 | +| qn | num | 视频清晰度选择 | 非必要 | 未登录默认32(480P)<br />登录默认64(720P)<br />**值含义见上表**<br />注:dash方式无效 | +| fnval | num | 视频获取方式选择 | 非必要 | 默认为0<br />0 2:flv方式(可能会有分段)<br />1:低清mp4方式(仅240P与360P,且限速65K/s)<br />16 80:dash方式(音视频分流,支持H.265) | +| fnver | num | 0 | 非必要 | 固定为0 | +| fourk | num | 是否允许4K视频 | 非必要 | 默认为0<br />画质最高1080P:0<br />画质最高4K:1 | +| session | str | | 非必要 | 从视频播放页的网页源码中获取 | +| from_client | str | BROWSER | 非必要 | | +| drm_tech_type | num | 2 | 非必要 | | + + + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----------------------|------|------------------------------------| +| code | num | 返回值 | 0:成功 <br />-400:请求错误<br />-404:无视频 | +| message | str | 错误信息 | 成功为success | +| result | 有效时:obj<br />无效时:null | 数据本体 | | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------------|-------|-----------------------------------|----------------------------| +| code | num | 0 | 作用尚不明确 | +| is_preview | num | 0 | 作用尚不明确 | +| fnver | num | 请求时提供的fnver | | +| fnval | num | 请求时提供的fnval | | +| video_project | bool | true | | +| type | str | 视频流类型(DASH、FLV、MP4) | DASH | +| bp | num | 是否可以承包 | 0 | +| vip_type | num | 当前用户大会员类型 | | +| vip_status | num | 当前用户大会员状态 | | +| is_drm | bool | false | | +| no_rexcode | num | 0 | | +| has_paid | bool | false | | +| status | num | 2 | | +| from | str | local | 作用尚不明确 | +| result | str | suee | 作用尚不明确 | +| message | str | 空 | 作用尚不明确 | +| quality | num | 当前的视频分辨率代码 | **值含义见上表** | +| format | str | 视频格式 | | +| timelength | num | 视频长度 | 单位为毫秒<br />不同分辨率/格式可能有略微差异 | +| accept_format | str | 视频支持的全部格式 | 每项用`,`分隔 | +| accept_description | array | 视频支持的分辨率列表 | | +| accept_quality | array | 视频支持的分辨率代码列表 | **值含义见上表** | +| video_codecid | num | 默认选择视频流的编码id | 见**视频编码代码** | +| seek_param | str | 固定值:start | 作用尚不明确 | +| seek_type | str | offset(dash、flv)<br/> second(mp4) | 作用尚不明确 | +| durl | array | 视频分段 | **注:仅flv/mp4存在此项** | +| dash | obj | dash音视频流信息 | **注:仅dash存在此项** | +| support_formats | array | 支持格式的详细信息 | | +| clip_info_list | array | | 空,待补充 | +| record_info | obj | 备案登记信息 | | + +`result`中的`accept_description`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|------------|-----| +| 0 | str | 分辨率名称1 | | +| n | str | 分辨率名称(n+1) | | +| …… | str | …… | | + +`result`中的`accept_quality`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|------------|-----| +| 0 | str | 分辨率代码1 | | +| n | str | 分辨率代码(n+1) | | +| …… | str | …… | | + +`result`中的`support_formats`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|---------------|-----| +| 0 | obj | 播放格式详细信息1 | | +| n | obj | 播放格式详细信息(n+1) | | +| …… | obj | …… | | + +`support_formats`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------|-------|---------|-----| +| quality | num | 视频清晰度代码 | | +| format | str | 视频格式 | | +| new_description | str | 格式描述 | | +| description | str | 格式描述 | | +| display_desc | str | 格式描述 | | +| superscript | str | (?) | | +| codecs | array | 编码格式列表 | | +| need_login | bool | 需要登录 | | +| need_vip | bool | 需要大会员 | | + +`support_formats`中的`codecs`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|------|-----------------------------| +| 0 | str | 编码格式 | 如:avc1.640032,意为AVC编码 | +| 1 | str | 编码格式 | 如:hev1.1.6.L153.90,意为HEVC编码 | + +`result`中的`record_info`对象: + +| 项 | 类型 | 内容 | 备注 | +|-------------|-----|------|-----------------------| +| record_icon | str | 空串 | | +| record | str | 显示文案 | 登记号:10417060172092207 | + +--- + +**flv/mp4方式:** + +`result`中的`durl`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|-------------|------------------| +| 0 | obj | 视频分段1信息 | **注:仅flv方式具有分段** | +| n | obj | 视频分段(n+1)信息 | | +| …… | obj | …… | | + +`durl`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|------------|-------|--------|-----------------------------------| +| order | num | 视频分段序号 | 某些视频会分为多个片段(从1顺序增长) | +| length | num | 视频长度 | 单位为毫秒 | +| size | num | 视频大小 | 单位为Byte | +| vhead | str | 空 | 作用尚不明确 | +| url | str | 视频流url | **注:url内容存在转义符**<br />有效时间为120min | +| backup_url | array | 备用视频流 | | + +`durl`数组中的对象中的`backup_url`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|----------------|-----------------------------------| +| 0 | str | 备用视频流url 1 | **注:url内容存在转义符**<br />有效时间为120min | +| n | str | 备用视频流url (n+1) | | +| …… | str | …… | | + +**示例:** + +**视频无分段时:** + +获取视频`ep85046`/`av2325306`中的1P(cid=`3629601`)的视频流url,清晰度为480p,使用flv方式获取 + +avid/epid方式: + +```shell +curl -G 'https://api.bilibili.com/pgc/player/web/playurl' \ +--data-urlencode 'avid=2325306' \ +--data-urlencode 'cid=3629601' \ +--data-urlencode 'ep_id=85046' \ +-b 'SESSDATA=xxx' +``` +https://api.bilibili.com/pgc/player/web/playurl?avid=2325306&cid=3629601&ep_id=85046 + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "success", + "result": { + "accept_format": "flv480,mp4", + "code": 0, + "seek_param": "start", + "is_preview": 0, + "fnval": 0, + "video_project": true, + "fnver": 0, + "type": "FLV", + "bp": 0, + "result": "suee", + "seek_type": "offset", + "from": "local", + "video_codecid": 7, + "record_info": { + "record_icon": "", + "record": "" + }, + "durl": [ + { + "size": 111138876, + "ahead": "", + "length": 1394090, + "vhead": "", + "backup_url": [ + "https://upos-sz-mirrorcoso1.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=coso1bv&oi=2946990771&trid=a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=878be08cc0e6bdea705952529e7e6785&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&agrr=1&bw=79726&logo=40000000", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=cosbv&oi=2946990771&trid=a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=8c31064c84d8e981704815992cfe315c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&agrr=1&bw=79726&logo=40000000" + ], + "url": "https://cn-lnsy-cu-v-02.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=bcache&oi=2946990771&trid=0000a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=7a5c4f25b9056359127191390a73bedc&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=3281&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=79726&logo=80000000", + "order": 1, + "md5": "" + } + ], + "no_rexcode": 0, + "format": "flv480", + "support_formats": [ + { + "display_desc": "480P", + "superscript": "", + "codecs": [ ], + "format": "flv480", + "description": "清晰 480P", + "quality": 32, + "new_description": "480P 清晰" + }, + { + "display_desc": "360P", + "superscript": "", + "codecs": [ ], + "format": "mp4", + "description": "流畅 360P", + "quality": 16, + "new_description": "360P 流畅" + } + ], + "message": "", + "accept_quality": [ + 32, + 16 + ], + "quality": 32, + "timelength": 1394090, + "has_paid": false, + "clip_info_list": [ ], + "accept_description": [ + "清晰 480P", + "流畅 360P" + ], + "status": 2 + } +} +``` + +</details> + +## 视频的取流(web端及APP端) + +**注意:** + +1. 如flv模式则可能产生分段情况,将`$.data.durl[1-n].url`或`$.data.durl[1-n].backup_url[0]`中的内容作为url进行GET操作, 如果有多个视频, 需要手动合并处理 +2. 如mp4模式则需要获取对应的视频流(方法同上) +3. 如dash模式则需要同时获取对应的视频流和伴音流(方法同上) +4. web端取流需要验证防盗链,即`referer`为 `.bilibili.com`域名下且UA不能为空;app端也需要验证防盗链,即UA需要含有`Mozilla/5.0 BiliDroid/*.*.* (bbcallen@gmail.com)`(*为版本);如`referer`或UA错误的情况会被判定为盗链,返回403 Forbidden故无法取流 +5. **注意unicode转义符** + +以上述视频流url为例: + +```shell +wget 'https://upos-sz-mirrorhwo1.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098026&gen=playurlv2&os=hwo1bv&oi=0&trid=f0a1d2d854264369803462f3dd524154p&mid=0&platform=pc&upsig=76c1438153942fda51fbf4eb07e6e5a1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,2&agrr=1&bw=79726&logo=80000000' \ +--referer 'https://www.bilibili.com' \ +-O 'Download_video.flv' +``` + +响应正文将返回一个flv文件 diff --git a/docs/blackroom/banlist.md b/docs/blackroom/banlist.md new file mode 100644 index 0000000..9895a0c --- /dev/null +++ b/docs/blackroom/banlist.md @@ -0,0 +1,301 @@ +# 封禁公示 + +## Enum类型代码 + +### 表1:已知的封禁原因类型代码总览 + +| 代码 | 含义 | +| ---- | -------------------- | +| 1 | 刷屏 | +| 2 | 抢楼 | +| 3 | 发布色情低俗信息 | +| 4 | 发布赌博诈骗信息 | +| 5 | 发布违禁相关信息 | +| 6 | 发布垃圾广告信息 | +| 7 | 发布人身攻击言论 | +| 8 | 发布侵犯他人隐私信息 | +| 9 | 发布引战言论 | +| 10 | 发布剧透信息 | +| 11 | 恶意添加无关标签 | +| 12 | 恶意删除他人标签 | +| 13 | 发布色情信息 | +| 14 | 发布低俗信息 | +| 15 | 发布暴力血腥信息 | +| 16 | 涉及恶意投稿行为 | +| 17 | 发布非法网站信息 | +| 18 | 发布传播不实信息 | +| 19 | 发布怂恿教唆信息 | +| 20 | 恶意刷屏 | +| 21 | 账号违规 | +| 22 | 恶意抄袭 | +| 23 | 冒充自制原创 | +| 24 | 发布青少年不良内容 | +| 25 | 破坏网络安全 | +| 26 | 发布虚假误导信息 | +| 27 | 仿冒官方认证账号 | +| 28 | 发布不适宜内容 | +| 29 | 违反运营规则 | +| 30 | 恶意创建话题 | +| 31 | 发布违规抽奖 | +| 32 | 恶意冒充他人 | + +### 表2:已知的违规类型代码 + +| 代码 | 含义 | +| ---- | -------- | +| 0 | 全部类型 | +| 1 | 评论 | +| 2 | 弹幕 | +| 3 | 私信 | +| 4 | 标签 | +| 5 | 个人资料 | +| 6 | 投稿 | +| 8 | 专栏 | +| 10 | 动态 | +| 11 | 相簿 | + +## 获取封禁用户公示列表 + +> https://api.bilibili.com/x/credit/blocked/list + +*请求方式:GET* + +每页最多10项 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ------------------------------------------------------------ | +| btype | num | 来源筛选 | 非必要 | 空:全部类型<br />`0`:系统封禁<br />`1`:风纪仲裁(仲裁系统升级后此类型已不再更新) | +| otype | num | 类型筛选 | 非必要 | **见[表2](#表2已知的违规类型代码)**<br />默认为`0`:全部类型 | +| pn | num | 页码 | 非必要 | 默认为`1` | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------ | +| code | num | 返回值 | `0`:成功 | +| message | str | 错误信息 | 默认为`0` | +| ttl | num | `1` | | +| data | array | 公示列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ------ | --------------- | ---- | +| 0 | object | 封禁公示1 | | +| n | object | 封禁公示(n+1) | | +| …… | object | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | ---------------- | ------------------------------------------- | +| id | num | 封禁公示id | | +| uname | str | 对象用户名 | | +| face | str | 对象用户头像url | | +| uid | num | 对象用户mid | | +| originTitle | str | 来源标题 | | +| blockedRemark | str | | | +| originUrl | str | 来源url | | +| originContentModify | str | 裁决正文 | | +| originType | num | 来源类型 | **见[表2](#表2已知的违规类型代码)** | +| originTypeName | str | 来源名 | | +| punishTitle | str | 公示标题 | | +| punishTime | num | 处罚时间 | 时间戳 | +| punishType | num | 处理手段类型 | `2`:封禁<br />`3`:永久封禁 | +| punishTypeName | str | 处理手段名 | | +| moralNum | num | `0`节操值 | 被封禁用户节操值均为`0` | +| blockedDays | num | 封禁天数 | 永封为`0` | +| publishStatus | num | `1` | 作用尚不明确 | +| blockedType | num | 处理来源 | `0`:系统封禁<br />1:风纪仲裁 | +| blockedForever | num | 是否永封 | `0`:非永封<br />`1`:永封 | +| reasonType | num | 封禁原因类型 | **见[表1](#表1已知的封禁原因类型代码总览)** | +| reasonTypeName | str | 封禁原因类型名称 | | +| operatorName | str | 空 | 作用尚不明确 | +| caseId | num | 仲裁信息id | 系统封禁时固定为0 | +| ctime | num | 创建时间 | 时间戳 | +| commentSum | num | 该条目评论数 | | + +**示例:** + +查询所有类型,所有来源的第1页的封禁公示列表 + +```shell +curl -G 'https://api.bilibili.com/x/credit/blocked/list' \ +--data-urlencode 'btype=' \ +--data-urlencode 'otype=0' \ +--data-urlencode 'pn=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [{ + "id": 1118220, + "uname": "漫城林语", + "face": "http://i2.hdslb.com/bfs/face/970f2da4a58f83879e69e259f4a9d3587cba03f0.jpg", + "uid": 135913, + "originTitle": "【罗翔】聊聊网络喷子与键盘侠", + "blockedRemark": "内容涉及人身攻击", + "originUrl": "https://www.bilibili.com/video/av752825895", + "originContentModify": "<p>案情:</p><p>1、大量刷屏/引战</p><p>我看新闻了,竹鼠全部被ZF无害化处理了,看的爽死我了,亏死你们,啊哈哈哈(x10)</p><p>【BV16g4y187he,2020-4-21 10:46:23~10:46:47】</p><p>2、大量人身攻击</p><p>N * * L</p><p>Deine Mu**er ist tot. (x10)</p><p>【BV1rk4y1R7id,2020-4-21 20:31:08~20:32:23】</p><p>3、引战</p><p>每次看他厨房乱七八糟的,可能有数不清的小强,你们还看美食看的有味也是奇PA</p><p>【BV1Kg4y1z7mA,2020-4-22  00:52:37】<br/></p><p>批注:</p><p>满地狼藉招摇过,人皆愤懑怒拳握。</p><p>余恶不堪漏夜扫,正气于心涤龌龊。</p><p><br/></p><p>(发现违规引战、人身攻击、刷屏评论,请按照相应分类进行举报。若发现反复进行上述行为,可联系工作人员反馈相关违规账号信息,我们会予以排查。)</p><p>(案例感想请发布在小黑屋评论区讨论,请勿骚扰被封禁的用户)</p><p>【本次判罚为管理员判定,请注意案件右上无蓝色标记(风纪委员众裁)】</p><p><br/></p>", + "originType": 1, + "originTypeName": "评论", + "punishTitle": "在评论中发布人身攻击言论", + "punishTime": 1587494264, + "punishType": 3, + "punishTypeName": "永久封禁", + "moralNum": 0, + "blockedDays": 0, + "publishStatus": 1, + "blockedType": 0, + "blockedForever": 1, + "reasonType": 7, + "reasonTypeName": "发布人身攻击言论", + "operatorName": "", + "caseId": 0, + "ctime": 1587494264, + "commentSum": 606 + }, { + "id": 1091621, + "uname": "风纪委员会会长零八", + "face": "http://i1.hdslb.com/bfs/face/6ea4296f7591b9a724f540a41d48df728a0881b0.jpg", + "uid": 305542374, + "originTitle": "巅峰赛大乔游走辅助,队友说自家法师湖南卫视都不敢像法师这么演哈哈!", + "blockedRemark": "内容涉及传播不实信息", + "originUrl": "https://www.bilibili.com/video/av882552073", + "originContentModify": "<p>具体违规情况说明:</p><ol class=\" list-paddingleft-2\" style=\"list-style-type: decimal;\"><li><p>经查实确认,该账号<span style=\"text-decoration: underline;\">从未申请</span>亦<span style=\"text-decoration: underline;\">从未担任</span>过风纪委员职务。</p></li><li><p>发布多条 “您的稿件/评论涉及违规,即将下架/删除”的恐吓性言论。</p></li><li><p>谎称曾经封禁了某个up主,事实上风纪委员<span style=\"text-decoration: underline;\">无法封禁up主投稿</span>,且该up也从未被封禁。</p></li><li><p>威胁他人“要不要到小黑屋坐坐”,事实上风纪委员无法直接封禁用户。通过管理员封禁或风纪委员投票封禁的账号亦有据实申诉的机会。</p></li><li><p>故意挑衅他人“那你可以试着骂我,我们试试(举报)有没有用”。</p></li><li><p>误导他人“此评论区和弹幕无需保持礼仪”。</p></li></ol><p>批注:</p><p>如您发现:假冒风纪委员身份招摇撞骗、炫耀风纪委员身份、借风纪委员职务之便威胁恐吓他人、在风纪观点中发布违规内容等违规行为,请及时联系我们进行举报。您可直接将举报材料发送至judgement@bilibili.com。</p><p>(案例感想请发布在小黑屋评论区讨论,请勿骚扰被封禁的用户)</p><p>【本次判罚为管理员判定,请注意案件右上无蓝色标记(风纪委员众裁)】</p>", + "originType": 1, + "originTypeName": "评论", + "punishTitle": "在评论中发布传播不实信息", + "punishTime": 1585560309, + "punishType": 2, + "punishTypeName": "封禁", + "moralNum": 0, + "blockedDays": 15, + "publishStatus": 1, + "blockedType": 0, + "blockedForever": 0, + "reasonType": 18, + "reasonTypeName": "发布传播不实信息", + "operatorName": "", + "caseId": 0, + "ctime": 1585560309, + "commentSum": 2379 + }, + ………… + ] +} +``` + +</details> + +## 封禁处理公示详情 + +> https://api.bilibili.com/x/credit/blocked/info + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | ---- | +| id | num | 封禁公示id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此信息 | +| message | str | 错误信息 | 默认为`0` | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | ---------------- | ------------------------------------------- | +| id | num | 封禁公示id | | +| uname | str | 对象用户名 | | +| face | str | 对象用户头像url | | +| uid | num | 对象用户mid | | +| originTitle | str | 来源标题 | | +| blockedRemark | str | | | +| originUrl | str | 来源url | | +| originContentModify | str | 裁决正文 | | +| originType | num | 来源类型 | **见[表2](#表2已知的违规类型代码)** | +| originTypeName | str | 来源名 | | +| punishTitle | str | 公示标题 | | +| punishTime | num | 处罚时间 | 时间戳 | +| punishType | num | 处理手段类型 | `2`:封禁<br />`3`:永久封禁 | +| punishTypeName | str | 处理手段名 | | +| moralNum | num | `0`节操值 | 被封禁用户节操值均为`0` | +| blockedDays | num | 封禁天数 | 永封为`0` | +| publishStatus | num | `1` | 作用尚不明确 | +| blockedType | num | 处理来源 | `0`:系统封禁<br />`1`:风纪仲裁 | +| blockedForever | num | 是否永封 | `0`:非永封<br />`1`:永封 | +| reasonType | num | 封禁原因类型 | **见[表1](#表1已知的封禁原因类型代码总览)** | +| reasonTypeName | str | 封禁原因类型名称 | | +| operatorName | str | 空 | 作用尚不明确 | +| caseId | num | 仲裁信息id | 系统封禁时固定为0 | +| ctime | num | 创建时间 | 时间戳 | +| commentSum | num | 该条目评论数 | | + +**示例:** + +查询公示id为`1091621`的公示详情 + +```shell +curl -G 'https://api.bilibili.com/x/credit/blocked/info' \ +--data-urlencode 'id=1091621' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1091621, + "uname": "风纪委员会会长零八", + "face": "http://i1.hdslb.com/bfs/face/6ea4296f7591b9a724f540a41d48df728a0881b0.jpg", + "uid": 305542374, + "originTitle": "巅峰赛大乔游走辅助,队友说自家法师湖南卫视都不敢像法师这么演哈哈!", + "blockedRemark": "内容涉及传播不实信息", + "originUrl": "https://www.bilibili.com/video/BV1qK4y1C7dd", + "originContentModify": "<p>具体违规情况说明:</p><ol class=\" list-paddingleft-2\" style=\"list-style-type: decimal;\"><li><p>经查实确认,该账号<span style=\"text-decoration: underline;\">从未申请</span>亦<span style=\"text-decoration: underline;\">从未担任</span>过风纪委员职务。</p></li><li><p>发布多条 “您的稿件/评论涉及违规,即将下架/删除”的恐吓性言论。</p></li><li><p>谎称曾经封禁了某个up主,事实上风纪委员<span style=\"text-decoration: underline;\">无法封禁up主投稿</span>,且该up也从未被封禁。</p></li><li><p>威胁他人“要不要到小黑屋坐坐”,事实上风纪委员无法直接封禁用户。通过管理员封禁或风纪委员投票封禁的账号亦有据实申诉的机会。</p></li><li><p>故意挑衅他人“那你可以试着骂我,我们试试(举报)有没有用”。</p></li><li><p>误导他人“此评论区和弹幕无需保持礼仪”。</p></li></ol><p>批注:</p><p>如您发现:假冒风纪委员身份招摇撞骗、炫耀风纪委员身份、借风纪委员职务之便威胁恐吓他人、在风纪观点中发布违规内容等违规行为,请及时联系我们进行举报。您可直接将举报材料发送至judgement@bilibili.com。</p><p>(案例感想请发布在小黑屋评论区讨论,请勿骚扰被封禁的用户)</p><p>【本次判罚为管理员判定,请注意案件右上无蓝色标记(风纪委员众裁)】</p>", + "originType": 1, + "originTypeName": "评论", + "punishTitle": "在评论中发布传播不实信息", + "punishTime": 1585560309, + "punishType": 2, + "punishTypeName": "封禁", + "moralNum": 0, + "blockedDays": 15, + "publishStatus": 1, + "blockedType": 0, + "blockedForever": 0, + "reasonType": 18, + "reasonTypeName": "发布传播不实信息", + "operatorName": "", + "caseId": 0, + "ctime": 1585560309, + "commentSum": 2379 + } +} +``` + +</details> diff --git a/docs/blackroom/jury/action.md b/docs/blackroom/jury/action.md new file mode 100644 index 0000000..700fed3 --- /dev/null +++ b/docs/blackroom/jury/action.md @@ -0,0 +1,361 @@ +# 仲裁操作 + +## 申请加入风纪委员会 + +> https://api.bilibili.com/x/credit/v2/jury/apply + +*请求方式:POST* + +认证方式:Cookie + +只有用户会员90天内无违规、实名认证且非封禁状态才可以申请加入风纪委员会 + + +申请成功后可获得30天资格 + +**正文参数( application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | +| ------ | ---- | ---------------------- | ------ | +| csrf | str | cookie中`bili_jct`的值 | 必要 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />25001:申请等级限制(会员等级<3)<br />25002:没有实名认证<br />25003:90天内有封禁记录<br />25013:不能重复申请风纪委资格<br />25016:当日风纪委员名额已发完 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | + + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +#### 旧API +<details> +<summary>查看旧版API:</summary> + +> https://api.bilibili.com/x/credit/jury/apply + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +只有用户会员等级≥Lv4、90天内无违规、实名认证且非封禁状态才可以申请加入风纪委员会 + +每日10:00开放新名额 + +申请成功后可获得30天资格 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />25001:申请等级限制(会员等级<3)<br />25002:没有实名认证<br />25003:90天内有封禁记录<br />25013:不能重复申请风纪委资格<br />25016:当日风纪委员名额已发完 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/x/credit/jury/apply' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl 'https://api.bilibili.com/x/credit/jury/apply' \ +--data-urlencode 'access_key=xxx' +``` +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> +</details> + +## 拉取新案件 + +> https://api.bilibili.com/x/credit/v2/jury/case/next + +*请求方式:GET* + +认证方式:Cookie + +**标头参数(Headers):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ------ | ---- | +| Cookie | str | Cookie | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br/>25006:风纪委员资格已过期<br />25008:没有案件<br/>25014:已审满 | +| message | str | 信息 | 默认为0,当code不为0时,显示错误信息 | +| ttl | num | 1 | 作用尚不明确 | +| data | object | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------- | ---- | +| case_id | str | 仲裁案件id | | + +**示例:** + +Cookie方式: + +```shell +curl -G 'https://api.bilibili.com/x/credit/v2/jury/case/next' \ +--header 'cookie: XXXXX' +``` + + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "case_id": "AC2m4HlrIrHv" + } +} +``` + +</details> + +#### 旧API +<details> +<summary>查看旧版API:</summary> + +> https://api.bilibili.com/x/credit/jury/caseObtain + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br/>25005:不是风纪委员<br />25008:没有案件<br/>25014:已审满 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | object | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ---- | +| id | num | 仲裁案件id | | + +**示例:** + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/x/credit/jury/caseObtain' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl 'https://api.bilibili.com/x/credit/jury/caseObtain' \ +--data-urlencode 'access_key=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1239790 + } +} +``` + +</details> +</details> + + +## 进行仲裁投票 + +> https://api.bilibili.com/x/credit/v2/jury/vote + +*请求方式:POST* + +认证方式:Cookie + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ---------------------- | ------ | ----------------------------------------------------- | +| case_id | str | 案件id | 必要 | | +| vote | num | 投票类型 | 必要 | 见「[众裁信息](judgement_info.md)」中表 | +| insiders | num | 是否观看此类视频 | 非必要 | 默认值为0<br/>见「[众裁信息](judgement_info.md)」中表 | +| content | str | 理由 | 非必要 | | +| anonymous | num | 是否匿名 | 非必要 | 默认值为0<br/>0:不匿名<br />1:匿名 | +| csrf | str | cookie中`bili_jct`的值 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br/>-101:未登录<br />-111:csrf 错误<br />-400:请求错误(投票类型错误)<br />25005:不是风纪委员<br />25011:投票类型错误<br />25018:不能进行此操作<br/><br/>*注:新版本对于一个不存在的`case_id`,不会报错。* | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | + + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +#### 旧API +<details> +<summary>查看旧版API:</summary> +> https://api.bilibili.com/x/credit/jury/vote + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ------------------------ | -------------- | --------------------------------------- | +| cid | num | 案件id | 必要 | | +| vote | num | 投票类型 | 必要 | 见「[众裁信息](judgement_info.md)」中表 | +| content | str | 理由 | 非必要 | 见「[众裁信息](judgement_info.md)」中表 | +| likes | nums | 支持的观点 | 非必要 | | +| hates | nums | 反对的观点 | 非必要 | | +| attr | num | 是否匿名 | 非必要 | 0:匿名<br />1:不匿名 | +| apply_type | num | 是否更改原因 | 非必要 | 0:保持原来原因<br />1:投票给新原因 | +| origin_reason | num | 原始原因 | 非必要 | 见「封禁公示」中表 | +| apply_reason | num | 新原因 | 非必要 | 见「封禁公示」中表 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br/>-101:未登录<br />-111:csrf 错误<br />-400:请求错误(投票类型错误)<br />25005:不是风纪委员<br />25009: 案件不存在<br/>25011:投票类型错误<br />25012:重复投票 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | + +**示例:** + +为案件`2333`投票,建议封禁,无理由,不匿名,无支持/反对观点,不修改投票原因 + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/x/credit/jury/vote' \ +--data-urlencode 'cid=2333' \ +--data-urlencode 'vote=1' \ +--data-urlencode 'content=' \ +--data-urlencode 'likes=' \ +--data-urlencode 'hates=' \ +--data-urlencode 'attr=1' \ +--data-urlencode 'apply_type=0' \ +--data-urlencode 'origin_reason=' \ +--data-urlencode 'apply_reason=' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl 'https://api.bilibili.com/x/credit/jury/vote' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'cid=2333' \ +--data-urlencode 'vote=1' \ +--data-urlencode 'content=' \ +--data-urlencode 'likes=' \ +--data-urlencode 'hates=' \ +--data-urlencode 'attr=1' \ +--data-urlencode 'apply_type=0' \ +--data-urlencode 'origin_reason=' \ +--data-urlencode 'apply_reason=' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> +</details> \ No newline at end of file diff --git a/docs/blackroom/jury/base_info.md b/docs/blackroom/jury/base_info.md new file mode 100644 index 0000000..c86c9fc --- /dev/null +++ b/docs/blackroom/jury/base_info.md @@ -0,0 +1,331 @@ +# 风纪委员会用户基本信息 + +## 基本数据 + +> https://api.bilibili.com/x/credit/v2/jury/jury + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 信息 | 默认为 0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | -------------------------------------------------------------------------------------------------- | +| allow_apply | bool | true | 尚不明确(用户从未担任风纪委员时也为 true) | +| apply_status | num | 任期审核状态 | -1 资格失效,且未申请<br />0 刚申请连任时<br />5 申请后,等待审核<br />3 申请连任成功,status 为 1 | +| case_total | num | 总众裁数 | | +| err_msg | str | 空 | 尚不明确 | +| face | str | 用户头像 url | | +| status | num | 当前资格状态 | 0 未曾拥有资格<br />1 任期内<br />2 资格失效 | +| term_end | num | 任期结束时间 | 时间戳(秒级),无任期时为 0 | +| uname | str | 用户昵称 | | + +## 基本数据(旧API) + +部分字段信息停留在 2021 年 10 月。 + +<details> +<summary>查看折叠内容:</summary> + +> https://api.bilibili.com/x/credit/jury/jury + +根数据与新 API 一致,`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------------------- | ---------------------------- | +| caseTotal | num | 总众裁数 | | +| face | str | 用户头像 url | | +| restDays | num | 当前资格剩余天数 | 自 2021 年 10 月起,固定为 0 | +| rightRadio | num | 当前裁决正确率百分比 | 裁决数小于 3 时固定为 50 | +| status | num | 当前状态 | 1:具有资格<br />2:资格失效 | +| uname | str | 用户昵称 | | + +</details> + +## 统计信息 + +新API(2021年10月任期之后) + +>https://api.bilibili.com/x/credit/v2/jury/kpi + +*方式:GET* + +认证方式:Cookie + +**备注**:该api只收录2021年10月开始,风纪委员改版之后的数据,且每次只返回一次任期的数据。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------- | ------------ | -------------------------------------- | +| term_id | num | 任期 id | 可不传此参数或将值留空或设为`0` | 未传参或留空时,**只**返回最近一次已结束的任期的数据 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />25018:不能进行此操作(还没有成为新风纪委员,或传入了不属于你的`term_id`) | +| message | str | 信息 | 默认为 0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 项 | 类型 | 内容 | 备注 | +| --------------- | ------ | ------------------ | ------------------------------------------------------------ | +| mid | num | 用户 UID | | +| uname | str | 留空 | | +| face | str | 留空 | | +| term_id | num | 任期 ID | 未传入`term_id`时,返回的是最近一次已结束的任期的id | +| term_start | num | 任期开始时间 | 时间戳,精确到秒 | +| term_end | num | 任期结束时间 | 时间戳,精确到秒 | +| case_total | num | 任内总投票数 | | +| active_days | num | 活跃天数 | | +| like_num | num | 发表观点,被点赞数 | | +| accuracy_rate | num | 投中率 | 所选观点与大多数风纪委员一致,记为一次“投中” | +| pass | num | 任期是否合格 | 0 不合格<br />1 合格 | +| status | num | 当前资格状态 | 0 未曾拥有资格<br />1 任期内<br />2 资格失效 | +| apply_status | num | 当前资格申请状态 | -1 资格失效,且未申请<br />0 刚申请连任时<br />5 申请后,等待审核<br />3 申请连任成功,status 为 1 | +| prev_term_id | num | 上一任期的任期 ID | 新版风纪委员启用后的第一个任期,此项的值为 0 | +| next_term_id | num | 下一任期的任期 ID | 若当前任期尚未结束,此项的值为 0 | +| rewards | object | 任期奖励 | 有`pendant`和`coin`两个子项 | +| rewards.pendant | num | 头像挂件礼包 ID | 合格后一般为 1,不合格为 0 | +| rewards.coin | num | 硬币礼包 ID | 合格后一般为 3,不合格为 0 | + +<details> +<summary>查看响应示例:</summary> + +注:本示例未传入`term_id`,返回的是最近一次已结束任期的统计结果 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 10001, + "uname": "", + "face": "", + "term_id": 300009, + "term_start": 1669100000, + "term_end": 1671690000, + "case_total": 591, + "active_days": 30, + "like_num": 0, + "accuracy_rate": 74, + "pass": 1, + "status": 1, + "apply_status": 3, + "prev_term_id": 300007, + "next_term_id": 0, + "rewards": { + "pendant": 1, + "coin": 3 + } + } +} +``` +</details> + +## 统计信息(旧API) + +<details> +<summary>查看折叠内容:</summary> + +> https://api.bilibili.com/x/credit/jury/kpi + +*方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**备注**:该api只统计到2021年9月任期,风纪委员改版之前。风纪委员改版之后的数据未收录 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 数据本体 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ---- | +| 0 | obj | 第1个月统计 | | +| n | obj | 第(n+1)个月统计 | | +| …… | obj | …… | …… | + +`data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------------------------------- | --------------------- | +| id | num | 0 | | +| mid | num | 用户id | | +| number | num | 风纪委员编号 | | +| day | num | 数据生成时间(也是任期结束时间) | 时间戳,精确到秒 | +| rate | num | 任期完成度 | 1=A;2=S;3=S+;4=S++ | +| rank | num | 尚不明确 | | +| rankper | num | 尚不明确 | | +| rankTotal | num | 尚不明确 | | +| point | num | 32767 | | +| activeDays | num | 活跃天数 | | +| voteTotal | num | 投票总数 | | +| voteRadio | num | 投中率 | | +| blockedTotal | num | 尚不明确 | | +| termStart | num | 任期开始时间 | 时间戳,精确到秒 | +| termEnd | num | 任期结束时间(数据生成时间一致) | 时间戳,精确到秒 | +| opinion_likes | num | 观点获赞 | | + +**示例:** + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/x/credit/jury/kpi' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl -G 'https://api.bilibili.com/x/credit/jury/kpi' \ +--data-urlencode 'access_key=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "id": 0, + "mid": 114343368, + "number": 199046, + "day": 1539792000, + "rate": 1, + "rank": 0, + "rankper": 1, + "rankTotal": 39584, + "point": 32767, + "activeDays": 23, + "voteTotal": 422, + "voteRadio": 0, + "blockedTotal": 0, + "termStart": 1537200000, + "termEnd": 1539792000, + "opinion_likes": 18 + } + ] +} +``` + +</details> +</details> + +## 检查申请风纪委员会资格 + +> ~~https://api.bilibili.com/x/credit/jury/requirement~~ (旧版) + +> https://api.bilibili.com/x/credit/v2/jury/requirement (新版) + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +新版 api 与旧版的区别仅在新版没有 `level` 字段(新版风纪委员没有等级限制)。 + +只有用户~~会员等级≥Lv4、~~ 90 天内无违规、实名认证且非封禁状态才可以申请加入风纪委员会。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------------- | ------------------------------------- | +| blocked | bool | 是否被封禁 | true:是<br />false:否<br />**下同** | +| cert | bool | 是否实名认证 | | +| level | bool | 等级是否>=4 | 新版无该字段 | +| rule | bool | 是否90天内无违规 | | + +**示例:** + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/x/credit/v2/jury/requirement' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl -G 'https://api.bilibili.com/x/credit/v2/jury/requirement' \ +--data-urlencode 'access_key=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "blocked": false, + "cert": true, + "rule": true + } +} +``` + +</details> diff --git a/docs/blackroom/jury/judgement_info.md b/docs/blackroom/jury/judgement_info.md new file mode 100644 index 0000000..9b2d9d3 --- /dev/null +++ b/docs/blackroom/jury/judgement_info.md @@ -0,0 +1,978 @@ +# 众裁信息 + +## Enum类型代码 + +### 投票类型码总览 + +| 代码 | 含义 | +| ---- | --- | +| 0 | 未投票 | +| 1 | 封禁 | +| 2 | 否 | +| 3 | 弃权 | +| 4 | 删除 | + +### 投票选项码总览 + +<table> + <tr> + <th>任务类型</th> + <th>代码</th> + <th>含义</th> + </tr> + <tr> + <td rowspan="4">单条评论(弹幕)</td> + <td>1</td> + <td>合适</td> + </tr> + <tr> + <td>2</td> + <td>一般</td> + </tr> + <tr> + <td>3</td> + <td>不合适</td> + </tr> + <tr> + <td>4</td> + <td>无法判断</td> + </tr> + <tr> + <td rowspan="4">评论(弹幕)氛围</td> + <td>11</td> + <td>好</td> + </tr> + <tr> + <td>12</td> + <td>一般</td> + </tr> + <tr> + <td>13</td> + <td>差</td> + </tr> + <tr> + <td>14</td> + <td>无法判断</td> + </tr> +</table> + + + +## 获取单个案件信息 + +> https://api.bilibili.com/x/credit/v2/jury/case/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +可查询任意案件,无论自己是否参与投票。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------------ | ------ | ------------- | ------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| case_id | str | 案件id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 信息 | 默认为 0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ------ | -------------------------------- | -------------------------------------------------------------- | +| case_id | str | 案件id | | +| case_type | num | 任务类型 | 1:单条评论<br />2:评论氛围<br />3:单条弹幕<br />4:弹幕氛围 | +| jury_state | num | `1` | 改版后未见过其它值 | +| participate | num | 是否投票 | 0:未投票<br />1:已投票 | +| vote_items | object | 投票选项 | 见开头「投票选项码总览」 | +| default_vote | num | 默认投票选项 | `4` 或 `14` 即 `无法判断` | +| status | num | 裁决状态(新版) | 0:进行中<br />1:已结束 | +| origin_start | num | 案件关联视频,播放进度条起始坐标 | 单位:`秒` | +| avid | num | 视频av号 | | +| cid | num | 弹幕 dmid | | +| vote_cd | num | `-1` | 暂不明确 | +| result | num | 众议结论 | 见开头「投票选项码总览」 | +| result_text | str | 众议结论文本 | 见开头「投票选项码总览」 | +| title | str | 视频标题 | | +| case_info | object | 案件信息 | | +| my_point | object | 我的观点 | 仅自己投过票才有该字段 | +| vote_info | object | 投票信息 | | + +`data` 对象下的`case_info`对象 + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ------ | ------------ | ----------------------------------------------- | +| comment | object | 单条评论信息 | 仅当`case_type`为`1`有值。见「对象:评论信息」 | +| danmu_img | str | 弹幕截图 | 仅当`case_type`为`4`有值,截图URL | +| comments | object | 若干条评论 | 仅当`case_type`为`2`有值。见「对象:评论信息」 | +| single_danmu | str | 单条弹幕信息 | 仅当`case_type`为`3`有值。见「对象:评论信息)」 | + + +对象:评论信息 + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ------ | ------------------------ | -------------------------------------------------------------- | +| mid | num | 用户uid | | +| uname | str | 用户名 | | +| face | str | 用户头像 | 头像URL | +| content | str | 评论内容 | | +| child_comments | object | 子评论(对该评论的回复) | 见「对象:评论信息」,单条评论和子评论下无`child_comments`字段 | + + +对象:弹幕信息 + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ------- | +| id_str | str | 弹幕dmid | | +| content | str | 弹幕内容 | | +| progress | num | | 尚不明确 | + +`data` 对象下的`my_point`对象 + +记录了自己的投票(观点)信息,仅当自己投过票才有该字段。 + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | ------------------------------------------------------------ | +| opid | num | 观点编号 | 每当某个一个风纪委员给某个仲裁案件发表观点,就+1 | +| mid | num | 风纪委员用户ID | | +| uname | str | 风纪委员用户名 | 风纪委勾选匿名投票则显示“匿名用户” | +| face | str | 头像URL | 头像 | +| vote | num | 投票选项 | “合适题”分别为 `1` 或者 `2` 或者 `3` 或者 `4`,<br/>对应:“合适”、“一般”、“不合适”、“无法判断”<br/><br/>“氛围题”分别为 `11` 或者 `12` 或者 `13` 或者 `14`,<br/>对应:“好”、“一般”、“差”、“无法判断”<br/><br/>注释<br/>合适题:“单条弹幕(评论)是否合适?”<br/>氛围题:“弹幕(评论区)氛围如何” | +| vote_text | | 内容为空 | *现在系统已不再展示其他风纪委所投的票* | +| content | str | 观点内容 | 该风纪委员所发表的观点内容 | +| anonymous | num | 0 | 尚不明确 | +| like | num | 被点赞数量 | | +| hate | num | 被点踩数量 | | +| like_status | num | 点赞(踩)状态 | 本账号是否给该条评论点赞:<br/>0:没做操作;1:给评论点赞;2:给评论点踩 | +| vote_time | num | 投票时间 | 时间戳,精确到秒 | +| insiders | num | 是否观看此类视频 | 1:平时观看此类视频;0:平时不观看此类视频 | + +`data` 对象下的`vote_info`对象 + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | -------- | -------------------------------------------- | +| all_count | num | 总投票数 | | +| counts | array | 观点分布 | 格式:`[合适, 一般, 不合适, 无法判断]` | +| insiders_counts | array | 行为分布 | 格式:`[平时会看此类视频, 平时不看此类视频]` | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/credit/v2/jury/case/info' \ + --data-urlencode 'case_id=AC2SiaD8jlrL' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "case_id": "AC2SiaD8jlrL", + "case_type": 3, + "jury_state": 1, + "participate": 1, + "vote_items": [ + { + "vote": 1, + "vote_text": "合适" + }, + { + "vote": 2, + "vote_text": "一般" + }, + { + "vote": 3, + "vote_text": "不合适" + }, + { + "vote": 4, + "vote_text": "无法判断" + } + ], + "default_vote": 4, + "status": 1, + "origin_start": 0, + "avid": 727792866, + "cid": 756815216, + "vote_cd": -1, + "result": 3, + "result_text": "不合适", + "title": "“国家队”守门员和朋友打赌,谁能在湿滑的地面踢进足球就送美刀", + "case_info": { + "comment": null, + "danmu_img": "", + "comments": null, + "single_danmu": { + "id_str": "1086612690354524160", + "content": "这守门员干啥呢?给块骨头我家狗都比他防的好", + "progress": 27859 + } + }, + "my_point": { + "opid": 10001, + "mid": 10001, + "uname": "风纪委员用户名", + "face": "http://i0.hdslb.com/bfs/face/e48952d599dbf011c2235239fafa2bf0deccef5a.jpg", + "vote": 3, + "vote_text": "不合适", + "content": "", + "anonymous": 0, + "like": 0, + "hate": 0, + "like_status": 0, + "vote_time": 1663655000, + "insiders": 1 + }, + "vote_info": { + "all_count": 306, + "counts": [90, 33, 177, 6], + "insiders_counts": [245, 61] + } + } +} +``` +</details> + +**旧 api:** + +<details> +<summary>查看旧 api:</summary> + +> https://api.bilibili.com/x/credit/jury/juryCase + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +只能查询自己参与众裁的 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------------ | ------ | ------------- | ------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| cid | num | 案件id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误<br />25010:没有权限查看案件 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | -------- | ------------ | +| id | num | 案件id | | +| mid | num | 被举报用户mid | | +| status | num | 裁决状态 | 1:投票中<br />2:停止发放<br />3:复核中(结案中)<br />4:已裁决<br />5:待重启<br />6:未裁决<br />7:冻结中<br />8:队列中 | +| statusTitle | str | 封禁时间文字 | `judgeType`=1时有效 | +| originType | num | 来源类型 | 见「封禁公示」中表 | +| reasonType | num | 原因类型 | 见「封禁公示」中表 | +| originContent | str | 被举报的原文 | | +| punishResult | num | 处理结果 | 0:无<br />1:封禁3天<br />2:封禁7天<br />3:永封<br />4:其他封禁天数<br />5:封禁15天<br />6:仅删除不封禁 | +| punishTitle | str | 处罚原因 | | +| judgeType | num | 裁决类型 | `status`=4时有效<br />0:未裁决<br/>1:违规<br/>2:不违规 | +| originUrl | str | 来源url | | +| blockedDays | num | 封禁时间 | `judgeType`=1时有效 | +| putTotal | num | ??? | 作用尚不明确 | +| voteRule | num | 投票不违规人数 | | +| voteBreak | num | 投票建议封禁人数 | | +| voteDelete | num | 投票建议删除人数 | | +| startTime | num | 裁决起始时间 | 时间戳 | +| endTime | num | 裁决截止时间 | 时间戳<br />未结案固定为24小时 | +| ctime | num | 举报创建时间 | 时间戳 | +| mtime | num | 开始拉取时间 | 时间戳 | +| originTitle | str | 来源标题 | | +| relationId | str | 违规关系标识字 | {评论rpid}-{违规类型id}-{来源对象id} | +| face | str | 被举报用户头像url | | +| uname | str | 被举报用户昵称 | | +| vote | num | 我的投票 | **见上表** | +| case_type | num | 众裁类型 | 0:小众众裁<br />1:大众众裁 | + +**示例:** + +查询案件`1239790`的信息 + +Cookie方式: + +```shell +curl -G 'https://api.bilibili.com/x/credit/jury/juryCase' \ +--data-urlencode 'cid=1239790' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl -G 'https://api.bilibili.com/x/credit/jury/juryCase' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'cid=1239790' \ +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1239790, + "mid": 351783425, + "status": 4, + "statusTitle": "封禁7天", + "originType": 1, + "reasonType": 9, + "originContent": "up主,在和平精英里的喷子是霰(xian)弹枪,不是散(san)弹枪。", + "punishResult": 0, + "punishTitle": "在评论中发布引战言论", + "judgeType": 2, + "originUrl": "https://www.bilibili.com/video/BV15x411X7eV/#reply1728344012", + "blockedDays": 7, + "putTotal": 272, + "voteRule": 409, + "voteBreak": 17, + "voteDelete": 89, + "startTime": 1594467941, + "endTime": 1594471525, + "ctime": 1594464499, + "mtime": 1594471678, + "originTitle": "和平精英揭秘真相68:氪金试水最新抽奖活动,到底是亏了还是赚了?", + "relationId": "1728344012-1-57465308", + "face": "http://i2.hdslb.com/bfs/face/e1018566c615059b664dc6eae3a5235c31cd92fe.jpg", + "uname": "零酱a", + "vote": 4, + "case_type": 0 + } +} +``` + +</details> +</details> + +## 查询案件众裁信息 + +注:这是一个旧版的API,暂未找到对应的新版API。 +<details> +<summary>展开:</summary> +> https://api.bilibili.com/x/credit/jury/caseInfo + +*请求方式:GET* + +注:该接口无需登录 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ------ | ---- | +| cid | num | 案件id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | -------------------------------- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:object<br />无效时:null | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ----------------- | ------------------------------------------------------------ | +| id | num | 案件id | | +| mid | num | 被举报用户mid | | +| status | num | 裁决状态 | 1:投票中<br />2:停止发放<br />3:复核中(结案中)<br />4:已裁决<br />5:待重启<br />6:未裁决<br />7:冻结中<br />8:队列中 | +| originType | num | 来源类型 | 见「封禁公示」中表 | +| reasonType | num | 原因类型 | 见「封禁公示」中表 | +| originContent | str | 被举报的原文 | | +| punishResult | num | 处理结果 | 0:无<br />1:封禁3天<br />2:封禁7天<br />3:永封<br />4:其他封禁天数<br />5:封禁15天<br />6:仅删除不封禁 | +| judgeType | num | 裁决类型 | `status`=4时有效<br />0:未裁决<br/>1:违规<br/>2:不违规 | +| originUrl | str | 来源url | | +| blockedDays | num | 封禁时间 | `judgeType`=1时有效 | +| putTotal | num | ??? | 作用尚不明确 | +| voteRule | num | 投票不违规人数 | | +| voteBreak | num | 投票建议封禁人数 | | +| voteDelete | num | 投票建议删除人数 | | +| startTime | num | 裁决起始时间 | 时间戳 | +| endTime | num | 裁决截止时间 | 时间戳<br />未结案固定为24小时 | +| ctime | num | 举报创建时间 | 时间戳 | +| mtime | num | 开始拉取时间 | 时间戳 | +| originTitle | str | 来源标题 | | +| relationId | str | 违规关系标识字 | {评论rpid}-{违规类型id}-{来源对象id} | +| face | str | 被举报用户头像url | | +| uname | str | 被举报用户昵称 | | +| vote | num | 0 | 固定为0 | +| case_type | num | 众裁类型 | 0:小众众裁<br />1:大众众裁 | + +**示例:** + +查询案件`1239790`的信息 + +```shell +curl -G 'https://api.bilibili.com/x/credit/jury/juryCase' \ +--data-urlencode 'cid=1239790' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1239790, + "mid": 351783425, + "status": 4, + "originType": 1, + "reasonType": 9, + "originContent": "up主,在和平精英里的喷子是霰(xian)弹枪,不是散(san)弹枪。", + "punishResult": 0, + "judgeType": 2, + "originUrl": "https://www.bilibili.com/video/BV15x411X7eV/#reply1728344012", + "blockedDays": 7, + "putTotal": 272, + "voteRule": 409, + "voteBreak": 17, + "voteDelete": 89, + "startTime": 1594467941, + "endTime": 1594471525, + "ctime": 1594464499, + "mtime": 1594471678, + "originTitle": "和平精英揭秘真相68:氪金试水最新抽奖活动,到底是亏了还是赚了?", + "relationId": "1728344012-1-57465308", + "face": "http://i2.hdslb.com/bfs/face/e1018566c615059b664dc6eae3a5235c31cd92fe.jpg", + "uname": "零酱a", + "vote": 0, + "case_type": 0 + } +} +``` +</details> +</details> + +## 查询我的众裁记录 + +> https://api.bilibili.com/x/credit/v2/jury/case/list + +*请求方式:GET* + +认证方式:Cookie + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | -------------------- | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页显示数量 | 非必要 | 默认为30<br />最大30 | + +**Headers参数** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| cookie | str | | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ------ | ------------ | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | +| data.total | num | 仲裁案例数 | | +| data.list | array | 仲裁记录列表 | | + +`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ------ | --------------- | ------------ | +| 0 | object | 仲裁记录1 | | +| n | object | 仲裁记录(n+1) | 按照时间顺序 | +| …… | object | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ------------------------------------------------------------ | +| case_id | str | 案件id | | +| case_type | num | 案件类型 | 1:单条评论<br/>2:评论氛围<br/>3:单条弹幕<br/>4:弹幕氛围 | +| status | num | 裁决状态 | 0:投票中<br />1:已结束 | +| vote | num | 投票选项 | “单条评论(弹幕)”分别为 `1` 或者 `2` 或者 `3` 或者 `4`,<br/>对应:“合适”、“一般”、“不合适”、“无法判断”<br/><br/>“评论(弹幕)氛围”分别为 `11` 或者 `12` 或者 `13` 或者 `14`,<br/>对应:“好”、“一般”、“差”、“无法判断” | +| vote_text | str | 投票选项文本 | *参考上条* | +| vote_time | num | 投票时间 | 时间戳,精确到秒 | + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "total": 5428, + "list": [ + { + "case_id": "AC2sOiNenwj1", + "case_type": 4, + "status": 1, + "vote": 11, + "vote_text": "好", + "vote_time": 1662700609 + } + ] + } +} +``` + +</details> + +## 查询案件众裁信息(旧 api) + +<details> +<summary>查看旧版API:</summary> + +> https://api.bilibili.com/x/credit/jury/caseList + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------------ | ------ | ------------- | ------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页显示数量 | 非必要 | 默认为30<br />最大30 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 仲裁记录列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ------ | --------------- | ------------ | +| 0 | object | 仲裁记录1 | | +| n | object | 仲裁记录(n+1) | 按照时间顺序 | +| …… | object | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ----------------- | ------------------------------------------------------------ | +| id | num | 案件id | | +| mid | num | 被举报用户mid | | +| status | num | 裁决状态 | 1:投票中<br />2:停止发放<br />3:复核中(结案中)<br />4:已裁决<br />5:待重启<br />6:未裁决<br />7:冻结中<br />8:队列中 | +| originType | num | 来源类型 | 见「封禁公示」中表 | +| reasonType | num | 原因类型 | 见「封禁公示」中表 | +| originContent | str | 被举报的原文 | | +| punishResult | num | 处理结果 | 0:无<br />1:封禁3天<br />2:封禁7天<br />3:永封<br />4:其他封禁天数<br />5:封禁15天<br />6:仅删除不封禁 | +| punishTitle | str | 处罚原因 | | +| judgeType | num | 裁决类型 | `status`=4时有效<br />0:未裁决<br/>1:违规<br/>2:不违规 | +| originUrl | str | 来源url | | +| blockedDays | num | 封禁时间 | `judgeType`=1时有效 | +| putTotal | num | ??? | 作用尚不明确 | +| voteRule | num | 投票不违规人数 | | +| voteBreak | num | 投票建议封禁人数 | | +| voteDelete | num | 投票建议删除人数 | | +| startTime | num | 裁决起始时间 | 时间戳 | +| endTime | num | 裁决截止时间 | 时间戳<br />未结案固定为24小时 | +| ctime | num | 举报创建时间 | 时间戳 | +| mtime | num | 开始拉取时间 | 时间戳 | +| originTitle | str | 来源标题 | | +| relationId | str | 违规关系标识字 | {评论rpid}-{违规类型id}-{来源对象id} | +| face | str | 被举报用户头像url | | +| uname | str | 被举报用户昵称 | | +| vote | num | 我的投票 | **见上表** | +| voteTime | num | 我的裁决时间 | 毫秒 时间戳 | +| case_type | num | 众裁类型 | 0:小众众裁<br />1:大众众裁 | + +**示例:** + +查询我的历史众裁,第1页,每页显示1个案件 + +Cookie方式: + +```shell +curl -G 'https://api.bilibili.com/x/credit/jury/caseList' \ +--data-urlencode 'ps=1' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx' +``` + +APP方式: +```shell +curl -G 'https://api.bilibili.com/x/credit/jury/caseList' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'ps=1' \ +--data-urlencode 'pn=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "id": 1241808, + "mid": 298264370, + "status": 4, + "originType": 1, + "reasonType": 9, + "originContent": "别在发这种傻逼视频了好吗?真要搞到禁摩才甘心。", + "punishResult": 6, + "punishTitle": "在评论中发布引战言论", + "judgeType": 1, + "originUrl": "https://www.bilibili.com/video/av328669697/#reply3165369965", + "blockedDays": 7, + "putTotal": 251, + "voteRule": 14, + "voteBreak": 140, + "voteDelete": 373, + "startTime": 1594528662, + "endTime": 1594530687, + "ctime": 1594528108, + "mtime": 1594530802, + "originTitle": "我这里有记录仪!略略略略略略哈哈哈,干得漂亮!", + "relationId": "3165369965-1-328669697", + "face": "http://i1.hdslb.com/bfs/face/d69912bb2a51f08176bcdbf4ba15e4c2b0962ad9.jpg", + "uname": "MyLSTicKnight", + "vote": 4, + "voteTime": 1594528700000, + "case_type": 0 + } + ] +} +``` + +</details> +</details> + +## 获取众议观点 + +> https://api.bilibili.com/x/credit/v2/jury/case/opinion + +*请求方式:GET* + +认证方式:Cookie + +**标头参数(Headers):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ------ | ---- | +| Cookie | str | Cookie | 必要 | | + +**URL参数(Query Params):** + +| 参数名 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------- | ------------------------------------------- | +| case_id | str | 仲裁案件id | **必填** | +| pn | num | | 显示第x页(default = 1) | +| ps | num | | 每页显示y条观点(Max = 20)(default = 10) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功;<br />-400:`ps`参数大于可允许的最大值`20` | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | object | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | -------------------------- | ---- | +| total | num | 当前案件众议观点总数 | | +| list | array | 无数据时是一个空数组:“[]” | | + +`data.list`对象是一个数组,里面包含`ps`个object(参数`ps`见上文,object结构见「[附表4](#附表4data-对象下的my_point对象)」) + +**示例:** + +查看案件`AC1xx411c7ac`的众议观点,每页`2`项,查看第`1`页 + +```shell +curl -G 'https://api.bilibili.com/x/credit/v2/jury/case/opinion' \ +--data-urlencode 'case_id=AC1xx411c7ac' \ +--data-urlencode 'pn=1' \ +--data-urlencode 'ps=2' \ +--header 'cookie: xxxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "total": 48, + "list": [ + { + "opid": 46087379, + "mid": 22006415, + "uname": "匿名用户", + "face": "http://i0.hdslb.com/bfs/face/e48952d599dbf011c2235239fafa2bf0deccef5a.jpg", + "vote": 11, + "vote_text": "", + "content": "正常评论", + "anonymous": 1, + "like": 0, + "hate": 0, + "like_status": 0, + "vote_time": 1661430391, + "insiders": 1 + }, + { + "opid": 46087280, + "mid": 19243907, + "uname": "匿名用户", + "face": "http://i0.hdslb.com/bfs/face/e85d7ab3425d3dd0f0796bd7f945b47ac27ca82a.jpg", + "vote": 11, + "vote_text": "", + "content": "并未发现明显问题。", + "anonymous": 1, + "like": 0, + "hate": 0, + "like_status": 0, + "vote_time": 1661430337, + "insiders": 0 + } + ] + } +} +``` + +</details> + +**旧 api** + +<details> +<summary>查看旧版API:</summary> + +> https://api.bilibili.com/x/credit/jury/case/opinion + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------------ | ------ | ------------- | ------------- | +| cid | num | 案件id | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为10 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | -------- | ------------ | +| count | num | 观点总数 | | +| opinion | 有效时:array<br />无效时:null | 观点列表 | | + +`data` 中的`opinion` 数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ------ | ----------- | ------------ | +| 0 | object | 观点1 | | +| n | object | 观点(n+1) | 按照时间顺序 | +| …… | object | …… | …… | + +`opinion` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | -------- | ------------ | +| mid | num | 用户mid | 仅非匿名有此项 | +| face | str | 用户头像 | 仅非匿名有此项 | +| name | str | 用户昵称 | 仅非匿名有此项 | +| opid | num | 观点id | | +| vote | num | 投票选择 | **见上表** | +| content | str | 观点内容 | | +| attr | num | 是否匿名 | 0:匿名<br />1:不匿名 | +| hate | num | 喜欢人数 | | +| like | num | 不喜欢人数 | | + +**示例:** + +查看案件`1239790`的众议观点,每页10项,查看第一页 + +```shell +curl -G 'https://api.bilibili.com/x/credit/jury/case/opinion' \ +--data-urlencode 'cid=1239790' \ +--data-urlencode 'ps=10' \ +--data-urlencode 'pn=1' \ +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 23, + "opinion": [ + { + "opid": 250943982, + "vote": 2, + "content": "不懂,正常的科普也有人杠吗?没文化真可怕", + "attr": 0, + "hate": 0, + "like": 0 + }, + { + "mid": 59894, + "face": "http://i2.hdslb.com/bfs/face/0cc48fc40867537d5a09a125e90f76183efbfdfa.gif", + "name": "雷歐諾斯", + "opid": 250956267, + "vote": 2, + "content": "这个虽然不是正确的说法,但本身是一种观点。而且已经成为一种梗了。不属于引战。", + "attr": 1, + "hate": 0, + "like": 0 + }, + { + "opid": 250956259, + "vote": 2, + "content": "正常科普,不构成引战。", + "attr": 0, + "hate": 0, + "like": 0 + }, + { + "mid": 215020429, + "face": "http://i1.hdslb.com/bfs/face/1d43c302e67db4d21b9c5c0f0dc0b8786e8086d5.jpg", + "name": "瞎子广_广告歌41", + "opid": 250955160, + "vote": 2, + "content": "这个其实也没啥事真的", + "attr": 1, + "hate": 0, + "like": 0 + }, + { + "mid": 108194360, + "face": "http://i0.hdslb.com/bfs/face/b78c92a69ff9977b7d08d4f7edc0a051a3d6ea3e.jpg", + "name": "籽云奕", + "opid": 250953998, + "vote": 2, + "content": "仅仅是科普评论,无过激言论", + "attr": 1, + "hate": 0, + "like": 0 + }, + { + "mid": 34503714, + "face": "http://i2.hdslb.com/bfs/face/eb2d0853235a56d035303f4f3614dcb6e0cf66fa.jpg", + "name": "十六夜紅月丶", + "opid": 250950982, + "vote": 2, + "content": "无过激言论,正常科普罢了", + "attr": 1, + "hate": 0, + "like": 0 + }, + { + "opid": 250950973, + "vote": 2, + "content": "其实两种读法都是正确的,虽然想要纠正别人的错误。不过自己本身就错了。还是保留吧,没什么引战的", + "attr": 0, + "hate": 0, + "like": 0 + }, + { + "mid": 436136443, + "face": "http://i1.hdslb.com/bfs/face/6b4151d8e030eddd073add6ef18ccbb00aa48d0f.jpg", + "name": "兄弟好牛啤", + "opid": 250950417, + "vote": 2, + "content": "有点经典的争议,但可能还会有人不知道", + "attr": 1, + "hate": 0, + "like": 0 + }, + { + "mid": 87385400, + "face": "http://i2.hdslb.com/bfs/face/0f567e7fa49bcef22010f3ff78e90553d8fffb09.jpg", + "name": "小学生de王者荣耀", + "opid": 250950402, + "vote": 2, + "content": "合理纠正up主的错误,建议追究恶意举报者的责任", + "attr": 1, + "hate": 0, + "like": 0 + }, + { + "opid": 250949840, + "vote": 2, + "content": "正常科普,没有过激言论,建议保留", + "attr": 0, + "hate": 0, + "like": 0 + } + ] + } +} +``` + +</details> +</details> diff --git a/docs/broadcast/readme.md b/docs/broadcast/readme.md new file mode 100644 index 0000000..a99fedd --- /dev/null +++ b/docs/broadcast/readme.md @@ -0,0 +1,180 @@ +# 全站广播 + +## 获取广播服务器地址 + +> https://api.bilibili.com/x/web-interface/broadcast/servers + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | --------------------------------- | +| platform | str | 平台选择 | 必要 | 为web时输出域名<br />其他时输出ip | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ------ | ------------------ | ---- | +| domain | str | 广播服务器url | | +| tcp_port | num | tcp端口 | | +| ws_port | num | websocket端口 | | +| wss_port | num | websocket ssl端口 | | +| heartbeat | num | 最大心跳包间隔时间 | | +| nodes | array | 服务节点地址列表 | | +| backoff | obj | ??? | | +| heartbeat_max | num | ??? | | + +`data`中的`nodes`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | str | 服务节点1 | | +| n | str | 服务节点(n+1) | | +| …… | str | …… | | + +`data`中的`backoff`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------ | ---- | +| max_delay | num | ??? | | +| base_delay | num | ??? | | +| factor | num | ??? | | +| jitter | num | ??? | | + +示例: + +当`platform`=`web`时,不显示节点ip + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/broadcast/servers' \ +--data-urlencode 'platform=web' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "domain": "broadcast.chat.bilibili.com", + "tcp_port": 7821, + "ws_port": 7822, + "wss_port": 7823, + "heartbeat": 30, + "nodes": ["broadcast.chat.bilibili.com"], + "backoff": { + "max_delay": 300, + "base_delay": 3, + "factor": 1.8, + "jitter": 0.3 + }, + "heartbeat_max": 3 + } +} +``` + +</details> + +当`platform`=其他时,显示节点ip + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/broadcast/servers' \ +--data-urlencode 'platform=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "domain": "broadcast.chat.bilibili.com", + "tcp_port": 7821, + "ws_port": 7822, + "wss_port": 7823, + "heartbeat": 30, + "nodes": ["134.175.207.130", "120.92.150.90", "120.92.150.212", "192.144.173.136", "154.8.217.108"], + "backoff": { + "max_delay": 300, + "base_delay": 3, + "factor": 1.8, + "jitter": 0.3 + }, + "heartbeat_max": 3 + } +} +``` + +</details> + +## 服务器数据包 + +连接服务器分为三种方式,分别是ws wss tcp,数据包分为上行和下行 + +单个数据包分为头部和正文 + +其中上行的有认证包 心跳包,下行的有认证包回复 心跳包回复 普通包 + +建立连接后超过30s内未发送认证包,或握手后30s内未发送心跳包,或发送了错误的认证包,都会被强制断开连接 + +操作流程: + +1.发送认证包,等待接收认证回复 + +2.确认握手成功后,每30s内发送心跳包,并立即接收心跳包回复 + +3.空闲时间接收普通包 + +### 数据包结构 + +头部通用于上行和下行数据包 + +头部格式: + +| 偏移量 | 长度(字节) | 类型 | 含义 | +| ------ | ------------ | ------ | ---------------------------------------------------- | +| 0x00 | 4 | uint32 | 封包总大小(头部大小+正文大小) | +| 0x04 | 2 | uint16 | 头部大小(一般为0x0012,18字节) | +| 0x06 | 2 | uint16 | 协议版本,可取常数1 | +| 0x08 | 4 | uint32 | 操作码(包类型)<br />**见下表** | +| 0x0C | 4 | uint32 | sequence(请求次数),可取常数1<br />对于普通包恒为0 | +| 0x10 | 2 | uint16 | 保留,一般为0 | + +操作码: + +| 代码 | 含义 | +| ---- | -------- | +| 2 | 心跳 | +| 3 | 心跳回复 | +| 7 | 认证 | +| 8 | 认证回复 | +| 1000 | 实时弹幕 | + +**示例:** + +以下为一个认证包示例,正文为文本`test` + +``` +00000000 00 00 00 16 00 12 00 01 00 00 00 07 00 00 00 01 |................| +00000010 00 00 74 65 73 74 |..test| +``` + + diff --git a/docs/broadcast/video_room.md b/docs/broadcast/video_room.md new file mode 100644 index 0000000..b0dd551 --- /dev/null +++ b/docs/broadcast/video_room.md @@ -0,0 +1,144 @@ +# 视频实时信息 + +## 认证包(上行) + +**正文内容json:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ------ | -------- | ------------------------------ | +| room_id | str | 目标视频 | `video://{稿件avid}/{视频cid}` | +| platform | str | 平台标识 | 默认为`web` | +| accepts | array | 操作标识 | | + +`array`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| 0 | num | 1000 | 作用尚不明确 | +| 1 | num | 1015 | 作用尚不明确 | + +**示例:** + +发送视频`av706`(1P的cid为` 3724723 `)的认证包 + +``` +00000000 00 00 00 55 00 12 00 01 00 00 00 07 00 00 00 01 |...U............| +00000010 00 00 7b 22 72 6f 6f 6d 5f 69 64 22 3a 22 76 69 |..{"room_id":"vi| +00000020 64 65 6f 3a 2f 2f 37 30 36 2f 33 37 32 34 37 32 |deo://706/372472| +00000030 33 22 2c 22 70 6c 61 74 66 72 6f 6d 22 3a 22 77 |3","platfrom":"w| +00000040 65 62 22 2c 22 61 63 63 65 70 74 73 22 3a 5b 31 |eb","accepts":[1| +00000050 30 30 30 2c 31 30 31 35 5d 7d |000,1015]}| +``` + +## 认证包回复(下行) + +**正文内容json:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为OK | +| version | num | 版本号 | | + +示例: + +``` +00000000 00 00 00 37 00 12 00 01 00 00 00 08 00 00 00 01 |...7............| +00000010 00 00 7b 22 63 6f 64 65 22 3a 30 2c 22 6d 65 73 |..{"code":0,"mes| +00000020 73 61 67 65 22 3a 22 4f 4b 22 2c 22 76 65 72 73 |sage":"OK","vers| +00000030 69 6f 6e 22 3a 31 7d |ion":1}| +``` + +## 心跳包(上行) + +正文可为任意内容或为空 + +**示例:** + +正文为空的示例 + +``` +00000000 00 00 00 12 00 12 00 01 00 00 00 02 00 00 00 01 |................| +00000010 00 00 |..| +``` + +正文为`[object Object]`的示例 + +``` +00000000 00 00 00 21 00 12 00 01 00 00 00 02 00 00 00 01 |...!............| +00000010 00 00 5b 6f 62 6a 65 63 74 20 4f 62 6a 65 63 74 |..[object Object| +00000020 5d |]| +``` + +## 心跳包回复(实时观看数)(下行) + +**正文内容json:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为OK | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | ---- | +| room | obj | 视频实时观看信息 | | + +`data`中的`room`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------ | ------------------------------ | +| online | num | 实时观看人数 | | +| room_id | str | 目标视频 | `video://{稿件avid}/{视频cid}` | + +**示例:** + +当前视频`av706`实时观看人数为13 + +``` +00000000 00 00 00 68 00 12 00 01 00 00 00 03 00 00 00 01 |...h............| +00000010 00 00 7b 22 63 6f 64 65 22 3a 30 2c 22 6d 65 73 |..{"code":0,"mes| +00000020 73 61 67 65 22 3a 22 30 22 2c 22 64 61 74 61 22 |sage":"0","data"| +00000030 3a 7b 22 72 6f 6f 6d 22 3a 7b 22 6f 6e 6c 69 6e |:{"room":{"onlin| +00000040 65 22 3a 31 33 2c 22 72 6f 6f 6d 5f 69 64 22 3a |e":13,"room_id":| +00000050 22 76 69 64 65 6f 3a 2f 2f 37 30 36 2f 33 37 32 |"video://706/372| +00000060 34 37 32 33 22 7d 7d 7d |4723"}}}| +``` + +## 普通包(实时弹幕)(下行) + +**正文内容json:** + +根数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------------------------------------------------ | +| 0 | str | 弹幕属性信息 | 详见[「弹幕」中的属性 p](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/danmaku/danmaku_xml.md) | +| 1 | str | 弹幕内容 | | + +**示例:** + +弹幕属性为`0.25,1,25,16777215,1588433046,1588431486568150,0,33ad5d91,32134068443807747` + +弹幕内容为`此生无悔入东方,来世愿生幻想乡` + +``` +00000000 00 00 00 91 00 12 00 01 00 00 03 e8 00 00 00 00 |................| +00000010 00 00 5b 22 30 2e 32 35 2c 31 2c 32 35 2c 31 36 |..["0.25,1,25,16| +00000020 37 37 37 32 31 35 2c 31 35 38 38 34 33 33 30 34 |777215,158843304| +00000030 36 2c 31 35 38 38 34 33 31 34 38 36 35 36 38 31 |6,15884314865681| +00000040 35 30 2c 30 2c 33 33 61 64 35 64 39 31 2c 33 32 |50,0,33ad5d91,32| +00000050 31 33 34 30 36 38 34 34 33 38 30 37 37 34 37 22 |134068443807747"| +00000060 2c 22 e6 ad a4 e7 94 9f e6 97 a0 e6 82 94 e5 85 |,"此 生 无 悔| +00000070 a5 e4 b8 9c e6 96 b9 ef bc 8c e6 9d a5 e4 b8 96 |入 东 方 ,来 世 | +00000080 e6 84 bf e7 94 9f e5 b9 bb e6 83 b3 e4 b9 a1 22 |愿 生 幻 想 乡"| +00000090 5d |]| +``` diff --git a/docs/cheese/info.md b/docs/cheese/info.md new file mode 100644 index 0000000..b3f0b89 --- /dev/null +++ b/docs/cheese/info.md @@ -0,0 +1,640 @@ +# 课程基本信息 + +课程ssid与epid和番剧不互通 + +课程avid与普通视频绝大部分api接口不能互通,少部分互通接口如下: + +1. 获取视频简介 +2. 查询视频状态数 +3. 查询分P列表 +4. 视频快照 +5. 获取弹幕(使用cid) +6. 发送弹幕 +7. 高能进度条(使用cid) + +## 获取课程基本信息 + +> https://api.bilibili.com/pugv/view/web/season + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:referer为 `.bilibili.com`域名下 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------------ | -------------------------------------------------- | +| season_id | num | 课程ssid | 必要(可选) | season_id与ep_id任选其一<br />**与番剧ssid不互通** | +| ep_id | num | 课程epid | 必要(可选) | season_id与ep_id任选其一<br />**与番剧epid不互通** | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------- | +| code | num | 返回值 | 0:成功<br />-404:错误 | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ------ | ----------------------------- | ------------------------------------------------------------ | +| brief | obj | 课程概述信息 | | +| coupon | obj | 优惠信息 | 若无优惠则无此项 | +| cover | str | 课程封面url | | +| episode_page | obj | 课程分集信息 | | +| episode_sort | num | 1 | **作用尚不明确** | +| episodes | array | 课程分集列表 | | +| faq | obj | 常见问题信息1 | 合并格式 | +| faq1 | obj | 常见问题信息2 | 分离格式 | +| payment | obj | 付费信息 | | +| purchase_note | obj | 购买须知信息 | | +| purchase_protocol | obj | 付费内容协议信息 | | +| release_bottom_info | str | 底部更新状态文字 | | +| release_info | str | 更新状态文字+更新连载状态文字 | | +| release_info2 | str | 更新连载状态文字 | | +| release_status | str | 更新状态文字 | | +| season_id | num | 课程ssid | **与番剧ssid不互通** | +| share_url | str | 页面url | | +| short_link | str | bilibili uri链接 | | +| stat | obj | 播放数信息 | | +| status | num | 10 | **作用尚不明确** | +| subtitle | str | 课程简介信息 | | +| title | str | 课程标题 | | +| up_info | obj | UP主信息 | | +| user_status | obj | 用户状态信息 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`** | + +`data`中的`brief`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ---- | +| content | str | 空 | | +| img | array | 简介图片 | | +| title | str | 课程概述 | | +| type | num | 2 | | + +`brief`中的`img`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 简介图片1 | | +| n | obj | 简介图片(n+1) | | +| …… | obj | …… | …… | + +`img`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ----------- | ---------------- | +| aspect_ratio | num | ??? | **作用尚不明确** | +| url | str | 简介图片url | | + +`data`中的`coupon`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | --------- | ------------------- | +| amount | num | 折扣乘数 | | +| expire_time | str | 结束时间 | YYYY-MM-DD HH:MM:SS | +| start_time | str | 起始时间 | YYYY-MM-DD HH:MM:SS | +| status | num | ??? | **作用尚不明确** | +| title | str | 优惠标题 | | +| token | str | 领取token | | + +`data`中的`episode_page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---- | +| next | bool | false | | +| num | num | 1 | | +| size | num | 总计集数 | | +| total | num | 总计集数 | | + +`data`中的`episodes`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 课程分集1 | | +| n | obj | 课程分集(n+1) | | +| …… | obj | …… | …… | + +`episodes`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ---------------- | ------------------------------------------------------------ | +| aid | num | 课程分集avid | **与普通稿件avid部分不互通** | +| cid | num | 课程分集cid | **与普通视频cid部分不互通** | +| duration | num | 课程分集时间长度 | 单位为秒 | +| from | str | pugv | | +| id | num | 课程分集epid | **与番剧epid不互通** | +| index | num | 课程分集数 | | +| page | num | 1 | | +| play | num | 课程分集播放量 | | +| release_date | num | 课程分集发布时间 | 时间戳 | +| status | num | 分集权限属性 | 1:可观看<br />2:不可观看 | +| title | str | 课程分集标题 | | +| watched | bool | 是否观看该集 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`**<br />false:未观看<br />true:已观看 | +| watchedHistory | num | 该集观看历史 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`** | + +`data`中的`faq`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | --------------- | ---- | +| content | str | 常见问题信息 | | +| link | str | 常见问题页面url | | +| title | str | 常见问题 | | + +`data`中的`faq1`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ------------ | ---- | +| items | array | 常见问题列表 | | +| title | str | 常见问题 | | + +`faq1`中的`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 常见问题1 | | +| n | obj | 常见问题(n+1) | | +| …… | obj | …… | …… | + +`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ---- | +| answer | str | 回答信息 | | +| question | str | 问题信息 | | + +`data`中的`payment`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | -------------------- | ----------------------- | +| desc | str | 付费价格说明 | | +| discount_desc | str | 折扣说明信息 | 若无优惠则无此项 | +| discount_prefix | str | 折扣类型前缀 | 若无优惠则无此项 | +| pay_shade | str | 观看所有视频付费说明 | | +| price | num | 课程价格 | 单位为B币(折扣后价格) | +| price_format | str | 课程价格 | 单位为B币折扣后价格) | + +`data`中的`purchase_note`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------------------- | ---- | +| content | str | 购买须知信息文字内容 | | +| link | str | 购买须知页面url | | +| title | str | 购买须知 | | + +`data`中的`purchase_protocol`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------------- | ---- | +| link | str | 付费内容协议页面url | | +| title | str | 付费内容协议 | | + +`data`中的`stat`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------------- | ---- | +| play | num | 播放量 | | +| play_desc | str | 播放量文字信息 | | + +`data`中的`up_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ------------------------------------------------------------ | +| avatar | str | UP主头像url | | +| brief | str | UP主备注 | 非个人签名 | +| follower | num | UP主粉丝数 | | +| is_follow | num | 是否关注UP主 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`**<br />0:未关注<br />1:已关注 | +| link | str | UP主空间url | | +| mid | num | UP主uid | | +| pendant | obj | ??? | **作用尚不明确** | +| uname | str | UP主昵称 | | + +`up_info`中的`pendant`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---- | ---------------- | +| image | str | 空 | **作用尚不明确** | +| name | str | 空 | **作用尚不明确** | +| follower | num | 0 | **作用尚不明确** | + +`data`中的`user_status`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------- | ------------------------ | +| favored | num | 是否收藏 | 0:未收藏<br />1:已收藏 | +| favored_count | num | 1 | **作用尚不明确** | +| payed | num | 是否购买 | 0:未购买<br />1:已购买 | +| progress | obj | 课程进度 | 未登录无此项 | + +`user_status`中的`progress`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------ | -------- | +| last_ep_id | num | 最后观看的epid | | +| last_ep_index | str | 最后观看的标题 | | +| last_time | num | 最后观看的时间进度 | 单位为秒 | + +**示例:** + +查询课程`ss61`或分集`ep790`的信息 + +ssid方式: + +```shell +curl -G 'https://api.bilibili.com/pugv/view/web/season' \ +--data-urlencode 'season_id=61' \ +-b 'SESSDATA=xxx' \ +-e 'https://www.bilibili.com' +``` + +epid方式: + +```shell +curl -G 'https://api.bilibili.com/pugv/view/web/season' \ +--data-urlencode 'ep_id=790' \ +-b 'SESSDATA=xxx' \ +-e 'https://www.bilibili.com' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "brief": { + "content": "", + "img": [ + { + "aspect_ratio": 0.9375, + "url": "http://i0.hdslb.com/bfs/archive/29942f338ee570632838403a09871bad130cfe9a.jpg" + }, + { + "aspect_ratio": 0.9375, + "url": "http://i0.hdslb.com/bfs/archive/913e5c37d836d7954ae9ca19da62a43ba5b34219.jpg" + }, + { + "aspect_ratio": 1.3359375, + "url": "http://i0.hdslb.com/bfs/archive/a974555bd4a52f0aa865bd192c1e3401ed4cb0ad.jpg" + }, + { + "aspect_ratio": 1.3359375, + "url": "http://i0.hdslb.com/bfs/archive/73cd7669b251db9d2b62b921bee49a137c3d65dc.jpg" + }, + { + "aspect_ratio": 1.0625, + "url": "http://i0.hdslb.com/bfs/archive/b084ac8f6710c8eddbc58770a4254508de75eb02.jpg" + }, + { + "aspect_ratio": 1.2890625, + "url": "http://i0.hdslb.com/bfs/archive/44e32c2cf64b894563829ce65bbef199220f4121.jpg" + }, + { + "aspect_ratio": 1.3203125, + "url": "http://i0.hdslb.com/bfs/archive/90764fd095810565713b92606dc9cd0cfb25adae.jpg" + }, + { + "aspect_ratio": 1.15234375, + "url": "http://i0.hdslb.com/bfs/archive/c35ca0ced0ad075a2c13b8fdc1e47b88573bce45.jpg" + } + ], + "title": "课程概述", + "type": 2 + }, + "coupon": { + "amount": 0.66, + "expire_time": "2020-06-30 00:00:00", + "start_time": "2020-05-21 00:00:00", + "status": 1, + "title": "【上新限时6.6折】《唐盾:0-N4日语精讲》", + "token": "B20200521135929161905873" + }, + "cover": "http://i0.hdslb.com/bfs/archive/95d4de9e6691ccc2b18f087f5f654652dee3c01b.jpg", + "episode_page": { + "next": false, + "num": 1, + "size": 66, + "total": 66 + }, + "episode_sort": 1, + "episodes": [ + { + "aid": 76973173, + "cid": 132105993, + "duration": 2223, + "from": "pugv", + "id": 790, + "index": 1, + "page": 1, + "play": 2406406, + "release_date": 1574762407, + "status": 1, + "title": "唐盾:一起从0基础学日语吧(含50音 词汇试听)", + "watched": false, + "watchedHistory": 0 + }, + { + "aid": 77114885, + "cid": 132110244, + "duration": 3003, + "from": "pugv", + "id": 795, + "index": 2, + "page": 1, + "play": 49100, + "release_date": 1574766759, + "status": 2, + "title": "50音あ行假名/音调/送气与不送气音", + "watched": false, + "watchedHistory": 0 + }, + { + "aid": 77120689, + "cid": 131913553, + "duration": 3253, + "from": "pugv", + "id": 797, + "index": 3, + "page": 1, + "play": 49518, + "release_date": 1574770029, + "status": 2, + "title": "50音图的か行、さ行、た行假名", + "watched": false, + "watchedHistory": 0 + }, + ………… + ], + "faq": { + "content": "Q:课程在什么时间更新?\nA:课程更新频次以页面前端展示为准。购买成功后,课程更新将通过账号动态提示,方便及时观看。\n\nQ:课程购买后有收看时间限制吗?\nA:购买后除不可抗力因素外,课程均可永久收看,请您放心购买。\n\nQ:原价购买课程后,如遇到优惠折扣,是否可以退还差价或重新购买?\nA:虚拟商品付款后无法返还,请您随时留意各类课程折扣信息,按需购买。\n\nQ:购买课程后是否可以加入老师的粉丝群或者用户群?\nA:如老师设置用户群,我们将邀您加入,但我们无法承诺所有老师均提供用户群服务,感谢理解。", + "link": "http://m.bilibili.com", + "title": "常见问题" + }, + "faq1": { + "items": [ + { + "answer": "课程更新频次以页面前端展示为准。购买成功后,课程更新将通过账号动态提示,方便及时观看。", + "question": "课程在什么时间更新?" + }, + { + "answer": "购买后除不可抗力因素外,课程均可永久收看,请您放心购买。", + "question": "课程购买后有收看时间限制吗?" + }, + { + "answer": "虚拟商品付款后无法返还,请您随时留意各类课程折扣信息,按需购买。", + "question": "原价购买课程后,如遇到优惠折扣,是否可以退还差价或重新购买?" + }, + { + "answer": "如老师设置用户群,我们将邀您加入,但我们无法承诺所有老师均提供用户群服务,感谢理解。", + "question": "购买课程后是否可以加入老师的粉丝群或者用户群?" + } + ], + "title": "常见问题" + }, + "payment": { + "desc": "券后 262.68 B币起/53期", + "discount_desc": "262.68 B币", + "discount_prefix": "券后", + "pay_shade": "券后支付 262.68 B币即可观看所有视频", + "price": 398.0, + "price_format": "398" + }, + "purchase_note": { + "content": "1. 本内容为付费内容,购买成功后方可观看。<br/>2. 本内容为虚拟服务,已购买内容不支持退款,敬请谅解。<br/>3. 实际购买价格以页面展示的价格及订单结算页显示价格为准。<br/>4. 如您在购买付费内容时有任何疑问,可随时咨询在线客服。<br/>完整的购买协议,请点击阅读<a href=\"https://www.bilibili.com/blackboard/activity-y-SJTTYBp.html\" color=\"#0ba395\" target=\"_blank\">《bilibili付费内容购买协议》</a>", + "link": "https://www.bilibili.com/blackboard/activity-y-SJTTYBp.html", + "title": "购买须知" + }, + "purchase_protocol": { + "link": "https://www.bilibili.com/blackboard/activity-y-SJTTYBp.html", + "title": "bilibili付费内容购买协议" + }, + "release_bottom_info": "没有更多啦~", + "release_info": "已完结,共53期", + "release_info2": "共53期", + "release_status": "已完结", + "season_id": 61, + "share_url": "https://m.bilibili.com/cheese/play/ss61", + "short_link": "bilibili://cheese/season/61", + "stat": { + "play": 2878146, + "play_desc": "287.8万播放" + }, + "status": 10, + "subtitle": "新东方名师唐盾的精品日语课,包含50音/N5/N4的词汇/语法/课文/练习精讲,让我们一起轻松学日语~", + "title": "唐盾:0-N4日语精讲", + "up_info": { + "avatar": "http://i1.hdslb.com/bfs/face/564421428d1f74314ed50e16a8f570ad968828b0.jpg", + "brief": "唐盾:前新东方日语名师,倾注日语教学、翻译14年。曾任新东方欧亚教育长沙中心总监。", + "follower": 21333, + "is_follow": 0, + "link": "https://space.bilibili.com/19452605", + "mid": 19452605, + "pendant": { + "image": "", + "name": "", + "pid": 0 + }, + "uname": "盾盾桑教你学日语" + }, + "user_status": { + "favored": 1, + "favored_count": 1, + "payed": 0, + "progress": { + "last_ep_id": 790, + "last_ep_index": "唐盾:一起从0基础学日语吧(含50音 词汇试听)", + "last_time": 1 + } + } + }, + "message": "success" +} +``` + +</details> + +## 获取课程分集列表 + +> https://api.bilibili.com/pugv/view/web/ep/list + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:referer为 `.bilibili.com`域名下 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | -------------------- | +| season_id | num | 课程ssid | 必要 | **与番剧ssid不互通** | +| ps | num | 每页项数 | 非必要 | 默认为50 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------- | +| code | num | 返回值 | 0:成功<br />-404:错误 | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ------------ | ---- | +| items | array | 课程分集列表 | | +| page | obj | 列表分页信息 | | + +`data`中的`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 课程分集1 | | +| n | obj | 课程分集(n+1) | | +| …… | obj | …… | …… | + +`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ---------------- | ------------------------------------------------------------ | +| aid | num | 课程分集avid | **与普通稿件avid部分不互通** | +| cid | num | 课程分集cid | **与普通视频cid部分不互通** | +| duration | num | 课程分集时间长度 | 单位为秒 | +| from | str | pugv | | +| id | num | 课程分集epid | **与番剧epid不互通** | +| index | num | 课程分集数 | | +| page | num | 1 | | +| play | num | 课程分集播放量 | | +| release_date | num | 课程分集发布时间 | 时间戳 | +| status | num | 分集权限属性 | 1:可观看<br />2:不可观看 | +| title | str | 课程分集标题 | | +| watched | bool | 是否观看该集 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`**<br />false:未观看<br />true:已观看 | +| watchedHistory | num | 该集观看历史 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`** | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------------- | ----------------------------------------- | +| next | bool | 是否存在下一页 | false:不存在下一页<br />true:存在下一页 | +| num | num | 当前页码 | | +| size | num | 每页项数 | | +| total | num | 总价项数 | | + +**示例:** + +按照每页5项查询课程`ss61`的分集列表第1页 + +```shell +curl -G 'https://api.bilibili.com/pugv/view/web/ep/list' \ +--data-urlencode 'season_id=61' \ +--data-urlencode 'ps=5 ' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx' \ +-e 'https://www.bilibili.com' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "items": [ + { + "aid": 76973173, + "cid": 132105993, + "duration": 2223, + "from": "pugv", + "id": 790, + "index": 1, + "page": 1, + "play": 2406951, + "release_date": 1574762407, + "status": 1, + "title": "唐盾:一起从0基础学日语吧(含50音 词汇试听)", + "watched": false, + "watchedHistory": 0 + }, + { + "aid": 77114885, + "cid": 132110244, + "duration": 3003, + "from": "pugv", + "id": 795, + "index": 2, + "page": 1, + "play": 49106, + "release_date": 1574766759, + "status": 2, + "title": "50音あ行假名/音调/送气与不送气音", + "watched": false, + "watchedHistory": 0 + }, + { + "aid": 77120689, + "cid": 131913553, + "duration": 3253, + "from": "pugv", + "id": 797, + "index": 3, + "page": 1, + "play": 49522, + "release_date": 1574770029, + "status": 2, + "title": "50音图的か行、さ行、た行假名", + "watched": false, + "watchedHistory": 0 + }, + { + "aid": 77606110, + "cid": 132897199, + "duration": 2823, + "from": "pugv", + "id": 806, + "index": 4, + "page": 1, + "play": 35800, + "release_date": 1575128696, + "status": 2, + "title": "50音图的な行、は行、ま行假名", + "watched": false, + "watchedHistory": 0 + }, + { + "aid": 78015255, + "cid": 133651764, + "duration": 2165, + "from": "pugv", + "id": 812, + "index": 5, + "page": 1, + "play": 25842, + "release_date": 1575446218, + "status": 2, + "title": "や行、ら行、わ行假名、拨音", + "watched": false, + "watchedHistory": 0 + } + ], + "page": { + "next": true, + "num": 1, + "size": 5, + "total": 66 + } + }, + "message": "success" +} +``` + +</details> diff --git a/docs/cheese/videostream_url.md b/docs/cheese/videostream_url.md new file mode 100644 index 0000000..fee29dd --- /dev/null +++ b/docs/cheese/videostream_url.md @@ -0,0 +1,222 @@ +# 课程视频流URL + +<img src="../../assets/img/download.svg" width="100" height="100"/> + +## 获取课程视频流URL(web端) + +> https://api.bilibili.com/pugv/player/web/playurl + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**注:** + +1. 本接口为课程视频专用,故与普通视频不互通 +2. 大部分使用方法及视频的取流方法继承[视频流url文档](../video/videostream_url.md) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------------- | ------ | ------------------------------------------------------------ | +| avid | num | 课程avid | 必要 | | +| ep_id | num | 课程epid | 必要 | | +| cid | num | 视频cid | 必要 | | +| qn | num | 视频清晰度选择 | 非必要 | 参考[qn定义](../video/videostream_url.md#qn视频清晰度标识) | +| fnver | num | 视频流版本 | 非必要 | 参考[fnver定义](../video/videostream_url.md#fnver视频流版本标识) | +| fnval | num | 视频流类型 | 非必要 | 参考[fnval定义](../video/videostream_url.md#fnval视频流格式标识) | +| fourk | num | 是否允许4K视频 | 非必要 | 默认为0<br />画质最高1080P:0<br />画质最高4K:1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功 <br />-400:请求错误<br />-404:无视频<br />-403:权限不足(未购买) | +| message | str | 错误信息 | 默认为success | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ------ | ---------------------- | ---------------------------------------- | +| accept_format | str | 视频支持的分辨率的格式 | | +| code | num | 0 | | +| durl | array | 视频分段 | | +| seek_param | str | start | | +| no_rexcode | num | 0 | | +| format | str | 视频格式 | | +| fnval | num | 0 | | +| video_project | bool | true | | +| fnver | num | 0 | | +| message | str | 空 | | +| type | str | 视频格式 | | +| accept_quality | array | 视频支持的分辨率列表 | | +| quality | num | 视频分辨率代码 | **值含义见上表** | +| timelength | num | 视频长度 | 单位为毫秒<br />不同分辨率可能有略微差异 | +| result | str | suee | **作用尚不明确** | +| seek_type | str | offset | **作用尚不明确** | +| has_paid | bool | false | **作用尚不明确** | +| supportFormats | array | 视频分辨率详细列表 | | +| from | str | local | **作用尚不明确** | +| video_codecid | num | ??? | **作用尚不明确** | +| accept_description | array | 视频支持的分辨率列表 | | +| status | num | 0 | **作用尚不明确** | + +`data`中的`durl`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ---- | +| 0 | obj | 视频分段1信息 | | +| n | obj | 视频分段(n+1)信息 | | +| …… | obj | …… | | + +`durl`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ------ | ------------ | ---------------------------------- | +| size | num | 视频大小 | 单位为Byte | +| ahead | str | 空 | 作用尚不明确 | +| length | num | 视频长度 | 单位为毫秒 | +| vhead | str | 空 | 作用尚不明确 | +| backup_url | array | 备用视频流 | | +| url | str | 视频流url | 链接有效时间为120min | +| order | num | 视频分段序号 | 某些视频会分为多个片段 | + +`durl`数组中的对象中的`backup_url`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------- | +| 0 | str | 备用视频流url | 有效时间为120min | + +`data`中的`supportFormats`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---- | +| 0 | obj | 分辨率详细信息1 | | +| n | obj | 分辨率详细信息(n+1) | | +| …… | obj | …… | …… | + +`supportFormats`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------- | ---- | +| format | str | 分辨率名称 | | +| description | atr | 分辨率备注 | | +| quality | num | 分辨率代码 | | + +`data`中的`accept_description`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | str | 分辨率名称1 | | +| n | str | 分辨率名称(n+1) | | +| …… | str | …… | …… | + +**示例:** + +获取课程`ep790`(cid=`132105993`,avid=`76973173`)的视频流url,清晰度为1080P60 + +```shell +curl -G 'https://api.bilibili.com/pugv/player/web/playurl' \ +--data-urlencode 'ep_id=790' \ +--data-urlencode 'avid=76973173' \ +--data-urlencode 'cid=132105993' \ +--data-urlencode 'qn=116' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "accept_format": "flv_p60,flv720_p60,flv,flv720,flv480,flv360", + "code": 0, + "durl": [ + { + "size": 1105854161, + "ahead": "", + "length": 2222204, + "vhead": "", + "backup_url": [ + "https://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/93/59/132105993/132105993_da2-1-116.flv?e=ig8euxZM2rNcNbNghzTBhwdlhbNz7bUVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1591596728&gen=playurl&os=ks3cbv&oi=606633803&trid=76bea9a9e56f4cb89a9aff2f8213c9acu&platform=pc&upsig=b271bf493bff32ffe62969582c8d18b4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=0&orderid=1,2&logo=40000000" + ], + "url": "https://upos-sz-mirrorks3.bilivideo.com/upgcxcode/93/59/132105993/132105993_da2-1-116.flv?e=ig8euxZM2rNcNbNghzTBhwdlhbNz7bUVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1591596728&gen=playurl&os=ks3bv&oi=606633803&trid=76bea9a9e56f4cb89a9aff2f8213c9acu&platform=pc&upsig=6a8ae3711bd0bb2a484ec2427d659b14&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=0&orderid=0,2&logo=80000000", + "order": 1, + "md5": "" + } + ], + "seek_param": "start", + "no_rexcode": 0, + "format": "flv_p60", + "fnval": 0, + "video_project": true, + "fnver": 0, + "message": "", + "type": "FLV", + "accept_quality": [ + 116, + 74, + 80, + 64, + 32, + 16 + ], + "quality": 116, + "timelength": 2222204, + "result": "suee", + "seek_type": "offset", + "has_paid": false, + "supportFormats": [ + { + "format": "flv_p60", + "description": "高清 1080P60", + "quality": 116 + }, + { + "format": "flv720_p60", + "description": "高清 720P60", + "quality": 74 + }, + { + "format": "flv", + "description": "高清 1080P", + "quality": 80 + }, + { + "format": "flv720", + "description": "高清 720P", + "quality": 64 + }, + { + "format": "flv480", + "description": "清晰 480P", + "quality": 32 + }, + { + "format": "flv360", + "description": "流畅 360P", + "quality": 16 + } + ], + "from": "local", + "video_codecid": 7, + "accept_description": [ + "高清 1080P60", + "高清 720P60", + "高清 1080P", + "高清 720P", + "清晰 480P", + "流畅 360P" + ], + "status": 0 + }, + "message": "success" +} +``` + +</details> \ No newline at end of file diff --git a/docs/clientinfo/ip.md b/docs/clientinfo/ip.md new file mode 100644 index 0000000..a767cff --- /dev/null +++ b/docs/clientinfo/ip.md @@ -0,0 +1,157 @@ +# 通过ip确定地理位置 + +## 根据请求IP确定属地 + +> https://api.bilibili.com/x/web-interface/zone +> +> https://api.live.bilibili.com/xlive/web-room/v1/index/getIpInfo +> +> https://app.bilibili.com/x/resource/ip + +*请求方式:GET* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------- | ------------ | +| addr | str | 公网IP地址 | | +| country | str | 国家/地区名 | | +| province | str | 省/州 | 非必须存在项 | +| city | str | 城市 | 非必须存在项 | +| isp | str | 运营商名 | | +| latitude | num | 纬度 | | +| longitude | num | 经度 | | +| zone_id | num | ip数据库id | 第二个接口无 | +| country_code | num | 国家/地区代码 | 第二个接口无 | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/web-interface/zone' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "addr":"36.40.120.145", + "country":"中国", + "province":"陕西", + "city":"渭南", + "isp":"电信", + "latitude":34.4995, + "longitude":109.492821, + "zone_id":4472912, + "country_code":86 + } +} +``` + +</details> + +## 查询任意 IP 地址的归属地 + +> https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr +> https://api.live.bilibili.com/client/v1/Ip/getInfoNew + +注: 以上接口等效 + +*请求方式:GET* + +**URL参数:** + + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| ip | str | IP地址 | 不必要 | IPv4或IPv6地址不限, 留空与[根据请求IP确定地理位置](#根据请求ip确定地理位置)基本相同 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为空 | +| msg | str | 错误信息 | 同message | +| data | obj | 信息本体 | 出错时为空数组 | + +`data`对象: + +与[根据请求IP确定地理位置](#根据请求ip确定地理位置)回复的`data`对象基本相同, 但无 `zone_id` `country_code` 字段 + +**示例:** + +查询请求IP地址的归属地: + +```shell +curl -G 'https://api.live.bilibili.com/client/v1/Ip/getInfoNew' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "addr": "104.28.156.113", + "country": "新加坡", + "province": "新加坡", + "city": "", + "isp": "cloudflare.com", + "latitude": "1.352083", + "longitude": "103.819836" + } +} +``` + +</details> + +查询IP地址`8.8.8.8`的归属地: + +```shell +curl -G 'https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr' \ +--data-urlencode 'ip=8.8.8.8' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "addr": "8.8.8.8", + "country": "GOOGLE.COM", + "province": "GOOGLE.COM", + "city": "", + "isp": "level3.com", + "latitude": "", + "longitude": "" + } +} +``` + +</details> diff --git a/docs/comment/action.md b/docs/comment/action.md new file mode 100644 index 0000000..a0f4823 --- /dev/null +++ b/docs/comment/action.md @@ -0,0 +1,535 @@ +# 评论区操作 + +## 发表评论 + +> https://api.bilibili.com/x/v2/reply/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 评论区类型代码 | 必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区id | 必要 | | +| root | num | 根评论rpid | 非必要 | 二级评论以上使用 | +| parent | num | 父评论rpid | 非必要 | 二级评论同根评论id<br />大于二级评论为要回复的评论id | +| message | str | 发送评论内容 | 必要 | 最大1000字符<br />表情使用表情转义符 | +| plat | num | 发送平台标识 | 非必要 | 1:web端<br />2:安卓客户端<br />3:ios客户端<br />4:wp客户端<br />默认为1 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项<br />-509:请求过于频繁<br />12001:已经存在评论主题<br />12002:评论区已关闭<br />12003:禁止回复<br />12006:没有该评论<br />12009:评论主体的type不合法<br />12015:需要评论验证码<br />12016:评论内容包含敏感信息<br />12025:评论字数过多<br />12035:该账号被UP主列入评论黑名单<br />12051:重复评论,请勿刷屏<br />12052:评论区已关闭<br />12045:购买后即可发表评论<br/>**(其他错误码有待补充)** | +| message | str | 错误信息 | <br /> | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ----------------------------- | -------------- | ------------------------------------------------------------ | +| success_action | num | 0 | **作用尚不明确** | +| success_toast | str | 状态文字 | | +| need_captcha | bool | false | 评论需要验证码(未证实) | +| url | str | 空 | **作用尚不明确** | +| rpid | num | 评论rpid | | +| rpid_str | str | 评论rpid | 字串格式 | +| dialog | num | 回复对方rpid | 若为一级评论则为0<br />若为二级评论则为该评论id<br />大于二级评论为上一级评论id | +| dialog_str | str | 回复对方rpid | 字串格式 | +| root | num | 根评论rpid | 若为一级评论则为0<br />大于一级评论则为根评论id | +| root_str | str | 根评论rpid | 字串格式 | +| parent | num | 回复父评论rpid | 若为一级评论则为0<br />若为二级评论则为根评论id<br />大于二级评论为上一级评论id | +| parent_str | str | 回复父评论rpid | 字串格式 | +| emote | obj | 表情转义符信息 | [对象定义见表](readme.md#评论条目对象) | +| reply | 有效时:obj<br />无效时:null | | [对象定义见表](readme.md#评论条目对象) | + +**示例:** + +给视频`av243322853`发送内容为`测试test[泠鸢yousa_awsl]`的评论(带有表情转义符),平台标识为1(web端) + +```shell +curl 'https://api.bilibili.com/x/v2/reply/add' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=243322853' \ +--data-urlencode 'message=测试test[泠鸢yousa_awsl]' \ +--data-urlencode 'plat=1' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "success_action": 0, + "success_toast": "发送成功", + "need_captcha": false, + "url": "", + "rpid": 3043212039, + "rpid_str": "3043212039", + "dialog": 0, + "dialog_str": "0", + "root": 0, + "root_str": "0", + "parent": 0, + "parent_str": "0", + "emote": { + "[泠鸢yousa_awsl]": { + "id": 2086, + "package_id": 93, + "state": 0, + "type": 3, + "attr": 0, + "text": "[泠鸢yousa_awsl]", + "url": "http://i0.hdslb.com/bfs/emote/7663b729161bd4556c2ec318c07791000743eb56.png", + "meta": { + "size": 2 + }, + "mtime": 1589776042 + } + }, + "reply": { + "rpid": 3043212039, + "oid": 243322853, + "type": 1, + "mid": 293793435, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592233764, + "rpid_str": "3043212039", + "root_str": "0", + "parent_str": "0", + "like": 0, + "action": 0, + "member": { + "mid": "293793435", + "uname": "社会易姐QwQ", + "sex": "男", + "sign": "高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨", + "avatar": "http://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "rank": "10000", + "DisplayRank": "0", + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 1888, + "name": "泠鸢yousa", + "image": "http://i0.hdslb.com/bfs/garb/item/3e66e712b8e70c6b02393c54ad5fd8d993eb39f9.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/3e66e712b8e70c6b02393c54ad5fd8d993eb39f9.png" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1612454400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip" + } + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": { + "id": 1888, + "name": "泠鸢yousa", + "image": "http://i0.hdslb.com/bfs/garb/item/3e66e712b8e70c6b02393c54ad5fd8d993eb39f9.png", + "jump_url": "", + "type": "suit" + }, + "cardbg": null, + "cardbg_with_focus": null + } + }, + "content": { + "message": "测试test[泠鸢yousa_awsl]", + "plat": 1, + "device": "", + "members": [], + "emote": { + "[泠鸢yousa_awsl]": { + "id": 2086, + "package_id": 93, + "state": 0, + "type": 3, + "attr": 0, + "text": "[泠鸢yousa_awsl]", + "url": "http://i0.hdslb.com/bfs/emote/7663b729161bd4556c2ec318c07791000743eb56.png", + "meta": { + "size": 2 + }, + "mtime": 1589776042 + } + }, + "jump_url": {}, + "max_line": 0 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false + } + } +} +``` + +</details> + +## 点赞评论 + +> https://api.bilibili.com/x/v2/reply/action + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +点赞成功后会同时消去该评论的点踩 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | -------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 评论区类型代码 | 必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区id | 必要 | | +| rpid | num | 目标评论rpid | 必要 | | +| action | num | 操作代码 | 非必要 | 默认为0<br />0:取消赞<br />1:点赞 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项<br />-509:请求过于频繁<br />12002:评论区已关闭<br />12004:禁止操作 赞或踩<br />12006:没有该评论<br />12009:评论主体的type不合法<br />12011:不合法的赞或踩<br />**(其他错误码有待补充)** | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +点赞视频`av243322853`下评论`rpid=3039053308` + +```shell +curl 'https://api.bilibili.com/x/v2/reply/action' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=243322853' \ +--data-urlencode 'rpid=3039053308' \ +--data-urlencode 'action=1' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 点踩评论 + +> https://api.bilibili.com/x/v2/reply/hate + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +点踩成功后会同时消去该评论的点赞 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | -------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 评论区类型代码 | 必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区id | 必要 | | +| rpid | num | 目标评论rpid | 必要 | | +| action | num | 操作代码 | 非必要 | 默认为0<br />0:取消踩<br />1:点踩 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项<br />-509:请求过于频繁<br />12002:评论区已关闭<br />12004:禁止操作 赞或踩<br />12006:没有该评论<br />12009:评论主体的type不合法<br />12011:不合法的赞或踩<br />**(其他错误码有待补充)** | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +点踩视频`av243322853`下评论`rpid=3039053308` + +```shell +curl 'https://api.bilibili.com/x/v2/reply/hate' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=243322853' \ +--data-urlencode 'rpid=3039053308' \ +--data-urlencode 'action=1' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 删除评论 + +> https://api.bilibili.com/x/v2/reply/del + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +只能删除自己的评论,或自己管理的评论区下的评论 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | -------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 评论区类型代码 | 必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区id | 必要 | | +| rpid | num | 目标评论rpid | 必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-403:权限不足<br />-404:无此项<br />-509:请求过于频繁<br />12002:评论区已关闭<br />12009:评论主体的type不合法<br />12022:已经被删除了<br />**(其他错误码有待补充)** | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | **作用尚不明确** | + +**示例:** + +删除`av243322853`下评论`rpid=3039053308` + +```shell +curl 'https://api.bilibili.com/x/v2/reply/del' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=243322853' \ +--data-urlencode 'rpid=3039053308' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 置顶评论 + +> https://api.bilibili.com/x/v2/reply/top + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +只能置顶自己管理的评论区中的一级评论 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | -------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 评论区类型代码 | 必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区id | 必要 | | +| rpid | num | 目标评论rpid | 必要 | | +| action | num | 操作代码 | 非必要 | 默认为0<br />0:取消置顶<br />1:设为置顶 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-403:权限不足<br />-404:无此项<br />-509:请求过于频繁<br />12002:评论区已关闭<br />12006:没有该评论<br />12009:评论主体的type不合法<br />12029:已经有置顶评论<br />12030:不能置顶非一级评论<br />**(其他错误码有待补充)** | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +置顶视频`av243322853`下评论`rpid=2940645593` + +```shell +curl 'https://api.bilibili.com/x/v2/reply/top' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=243322853' \ +--data-urlencode 'rpid=2940645593' \ +--data-urlencode 'action=1' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 举报评论 + +> https://api.bilibili.com/x/v2/reply/report + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | -------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 评论区类型代码 | 必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区id | 必要 | | +| rpid | num | 目标评论rpid | 必要 | | +| reason | num | 举报类型 | 必要 | **类型代码见下表** | +| content | str | 其他举报备注 | 非必要 | `reason=0`时有效 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +举报类型`reason`: + +| 代码 | 含义 | +| ---- | -------------- | +| 0 | 其他 | +| 1 | 垃圾广告 | +| 2 | 色情 | +| 3 | 刷屏 | +| 4 | 引战 | +| 5 | 剧透 | +| 6 | 政治 | +| 7 | 人身攻击 | +| 8 | 内容不相关 | +| 9 | 违法违规 | +| 10 | 低俗 | +| 11 | 非法网站 | +| 12 | 赌博诈骗 | +| 13 | 传播不实信息 | +| 14 | 怂恿教唆信息 | +| 15 | 侵犯隐私 | +| 16 | 抢楼 | +| 17 | 青少年不良信息 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-403:权限不足<br />-404:无此项<br />-500:服务器错误<br />-509:请求过于频繁<br />12002:评论区已关闭<br />12006:没有该评论<br />12008:已经举报过了<br />12009:评论主体的type不合法<br />12019:举报过于频繁<br />12077:其他举报理由过长或过短<br />**(其他错误码有待补充)** | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +举报视频` av752881391 `下评论`rpid=3062537442`,理由是`引战` + +```shell +curl 'https://api.bilibili.com/x/v2/reply/report' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=752881391' \ +--data-urlencode 'rpid=3062537442' \ +--data-urlencode 'reason=4' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> diff --git a/docs/comment/list.md b/docs/comment/list.md new file mode 100644 index 0000000..e371a4e --- /dev/null +++ b/docs/comment/list.md @@ -0,0 +1,3722 @@ +# 评论区明细 + +## 获取评论区明细_翻页加载 + +> https://api.bilibili.com/x/v2/reply + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | -------------------------------------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| type | num | 评论区类型代码 | 必要 | [类型代码见表](readme.md#评论区类型代码) | +| oid | num | 目标评论区 id | 必要 | | +| sort | num | 排序方式 | 非必要 | 默认为0<br />0:按时间<br />1:按点赞数<br />2:按回复数 | +| nohot | num | 是否不显示热评 | 非必要 | 默认为0<br />1:不显示<br />0:显示 | +| ps | num | 每页项数 | 非必要 | 默认为20<br />定义域:1-20 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此项<br />12002:评论区已关闭<br />12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj<br />错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | -------------------------------- | -------- | ---------------- | +| page | obj | 页信息 | | +| config | obj | 评论区显示控制 | | +| replies | 禁用时:null<br />正常时:array | 评论列表 | | +| hots | 禁用时:null<br />正常时:array | 热评列表 | | +| upper | obj | 置顶评论 | | +| top | null | (?) | | +| notice | 无效时:null<br />有效时:obj | 评论区公告信息 | | +| vote | num | 投票评论? | | +| blacklist | num | (?) | | +| assist | num | (?) | | +| mode | num | 评论区类型id | | +| support_mode | array | 评论区支持的类型id | | +| folder | obj | 折叠相关信息 | | +| lottery_card | null | (?) | | +| show_bvid | bool | 显示bvid? | | +| control | obj | 评论区输入属性 | | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | ---- | +| num | num | 当前页码 | | +| size | num | 每页项数 | | +| count | num | 根评论条数 | | +| acount | num | 总计评论条数 | | + +`data`中的`config`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------------------- | ---- | +| showadmin | num | 是否显示管理置顶 | | +| showentry | num | (?) | | +| showfloor | num | 是否显示楼层号 | | +| showtopic | num | 是否显示话题 | | +| show_up_flag | bool | 是否显示“UP 觉得很赞”标志 | | +| read_only | bool | 是否只读评论区 | | +| show_del_log | bool | 是否显示删除记录 | | + +`data`中的`replies`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | -------------------------------------- | +| 0 | obj | 评论条目 1 | [对象定义见表](readme.md#评论条目对象) | +| n | obj | 评论条目 (n+1) | 按照指定的顺序排列 | +| …… | obj | …… | …… | + +`data`中的`hots`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | -------------------------------------- | +| 0 | obj | 热评条目 1 | [对象定义见表](readme.md#评论条目对象) | +| n | obj | 热评条目 (n+1) | 按照热评热度排列 | +| …… | obj | …… | …… | + +`data`中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----------------------------- | ---------- | -------------------------------------- | +| mid | num | UP 主 mid | | +| top | 有效时:obj<br />无效时:null | 置顶条目 | [对象定义见表](readme.md#评论条目对象) | +| vote | 有效时:obj<br />无效时:null | 投票评论? | | + +`data`中的`notice`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------------- | ---- | +| content | str | 公告正文 | | +| id | num | 公告 id | | +| link | str | 公告页面链接 url | | +| title | str | 公告标题 | | + +`data`中的`folder`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------------- | ---- | +| has_folded | bool | 评论区是否存在折叠评论 | | +| is_folded | bool | 是否折叠? | | +| rule | str | 相关规则页面 url | | + +`data`中的`control`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------ | ---- | ------------------ | ----------------------------------- | +| input_disable | bool | 是否禁止新增评论 | 用户涉及合约争议,锁定该用户所有稿件、动态的评论区,不允许新增评论,`root_input_text`和`child_input_text`值为“当前评论区不可新增评论” | +| root_input_text | str | 评论框文字 | | +| child_input_text | str | 评论框文字 | | +| bg_text | str | 空评论区文字 | | +| web_selection | bool | 评论是否筛选后可见 | false:无需筛选<br />true:需要筛选 | +| answer_guide_text | str | 答题页面链接文字 | | +| answer_guide_icon_url | str | 答题页面图标 url | | +| answer_guide_ios_url | str | 答题页面 ios url | | +| answer_guide_android_url | str | 答题页面安卓 url | | + +**示例:** + +获取视频`av2`的评论区明细,不显示热评,按照热度排序,每页5项,查看第1页 + +```shell +curl -G 'https://api.bilibili.com/x/v2/reply' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=2' \ +--data-urlencode 'sort=1' \ +--data-urlencode 'ps=5' \ +--data-urlencode 'pn=1' \ +--data-urlencode 'nohot=1' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "page": { + "num": 1, + "size": 5, + "count": 60971, + "acount": 76792 + }, + "config": { + "showadmin": 1, + "showentry": 1, + "showfloor": 0, + "showtopic": 1, + "show_up_flag": true, + "read_only": false, + "show_del_log": false + }, + "replies": [ + { + "rpid": 104192624480, + "oid": 2, + "type": 1, + "mid": 621197713, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1646205507, + "rpid_str": "104192624480", + "root_str": "0", + "parent_str": "0", + "like": 1, + "action": 0, + "member": { + "mid": "621197713", + "uname": "小鹿不跑路", + "sex": "保密", + "sign": "", + "avatar": "http://i1.hdslb.com/bfs/face/3e220c95ead8f2bc72bd2dcee72d195b723192fa.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 4, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1648051200000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "大会员", + "label_theme": "vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "我赶上了我们这个年龄段二次元的末班车,这一年,巨人出了最终季,诚哥的新作玲芽户缔(好像是叫这个)也要在今年秋上映,后悔没有早进入这个圈子,现在只好紧追慢赶,慢慢的补番,我小时候都在干什么啊[大哭]", + "plat": 0, + "device": "", + "members": [], + "emote": { + "[大哭]": { + "id": 5, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[大哭]", + "url": "http://i0.hdslb.com/bfs/emote/2caafee2e5db4db72104650d87810cc2c123fc86.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918, + "jump_title": "大哭" + } + }, + "jump_url": {}, + "max_line": 6 + }, + "replies": [], + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "6小时前发布" + } + }, + { + "rpid": 104184937184, + "oid": 2, + "type": 1, + "mid": 560450695, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1646199089, + "rpid_str": "104184937184", + "root_str": "0", + "parent_str": "0", + "like": 0, + "action": 0, + "member": { + "mid": "560450695", + "uname": "還講幾韆", + "sex": "保密", + "sign": "", + "avatar": "http://i1.hdslb.com/bfs/face/e8bcd1f3fed1a8b266e83f7e5952db525b692227.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 3, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "电视宇宙第二个视频[滑稽][滑稽][滑稽]", + "plat": 0, + "device": "", + "members": [], + "emote": { + "[滑稽]": { + "id": 27, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[滑稽]", + "url": "http://i0.hdslb.com/bfs/emote/d15121545a99ac46774f1f4465b895fe2d1411c3.png", + "meta": { + "size": 1 + }, + "mtime": 1645206695, + "jump_title": "滑稽" + } + }, + "jump_url": {}, + "max_line": 6 + }, + "replies": [], + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "7小时前发布" + } + }, + { + "rpid": 104179775904, + "oid": 2, + "type": 1, + "mid": 1616523766, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1646195814, + "rpid_str": "104179775904", + "root_str": "0", + "parent_str": "0", + "like": 1, + "action": 0, + "member": { + "mid": "1616523766", + "uname": "关查者网", + "sex": "保密", + "sign": "", + "avatar": "http://i1.hdslb.com/bfs/face/8bb6aab1f6bcc960f4482aa97b8ca4e61cf81d0d.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 3, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1626451200000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "考古队已到达[doge]", + "plat": 0, + "device": "", + "members": [], + "emote": { + "[doge]": { + "id": 26, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[doge]", + "url": "http://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png", + "meta": { + "size": 1 + }, + "mtime": 1645206695, + "jump_title": "doge" + } + }, + "jump_url": {}, + "max_line": 6 + }, + "replies": [], + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "8小时前发布" + } + }, + { + "rpid": 104163851152, + "oid": 2, + "type": 1, + "mid": 27553613, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1646183484, + "rpid_str": "104163851152", + "root_str": "0", + "parent_str": "0", + "like": 1, + "action": 0, + "member": { + "mid": "27553613", + "uname": "念晚心", + "sex": "男", + "sign": "", + "avatar": "http://i2.hdslb.com/bfs/face/8b8f32c22651904a23eeb83b048041b7c1c8ffd6.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 74, + "name": "大会员2018年度勋章", + "image": "http://i2.hdslb.com/bfs/face/421179426c929dfeaed4117461c83f5d07ffb148.png", + "image_small": "http://i0.hdslb.com/bfs/face/682001c2e1c2ae887bdf2a0e18eef61180c48f84.png", + "level": "稀有勋章", + "condition": "2018.6.26-7.8某一天是年度大会员" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1650470400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", + "nickname_color": "#FB7299" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": { + "id": 5476, + "name": "嘉然今天吃什么", + "image": "http://i0.hdslb.com/bfs/garb/item/4442641bd4001214518a81fa8f790ae7469d3cf7.png", + "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/5461?navhide=1&mid=27553613&from=reply", + "fan": { + "is_fan": 1, + "number": 14705, + "color": "#f76a6b", + "name": "嘉然今天吃什么", + "num_desc": "014705" + }, + "type": "suit" + }, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "当时只看优酷和土豆", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 6 + }, + "replies": [], + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "12小时前发布" + } + }, + { + "rpid": 104163545120, + "oid": 2, + "type": 1, + "mid": 31937033, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1646183209, + "rpid_str": "104163545120", + "root_str": "0", + "parent_str": "0", + "like": 1, + "action": 0, + "member": { + "mid": "31937033", + "uname": "夜声已尽", + "sex": "男", + "sign": "六八四十二", + "avatar": "http://i2.hdslb.com/bfs/face/e35e81a00596883532ba47c58ca0434618fab3d0.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 33465, + "name": "乃琳Queen", + "image": "http://i2.hdslb.com/bfs/garb/item/4ad130e4068f88c54728ac510a172b97e187826f.png", + "expire": 0, + "image_enhance": "http://i2.hdslb.com/bfs/garb/item/4ad130e4068f88c54728ac510a172b97e187826f.png", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 62, + "name": "有爱大佬", + "image": "http://i0.hdslb.com/bfs/face/a10ee6b613e0d68d2dfdac8bbf71b94824e10408.png", + "image_small": "http://i2.hdslb.com/bfs/face/54f4c31ab9b1f1fa2c29dbbc967f66535699337e.png", + "level": "普通勋章", + "condition": "当前持有粉丝勋章最高等级>=15级" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1671465600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", + "nickname_color": "#FB7299" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": { + "id": 33465, + "name": "乃琳Queen", + "image": "http://i0.hdslb.com/bfs/garb/item/4ad130e4068f88c54728ac510a172b97e187826f.png", + "jump_url": "", + "type": "suit", + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/4ad130e4068f88c54728ac510a172b97e187826f.png", + "image_enhance_frame": "" + }, + "cardbg": { + "id": 33494, + "name": "乃琳Queen", + "image": "http://i0.hdslb.com/bfs/garb/item/34f8c1ef43332883f62e17fed44c1a70930e4811.png", + "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/33498?navhide=1&mid=31937033&from=reply", + "fan": { + "is_fan": 1, + "number": 50766, + "color": "#576690", + "name": "乃琳Queen", + "num_desc": "050766" + }, + "type": "suit" + }, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "考古", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 6 + }, + "replies": [], + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "12小时前发布" + } + } + ], + "hots": [], + "upper": { + "mid": 2, + "top": null, + "vote": null + }, + "top": null, + "notice": null, + "vote": 0, + "blacklist": 0, + "assist": 0, + "mode": 3, + "support_mode": [ + 1, + 2, + 3 + ], + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "lottery_card": null, + "show_bvid": false, + "control": { + "input_disable": false, + "root_input_text": "发一条友善的评论", + "child_input_text": "", + "giveup_input_text": "不发没关系,请继续友善哦~", + "bg_text": "看看下面~来发评论吧", + "web_selection": false, + "answer_guide_text": "需要升级成为lv2会员后才可以评论,先去答题转正吧!", + "answer_guide_icon_url": "http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png", + "answer_guide_ios_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12", + "answer_guide_android_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6", + "show_type": 1, + "show_text": "", + "disable_jump_emote": false + } + } +} +``` + +</details> + +## 获取评论区明细_懒加载 + +> https://api.bilibili.com/x/v2/reply/wbi/main + +> ~~https://api.bilibili.com/x/v2/reply/main~~ + +*请求方式:GET* + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +注: Wbi 签名错误时返回 -403 而非 -352 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ------------------------------------------------------------ | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| type | num | 评论区类型代码 | 必要 | [类型代码见表](readme.md#评论区类型代码) | +| oid | num | 目标评论区 id | 必要 | | +| mode | num | 排序方式 | 非必要 | 默认为 3<br />0 3:仅按热度<br />1:按热度+按时间<br />2:仅按时间 | +| next | num | 翻页 | 非必要 | 不推荐, 已弃用, 优先级比 `pagination_str` 高 | +| pagination_str | obj | 分页信息 | 非必要 | 见下 | +| plat | num | 平台类型 | 非必要 | 如 `1` | +| seek_rpid | str | 空 | 非必要 | 当获取第一页评论时存在 | +| web_location | str | 1315875 | 非必要 | | + +`pagination_str`: + +| 参数名 | 类型 | 内容 | 备注 | +| ----- | - | ------|------| +| offset | str | 一个套着字符串皮的 JSON Object | 上次响应 `data.cursor.pagination_reply.next_offset` 的值, 获取第一页时为空, 其余见下参考 | + +`pagination_str` 中的 `offset`: + +| 参数名 | 类型 | 内容 | 备注 | +| ----- | ---- | -- | - | +| type | num | 类型 | 当 URL 参数 mode 为 2 时, 此项为 3<br />当 URL 参数 mode 为 3 时, 此项为 1 | +| direction | num | 方向 | 1: 正序(默认)<br />2: 倒序 | +| data | obj | 分页数据 | 当 type 为 1 时存在 | +| Data | obj | 分页数据 | 当 type 为 3 时存在 | +<!--not typo here--> + +`offset` 中的 `data` (type=1): + +| 参数名 | 类型 | 内容 | 备注 | +| - | - | - | - | +| pn | num | 页码 (上次响应 `data.cursor.next` 的值) | | + +`offset` 中的 `Data` (type=3): + +| 参数名 | 类型 | 内容 | 备注 | +| - | - | - | - | +| cursor | num | 上次响应 `data.cursor.next` 的值 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此项<br />12002:评论区已关闭<br />12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj<br />错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | -------------------------------- | -------- | ---------------- | +| cursor | obj | 游标信息 | | +| hots | 禁用时:null<br />正常时:array | 热评列表 | | +| notice | 无效时:null<br />有效时:obj | 评论区公告信息 | | +| replies | 禁用时:null<br />正常时:array | 评论列表 | | +| top | obj | 置顶信息 | | +| top_replies | obj | 置顶评论 | [对象定义见表](readme.md#评论条目对象) | +| lottery_card | null | 抽奖评论 | | +| folder | obj | 评论折叠信息 | | +| up_selection | obj | (?) | | +| cm | obj | 广告 | | +| cm_info | obj | 广告控制 | | +| effects | obj | (?) | | +| assist | num | (?) | | +| blacklist | num | (?) | | +| vote | num | (?) | | +| lottery | num | (?) | | +| config | obj | 评论区显示控制 | | +| upper | obj | UP主信息 | | +| show_bvid | bool | 显示 bvid? | | +| control | obj | 评论区输入属性 | | +| note | num | 1 | | +| esports_grade_card | null | | | +| callbacks | null | | | +| context_feature | str | | | + +`data`中的`cursor`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ----- | -------------- | ----------------------- | +| all_count | num | 全部评论条数 | | +| is_begin | bool | 是否为第一页 | false:否<br />true:是 | +| prev | num | 上页页码 | | +| next | num | 下页页码 | | +| is_end | bool | 是否为最后页 | false:否<br />true:是 | +| mode | num | 排序方式 | | +| support_mode | array | 支持的排序方式 | | +| name | str | 评论区类型名 | | +| pagination_reply | str | 用于下一次请求的偏移信息 | | +| session_id | str | 空 | | + +`cursor`中的`pagination_reply`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -- | - | +| next_offset | str | 用于下一次请求的偏移信息 | | +| prev_offset | str | 用于本次请求的偏移信息 | | + +`data`中的`config`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------------------- | ---- | +| showadmin | num | 是否显示管理置顶 | | +| showentry | num | ? | | +| showfloor | num | 是否显示楼层号 | | +| showtopic | num | 是否显示话题 | | +| show_up_flag | bool | 是否显示“UP 觉得很赞”标志 | | +| read_only | bool | 是否只读评论区 | | +| show_del_log | bool | 是否显示删除记录 | | + +`data`中的`hots`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | -------------------------------------- | +| 0 | obj | 热评条目 1 | [对象定义见表](readme.md#评论条目对象) | +| n | obj | 热评条目 (n+1) | 按照热评热度排列 | +| …… | obj | …… | …… | + +`data`中的`replies`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | -------------------------------------- | +| 0 | obj | 评论条目 1 | [对象定义见表](readme.md#评论条目对象) | +| n | obj | 评论条目 (n+1) | 按照指定的顺序排列 | +| …… | obj | …… | …… | + +`data`中的`top`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----------------------------- | -------------- | -------------------------------------- | +| admin | 有效时:obj<br />无效时:null | 管理员置顶条目 | [对象定义见表](readme.md#评论条目对象) | +| upper | 有效时:obj<br />无效时:null | UP 主置顶条目 | [对象定义见表](readme.md#评论条目对象) | +| vote | 有效时:obj<br />无效时:null | 投票置顶条目 | [对象定义见表](readme.md#评论条目对象) | + +`data`中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| mid | num | UP 主 mid | | + +`data`中的`notice`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------------- | ---- | +| content | str | 公告正文 | | +| id | num | 公告 id | | +| link | str | 公告页面链接 url | | +| title | str | 公告标题 | | + +`data`中的`folder`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------------- | ---- | +| has_folded | bool | 评论区是否存在折叠评论 | | +| is_folded | bool | 是否折叠? | | +| rule | str | 相关规则页面 url | | + +`data`中的`control`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------ | ---- | ------------------ | ----------------------------------- | +| input_disable | bool | (?) | | +| root_input_text | str | 评论框文字 | | +| child_input_text | str | 评论框文字 | | +| bg_text | str | 空评论区文字 | | +| web_selection | bool | 评论是否筛选后可见 | false:无需筛选<br />true:需要筛选 | +| answer_guide_text | str | 答题页面链接文字 | | +| answer_guide_icon_url | str | 答题页面图标 url | | +| answer_guide_ios_url | str | 答题页面 ios url | | +| answer_guide_android_url | str | 答题页面安卓 url | | + +**示例:** + +获取视频`av2`的评论区明细, 按时间排序, 第一页 + +```shell +curl -G 'https://api.bilibili.com/x/v2/reply/wbi/main' \ +--data-urlencode 'oid=2' \ +--data-urlencode 'type=1' \ +--data-urlencode 'mode=2' \ +--data-urlencode 'w_rid=xxx' \ +--data-urlencode 'wts=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "cursor": { + "is_begin": true, + "prev": 71880, + "next": 71859, + "is_end": false, + "mode": 2, + "mode_text": "", + "all_count": 86234, + "support_mode": [ + 2, + 3 + ], + "name": "最新评论", + "pagination_reply": { + "next_offset": "{\"type\":3,\"direction\":1,\"Data\":{\"cursor\":71859}}" + }, + "session_id": "" + }, + "replies": [ + { + "rpid": 237740291920, + "oid": 2, + "type": 1, + "mid": 1201423076, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1723639342, + "mid_str": "1201423076", + "oid_str": "2", + "rpid_str": "237740291920", + "root_str": "0", + "parent_str": "0", + "dialog_str": "0", + "like": 0, + "action": 0, + "member": { + "mid": "1201423076", + "uname": "天堂いyoulin", + "sex": "保密", + "sign": "", + "avatar": "https://i2.hdslb.com/bfs/face/d0925e782198cadc0c400a3ed4fbdf94142357fb.jpg", + "rank": "10000", + "face_nft_new": 0, + "is_senior_member": 0, + "senior": {}, + "level_info": { + "current_level": 4, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0 + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "user_sailing_v2": {}, + "is_contractor": false, + "contract_desc": "", + "nft_interaction": null, + "avatar_item": { + "container_size": { + "width": 1.8, + "height": 1.8 + }, + "fallback_layers": { + "layers": [ + { + "visible": true, + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.9, + "axis_y": 0.9 + }, + "size_spec": { + "width": 1, + "height": 1 + }, + "render_spec": { + "opacity": 1 + } + }, + "layer_config": { + "tags": { + "AVATAR_LAYER": {} + }, + "is_critical": true, + "layer_mask": { + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.9, + "axis_y": 0.9 + }, + "size_spec": { + "width": 1, + "height": 1 + }, + "render_spec": { + "opacity": 1 + } + }, + "mask_src": { + "src_type": 3, + "draw": { + "draw_type": 1, + "fill_mode": 1, + "color_config": { + "day": { + "argb": "#FF000000" + } + } + } + } + } + }, + "resource": { + "res_type": 3, + "res_image": { + "image_src": { + "src_type": 1, + "placeholder": 6, + "remote": { + "url": "https://i2.hdslb.com/bfs/face/d0925e782198cadc0c400a3ed4fbdf94142357fb.jpg", + "bfs_style": "widget-layer-avatar" + } + } + } + } + } + ], + "is_critical_group": true + }, + "mid": "1201423076" + } + }, + "content": { + "message": "好多20年和18年的[辣眼睛]", + "members": [], + "emote": { + "[辣眼睛]": { + "id": 2374, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[辣眼睛]", + "url": "https://i0.hdslb.com/bfs/emote/35d62c496d1e4ea9e091243fa812866f5fecc101.png", + "meta": { + "size": 1, + "suggest": [ + "" + ] + }, + "mtime": 1668688325, + "jump_title": "辣眼睛" + } + }, + "jump_url": {}, + "max_line": 6 + }, + "replies": [], + "assist": 0, + "up_action": { + "like": false, + "reply": false + }, + "invisible": false, + "reply_control": { + "max_line": 6, + "time_desc": "21分钟前发布", + "location": "IP属地:河北" + }, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "dynamic_id_str": "0", + "note_cvid_str": "0", + "track_info": "" + }, + // ... + { + "rpid": 237689432448, + "oid": 2, + "type": 1, + "mid": 1647250883, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1723624563, + "mid_str": "1647250883", + "oid_str": "2", + "rpid_str": "237689432448", + "root_str": "0", + "parent_str": "0", + "dialog_str": "0", + "like": 1, + "action": 0, + "member": { + "mid": "1647250883", + "uname": "小烟同学424", + "sex": "保密", + "sign": "墓前玩使命,墓前暑假", + "avatar": "https://i2.hdslb.com/bfs/face/930661ca1bcacf8005efcca499b7380dcd4c2716.jpg", + "rank": "10000", + "face_nft_new": 0, + "is_senior_member": 0, + "senior": {}, + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0 + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "user_sailing_v2": {}, + "is_contractor": false, + "contract_desc": "", + "nft_interaction": null, + "avatar_item": { + "container_size": { + "width": 1.8, + "height": 1.8 + }, + "fallback_layers": { + "layers": [ + { + "visible": true, + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.9, + "axis_y": 0.9 + }, + "size_spec": { + "width": 1, + "height": 1 + }, + "render_spec": { + "opacity": 1 + } + }, + "layer_config": { + "tags": { + "AVATAR_LAYER": {} + }, + "is_critical": true, + "layer_mask": { + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.9, + "axis_y": 0.9 + }, + "size_spec": { + "width": 1, + "height": 1 + }, + "render_spec": { + "opacity": 1 + } + }, + "mask_src": { + "src_type": 3, + "draw": { + "draw_type": 1, + "fill_mode": 1, + "color_config": { + "day": { + "argb": "#FF000000" + } + } + } + } + } + }, + "resource": { + "res_type": 3, + "res_image": { + "image_src": { + "src_type": 1, + "placeholder": 6, + "remote": { + "url": "https://i2.hdslb.com/bfs/face/930661ca1bcacf8005efcca499b7380dcd4c2716.jpg", + "bfs_style": "widget-layer-avatar" + } + } + } + } + } + ], + "is_critical_group": true + }, + "mid": "1647250883" + } + }, + "content": { + "message": "还。。。有人吗?", + "members": [], + "jump_url": {}, + "max_line": 6 + }, + "replies": [], + "assist": 0, + "up_action": { + "like": false, + "reply": false + }, + "invisible": false, + "reply_control": { + "max_line": 6, + "time_desc": "4小时前发布", + "location": "IP属地:陕西" + }, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "dynamic_id_str": "0", + "note_cvid_str": "0", + "track_info": "" + } + ], + "top": { + "admin": null, + "upper": null, + "vote": null + }, + "top_replies": [], + "up_selection": { + "pending_count": 0, + "ignore_count": 0 + }, + "effects": { + "preloading": "" + }, + "assist": 0, + "blacklist": 0, + "vote": 0, + "config": { + "showtopic": 1, + "show_up_flag": true, + "read_only": false + }, + "upper": { + "mid": 2 + }, + "control": { + "input_disable": false, + "root_input_text": "你渴望拥有力量吗?评论让力量更强大", + "child_input_text": "你渴望拥有力量吗?评论让力量更强大", + "giveup_input_text": "不发没关系,请继续友善哦~", + "screenshot_icon_state": 1, + "upload_picture_icon_state": 1, + "answer_guide_text": "需要升级成为lv2会员后才可以评论,先去答题转正吧!", + "answer_guide_icon_url": "http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png", + "answer_guide_ios_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12", + "answer_guide_android_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6", + "bg_text": "", + "empty_page": null, + "show_type": 1, + "show_text": "", + "web_selection": false, + "disable_jump_emote": false, + "enable_charged": false, + "enable_cm_biz_helper": false, + "preload_resources": null + }, + "note": 1, + "esports_grade_card": null, + "callbacks": null, + "context_feature": "" + } +} +``` + +</details> + +## 获取指定评论的回复 + +> https://api.bilibili.com/x/v2/reply/reply + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +按照回复顺序排序 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---------------------------------------- | +| access_key | str | APP登录 Token | APP 方式必要 | | +| type | num | 评论区类型代码 | 必要 | [类型代码见表](readme.md#评论区类型代码) | +| oid | num | 目标评论区 id | 必要 | | +| root | num | 根回复 rpid | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为20<br />定义域:1-49 <br /> 但 data_replies 的最大内容数为20,因此设置为49其实也只会有20条回复被返回 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此项<br />12002:评论区已关闭<br />12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj<br />错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------------- | -------------------------------------- | +| config | obj | 评论区显示控制 | | +| control | obj | 评论区输入属性 | | +| page | obj | 页面信息 | | +| replies | array | 评论对话树列表 | 最大内容数为20 | +| root | obj | 根评论信息 | [对象定义见表](readme.md#评论条目对象) | +| show_bvid | bool | 显示 bvid? | | +| show_text | str | (?) | | +| show_type | num | (?) | | +| upper | obj | UP主 mid | | + +`data`中的`config`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------------------ | ---- | +| showadmin | num | 是否显示管理置顶 | | +| showentry | num | ? | | +| showfloor | num | 是否显示楼层号 | | +| showtopic | num | 是否显示话题 | | +| show_up_flag | bool | 是否显示“UP觉得很赞”标志 | | +| read_only | bool | 是否只读评论区 | | +| show_del_log | bool | 是否显示删除记录 | | + +`data`中的`control`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------ | ---- | ------------------ | ----------------------------------- | +| input_disable | bool | (?) | | +| root_input_text | str | 评论框文字 | | +| child_input_text | str | 评论框文字 | | +| bg_text | str | 空评论区文字 | | +| web_selection | bool | 评论是否筛选后可见 | false:无需筛选<br />true:需要筛选 | +| answer_guide_text | str | 答题页面链接文字 | | +| answer_guide_icon_url | str | 答题页面图标 url | | +| answer_guide_ios_url | str | 答题页面 ios url | | +| answer_guide_android_url | str | 答题页面安卓 url | | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ---- | +| count | num | 二级评论数 | | +| num | num | 当前页码 | | +| size | num | 每页项数 | | + +`data`中的`replies`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------ | -------------------------------------- | +| 0 | obj | 对话评论条目 1 | [对象定义见表](readme.md#评论条目对象) | +| n | obj | 对话评论条目 (n+1) | 按照回复顺序排列 | +| …… | obj | …… | …… | + +`data`中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| mid | num | UP 主 mid | | + +**示例:** + +获取视频`av201022189`下评论`rpid=3030790837`的回复,每页5项,获取第1页 + +```shell +curl -G 'https://api.bilibili.com/x/v2/reply/reply' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=201022189' \ +--data-urlencode 'root=3030790837' \ +--data-urlencode 'ps=5' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "config": { + "showadmin": 0, + "showentry": 0, + "showfloor": 0, + "showtopic": 0, + "show_up_flag": false, + "read_only": false, + "show_del_log": false + }, + "control": { + "input_disable": false, + "root_input_text": "发一条友善的评论", + "child_input_text": "", + "giveup_input_text": "不发没关系,请继续友善哦~", + "bg_text": "看看下面~来发评论吧", + "web_selection": false, + "answer_guide_text": "需要升级成为lv2会员后才可以评论,先去答题转正吧!", + "answer_guide_icon_url": "http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png", + "answer_guide_ios_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12", + "answer_guide_android_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6", + "show_type": 1, + "show_text": "", + "disable_jump_emote": false + }, + "page": { + "count": 230, + "num": 1, + "size": 5 + }, + "replies": [ + { + "rpid": 3030802207, + "oid": 201022189, + "type": 1, + "mid": 172604528, + "root": 3030790837, + "parent": 3030790837, + "dialog": 3030802207, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592018067, + "rpid_str": "3030802207", + "root_str": "3030790837", + "parent_str": "3030790837", + "like": 41, + "action": 0, + "member": { + "mid": "172604528", + "uname": "超高校级的认真", + "sex": "男", + "sign": "just do it for yourself", + "avatar": "http://i2.hdslb.com/bfs/face/d0d957faa6162388467cb0750a9d33cf616e73e9.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1626364800000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "怎么上p站呀,翻吗", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "627天前发布" + } + }, + { + "rpid": 3030810089, + "oid": 201022189, + "type": 1, + "mid": 342581997, + "root": 3030790837, + "parent": 3030802207, + "dialog": 3030802207, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592018123, + "rpid_str": "3030810089", + "root_str": "3030790837", + "parent_str": "3030802207", + "like": 7, + "action": 0, + "member": { + "mid": "342581997", + "uname": "VAN样斯基", + "sex": "保密", + "sign": "", + "avatar": "http://i0.hdslb.com/bfs/face/bc9c6d37b5a4c8b3b0a3cd483fd66e63b1ae0cec.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1626364800000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "回复 @中等校级的努力 :是啊", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "627天前发布" + } + }, + { + "rpid": 3030843245, + "oid": 201022189, + "type": 1, + "mid": 92586428, + "root": 3030790837, + "parent": 3030790837, + "dialog": 3030843245, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592018688, + "rpid_str": "3030843245", + "root_str": "3030790837", + "parent_str": "3030790837", + "like": 588, + "action": 0, + "member": { + "mid": "92586428", + "uname": "浪潮工作室", + "sex": "保密", + "sign": "洞见时代的浪潮。", + "avatar": "http://i2.hdslb.com/bfs/face/67f183f13f8fe3afb374916d32f9810df8ef042a.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": 0, + "desc": "专栏优质UP主" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "不会吧不会吧,不会真的有人上P站不是为了学习吧", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "627天前发布" + } + }, + { + "rpid": 3030881609, + "oid": 201022189, + "type": 1, + "mid": 393121222, + "root": 3030790837, + "parent": 3030802207, + "dialog": 3030802207, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592019208, + "rpid_str": "3030881609", + "root_str": "3030790837", + "parent_str": "3030802207", + "like": 110, + "action": 0, + "member": { + "mid": "393121222", + "uname": "鱼氏博物馆", + "sex": "保密", + "sign": "", + "avatar": "http://i1.hdslb.com/bfs/face/f61a8ea36828884d760d855293136a838fa9e848.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1602691200000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "回复 @中等校级的努力 :p是什么,当然是plane啦,plane站其实就是✈场[doge]所以去p站就是去✈场啦", + "plat": 0, + "device": "", + "members": [], + "emote": { + "[doge]": { + "id": 26, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[doge]", + "url": "http://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png", + "meta": { + "size": 1 + }, + "mtime": 1645206695, + "jump_title": "doge" + } + }, + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "627天前发布" + } + }, + { + "rpid": 3030978856, + "oid": 201022189, + "type": 1, + "mid": 11814633, + "root": 3030790837, + "parent": 3030790837, + "dialog": 3030978856, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592020635, + "rpid_str": "3030978856", + "root_str": "3030790837", + "parent_str": "3030790837", + "like": 60, + "action": 0, + "member": { + "mid": "11814633", + "uname": "我到四川省来", + "sex": "保密", + "sign": "保持内心的平静", + "avatar": "http://i0.hdslb.com/bfs/face/1c7cad967633c718ddef302f4aa39efaed53a2e4.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 1885, + "name": "公主连结凯露", + "image": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 3, + "name": "白银殿堂", + "image": "http://i0.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png", + "image_small": "http://i0.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png", + "level": "高级勋章", + "condition": "单个自制视频总播放数>=10万" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1715270400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", + "nickname_color": "#FB7299" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": { + "id": 1885, + "name": "公主连结凯露", + "image": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "jump_url": "", + "type": "vip", + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "image_enhance_frame": "" + }, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "看有机化学考研视频", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "627天前发布" + } + } + ], + "root": { + "rpid": 3030790837, + "oid": 201022189, + "type": 1, + "mid": 342581997, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 268, + "rcount": 230, + "state": 0, + "fansgrade": 0, + "attr": 768, + "ctime": 1592017909, + "rpid_str": "3030790837", + "root_str": "0", + "parent_str": "0", + "like": 8018, + "action": 0, + "member": { + "mid": "342581997", + "uname": "VAN样斯基", + "sex": "保密", + "sign": "", + "avatar": "http://i0.hdslb.com/bfs/face/bc9c6d37b5a4c8b3b0a3cd483fd66e63b1ae0cec.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1626364800000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "去P站当然只是为了学习啊[doge]", + "plat": 0, + "device": "", + "members": [], + "emote": { + "[doge]": { + "id": 26, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[doge]", + "url": "http://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png", + "meta": { + "size": 1 + }, + "mtime": 1645206695, + "jump_title": "doge" + } + }, + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "up_action": { + "like": true, + "reply": true + }, + "show_follow": false, + "invisible": false, + "card_label": [ + { + "rpid": 3030790837, + "text_content": "UP主觉得很赞", + "text_color_day": "#757575", + "text_color_night": "#939393", + "label_color_day": "#F4F4F4", + "label_color_night": "#1E1E1E", + "image": "", + "type": 0, + "background": "", + "background_width": 0, + "background_height": 0, + "jump_url": "" + } + ], + "reply_control": { + "up_reply": true, + "sub_reply_entry_text": "共230条回复", + "sub_reply_title_text": "相关回复共230条", + "time_desc": "627天前发布" + } + }, + "show_bvid": true, + "show_text": "", + "show_type": 2, + "upper": { + "mid": 92586428 + } + } +} +``` + +</details> + +## 获取指定评论对话树 + +> https://api.bilibili.com/x/v2/reply/dialog/cursor + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +按照对话链排列 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---------------------------------------- | +| access_key | str | APP登录 Token | APP 方式必要 | | +| type | num | 评论区类型代码 | 必要 | [类型代码见表](readme.md#评论区类型代码) | +| oid | num | 目标评论区 id | 必要 | | +| root | num | 根回复 rpid | 必要 | | +| dialog | num | 对话树根 rpid | 必要 | | +| size | num | 每页最大项数 | 必要 | | +| min_floor | num | (?) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此项<br />12002:评论区已关闭<br />12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj<br />错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------------- | ---- | +| cursor | obj | 页楼层信息 | | +| dialog | obj | 对话楼层信息 | | +| replies | array | 评论对话树列表 | | +| assist | num | (?) | | +| blacklist | num | (?) | | +| vote | num | (?) | | +| lottery | num | (?) | | +| config | obj | 评论区显示控制 | | +| upper | obj | UP主 mid | | +| show_bvid | bool | 显示 bvid? | | +| control | obj | 评论区输入属性 | | +| note | num | (?) | | + +`data`中的`cursor`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------------- | ---- | +| min_floor | num | 本页最低对话楼层 | | +| max_floor | num | 本页最高对话楼层 | | +| size | num | 本页项数 | | + +`data`中的`dialog`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------------------- | ---- | +| min_floor | num | 二级评论最低对话楼层 | | +| max_floor | num | 二级评论最高对话楼层 | | + +`data`中的`replies`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------ | -------------------------------------- | +| 0 | obj | 对话评论条目 1 | [对象定义见表](readme.md#评论条目对象) | +| n | obj | 对话评论条目 (n+1) | 按照对话链排列 | +| …… | obj | …… | …… | + +`data`中的`config`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------------------- | ---- | +| showadmin | num | 是否显示管理置顶 | | +| showentry | num | ? | | +| showfloor | num | 是否显示楼层号 | | +| showtopic | num | 是否显示话题 | | +| show_up_flag | bool | 是否显示“UP 觉得很赞”标志 | | +| read_only | bool | 是否只读评论区 | | +| show_del_log | bool | 是否显示删除记录 | | + +`data`中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| mid | num | UP 主 mid | | + +`data`中的`control`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------ | ---- | ------------------ | ----------------------------------- | +| input_disable | bool | (?) | | +| root_input_text | str | 评论框文字 | | +| child_input_text | str | 评论框文字 | | +| bg_text | str | 空评论区文字 | | +| web_selection | bool | 评论是否筛选后可见 | false:无需筛选<br />true:需要筛选 | +| answer_guide_text | str | 答题页面链接文字 | | +| answer_guide_icon_url | str | 答题页面图标 url | | +| answer_guide_ios_url | str | 答题页面 ios url | | +| answer_guide_android_url | str | 答题页面安卓 url | | + +**示例:** + +获取视频`av201022189`下评论`rpid=3030790837`的对话`rpid=3030978856`,每页最大5项 + +```shell +curl -G 'https://api.bilibili.com/x/v2/reply/dialog/cursor' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=201022189' \ +--data-urlencode 'root=3030790837' \ +--data-urlencode 'dialog=3030978856' \ +--data-urlencode 'size=5' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "cursor": { + "min_floor": 5, + "max_floor": 99, + "size": 5 + }, + "dialog": { + "min_floor": 0, + "max_floor": 243 + }, + "replies": [ + { + "rpid": 3030978856, + "oid": 201022189, + "type": 1, + "mid": 11814633, + "root": 3030790837, + "parent": 3030790837, + "dialog": 3030978856, + "count": 0, + "rcount": 0, + "floor": 5, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592020635, + "rpid_str": "3030978856", + "root_str": "3030790837", + "parent_str": "3030790837", + "like": 60, + "action": 0, + "member": { + "mid": "11814633", + "uname": "我到四川省来", + "sex": "保密", + "sign": "保持内心的平静", + "avatar": "http://i0.hdslb.com/bfs/face/1c7cad967633c718ddef302f4aa39efaed53a2e4.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 1885, + "name": "公主连结凯露", + "image": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 3, + "name": "白银殿堂", + "image": "http://i2.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png", + "image_small": "http://i0.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png", + "level": "高级勋章", + "condition": "单个自制视频总播放数>=10万" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1715270400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", + "nickname_color": "#FB7299" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": { + "id": 1885, + "name": "公主连结凯露", + "image": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "jump_url": "", + "type": "vip", + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "image_enhance_frame": "" + }, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "看有机化学考研视频", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "627天前发布" + } + }, + { + "rpid": 3049044835, + "oid": 201022189, + "type": 1, + "mid": 34598825, + "root": 3030790837, + "parent": 3032092982, + "dialog": 3030978856, + "count": 0, + "rcount": 0, + "floor": 54, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592368714, + "rpid_str": "3049044835", + "root_str": "3030790837", + "parent_str": "3032092982", + "like": 1, + "action": 0, + "member": { + "mid": "34598825", + "uname": "人宇君sayo", + "sex": "男", + "sign": "", + "avatar": "http://i2.hdslb.com/bfs/face/bf61490cabaedd8e98740f2c98a342ac6d2c607d.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1629561600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "回复 @緑箭口香糖 :牛的", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "623天前发布" + } + }, + { + "rpid": 3049581999, + "oid": 201022189, + "type": 1, + "mid": 479083152, + "root": 3030790837, + "parent": 3030978856, + "dialog": 3030978856, + "count": 0, + "rcount": 0, + "floor": 93, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592378703, + "rpid_str": "3049581999", + "root_str": "3030790837", + "parent_str": "3030978856", + "like": 2, + "action": 0, + "member": { + "mid": "479083152", + "uname": "人间多了许茫然", + "sex": "保密", + "sign": "无聊...\n", + "avatar": "http://i0.hdslb.com/bfs/face/6e7ee177b5cc681b9609c07f8d5eb574b52d409c.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1632240000000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "回复 @我到四川省来 :哈哈,考研不考化学吧", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "623天前发布" + } + }, + { + "rpid": 3049578129, + "oid": 201022189, + "type": 1, + "mid": 11814633, + "root": 3030790837, + "parent": 3049581999, + "dialog": 3030978856, + "count": 0, + "rcount": 0, + "floor": 94, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592378760, + "rpid_str": "3049578129", + "root_str": "3030790837", + "parent_str": "3049581999", + "like": 1, + "action": 0, + "member": { + "mid": "11814633", + "uname": "我到四川省来", + "sex": "保密", + "sign": "保持内心的平静", + "avatar": "http://i0.hdslb.com/bfs/face/1c7cad967633c718ddef302f4aa39efaed53a2e4.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 1885, + "name": "公主连结凯露", + "image": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 3, + "name": "白银殿堂", + "image": "http://i2.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png", + "image_small": "http://i0.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png", + "level": "高级勋章", + "condition": "单个自制视频总播放数>=10万" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1715270400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", + "nickname_color": "#FB7299" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": { + "id": 1885, + "name": "公主连结凯露", + "image": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "jump_url": "", + "type": "vip", + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/ecf1b11044845abc92e576dfdf93ad4f5e5a0958.png", + "image_enhance_frame": "" + }, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "回复 @转手告别旧生活 :专业课 考啊", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "623天前发布" + } + }, + { + "rpid": 3049748009, + "oid": 201022189, + "type": 1, + "mid": 39891232, + "root": 3030790837, + "parent": 3032092982, + "dialog": 3030978856, + "count": 0, + "rcount": 0, + "floor": 99, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1592382373, + "rpid_str": "3049748009", + "root_str": "3030790837", + "parent_str": "3032092982", + "like": 1, + "action": 0, + "member": { + "mid": "39891232", + "uname": "夏次一町and庵野一洋", + "sex": "保密", + "sign": "嘚儿~驾!", + "avatar": "http://i1.hdslb.com/bfs/face/79fbbc56271053565f6dd4395cd77120bad7c568.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 452, + "name": "灵笼", + "image": "http://i1.hdslb.com/bfs/face/9c5f14d6749daded668f3f66998baf4a50e7d8da.png", + "expire": 0, + "image_enhance": "http://i1.hdslb.com/bfs/face/9c5f14d6749daded668f3f66998baf4a50e7d8da.png", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1628870400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": { + "id": 452, + "name": "灵笼", + "image": "http://i0.hdslb.com/bfs/face/9c5f14d6749daded668f3f66998baf4a50e7d8da.png", + "jump_url": "", + "type": "vip", + "image_enhance": "http://i0.hdslb.com/bfs/face/9c5f14d6749daded668f3f66998baf4a50e7d8da.png", + "image_enhance_frame": "" + }, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "回复 @緑箭口香糖 :不收费啊", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": { + "time_desc": "623天前发布" + } + } + ], + "assist": 0, + "blacklist": 0, + "vote": 0, + "lottery": 0, + "config": { + "showadmin": 1, + "showentry": 1, + "showfloor": 0, + "showtopic": 1, + "show_up_flag": true, + "read_only": false, + "show_del_log": true + }, + "upper": { + "mid": 92586428 + }, + "show_bvid": false, + "control": { + "input_disable": false, + "root_input_text": "发一条友善的评论", + "child_input_text": "", + "giveup_input_text": "不发没关系,请继续友善哦~", + "bg_text": "看看下面~来发评论吧", + "web_selection": false, + "answer_guide_text": "需要升级成为lv2会员后才可以评论,先去答题转正吧!", + "answer_guide_icon_url": "http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png", + "answer_guide_ios_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12", + "answer_guide_android_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6", + "show_type": 1, + "show_text": "", + "disable_jump_emote": false + }, + "note": 1 + } +} +``` + +</details> + +## 获取评论区热评 + +> https://api.bilibili.com/x/v2/reply/hot + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +按照热评排列 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---------------------------------------- | +| access_key | str | APP登录 Token | APP 方式必要 | | +| type | num | 评论区类型代码 | 必要 | [类型代码见表](readme.md#评论区类型代码) | +| oid | num | 目标评论区 id | 必要 | | +| root | num | 根回复 rpid | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为20<br />定义域:1-49 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此项<br />12002:评论区已关闭<br />12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj<br />错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| page | obj | 页面信息 | | +| replies | obj | 热评列表 | | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ---- | +| acount | num | 总评论数 | | +| count | num | 热评数 | | +| num | num | 当前页码 | | +| size | num | 每页项数 | | + +`data`中的`replies`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | -------------------------------------- | +| 0 | obj | 热评条目 1 | [对象定义见表](readme.md#评论条目对象) | +| n | obj | 热评条目 (n+1) | 按照热评排列 | +| …… | obj | …… | …… | + +**示例:** + +获取视频`av2`的评论区热评,每页5项,查看第1页 + +```shell +curl -G 'https://api.bilibili.com/x/v2/reply/hot' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=2' \ +--data-urlencode 'ps=5' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "page": { + "acount": 76796, + "count": 60975, + "num": 1, + "size": 5 + }, + "replies": [ + { + "rpid": 476670, + "oid": 2, + "type": 1, + "mid": 58426, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 2733, + "rcount": 2608, + "floor": 2, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1291350931, + "like": 90425, + "action": 0, + "member": null, + "content": { + "message": "貌似没人来", + "plat": 0, + "device": "", + "members": null, + "jump_url": null, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": {} + }, + { + "rpid": 917945205, + "oid": 2, + "type": 1, + "mid": 34762090, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 461, + "rcount": 365, + "floor": 17977, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1532071373, + "like": 29795, + "action": 0, + "member": null, + "content": { + "message": "7.20日,站长被封7天\n\n历史性留名[2233娘_卖萌]", + "plat": 0, + "device": "", + "members": null, + "jump_url": null, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": {} + }, + { + "rpid": 2576184175, + "oid": 2, + "type": 1, + "mid": 24512285, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 1066, + "rcount": 1000, + "floor": 40932, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1584945297, + "like": 44309, + "action": 0, + "member": null, + "content": { + "message": "人类最古のav号(挂了的不算)也变成bv了[大哭][大哭][大哭]青春结束了", + "plat": 0, + "device": "", + "members": null, + "jump_url": null, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": {} + }, + { + "rpid": 495059, + "oid": 2, + "type": 1, + "mid": 2, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 898, + "rcount": 838, + "floor": 5, + "state": 2, + "fansgrade": 0, + "attr": 0, + "ctime": 1291918239, + "like": 34224, + "action": 0, + "member": null, + "content": { + "message": "wwwww", + "plat": 0, + "device": "", + "members": null, + "jump_url": null, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": {} + }, + { + "rpid": 646408628, + "oid": 2, + "type": 1, + "mid": 33066927, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 173, + "rcount": 160, + "floor": 10914, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1519135750, + "like": 7197, + "action": 0, + "member": null, + "content": { + "message": "第一首:来夢緑 - kagome-kagome ~ 月の眷属達カラオケ\n第二首:dBu music - 千年幻想郷 -Aurora sky edition-\n第三首:Sensitive Heart - 千年幻想郷 ~ History of the Moon\n第四首:Yellow-Zebra - 月の律动~Rhythm of the moon~(东方永夜抄 “千年幻想郷 ~ History of the Moon”)\n第五首:工藤舞 - D.S.F.S(ヴォヤージュ1969)\n第六首:Angelic Quasar - かの郷は永き幻の\n第七首:東方永夜抄 - 黒髪のアマンダ\n第八首:君の美術館 - 千年幻想郷 ~ History of the Moon\n\n------------------------\n这些是av:2出现的音乐,应该不会缺少的喵~。(笑) 如果有需要有兴趣的话欢迎复制喵~~(`・ω・´)\n复制的9818楼的\n前排提示:本视频只有大会员能看", + "plat": 0, + "device": "", + "members": null, + "jump_url": null, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": {} + } + ] + } +} +``` + +</details> + +## 获取指定评论信息 + +该接口已经弃用 + +<details> +<summary>点击展开折叠内容:</summary> + +> https://api.bilibili.com/x/v2/reply/info + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------------- | ------ | -------------------------------------------- | +| type | num | 评论区类型代码 | 非必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区 id | 非必要 | | +| rpid | num | 目标评论 rpid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此项 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj<br />错误时:null | 评论条目 | [对象定义见表](readme.md#评论条目对象) | + +**示例:** + +获取视频`av379743801`评论区下`rpid=95737567200`的信息 + +```bash +curl -G 'https://api.bilibili.com/x/v2/reply/info' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=379743801' \ +--data-urlencode 'rpid=95737567200' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "rpid": 95737567200, + "oid": 379743801, + "type": 1, + "mid": 293793435, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 34, + "rcount": 34, + "floor": 382, + "state": 0, + "fansgrade": 0, + "attr": 514, + "ctime": 1639916028, + "like": 154, + "action": 0, + "member": { + "mid": "293793435", + "uname": "社会易姐QwQ", + "sex": "男", + "sign": "普通带砖技术宅,爱好MC 编程 电子,是车万人也是术术人,粉丝群:1136462265,博客:shakianee.top", + "avatar": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 0, + "is_senior_member": 0, + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 2511, + "name": "初音未来13周年", + "image": "http://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png" + }, + "nameplate": { + "nid": 4, + "name": "青铜殿堂", + "image": "http://i2.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", + "image_small": "http://i0.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", + "level": "普通勋章", + "condition": "单个自制视频总播放数>=1万" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1675785600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", + "nickname_color": "#FB7299" + }, + "fans_detail": null, + "following": 0, + "is_followed": 0, + "user_sailing": null, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "这款机器背后发热超级严重。。。。。最烫的时候有60-70℃手不敢摸,而发烫后会降频,最低会降到0.6Ghz[笑哭][笑哭]\n现在解决办法已经出来了https://b23.tv/suUd3g7", + "plat": 0, + "device": "", + "members": null, + "jump_url": null, + "max_line": 999 + }, + "replies": null, + "assist": 0, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "" + }, + "up_action": { + "like": false, + "reply": false + }, + "show_follow": false, + "invisible": false, + "reply_control": {} + } +} +``` + +</details> + +</details> + +## 获取评论区评论总数 + +> https://api.bilibili.com/x/v2/reply/count + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------------- | ------ | -------------------------------------------- | +| type | num | 评论区类型代码 | 必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区 id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无此项<br />12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj<br />错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---- | +| count | num | 评论条数 | | + +**示例:** + +获取视频`av2`的评论区总计评论条数 + +```shell +curl -G 'https://api.bilibili.com/x/v2/reply/count' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=2' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 65521 + } +} +``` + +</details> + diff --git a/docs/comment/readme.md b/docs/comment/readme.md new file mode 100644 index 0000000..e9ba1a7 --- /dev/null +++ b/docs/comment/readme.md @@ -0,0 +1,349 @@ +# 评论区 + +<img src="../../assets/img/comment.svg" width="100" height="100"/> + +评论系统为全站通用,且APP与web端接口共用,以type标明对象类型,以oid指向响应的对象id + +--- + +**继续查看:** + +- [查询类](list.md) +- [操作类](action.md) + +## 评论区类型代码 + +(PS:以下部分内容来源不明,有待验证) + +| 代码 | 评论区类型 | oid 的意义 | +| ---- | ----------------------- | ----------- | +| 1 | 视频稿件 | 稿件 avid | +| 2 | 话题 | 话题 id | +| 4 | 活动 | 活动 id | +| 5 | 小视频 | 小视频 id | +| 6 | 小黑屋封禁信息 | 封禁公示 id | +| 7 | 公告信息 | 公告 id | +| 8 | 直播活动 | 直播间 id | +| 9 | 活动稿件 | (?) | +| 10 | 直播公告 | (?) | +| 11 | 相簿(图片动态) | 相簿 id | +| 12 | 专栏 | 专栏 cvid | +| 13 | 票务 | (?) | +| 14 | 音频 | 音频 auid | +| 15 | 风纪委员会 | 众裁项目 id | +| 16 | 点评 | (?) | +| 17 | 动态(纯文字动态&分享) | 动态 id | +| 18 | 播单 | (?) | +| 19 | 音乐播单 | (?) | +| 20 | 漫画 | (?) | +| 21 | 漫画 | (?) | +| 22 | 漫画 | 漫画 mcid | +| 33 | 课程 | 课程 epid | + +## 评论条目对象 + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ------------------------------- | ------------------ | ------------------------------------------------------------ | +| rpid | num | 评论 rpid | | +| oid | num | 评论区对象 id | | +| type | num | 评论区类型代码 | **类型代码见上表** | +| mid | num | 发送者 mid | | +| root | num | 根评论 rpid | 若为一级评论则为 0<br />大于一级评论则为根评论 id | +| parent | num | 回复父评论 rpid | 若为一级评论则为 0<br />若为二级评论则为根评论 rpid<br />大于二级评论为上一级评 论 rpid | +| dialog | num | 回复对方 rpid | 若为一级评论则为 0<br />若为二级评论则为该评论 rpid<br />大于二级评论为上一级评论 rpid | +| count | num | 二级评论条数 | | +| rcount | num | 回复评论条数 | | +| floor | num | 评论楼层号 | **注:若不支持楼层则无此项** | +| state | num | 评论状态 | 0: 正常<br />17: 被阿瓦隆系统隐藏 (无法被别人看到, 只能自己看到) | +| fansgrade | num | 是否具有粉丝标签 | 0:无<br />1:有 | +| attr | num | 某属性位? | | +| ctime | num | 评论发送时间 | 时间戳 | +| rpid_str | str | 评论rpid | 字串格式 | +| root_str | str | 根评论rpid | 字串格式 | +| parent_str | str | 回复父评论rpid | 字串格式 | +| like | num | 评论获赞数 | | +| action | num | 当前用户操作状态 | 需要登录(Cookie 或 APP) <br />否则恒为 0<br />0:无<br />1:已点赞<br />2:已点踩 | +| member | obj | 评论发送者信息 | | +| content | obj | 评论信息 | | +| replies | 无效时:null<br />有效时:array | 评论回复条目预览 | **仅嵌套一层**<br />否则为 null | +| assist | num | (?) | | +| folder | obj | 折叠信息 | | +| up_action | obj | 评论 UP 主操作信息 | | +| show_follow | bool | (?) | | +| invisible | bool | 评论是否被隐藏 | | +| card_label | obj | 右上角卡片标签信息 | | +| reply_control | obj | 评论提示文案信息 | | + +`评论条目`中的`member`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----------------------------- | ---------------------- | ------------------------------------------------------------ | +| mid | str | 发送者 mid | | +| uname | str | 发送者昵称 | | +| sex | str | 发送者性别 | 男 女 保密 | +| sign | str | 发送者签名 | | +| avatar | str | 发送者头像 url | | +| rank | str | (?) | | +| DisplayRank | str | (?) | | +| level_info | obj | 发送者等级 | | +| pendant | obj | 发送者头像框信息 | | +| nameplate | obj | 发送者勋章信息 | | +| official_verify | obj | 发送者认证信息 | | +| vip | obj | 发送者会员信息 | | +| fans_detail | 无效时:null<br />有效时:obj | 发送者粉丝标签 | | +| following | num | 是否关注该用户 | 需要登录(Cookie或APP) <br />否则恒为0<br />0:未关注<br />1:已关注 | +| is_followed | num | 是否被该用户关注 | 需要登录(Cookie或APP) <br />否则恒为0<br />0:未关注<br />1:已关注 | +| user_sailing | obj | 发送者评论条目装扮信息 | | +| is_contractor | bool | 是否为合作用户? | | +| contract_desc | str | 合作用户说明? | | + +`member`中的`level_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------- | ---- | +| current_level | num | 用户等级 | | +| current_min | num | 0 | | +| current_exp | num | 0 | | +| next_exp | num | 0 | | + +`member`中的`pendant`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | -------------- | ---- | +| pid | num | 头像框 id | | +| name | str | 头像框名称 | | +| image | str | 头像框图片 url | | +| expire | num | 0 | | +| image_enhance | str | 头像框图片 url | | +| image_enhance_frame | str | (?) | | + +`member`中的`nameplate`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ----------------- | ---- | +| nid | num | 勋章 id | | +| name | str | 勋章名称 | | +| image | str | 挂件图片 url 正常 | | +| image_small | str | 勋章图片 url 小 | | +| level | str | 勋章等级 | | +| condition | str | 勋章条件 | | + +`member`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---------------------------------------- | +| type | num | 认证类型 | -1:无<br />0:个人认证<br />1:机构认证 | +| desc | str | 认证信息 | 无为空 | + +`member`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | -------------- | --------------------------------------- | +| vipType | num | 大会员类型 | 0:无<br />1:月会员<br />2:年以上会员 | +| vipDueDate | num | 大会员到期时间 | 毫秒 时间戳 | +| dueRemark | str | (?) | | +| accessStatus | num | (?) | | +| vipStatus | num | 大会员状态 | 0:无<br />1:有 | +| vipStatusWarn | str | (?) | | +| theme_type | num | 会员样式 id | | +| label | obj | 会员铭牌样式 | | +| avatar_subscript | num | (?) | | +| avatar_subscript_url | str | (?) | | +| nickname_color | str | 昵称颜色 | | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | ------------------------------------------------------------ | +| path | str | (?) | | +| text | str | 会员类型文案 | | +| label_theme | str | 会员类型 | vip:大会员<br />annual_vip:年度大会员<br />ten_annual_vip:十年大会员<br />hundred_annual_vip:百年大会员 | +| text_color | str | 文字颜色? | | +| bg_style | num | (?) | | +| bg_color | str | 背景颜色? | | +| border_color | str | 描边颜色? | | + +`member`中的`fans_detail`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ---- | +| uid | num | 用户 mid | | +| medal_id | num | 粉丝标签 id | | +| medal_name | str | 粉丝标签名 | | +| score | num | (?) | | +| level | num | 当前标签等级 | | +| intimacy | num | (?) | | +| master_status | num | (?) | | +| is_receive | num | (?) | | + +`member`中的`user_sailing`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----------------------------- | ------------ | ---- | +| pendant | 无效时:null<br />有效时:obj | 头像框信息 | | +| cardbg | 无效时:null<br />有效时:obj | 评论卡片装扮 | | +| cardbg_with_focus | null | (?) | | + +`user_sailing`中的`pendant`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | -------------- | -------------------------------------- | +| id | num | 头像框 id | | +| name | str | 头像框名称 | | +| image | str | 头像框图片 url | | +| jump_url | str | 空 | | +| type | str | 装扮类型 | suit:一般装扮<br />vip_suit:vip 装扮 | +| image_enhance | str | (?) | | +| image_enhance_frame | str | (?) | | + +`user_sailing`中的`cardbg`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------------------ | -------------------------------------- | +| id | num | 评论条目装扮 id | | +| name | str | 评论条目装扮名称 | | +| image | str | 评论条目装扮图片 url | | +| jump_url | str | 评论条目装扮商城页面 url | | +| fan | obj | 粉丝专属信息 | | +| type | str | 装扮类型 | suit:一般装扮<br />vip_suit:vip 装扮 | + +`cardbg`中的`fan`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------------ | ---------------- | +| is_fan | num | 是否为粉丝专属装扮 | 0:否<br />1:是 | +| number | num | 粉丝专属编号 | | +| color | str | 数字颜色 | 颜色码 | +| name | str | 装扮名称 | | +| num_desc | str | 粉丝专属编号 | 字串格式 | + +`评论条目`中的`content`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------------------ | ------------------------------------------------------------ | +| message | str | 评论内容 | **重要** | +| plat | num | 评论发送端 | 1:web端<br />2:安卓客户端<br />3:ios 客户端<br />4:wp 客户端 | +| device | str | 评论发送平台设备 | | +| members | array | at 到的用户信息 | | +| emote | obj | 需要渲染的表情转义 | 评论内容无表情则无此项 | +| jump_url | obj | 需要高亮的超链转义 | | +| max_line | num | 6 | 收起最大行数 | +| pictures | array | 评论图片数组 | | + +`content`中的`members`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | -------------------------------- | +| 0 | obj | at到的用户 1 | 基本同`评论条目`中的`member`对象 | +| n | obj | at到的用户 (n+1) | 项数为at到的不同的用户数 | +| …… | obj | …… | …… | + +`content`中的`emote`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------------- | -------- | +| {表情转义符} | obj | 表情转义符信息 1 | | +| …… | obj | 表情转义符信息 n | 向下扩展 | + +`emote`中的`{表情转义符}`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | -------------------------------------------------------- | +| id | num | 表情 id | | +| package_id | num | 表情包 id | | +| state | num | 0 | | +| type | num | 表情类型 | 1:免费<br />2:会员专属<br />3:购买所得<br />4:颜文字 | +| attr | num | (?) | | +| text | str | 表情转义符 | | +| url | str | 表情图片 url | | +| meta | obj | 属性信息 | | +| mtime | num | 表情创建时间 | 时间戳 | +| jump_title | str | 表情名称 | | + +`{表情转义符}`中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | ---------------- | +| size | num | 表情尺寸信息 | 1:小<br />2:大 | +| alias | str | 简写名 | 无则无此项 | + +`content`中的`jump_url`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------------- | -------- | +| {超链转义} | obj | 超链转义信息 1 | | +| …… | obj | 超链转义信息 n | 向下扩展 | + +`jump_url`中的`{超链转义}`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | -------- | ---- | +| title | str | 标题 | | +| state | num | 图标 url | | +| prefixIcon | str | (?) | | +| appUrlSchema | str | (?) | | +| appName | str | (?) | | +| appPackageName | str | (?) | | +| clickReport | str | 上报 id | | + +`content`中的`pictures`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | -------- | +| img_src | str | 图片地址 | | +| img_width | num | 图片宽度 | | +| img_height | num | 图片高度 | | +| img_size | num | 图片大小 | 单位KB | + +`评论条目`中的`replies`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ------------------------------------------------------------ | +| 0 | obj | 回复条目1 | **为本对象的递归嵌套**<br />**仅可嵌套一层**<br />按照热度顺序排列 | +| 1 | obj | 回复条目2 | | +| 2 | obj | 回复条目3 | 最后一项 | + +`评论条目`中的`folder`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------------- | ---- | +| has_folded | bool | 是否有被折叠的二级评论 | | +| is_folded | bool | 评论是否被折叠 | | +| rule | str | 相关规则页面 url | | + +`评论条目`中的`up_action`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------------- | ----------------------- | +| like | bool | 是否UP主觉得很赞 | false:否<br />true:是 | +| reply | bool | 是否被UP主回复 | false:否<br />true:是 | + +`评论条目`中的`card_label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ------------ | ----------------------------- | +| rpid | num | 评论 rpid | | +| text_content | str | 标签文本 | 已知有`妙评` | +| text_color_day | str | 日间文本颜色 | 十六进制颜色值,下同 | +| text_color_night | str | 夜间文本颜色 | | +| label_color_day | str | 日间标签颜色 | | +| label_color_night | str | 夜间标签颜色 | | +| image | str | | 作用不明 | +| type | str | 1 | 作用不明 | +| background | str | 背景图片 url | | +| background_width | num | 背景图片宽度 | | +| background_height | num | 背景图片高度 | | +| jump_url | str | 跳转链接 | | +| effect | num | 0 | 作用不明,可能用于控制动画,下同 | +| effect_start_time | num | 0 | | + +`评论条目`中的`reply_control`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | -------- | -------------------- | +| max_line | num | 6 | 用于控制折叠状态下的最大显示行数 | +| sub_reply_entry_text | str | 回复提示 | `共 xx 条回复` | +| sub_reply_title_text | str | 回复提示 | `相关回复共有 xx 条` | +| time_desc | str | 时间提示 | `xx 天/小时 前发布` | +| location | str | IP属地 | `IP属地:xx`<br />评论者发送评论时的IP地址属地<br />仅对2022-07-25 11:00及以后发布的评论有效<br />需要登录| +| support_share | bool | 是否可分享 | false:否<br />true:是 | diff --git a/docs/creativecenter/opus.md b/docs/creativecenter/opus.md new file mode 100644 index 0000000..75f18fe --- /dev/null +++ b/docs/creativecenter/opus.md @@ -0,0 +1,110 @@ +# 图文操作 + +## 删除动态 + +> https://api.bilibili.com/x/dynamic/feed/operate/remove + +*请求方法: POST* + +认证方式:Cookie (SESSDATA) + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ------ | ---- | ------ | ---- | +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | +| platform | string | 平台标识 | 不必要 | 如 `web` | + +**正文参数 (application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ------ | -------------- | ------ | ---- | +| dyn_id_str | string | 动态的 opus id | 必要 | | +| dyn_type | number | 动态类型? | 不必要 | | +| rid_str | string | | 不必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ------ | ---- | +| code | number | 返回值 | 0: 成功<br />-101: 帐号未登录<br />-111: csrf 校验失败<br />-400: 请求错误<br />4101001: 参数错误<br />4101144: 只能删除自身的动态 | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | +| data | object | 空对象 | | + +**示例:** + +删除动态 `667831766353969169` + +```shell +curl 'https://api.bilibili.com/x/dynamic/feed/operate/remove' \ +--url-query 'csrf=05fa8d65755655c2893d40d3692d4c70' \ +-H 'content-type: application/json' +--data-raw '{"dyn_id_str":"667831766353969169"}' \ +-b 'SESSDATA=xxxxxx' \ +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> + +## 删除专栏 + +> <https://member.bilibili.com/x/web/article/delete> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| aid | num | 文章cvid | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项<br />37104:无权限操作他人专栏 | +| message | str | 错误信息 | 默认为`0` | +| ttl | num | 1 | | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/article/delete' \ + --data-urlencode 'aid=114514' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> diff --git a/docs/creativecenter/railgun.md b/docs/creativecenter/railgun.md new file mode 100644 index 0000000..8b171bb --- /dev/null +++ b/docs/creativecenter/railgun.md @@ -0,0 +1,274 @@ +# 电磁力相关 + +电磁力每周日下午刷新 + +## 获取电磁力等级(web端) + +> https://api.bilibili.com/studio/up-rating/v3/rating/info + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ----------- | ---------------- | +| mid | num | 当前用户mid | | +| level | num | 电磁力等级 | | +| score | num | 电磁力分数 | | +| credit | num | 信用分 | | +| state | num | ? | 一直是2 | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/elec/user' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": ***, + "level": 4, + "score": 326, + "credit": 100, + "state": 2, + "update_date": 1694966400 + } +} +``` + +</details> + +## (失效)获取电磁力详细数值(双端) + +> https://api.bilibili.com/studio/up-rating/rating/summary + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | -------------- | ---- | +| date | str | 数据刷新时间 | YYYY-MM-DD | +| level | obj | 电磁力等级 | | +| creative | obj | 创作力 | | +| influence | obj | 影响力 | | +| credit | obj | 信用分 | | + +`data`中的`level` `creative` `influence` `credit`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ---- | +| data | num | 数值 | | +| prev | num | ??? | **作用尚不明确** | +| desc | str | 描述 | | +| date | num | 刷新时间 | 时间戳 | + +**示例:** + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/studio/up-rating/rating/summary' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl -G 'https://api.bilibili.com/studio/up-rating/rating/summary' \ +--data-urlencode 'access_key=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "date": "2020-07-05", + "level": { + "data": 1, + "prev": 0, + "desc": "正式开启创作之路,希望未来的路上我们携手相伴,创作更多优质内容~", + "date": 1593878400 + }, + "creative": { + "data": 39, + "prev": 39, + "desc": "考察近一年来的创作行为,良好的原创投稿行为和互动数据有助于提升创作力。", + "date": 1593878400 + }, + "influence": { + "data": 54, + "prev": 54, + "desc": "根据近一年活跃粉丝数据进行评估,良好的粉丝活跃度是影响力的基础。", + "date": 1593878400 + }, + "credit": { + "data": 100, + "prev": 100, + "desc": "良好的投稿记录将维持较高的信用分,违反投稿公约的行为将扣除信用分。", + "date": 1594106147 + } + } +} +``` + +</details> + +## 获取电磁力数值历史变化(双端) + +> https://api.bilibili.com/studio/up-rating/rating/history + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | -------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 目标数据类型 | 必要 | 类型代码见下表 | + +类型代码`type`: + +| 代码 | 含义 | +| ---- | ------ | +| 1 | 创作力 | +| 2 | 影响力 | +| 3 | 信用分 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | ------------ | -------- | +| date | array | 数据记录时间 | 每周更新 | +| score | array | 电磁力等级 | 每周更新 | + +`data`中的`date`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | -------------- | +| 0 | str | 1周前的日期 | MM-DD | +| n | str | (n+1)周前的日期 | 与数值一一对应 | +| …… | str | …… | …… | +| 7 | str | 8周前的日期 | 最后一条 | + +`data`中的`score`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | -------------- | +| 0 | num | 1周前的数值 | | +| n | num | (n+1)周前的数值 | 与日期一一对应 | +| …… | num | …… | …… | +| 7 | num | 8周前的数值 | 最后一条 | + +**示例:** + +查询创作力的历史变化 + +Cookie方式: + +```shell +curl -G 'https://api.bilibili.com/studio/up-rating/rating/history' \ +--data-urlencode 'type=1' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl -G 'https://api.bilibili.com/studio/up-rating/rating/history' \ +--data-urlencode 'type=1' \ +--data-urlencode 'access_key=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "date": [ + "05-17", + "05-24", + "05-31", + "06-07", + "06-14", + "06-21", + "06-28", + "07-05" + ], + "score": [ + 48, + 48, + 49, + 49, + 49, + 49, + 49, + 49 + ] + } +} +``` + +</details> diff --git a/docs/creativecenter/season.md b/docs/creativecenter/season.md new file mode 100644 index 0000000..8290bde --- /dev/null +++ b/docs/creativecenter/season.md @@ -0,0 +1,1088 @@ +# 合集管理 + +关于用户空间的合集及视频列表参见 [合集和视频列表信息](../video/collection.md) + +## 获取合集列表 + +> https://member.bilibili.com/x2/creative/web/seasons + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------- | ----------- | ----------------- | +| pn | num | 页码 | 必要 | 默认为 1 | +| ps | num | 每页数量 | 必要 | 默认为 30 | +| order | str | 排序方式 | 不必要 | 创建时间: ctime<br />修改时间: mtime | +| sort | str | 排序方式 | 不必要 | 创建时间: asc<br />修改时间: desc | +| draft | num | 1 | 不必要 | 作用尚不明确 | + +**JSON回复:** + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| seasons | arr | 合集列表 | | +| tip | obj | 内容 `title` `url` 均为空 | | +| total | num | 合集总数 | | +| play_type | num | 1 | 作用尚不明确 | + +`seasons`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| season | obj | 合集信息 | | +| course | null | | | +| checkin | obj | 审核信息? | | +| seasonStat | obj | 合集统计信息 | | +| sections | obj | 小节列表 | | +| part_episodes | arr | 合集视频列表 | | + +`seasons`数组中的对象中的`season`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| id | num | 合集 ID | | +| title | str | 合集标题 | | +| desc | str | 合集描述 | | +| cover | str | 合集封面 URL | | +| isEnd | num | 是否已完结? | 0: 未完结 | +| mid | num | 合集作者 ID | | +| isAct | num | 是否为活动合集? | 0: 否 | +| is_pay | num | 是否付费? | 0: 否 | +| state | num | 合集状态? | 0: 正常显示<br />-6: 正在审核 | +| partState | num | 合集分段状态? | 0 | +| signState | num | 合集签名状态? | 0 | +| rejectReason | str | 合集拒绝原因? | | +| ctime | num | 创建时间 | | +| mtime | num | 修改时间 | | +| no_section | num | 是否设小节 | 1: 不设小节 | +| forbid | num | 合集是否禁止? | 0: 否 | +| protocol_id | str | 空 | | +| ep_num | num | 0 | | +| season_price | num | 合集价格? | 0: 免费 | +| is_opened | num | 是否公开? | 1: 公开 | +| has_charging_pay | num | 是否充电付费? | 0: 否 | + +`seasons`数组中的对象中的`checkin`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| status | num | 状态? | 0: 正常显示 | +| status_reason | str | 状态原因? | | +| season_status | num | 合集审核状态? | 1: 审核通过 | + +`seasons`数组中的对象中的`seasonStat`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| view | num | 播放量 | | +| danmaku | num | 弹幕数 | | +| reply | num | 评论数 | | +| fav | num | 收藏数 | | +| coin | num | 硬币数 | | +| share | num | 分享数 | | +| nowRank | num | 当前排名? | | +| hisRank | num | 历史最高排名? | | +| like | num | 点赞数 | | +| subscription | num | 订阅数 | | +| vt | num | 0 | | + +`seasons`数组中的对象中的`sections`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| sections | arr | 小节列表 | 套了个娃 | + +`seasons`数组中的对象中的`sections`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| id | num | 小节 ID | | +| type | num | 1 | | +| seasonId | num | 合集 ID | | +| title | str | 小节标题 | | +| order | num | 排序 | | +| state | num | 状态? | 0: 正常 | +| partState | num | 合集分段状态? | 0: 正常 | +| rejectReason | str | 拒绝原因? | | +| ctime | num | 创建时间 | | +| mtime | num | 修改时间 | | +| epCount | num | 视频数量 | | +| cover | str | 封面 URL | | +| has_charging_pay | num | 是否充电付费? | 0: 否 | +| Episodes | null | | | + +`seasons`数组中的对象中的`part_episodes`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| id | num | 合集内视频 ID | | +| title | str | 视频标题 | | +| aid | num | 视频 aid | | +| bvid | str | 视频 bvid | | +| cid | num | 视频 cid | | +| seasonId | num | 合集 ID | | +| sectionId | num | 小节 ID | | +| order | num | 排序编号 | | +| videoTitle | str | 空 | | +| archiveTitle | str | 空 | | +| archiveState | num | 0 | | +| rejectReason | str | 拒绝理由? | | +| state | num | 0 | | +| cover | str | 封面 URL | | +| is_free | num | 是否免费? | 0: 免费 | +| aid_owner | bool | false | | +| charging_pay | num | 充电付费? | 0: 否 | + +**示例:** + +```shell +curl -G 'https://member.bilibili.com/x2/creative/web/seasons' \ +--data-urlencode 'pn=1' \ +--data-urlencode 'ps=30' \ +-b "SESSDATA=xxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "seasons": [ + { + "season": { + "id": 3541247, + "title": "🍥Debian", + "desc": "这里是泽生折腾 Debian GNU/Linux 的珍贵影像记录喵~", + "cover": "https://archive.biliimg.com/bfs/archive/ec51de61b53159c5e2430cf963f5f97e692baeaf.jpg", + "isEnd": 0, + "mid": 645769214, + "isAct": 0, + "is_pay": 0, + "state": 0, + "partState": 0, + "signState": 0, + "rejectReason": "", + "ctime": 1722573640, + "mtime": 1722577206, + "no_section": 1, + "forbid": 0, + "protocol_id": "", + "ep_num": 0, + "season_price": 0, + "is_opened": 1, + "has_charging_pay": 0 + }, + "course": null, + "checkin": { + "status": 0, + "status_reason": "", + "season_status": 1 + }, + "seasonStat": { + "view": 6793, + "danmaku": 21, + "reply": 93, + "fav": 64, + "coin": 26, + "share": 12, + "nowRank": 0, + "hisRank": 0, + "like": 141, + "subscription": 0, + "vt": 0 + }, + "sections": { + "sections": [ + { + "id": 3954033, + "type": 1, + "seasonId": 3541247, + "title": "正片", + "order": 1, + "state": 0, + "partState": 0, + "rejectReason": "", + "ctime": 1722573640, + "mtime": 1722577206, + "epCount": 2, + "cover": "http://i2.hdslb.com/bfs/archive/b76c0b574862f5a8e8eb133f5f33fcbcd602401a.jpg", + "has_charging_pay": 0, + "Episodes": null + } + ] + }, + "part_episodes": [ + { + "id": 77260687, + "title": "Linux小寄巧: 原地卸载内核然后尝试救活!", + "aid": 1906473802, + "bvid": "BV1MU411S7iJ", + "cid": 1625992822, + "seasonId": 3541247, + "sectionId": 3954033, + "order": 1, + "videoTitle": "", + "archiveTitle": "", + "archiveState": 0, + "rejectReason": "", + "state": 0, + "cover": "http://i2.hdslb.com/bfs/archive/b76c0b574862f5a8e8eb133f5f33fcbcd602401a.jpg", + "is_free": 0, + "aid_owner": false, + "charging_pay": 0 + }, + { + "id": 77260688, + "title": "十多年前的电脑运行Debian12的启动过程", + "aid": 1956170305, + "bvid": "BV1Ay411i7Ph", + "cid": 1607067247, + "seasonId": 3541247, + "sectionId": 3954033, + "order": 2, + "videoTitle": "", + "archiveTitle": "", + "archiveState": 0, + "rejectReason": "", + "state": 0, + "cover": "http://i0.hdslb.com/bfs/archive/0bff6624fdfcbf3326fba1837fef093d455c846a.jpg", + "is_free": 0, + "aid_owner": false, + "charging_pay": 0 + } + ] + }, + { + "season": { + "id": 3541327, + "title": "BACollect", + "desc": "", + "cover": "https://archive.biliimg.com/bfs/archive/77906db03b1eefac02613de184afad03f7bc58d7.jpg", + "isEnd": 0, + "mid": 645769214, + "isAct": 0, + "is_pay": 0, + "state": 0, + "partState": 0, + "signState": 0, + "rejectReason": "", + "ctime": 1722574656, + "mtime": 1722574658, + "no_section": 1, + "forbid": 0, + "protocol_id": "", + "ep_num": 0, + "season_price": 0, + "is_opened": 1, + "has_charging_pay": 0 + }, + "course": null, + "checkin": { + "status": 0, + "status_reason": "", + "season_status": 0 + }, + "seasonStat": { + "view": 0, + "danmaku": 0, + "reply": 0, + "fav": 0, + "coin": 0, + "share": 0, + "nowRank": 0, + "hisRank": 0, + "like": 0, + "subscription": 0, + "vt": 0 + }, + "sections": { + "sections": [ + { + "id": 3954127, + "type": 1, + "seasonId": 3541327, + "title": "正片", + "order": 1, + "state": 0, + "partState": 0, + "rejectReason": "", + "ctime": 1722574656, + "mtime": 1722574656, + "epCount": 0, + "cover": "http://static.hdslb.com/images/transparent.gif", + "has_charging_pay": 0, + "Episodes": null + } + ] + }, + "part_episodes": null + } + ], + "tip": { + "title": "", + "url": "" + }, + "total": 2, + "play_type": 1 + } +} +``` + +</details> + +## 创建合集 + +> ttps://member.bilibili.com/x2/creative/web/season/add + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +注: 有人工审核 + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| title | str | 合集标题 | 必要 | | +| desc | str | 合集简介 | 不必要 | | +| cover | str | 封面图 | 必要 | 从 [上传封面](upload.md#上传封面) 处获取 | +| season_price | num | 0 | 不必要 | 作用尚不明确 | +| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | num | 合集 ID | | + +**示例:** + +```shell +curl -X POST 'https://member.bilibili.com/x2/creative/web/season/add' \ +--data-urlencode 'title=🍥Debian' \ +--data-urlencode 'desc=这里是泽生折腾 Debian GNU/Linux 的珍贵影像记录喵~' \ +--data-urlencode 'cover=https://archive.biliimg.com/bfs/archive/ec51de61b53159c5e2430cf963f5f97e692baeaf.jpg' \ +--data-urlencode 'season_price=0' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx; bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": 3541247 +} +``` + +</details> + +## 添加视频到合集 + +> https://member.bilibili.com/x2/creative/web/season/section/episodes/add + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | | + +**正文参数 (application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| episode | array | 视频列表 | 必要 | | +| section_id | num | 合集小节 ID | 必要 | | + +`episode` 数组中的对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| aid | num | 视频 aid | 必要 | | +| cid | num | 稿件 cid | 必要 | | +| title | str | 合集内单集标题 | 必要 | | +| charging_pay | num | 0 | 不必要 | 作用尚不明确 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | + +**示例:** + +假设您已经把请求有效荷载放在 `payload.json` 文件中: + +```json +{ + "sectionId": 3954033, + "episodes": [ + { + "title": "Linux小寄巧: 原地卸载内核然后尝试救活!", + "aid": 1906473802, + "cid": 1625992822, + "charging_pay": 0 + }, + { + "title": "十多年前的电脑运行Debian12的启动过程", + "aid": 1956170305, + "cid": 1607067247, + "charging_pay": 0 + } + ] +} +``` + +```shell +curl -X POST --url 'https://member.bilibili.com/x2/creative/web/season/section/episodes/add' \ +--url-query 'csrf=xxx' \ +-H 'Content-Type: application/json' \ +--data-binary @payload.json \ +-b 'SESSDATA=xxx; bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 编辑合集小节 + +> https://member.bilibili.com/x2/creative/web/season/section/edit + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| csrf | str | CSRF Token (即 Cookies 中 bili_jct) | 必要 | | + +**正文参数 (application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| section | obj | 小节信息 | 必要 | | +| sorts | array | 排序列表 | 必要 | | + +`section` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 小节 ID | 必要 | | +| seasonId | num | 合集 ID | 必要 | | +| title | str | 小节标题 | 必要 | | +| type | num | 1 | 必要 | | + +`sorts` 数组中的对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 合集内视频 ID | 必要 | | +| order | num | 排序位置 | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | + +**示例:** + +假设您已经把请求有效荷载放在 `payload.json` 文件中: + +```json +{ + "section": { + "id": 3954033, + "type": 1, + "seasonId": 3541247, + "title": "正片" + }, + "sorts": [ + { + "id": 77260687, + "sort": 1 + }, + { + "id": 77260688, + "sort": 2 + } + ] +} +``` + +```shell +curl -X POST --url 'https://member.bilibili.com/x2/creative/web/season/section/edit' \ +--url-query 'csrf=xxx' \ +-H 'Content-Type: application/json' \ +--data-binary @payload.json \ +-b 'SESSDATA=xxx; bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 编辑合集信息 + +> https://member.bilibili.com/x2/creative/web/season/edit + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +注: 也有人工审核 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| csrf | str | CSRF Token (即 Cookies 中 bili_jct) | 必要 | | + +**正文参数 (application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| season | obj | 合集信息 | 必要 | | +| sorts | array | 排序列表 | 必要 | | + +`season` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 合集 ID | 必要 | | +| title | str | 合集标题 | 必要 | | +| cover | str | 封面图 | 必要 | 从 [上传封面](upload.md#上传封面) 处获取 | +| desc | str | 合集简介 | 不必要 | | +| season_price | num | 0 | 不必要 | 作用尚不明确 | +| isEnd | num | 是否完结 | 不必要 | 0:未完结<br />1:完结 | + +`sorts` 数组中的对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 小节 ID | 必要 | | +| sort | num | 排序位置 | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | + +**示例:** + +假设您已经把请求有效荷载放在 `payload.json` 文件中: + +```json +{ + "season": { + "cover": "https://archive.biliimg.com/bfs/archive/77906db03b1eefac02613de184afad03f7bc58d7.jpg", + "id": 3541327, + "title": "IWILLBEDEL" + }, + "sorts": [ + { + "id": 3954127, + "sort": 1 + } + ] +} +``` + +```shell +curl -X POST --url 'https://member.bilibili.com/x2/creative/web/season/edit' \ +--url-query 'csrf=xxx' \ +-H 'Content-Type: application/json' \ +--data-binary @payload.json \ +-b 'SESSDATA=xxx; bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 删除合集 + +> https://member.bilibili.com/x2/creative/web/season/del + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| id | num | 合集 ID | 必要 | | +| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | + +**示例:** + +删除合集 `id=3541327` + +```shell +curl -X POST 'https://member.bilibili.com/x2/creative/web/season/del' \ +--data-urlencode 'id=3541327' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx; bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 获取合集小节中的视频 + +> https://member.bilibili.com/x2/creative/web/season/section + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +可以在给合集排序时使用, 可以获取别人的 + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| id | num | 合集 ID | 必要 | | + +**JSON 回复:** + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| section | obj | 小节信息 | | +| episodes | arr | 小节中的视频 | | + +`data` 对象中的 `section` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| id | num | 小节 ID | | +| type | num | 小节类型 | | +| seasonId | num | 合集 ID | | +| title | str | 小结标题 | | +| order | str | 排序编号? | | +| isEnd | num | 是否已完结? | 0: 未完结 | +| state | num | 合集状态? | 0: 正常显示<br />-6: 正在审核 | +| partState | num | 合集分段状态? | 0 | +| rejectReason | str | 合集拒绝原因? | | +| ctime | num | 创建时间 | | +| mtime | num | 修改时间 | | +| epCount | num | 小节视频总数 | | +| cover | num | 合集封面 | | +| show | num | 是否公开? | 1: 公开 | +| has_charging_pay | num | 是否充电付费? | 0: 否 | +| Episodes | null | | | +| has_pugv_pay | num | 是否 PUGV 付费? | 0: 否 | + +`data` 对象中的 `episodes`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| id | num | 合集内视频 ID | | +| title | str | 视频标题 | | +| aid | num | 视频 aid | | +| bvid | str | 视频 bvid | | +| cid | num | 视频 cid | | +| seasonId | num | 合集 ID | | +| sectionId | num | 小节 ID | | +| order | num | 排序编号 | | +| videoTitle | str | 视频标题 | | +| archiveTitle | str | 看起来也是标题 | | +| archiveState | num | 0 | | +| rejectReason | str | 拒绝理由? | | +| state | num | 0 | | +| cover | str | 封面 URL | | +| is_free | num | 是否免费? | 0: 免费 | +| aid_owner | bool | 是否视频所有者 | true:是所有者 | +| charging_pay | num | 充电付费? | 0: 否 | + + +**示例:** + +获取合集小节 176088 的视频 + +```shell +curl -G --url 'https://member.bilibili.com/x2/creative/web/season/section' \ +--url-query 'id=176088' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +会返回全部的,由于很长,这里只保留三个作为例子 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "section": { + "id": 176088, + "type": 1, + "seasonId": 152812, + "title": "正片", + "order": 1, + "state": 0, + "partState": 0, + "rejectReason": "", + "ctime": 1643250822, + "mtime": 1739466002, + "epCount": 112, + "cover": "http://i1.hdslb.com/bfs/archive/4439a182b142d92a169609e6e14e7217b3e14e0d.jpg", + "has_charging_pay": 0, + "Episodes": null, + "show": 1, + "has_pugv_pay": 0 + }, + "episodes": [ + { + "id": 109100674, + "title": "「开箱评测」三星Note8 EMR2笔对比公版Wacom笔 套娃笔首选 10寸 RK PX30 Wacom 电子书 天喻墨学 M2 M3", + "aid": 113997323963614, + "bvid": "BV14BNfeSE5c", + "cid": 28376042631, + "seasonId": 152812, + "sectionId": 176088, + "order": 1, + "videoTitle": "「开箱评测」三星Note8 EMR2笔对比公版Wacom笔 套娃笔首选 10寸 RK PX30 Wacom 电子书 天喻墨学 M2 M3", + "archiveTitle": "「开箱评测」三星Note8 EMR2笔对比公版Wacom笔 套娃笔首选 10寸 RK PX30 Wacom 电子书 天喻墨学 M2 M3", + "archiveState": 0, + "rejectReason": "", + "state": 0, + "cover": "", + "is_free": 0, + "aid_owner": true, + "charging_pay": 0, + "member_first": 0, + "pugv_pay": 0 + }, + { + "id": 108733886, + "title": "「开箱评测」拆解 椭圆形的第三方AirTag GRTSZ S2 Tag", + "aid": 113982291576104, + "bvid": "BV1YyNvetEbX", + "cid": 28325121446, + "seasonId": 152812, + "sectionId": 176088, + "order": 2, + "videoTitle": "「开箱评测」拆解 椭圆形的第三方AirTag GRTSZ S2 Tag", + "archiveTitle": "「开箱评测」拆解 椭圆形的第三方AirTag GRTSZ S2 Tag", + "archiveState": 0, + "rejectReason": "", + "state": 0, + "cover": "", + "is_free": 0, + "aid_owner": true, + "charging_pay": 0, + "member_first": 0, + "pugv_pay": 0 + }, + { + "id": 106045797, + "title": "「开箱评测」这帕姆怎么射不出来呢! 星穹铁道 KFC联动 财神帕姆 太可爱了", + "aid": 113892936122993, + "bvid": "BV1ZFFKeTEkr", + "cid": 28087484764, + "seasonId": 152812, + "sectionId": 176088, + "order": 3, + "videoTitle": "「开箱评测」这帕姆怎么射不出来呢! 星穹铁道 KFC联动 财神帕姆 太可爱了", + "archiveTitle": "「开箱评测」这帕姆怎么射不出来呢! 星穹铁道 KFC联动 财神帕姆 太可爱了", + "archiveState": 0, + "rejectReason": "", + "state": 0, + "cover": "", + "is_free": 0, + "aid_owner": true, + "charging_pay": 0, + "member_first": 0, + "pugv_pay": 0 + } + ] + } +} +``` + +</details> + +## 编辑投稿视频合集 + +> https://member.bilibili.com/x2/creative/web/season/switch +*请求方式: POST* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| t | num | 当前时间 | 非必要 | UNIX 毫秒时间戳 | +| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | | + +**正文参数(application/json):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| aid | num | 视频 ID | 必要 | | +| season_id | num | null | 合集 ID | 必要 | null 表示从合集中移除 | +| section_id | num | null | 小节 ID | 必要 | null 表示从小节中移除 | +| title | str | 视频标题 | 必要 | | +| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 非必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| season_id | num | null | | | +| section_id | num | null | | | +| title | str | 标题 | | +| aid | num | aid | | +| csrf | num | CSRF Token (位于 Cookie 中 bili_jct) | | + +**示例:** + +```shell +curl -X POST "https://member.bilibili.com/x2/creative/web/season/switch" \ +--url-query "csrf=xxxxxxxxxxxx" \ +-H "Content-Type: application/json" \ +--data '{ + "aid": 123456, + "season_id": 654321, + "section_id": 789012, + "title": "新视频标题" +}' \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "season_id": null, + "section_id": null, + "title": "标题", + "aid": 123, + "csrf": "eqweeqw" +} +``` + +</details> + +## aid反查合集id + +> https://member.bilibili.com/x2/creative/web/season/aid +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 视频 aid | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + + + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| season | obj | 合集信息 | | + + +`season` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| id | num | 合集 ID | | +| title | str | 合集标题 | | +| cover | str | 合集封面 URL | | +| desc | str | 合集描述 | | +| isEnd | num | 是否已完结 | 0: 未完结<br />1: 已完结 | +| mid | num | 合集作者 ID | | +| isAct | num | 是否为活动合集 | 0: 否<br />1: 是 | +| is_pay | num | 是否付费 | 0: 否<br />1: 是 | +| state | num | 合集状态 | 0: 正常显示<br />-6: 正在审核 | +| partState | num | 合集分段状态 | 0: 正常 | +| signState | num | 合集签名状态 | 0: 正常 | +| rejectReason | str | 合集拒绝原因 | | +| ctime | num | 创建时间 | UNIX 时间戳 | +| mtime | num | 修改时间 | UNIX 时间戳 | +| no_section | num | 是否设小节 | 1: 不设小节 | +| forbid | num | 合集是否禁止 | 0: 否<br />1: 是 | +| protocol_id | str | 协议 ID | | +| ep_num | num | 视频数量 | | +| season_price | num | 合集价格 | 0: 免费 | +| is_opened | num | 是否公开 | 1: 公开<br />0: 不公开 | +| has_charging_pay | num | 是否充电付费 | 0: 否<br />1: 是 | +| has_pugv_pay | num | 是否 PUGV 付费 | 0: 否<br />1: 是 | + +**示例:** + +```shell +curl -G "https://member.bilibili.com/x2/creative/web/season/aid" \ +--data-urlencode "id=123456" \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 12, + "title": "合集标题", + "desc": "", + "cover": "", + "isEnd": 0, + "mid": 123, + "isAct": 0, + "is_pay": 0, + "state": 0, + "partState": 0, + "signState": 0, + "rejectReason": "", + "ctime": 1667232000, + "mtime": 1667232000, + "no_section": 1, + "forbid": 0, + "protocol_id": "", + "ep_num": 0, + "season_price": 0, + "is_opened": 1, + "has_charging_pay": 0, + "has_pugv_pay": 0 + } +} +``` + +</details> \ No newline at end of file diff --git a/docs/creativecenter/statistics&data.md b/docs/creativecenter/statistics&data.md new file mode 100644 index 0000000..bfaef6f --- /dev/null +++ b/docs/creativecenter/statistics&data.md @@ -0,0 +1,890 @@ +# 统计与数据 + +统计与数据次日中午12刷新 + +## UP主视频状态数据 + +> https://member.bilibili.com/x/web/index/stat + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | -------------- | ---- | +| inc_coin | num | 新增投币数 | | +| inc_elec | num | 新增充电数 | | +| inc_fav | num | 新增收藏数 | | +| inc_like | num | 新增点赞数 | | +| inc_share | num | 新增分享数 | | +| incr_click | num | 新增播放数 | | +| incr_dm | num | 新增弹幕数 | | +| incr_fans | num | 新增粉丝数 | | +| incr_reply | num | 新增评论数 | | +| total_click | num | 总计播放数 | | +| total_coin | num | 总计投币数 | | +| total_dm | num | 总计弹幕数 | | +| total_elec | num | 总计充电数 | | +| total_fans | num | 总计粉丝数 | | +| total_fav | num | 总计收藏数 | | +| total_like | num | 总计点赞数 | | +| total_reply | num | 总计评论数 | | +| total_share | num | 总计分享数 | | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/index/stat' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "inc_coin": 0, + "inc_elec": 0, + "inc_fav": 0, + "inc_like": 0, + "inc_share": 0, + "incr_click": 0, + "incr_dm": 0, + "incr_fans": 1, + "incr_reply": 0, + "total_click": 9, + "total_coin": 1, + "total_dm": 0, + "total_elec": 0, + "total_fans": 29, + "total_fav": 1, + "total_like": 1, + "total_reply": 0, + "total_share": 0 + } +} +``` + +</details> + +## 新版UP主视频数据比较 + +> https://member.bilibili.com/x/web/data/archive_diagnose/compare + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | -------------- | +| t | num | 时间戳 | 可选 | | +| size | num | 比较最近的N条视频 | 可选,默认5 | 似乎没有最大值,或者最大值很大 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------- | ---- | +| list | list | 最近的视频 | | + +`data`中的`list`项: +> [!TIP] +> 这里的数字一般都是百分比,小数点后保留两位,100代表1%,10000代表100% + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------- | ---- | +| aid | num | av号 | | +| bvid | str | bv号 | | +| cover | str | 封面url | | +|title| str|标题| +|pubtime|num|发布时间| +|duration|num|视频长度(秒)| +|play|num|播放数|| +|vt|num|未知 +|like|num|点赞数 +|comment|num|评论数 +|dm|num|弹幕数 +|fav|num|收藏数| +|coin|num|投币数 +|share|num|分享数 +|full_play_ratio|num|完播比,用户平均在百分之多少退出 +|play_viewer_rate|num|游客播放数,这个视频有多少是游客播放 +|active_fans_rate|num|粉丝观看率,多少粉丝看了这个视频 +|active_fans_med|num|? +|tm_rate|num|封标点击率 +|tm_rate_med|num|你自己平均封标点击率 +|tm_fan_simi_rate_med|num|同类up粉丝封标点击率 +|tm_viewer_simi_rate_med|num|同类up游客封标点击率 +|tm_fan_rate|num|粉丝封标点击率 +|tm_viewer_rate|num|游客封标点击率 +|tm_pass_rate|num|封标点击率超过n%同类稿件 +|tm_fan_pass_rate|num|粉丝封标点击率超过n%同类稿件 +|tm_viewer_pass_rate|num|游客封标点击率超过n%同类稿件 +|crash_rate|num|3秒退出率 +|crash_rate_med|num|? +|crash_fan_simi_rate_med|num|同类up粉丝3秒退出率 +|crash_viewer_simi_rate_med|num|同类up游客3秒退出率 +|crash_fan_rate|num|粉丝3秒退出率 +|crash_viewer_rate|num|游客3秒退出率 +|interact_rate|num|互动率 +|interact_rate_med|num| +|interact_fan_simi_rate_med|num|同类up粉丝互动率 +|interact_viewer_simi_rate_med|num|同类up游客互动率 +|interact_fan_rate|num|粉丝互动率 +|interact_viewer_rate|num|游客互动率 +|avg_play_time|num|平均播放时间|注意:此字段总是0,可能b站正在写代码,或者和播放量改播放时长有关? +|total_new_attention_cnt|num|涨粉 +|play_trans_fan_rate|num|播转粉率 +|play_trans_fan_rate_med|num|其他up平均播转粉率 + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/data/archive_diagnose/compare?size=10' \ +-b 'SESSDATA=xxx' +``` + +## UP主专栏状态数据 + +> https://member.bilibili.com/x/web/data/article + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------- | ---- | +| view | num | 总计阅读数 | | +| reply | num | 总计评论数 | | +| like | num | 总计点赞数 | | +| coin | num | 总计投币数 | | +| fav | num | 总计收藏数 | | +| share | num | 总计分享数 | | +| incr_view | num | 新增阅读数 | | +| incr_reply | num | 新增评论数 | | +| incr_like | num | 新增点赞数 | | +| incr_coin | num | 新增投币数 | | +| incr_fav | num | 新增收藏数 | | +| incr_share | num | 新增分享数 | | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/data/article' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "view": 290, + "reply": 17, + "like": 34, + "coin": 9, + "fav": 15, + "share": 7, + "incr_view": 6, + "incr_reply": 0, + "incr_like": 0, + "incr_coin": 0, + "incr_fav": 0, + "incr_share": 0 + } +} +``` + +</details> + +## 视频数据增量趋势 + +> https://member.bilibili.com/x/web/data/pandect + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +数据为前30天 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | -------------- | +| type | num | 目标数据类型 | 必要 | 类型代码见下表 | + +类型代码`type`: + +| 代码 | 含义 | +| ---- | ---- | +| 1 | 播放 | +| 2 | 弹幕 | +| 3 | 评论 | +| 4 | 分享 | +| 5 | 投币 | +| 6 | 收藏 | +| 7 | 充电 | +| 8 | 点赞 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | array | 趋势列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | -------- | +| 0 | obj | 1天前的数据 | | +| n | obj | (n+1)天前的数据 | | +| …… | obj | …… | …… | +| 29 | obj | 30天前的数据 | 最后一条 | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------- | -------------------- | +| date_key | num | 对应时间 | 时间戳 前一天的8:00 | +| total_inc | num | 增加数量 | 意义为数据类型决定 | + +**示例:** + +查询30天前的视频播放增量趋势,可知`2020-04-05`的播放增量为`46`,`2020-04-04`的播放增量为`58` + +```shell +curl -G 'https://member.bilibili.com/x/web/data/pandect' \ +--data-urlencode 'type=1' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [{ + "date_key": 1586044800, + "total_inc": 46 + }, { + "date_key": 1585958400, + "total_inc": 58 + }, { + "date_key": 1585872000, + "total_inc": 81 + }, { + "date_key": 1585785600, + "total_inc": 90 + }, { + "date_key": 1585699200, + "total_inc": 62 + }, { + "date_key": 1585612800, + "total_inc": 70 + }, + ………… + ] +} +``` + +</details> + +## 专栏数据增量趋势 + +> https://member.bilibili.com/x/web/data/article/thirty + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +数据为前30天 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | -------------- | +| type | num | 目标数据类型 | 必要 | 类型代码见下表 | + +类型代码`type`: + +| 代码 | 含义 | +| ---- | ---- | +| 1 | 阅读 | +| 2 | 评论 | +| 3 | 分享 | +| 4 | 投币 | +| 5 | 收藏 | +| 6 | 点赞 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | array | 趋势列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------ | -------- | +| 0 | obj | 30天前的数据 | | +| n | obj | (30-n)天前的数据 | | +| …… | obj | …… | …… | +| 29 | obj | 1天前的数据 | 最后一条 | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------- | -------------------- | +| date_key | num | 对应时间 | 时间戳 前一天的8:00 | +| total_inc | num | 增加数量 | 意义为数据类型决定 | + +**示例:** + +查询30天前的文章阅读增量趋势,可知`2020-04-05`的阅读增量为`6`,`2020-04-04`的阅读增量为`6` + +```shell +curl -G 'https://member.bilibili.com/x/web/data/article/thirty' \ +--data-urlencode 'type=1' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + ………… + { + "date_key": 1585699200, + "total_inc": 6 + }, { + "date_key": 1585785600, + "total_inc": 6 + }, { + "date_key": 1585872000, + "total_inc": 4 + }, { + "date_key": 1585958400, + "total_inc": 6 + }, { + "date_key": 1586044800, + "total_inc": 6 + }] +} +``` + +</details> + +## 稿件操作来源占比情况 + +> https://member.bilibili.com/x/web/data/survey + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +数据为上一天的 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | -------------- | +| type | num | 目标数据类型 | 必要 | 类型代码见下表 | + +类型代码`type`: + +| 代码 | 含义 | +| ---- | ---- | +| 1 | 播放 | +| 2 | 弹幕 | +| 3 | 评论 | +| 4 | 分享 | +| 5 | 投币 | +| 6 | 收藏 | +| 7 | 充电 | +| 8 | 点赞 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | ------------ | +| {YYYYMMDD} | obj | 上一天的情况 | 字段名为日期 | + +`data`中的`{YYYYMMDD}`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | ------------ | ---- | +| arc_inc | array | 稿件情况 | | +| total_inc | num | 总计增长情况 | | +| type_rank | obj | 分区排名情况 | | + +`{YYYYMMDD}`中的`arc_inc`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 稿件1 | | +| n | obj | 稿件(n+1) | | +| …… | obj | …… | …… | + +`{YYYYMMDD}`中的`arc_inc`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | ------------ | +| aid | num | 稿件avid | | +| bvid | str | 稿件bvid | | +| daytime | num | 统计时间 | 时间戳 | +| incr | num | 稿件增长情况数 | | +| interactive | num | 0 | 作用尚不明确 | +| ptime | num | 稿件发布时间 | 时间戳 | +| title | str | 稿件标题 | | + +`{YYYYMMDD}`中的`type_rank`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ---- | +| {分区名} | num | 该排名数 | | +| …… | num | …… | …… | + +**示例:** + +查询我的稿件来源占比情况 + +```shell +curl -G 'https://member.bilibili.com/x/web/data/survey' \ +--data-urlencode 'type=1' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "20200418": { + "arc_inc": [{ + "aid": 94916552, + "bvid": "BV1ZE411K7ux", + "incr": 18, + "title": "【8-bit】影 流 之 主(爱河)", + "daytime": 1587155030, + "ptime": 1583760165, + "interactive": 0 + }, { + "aid": 98948772, + "bvid": "BV1n741127LD", + "incr": 14, + "title": "【特斯拉线圈】组装迷你SSTC", + "daytime": 1587155030, + "ptime": 1585054436, + "interactive": 0 + }, { + "aid": 37294890, + "bvid": "BV1kt411D7yW", + "incr": 9, + "title": "【病毒】彩虹猫可以调速还带有计时器 MEMZ重构升级版", + "daytime": 1587155030, + "ptime": 1543775696, + "interactive": 0 + }, + ………… + ], + "total_inc": 55, + "type_rank": { + "生活": 1392, + "科技": 1597, + "音乐": 1058 + } + } + } +} +``` + +</details> + +## 播放来源占比情况(平台及方式) + +> https://member.bilibili.com/x/web/data/playsource + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------ | ---- | +| page_source | obj | 播放方式情况 | | +| play_proportion | obj | 播放平台情况 | | + +`data`中的`page_source`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------------- | ---- | +| dynamic | num | 通过动态 | | +| other | num | 其他方式 | | +| related_video | num | 通过推荐列表 | | +| search | num | 通过搜索 | | +| space | num | 空间列表播放 | | +| tenma | num | 天马(APP推荐信息流)来源 | | + +`data`中的`play_proportion`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------ | ---- | +| android | num | 安卓端 | | +| h5 | num | 移动端h5页面 | | +| ios | num | ios端 | | +| out | num | 站外 | | +| pc | num | 电脑版网页 | | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/data/playsource' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "play_proportion": { + "android": 6060, + "h5": 410, + "ios": 1325, + "out": 0, + "pc": 2137 + }, + "page_source": { + "dynamic": 173, + "other": 1440, + "related_video": 1813, + "search": 1980, + "space": 501, + "tenma": 4087 + } + } +} +``` + +</details> + +## 播放分布情况(粉丝与路人) + +> https://member.bilibili.com/x/web/data/base + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ---- | +| period | obj | 提示信息 | | +| viewer_area | obj | 播放地区情况 | | +| viewer_base | obj | 播放数据情况 | | + +`data`中的`period`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---- | ---- | +| module_one | str | ??? | | +| module_two | str | ??? | | +| module_three | str | ??? | | +| module_four | str | ??? | | + +`data`中的`viewer_area`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------------- | ---- | +| fan | obj | 粉丝播放地区情况 | | +| not_fan | obj | 路人播放地区情况 | | + +`viewer_area`中的`fan`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------------ | ---------------- | +| {行政区名} | num | 该地区的粉丝播放量 | 字段名为行政区名 | +| …… | num | …… | …… | + +`viewer_area`中的`not_fan`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------------ | ---------------- | +| {行政区名} | num | 该地区的路人播放量 | 字段名为行政区名 | +| …… | num | …… | …… | + +`data`中的`viewer_base`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------------- | ---- | +| fan | obj | 粉丝播放数据情况 | | +| not_fan | obj | 路人播放数据情况 | | + +`viewer_base`中的`fan`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------------ | ---- | +| male | num | 男性粉丝播放数 | | +| female | num | 女性粉丝播放数 | | +| age_one | num | 0-16岁粉丝播放数 | | +| age_two | num | 16-25岁粉丝播放数 | | +| age_three | num | 25-40岁粉丝播放数 | | +| age_four | num | 40+岁粉丝播放数 | | +| plat_pc | num | pc网页端粉丝播放数 | | +| plat_h5 | num | 移动h5端粉丝播放数 | | +| plat_out | num | 站外端粉丝播放数 | | +| plat_ios | num | ios端粉丝播放数 | | +| plat_android | num | 安卓端粉丝播放数 | | +| plat_other_app | num | 其他粉丝播放数 | | + +`viewer_base`中的`not_fan`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------------ | ---- | +| male | num | 男性路人播放数 | | +| female | num | 女性路人播放数 | | +| age_one | num | 0-16岁路人播放数 | | +| age_two | num | 16-25岁路人播放数 | | +| age_three | num | 25-40岁路人播放数 | | +| age_four | num | 40+岁路人播放数 | | +| plat_pc | num | pc网页端路人播放数 | | +| plat_h5 | num | 移动h5端路人播放数 | | +| plat_out | num | 站外端路人播放数 | | +| plat_ios | num | ios端路人播放数 | | +| plat_android | num | 安卓端路人播放数 | | +| plat_other_app | num | 其他路人播放数 | | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/data/base' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "period": { + "module_one": "各维度每日12:00 a.m. 更新前一日数据", + "module_two": "每日12:00 a.m. 更新前一日数据", + "module_three": "每周二12:00 a.m. 更新前一周数据", + "module_four": "各维度每日12:00 a.m. 更新前一日数据" + }, + "viewer_area": { + "fan": { + "上海": 7, + "中国台湾": 2, + "云南": 6, + "内蒙古": 8, + "北京": 14, + "吉林": 4, + "四川": 4, + "天津": 11, + "宁夏": 1, + "安徽": 8, + "山东": 18, + "山西": 10, + "广东": 50, + "广西": 7, + "新疆": 2, + "江苏": 17, + "江西": 6, + "河北": 13, + "河南": 13, + "浙江": 20, + "海南": 1, + "湖北": 13, + "湖南": 13, + "甘肃": 4, + "福建": 10, + "贵州": 4, + "辽宁": 9, + "重庆": 5, + "陕西": 93, + "香港特别行政区": 1, + "黑龙江": 12 + }, + "not_fan": { + "上海": 28, + "中国台湾": 3, + "云南": 22, + "内蒙古": 15, + "北京": 53, + "吉林": 20, + "四川": 60, + "天津": 18, + "宁夏": 7, + "安徽": 43, + "山东": 81, + "山西": 31, + "广东": 176, + "广西": 81, + "新疆": 11, + "江苏": 93, + "江西": 26, + "河北": 50, + "河南": 84, + "浙江": 97, + "海南": 10, + "湖北": 43, + "湖南": 43, + "甘肃": 14, + "福建": 54, + "西藏": 1, + "贵州": 16, + "辽宁": 47, + "重庆": 31, + "陕西": 102, + "青海": 2, + "香港特别行政区": 4, + "黑龙江": 25 + } + }, + "viewer_base": { + "fan": { + "male": 153, + "female": 24, + "age_one": 91, + "age_two": 174, + "age_three": 77, + "age_four": 53, + "plat_pc": 12072, + "plat_h5": 186, + "plat_out": 0, + "plat_ios": 23453, + "plat_android": 87387, + "plat_other_app": 1631 + }, + "not_fan": { + "male": 462, + "female": 72, + "age_one": 425, + "age_two": 445, + "age_three": 360, + "age_four": 188, + "plat_pc": 64760, + "plat_h5": 660, + "plat_out": 1, + "plat_ios": 111259, + "plat_android": 467767, + "plat_other_app": 3408 + } + } + } +} +``` + +</details> diff --git a/docs/creativecenter/upload.md b/docs/creativecenter/upload.md new file mode 100644 index 0000000..2dd94da --- /dev/null +++ b/docs/creativecenter/upload.md @@ -0,0 +1,1927 @@ +# 投稿 + +## 上传封面 + +> https://member.bilibili.com/x/vu/web/cover/up + +*请求方式: POST* + +认证方式:Cookie(SESSDATA) + +注: 目前看来上传的图片似乎不会自动删除 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| ts | num | 当前时间 | 不必要 | UNIX 毫秒时间戳 | + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | | +| cover | base64 | 视频封面 | 必要 | 经过 base64 编码的图片数据 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />-400: 请求错误<br />-111: csrf 校验失败<br />-101: 账号未登录 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| url | str | 封面 URL | | + +**示例:** + +假设已经把需要发送的数据进行编码存放在文件 `./b64` 中: + +```text +csrf=xxxxxxxxxxxx&cover=data%3Aimage%2Fjpeg%3Bbase64%2C%2F9j%2F4AAQSkZJRgABA... +``` + +发送请求: + +```shell +curl -X POST --url "https://member.bilibili.com/x/vu/web/cover/up" \ +--url-query "ts=$(date +%s%3N)" \ +--data-binary @b64 \ +-b "SESSDATA=xxxxxx; bili_jct=xxxxxx" +``` + +JavaScript (Node.js) 请求[示例](https://gist.github.com/SessionHu/5e47a3a1a351ac5486c87e3d63930e7a) + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "url": "https://archive.biliimg.com/bfs/archive/77906db03b1eefac02613de184afad03f7bc58d7.jpg" + } +} +``` + +</details> + +## 获取上传模板列表 + +> https://member.bilibili.com/x/vupre/web/tpls + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| t | num | 当前时间 | 非必要 | UNIX 毫秒时间戳 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | array | 模板列表 | | + + + +`data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| tid | num | 模板 ID | | +| name | str | 模板名称 | | +| typeid | num | 分区 ID | | +| title | str | 标题 | | +| tags | str | 标签 | | +| description | str | 描述 | | +| copyright | num | 版权类型 | 1: 自制<br />2: 转载 | +| attribute | num | 属性 | 0 或其他 | +| is_default | num | 是否默认 | 0: 否<br />1: 是 | + +**示例:** + +```shell +curl -G "https://member.bilibili.com/x/vupre/web/tpls" \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "tid": 12, + "name": "直播录像", + "typeid": 173, + "title": " 标题", + "tags": "可爱", + "description": "描述", + "copyright": 1, + "attribute": 0, + "is_default": 0 + }, + ] +} +``` + +</details> + +## 编辑上传模板 + +> https://member.bilibili.com/x/vupre/web/tpl/update + +*请求方式: POST* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| t | num | 当前时间 | 非必要 | UNIX 毫秒时间戳 | + +**正文参数(application/json):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| tid | num | 模板 ID | 必要 | | +| name | str | 模板名称 | 非必要 | | +| title | str | 标题 | 非必要 | | +| keywords | str | 标签 | 非必要 | 多个标签用 `,` 分隔 | +| description | str | 描述 | 非必要 | | +| typeid | num | 分区 ID | 非必要 | | +| arctype | str | 版权类型 | 非必要 | "Original": 自制<br />"Copy": 转载 | +| is_default | num | 是否默认 | 非必要 | 0: 否<br />1: 是 | +| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | + +**示例:** + +```shell +curl -X POST "https://member.bilibili.com/x/vupre/web/tpl/update" \ +--url-query "t=$(date +%s%3N)" \ +-H "Content-Type: application/json" \ +--data '{ + "tid": 12, + "name": "新模板名称", + "title": "新标题", + "keywords": "标签1,标签2", + "description": "新描述", + "typeid": 173, + "arctype": "Original", + "is_default": 1, + "csrf": "xxxxxxxxxxxx" +}' \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 查询话题 + +> https://member.bilibili.com/x/vupre/web/topic/type + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | ---- | +| type_id | num | 分区 ID | 非必要 | | +| pn | num | 页码 | 必要 | 从 0 开始 | +| ps | num | 每页个数 | 必要 | | +| title | str | 视频标题 | 非必要 | | +| t | num | 当前时间 | 非必要 | UNIX 毫秒时间戳 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | array | 话题列表 | | + + +`data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| topic_id | num | 话题 ID | | +| topic_name | str | 话题名称 | | +| description | str | 话题描述 | | +| mission_id | num | 任务 ID | | +| activity_text | str | 活动文本 | | +| activity_description | str | 活动描述 | | + +**示例:** + +```shell +curl -G "https://member.bilibili.com/x/vupre/web/topic/type" \ +--data-urlencode "pn=0" \ +--data-urlencode "ps=20" \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "topics": [ + { + "topic_id": 1245317, + "topic_name": "疯狂打游戏", + "description": "疯狂于游戏的世界吧!愿你在这场虚拟的战斗中展现出你非凡的智慧与勇气,让每一个夜晚都充满了激情与荣耀!", + "mission_id": 1742462, + "activity_text": "有奖活动", + "activity_description": "@神魂の魇 发起" + } + ], + "tags": null, + "maxpage": 200, + "request_id": "123" + } +} +``` + +</details> + +## 话题搜索 + +> https://member.bilibili.com/x/vupre/web/topic/search + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | ---- | +| page_size | num | 每页个数 | 非必要 | | +| offset | num | 个数偏移 | 非必要 | 并非页数 | +| keywords | str | 关键字 | 非必要 | | +| t | num | 当前时间 | 非必要 | UNIX 毫秒时间戳 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + + + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| result | obj | 搜索结果 | | + + + +`result` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| has_create_jurisdiction | bool | ? | | +| is_new_topic | bool | 是否为新话题? | | +| tips | str | 提示信息 | | +| page_info | obj | 分页信息 | | +| topics | array | 话题列表 | | + + + +`page_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| has_more | bool | 是否有更多 | | +| offset | num | 偏移量 | | +| page_number | num | 页码 | | + + + +`topics`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| act_protocol | str | ? | | +| activity_sign | str | ? | | +| description | str | 话题描述 | | +| id | num | 话题 ID | | +| mission_id | num | 任务 ID | | +| name | str | 话题名称 | | +| state | num | 状态? | | +| uname | str | ? | | + +**示例:** + +```shell +curl -G "https://member.bilibili.com/x/vupre/web/topic/search" \ +--data-urlencode "page_size=20" \ +--data-urlencode "offset=0" \ +--data-urlencode "keywords=example" \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "result": { + "topics": [ + { + "id": 1200265, + "name": "巴黎最前线", + "uname": "", + "state": 0, + "description": "巴黎体育盛会前线速递!", + "mission_id": 0, + "activity_sign": "", + "act_protocol": "" + } + ], + "page_info": { + "page_num": 0, + "offset": 1, + "has_more": true + }, + "is_new_topic": false, + "has_create_jurisdiction": true, + "tips": "该话题是UP主活动相关话题,您在话题下的稿件信息可能会被提供给发起话题的UP主,并可能被UP主用于二次创作" + } + } +} +``` + +</details> + +## 标签可用性检查 + +> https://member.bilibili.com/x/vupre/web/topic/tag/check + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| tag | str | 需要检查的标签 | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + + + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| code | num | 标签状态 | 0: 可用<br />其他: 不可用 | +| content | str | 错误返回 | | + +**示例:** + +```shell +curl -G "https://member.bilibili.com/x/vupre/web/topic/tag/check" \ +--data-urlencode "tag=example_tag" \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "code": 0, + "content": "" + } +} +``` + +```json +{ + "code": 16025, + "message": "tag已经被封印了~", + "ttl": 1, + "data": { + "code": 1, + "content": "服务器错误" + } +} +``` + +</details> + +## 获取简介相关信息 + +> https://member.bilibili.com/x/vupre/web/archive/desc/format + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | ---- | +| typeid | num | 分区 ID | 必要 | | +| copyright | num | 版权类型 | 必要 | 1:自制<br/>2:转载 | +| t | num | 当前时间 | 非必要 | UNIX 毫秒时间戳 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | null | 信息本体 | | + +注:某个时间点后,没有发现 data 为 null 的情况了,过去为 null 时简介上限250字 + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| typeid | num | 分区 ID | | +| id | num | ID | | +| lang | num | 未知 | | +| copyright | num | 版权类型| 1:自制<br/>2:转载 | +| components | str | 简介输入框提示文字 | JSON 字符串 | + +`components` 示例: +`'[{"name":"相关游戏","index":1,"type":"text","required":"1","box":"请输入本视频所涉及的游戏名称,以顿号分隔,例:英雄联盟、塞尔达传说、刺客信条"},{"name":"简介补充","index":2,"type":"textarea","required":"1","box":""}]'` + +**示例:** + +```shell +curl -G "https://member.bilibili.com/x/vupre/web/archive/desc/format" \ +--data-urlencode "typeid=65" \ +--data-urlencode "copyright=1" \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "typeid": 65, + "id": 1, + "lang": 0, + "copyright": 1, + "components": "[{\"name\":\"相关游戏\",\"index\":1,\"type\":\"text\",\"required\":\"1\",\"box\":\"请输入本视频所涉及的游戏名称,以顿号分隔,例:英雄联盟、塞尔达传说、刺客信条\"},{\"name\":\"简介补充\",\"index\":2,\"type\":\"textarea\",\"required\":\"1\",\"box\":\"\"}]" + } +} +``` + +</details> + +## 获取上传线路 + +> https://member.bilibili.com/preupload?r=probe + +*请求方式: GET* + +认证方式:无 + +**URL参数:** + +无 + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| OK | num | 返回值 | 1: 成功<br />其他: 失败 | +| lines | array | 上传线路列表 | | +| probe | obj | 未知 | | + +probe 中的对象: +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------- | ----- | +| post | float | 未知 | 固定0.1 | + +lines 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------- | ----- | +| os | str | 操作系统 | | +| query | str | 查询参数 | | +| probe_url | str | 探测 URL | | + +**示例:** + +```shell +curl -G "https://member.bilibili.com/preupload?r=probe" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "OK": 1, + "lines": [ + { + "os": "upos", + "query": "probe_version=20221109&upcdn=tx&zone=cs", + "probe_url": "//upos-cs-upcdntx.bilivideo.com/OK" + }, + { + "os": "upos", + "query": "probe_version=20221109&upcdn=bldsa&zone=cs", + "probe_url": "//upos-cs-upcdnbldsa.bilivideo.com/OK" + }, + { + "os": "upos", + "query": "probe_version=20221109&upcdn=bda2&zone=cs", + "probe_url": "//upos-cs-upcdnbda2.bilivideo.com/OK" + } + ], + "probe": { + "post": 0.1 + } +} +``` + +</details> + +## 预测稿件类型 + +> https://member.bilibili.com/x/vupre/web/archive/types/predict + +*请求方式: POST* + +认证方式: Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| ts | num | 当前时间 | 不必要 | UNIX 毫秒时间戳 | +| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | | + +**正文参数(multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| filename | str | 视频文件名 | 必要 | 从视频上传接口获取, 无后缀名, 可为空 | +| title | str | 视频标题 | 不必要 || +| upload_id | str | 上传 ID | 不必要 | 如 `616368979_1723455540876_8794` | + +**JSON回复:** + +根对象: + +|字段|类型|内容|备注| +|---|-|-|---| +|code|num|返回值|0: 成功<br />-400: 请求错误<br />-111: csrf 校验失败<br />-101: 账号未登录| +|message|str|错误信息|默认为 0| +|ttl|num|1|| +|data|array|信息本体|| + +`data` 数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| 0 | obj | 视频类型 1 | | +| 1 | obj | 视频类型 2 | | +| …… | obj | …… | | +| n | obj | 视频类型 (n+1) | | + +`data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| id | num | 子分区 ID | | +| parent | num | 总分区 ID | | +| parent_name | str | 总分区名称 | | +| name | str | 子分区名称 | | +| description | str | 子分区描述 | | +| desc | str | 子分区描述 | 同 `description` | +| intro_original | str | 原创简介说明 | | +| intro_copy | str | 转载简介说明 | | +| notice | str | 注意事项 | | +| copy_right | num | 版权信息? | 0 | +| show | bool | 是否显示? | true | +| rank | num | 排序权重? | | +| max_video_count | num | 最大视频数量? | | +| request_id | str | 空 | | +| human_type | obj\|null | 新分区ID,好像除第一个之外都是null | + +`human_type` 参数 +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| id | num | 新分区id | 可在 [获取新分区ID](#获取新分区ID) 找到对应名称 | + +**示例:** + +```shell +curl -X POST --url 'https://member.bilibili.com/x/vupre/web/archive/types/predict' \ +--url-query 'csrf=d51eadf05ba3bc6c5f76def7fbcc0185' \ +--data-urlencode 'filename=' \ +-b 'SESSDATA=xxx; bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "id": 122, + "parent": 36, + "parent_name": "知识", + "name": "野生技能协会", + "description": "技能展示或技能教学分享类视频", + "desc": "技能展示或技能教学分享类视频", + "intro_original": "可对视频内容进行补充说明,并对所使用的视频素材进行标明。\n如是系列,也可附带上期视频地址。\n请勿加入涉政或具较大争议性的文字简介,否则将做打回处理。", + "intro_copy": "转载稿件需标明出处,请注明原作者、原作者频道名或原作者投稿地址。\n可对相关内容进行补充说明。\n请勿加入涉政或具较大争议性的文字简介,否则将做打回处理。\n如是系列,也可附带上期视频地址。", + "notice": "清晰明了表明内容亮点的标题会更受观众欢迎哟!", + "copy_right": 0, + "show": true, + "rank": 75, + "max_video_count": 100, + "request_id": "" + }, + { + "id": 21, + "parent": 160, + "parent_name": "生活", + "name": "日常", + "description": "一般日常向的生活类视频", + "desc": "一般日常向的生活类视频", + "intro_original": "能够选择自制的必须是up主个人或工作室自己制作剪辑的视频,除此之外的搬运视频字幕制作,对于视频进行加速、慢放等简易二次创作,在视频中添加前后贴片或者打水印等行为均不被认作自制", + "intro_copy": "转载需写明请注明转载作品详细信息原作者、原标题及出处(需为该视频最原始出处,如所标注明显为非原始出处的话会被打回)", + "notice": "", + "copy_right": 0, + "show": true, + "rank": 4, + "max_video_count": 50, + "request_id": "" + }, + { + "id": 242, + "parent": 5, + "parent_name": "娱乐", + "name": "娱乐粉丝创作", + "description": "粉丝向创作视频", + "desc": "粉丝向创作视频", + "intro_original": "", + "intro_copy": "", + "notice": "清晰明了表明内容亮点的标题会更受观众欢迎哟!", + "copy_right": 0, + "show": true, + "rank": 40, + "max_video_count": 50, + "request_id": "" + }, + { + "id": 65, + "parent": 4, + "parent_name": "游戏", + "name": "网络游戏", + "description": "多人在线游戏为主要内容的相关视频", + "desc": "多人在线游戏为主要内容的相关视频", + "intro_original": "建议在简介和TAG中添加正确的游戏名,以便在分区和搜索中得到更好的展示。\n录制他人直播(包括授权转载、授权录制)不属于自制内容,请选转载。", + "intro_copy": "建议在简介和TAG中添加正确的游戏名。\n搬运转载内容请添加原作者、原链接地址信息。录制他人直播内容请添加原主播信息、直播时间。\n未添加正确转载、录播信息的稿件可能被打回。", + "notice": "【UP主/节目名】+《游戏名》+主要标题+期号", + "copy_right": 0, + "show": true, + "rank": 30, + "max_video_count": 50, + "request_id": "" + }, + { + "id": 138, + "parent": 160, + "parent_name": "生活", + "name": "搞笑", + "description": "搞笑挑战、剪辑、表演、配音以及各类日常沙雕视频", + "desc": "搞笑挑战、剪辑、表演、配音以及各类日常沙雕视频", + "intro_original": "能够选择自制的必须是up主个人或工作室自己制作剪辑的视频,除此之外的搬运视频字幕制作,对于视频进行加速、慢放等简易二次创作,在视频中添加前后贴片或者打水印等行为均不被认作自制", + "intro_copy": "转载需写明请注明转载作品详细信息原作者、原标题及出处(需为该视频最原始出处,如所标注明显为非原始出处的话会被打回)", + "notice": "", + "copy_right": 0, + "show": true, + "rank": 30, + "max_video_count": 50, + "request_id": "" + } + ] +} +``` + +</details> + +## 预测稿件标签 + +> https://member.bilibili.com/x/vupre/web/tag/recommend + +*请求方式: GET* + +认证方式: Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| upload_id | str | 同 [预测稿件类型](#预测稿件类型) 的 `upload_id` | 不必要 | | +| subtype_id | int | 子分区 ID | 不必要 | | +| title | str | 视频标题 | 不必要 | | +| filename | str | 同 [预测稿件类型](#预测稿件类型) 的 `filename` | 不必要 | | +| description | str | 视频简介 | 不必要 | | +| cover_url | str | 视频封面 URL | 不必要 | 不含 `https:` 或 `http:` 字串 | +| t | int | 当前 UNIX 毫秒时间戳 | 不必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | int | 返回值 | 0: 成功<br />-101: 账号未登录 | +| data | array | 标签信息 | | +| message | str | 错误信息 | 默认为 0 | +| request_id | str | 请求 ID | | + +`data` 数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| 0 | obj | 标签 1 | | +| 1 | obj | 标签 2 | | +| …… | obj | …… | | +| n | obj | 标签 (n+1) | | + +`data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| tag | str | 标签名称 | | +| checked | int | 0 | | +| request_id | str | 请求 ID | 同根对象 | + +**示例:** + +```shell +curl -G 'https://member.bilibili.com/x/vupre/web/tag/recommend' \ +--url-query 'subtype_id=122' \ +--url-query 'title=Telnet手打HTTP' \ +--url-query 'description=测试用 Telnet 手打 HTTP/1.x 协议访问本地服务器, 无 SSL/TLS 支持' +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": [ + { + "tag": "学习", + "checked": 0, + "request_id": "TAG_1723543336295_3371" + }, + { + "tag": "编程", + "checked": 0, + "request_id": "" + }, + { + "tag": "课程", + "checked": 0, + "request_id": "" + }, + { + "tag": "学习心得", + "checked": 0, + "request_id": "" + }, + { + "tag": "经验分享", + "checked": 0, + "request_id": "" + } + ], + "message": "0", + "request_id": "TAG_1723543336295_3371" +} +``` + +</details> + +## 投递视频稿件(Web) + +> https://member.bilibili.com/x/vu/web/add/v3 + +*请求方式: POST* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| ts | num | 当前时间 | 不必要 | UNIX 毫秒时间戳 | +| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | | + +**正文参数(application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| videos | array | 视频信息 | 必要 | 若为分 P 视频, 请注意数组元素顺序 | +| cover | str | 视频封面 URL | 非必要 | 如果不传会自动取封面,参见[上传视频封面](#上传视频封面) | +| cover43 | str | 视频封面 URL (比例为 4:3) | 非必要 | 可为空 | +| title | str | 视频标题 | 必要 | 最多 80 字 | +| copyright | num | 1: 自制<br />2: 转载 | 必要 | | +| tid | num | 分区 ID | 必要 | Web端此参数已无法手动设置,参数值为从[预测稿件类型](#预测稿件类型)中获取第一个固定id | +| human_type2 | num | 新分区ID | 非必要| 从 [新分区ID](#获取新分区ID) 获取 | +| tag | str | 视频标签 | 必要 | 多个标签用 `,` 分隔, 最多 10 个 | +| desc_format_id | num | 简介格式 ID? | 必要 | 9999: 纯文本 | +| desc | str | 视频简介 | 非必要 | 最多 2000 字 | +| desc_v2 | str | 视频简介额外信息 | 非必要 | 比如有艾特操作时传递,见备注 | +| recreate | num | 是否允许二创 | 必要 | -1: 允许(默认)<br />1: 不允许 | +| dynamic | str | 粉丝动态 | 必要 | | +| interactive | num | 互动视频? | 必要 | 0: 否 | +| act_reserve_create | num | 活动预约? | 必要 | 0: 否 | +| no_disturbance | num | 是否推送到动态| 必要 | 0:不推送,1:推送| +| no_reprint | num | 是否允许转载 | 必要 | 1: 允许<br />0: 不允许 | +| subtitle | obj | 字幕信息 | 必要 | | +| dolby | num | 杜比音效 | 必要 | 0: 否(默认)<br />1: 是 | +| lossless_music | num | 无损音乐 | 必要 | 0: 否(默认)<br />1: 是 | +| up_selection_reply | bool | 精选评论 | 必要 | | +| up_close_reply | bool | 关闭评论 | 必要 | | +| up_close_danmu | bool | 关闭弹幕 | 必要 | | +| web_os | num | 平台类型? | 必要 | 3 | +| is_only_self | 可见性 | 非必要 | 0:公开<br/>1:仅自己可见 | +| topic_id | 话题id | 非必要 | 可从[查询话题](./upload.md#查询话题)等相关接口获取 | +| mission_id | 任务id | 非必要 | 可从[查询话题](./upload.md#查询话题)等相关接口获取 | +| is_360 | num | 是否全景 | 非必要 | -1:非全景<br/>1:全景 | +| neutral_mark | str | 创作者声明 | 非必要 | | + +`videos` 数组中的对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| filename | str | 视频文件名 | 必要 | 从视频上传接口获取, 无后缀名 | +| title | str | 分 P 标题 | 必要 | | +| desc | str | 分 P 简介 | 必要 | | +| cid | num | 分 P cid | 必要 | 从视频上传接口获取, 即 `biz_id` | + +`subtitle` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| open | num | 是否启用字幕投稿 | 必要 | 0: 启用(默认)<br />1: 不启用 | +| lan | str | 字幕投稿语言 | 必要 | 可为空 | + +**desc_v2举例:** + +```js +{ + // 如果两者不一致,可能导致后续在web修改出现错误 + "desc": "前面@陈睿 后面", + "desc_v2": [ // 纯文字type是1,艾特用户type是2,biz_id为用户uid + { + "biz_id": "", + "raw_text": "前面", + "type": 1 + }, + { + "biz_id": "208259", // uid + "raw_text": "陈睿", // 用户名 + "type": 2 + }, + { + "biz_id": "", + "raw_text": " 后面", + "type": 1 + } + ] +} +``` + +**示例:** + +假设已经把需要发送的数据存放在文件 `./data.json` 中: + +```json +{ + "videos": [ + { + "filename": "n240728ad33h52yqhxbtw51cb06sq9gx", + "title": "Telnet手打HTTP", + "desc": "", + "cid": 500001629877726 + } + ], + "cover": "https://archive.biliimg.com/bfs/archive/85447ea20431ef799382c403c84b4bfb82a41053.jpg", + "cover43": "", + "title": "Telnet手打HTTP", + "copyright": 1, + "tid": 122, + "tag": "telnet,socket,tcp,linux,http", + "desc_format_id": 9999, + "desc": "测试用 Telnet 手打 HTTP/1.x 协议访问本地服务器, 无 SSL/TLS 支持", + "recreate": -1, + "dynamic": "for testing", + "interactive": 0, + "act_reserve_create": 0, + "no_disturbance": 0, + "no_reprint": 1, + "subtitle": { + "open": 0, + "lan": "" + }, + "dolby": 0, + "lossless_music": 0, + "up_selection_reply": false, + "up_close_reply": false, + "up_close_danmu": false, + "web_os": 3, + "csrf": "xxxxxxxxxxxxxxxxxxxxxxxx" +} +``` + +发送请求: + +```shell +curl -X POST --url "https://member.bilibili.com/x/vu/web/add/v3" \ +--url-query "ts=$(date +%s%3N)" \ +--url-query "csrf=xxxxxxxxxxxxxxxxxxxxxxxx" \ +-H "Content-Type: application/json; charset=utf-8" \ +--data @data.json \ +-b "SESSDATA=xxxxxx; bili_jct=xxxxxxxxxxxxxxxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aid": 112861976201494, + "bvid": "BV181vnexEmB" + } +} +``` + +</details> + +## 编辑视频稿件(Web) + +> https://member.bilibili.com/x/vu/web/edit + +*请求方式: POST* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| t | num | 当前时间 | 非必要 | UNIX 毫秒时间戳 | +| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | | + +**正文参数(application/json):** + +绝大部分参数与上传一致,部分参数只有不对编辑生效 + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| aid | num | 视频 ID | 必要 | | +| videos | array | 视频信息 | 必要 | 若为分 P 视频, 请注意数组元素顺序 | +| title | str | 视频标题 | 必要 | 最多 80 字 | +| cover | str | 视频封面 URL | 非必要 | 如果不传会自动取封面,参见[上传视频封面](#上传视频封面) | +| cover43 | str | 视频封面 URL (比例为 4:3) | 非必要 | 可为空 | +| copyright | num | 1: 自制<br />2: 转载 | 必要 | | +| tid | num | 分区 ID | 必要 | | +| tag | str | 视频标签 | 必要 | 多个标签用 `,` 分隔, 最多 10 个 | +| desc_format_id | num | 简介格式 ID? | 必要 | 9999: 纯文本 | +| desc | str | 视频简介 | 非必要 | 最多 2000 字 | +| desc_v2 | str | 视频简介额外信息 | 非必要 | 比如有艾特操作时传递,见上传视频 | +| recreate | num | 是否允许二创 | 必要 | -1: 允许(默认)<br />1: 不允许 | +| dynamic | str | 粉丝动态 | 必要 | | +| interactive | num | 互动视频? | 必要 | 0: 否 | +| act_reserve_create | num | 活动预约? | 必要 | 0: 否 | +| no_disturbance | num | 是否推送到动态 | 必要 | 0:不推送<br />1:推送 | +| no_reprint | num | 是否允许转载 | 必要 | 1: 允许<br />0: 不允许 | +| subtitle | obj | 字幕信息 | 必要 | | +| web_os | num | 操作系统 | 必要 | 1: Web | +| mission_id | num | 任务 ID | 非必要 | 0: 无 | +| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | | +| new_web_edit | num | 未知 | 非必要 | 未知 | +| is_360 | num | 是否全景 | 非必要 | -1:非全景<br/>1:全景 | +| is_only_self | 可见性 | 非必要 | 0:公开<br/>1:仅自己可见 | + + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aid": 123456, + "bvid": "BV1xx411c7mD" + } +} +``` + +</details> + +## 获取新分区ID + +> https://member.bilibili.com/x/vupre/web/archive/human/type2/list + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| t | num | 当前时间 | 非必要 | UNIX 毫秒时间戳 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| code | num | 返回值 | 0: 成功<br />其他: 失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| type_list | array | 信息本体 | | + +`type_list` 对象: + +| 参数名 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ---- | +| id | num | 分区ID | | +| name | str | 分区名 | | + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "type_list": [ + { + "id": 1001, + "name": "影视" + }, + { + "id": 1002, + "name": "娱乐" + }, + { + "id": 1003, + "name": "音乐" + }, + { + "id": 1004, + "name": "舞蹈" + }, + { + "id": 1005, + "name": "动画" + }, + { + "id": 1006, + "name": "绘画" + }, + { + "id": 1007, + "name": "鬼畜" + }, + { + "id": 1008, + "name": "游戏" + }, + { + "id": 1009, + "name": "资讯" + }, + { + "id": 1010, + "name": "知识" + }, + { + "id": 1011, + "name": "人工智能" + }, + { + "id": 1012, + "name": "科技数码" + }, + { + "id": 1013, + "name": "汽车" + }, + { + "id": 1014, + "name": "时尚美妆" + }, + { + "id": 1015, + "name": "家装房产" + }, + { + "id": 1016, + "name": "户外潮流" + }, + { + "id": 1017, + "name": "健身" + }, + { + "id": 1018, + "name": "体育运动" + }, + { + "id": 1019, + "name": "手工" + }, + { + "id": 1020, + "name": "美食" + }, + { + "id": 1021, + "name": "小剧场" + }, + { + "id": 1022, + "name": "旅游出行" + }, + { + "id": 1023, + "name": "三农" + }, + { + "id": 1024, + "name": "动物" + }, + { + "id": 1025, + "name": "亲子" + }, + { + "id": 1026, + "name": "健康" + }, + { + "id": 1027, + "name": "情感" + }, + { + "id": 1029, + "name": "vlog" + }, + { + "id": 1030, + "name": "生活兴趣" + }, + { + "id": 1031, + "name": "生活经验" + } + ] + } +} +``` + +</details> + +## 上传视频文件 + +注: 目前看来上传的视频文件似乎不会自动删除, 而且似乎不是视频也可以上传的样子, 但是下载认证字段有效期只有 5 天 + +### 上传流程 + +整个上传流程较为复杂, 详细参见[Demo](#Demo) + +1. `GET` `preupload` 接口, [获取上传元数据](#获取上传元数据-预上传) + +2. `POST` 第 1 步得到的地址, [上传视频元数据](#上传视频元数据) + +3. `PUT` 第 1 步得到的地址, [分片上传视频文件](#分片上传视频文件) + +4. `POST` 第 1 步得到的地址, [结束上传视频文件](#结束上传视频文件) + +5. `GET` 第 1 步得到的地址, [下载已上传的视频文件](#下载已上传的视频文件) , 确认上传成功 (可选) + +### 上传接口 + +#### 获取上传元数据 (预上传) + +> https://member.bilibili.com/preupload + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| name | str | 文件名 | 必要 | 会影响返回的上传地址 | +| r | str | 上传区域? | 必要 | upos | +| profile | str | 上传配置? | 必要 | 普通视频: ugcfx/bup<br />提交反馈: feedback/bup | +| probe_version | num | 上传版本? | 不必要 | 20221109 | +| upcdn | str | 上传 CDN? | 不必要 | txa | +| zone | str | 上传区域? | 不必要 | cs | +| ssl | num | 是否使用 SSL? | 不必要 | 0 | +| version | str | 上传版本? | 不必要 | 2.14.0.0 | +| build | str | 上传版本? | 不必要 | 2140000 | +| size | num | 文件大小 | 不必要 | 视频文件大小, 单位 字节 | +| webVersion | str | 上传版本? | 不必要 | 2.13.0 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| OK | num | 1 | | +| auth | str | 上传凭证 | 作为后面请求中请求头, 有效期 5 天 | +| biz_id | num | 业务 ID? | | +| chunk_retry | num | 重试次数? | | +| chunk_retry_delay | num | 重试延迟? | | +| chunk_size | num | 分块大小 | 后面要用 | +| endpoint | str | 上传节点 | 后面要用 | +| endpoints | array | 上传节点列表 | | +| expose_params | null | | | +| put_query | str | 上传参数? | | +| threads | num | 上传线程数 | | +| timeout | num | 超时时间? | | +| uip | str | 你的 IP | | +| upos_uri | str | 上传地址 | 后面要用 | + +`endpoints` 数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ----- | +| 0 | str | 上传节点1 | | +| …… | str | …… | | +| n | str | 上传节点n | | + +**示例:** + +假设视频文件名为 `2024-07-28_15-37-50.mkv`, 视频大小为 `305333744` 字节 + +```shell +curl -G "https://member.bilibili.com/preupload" \ +--data-urlencode "name=2024-07-28_15-37-50.mkv" \ +--data-urlencode "r=upos" \ +--data-urlencode "profile=ugcfx/bup" \ +-b "SESSDATA=xxxxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "OK": 1, + "auth": "ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=b6c5cc520a281200906aea97e190b098×tamp=1722155211.324&uid=616368979&uip=108.181.24.77&uport=52096&use_dqp=0", + "biz_id": 500001630152509, + "chunk_retry": 10, + "chunk_retry_delay": 3, + "chunk_size": 10485760, + "endpoint": "//upos-cs-upcdntxa.bilivideo.com", + "endpoints": [ + "//upos-cs-upcdntxa.bilivideo.com", + "//upos-cs-upcdnalia.bilivideo.com" + ], + "expose_params": null, + "put_query": "os=upos&profile=ugcfx%2Fbup", + "threads": 3, + "timeout": 1200, + "uip": "108.181.24.77", + "upos_uri": "upos://ugcfx2lf/n240728ad1p51if4g3ke4s3o95sznogy.mkv" +} +``` + +</details> + +#### 上传视频元数据 + +> URL 拼接格式: `"https"` + [上一个接口](#获取上传元数据-预上传)的`endpoint` + 上一个接口的`upos_uri`去掉协议名 +> JavaScript 模板字符串: `https:${preupload.endpoint}/${endpoint.upos_uri.replace("upos://", "")}` + +*请求方式: POST* + +认证方式:请求头 `X-Upos-Auth` 为上一接口得到的 `auth` + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| uploads | str | 留空 | 必要 | 留空 | +| output | str | 输出格式 | 不必要 | 默认为 json(推荐), 留空为 xml | +| profile | str | 上传配置? | 必要 | 与上一个接口保持相同 | +| filesize | num | 文件大小 | 必要 | 视频文件大小, 单位 字节<br />feedback/bup 不必要 | +| partsize | num | 分块大小 | 必要 | 上一个接口返回, 且后面要用<br />feedback/bup 不必要 | +| biz_id | num | 业务 ID? | 必要 | 上一个接口返回, 且后面要用<br />feedback/bup 不必要 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----- | +| OK | num | 1 | | +| bucket | str | 空间名? | | +| key | str | 文件名? | | +| upload_id | str | 上传 ID | 后面要用 | + +**示例:** + +假设上一接口返回的 +`auth` 为 `ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=4004b35628e982bc90b59cec86f8c441×tamp=1722173443.298&uid=616368979&uip=104.28.153.18&uport=44282&use_dqp=0`, +`biz_id` 为`500001630454700`, +`endpoint` 为 `//upos-cs-upcdntxa.bilivideo.com`, +`upos_uri` 为 `upos://ugcfx2lf/n240728adhejliqv0kqyg2s5n6huv501.mkv`, +`chunk_size` 为 `10485760`. +视频文件大小为 `305333744` 字节. + +```shell +curl -X POST --url "https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240728adhejliqv0kqyg2s5n6huv501.mkv` \ +--url-query "uploads=" \ +--url-query "output=json" \ +--url-query "profile=ugcfx/bup" \ +--url-query "filesize=305333744" \ +--url-query "partsize=10485760" \ +--url-query "biz_id=500001630454700" \ +-H "X-Upos-Auth: ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=4004b35628e982bc90b59cec86f8c441×tamp=1722173443.298&uid=616368979&uip=104.28.153.18&uport=44282&use_dqp=0" \ +-b "SESSDATA=xxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "OK": 1, + "bucket": "ugcfx2lf", + "key": "/n240728adhejliqv0kqyg2s5n6huv501.mkv", + "upload_id": "26c674b4-0dce-45f5-a9cd-a199d9c982bf" +} +``` + +</details> + +#### 分片上传视频文件 + +> URL 同 [上一个接口](#上传视频元数据) + +*请求方式: PUT* + +认证方式:请求头 `X-Upos-Auth` 为上上一接口得到的 `auth` + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| partNumber | num | 分块序号 | 必要 | 从 1 开始 | +| uploadId | str | 上传 ID | 必要 | 上一个接口返回 | +| chunk | num | 分块序号 | 必要 | 从 0 开始 | +| chunks | num | 分块总数 | 必要 | 自行计算: 文件大小除以分块大小并向上取整 | +| size | num | 该分块大小 | 必要 | 该实际上传字节数 | +| start | num | 该分块开始位置 | 必要 | 已实际上传字节数 | +| end | num | 该分块结束位置 | 必要 | 该分块上传结束后实际上传总字节数 | +| total | num | 总大小 | 必要 | 视频文件大小, 单位 字节 | + +**正文参数(application/octet-stream):** + +视频文件在该分块的字节流 + +**纯文本回复:** + +```text +MULTIPART_PUT_SUCCESS +``` + +**示例:** + +假设上上一接口返回的 +`auth` 为 `ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0`, +`endpoint` 为 `//upos-cs-upcdntxa.bilivideo.com`, +`upos_uri` 为 `upos://ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz`, +`chunk_size` 为 `10485760`. + +上一接口返回的 +`upload_id` 为 `8130090a-16f7-4fe6-8a29-198f5abce913`. + +视频文件名为 `20240724-remove-linux-then-install.tar.xz`, 文件大小为 `278255704` 字节. + +假设您要上传的分块序号为 `1`, +该分块大小为 `10485760`, +该分块开始位置为 `0`, +该分块结束位置为 `10485760`, +该分块实际上传字节数为 `10485760`, +您已将文件分块存放至 `part01.tar.xz`, `part02.tar.xz`, ..., `part27.tar.xz`. + +```shell +curl -X PUT --url "https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz" \ +--url-query "partNumber=1" \ +--url-query "uploadId=8130090a-16f7-4fe6-8a29-198f5abce913" \ +--url-query "chunk=0" \ +--url-query "chunks=27" \ +--url-query "size=10485760" \ +--url-query "start=0" \ +--url-query "end=10485760" \ +--url-query "total=278255704" \ +-H "X-Upos-Auth: ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0" \ +-H "Content-Type: application/octet-stream" \ +--data-binary @part01.tar.xz \ +-b "SESSDATA=xxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```text +MULTIPART_PUT_SUCCESS +``` + +</details> + +#### 结束上传视频文件 + +> URL 同 [上一个接口](#分片上传视频文件) + +*请求方式: POST* + +认证方式:请求头 `X-Upos-Auth` 为上上上一接口得到的 `auth` + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| output | str | 输出格式 | 不必要 | 默认为 json(推荐), 留空为 xml | +| name | str | 文件名 | 必要 | 视频文件名 | +| profile | str | 上传配置? | 必要 | 与上一个接口相同, 普通视频: ugcfx/bup | +| uploadId | str | 上传 ID | 必要 | 与上一个接口相同 | +| biz_id | num | 业务 ID? | 必要 | 与上上一个接口相同 | + +**正文参数(application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| parts | array | 各分块信息 | 必要 | 按实际上传顺序而不是分块序号顺序 | + +`parts` 数组: + +| 项 | 类型 | 内容 | 必要性 | 备注 | +| --- | ---- | ---- | ------ | ---- | +| 0 | obj | 分块信息1 | 必要 | 按实际上传顺序而不是分块序号顺序 | +| 1 | obj | 分块信息2 | 必要 | | +| …… | obj | …… | | | +| n | obj | 分块信息n | 必要 | | + +`parts` 数组中的对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| partNumber | num | 分块序号 | 必要 | 从 1 开始 | +| eTag | str | `etag` | 必要 | | + +**JSON回复:** + +与 [上上一个接口](#上传视频元数据) 相同 + +**示例:** + +假设上上上一接口返回的 +`auth` 为 `ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0`, +`endpoint` 为 `//upos-cs-upcdntxa.bilivideo.com`, +`upos_uri` 为 `upos://ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz`, +`biz_id` 为 `500001630826789`. + +上上一接口返回的 +`upload_id` 为 `8130090a-16f7-4fe6-8a29-198f5abce913`. + +视频文件名为 `20240724-remove-linux-then-install.tar.xz`, 文件大小为 `278255704` 字节. + +假设您已经全部上传完毕, 共上传 `27` 个分块, 本次请求上传的的内容存放在 `body.json` 文件中. + +```shell +curl -X PUT --url "https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz" \ +--url-query "output=json" \ +--url-query "name=20240724-remove-linux-then-install.tar.xz" \ +--url-query "profile=ugcfx%2Fbup" \ +--url-query "uploadId=8130090a-16f7-4fe6-8a29-198f5abce913" \ +--url-query "biz_id=500001630826789" \ +-H "X-Upos-Auth: ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0" \ +-H "Content-Type: application/json" \ +--data-binary @body.json \ +-b "SESSDATA=xxxxxxxxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "OK": 1, + "location": "ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz", + "bucket": "ugcfx2lf", + "key": "/n240729ad7gxi43yaoml312h2nbt2pnf.xz" +} +``` + +</details> + +#### 下载已上传的视频文件 + +> URL 同 [上一个接口](#结束上传视频文件) + +*请求方式: GET* + +认证方式:请求头 `X-Upos-Auth` 为上上上上一接口得到的 `auth` + +注: 由于 `X-Upos-Auth` 有效期只有 5 天, 过期请求将返回 HTTP 403 如下 + +```http +HTTP/1.1 403 Forbidden +Bili-Trace-Id: 3e3f2db61366adbf +Server: upos@hcsgw@jscs-bvc-hcsgw-public-02 +X-Bili-Trace-Id: 0d8ca1af6d3510253e3f2db61366adbf +X-Upos-Auth: AUTH_TS_GT_5DAY AUTH=ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0 Now=1722662669 DURATION=449893 +Content-Length: 0 +Connection: keep-alive +Date: Sat, 03 Aug 2024 05:24:29 GMT +EO-LOG-UUID: 4296647794590631154 +EO-Cache-Status: MISS +``` + +**字节流回复:** + +视频文件字节流 + +**示例:** + +假设请求上一接口时的 URL 为 `https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz`, +请求头的 `X-Upos-Auth` 为 `ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0`, +您想要下载到运行目录下的 `file.tar.xz` 文件 + +```shell +curl -G "https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz" \ +-H "X-Upos-Auth: ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0" \ +--output file.tar.xz +``` + +<details> +<summary>查看检查示例:</summary> + +```text + % Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed +100 265M 100 265M 0 0 9493k 0 0:00:28 0:00:28 --:--:-- 10.3M +$ sha512sum file.tar.xz +abfbedf1ac4f251c81103beb4d5406af1e0b64b9d54e99bfc77d2a8a9c4913a9fd2f1751828ace8aac036f6385609d99e251437b07a0491caca2ad7069a57003 file.tar.xz +$ sha512sum ~/Documents/video-proj/20240724-remove-linux-then-install.tar.xz +abfbedf1ac4f251c81103beb4d5406af1e0b64b9d54e99bfc77d2a8a9c4913a9fd2f1751828ace8aac036f6385609d99e251437b07a0491caca2ad7069a57003 /home/sess/Documents/video-proj/20240724-remove-linux-then-install.tar.xz +``` + +</details> + +### Demo + +#### Java + +注: 需要 Gson 依赖, Java 8+, 单线程上传, 无异常处理, 仅供参考 + +```java +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.StringJoiner; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; + +/** + * A demo class for uploading videos to Bilibili. + * + * @author SessX6cf + */ +public class BiliVideoUploader { + + private static String SESSDATA; + private static File VIDEO_FILE; + + public static void main(String[] args) throws IOException { + long ts = System.currentTimeMillis(); + if (args.length < 2) { + System.out.println("Usage: java BiliVideoUploader <video_file> <sessdata>"); + return; + } else { + VIDEO_FILE = new File(args[0]); + if (!VIDEO_FILE.isFile()) { + System.out.println("It is not a file!"); + return; + } else if (!VIDEO_FILE.canRead()) { + System.out.println("Cannot read the file!"); + return; + } else if (VIDEO_FILE.isDirectory()) { + System.out.println("You can play a directory?!"); + return; + } + SESSDATA = args[1]; + } + // step 1: preupload video + System.out.println("step 1: preupload video"); + JsonObject preuploadVideo = preuploadVideo(); + // step 2: post video meta + System.out.println("step 2: post video meta"); + JsonObject postVideoMeta = postVideoMeta(preuploadVideo); + // step 3: upload video + System.out.println("step 3: upload video"); + int chunks = uploadVideo(preuploadVideo, postVideoMeta); + // step 4: end upload + System.out.println("step 4: end upload"); + endupload(preuploadVideo, postVideoMeta, chunks); + // finished + System.out.println("finished (" + (System.currentTimeMillis() - ts) + "ms)"); + } + + private static String querypart(String key, String value) throws IOException { + return key + "=" + URLEncoder.encode(value, "UTF-8"); + } + + private static HttpURLConnection conn(String url, String method) throws IOException { + HttpURLConnection conn; + try { + conn = (HttpURLConnection) new URI(url).toURL().openConnection(); + } catch (java.net.URISyntaxException e) { + throw new IOException(e); + } + conn.setRequestMethod(method); + // conn.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0"); + if (url.contains("bilibili.com")) conn.setRequestProperty("Cookie", "SESSDATA=" + SESSDATA); + return conn; + } + + private static byte[] inputStreamToString(HttpURLConnection conn) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + InputStream in; + in = conn.getInputStream(); + int b; + while ((b = in.read()) != -1) { + baos.write(b); + } + in.close(); + return baos.toByteArray(); + } + + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + + private static JsonObject preuploadVideo() throws IOException { + StringJoiner url = new StringJoiner("&", "https://member.bilibili.com/preupload?", ""); + url.add(querypart("name", VIDEO_FILE.getName())); + // url.add(querypart("size", String.valueOf(VIDEO_FILE.length()))); + url.add(querypart("r", "upos")); + url.add(querypart("profile", "ugcfx/bup")); + HttpURLConnection conn = conn(url.toString(), "GET"); + System.out.println("GET " + url.toString()); + String response = new String(inputStreamToString(conn), StandardCharsets.UTF_8); + try { + JsonObject json = GSON.fromJson(response, JsonObject.class); + System.out.println(GSON.toJson(json)); + return json; + } catch (JsonSyntaxException e) { + System.out.println(response); + throw e; + } + } + + private static JsonObject postVideoMeta(JsonObject preuploadVideo) throws IOException { + String schemeandhost = "https:" + preuploadVideo.get("endpoint").getAsString(); + String path = preuploadVideo.get("upos_uri").getAsString().replaceFirst("upos:/", ""); + StringJoiner url = new StringJoiner("&", schemeandhost + path + "?", ""); + url.add(querypart("uploads", "")); // WARNING: this is not a typo, it's required, or 404 + url.add(querypart("output", "json")); + url.add(querypart("profile", "ugcfx/bup")); + url.add(querypart("filesize", String.valueOf(VIDEO_FILE.length()))); + url.add(querypart("partsize", preuploadVideo.get("chunk_size").getAsString())); + url.add(querypart("biz_id", preuploadVideo.get("biz_id").getAsString())); + HttpURLConnection conn = conn(url.toString(), "POST"); + conn.setRequestProperty("X-Upos-Auth", preuploadVideo.get("auth").getAsString()); // 403 without it + System.out.println("POST " + url.toString()); + String response = new String(inputStreamToString(conn), StandardCharsets.UTF_8); + try { + JsonObject json = GSON.fromJson(response, JsonObject.class); + System.out.println(GSON.toJson(json)); + return json; + } catch (JsonSyntaxException e) { + System.out.println(response); + throw e; + } + } + + private static int uploadVideo(JsonObject preuploadVideo, JsonObject postVideoMeta) throws IOException { + long startts = System.currentTimeMillis() - 1; + String schemeandhost = "https:" + preuploadVideo.get("endpoint").getAsString(); + String path = preuploadVideo.get("upos_uri").getAsString().replaceFirst("upos:/", ""); + String urlp = schemeandhost + path + "?"; + long length = VIDEO_FILE.length(); + byte[] buffer = new byte[preuploadVideo.get("chunk_size").getAsInt()]; + int size = 0; + int chunks = (int) Math.ceil(length / (double) buffer.length); + InputStream in = new FileInputStream(VIDEO_FILE); + for (int chunk = 0; chunk < chunks; chunk++) { + System.out.println("speed: " + (chunk * buffer.length) / (System.currentTimeMillis() - startts) + "bytes/s"); + System.out.println("chunk: " + (chunk + 1) + "/" + chunks); + size = in.read(buffer, 0, buffer.length); + if (size == -1) { + break; + } + StringJoiner url = new StringJoiner("&", urlp, ""); + url.add(querypart("partNumber", String.valueOf(chunk + 1))); + url.add(querypart("uploadId", postVideoMeta.get("upload_id").getAsString())); + url.add(querypart("chunk", String.valueOf(chunk))); + url.add(querypart("chunks", String.valueOf(chunks))); + url.add(querypart("size", String.valueOf(size))); + url.add(querypart("start", String.valueOf(chunk * buffer.length))); + url.add(querypart("end", String.valueOf((chunk) * buffer.length + size))); + url.add(querypart("total", String.valueOf(length))); + HttpURLConnection conn = conn(url.toString(), "PUT"); + conn.setRequestProperty("X-Upos-Auth", preuploadVideo.get("auth").getAsString()); + conn.setRequestProperty("Content-Type", "application/octet-stream"); + conn.setRequestProperty("Content-Length", String.valueOf(size)); + conn.setDoOutput(true); + conn.getOutputStream().write(buffer, 0, size); + System.out.println("PUT " + url.toString()); + String response = new String(inputStreamToString(conn), StandardCharsets.UTF_8); + System.out.println(response); + } + in.close(); + return chunks; + } + + private static void endupload(JsonObject preuploadVideo, JsonObject postVideoMeta, int chunks) throws IOException { + String schemeandhost = "https:" + preuploadVideo.get("endpoint").getAsString(); + String path = preuploadVideo.get("upos_uri").getAsString().replaceFirst("upos:/", ""); + StringJoiner url = new StringJoiner("&", schemeandhost + path + "?", ""); + url.add(querypart("output", "json")); + url.add(querypart("name", VIDEO_FILE.getName())); + url.add(querypart("profile", "ugcfx/bup")); + url.add(querypart("uploadId", postVideoMeta.get("upload_id").getAsString())); + url.add(querypart("biz_id", preuploadVideo.get("biz_id").getAsString())); + JsonArray parts = new JsonArray(); + for (int i = 1; i <= chunks; i++) { + JsonObject part = new JsonObject(); + part.addProperty("partNumber", i); + part.addProperty("eTag", "etag"); + parts.add(part); + } + JsonObject body = new JsonObject(); + body.add("parts", parts); + HttpURLConnection conn = conn(url.toString(), "POST"); + conn.setRequestProperty("X-Upos-Auth", preuploadVideo.get("auth").getAsString()); + conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + conn.setDoOutput(true); + conn.getOutputStream().write(body.toString().getBytes(StandardCharsets.UTF_8)); + System.out.println("POST " + url.toString()); + String response = new String(inputStreamToString(conn), StandardCharsets.UTF_8); + try { + JsonObject json = GSON.fromJson(response, JsonObject.class); + System.out.println(GSON.toJson(json)); + } catch (JsonSyntaxException e) { + System.out.println(response); + throw e; + } + } + +} +``` diff --git a/docs/creativecenter/videos.md b/docs/creativecenter/videos.md new file mode 100644 index 0000000..6a800fd --- /dev/null +++ b/docs/creativecenter/videos.md @@ -0,0 +1,555 @@ +# 视频相关杂项 + +## 获取稿件列表 + +> https://member.bilibili.com/x2/creative/web/archives/sp + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +注: 该接口返回内容大多为无实际意义的空值, 具体内容建议通过常规接口获取 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------- | ----------- | ----------------- | +| pn | num | 页码 | 必要 | 默认为 1 | +| ps | num | 每页数量 | 必要 | 默认为 10, 留空为 100 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | ---- | +| class | null | 作用尚不明确 | | +| arc_audits | array | 稿件列表 | | +| page | obj | 分页信息 | | +| play_type | num | 1 | | + +`arc_audits` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| Archive | obj | 稿件信息 | | +| Videos | null | | | +| stat | obj | 稿件统计信息 | | +| state_panel | num | 0 | | +| parent_tname | str | 空 | | +| typename | str | 空 | | +| open_appeal | num | 0 | | +| activity | null | | | +| season_add_state | num | 是否可加入合集 | 0: 可以<br />1: 不可以 | + +`Archive` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| aid | num | av 号 | | +| bvid | str | bv 号 | | +| mid | num | 0 | | +| tid | num | 0 | | +| tp_info | null | | | +| title | str | 稿件标题 | | +| author | str | 空 | | +| cover | str | 封面图 | 位于 bfs 需要自行拼接 URL | +| reject_reason | str | 空 | | +| reject_reason_url | str | 空 | | +| tag | str | 空 | | +| duration | num | 0 | | +| copyright | num | 0 | | +| no_reprint | num | 0 | | +| ugcpay | num | 0 | | +| order_id | num | 0 | | +| order_name | str | 空 | | +| adorder_id | num | 0 | | +| adorder_name | str | 空 | | +| adorder_no | str | 空 | | +| online_time | num | 0 | | +| new_adorder_info | null | | | +| desc | str | 稿件简介 | | +| mission_id | num | 0 | | +| mission_name | str | 空 | | +| attribute | num | 0 | | +| state | num | 0 | | +| state_desc | str | 空 | | +| state_panel | num | 0 | | +| source | str | 空 | | +| desc_format_id | num | 0 | | +| attrs | null | | | +| porder | null | | | +| dynamic | str | 空 | | +| poi_object | null | | | +| dtime | num | 0 | | +| ptime | num | 0 | | +| ctime | num | 0 | | +| ugcpay_info | null | | | +| staffs | null | | | +| vote | null | | | +| activity | null | | | +| interactive | num | 0 | | +| hl | null | | | +| no_background | num | 0 | | +| dynamic_video | num | 0 | | +| no_public | num | 0 | | +| is_360 | num | 0 | | +| is_dolby | num | 0 | | +| lossless_music | num | 0 | | +| bs_editor | num | 0 | | +| up_from | num | 0 | | +| desc_v2 | null | | | +| dynamic_v2 | null | | | +| topic_id | num | 0 | | +| topic_name | str | 空 | | +| topic_stat | num | 0 | | +| premiere | num | 0 | | +| is_ugcpay_v2 | num | 0 | | +| recreate | null | | | +| charging_pay | num | 0 | | +| neutral_mark | str | 空 | | +| preview | null | | | +| upower_level | null | | | +| cover43 | str | 空 | | +| had_passed | bool | false | | +| is_staff | num | 0 | | +| is_pugv | num | 0 | | +| upower_mode | num | 0 | | +| upower_unit_price | num | 0 | | + +`stat` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| aid | num | av 号 | | +| view | num | 播放量 | | +| danmaku | num | 弹幕数 | | +| reply | num | 评论数 | | +| favorite | num | 收藏数 | | +| coin | num | 硬币数 | | +| share | num | 分享数 | | +| now_rank | num | 0 | 当前排名 | +| his_rank | num | 0 | 历史最高排名 | +| like | num | 点赞数 | | +| dislike | num | 点踩数 | 恒为 0 | +| vt | num | 0 | | +| vv | num | 播放量 | | + +**示例:** + +```shell +curl -G "https://member.bilibili.com/x2/creative/web/archives/sp" \ +--data-urlencode "pn=1" \ +--data-urlencode "ps=3" \ +-b "SESSDATA=xxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "class": null, + "arc_audits": [ + { + "Archive": { + "aid": 1906473802, + "bvid": "BV1MU411S7iJ", + "mid": 0, + "tid": 0, + "tp_info": null, + "title": "Linux小寄巧: 原地卸载内核然后尝试救活!", + "author": "", + "cover": "/bfs/archive/b76c0b574862f5a8e8eb133f5f33fcbcd602401a.jpg", + "reject_reason": "", + "reject_reason_url": "", + "tag": "", + "duration": 0, + "copyright": 0, + "no_reprint": 0, + "ugcpay": 0, + "order_id": 0, + "order_name": "", + "adorder_id": 0, + "adorder_name": "", + "adorder_no": "", + "online_time": 0, + "new_adorder_info": null, + "desc": "", + "mission_id": 0, + "mission_name": "", + "attribute": 0, + "state": 0, + "state_desc": "", + "state_panel": 0, + "source": "", + "desc_format_id": 0, + "attrs": null, + "porder": null, + "dynamic": "", + "poi_object": null, + "dtime": 0, + "ptime": 0, + "ctime": 0, + "ugcpay_info": null, + "staffs": null, + "vote": null, + "activity": null, + "interactive": 0, + "hl": null, + "no_background": 0, + "dynamic_video": 0, + "no_public": 0, + "is_360": 0, + "is_dolby": 0, + "lossless_music": 0, + "bs_editor": 0, + "up_from": 0, + "desc_v2": null, + "dynamic_v2": null, + "topic_id": 0, + "topic_name": "", + "topic_stat": 0, + "premiere": 0, + "is_ugcpay_v2": 0, + "recreate": null, + "political_media": 0, + "political_editable": 0, + "charging_pay": 0, + "neutral_mark": "", + "preview": null, + "upower_level": null, + "cover43": "", + "had_passed": false, + "is_staff": 0, + "is_pugv": 0, + "upower_mode": 0, + "upower_unit_price": 0 + }, + "Videos": null, + "stat": { + "aid": 1906473802, + "view": 4036, + "danmaku": 8, + "reply": 56, + "favorite": 53, + "coin": 12, + "share": 8, + "now_rank": 0, + "his_rank": 0, + "like": 99, + "dislike": 0, + "vt": 0, + "vv": 4036 + }, + "state_panel": 0, + "parent_tname": "", + "typename": "", + "open_appeal": 0, + "activity": null, + "season_add_state": 0 + }, + { + "Archive": { + "aid": 1956170305, + "bvid": "BV1Ay411i7Ph", + "mid": 0, + "tid": 0, + "tp_info": null, + "title": "十多年前的电脑运行Debian12的启动过程", + "author": "", + "cover": "/bfs/archive/0bff6624fdfcbf3326fba1837fef093d455c846a.jpg", + "reject_reason": "", + "reject_reason_url": "", + "tag": "", + "duration": 0, + "copyright": 0, + "no_reprint": 0, + "ugcpay": 0, + "order_id": 0, + "order_name": "", + "adorder_id": 0, + "adorder_name": "", + "adorder_no": "", + "online_time": 0, + "new_adorder_info": null, + "desc": "", + "mission_id": 0, + "mission_name": "", + "attribute": 0, + "state": 0, + "state_desc": "", + "state_panel": 0, + "source": "", + "desc_format_id": 0, + "attrs": null, + "porder": null, + "dynamic": "", + "poi_object": null, + "dtime": 0, + "ptime": 0, + "ctime": 0, + "ugcpay_info": null, + "staffs": null, + "vote": null, + "activity": null, + "interactive": 0, + "hl": null, + "no_background": 0, + "dynamic_video": 0, + "no_public": 0, + "is_360": 0, + "is_dolby": 0, + "lossless_music": 0, + "bs_editor": 0, + "up_from": 0, + "desc_v2": null, + "dynamic_v2": null, + "topic_id": 0, + "topic_name": "", + "topic_stat": 0, + "premiere": 0, + "is_ugcpay_v2": 0, + "recreate": null, + "political_media": 0, + "political_editable": 0, + "charging_pay": 0, + "neutral_mark": "", + "preview": null, + "upower_level": null, + "cover43": "", + "had_passed": false, + "is_staff": 0, + "is_pugv": 0, + "upower_mode": 0, + "upower_unit_price": 0 + }, + "Videos": null, + "stat": { + "aid": 1956170305, + "view": 2747, + "danmaku": 13, + "reply": 37, + "favorite": 11, + "coin": 14, + "share": 4, + "now_rank": 0, + "his_rank": 0, + "like": 42, + "dislike": 0, + "vt": 0, + "vv": 2747 + }, + "state_panel": 0, + "parent_tname": "", + "typename": "", + "open_appeal": 0, + "activity": null, + "season_add_state": 0 + }, + { + "Archive": { + "aid": 910326709, + "bvid": "BV1GM4y1a7Vn", + "mid": 0, + "tid": 0, + "tp_info": null, + "title": "Minecraft终末之诗,但是谷歌翻译20遍", + "author": "", + "cover": "/bfs/archive/09b7f2542f3e66973ec7de1a3c806cdd45b95426.jpg", + "reject_reason": "", + "reject_reason_url": "", + "tag": "", + "duration": 0, + "copyright": 0, + "no_reprint": 0, + "ugcpay": 0, + "order_id": 0, + "order_name": "", + "adorder_id": 0, + "adorder_name": "", + "adorder_no": "", + "online_time": 0, + "new_adorder_info": null, + "desc": "原内容来源:Minecraft Wiki\n使用的工具:Google Translate\n视频仅供娱乐,请勿当真", + "mission_id": 0, + "mission_name": "", + "attribute": 0, + "state": 0, + "state_desc": "", + "state_panel": 0, + "source": "", + "desc_format_id": 0, + "attrs": null, + "porder": null, + "dynamic": "", + "poi_object": null, + "dtime": 0, + "ptime": 0, + "ctime": 0, + "ugcpay_info": null, + "staffs": null, + "vote": null, + "activity": null, + "interactive": 0, + "hl": null, + "no_background": 0, + "dynamic_video": 0, + "no_public": 0, + "is_360": 0, + "is_dolby": 0, + "lossless_music": 0, + "bs_editor": 0, + "up_from": 0, + "desc_v2": null, + "dynamic_v2": null, + "topic_id": 0, + "topic_name": "", + "topic_stat": 0, + "premiere": 0, + "is_ugcpay_v2": 0, + "recreate": null, + "political_media": 0, + "political_editable": 0, + "charging_pay": 0, + "neutral_mark": "", + "preview": null, + "upower_level": null, + "cover43": "", + "had_passed": false, + "is_staff": 0, + "is_pugv": 0, + "upower_mode": 0, + "upower_unit_price": 0 + }, + "Videos": null, + "stat": { + "aid": 910326709, + "view": 533, + "danmaku": 6, + "reply": 4, + "favorite": 15, + "coin": 13, + "share": 4, + "now_rank": 0, + "his_rank": 0, + "like": 29, + "dislike": 0, + "vt": 0, + "vv": 533 + }, + "state_panel": 0, + "parent_tname": "", + "typename": "", + "open_appeal": 0, + "activity": null, + "season_add_state": 0 + } + ], + "page": { + "pn": 1, + "ps": 3, + "count": 32 + }, + "play_type": 1 + } +} +``` + +</details> + +## 视频基础信息 + +> https://member.bilibili.com/x/web/archive/videos + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---- | ---- | ---- | ---- | ---- | +| aid | num | av 号 | 必要 | | + +**JSON回复:** + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| archive | obj | 稿件信息 | | +| videos | array | 视频信息 | | + +`archive` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| aid | num | av 号 | | +| bvid | str | bvid | | +| title | str | 标题 | | + +`videos` 数组: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | -- | --- | +| cid | num | 分P cid | | +| index | num | 分P 序号 | | +| title | str | 分P 标题 | | +| duration | num | 0 | | + +**示例:** + +```shell +curl -G "https://member.bilibili.com/x/web/archive/videos" \ +--data-urlencode "aid=1906473802" \ +-b "SESSDATA=xxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "archive": { + "aid": 1906473802, + "bvid": "BV1MU411S7iJ", + "title": "Linux小寄巧: 原地卸载内核然后尝试救活!" + }, + "videos": [ + { + "cid": 1625992822, + "index": 1, + "title": "Linux小寄巧: 原地卸载内核然后尝试救活!", + "duration": 0 + } + ] + } +} +``` + +</details> diff --git a/docs/customerservice/msg.md b/docs/customerservice/msg.md new file mode 100644 index 0000000..06b5645 --- /dev/null +++ b/docs/customerservice/msg.md @@ -0,0 +1,115 @@ +# 客服消息 + +## 心跳 + +> https://customerservice.bilibili.com/x/custom/session_svr/v1/heart_beat + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| shop_id | num | 0 | 非必要 | | +| shop_father_id | num | 0 | 非必要 | | +| build | num | 客户端版本 | 非必要 | web: 0 | +| mobi_app | str | 客户端类型 | 非必要 | 如 `web` | + +**JSON回复:** + +|字段|类型|内容|备注| +|-|-|-|-| +|code|num|返回值|0: 成功| +|msg|str|`ok`|失败时不存在| +|message|str|错误信息|成功时为 `ok`| +|ttl|num|1|| + +**示例:** + +```shell +curl -G "https://customerservice.bilibili.com/x/custom/session_svr/v1/heart_beat" \ +-b "SESSDATA=xxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "ok", + "message": "ok", + "ttl": 1 +} +``` + +</details> + +## 上传文件 + +> https://customerservice.bilibili.com/x/custom/msg_svr/v1/upload + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +注: 上传的文件 15 分钟内有效, 过期后下载会返回 HTTP 403 + +**正文参数 (multipart/form-data):** + +|参数名|类型|内容|必要性|备注| +|-|-|-|-|-| +|file|file|文件内容|必要|| +|filename|str|文件名|必要|| +|mid|num|用户 mid|必要|| +|csrf|str|CSRF Token (位于 Cookie 中 bili_jct)|必要|| + +**JSON回复:** + +根对象: + +|字段|类型|内容|备注| +|-|-|-|-| +|code|num|返回值|0: 成功<br />1000011: 仅支持上传300M内的文件<br />1200201: 获取用户信息失败| +|message|str|错误信息|成功时为 `ok`| +|ttl|num|1|| +|data|obj|上传结果|| + +`data` 对象: + +|字段|类型|内容|备注| +|-|-|-|-| +|key|str|文件名|| +|url|str|文件 URL|注意转义| + +**示例:** + +上传文件 `./headers/xx-out.xcf`, 文件名 `ihavenoname` + +```shell +curl -X POST "https://customerservice.bilibili.com/x/custom/msg_svr/v1/upload" \ +-F 'file=@./headers/xx-out.xcf' \ +-F 'filename=ihavenoname' \ +-F 'mid=1070915568' \ +-F 'csrf=xxx' \ +-b 'SESSDATA=xxx; bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "ok", + "ttl": 1, + "data": { + "key": "1a0c88d240852155a111e4cc6893be39.xcf", + "url": "https://jssz-boss.hdslb.com/customer-video-upload/1a0c88d240852155a111e4cc6893be39.xcf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=f9TxwsagojnE1DWM%2F20240803%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20240803T115447Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=cef962c8e503c6ff564fd485bdef1079df1b4a7e38f4fbd9c21a5667207f406e" + } +} +``` + +</details> diff --git a/docs/danmaku/action.md b/docs/danmaku/action.md new file mode 100644 index 0000000..95e34c4 --- /dev/null +++ b/docs/danmaku/action.md @@ -0,0 +1,828 @@ +# 弹幕操作 + +## 发送视频弹幕 + +> https://api.bilibili.com/x/v2/dm/post + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +此接口与漫画弹幕相同 + +`mode=6`的逆向弹幕与`mode=8`的代码弹幕不可发送 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| web_location | str | 普通视频: 1315873 | 不必要 | | +| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | Cookie 方式必要 | | +| w_rid | str | Wbi 签名 | 必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) | +| wts | str | UNIX 秒级时间戳 | 必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) | + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ------------------------- | --------------- | ------------------------------------------------------------ | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| type | num | 弹幕类选择 | 必要 | 1:视频弹幕<br />2:漫画弹幕 | +| oid | num | 视频 cid | 必要 | | +| msg | str | 弹幕内容 | 必要 | 长度小于 100 字符 | +| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 | +| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 | +| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒<br />默认为0 | +| color | num | 弹幕颜色设置 | 非必要 | 十进制 RGB888 值<br />如`16777215`为 #FFFFFF 即白色 | +| fontsize | num | 弹幕字号设置 | 非必要 | 默认为 25<br />极小:12<br />超小:16<br />小:18<br />标准:25<br />大:36<br />超大:45<br />极大:64 | +| pool | num | 弹幕池选择 | 非必要 | 0:普通池<br />1:字幕池<br />2:特殊池(代码/BAS弹幕)<br />默认为0 | +| mode | num | 弹幕类型选择 | 必要 | 1:普通弹幕<br />4:底部弹幕<br />5:顶部弹幕<br />7:高级弹幕<br />9:BAS弹幕(`pool`必须为2) | +| rnd | num | 当前时间戳*1000000 | 非必要 | **若无此项,则发送弹幕冷却时间限制为90s**<br />若有此项,则发送弹幕冷却时间限制为5s | +| colorful | num | 彩色弹幕 | 非必要 | 60001:专属渐变彩色(需要会员) | +| checkbox_type | num | 是否带 UP 身份标识 | 非必要 | 0:普通<br />4:带有标识 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项<br />36700:系统升级中<br />36701:弹幕包含被禁止的内容<br />36702:弹幕长度大于100<br />36703:发送频率过快<br />36704:禁止向未审核的视频发送弹幕<br />36705:您的等级不足,不能发送弹幕<br />36706:您的等级不足,不能发送顶端弹幕<br />36707:您的等级不足,不能发送底端弹幕<br />36708:您的等级不足,不能发送彩色弹幕<br />36709:您的等级不足,不能发送高级弹幕<br />36710:您的权限不足,不能发送这种样式的弹幕<br />36711:该视频禁止发送弹幕<br />36712:level 1用户发送弹幕的最大长度为20<br />36713:稿件未付费<br />36714:弹幕发送时间不合法<br />36715:当日操作数量超过上限<br />36718:目前您不是大会员,无法使用会员权益 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---------- | ------------------ | -------------------------------- | +| action | str | (?) | | +| animation | str | 弹幕样式 Json? | | +| colorful_src | str 或 obj | 渐变彩色样式信息? | 当请求参数`colorful=60001`时有效 | +| dm_content | str | (?) | | +| dmid | num | 弹幕 dmid | | +| dmid_str | str | 弹幕 dmid | 字串形式 | +| visible | bool | (?) | | + +`data`中的`colorful_src`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ---- | +| type | num | 60001 | | +| src | str | 渐变色样式 Json? | | + +**示例:** + +为视频`av2`/`BV1xx411c7mD`(cid为`62131`)的 5000ms 位置发送一条弹幕`前来考古`(颜色为 #FFFFFF,字号 25,普通弹幕,游动弹幕) + +```shell +curl 'https://api.bilibili.com/x/v2/dm/post' \ + --data-urlencode 'type=1' \ + --data-urlencode 'oid=62131' \ + --data-urlencode 'msg=前来考古' \ + --data-urlencode 'aid=2' \ + --data-urlencode 'progress=5000' \ + --data-urlencode 'color=16777215' \ + --data-urlencode 'fontsize=25' \ + --data-urlencode 'pool=0' \ + --data-urlencode 'mode=1' \ + --data-urlencode 'rnd=3456789987654321' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "action":"", + "dmid":32161968826613767, + "dmid_str":"32161968826613767", + "visible":true + } +} +``` + +</details> + +## 发送互动弹幕 + +> https://api.bilibili.com/x/v2/dm/command/post + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +2020-09-25 B站更新了互动弹幕功能,包括UP主头像弹幕、关联视频弹幕、视频内嵌引导关注按钮三大功能 + +详情见: + +[【客户端更新】6.10版本更新!UP主支持发布关联视频弹幕]( https://www.bilibili.com/read/cv7728299 ) + + [引导关注卡片]( https://www.bilibili.com/blackboard/activity-c8a0iDRQy.html ) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 互动弹幕类型 | 必要 | 1:UP主头像弹幕<br />2:关联视频弹幕<br />5:视频内嵌引导关注按钮 | +| aid | num | 稿件avid | 必要 | | +| cid | num | 视频cid | 必要 | | +| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒<br />默认为0 | +| plat | num | 平台标识 | 必要 | 1:web端<br />2:安卓端<br />8:视频管理页面 | +| data | str | json序列 | 必要 | | +| dmid | num | 修改互动弹幕的弹幕id | 非必要 | 注:修改弹幕`plat`必须为8 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +`data`参数json序列: + +类型为【UP主头像弹幕】时: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| msg | str | 弹幕内容 | | + +类型为【关联视频弹幕】时: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| msg | str | 弹幕内容 | | +| bvid | str | 关联视频的bvid | | + +类型为【视频内嵌引导关注按钮】时: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | --------------- | +| duration | num | 持续时间 | 单位为毫秒 | +| posX | num | X坐标 | 区间:[118-549] | +| posY | num | Y坐标 | 区间:[82-293] | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项<br />-500:服务器错误<br />36711:该视频禁止发送弹幕<br />79026:发送失败,请勿填写当前稿件bvid<br />79024:发送失败,请输入正确的bvid<br />79036:该指令弹幕超出限制<br />79037:关注弹幕坐标溢出 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj<br />错误时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------------------- | ------------------------------------------------------------ | +| command | str | 指令? | UP主头像弹幕:#UP#<br />关联视频弹幕:#LINK#<br />视频内嵌引导关注按钮:#ATTENTION# | +| content | str | 弹幕内容 | | +| extra | str | 弹幕数据 | json序列 | +| id | num | 弹幕dmid | | +| idStr | str | 弹幕dmid | 字串形式 | +| mid | num | 用户mid | | +| oid | num | 视频cid | | +| progress | num | 弹幕出现在视频内的时间 | | +| type | num | 互动弹幕类型 | 1:UP主头像弹幕<br />2:关联视频弹幕<br />5:视频内嵌引导关注按钮 | + +`extra`序列数据: + +类型为【UP主头像弹幕】时: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| icon | str | UP主头像url | | + +类型为【关联视频弹幕】时: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------------- | ---- | +| aid | num | 关联视频的avid | | +| title | str | 关联视频的标题 | | +| bvid | str | 关联视频的bvid | | + +类型为【视频内嵌引导关注按钮】时: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | ------------------------------------------ | +| duration | num | 持续时间 | 单位为毫秒 | +| posX | num | X坐标 | 区间:[118-549] | +| posY | num | Y坐标 | 区间:[82-293] | +| icon | str | 按钮图片url | 不应该是关注按钮吗,但这个是圆形的 | +| type | num | 关注按钮类型 | 0:仅关注<br />1:仅三联<br />2:关注+三联 | + +**示例:** + +为视频`av201947622`(cid为`230709860`)的5000ms位置发送一条UP主头像弹幕`test` + +```shell +curl 'https://api.bilibili.com/x/v2/dm/command/post' \ +--data-urlencode 'type=1' \ +--data-urlencode 'aid=201947622' \ +--data-urlencode 'cid=230709860' \ +--data-urlencode 'progress=5000' \ +--data-urlencode 'plat=1' \ +--data-urlencode 'data={"msg":"test"}' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 39053842117558279, + "oid": 230709860, + "mid": 293793435, + "type": 1, + "command": "#UP#", + "content": "test", + "extra": "{\"icon\":\"http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg\"}", + "idStr": "39053842117558279" + } +} +``` + +</details> + +为视频`av201947622`(cid为`230709860`)的5000ms位置发送一条发送关联视频弹幕`测试1234`关联视频为`BV1kz4y1X7XP` + +```shell +curl 'https://api.bilibili.com/x/v2/dm/command/post' \ +--data-urlencode 'type=2' \ +--data-urlencode 'aid=201947622' \ +--data-urlencode 'cid=230709860' \ +--data-urlencode 'progress=5000' \ +--data-urlencode 'plat=1' \ +--data-urlencode 'data={"bvid":"BV1kz4y1X7XP","msg":"测试1234"}' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 39054383689236483, + "oid": 230709860, + "mid": 293793435, + "type": 2, + "command": "#LINK#", + "content": "测试1234", + "progress": 11925, + "extra": "{\"aid\":583785685,\"title\":\"【cmd】访问api 命令行也能上B站\",\"bvid\":\"BV1kz4y1X7XP\"}", + "idStr": "39054383689236483" + } +} +``` + +</details> + + +为视频`av201947622`(cid为`230709860`)的5000ms位置发送视频内嵌引导关注按钮,X坐标为118,Y坐标为82,持续时间为5000ms + +```shell +curl 'https://api.bilibili.com/x/v2/dm/command/post' \ +--data-urlencode 'type=5' \ +--data-urlencode 'aid=201947622' \ +--data-urlencode 'cid=230709860' \ +--data-urlencode 'progress=5000' \ +--data-urlencode 'plat=1' \ +--data-urlencode 'data={"duration":5000,"posX":118,"posY":82}' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 39055158405496839, + "oid": 230709860, + "mid": 293793435, + "type": 5, + "command": "#ATTENTION#", + "progress": 5000, + "extra": "{\"duration\":5000,\"posX\":118,\"posY\":82}", + "idStr": "39055158405496839" + } +} +``` + +</details> + +## 发送打分弹幕 + +> https://api.bilibili.com/x/v2/dm/command/grade/post + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +<!--{ + "gh": [220] +}--> + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| aid | num | 稿件 aid | 必要 | | +| cid | num | 分 P cid | 必要 | | +| progress | num | 播放进度 | 必要 | 单位为毫秒 | +| grade_id | num | 打分 id | 必要 | | +| grade_score | num | 分数 | 偶数, 最大 10 | +| polaris_app_id | num | 100 | 不必要 | +| polaris_platfrom | num | 5 | 不必要 | | +| spmid | str | 333.788.0.0 | 不必要 | | +| from_spmid | str | 来源 spmid | 不必要 | | +| csrf | str | CSRF Token (即 Cookie 中的 bili_jct) | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| dmid | num | 弹幕dmid | | +| dmid_str | str | 弹幕dmid | 字串形式 | +| visible | bool | 是否可见 | | +| action | str | 动作 | `"grade:"` + (请求的分数 / 2) | + +**示例:** + +```shell +curl -X POST 'https://api.bilibili.com/x/v2/dm/command/grade/post' \ +--data-urlencode 'aid=112861976201494' \ +--data-urlencode 'cid=500001629877726' \ +--data-urlencode 'progress=32000' \ +--data-urlencode 'grade_id=3651137' \ +--data-urlencode 'grade_score=10' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "dmid": 1651556419721443584, + "dmidStr": "1651556419721443584", + "visible": true, + "action": "grade:5" + } +} +``` + +</details> + +## 撤回弹幕 + +> https://api.bilibili.com/x/dm/recall + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +仅能撤回自己两分钟内的弹幕,且每天只有3次机会 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| dmid | num | 弹幕dmid | 必要 | | +| cid | num | 视频cid | 必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项<br />36301:撤回失败,弹幕发送已过2分钟<br />36302:撤回失败,弹幕已经被删除或撤回<br />36303:撤回失败,今天撤回的机会已经用完<br />36304:撤回失败,服务器出错 | +| message | str | 错误信息 | 成功后显示剩余次数 | +| ttl | num | 1 | | + +**示例:** + +撤回`cid=168901231`下的弹幕`32310301474947077`的弹幕 + +```shell +curl 'https://api.bilibili.com/x/dm/recall' \ +--data-urlencode 'cid=168901231' \ +--data-urlencode 'dmid=32310301474947077' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "撤回成功,你还有3次撤回机会" +} +``` + +</details> + +## 购买高级弹幕发送权限 + +> https://api.bilibili.com/x/dm/adv/buy + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +购买一次需要2硬币,同时向up主发送请求 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| mode | str | sp | 必要 | | +| cid | num | 视频cid | 必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-107:硬币不足<br />-400:请求错误<br />36007:不允许购买<br />36009:正在确认中<br />36010:已购买 | +| message | str | 返回信息 | | +| ttl | num | 1 | | + +示例: + +购买视频cid为`168901231`的高级弹幕发送权限 + +```shell +curl 'https://api.bilibili.com/x/dm/adv/buy' \ +--data-urlencode 'cid=168901231' \ +--data-urlencode 'mode=sp' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"已成功购买" +} +``` + +</details> + +## 检测高级弹幕发送权限 + +> https://api.bilibili.com/x/dm/adv/state + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| mode | str | sp | 必要 | | +| cid | num | 视频cid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | ---------------- | -------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />--400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:obj<br />无效时:null | 有效时:信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------------- | ------------------------------------------ | +| coins | num | 需要支付的硬币数 | | +| confirm | num | 是否同意 | 1:同意<br />2:未同意<br />未购买时无此项 | +| accept | bool | 是否允许申请 | true:允许<br />false:不允许 | +| hasBuy | bool | 是否已购买 | true:已购买<br />未购买时无此项 | + +**示例:** + +查询视频cid为`168901231`的视频高级弹幕权限购买状态 + +当前状态为已购买且同意 + +```shell +curl -G 'https://api.bilibili.com/x/dm/adv/state' \ +--data-urlencode 'cid=168901231' \ +--data-urlencode 'mode=sp' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "coins": 2, + "confirm": 1, + "accept": true, + "hasBuy": true + } +} +``` + +</details> + +## 点赞弹幕 + +> https://api.bilibili.com/x/v2/dm/thumbup/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +查询指定弹幕点赞状态参阅文档 [弹幕点赞查询](thumbup.md) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------- | --------------- | ------------------------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| dmid | num | 目标弹幕 dmid | 必要 | | +| oid | num | 目标弹幕所在视频 cid | 必要 | | +| op | num | 操作 | 必要 | 1:点赞<br />2:取消点赞 | +| platform | str | 平台标识 | 非必要 | web_player:web 播放器<br />android:安卓端 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />36106:该弹幕已被删除<br/>36805:该视频禁止点赞弹幕<br/>65004:取消赞失败 未点赞过<br />65006:已赞过 | +| message | str | 错误信息 | 默认为0 | +| tll | num | 1 | | + +**示例** + +为`cid=145928946`下的弹幕`35600074482384899`点赞 + +```shell +curl 'https://api.bilibili.com/x/v2/dm/thumbup/add' \ + --data-urlencode 'dmid=35600074482384899' \ + --data-urlencode 'oid=145928946' \ + --data-urlencode 'op=1' \ + --data-urlencode 'platform=web_player' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +</details> + +## 举报弹幕 + +> https://api.bilibili.com/x/dm/report/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------ | +| access_key | str | APP登录Token | APP方式必要 | | +| cid | num | 视频cid | 必要 | | +| dmid | num | 弹幕dmid | 必要 | | +| reason | num | 举报类型 | 必要 | **类型代码见下表** | +| content | str | 其他举报备注 | 非必要 | `reason=11`时有效 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +举报类型`reason`: + +| 代码 | 含义 | +| ---- | ---------- | +| 1 | 违法违禁 | +| 2 | 色情低俗 | +| 3 | 赌博诈骗 | +| 4 | 人身攻击 | +| 5 | 侵犯隐私 | +| 6 | 垃圾广告 | +| 7 | 引战 | +| 8 | 剧透 | +| 9 | 恶意刷屏 | +| 10 | 视频无关 | +| 11 | 其他 | +| 12 | 青少年不良 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />36201:举报弹幕不存在<br />36203:举报原因类型错误<br />36204:已举报 | +| message | str | 错误信息 | 默认为空 | +| tll | num | 1 | 举报失败时 | + +**示例** + +举报`cid=145928946`下的弹幕`35600074482384899`,理由是`引战` + +```shell +curl 'https://api.bilibili.com/x/dm/report/add' \ +--data-urlencode 'cid=145928946' \ +--data-urlencode 'dmid=35600074482384899' \ +--data-urlencode 'reason=7' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"" +} +``` + +</details> + +## 保护&删除弹幕 + +> https://api.bilibili.com/x/v2/dm/edit/state + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) 或APP + +注:只能操作自己的稿件或有骑士权限的稿件 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | --------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 弹幕类选择 | 必要 | 1:视频弹幕 | +| oid | num | 视频cid | 必要 | | +| dmids | nums | 弹幕dmid | 必要 | 多个id之间用`,`分隔 | +| state | num | 操作代码 | 必要 | 1:删除弹幕<br />2:弹幕保护<br />3:取消保护 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例** + +删除`cid=145928946`下的弹幕`35600074482384899`、`39067304918515717`、`39082777041174531` + +```shell +curl 'https://api.bilibili.com/x/v2/dm/edit/state' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=145928946' \ +--data-urlencode 'dmids=35600074482384899,39067304918515717,39082777041174531' \ +--data-urlencode 'state=1' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +</details> + +## 修改字幕池 + +> https://api.bilibili.com/x/v2/dm/edit/pool + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) 或APP + +注:只能操作自己的稿件或有骑士权限的稿件 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | -------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 弹幕类选择 | 必要 | 1:视频弹幕 | +| oid | num | 视频cid | 必要 | | +| dmids | nums | 弹幕dmid | 必要 | 多个id之间用`,`分隔 | +| pool | num | 操作代码 | 必要 | 0:移出字幕池<br />1:移入字幕池 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例** + +将`cid=145928946`下的弹幕`35600074482384899`、`39067304918515717`、`39082777041174531`移入字幕池 + +```shell +curl 'https://api.bilibili.com/x/v2/dm/edit/state' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=145928946' \ +--data-urlencode 'pool=1' \ +--data-urlencode 'dmids=35600074482384899,39067304918515717,39082777041174531' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +</details> diff --git a/docs/danmaku/buzzword.md b/docs/danmaku/buzzword.md new file mode 100644 index 0000000..5f65356 --- /dev/null +++ b/docs/danmaku/buzzword.md @@ -0,0 +1,508 @@ +# 名词解释 + +该功能用于解释和科普 B 站弹幕、评论等的专有名词及梗,展示其出处,并推荐相关站内内容 + +可使用页面 https://www.bilibili.com/blackboard/activity-joFQ0txEQd.html?type_id=4 查看名词列表 + +可使用页面 https://www.bilibili.com/blackboard/activity-WroMZNunfa.html?id=1 查看名词解释详情 + +## 拉取名词解释列表 + +> https://api.bilibili.com/x/v2/dm/buzzword/list + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | -------- | ------ | ---------------------------------------------- | +| type_id | num | 名词类型 | 必要 | 如:4代表“哔哩哔哩热词图鉴”<br />5代表“语言类” | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | 默认为20 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------- | ---- | +| type | obj | 类型信息 | | +| buzzwords | array | 词语列表 | | +| page | obj | 页面信息 | | + +`data`中的`type`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | ------ | +| id | num | 类型 id | | +| name | str | 类型名称 | | +| name_pinyin | obj | 拼音信息 | 见副表 | + +`data`中的`buzzwords`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 名词条目 1 | | +| n | obj | 名词条目(n+1) | | +| …… | obj | …… | …… | + +`buzzwords`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ----------------------------------------- | +| id | num | 名词 id | 用于[查询名词解释详情](#查询名词解释详情) | +| name | str | 名词 | | +| name_pinyin | obj | 拼音信息 | 见副表 | +| picture | str | 名词图片 url | | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---- | +| num | num | 当前页码 | | +| size | num | 每页项数 | | +| total | num | 总计项数 | | +| cnt | num | (?) | | + +副表:拼音`name_pinyin`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | -------- | ---- | +| 对应单个汉字 1 | str | 拼音字串 | | +| 对应单个汉字 n | str | 拼音字串 | | +| …… | str | …… | …… | + +**示例:** + +拉取对应`哔哩哔哩热词图鉴`的名词列表,以20项为一页拉取第1页 + +```bash +curl -G 'https://api.bilibili.com/x/v2/dm/buzzword/list' \ +--data-urlencode 'type_id=4' \ +--data-urlencode 'ps=10' \ +--data-urlencode 'pn=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "type": { + "id": 4, + "name": "哔哩哔哩热词图鉴", + "name_pinyin": { + "哔": "bì", + "哩": "lī", + "图": "tú", + "热": "rè", + "词": "cí", + "鉴": "jiàn" + }, + "level": 0 + }, + "buzzwords": [ + { + "id": 145, + "name": "麦乐鸡侠", + "name_pinyin": { + "乐": "lè", + "侠": "xiá", + "鸡": "jī", + "麦": "mài" + }, + "picture": "https://i0.hdslb.com/bfs/archive/1cdec1ff86733a38c1a9ff824dde6d4121955aee.png" + }, + { + "id": 146, + "name": "金钱豹", + "name_pinyin": { + "豹": "bào", + "金": "jīn", + "钱": "qián" + }, + "picture": "https://i0.hdslb.com/bfs/archive/3d492f4c01da7d15073d3175871e14ed56f0f78a.png" + }, + { + "id": 11, + "name": "通辽可汗", + "name_pinyin": { + "可": "kě", + "汗": "hàn", + "辽": "liáo", + "通": "tōng" + }, + "picture": "https://i0.hdslb.com/bfs/archive/ca332fb5f9da48497298cf26fe07b1f061e53a0b.jpg" + }, + { + "id": 123, + "name": "资本马桶搋", + "name_pinyin": { + "搋": "chuāi", + "本": "běn", + "桶": "tǒng", + "资": "zī", + "马": "mǎ" + }, + "picture": "https://i0.hdslb.com/bfs/archive/aaf33dced1941af0946f37c62f4b48fcaba9c9a2.jpg" + }, + { + "id": 133, + "name": "马了顶大", + "name_pinyin": { + "了": "le", + "大": "dà", + "顶": "dǐng", + "马": "mǎ" + }, + "picture": "https://i0.hdslb.com/bfs/archive/9653bd7f8d2c804aceb8043ebd5c8360a93e26c0.png" + }, + { + "id": 9, + "name": "退钱", + "name_pinyin": { + "退": "tuì", + "钱": "qián" + }, + "picture": "https://i0.hdslb.com/bfs/archive/2540db0bc94792b1f5be75e19aa05d33666e3036.jpg" + }, + { + "id": 141, + "name": "森林冰火人", + "name_pinyin": { + "人": "rén", + "冰": "bīng", + "林": "lín", + "森": "sēn", + "火": "huǒ" + }, + "picture": "https://i0.hdslb.com/bfs/archive/bc5ca101313d4db223c395d64779e76eb3482d60.jpg" + }, + { + "id": 22, + "name": "学霸题", + "name_pinyin": { + "学": "xué", + "霸": "bà", + "题": "tí" + }, + "picture": "https://i0.hdslb.com/bfs/archive/a67a0a57ec48beb8c8dcc9f26c7bb66cd0ed5da7.jpg" + }, + { + "id": 10, + "name": "张三", + "name_pinyin": { + "三": "sān", + "张": "zhāng" + }, + "picture": "https://i0.hdslb.com/bfs/archive/f4dac6fdc5c58639b79ae87385e9b9f7eae3b263.png" + }, + { + "id": 5, + "name": "饮茶先啦", + "name_pinyin": { + "先": "xiān", + "啦": "la", + "茶": "chá", + "饮": "yǐn" + }, + "picture": "https://i0.hdslb.com/bfs/archive/4c90ad207f0041e2dccd586827028aea50c2dc7d.jpg" + } + ], + "page": { + "num": 1, + "size": 10, + "total": 143, + "cnt": 0 + } + } +} +``` + +</details> + +## 查询名词解释详情 + +> https://api.bilibili.com/x/v2/dm/buzzword/detail + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ------ | -------------------------------- | +| id | num | 名词id | 必要 | 如:1代表“kksk”<br />2代表“打脸” | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | --------------------------------- | -------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:不存在该名词 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有数据时:obj<br />无数据时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ------------------------------- | -------------------- | ----------------------------- | +| id | num | 名词id | | +| name | str | 名词 | | +| description | str | 名词解释 | | +| picture | str | 名词图片 url | | +| types | array | 父分类列表 | 该名词可能隶属多个父分类 | +| related_words | array | 近义词/相关词 | | +| uppers | 有数据:array<br />无数据:null | 相关 UP 列表 | 该名词(梗)出处 | +| related_ugc | 有数据:array<br />无数据:null | 相关 ucg 视频列表 | 该名词(梗)出处 | +| related_ogv | 有数据:array<br />无数据:null | 相关 pgc 视频列表 | 该名词(梗)出处 | +| guides | obj | 推荐创作信息 | | +| related_buzzwords | array | 推荐名词列表 | | +| topic | obj | 关联话题信息 | | +| show_dynamic | bool | 是否展示话题动态聚合 | `true`展示<br />`false`不展示 | + +`data`中的`types`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 父分类 1 | | +| n | obj | 父分类(n+1) | | +| …… | obj | …… | …… | + +`types`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | ---- | +| id | num | 类型 id | | +| name | str | 类型名称 | | +| name_pinyin | null | | | +| level | num | 权重? | | + +`data`中的`related_words`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------------- | ---- | +| 0 | str | 近义词/相关词1 | | +| n | str | 近义词/相关词(n+1) | | +| …… | str | …… | …… | + +`data`中的`uppers`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | obj | 相关 UP 1 | | +| n | obj | 相关 UP(n+1) | | +| …… | obj | …… | …… | + +`uppers`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------- | ------------------------------------------------------------ | +| id | num | UP 主 mid | | +| recommend | str | | | +| name | str | UP 主昵称 | | +| face | str | UP 主头像 url | | +| official | obj | UP 主认证信息 | | +| followed | bool | 是否关注 | 需要登录(Cookie 或 APP)<br />`true`已关注<br />`false`未关注 | +| fans_count | num | 粉丝数 | | + +`data`中的`related_ugc`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------------- | ---- | +| 0 | obj | 相关 ucg 视频 1 | | +| n | obj | 相关 ucg 视频(n+1) | | +| …… | obj | …… | …… | + +`related_ugc`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | -------- | +| aid | num | 稿件 avid | | +| cid | num | 视频 cid | | +| name | str | 视频标题 | | +| link | str | 空 | | +| play | num | 播放数 | | +| danmaku | num | 弹幕数 | | +| duration | num | 视频时长 | 单位为秒 | +| cover | str | 视频封面 url | | + +`data`中的`related_ogv`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------------- | ---- | +| 0 | obj | 相关 pgc 视频 1 | | +| n | obj | 相关 pgc 视频(n+1) | | +| …… | obj | …… | …… | + +`related_ogv`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ------------------------------------- | +| season_id | num | 剧集 ssid | | +| name | str | 剧集标题 | | +| play | num | 播放数 | | +| followed | num | 追剧/番数 | | +| is_followed | bool | 是否追剧/番 | `true`已追剧/番<br />`false`未追剧/番 | +| new_ep | str | 最新一集信息 | | +| cover | str | 剧集封面 url | | +| episodes | null | | | +| follow_info | obj | | | + +`data`中的`guides`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | ---------------- | ---- | +| description | str | 创作推介文案 | | +| contribute_tags | array | 创作跳转按钮信息 | | + +`guides`中的`contribute_tags`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---- | +| 0 | obj | 创作跳转按钮 1 | | +| n | obj | 创作跳转按钮(n+1) | | +| …… | obj | …… | …… | + +`contribute_tags`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | -------------------------- | +| title | str | 按钮文案 | | +| link | str | 跳转 uri | 跳转至必剪或客户端创作入口 | + +`data`中的`related_buzzwords`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 推荐名词 1 | | +| n | obj | 推荐名词(n+1) | | +| …… | obj | …… | …… | + +`related_buzzwords`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------- | ----------------------------------------- | +| id | num | 名词 id | 用于[查询名词解释详情](#查询名词解释详情) | +| name | str | 名词 | | +| name_pinyin | null | | | +| picture | str | 空 | | + +`data`中的`topic`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ---- | +| topic_id | num | 关联话题id | | +| topic_name | str | 关联话题名称 | | + +**示例:** + +查询名词`kksk`的详情 + +```bash +curl -G 'https://api.bilibili.com/x/v2/dm/buzzword/detail' \ +--data-urlencode 'id=1' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1, + "name": "kksk", + "description": "该梗是日语“ここすき”罗马音的字母缩写,翻译为喜欢这里。一般作为赞扬认可的弹幕出现在视频画面中。由于在2017年随着以《恶魔人》为BGM和语音剪辑素材的《美洲豹人》系列作品的传播,让这个梗快速的通过弹幕流行开,并频繁出现在各类稿件经典画面中。", + "picture": "https://i0.hdslb.com/bfs/archive/c269c9ca1b5eb730ee1d77aadd28e3165eaa4d6d.png", + "types": [ + { + "id": 4, + "name": "哔哩哔哩热词图鉴", + "name_pinyin": null, + "level": 0 + }, + { + "id": 5, + "name": "语言类", + "name_pinyin": null, + "level": 0 + }, + { + "id": 9, + "name": "空耳", + "name_pinyin": null, + "level": 0 + } + ], + "related_words": [ + "恶魔人", + "美洲豹人", + "喜欢这里" + ], + "uppers": [ + { + "id": 488450, + "recommend": "", + "name": "PXN1", + "face": "http://i2.hdslb.com/bfs/face/96dd8cc4f2922bd81e5a938f6ad02b3e3041debe.jpg", + "official": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "followed": false, + "fans_count": 1416 + } + ], + "related_ugc": [ + { + "aid": 30056798, + "cid": 52388183, + "name": "恶 魔 人", + "link": "", + "play": 3434500, + "danmaku": 8292, + "duration": 188, + "cover": "http://i0.hdslb.com/bfs/archive/f0433d2dacf4b3397a9390ab982cefd138dbf8c8.jpg" + } + ], + "related_ogv": null, + "guides": { + "description": "使用同款热梗素材创作你的专属作品吧!添加热梗主题#kksk是什么梗#参与投稿,优质稿件会优先展示在哔哩哔哩热词图鉴相关推荐中哦!", + "contribute_tags": [ + { + "title": "拍同款", + "link": "bilibili://uper/appTraffic?appScheme=bcut%3A%2F%2Fstudio%2Fmaterial_editor%2F%3Ftab_id%3D1%26sub_id%3D90160%26third_id%3D150281&appName=com.bilibili.studio&appID=1299589486" + } + ] + }, + "related_buzzwords": null, + "topic": { + "topic_id": 7642, + "topic_name": "kksk是什么梗" + }, + "show_dynamic": false + } +} +``` + +</details> diff --git a/docs/danmaku/config.md b/docs/danmaku/config.md new file mode 100644 index 0000000..9cd760f --- /dev/null +++ b/docs/danmaku/config.md @@ -0,0 +1,71 @@ +# 弹幕个人配置修改 + +## 修改弹幕个人配置(web端) + +> https://api.bilibili.com/x/v2/dm/web/config + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ------ | ------------------------ | -------------- | ------------------------------------------------------------ | +| access_key | str | APP登录Token | APP方式必要 | | +| dm_switch | bool | 弹幕开关 | 非必要 | true:开启<br />false:关闭 | +| blockscroll | bool | 屏蔽类型-滚动 | 非必要 | true:不屏蔽<br />false:屏蔽 | +| blocktop | bool | 屏蔽类型-顶部 | 非必要 | 同上 | +| blockbottom | bool | 屏蔽类型-底部 | 非必要 | 同上 | +| blockcolor | bool | 屏蔽类型-彩色 | 非必要 | 同上 | +| blockspecial | bool | 屏蔽类型-特殊 | 非必要 | 同上 | +| ai_switch | bool | 是否打开智能云屏蔽 | 非必要 | true:开启<br />false:关闭 | +| ai_level | num | 智能云屏蔽等级 | 非必要 | 区间:[0-10]<br />0为默认等级(3级) | +| preventshade | bool | 防挡弹幕(底部15%) | 非必要 | true:开启<br />false:关闭 | +| dmask | bool | 智能防挡弹幕(人像蒙版) | 非必要 | 同上 | +| opacity | num | 弹幕不透明度 | 非必要 | 区间:[0-1] | +| dmarea | num | 弹幕显示区域 | 非必要 | 100:不重叠<br />75:3/4屏<br />50:半瓶<br />25:1/4屏<br />0:不限 | +| speedplus | num | 弹幕速度 | 非必要 | 区间:[0.4-1.6] | +| fontsize | num | 字体大小 | 非必要 | 区间:[0.4-1.6] | +| screensync | bool | 跟随屏幕缩放比例 | 非必要 | true:开启<br />false:关闭 | +| speedsync | bool | 根据播放倍速调整速度 | 非必要 | 同上 | +| fontfamily | str | 字体类型 | 非必要 | 未启用 | +| bold | bool | 粗体 | 非必要 | 未启用 | +| fontborder | num | 描边类型 | 非必要 | 0:重墨<br />1:描边<br />2:45°投影 | +| drawType | string | 渲染类型 | 非必要 | 未启用 | +| ts | num | 当前时间戳 | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />23004:数据没有修改 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +关闭弹幕 + +```shell +curl 'https://api.bilibili.com/x/v2/dm/web/config' \ +--data-urlencode 'dm_switch=false' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +</details> \ No newline at end of file diff --git a/docs/danmaku/danmaku_proto.md b/docs/danmaku/danmaku_proto.md new file mode 100644 index 0000000..b21bd32 --- /dev/null +++ b/docs/danmaku/danmaku_proto.md @@ -0,0 +1,115 @@ +# protobuf弹幕 + +2020年5月23日,哔哩哔哩网页端及移动端启用了新的默认弹幕 API,网页端弹幕显示的上限变为原弹幕池上限的两倍。 + +新的 API 是以 6min 为一个单位加载,即每次加载 6min 内的弹幕 + +## 获取实时弹幕 + +> https://api.bilibili.com/x/v2/dm/web/seg.so (web端) +> +> https://api.bilibili.com/x/v2/dm/wbi/web/seg.so (web 端新接口,需要 wbi 认证) +> +> https://api.bilibili.com/x/v2/dm/list/seg.so (APP端) +> +> https://i0.hdslb.com/bfs/dm/{data}.bin (BAS/代码弹幕专包) + +*请求方式:GET* +*认证方式:半匿名(部分视频在无 Cookie: SESSDATA 时只返回部分弹幕)* + +此接口与漫画弹幕相同 + +只能返回普通弹幕(`pool=1` `mode=1-7`)和代码弹幕(`pool=2` `mode=8`),BAS弹幕(`pool=2` `mode=9`)请从[弹幕元数据](danmaku_view_proto.md)中获取 + +互动弹幕(UP 主头像弹幕、关联视频、内嵌关注按钮)也不存在这个接口,请从[弹幕元数据](danmaku_view_proto.md)中获取 + +**注:仅获取 6min 的整数倍时间内的弹幕,6min 内最多弹幕数为 6000 条(如第一包中弹幕`progress`值域为0-360000)** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | --------- | ------ | ---------------------------- | +| type | num | 弹幕类 | 必要 | 1:视频弹幕<br />2:漫画弹幕 | +| oid | num | 视频 cid | 必要 | | +| pid | num | 稿件 avid | 非必要 | | +| segment_index | num | 分包 | 必要 | 6min 一包 | +| pull_mode | num | (?) | 非必要 | | +| ps | num | (?) | 非必要 | | +| pe | num | (?) | 非必要 | | + +**proto回复:** + +proto定义见:[bilibili.community.service.dm.v1.DmSegMobileReply](../../grpc_api/bilibili/community/service/dm/v1/dm.proto) + +- [protogen.marcgravell](https://protogen.marcgravell.com/): 在线编译 protogen 工具, 无需再安装本地编译器(生成文件需加后缀`_pb2.py`才可使用) + +- [protobuf pip](https://pypi.org/project/protobuf/): 可一键安装的 Python 的 protogen 解析库 + +消息`DmSegMobileReply`: + +| 名称 | 类型 | 含义 | 备注 | +| ----- | -------------------- | -------- | ---- | +| elems | repeated DanmakuElem | 弹幕条目 | | + +消息`DanmakuElem`: + +| 名称 | 类型 | 含义 | 备注 | +| --------- | ------ | ------------------ | ------------------------------------------------------------ | +| id | int64 | 弹幕 dmid | 唯一 可用于操作参数 | +| progress | int32 | 视频内弹幕出现时间 | 毫秒 | +| mode | int32 | 弹幕类型 | 1 2 3:普通弹幕<br />4:底部弹幕<br />5:顶部弹幕<br />6:逆向弹幕<br />7:高级弹幕<br />8:代码弹幕<br />9:BAS 弹幕(仅限于特殊弹幕专包) | +| fontsize | int32 | 弹幕字号 | 18:小<br />25:标准<br />36:大 | +| color | uint32 | 弹幕颜色 | 十进制 RGB888 值 | +| midHash | string | 发送者 mid 的 HASH | 用于屏蔽用户和查看用户发送的所有弹幕,也可反查用户id | +| content | string | 弹幕内容 | utf-8编码 | +| ctime | int64 | 弹幕发送时间 | 时间戳 | +| weight | int32 | 权重 | 用于智能屏蔽,根据弹幕语义及长度通过AI识别得出<br />范围:[0-10]<br />值越大权重越高 | +| action | string | 动作? | | +| pool | int32 | 弹幕池 | 0:普通池<br />1:字幕池<br />2:特殊池(代码/BAS弹幕) | +| idStr | string | 弹幕 dmid | 字串形式<br />唯一 可用于操作参数 | +| attr | int32 | 弹幕属性位 | bit0:保护<br />bit1:直播<br />bit2:高赞 | +| animation | string | 动画? | | + +**示例:** + +获取视频`av810872(cid=1176840)`(炮姐)的实时弹幕分包 1 + +**注:以下[proto定义](../grpc_api/bilibili/community/service/dm/v1/dm.proto)需要编译,`bilibili.community.service.dm.v1.dm_pb2`并非通过 pypi 安装** + +```python +import requests +import google.protobuf.text_format as text_format +import bilibili.community.service.dm.v1.dm_pb2 as Danmaku + +url = 'https://api.bilibili.com/x/v2/dm/web/seg.so' +params = { + 'type': 1, # 弹幕类型 + 'oid': 1176840, # cid + 'pid': 810872, # avid + 'segment_index': 1 # 弹幕分段 +} +resp = requests.get(url, params) +data = resp.content + +danmaku_seg = Danmaku.DmSegMobileReply() +danmaku_seg.ParseFromString(data) + +print(text_format.MessageToString(danmaku_seg.elems[0], as_utf8=True)) +``` + +输出: + +``` +id: 711923911 +progress: 47880 +mode: 1 +fontsize: 18 +color: 10092288 +midHash: "59417e95" +content: "世界第一电击公主殿下,遇到你是我一生最美好的风景!吾炮赛高,永生不离!唯我超电磁炮永世长存! " +ctime: 1418799826 +weight: 6 +idStr: "711923911" +attr: 1 +``` + diff --git a/docs/danmaku/danmaku_view_proto.md b/docs/danmaku/danmaku_view_proto.md new file mode 100644 index 0000000..4c761e3 --- /dev/null +++ b/docs/danmaku/danmaku_view_proto.md @@ -0,0 +1,288 @@ +# 弹幕元数据 + +2020-09-25 B站更新了互动弹幕功能,包括UP主头像弹幕、关联视频弹幕、视频内嵌引导关注按钮三大功能 + +详情见: + +- [【客户端更新】6.10版本更新!UP主支持发布关联视频弹幕]( https://www.bilibili.com/read/cv7728299 ) +- [引导关注卡片](https://www.bilibili.com/blackboard/activity-c8a0iDRQy.html ) + +## 获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包(web端) + +> https://api.bilibili.com/x/v2/dm/web/view + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ----------- | +| type | num | 弹幕类 | 必要 | 1:视频弹幕 | +| oid | num | 视频cid | 必要 | | +| pid | num | 稿件avid | 非必要 | | + +**proto回复:** + +消息`DmWebViewReply`: + +| 名称 | 类型 | 含义 | 备注 | +| ---------- | -------------------- | ---------------------- | ---------------------------- | +| state | int32 | 弹幕开放状态 | 0:开放弹幕<br />1:禁止弹幕 | +| text | string | ? | | +| textSide | string | ? | | +| dmSge | DmSegConfig | 分段弹幕包信息? | | +| flag | DanmakuFlagConfig | ? | | +| specialDms | repeated string | BAS(代码)弹幕专包url | | +| checkBox | bool | ? | | +| count | int64 | 实际弹幕总数 | 具有1500-6000不等的上限 | +| commandDms | repeated CommandDm | 互动弹幕条目 | | +| dmSetting | DanmuWebPlayerConfig | 弹幕个人配置 | 仅登录后存在 | + +消息`dmSge`: + +| 名称 | 类型 | 含义 | 备注 | +| -------- | ----- | ------------ | ---------- | +| pageSize | int64 | 分段时间? | 单位为毫秒 | +| total | int64 | 最大分页数? | | + +消息`flag`: + +| 名称 | 类型 | 含义 | 备注 | +| --------- | ------ | ---- | ---- | +| recFlag | int32 | ? | | +| recText | string | ? | | +| recSwitch | int32 | ? | | + +消息`commandDms`: + +| 名称 | 类型 | 含义 | 备注 | +| -------- | ------ | ------------ | ------------------------------------------------------------ | +| id | int64 | 弹幕dmid | | +| oid | int64 | 视频cid | | +| mid | int64 | 发送者mid | | +| command | string | 弹幕指令 | `#UP#`:UP主头像弹幕<br />`#LINK#`:关联视频弹幕<br />`#ATTENTION#`:视频内嵌引导关注按钮 | +| content | string | 弹幕文字 | | +| progress | int32 | 弹幕出现时间 | 单位为毫秒 | +| ctime | string | 创建时间? | 此项为空 | +| mtime | string | 修改时间? | 此项为空 | +| extra | string | 弹幕负载数据 | json序列字串 | +| idStr | string | 弹幕dmid | 字串形式 | + +`extra`json序列: + +类型为【UP主头像弹幕】时: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| icon | str | UP主头像url | | + +类型为【关联视频弹幕】时: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------------- | ---- | +| aid | num | 关联视频的avid | | +| title | str | 关联视频的标题 | | +| icon | str | 关联视频按钮图片url | | +| bvid | str | 关联视频的bvid | | + +类型为【视频内嵌引导关注按钮】时: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | ------------------------------------------ | +| duration | num | 持续时间 | 单位为毫秒 | +| posX | num | X坐标 | 区间:[118-549] | +| posY | num | Y坐标 | 区间:[82-293] | +| icon | str | 按钮图片url | 不应该是关注按钮吗,但这个是圆形的 | +| type | num | 关注按钮类型 | 0:仅关注<br />1:仅三连<br />2:关注+三连 | + +消息`dmSetting`: + +| 名称 | 类型 | 含义 | 备注 | +| ------------ | ------ | ------------------------ | ------------------------------------------------------------ | +| dmSwitch | bool | 弹幕开关 | true:开启<br />false:关闭 | +| aiSwitch | bool | 智能云屏蔽 | 同上 | +| aiLevel | int32 | 智能云屏蔽级别 | 区间:[1-10] | +| blocktop | bool | 屏蔽类型-顶部 | true:不屏蔽<br />false:屏蔽 | +| blockscroll | bool | 屏蔽类型-滚动 | 同上 | +| blockbottom | bool | 屏蔽类型-底部 | 同上 | +| blockcolor | bool | 屏蔽类型-彩色 | 同上 | +| blockspecial | bool | 屏蔽类型-特殊 | 同上 | +| preventshade | bool | 防挡弹幕(底部15%) | true:开启<br />false:关闭 | +| dmask | bool | 智能防挡弹幕(人像蒙版) | 同上 | +| opacity | float | 弹幕不透明度 | 区间:[0-1] | +| dmarea | int32 | 弹幕显示区域 | 100:不重叠<br />75:3/4屏<br />50:半瓶<br />25:1/4屏<br />0:不限 | +| speedplus | float | 弹幕速度 | 区间:[0.4-1.6] | +| fontsize | float | 字体大小 | 区间:[0.4-1.6] | +| screensync | bool | 跟随屏幕缩放比例 | | +| speedsync | bool | 根据播放倍速调整速度 | | +| fontfamily | string | 字体类型? | 未启用 | +| bold | bool | 粗体? | 未启用 | +| fontborder | int32 | 描边类型 | 0:重墨<br />1:描边<br />2:45°投影 | +| drawType | string | 渲染类型? | 未启用 | + +protobuf结构体: + +**web_dmview.proto** + +```protobuf +syntax = "proto3"; + +//分段弹幕包信息? +message DmSegConfig { + int64 pageSize = 1; //分段时间? + int64 total = 2; //最大分页数? +} + +// +message DanmakuFlagConfig { + int32 recFlag = 1; // + string recText = 2; // + int32 recSwitch = 3; // +} + +// 互动弹幕条目 +message CommandDm { + int64 id = 1; //弹幕dmid + int64 oid = 2; //视频cid + int64 mid = 3; //发送者mid + string command = 4; //弹幕指令 + string content = 5; //弹幕文字 + int32 progress = 6; //弹幕出现时间 + string ctime = 7; // + string mtime = 8; // + string extra = 9; //弹幕负载数据 + string idStr = 10; //弹幕dmid(字串形式) +} + +//弹幕个人配置 +message DanmuWebPlayerConfig{ + bool dmSwitch=1; //弹幕开关 + bool aiSwitch=2; //智能云屏蔽 + int32 aiLevel=3; //智能云屏蔽级别 + bool blocktop=4; //屏蔽类型-顶部 + bool blockscroll=5; //屏蔽类型-滚动 + bool blockbottom=6; //屏蔽类型-底部 + bool blockcolor=7; //屏蔽类型-彩色 + bool blockspecial=8; //屏蔽类型-特殊 + bool preventshade=9; //防挡弹幕(底部15%) + bool dmask=10; //智能防挡弹幕(人像蒙版) + float opacity=11; //弹幕不透明度 + int32 dmarea=12; //弹幕显示区域 + float speedplus=13; //弹幕速度 + float fontsize=14; //字体大小 + bool screensync=15; //跟随屏幕缩放比例 + bool speedsync=16; //根据播放倍速调整速度 + string fontfamily=17; //字体类型? + bool bold=18; //粗体? + int32 fontborder=19; //描边类型 + string drawType=20; //渲染类型? +} + +message DmWebViewReply { + int32 state = 1; //弹幕开放状态 + string text = 2; // + string textSide = 3; // + DmSegConfig dmSge = 4; //分段弹幕包信息? + DanmakuFlagConfig flag = 5; // + repeated string specialDms = 6; //BAS(代码)弹幕专包url + bool checkBox = 7; // + int64 count = 8; //实际弹幕总数 + repeated CommandDm commandDms = 9; //互动弹幕条目 + DanmuWebPlayerConfig dmSetting = 10; //弹幕个人配置 +} +``` + +**示例:** + +获取视频`av797164471(cid=236871317)`的弹幕元数据 + +```shell +curl -G 'https://api.bilibili.com/x/v2/dm/web/view' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=236871317' \ +--data-urlencode 'pid=797164471' \ +-b 'SESSDATA=xxx' \ +-o 'danmaku_view.bin' +``` + +响应正文为protubuf二进制数据 + +## 实例 + +### 获取互动弹幕 + +获取并显示视频`av797164471(cid=236871317)`的所有互动弹幕 + +```python +import web_dmview_pb2 +import requests + +AVID = 797164471 +CID = 236871317 +url = f'https://api.bilibili.com/x/v2/dm/web/view?type=1&oid={CID}&pid={AVID}' + +data = requests.get(url) +target = web_dmview_pb2.DmWebViewReply() +target.ParseFromString(data.content) + +print(f'互动弹幕数={len(target.commandDms)}') +for i in target.commandDms: + print(f'''\ +---弹幕ID={i.id} +---视频cid={i.oid} +---发送者mid={i.mid} +---弹幕指令={i.command} +---弹幕文字={i.content} +---弹幕出现时间={i.progress} +---弹幕负载数据={i.extra} +---弹幕ID(字串)={i.idStr}''' +) +``` + +输出为: + +``` +互动弹幕数=1 +---弹幕ID=38469676112019463 +---视频cid=236871317 +---发送者mid=501183549 +---弹幕指令=#UP# +---弹幕文字=这个视频没有恰饭!别紧张! +---弹幕出现时间=157818 +---弹幕负载数据={"icon":"https://i1.hdslb.com/bfs/face/559abe31f561f71f3106d8ee7b2065cac50c1235.jpg"} +---弹幕ID(字串)=38469676112019463 +``` + +### 获取BAS(代码)弹幕专包 + +BAS弹幕(`pool=2` `mode=9`)只能从此包获取,代码弹幕(`pool=2` `mode=8`)也能从此包获取 + +获取并显示视频`av2(cid=62131)`的所有BAS(代码)弹幕专包 + +```python +import web_dmview_pb2 +import requests + +AVID = 2 +CID = 62131 +url = f'https://api.bilibili.com/x/v2/dm/web/view?type=1&oid={CID}&pid={AVID}' + +data = requests.get(url) +target = web_dmview_pb2.DmWebViewReply() +target.ParseFromString(data.content) + +print(f'特殊弹幕包数={len(target.specialDms)}') +for i in target.specialDms: + print(f'特殊弹幕包url={i}') +``` + +输出为: + +``` +特殊弹幕包数=1 +特殊弹幕包url=https://i0.hdslb.com/bfs/dm/b0d5f08c12be59292aa0d4e09b6dd8e54c2ba886.bin +``` + +使用[普通分段包弹幕](danmaku_proto.md#获取实时弹幕)的proto结构体反序列化此bin数据 diff --git a/docs/danmaku/danmaku_xml.md b/docs/danmaku/danmaku_xml.md new file mode 100644 index 0000000..a5ea9ca --- /dev/null +++ b/docs/danmaku/danmaku_xml.md @@ -0,0 +1,145 @@ +# xml弹幕 + +实时弹幕池容量有限(根据视频类型500-8000条不等),占满后再发送会使实时弹幕池底部的弹幕压入历史弹幕池(类似于堆栈) + +## 获取实时弹幕1 + +> https://api.bilibili.com/x/v1/dm/list.so + +*请求方式:GET* + +**使用deflate压缩,注意解码** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------- | ------ | ---- | +| oid | num | 视频cid | 必要 | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/v1/dm/list.so' \ +--data-urlencode 'oid=144541892' \ +--compressed -o 'danmaku.xml' +``` + +## 获取实时弹幕2 + +> https://comment.bilibili.com/{cid}.xml + +*请求方式:GET* + +效果与前者相同 + +**使用deflate压缩,注意解码** + +**url路径:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------- | ------ | ---- | +| cid | num | 视频cid | 必要 | | + +**示例:** + +```shell +curl 'https://comment.bilibili.com/144541892.xml' +--compressed -o 'danmaku.xml' +``` + +**xml回复:** + +<details> +<summary>查看响应示例:</summary> + +```xml +<?xml version="1.0" encoding="UTF-8"?> +<i> + <chatserver>chat.bilibili.com</chatserver> + <chatid>144541892</chatid> + <mission>0</mission> + <maxlimit>1500</maxlimit> + <state>0</state> + <real_name>0</real_name> + <source>e-r</source> + <d p="490.19100,1,25,16777215,1584268892,0,a16fe0dd,29950852386521095">从结尾回来看这里,更感动了!</d> + <d p="18.77300,1,25,16777215,1584268920,0,4fe08d3,29950867226492933">咦三体居然还有动画</d> + <d p="52.88400,1,25,16777215,1584268954,0,4fe08d3,29950885214289927">哈哈哈哈开心</d> + <d p="25.51600,1,25,16777215,1584268957,0,e4b18b37,29950886612566021">红岸么</d> + <d p="144.45200,1,25,16777215,1584269076,0,e4b18b37,29950948716576775">我就是想看我的世界里水滴长啥样</d> + <d p="112.64100,1,25,16777215,1584269109,0,96606007,29950966302244871">有手指?</d> + <d p="222.84000,1,25,16777215,1584269154,0,e4b18b37,29950989809745923">侦测到在途的聚变打击</d> + <d p="284.77800,1,25,16777215,1584269216,0,e4b18b37,29951022237483011">都是虫子</d> + <d p="398.00500,1,25,16777215,1584269329,0,e4b18b37,29951081615196163">ocean</d> + <d p="432.17900,1,25,16777215,1584269363,0,e4b18b37,29951099571535943">村民,哼~</d> + <d p="467.41900,1,25,16777215,1584269399,0,e4b18b37,29951118364639237">黄河之水天上来</d> + <d p="6.71900,1,25,16777215,1584269422,0,70ba16f4,29951130398621699">镇站之宝</d> + <d p="313.08600,1,25,16777215,1584269425,0,e531c9dc,29951131798994947">这水</d> + <d p="587.87900,1,25,16777215,1584269519,0,e4b18b37,29951181142360071">海的那边是什么</d> + <d p="618.05000,1,25,16777215,1584269549,0,e4b18b37,29951196901933061">折跃门准备完毕</d> + ………… +<i> +``` + +</details> + +## 弹幕格式 + +### xml格式结构 + +- 标签 i + + - 标签 chatserver:chat.bilibili.com + - 标签 chatid:视频cid + - 标签 mission:0 + - 标签 maxlimit:实时弹幕池最大容量 + - 标签 state:弹幕状态(0:正常 1:弹幕已关闭) + - 标签 real_name:0 + - 标签 source:e-r + + - 标签 d (带有属性 p):弹幕内容 + +### 属性 p + +字符串内每项用逗号`,`分隔 + +| 项 | 含义 | 类型 | 备注 | +| ---- | ------------------ | ------ | ------------------------------------------------------------ | +| 0 | 视频内弹幕出现时间 | float | 秒 | +| 1 | 弹幕类型 | int32 | 1 2 3:普通弹幕<br />4:底部弹幕<br />5:顶部弹幕<br />6:逆向弹幕<br />7:高级弹幕<br />8:代码弹幕<br />9:BAS弹幕(`pool`必须为2) | +| 2 | 弹幕字号 | int32 | 18:小<br />25:标准<br />36:大 | +| 3 | 弹幕颜色 | int32 | 十进制RGB888值 | +| 4 | 弹幕发送时间 | int32 | 时间戳 | +| 5 | 弹幕池类型 | int32 | 0: 普通池<br />1: 字幕池<br />2: 特殊池 (代码/BAS弹幕)<br />3: 互动池?| +| 6 | 发送者mid的HASH | string | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户id | +| 7 | 弹幕dmid | int64 | 唯一 可用于操作参数 | +| 8 | 弹幕的屏蔽等级 | int32 | 0-10,低于用户设定等级的弹幕将被屏蔽<br />(新增,下方样例未包含) | + +```xml +<d p="490.19100,1,25,16777215,1584268892,0,a16fe0dd,29950852386521095">从结尾回来看这里,更感动了!</d> +``` + +弹幕内容为:“从结尾回来看这里,更感动了!” + +参数为:视频内出现的时间是490.19100秒,类型是普通弹幕,字号为标准,颜色为白色(#FFFFFF),发送时间是2020/3/15 18:41:32......... + +### web版标准颜色 + +弹幕的颜色属性使用**十进制RGB888**值 + +| 颜色 | HEX(RGB888) | DEC(RGB888) | +| -------------------------------------- | ----------------------------------------- | ------------------------------------------- | +| <font v-pre color="#FE0302">红色</font> | <font v-pre color="#FE0302">FE0302</font> | <font v-pre color="#FE0302">16646914‬</font> | +| <font v-pre color="#FF7204">橘红</font> | <font v-pre color="#FF7204">FF7204</font> | <font v-pre color="#FF7204">16740868</font> | +| <font v-pre color="#FFAA02">橘黄</font> | <font v-pre color="#FFAA02">FFAA02</font> | <font v-pre color="#FFAA02">16755202</font> | +| <font v-pre color="#FFD302">淡黄</font> | <font v-pre color="#FFD302">FFD302</font> | <font v-pre color="#FFD302">16765698</font> | +| <font v-pre color="#FFFF00">黄色</font> | <font v-pre color="#FFFF00">FFFF00</font> | <font v-pre color="#FFFF00">16776960</font> | +| <font v-pre color="#A0EE00">草绿</font> | <font v-pre color="#A0EE00">A0EE00</font> | <font v-pre color="#A0EE00">10546688</font> | +| <font v-pre color="#00CD00">绿色</font> | <font v-pre color="#00CD00">00CD00</font> | <font v-pre color="#00CD00">52480</font> | +| <font v-pre color="#019899">墨绿</font> | <font v-pre color="#019899">019899</font> | <font v-pre color="#019899">104601</font> | +| <font v-pre color="#4266BE">紫色</font> | <font v-pre color="#4266BE">4266BE</font> | <font v-pre color="#4266BE">4351678</font> | +| <font v-pre color="#89D5FF">青色</font> | <font v-pre color="#89D5FF">89D5FF</font> | <font v-pre color="#89D5FF">9022215</font> | +| <font v-pre color="#CC0273">品红</font> | <font v-pre color="#CC0273">CC0273</font> | <font v-pre color="#CC0273">13369971</font> | +| <font v-pre color="#222222">黑色</font> | <font v-pre color="#222222">222222</font> | <font v-pre color="#222222">2236962</font> | +| <font v-pre color="#9B9B9B">灰色</font> | <font v-pre color="#9B9B9B">9B9B9B</font> | <font v-pre color="#9B9B9B">10197915</font> | +| <font v-pre color="#FFFFFF">白色</font> | <font v-pre color="#FFFFFF">FFFFFF</font> | <font v-pre color="#FFFFFF">16777215</font> | diff --git a/docs/danmaku/history.md b/docs/danmaku/history.md new file mode 100644 index 0000000..a20f15a --- /dev/null +++ b/docs/danmaku/history.md @@ -0,0 +1,240 @@ +# 历史弹幕 + +**注:历史弹幕的xml接口已经失效,现已改为protobuf接口** + +## 查询历史弹幕日期 + +> https://api.bilibili.com/x/v2/dm/history/index + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**注:查询历史弹幕需要登录** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | ------- | +| type | num | 1 | 必要 | | +| oid | num | 视频cid | 必要 | | +| month | str | 查询目标年月 | 必要 | YYYY-MM | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------------------------------- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有弹幕:array<br />无弹幕:null | 日期列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---------- | +| 0 | str | 存在弹幕的日期1 | YYYY-MM-DD | +| n | str | 存在弹幕的日期(n+1) | YYYY-MM-DD | +| …… | str | …… | …… | + +**示例:** + +查询了cid为144541892的视频位于2020年1月中有历史弹幕记录的日期 + +```shell +curl -G 'https://api.bilibili.com/x/v2/dm/history/index' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=144541892' \ +--data-urlencode 'month=2020-01' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + "2020-01-21", + "2020-01-22", + "2020-01-23", + "2020-01-24", + "2020-01-25", + "2020-01-26", + "2020-01-27", + "2020-01-28", + "2020-01-29", + "2020-01-30", + "2020-01-31" + ] +} +``` + +</details> + +返回结果的 `data` 项说明这些日期有弹幕发送。若查询的月份中视频无弹幕,则 `data` 项为 `null` + +```shell +curl -G 'https://api.bilibili.com/x/v2/dm/history/index' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=144541892' \ +--data-urlencode 'month=2019-12' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": null +} +``` + +</details> + +## 获取历史弹幕protobuf接口 + +> https://api.bilibili.com/x/v2/dm/web/history/seg.so + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ----------- | +| type | num | 弹幕类 | 必要 | 1:视频弹幕 | +| oid | num | 视频cid | 必要 | | +| date | str | 弹幕日期 | 必要 | YYYY-MM-DD | + +**proto回复:** + +porto定义见:[bilibili.community.service.dm.v1.DmSegMobileReply](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/grpc_api/bilibili/community/service/dm/v1/dm.proto) + +详细说明见[protobuf弹幕](danmaku_proto.md) + +获取视频`av84271171(cid=144541892)`2020-01-21的历史弹幕 + +**注:proto定义需要编译** + +```python +import requests +import google.protobuf.text_format as text_format +import bilibili.community.service.dm.v1_pb2 as Danmaku + +url = 'https://api.bilibili.com/x/v2/dm/web/history/seg.so' +params = { + 'type':1, #弹幕类型 + 'oid':144541892, #cid + 'date':'2020-01-21' #弹幕日期 +} +cookies = { + 'SESSDATA':'xxx' +} +resp = requests.get(url,params,cookies=cookies) +data = resp.content + +danmaku_seg = Danmaku.DmSegMobileReply() +danmaku_seg.ParseFromString(data) + +print(text_format.MessageToString(danmaku_seg.elems[0],as_utf8=True)) +``` + +输出: + +``` +id: 27532611677585408 +progress: 300507 +mode: 1 +fontsize: 25 +color: 16777215 +midHash: "2a28d4a6" +content: "章北海的老爹" +ctime: 1579621359 +idStr: "27532611677585408" +``` + +## 获取历史弹幕xml接口 + +<details> +<summary>查看折叠内容:</summary> + +> https://api.bilibili.com/x/v2/dm/history + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**注:查询历史弹幕需要登录** + +结果为[标准xml格式弹幕](danmaku_xml.md#弹幕格式) + +**使用deflate压缩,注意解码** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---------- | +| type | num | 1 | 必要 | | +| oid | num | 视频cid | 必要 | | +| date | str | 弹幕日期 | 必要 | YYYY-MM-DD | + +**示例:** + +获取视频`av84271171(cid=144541892)`2020-01-21的历史弹幕 + +```shell +curl -G 'https://api.bilibili.com/x/v2/dm/history' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=144541892' \ +--data-urlencode 'date=2020-01-21' \ +-b 'SESSDATA=xxx' \ +--compressed -o 'danmaku.xml' +``` + +<details> +<summary>查看响应示例:</summary> + +```xml +<?xml version="1.0" encoding="UTF-8"?> +<i> + <chatserver>chat.bilibili.com</chatserver> + <chatid>144541892</chatid> + <mission>0</mission> + <maxlimit>1500</maxlimit> + <state>0</state> + <real_name>0</real_name> + <d p="473.43400,1,25,15138834,1579622380,0,ec16f2d,27532609919123456">敬礼</d> + <d p="3.10200,1,25,16777215,1579622362,0,a2bd7474,27532609920696320">悄默声的更新啊怎么</d> + <d p="17.52300,1,25,16777215,1579622357,0,972c932b,27532609906016258">久等了</d> + <d p="40.81800,1,25,16777215,1579622343,0,bbca6701,27532609906540546">不都是乱纪元才浸泡</d> + <d p="243.39800,1,25,15138834,1579622336,0,77b00ed9,27532609924890624">已阅,狗屁不通。大字报在地上搞搞就行,别弄到天上去</d> + <d p="559.80000,1,25,16777215,1579622334,0,9affc7f5,27532609909686274">CSSC。。。</d> + <d p="398.29700,1,25,16777215,1579622331,0,18d4707,27532609926463488">看到了个寂寞</d> + <d p="34.81000,1,25,38979,1579622327,0,319d7700,27532609926987776">有耳朵了!</d> + <d p="18.65700,1,25,16777215,1579622321,0,bbca6701,27532609912307714">雪天不用浸泡吧</d> + <d p="305.99800,1,25,16777215,1579622316,0,878c315b,27532609928560640">未来史学派</d> + <d p="7.86200,1,25,16777215,1579622309,0,c5136613,27532609913880578">浸泡!!!!!!!</d> + <d p="368.95600,1,25,16777215,1579622302,0,18d4707,27532609914404866">章召忠</d> + <d p="25.19800,1,25,16777215,1579622286,0,4dab6898,27532609931706368">mi24av</d> + <d p="41.10100,1,25,16777215,1579622274,0,33d31036,27532609932230656">泪奔</d> + <d p="627.69800,1,25,16777215,1579622264,0,d79a826a,27532609933279232">组建太空军</d> + <d p="310.58900,1,25,16777215,1579622243,0,18d4707,27532609918074882">是未来史学派?</d> + <d p="723.34800,1,25,16777215,1579622239,0,844fa9e7,27532609919123458">刘培强还行</d> + ………… +<i> +``` + +</details> + +</details> diff --git a/docs/danmaku/snapshot.md b/docs/danmaku/snapshot.md new file mode 100644 index 0000000..69f098b --- /dev/null +++ b/docs/danmaku/snapshot.md @@ -0,0 +1,88 @@ +# 弹幕快照 + +## 获取弹幕快照 + +> https://api.bilibili.com/x/v2/dm/ajax + +*请求方式:GET* + +最近产生的几条弹幕内容,**最多20条** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | -------- | ------------------ | ------ | ---- | +| aid | num或str | 稿件avid或稿件bvid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | --------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 预览列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | -------- | +| 0 | str | 预览内容1 | | +| n | str | 预览内容(n+1) | | +| …… | str | …… | …… | +| 19 | str | 预览内容20 | 最后一条 | + +**示例:** + +获取视频`av43337021`/`BV1rb411m7gE`的弹幕快照,总计20条 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/v2/dm/ajax' \ +--data-urlencode 'aid=43337021' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/v2/dm/ajax' \ +--data-urlencode 'aid=BV1rb411m7gE' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + "漫画比动漫好看而且血腥", + "666", + "金木小天使", + "太喜欢了", + "每天一遍防止抑郁", + "我还记得土豆那时候还有的看", + "把在给我摸摸~", + "突然泪目", + "感谢野生字幕君", + "993-7", + "刚刚出的时候小学看,现在高二了", + "原版op有这么长吗?搞笑,肯定做了剪辑,op会给你放全歌?", + "让你看个op 3 : 5 4 秒?", + "说原版不原版的都是弱智", + "樱花", + "请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,", + "再来亿遍", + "错的不是我,而是这个世界。", + "吃货的第一季的最后一季足以让他封神!", + "+" + ] +} +``` + +</details> diff --git a/docs/danmaku/thumbup.md b/docs/danmaku/thumbup.md new file mode 100644 index 0000000..0d59ff9 --- /dev/null +++ b/docs/danmaku/thumbup.md @@ -0,0 +1,104 @@ +# 弹幕点赞查询 + +## 查询指定dmid的点赞数 + +> https://api.bilibili.com/x/v2/dm/thumbup/stats + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------------- | ------ | --------------------- | +| oid | num | 视频 cid | 必要 | | +| ids | nums | 欲查询的弹幕 dmid | 必要 | 多个 id 之间用`,`分隔 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------------------------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 弹幕 id 与之对应数据的 Map | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------------------- | ---- | +| {弹幕 dmid} | obj | {弹幕 dmid} 对应的点赞信息 | | + +`{弹幕 dmid}`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ---------------------- | ------------------------------------------------------- | +| likes | num | 对应弹幕所获得的点赞数 | | +| user_like | num | 当前用户是否点赞 | 0:未点赞<br />1:已点赞<br />需要登录(Cookie 或 APP) | +| id_str | str | 弹幕 dmid 字符串形式 | | +| show_threshold | num | (?) | | +| reply_count | num | (?) | | +| gray_release_control | obj | (?) | | + +`gray_release_control`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------ | ---- | +| show_dm_reply | bool | (?) | | + +**示例:** + +获取视频 BV1AP411d7Qa 1P(cid=1131648710)下的几个弹幕 dmid`1318231376180646144,1318231518484950784,1318231736680887808` + +```bash +curl -G 'https://api.bilibili.com/x/v2/dm/thumbup/stats' \ + --data-urlencode 'oid=1131648710' \ + --data-urlencode 'ids=1318231376180646144,1318231518484950784,1318231736680887808' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "1318231376180646144": { + "likes": 0, + "user_like": 0, + "id_str": "1318231376180646144", + "show_threshold": 10, + "reply_count": 0, + "gray_release_control": { + "show_dm_reply": false + } + }, + "1318231518484950784": { + "likes": 0, + "user_like": 0, + "id_str": "1318231518484950784", + "show_threshold": 10, + "reply_count": 0, + "gray_release_control": { + "show_dm_reply": false + } + }, + "1318231736680887808": { + "likes": 0, + "user_like": 0, + "id_str": "1318231736680887808", + "show_threshold": 10, + "reply_count": 0, + "gray_release_control": { + "show_dm_reply": false + } + } + } +} +``` + +</details> diff --git a/docs/danmaku/webmask.md b/docs/danmaku/webmask.md new file mode 100644 index 0000000..ab0fff8 --- /dev/null +++ b/docs/danmaku/webmask.md @@ -0,0 +1,80 @@ +# 智能防挡弹幕 + +B 站部分视频提供“智能防挡弹幕”功能,其原理是提供了一个 webmask 二进制文件,其中保存了视频中各个位置的 svg 格式蒙版。 + +首先需要获取 webmask 资源的地址。 + +## 获取 webmask 资源地址 + +通过 [web 播放器资源接口](../video/player.md) 获取 webmask 二进制文件的地址。 + + +## webmask 资源 + +获取的 url 没有权鉴,不需要后面的参数也可以获取。 + +示例: + +```shell +curl -G https://upos-sz-staticcos-cmask.bilivideo.com/cmaskboss/825851971_30_0.webmask >> 825851971_30_0.webmask +``` + +下载后是二进制文件。 + + +## webmask 二进制读取 + +参考:[andrewvy/webmask-renderer](https://github.com/andrewvy/webmask-renderer) + +name | offset | length | type | desc +--- | ------ | ------ | ---- | ---- +mask | 0 | 4 | char | 'MASK' 文件头 +version| 4 | 4 | int | 是1 +vU | 8 | 4 | ? | 不知道是干什么的 +Ly | 12 | 4 | int | 后续数据的段数 +time_1 | 16 | 8 | long | 第一段对应视频开始时间 +offset_1 | 24 | 8 | long | 第一段蒙版信息开始处对应二进制偏移 +...|...|...|...|... +time_{Ly} |16+(Ly-1)*16| 8 | long | 第 `Ly` 段对应视频开始时间 +offset_{Ly} |24+(Ly-1)*16| 8 | long | 第 `Ly` 段蒙版信息开始处对应二进制偏移 +segments_1| 由前面offset_1提供 | 由 `offset_2-offset_1` 计算得到 | binary | 蒙版信息块,使用 gzip 压缩 +...|...|...|...|... + + +蒙版信息块是经过 gzip 压缩文本得到的二进制。解压缩后得到一个字节串。 + +前 16 字节是两个 long,记为 `left` 和 `right`,暂时不清楚其作用。`left` 似乎和平均每张蒙版的时间有关。`right` 总是 `i*10000`,`i` 是从 0 开始数的数据段次序。 + +后面是各个 svg 文本直接拼起来,可以直接通过 svg 格式头 `data:image/svg+xml;base64,` 分开。 + + +Python 示例: +```python +from struct import unpack +import gzip + +f = open('你的 webmask', 'rb') +buf = f.read() +_Ly = buf[12:16] +Ly = unpack('>i', _Ly)[0] # 大端序 int + +times = [] +offsets = [] +for idx in range(Ly): + op = 16 + idx * 16 # 个人习惯,我算偏移时喜欢用 `op` 和 `ed` 作为开始和结束的名字。 + time = unpack('>q', buf[op: op+8])[0] + offset = unpack('>q', buf[op+8: op+16])[0] + times.append(time) + offsets.append(offset) + +frames = [] +for idx in range(Ly): + op = offsets[idx] + if idx == Ly - 1: ed = len(buf) + else: ed = offsets[idx+1] + ba = buf[op: ed] + bad = gzip.decompress(ba) + badl = bad.split(b'data:image/svg+xml;base64,') + # badl[0]是16字节,`left` 和 `right` + frames.append(badl[1: ]) +``` diff --git a/docs/dynamic/action.md b/docs/dynamic/action.md new file mode 100644 index 0000000..aa55d2b --- /dev/null +++ b/docs/dynamic/action.md @@ -0,0 +1,351 @@ +# 动态操作 + +## 点赞动态 + +> https://api.bilibili.com/x/dynamic/feed/dyn/thumb + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------ | ------ | ------ | ---- | +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | + +**正文参数 (application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ------ | -------- | ------ | ---- | +| dyn_id_str | string | 动态 id | 必要 | | +| up | number | 点赞状态 | 必要 | 0: 切换<br />1: 点赞<br />2: 取消点赞 | +| spmid | string | `333.1369.0.0` | 不必要 | | +| from_spmid | string | `333.999.0.0` | 不必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| code | number | 返回值 | 0: 成功<br />-101: 账号未登录<br />-111: csrf 校验失败<br />4100001: 参数错误 | +| message | string | 错误消息 | 成功时为 `0` | +| ttl | number | `1` | | +| data | object | 空对象 | | + +**示例:** + +点赞动态 `1057955152016703512` + +```shell +curl -X POST 'https://api.bilibili.com/x/dynamic/feed/dyn/thumb' \ + --url-query 'csrf=xxx' \ + -b 'SESSDATA=xxxxx' \ + -H 'content-type: application/json' \ + --data-raw '{"dyn_id_str":"1057955152016703512","up":1}' +``` +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> + +## 点赞动态 (旧版) + +> https://api.vc.bilibili.com/dynamic_like/v1/dynamic_like/thumb + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +**正文参数 (application/x-www-form-urlencoded):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ------ | -------- | ------ | ---- | +| dynamic_id | string | 动态 id | 必要 | | +| up | number | 点赞状态 | 必要 | 0: 切换<br />1: 点赞<br />2: 取消点赞 | +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| code | number | 返回值 | 0: 成功<br />-101: 账号未登录<br />-111: csrf 校验失败<br />4100001: 参数错误 | +| message | string | 错误消息 | 成功时为 `0` | +| ttl | number | `1` | | +| data | object | 空对象 | | + +**示例:** + +点赞动态 `1060771233257226247` + +```shell +curl -X POST 'https://api.vc.bilibili.com/dynamic_like/v1/dynamic_like/thumb' \ --data-urlencode 'csrf=xxxxxx' \ + --data-urlencode 'dynamic_id=1060771233257226247' \ + --data-urlencode 'up=1' \ + -b 'SESSDATA=xxx' +``` +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> + +## 删除动态 + +参见 [创作中心 -> 图文操作 -> 删除动态](../creativecenter/opus.md#删除动态) + +## 删除动态 (旧版) + +> <https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------ | ------ | ---- | +| dynamic_id | num | 动态id | 必要 | | +| csrf_token | str | csrf | 必要 | | +| csrf | str | csrf | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />500404:已经删除过该动态<br />500406:动态不是自己的 | +| msg | str | 错误信息 | 成功时为空文本 | +| message | str | 错误信息 | 同`msg` | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---- | ---------------- | +| \_gt\_ | num | 0 | **作用尚不明确** | + +**示例:** + +删除动态`dynamic_id=588320531406678918` + +```shell +curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic' \ + --data-urlencode 'dynamic_id=588320531406678918' \ + --data-urlencode 'csrf_token=xxx' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "_gt_": 0 + } +} +``` + +</details> + +## 删除定时发布动态 + +> <https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/rm_draft> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------ | ---- | +| draft_id | num | 定时发布动态id | 必要 | | +| csrf_token | str | csrf | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------ | +| code | num | 返回值 | 0:成功<br />4120015:系统异常 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 数据本体 | 空对象,即`{}` | + +**示例:** + +删除定时发布动态`draft_id=755409289278914611` + +```shell +curl 'https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/rm_draft' \ + --data-urlencode 'draft_id=755409289278914611' \ + --data-urlencode 'csrf=xxxx' + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> + +## 设置置顶动态 + +> https://api.bilibili.com/x/dynamic/feed/space/set_top + +**请求方法: POST** + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie 中 `buvid3` 不为空 + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------ | ------ | ------ | ---- | +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | + +**正文参数 (application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ------ | -------- | ------ | ---- | +| dyn_str | string | 动态 id | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| code | number | 返回值 | 0: 成功<br />-101: 账号未登录<br />-111: csrf 校验失败<br />4100001: 参数错误 | +| message | string | 错误消息 | 成功时为 `0` | +| ttl | number | `1` | | +| data | object | 空对象 | | + +**示例:** + + +置顶动态 `1063487284684259332` + +```shell +curl -X POST 'https://api.bilibili.com/x/dynamic/feed/space/set_top' \ + --url-query 'csrf=xxx' \ + -b 'SESSDATA=xxxxx; buvid3=aaa' \ + -H 'content-type: application/json' \ + --data-raw '{"dyn_str":"1063487284684259332"}' +``` +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> + +## 取消置顶动态 + +> https://api.bilibili.com/x/dynamic/feed/space/rm_top + +**请求方法: POST** + +认证方式: Cookie (SESSDATA) + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------ | ------ | ------ | ---- | +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | + +**正文参数 (application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ------ | -------- | ------ | ---- | +| dyn_str | string | 动态 id | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | ---- | ---- | +| code | number | 返回值 | 0: 成功<br />-101: 账号未登录<br />-111: csrf 校验失败<br />4100001: 参数错误 | +| message | string | 错误消息 | 成功时为 `0` | +| ttl | number | `1` | | +| data | object | 空对象 | | + +**示例:** + + +取消置顶动态 `1063487284684259332` + +```shell +curl -X POST 'https://api.bilibili.com/x/dynamic/feed/space/rm_top' \ + --url-query 'csrf=xxx' \ + -b 'SESSDATA=xxxxx' \ + -H 'content-type: application/json' \ + --data-raw '{"dyn_str":"1063487284684259332"}' +``` +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> diff --git a/docs/dynamic/all.md b/docs/dynamic/all.md new file mode 100644 index 0000000..8c69ddf --- /dev/null +++ b/docs/dynamic/all.md @@ -0,0 +1,7770 @@ +# 获取动态列表 + +## 获取全部动态列表 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 必要性 | 内容 | 备注 | +| --- | --- | --- | --- | --- | +| timezone_offset | str | 非必要 | `-480` | 新版无 | +| type | str | 非必要 | 分类 | 新版无, `all`:全部(默认)<br/>`video`:视频投稿<br/>`pgc`:追番追剧<br/>`article`:专栏 | +| host_mid | num | 非必要 | UP主UID | 仅新版, 如 `293793435` | +| offset | num | 非必要 | 分页偏移量 | 默认为空, 翻页时使用 | +| update_baseline | str | 非必要 | 更新基线 | 获取新动态时使用 | +| page | num | 非必要 | 页数 | 无效参数 | +| platform | str | 非必要 | 平台 | 仅新版, 如 `web` | +| features | str | 非必要 | 功能开关? | 旧版 `itemOpusStyle,listOnlyfans`<br />新版 `itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,decorationCard,onlyfansAssetsV2,forwardListHidden,ugcDelete` | +| web_location | str | 非必要 | 333.1365 | 仅新版存在 | + +**JSON回复:** + +根: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 响应码 | 0:成功<br/>-101:账号未登录 | +| message | str | | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| has_more | bool | 是否有更多数据 | | +| items | array | 数据数组 | | +| offset | str | 偏移量 | 等于`items`中最后一条记录的id<br/>获取下一页时使用 | +| update_baseline | str | 更新基线 | 等于`items`中第一条记录的id | +| update_num | num | 本次获取获取到了多少条新动态 | 在更新基线以上的动态条数 | + +`data.items[n]`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| basic | obj | | | +| id_str | str | 动态id | | +| modules | obj | 动态信息 | | +| type | str | 动态类型 | [动态类型](./dynamic_enum.md#动态类型) | +| visible | bool | 是否显示 | `true`:正常显示<br/>`false`:折叠动态 | +| orig | obj | 原动态信息 | 仅动态类型为`DYNAMIC_TYPE_FORWARD`的情况下存在 | + +`data.items[n].basic`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| comment_id_str | str | 见 [动态类型](./dynamic_enum.md#动态类型) | +| comment_type | num | | 见 [动态类型](./dynamic_enum.md#动态类型) | +| like_icon | obj | | 见下 | +| rid_str | str | | 见 [动态类型](./dynamic_enum.md#动态类型) | + +`data.items[n].basic.like_icon`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| action_url | str | `空串` | | +| end_url | str | `空串` | | +| id | num | `0` | | +| start_url | str | `空串` | | + +`data.items[n].modules`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| module_author | obj | UP主信息 | 参见 [MODULE_TYPE_AUTHOR](../opus/features.md#module-type-author) 中的 `module_author` 对象 | +| module_dynamic | obj | 动态内容信息 | | +| module_more | obj | 动态右上角三点菜单 | 参见 [module_more](../opus/features.md#module-more) 中的 `module_more` 对象 | +| module_stat | obj | 动态统计数据 | 参见 [MODULE_TYPE_STAT](../opus/features.md#module-type-stat) 中的 `module_stat` 对象 | +| module_interaction | obj | 热度评论 | | +| module_fold | obj | 动态折叠信息 | | +| module_dispute | obj | 争议小黄条 | | +| module_tag | obj | 置顶信息 | | + +`data.items[n].modules.module_dynamic`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| additional | obj | 相关内容卡片信息 | | +| desc | obj | 动态文字内容 |其他动态时为null | +| major | obj | 动态主体对象 |转发动态时为null | +| topic | obj | 话题信息 | 无时为 null, 参见 [MODULE_TYPE_TOPIC](../opus/features.md#module-type-topic) | + +`data.items[n].modules.module_dynamic.additional`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| common | obj | 一般类型 | `ADDITIONAL_TYPE_COMMON`类型独有 | +| type | str | 卡片类型 | [相关内容卡片类型](./dynamic_enum.md#相关内容卡片类型) | +| reserve | obj | 预约信息 | `ADDITIONAL_TYPE_RESERVE`类型独有 | +| goods | obj | 商品内容 | `ADDITIONAL_TYPE_GOODS`类型独有 | +| vote | obj | 投票信息 | `ADDITIONAL_TYPE_VOTE`类型独有 | +| ugc | obj | 视频信息 | `ADDITIONAL_TYPE_UGC`类型独有 | +| match | object | 比赛信息? | `ADDITIONAL_TYPE_MATCH`类型独有, 参见 [MODULE_TYPE_CONTENT](../opus/features.md#module-type-content) 的 `module_content.paragraphs[].link_card.match` | +| upower_lottery | object | 充电专属抽奖信息 | `ADDITIONAL_TYPE_UPOWER_LOTTERY`类型独有, 参见 [MODULE_TYPE_CONTENT](../opus/features.md#module-type-content) 的 `module_content.paragraphs[].link_card.upower_lottery` | + +`data.items[n].modules.module_dynamic.additional.common`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| button | obj | 按钮内容 | | +| cover | str | 左侧封面图 | | +| desc1 | str | 描述1 | | +| desc2 | str | 描述2 | | +| head_text | str | 卡片头文本 | | +| id_str | str | 相关id | | +| jump_url | str | 跳转URL | | +| style | num | `1` | | +| sub_type | str | 子类型 | `game`<br/>`decoration`<br/>`ogv` | +| title | str | 卡片标题 | | + +`data.items[n].modules.module_dynamic.additional.common.button`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| jump_style | obj | 跳转类型 | `game`和`decoration`类型特有 | +| jump_url | str | 跳转URL | | +| type | num | | 1:`game`和`decoration`类型<br/>2:`ogv`类型 | +| check | obj | | `ogv`类型特有 | +| status | num | `1` | | +| uncheck | obj | | `ogv`类型特有 | + +`data.items[n].modules.module_dynamic.additional.common.button.jump_style`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| icon_url | str | `空串` | | +| text | str | 按钮显示文案 | game:`进入`<br/>decoration:`去看看` | + +`data.items[n].modules.module_dynamic.additional.common.button.check`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| icon_url | str | 按钮图片URL | | +| text | str | 按钮显示文案 | `ogv`:已追剧 | + +`data.items[n].modules.module_dynamic.additional.common.button.uncheck`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| icon_url | str | 按钮图片URL | | +| text | str | 按钮显示文案 | `ogv`:追剧 | + +`data.items[n].modules.module_dynamic.additional.reserve`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| button | obj | 按钮信息 | | +| desc1 | obj | 预约时间 | | +| desc2 | obj | 预约观看量 | | +| jump_url | str | 跳转URL | | +| reserve_total | num | 预约人数 | | +| rid | num | | | +| state | num | `0` | | +| stype | num | `1` `2` | | +| title | str | 预约标题 | | +| up_mid | num | 预约发起人UID | | +| desc3 | obj | 预约有奖信息 | | + +`data.items[n].modules.module_dynamic.additional.reserve.button`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| check | obj | 已预约状态显示内容 | | +| status | num | 预约状态 | 1:未预约,使用`uncheck`<br/>2:已预约,使用`check` | +| type | num | 类型 | 1:视频预约,使用`jump_style`<br/>2:直播预约,使用`check`和`uncheck` | +| uncheck | obj | 未预约状态显示内容 | | +| jump_style | obj | 跳转按钮 | | +| jump_url | str | 跳转URL | | + +`data.items[n].modules.module_dynamic.additional.reserve.button.check`对象" + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| icon_url | str | `空串` | | +| text | str | 按钮显示文案 | `已预约` | + +`data.items[n].modules.module_dynamic.additional.reserve.button.uncheck`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| icon_url | str | 显示图标URL | | +| text | str | 按钮显示文案 | | +| toast | str | 预约成功显示提示文案 | | +| disable | num | 是否不可预约 | 1:是 | + +`data.items[n].modules.module_dynamic.additional.reserve.button.jump_style`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| icon_url | str | `空串` | | +| text | str | 按钮显示文案 | `去观看` | + +`data.items[n].modules.module_dynamic.additional.reserve.desc1`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| style | num | 类型 | 0:`视频预约` `11-05 20:00 直播` `预计今天 17:05发布`<br/>1:`直播中` | +| text | str | 显示文案 | | + +`data.items[n].modules.module_dynamic.additional.reserve.desc2`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| style | num | `0` | | +| text | str | 显示文案 | `2人预约`<br/>`743观看`<br/>`1.0万人看过`<br/>`2151人气` | +| visible | bool | 是否显示 | true:显示文案<br/>false:显示已结束 | + +`data.items[n].modules.module_dynamic.additional.reserve.desc3`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| jump_url | str | 开奖信息跳转URL | | +| style | num | `1` | | +| text | str | 奖品信息显示文案 | | + +`data.items[n].modules.module_dynamic.additional.goods`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| head_icon | str | `空串` | | +| head_text | str | 卡片头显示文案 | | +| items | array | 商品信息列表 | | +| jump_url | str | `空串` | | + +`data.items[n].modules.module_dynamic.additional.goods.items`数组中的: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| brief | str | 商品副标题 | | +| cover | str | 商品封面 | | +| id | str | 商品ID | | +| jump_desc | str | 跳转按钮显示文案 | | +| jump_url | str | 跳转URL | | +| name | str | 商品名称 | | +| price | str | 商品价格 | | + +`data.items[n].modules.module_dynamic.additional.vote`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| choice_cnt | num | `1` | | +| default_share | num | 是否默认勾选`同时分享至动态` | 1:勾选 | +| desc | str | 投票标题 | | +| end_time | num | 剩余时间 | 单位:秒 | +| join_num | num | 已参与人数 | | +| status | num | `1` | | +| type | null | `null` | | +| uid | num | 发起人UID | | +| vote_id | num | 投票ID | | + +`data.items[n].modules.module_dynamic.additional.ugc`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cover | str | 封面 | | +| desc_second | str | 播放量与弹幕数 | | +| duration | str | 视频长度 | | +| head_text | str | `空串` | | +| id_str | str | 视频AV号 | | +| jump_url | str | 视频跳转URL | | +| multi_line | bool | `true` | | +| title | str | 视频标题 | | + +`data.items[n].modules.module_dynamic.desc`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| rich_text_nodes | array | 富文本节点列表 | [富文本节点类型](../opus/rich_text_nodes.md#富文本节点类型) | +| text | str | 动态的文字内容 | | + +`data.items[n].modules.module_dynamic.major`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| type | str | 动态主体类型 | [动态主体类型](./dynamic_enum.md#动态主体类型) | +| ugc_season | obj | 合集信息 | `MAJOR_TYPE_UGC_SEASON` | +| article | obj | 专栏类型 | `MAJOR_TYPE_ARTICLE` | +| draw | obj | 带图动态 | `MAJOR_TYPE_DRAW` | +| archive | obj | 视频信息 | `MAJOR_TYPE_ARCHIVE` | +| live_rcmd | obj | 直播状态 | `MAJOR_TYPE_LIVE_RCMD` | +| common | obj | 一般类型 | `MAJOR_TYPE_COMMON` | +| pgc | obj | 剧集信息 | `MAJOR_TYPE_PGC` | +| courses | obj | 课程信息 | `MAJOR_TYPE_COURSES` | +| music | obj | 音频信息 | `MAJOR_TYPE_MUSIC` | +| opus | obj | 图文动态 | `MAJOR_TYPE_OPUS` | +| live | obj | | | +| none | obj | 动态失效 | `MAJOR_TYPE_NONE` | +| upower_common | obj | 充电相关 | `MAJOR_TYPE_UPOWER_COMMON` | + +`data.items[].modules.module_dynamic.major.upower_common` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| background | object | 背景 | | +| button | object | 按钮 | | +| icon | object | 图标 | | +| jump_url | string | 跳转 URL | | +| rid | string | 关联 id | | +| title | string | 标题 | | +| title_prefix | string | 标题前缀 | | +| type | number | 类型 | | +| up_mid | number | UP 主 mid (UID) | | +| upower_action_state | number | 充电操作状态? | | +| upower_level | number | 充电级别? | | + +`data.items[].modules.module_dynamic.major.upower_common.background` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| dark_src | string | 深色背景 | | +| light_src | string | 浅色背景 | | + +`data.items[].modules.module_dynamic.major.upower_common.button` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| jump_style | object | 跳转样式 | | +| jump_url | string | 跳转 URL | | +| type | number | 类型 | | + +`data.items[].modules.module_dynamic.major.upower_common.button.jump_style` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| text | string | 文本 | | + +`data.items[].modules.module_dynamic.major.upower_common.icon` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| dark_src | string | 深色图标 URL | | +| light_src | string | 浅色图标 URL | | + +<!-- Generated by json-apidoc-gen @ 2025-07-20T07:08:06.175919645Z --> + +`data.items[n].modules.module_dynamic.major.ugc_season`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| aid | num | 视频AV号 | | +| badge | obj | 角标信息 | | +| cover | str | 视频封面 | | +| desc | str | 视频简介 | | +| disable_preview | num | `0` | | +| duration_text | str | 时长 | | +| jump_url | str | 跳转URL | | +| stat | obj | 统计信息 | | +| title | str | 视频标题 | | + +`data.items[n].modules.module_dynamic.major.ugc_season.badge`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| bg_color | str | 背景颜色 | | +| color | str | 字体颜色 | | +| text | str | 角标文案 | | + +`data.items[n].modules.module_dynamic.major.ugc_season.stat`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| danmaku | str | 弹幕数 | | +| play | str | 播放数 | | + +`data.items[n].modules.module_dynamic.major.article`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| covers | array | 封面图数组 | 最多三张 | +| desc | str | 文章摘要 | | +| id | num | 文章CV号 | | +| jump_url | str | 文章跳转地址 | | +| label | str | 文章阅读量 | | +| title | str | 文章标题 | | + +`data.items[n].modules.module_dynamic.major.draw`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| id | num | 对应相簿id | | +| items | array | 图片信息列表 | | + +`data.items[n].modules.module_dynamic.major.draw.items[o]`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| height | num | 图片高度 | | +| size | num | 图片大小 | 单位KB | +| src | str | 图片URL | | +| tags | array | | | +| width | num | 图片宽度 | | + +`data.items[n].modules.module_dynamic.major.archive`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| aid | str | 视频AV号 | | +| badge | obj | 角标信息 | | +| bvid | str | 视频BVID | | +| cover | str | 视频封面 | | +| desc | str | 视频简介 | | +| disable_preview | num | `0` | | +| duration_text | str | 视频长度 | | +| jump_url | str | 跳转URL | | +| stat | obj | 统计信息 | | +| title | str | 视频标题 | | +| type | num | `1` | | + +`data.items[n].modules.module_dynamic.major.archive.badge`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| bg_color | str | 背景颜色 | | +| color | str | 字体颜色 | | +| text | str | 角标文案 | | + +`data.items[n].modules.module_dynamic.major.archive.stat`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| danmaku | str | 弹幕数 | | +| play | str | 播放数 | | + +`data.items[n].modules.module_dynamic.major.live_rcmd`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| content | str | 直播间内容JSON | | +| reserve_type | num | `0` | | + +`data.items[n].modules.module_dynamic.major.common`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| badge | obj | 角标信息 | | +| biz_type | num | `0` | | +| cover | str | 左侧图片封面 | | +| desc | str | 右侧描述信息 | | +| id | str | | | +| jump_url | str | 跳转地址 | | +| label | str | `空串` | | +| sketch_id | str | | | +| style | num | `1` | | +| title | str | 右侧标题 | | + +`data.items[n].modules.module_dynamic.major.common.badge`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| bg_color | str | 背景色 | | +| color | str | 前景色 | | +| text | str | 文本 | | + +`data.items[n].modules.module_dynamic.major.pgc`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| badge | obj | 角标信息 | | +| cover | str | 视频封面 | | +| epid | num | 分集EpId | | +| jump_url | str | 跳转URL | | +| season_id | num | 剧集SeasonId | | +| stat | obj | 统计信息 | | +| sub_type | num | 剧集类型 | 1:番剧<br/>2:电影<br/>3:纪录片<br/>4:国创<br/>5:电视剧<br/>6:漫画<br/>7:综艺 | +| title | str | 视频标题 | | +| type | num | `2` | | + +`data.items[n].modules.module_dynamic.major.pgc.badge`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| bg_color | str | 背景颜色 | | +| color | str | 字体颜色 | | +| text | str | 角标文案 | | + +`data.items[n].modules.module_dynamic.major.pgc.stat`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| danmaku | str | 弹幕数 | | +| play | str | 播放数 | | + +`data.items[n].modules.module_dynamic.major.courses`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| badge | obj | 角标信息 | | +| cover | str | 封面图URL | | +| desc | str | 更新状态描述 | | +| id | num | 课程id | | +| jump_url | str | 跳转URL | | +| sub_title | str | 课程副标题 | | +| title | str | 课程标题 | | + +`data.items[n].modules.module_dynamic.major.courses.badge`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| bg_color | str | 背景颜色 | | +| color | str | 字体颜色 | | +| text | str | 角标文案 | | + +`data.items[n].modules.module_dynamic.major.music`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cover | str | 音频封面 | | +| id | num | 音频AUID | | +| jump_url | str | 跳转URL | | +| label | str | 音频分类 | | +| title | str | 音频标题 | | + +`data.items[n].modules.module_dynamic.major.opus`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| fold_action | array | 展开收起 | | +| jump_url | str | 跳转URL | | +| pics | array | 图片信息 | | +| summary | obj | 动态内容 | | +| title | str | 动态标题 | 没有标题时为null | + +`data.items[n].modules.module_dynamic.major.opus.summary`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| rich_text_nodes | array | 富文本节点列表 | 和`desc`对象中的`rich_text_nodes`数组结构一样 | +| text | str | 评论内容 | | + +`data.items[n].modules.module_dynamic.major.live`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| badge | obj | 角标信息 | | +| cover | str | 直播封面 | | +| desc_first | str | 直播主分区名称 | | +| desc_second | str | 观看人数 | | +| id | num | 直播间id | | +| jump_url | str | 直播间跳转URL | | +| live_state | num | 直播状态 | 0:直播结束<br/>1:正在直播 | +| reserve_type | num | `0` | | +| title | str | 直播间标题 | | + +`data.items[n].modules.module_dynamic.major.live.badge`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| bg_color | str | 背景颜色 | | +| color | str | 字体颜色 | | +| text | str | 角标文案 | | + +`data.items[n].modules.module_dynamic.major.none`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| tips | str | 动态失效显示文案 | deprecated? | + +`data.items[n].modules.module_interaction`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| items | array | 信息列表 | | + +`data.items[n].modules.module_interaction.items`数组中的: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| desc | obj | 点赞/评论信息 | | +| type | num | 类型 | 0:点赞信息<br/>1:评论信息 | + +`data.items[n].modules.module_interaction.items[o].desc`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| rich_text_nodes | array | 富文本节点列表 | [富文本节点类型](../opus/rich_text_nodes.md#富文本节点类型) | +| text | str | 评论内容 | | + +`data.items[n].modules.module_fold`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| ids | array | 被折叠的动态id列表 | | +| statement | str | 显示文案 | 例:展开x条相关动态 | +| type | num | `1` | | +| users | array | `空数组` | | + +`data.items[n].modules.module_dispute`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| desc | str | | | +| jump_url | str | | | +| title | str | 提醒文案 | 例:视频内含有危险行为,请勿模仿 | + +`data.items[n].modules.module_tag`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| text | str | '置顶' | 置顶动态出现这个对象,否则没有 | + +**示例:** + +```shell +curl -L -X GET 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?type=all' \ +-H 'Cookie: SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "has_more": true, + "items": [ + { + "basic": { + "comment_id_str": "112981396619958", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "112981396619958" + }, + "id_str": "966887968322093078", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/b1c15dd8814d79e648008815517aa5ef50a2fb9c.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "3546730050096047" + }, + "face": "https://i2.hdslb.com/bfs/face/b1c15dd8814d79e648008815517aa5ef50a2fb9c.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/3546730050096047/dynamic", + "label": "", + "mid": 3546730050096047, + "name": "青岛LUCIFER", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "刚刚", + "pub_ts": 1723959548, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "112981396619958", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1oeWNebEv2", + "cover": "http://i2.hdslb.com/bfs/archive/0e3d26d90eb0642d90c7552e63ce690e2fe7f8ce.jpg", + "desc": "给老板娘贴睫毛贴了半天,老登眼皮总动,夹睫毛疼了还骂我,不开心哈哈哈。", + "disable_preview": 0, + "duration_text": "00:16", + "jump_url": "//www.bilibili.com/video/BV1oeWNebEv2/", + "stat": { + "danmaku": "0", + "play": "0" + }, + "title": "老板娘今天是可爱鬼呀!", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 0, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "1756441068", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "1756441068" + }, + "id_str": "966873782060843027", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/726060100f7b80f3ab17889aa9fb8f380a53b9da.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "266765166" + }, + "face": "https://i0.hdslb.com/bfs/face/726060100f7b80f3ab17889aa9fb8f380a53b9da.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/266765166/dynamic", + "label": "", + "mid": 266765166, + "name": "漫士沉思录", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "55分钟前", + "pub_ts": 1723956245, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "1756441068", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1d4421Z7nW", + "cover": "http://i1.hdslb.com/bfs/archive/df067c178714da9b511f10bde11e1bc75ea676d9.jpg", + "desc": "使用3b1b开发的manim引擎制作", + "disable_preview": 0, + "duration_text": "14:25", + "jump_url": "//www.bilibili.com/video/BV1d4421Z7nW/", + "stat": { + "danmaku": "217", + "play": "1.4万" + }, + "title": "【漫士科普】如何最简单且本质地理解欧拉公式?", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 142, + "forbidden": false + }, + "forward": { + "count": 6, + "forbidden": false + }, + "like": { + "count": 1959, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "325833790", + "comment_type": 11, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "325833790" + }, + "id_str": "966831498138222598", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "233114659" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/garb/bb140043341137b879e957d09b649ce7c3257820.png", + "fan": { + "color": "#903AC2", + "color_format": { + "colors": [ + "#903AC2FF", + "#903AC2FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": true, + "num_prefix": "NO.", + "num_str": "000001", + "number": 1 + }, + "id": 1706163888001, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=1706163888001\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=233114659\u0026native.theme=1\u0026navhide=1", + "name": "龙腾啾跃-动态卡片粉丝", + "type": 3 + }, + "face": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/233114659/dynamic", + "label": "", + "mid": 233114659, + "name": "碧蓝航线", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png", + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp", + "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/3052b412defbbc7704e887fefde8de539e8027c5.png", + "n_pid": 1987, + "name": "碧蓝航线2020", + "pid": 1987 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "3小时前", + "pub_ts": 1723946400, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1729526400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": { + "common": { + "button": { + "jump_style": { + "icon_url": "", + "text": "进入" + }, + "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005", + "type": 1 + }, + "cover": "https://i0.hdslb.com/bfs/game/b141a7690c226a0eae66518c713d3af62613b21d.png", + "desc1": "养成", + "desc2": "指挥官,欢迎回港", + "head_text": "相关游戏", + "id_str": "97", + "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005", + "style": 1, + "sub_type": "game", + "title": "碧蓝航线" + }, + "type": "ADDITIONAL_TYPE_COMMON" + }, + "desc": { + "rich_text_nodes": [ + { + "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF", + "orig_text": "#碧蓝航线#", + "text": "#碧蓝航线#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": " ", + "text": " ", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF%E6%BC%AB%E5%B1%95", + "orig_text": "#碧蓝航线漫展#", + "text": "#碧蓝航线漫展#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": " ", + "text": " ", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=2024%E6%B8%AF%E5%8C%BA%E7%9B%9B%E5%A4%8F%E6%B8%85%E5%87%89%E8%8A%82", + "orig_text": "#2024港区盛夏清凉节#", + "text": "#2024港区盛夏清凉节#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": "\n◆ 「港区盛夏清凉节」长沙站·街区快闪 DAY1 现场直击!◆ \n\n城市街巷,专属惊喜,\n绘就绚丽夏日!\n和少女们一同记录这场特别邂逅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。", + "text": "\n◆ 「港区盛夏清凉节」长沙站·街区快闪 DAY1 现场直击!◆ \n\n城市街巷,专属惊喜,\n绘就绚丽夏日!\n和少女们一同记录这场特别邂逅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "#碧蓝航线# #碧蓝航线漫展# #2024港区盛夏清凉节#\n◆ 「港区盛夏清凉节」长沙站·街区快闪 DAY1 现场直击!◆ \n\n城市街巷,专属惊喜,\n绘就绚丽夏日!\n和少女们一同记录这场特别邂逅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。" + }, + "major": { + "draw": { + "id": 325833790, + "items": [ + { + "height": 4000, + "size": 16103.947, + "src": "http://i0.hdslb.com/bfs/new_dyn/31b32e6dcf2f1a6328552f0fa666302d233114659.jpg", + "tags": [], + "width": 6000 + }, + { + "height": 3905, + "size": 16620.71, + "src": "http://i0.hdslb.com/bfs/new_dyn/e507c60207f486824708a5850d07d1bb233114659.jpg", + "tags": [], + "width": 5858 + }, + { + "height": 4000, + "size": 16195.393, + "src": "http://i0.hdslb.com/bfs/new_dyn/7a7ef9513bb32edc3de887d787a4df43233114659.jpg", + "tags": [], + "width": 6000 + }, + { + "height": 4672, + "size": 11758.82, + "src": "http://i0.hdslb.com/bfs/new_dyn/a21461b944e10306e68672df3e92c1b9233114659.jpg", + "tags": [], + "width": 7008 + }, + { + "height": 4672, + "size": 3962.4902, + "src": "http://i0.hdslb.com/bfs/new_dyn/b2c4baa47b4999cabb9c8c338c2da36c233114659.jpg", + "tags": [], + "width": 7008 + }, + { + "height": 4672, + "size": 11276.51, + "src": "http://i0.hdslb.com/bfs/new_dyn/8cf06e142fce875d2c3b83961abbc668233114659.jpg", + "tags": [], + "width": 7008 + }, + { + "height": 3735, + "size": 13969.533, + "src": "http://i0.hdslb.com/bfs/new_dyn/c56cd277f281ba8cc4a395dbe5d9fa54233114659.jpg", + "tags": [], + "width": 5603 + }, + { + "height": 3106, + "size": 12942.339, + "src": "http://i0.hdslb.com/bfs/new_dyn/9049a5c39ebafdd1cb488b26da4f99da233114659.jpg", + "tags": [], + "width": 4659 + }, + { + "height": 3802, + "size": 18643.953, + "src": "http://i0.hdslb.com/bfs/new_dyn/564e469ba092d2381b23547da37ca3c0233114659.jpg", + "tags": [], + "width": 5703 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 151, + "forbidden": false + }, + "forward": { + "count": 31, + "forbidden": false + }, + "like": { + "count": 2827, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + { + "basic": { + "comment_id_str": "37231101", + "comment_type": 12, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "37231101" + }, + "id_str": "966827503780888593", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "407045223" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "fan": { + "color": "", + "color_format": null, + "is_fan": false, + "num_prefix": "", + "num_str": "", + "number": 0 + }, + "id": 28, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=407045223\u0026native.theme=1\u0026navhide=1", + "name": "2233娘", + "type": 1 + }, + "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/407045223/dynamic", + "label": "", + "mid": 407045223, + "name": "二次元的中科院物理所", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了文章", + "pub_location_text": "", + "pub_time": "3小时前", + "pub_ts": 1723945470, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1745769600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "article": { + "covers": [ + "https://i0.hdslb.com/bfs/article/f59f635a3784c49eb174da7d589c4e75407045223.jpg" + ], + "desc": "西游记中,孙悟空为了保护师傅,在地上画了一个圈,由此便可限制住妖怪。今天小编带大家布置法术场地,只需在上面画出图案,便可控制水滴的行动!实验器材火柴、蜡烛、空易拉罐、所标杯、细竹签实验步骤安全提示:本实验有明火,请小朋友在家长的陪同下完成,或在空旷的地方进行,避免着火,注意安全。第一步:首先布置施法场地,通过蜡烛将易拉罐底部附着满炭黑。注意此步骤中应保持易拉罐内含一定水分,否则会产生烫伤等风险!第二步:向施法场地滴入水滴,观察场地效果。可以看到水滴在场地内不收约束,自由滑行第三步:当用细竹签等在场地中画出", + "id": 37231101, + "jump_url": "//www.bilibili.com/read/cv37231101/", + "label": "12万阅读", + "title": "带你在家里学会孙悟空的“画地为牢” 丨正经玩" + }, + "type": "MAJOR_TYPE_ARTICLE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 9, + "forbidden": false + }, + "forward": { + "count": 2, + "forbidden": false + }, + "like": { + "count": 583, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_ARTICLE", + "visible": true + }, + { + "basic": { + "comment_id_str": "1306462278", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "1306462278" + }, + "id_str": "966792134707380227", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_animation": { + "webp_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "686127" + }, + "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/686127/dynamic", + "label": "", + "mid": 686127, + "name": "籽岷", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png", + "image_enhance_frame": "", + "n_pid": 2066, + "name": "百年大会员", + "pid": 2066 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "6小时前", + "pub_ts": 1723937235, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 4845196800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/c16005a5b39164b3536cbd45618a5edd597a1c51.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/Pzrd8zmpQD.png", + "label_theme": "hundred_annual_vip", + "path": "", + "text": "百年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "1306462278", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV14M4m1175k", + "cover": "http://i1.hdslb.com/bfs/archive/7f8060fe1669b1a0a980844bb90e8150a859499c.jpg", + "desc": "https://www.curseforge.com/minecraft/mc-mods/desert-behemoths-sandworms/", + "disable_preview": 0, + "duration_text": "04:24", + "jump_url": "//www.bilibili.com/video/BV14M4m1175k/", + "stat": { + "danmaku": "297", + "play": "10.1万" + }, + "title": "我的世界 巨大沙虫", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "bili_49990770610:", + "rid": "3546583341730698", + "text": "bili_49990770610:", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/1597302b98827463f5b75c7cac1f29ea6ce572c4.png", + "size": 1, + "text": "[给心心]", + "type": 1 + }, + "orig_text": "[给心心]", + "text": "[给心心]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + } + ], + "text": "[给心心]" + }, + "type": 1 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 248, + "forbidden": false + }, + "forward": { + "count": 10, + "forbidden": false + }, + "like": { + "count": 10276, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "325813964", + "comment_type": 11, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "325813964" + }, + "id_str": "966695334756483089", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "293793435" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/garb/item/c0cf2235089ed314d92f30efa855c9b5611fa2cd.png", + "fan": { + "color": "#07b6d5", + "color_format": { + "colors": [ + "#07b6d5FF", + "#07b6d5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": true, + "num_prefix": "NO.", + "num_str": "005638", + "number": 5638 + }, + "id": 2513, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=2513\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=293793435\u0026native.theme=1\u0026navhide=1", + "name": "初音未来粉丝专属", + "type": 3 + }, + "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/293793435/dynamic", + "label": "", + "mid": 293793435, + "name": "社会易姐QwQ", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "https://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png", + "n_pid": 2511, + "name": "初音未来13周年", + "pid": 2511 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "12小时前", + "pub_ts": 1723914697, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1739116800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "非常好冰箱贴,爱来自硬先生😋😋", + "text": "非常好冰箱贴,爱来自硬先生😋😋", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@硬核拆解 ", + "rid": "427494870", + "text": "@硬核拆解 ", + "type": "RICH_TEXT_NODE_TYPE_AT" + } + ], + "text": "非常好冰箱贴,爱来自硬先生😋😋@硬核拆解 " + }, + "major": { + "draw": { + "id": 325813964, + "items": [ + { + "height": 1277, + "size": 98.36, + "src": "http://i0.hdslb.com/bfs/new_dyn/60d92e9e0d89a5394a2da69aba6f9710293793435.jpg", + "tags": [], + "width": 958 + }, + { + "height": 1080, + "size": 905.82, + "src": "http://i0.hdslb.com/bfs/new_dyn/0f9bff1938d824ce206a569d539455df293793435.jpg", + "tags": [], + "width": 1440 + }, + { + "height": 1080, + "size": 693.59, + "src": "http://i0.hdslb.com/bfs/new_dyn/ab3332061b793361ec08901ace1782db293793435.jpg", + "tags": [], + "width": 1440 + }, + { + "height": 1080, + "size": 988.15, + "src": "http://i0.hdslb.com/bfs/new_dyn/8e62512db6d04b381dae3814adb95d5e293793435.jpg", + "tags": [], + "width": 1440 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 11, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + { + "basic": { + "comment_id_str": "966692349750018048", + "comment_type": 17, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "966692349750018048" + }, + "id_str": "966692349750018048", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/78cdc5ba930ab171ebfe1ecc848cabcd4b0e0974.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "36081646" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/garb/item/684f6dc32decd32fe9db901b81b83b9a1fe39574.png", + "fan": { + "color": "", + "color_format": null, + "is_fan": false, + "num_prefix": "", + "num_str": "", + "number": 0 + }, + "id": 49922, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=49922\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=36081646\u0026native.theme=1\u0026navhide=1", + "name": "古色花香洛天依", + "type": 1 + }, + "face": "https://i1.hdslb.com/bfs/face/78cdc5ba930ab171ebfe1ecc848cabcd4b0e0974.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/36081646/dynamic", + "label": "", + "mid": 36081646, + "name": "洛天依", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png", + "image_enhance": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png", + "image_enhance_frame": "", + "n_pid": 1720437918001, + "name": "洛天依心律共鸣头像框", + "pid": -1843967695 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "12小时前", + "pub_ts": 1723914002, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1764777600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "恭喜", + "text": "恭喜", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@从一到无穷大Infinity", + "rid": "697565874", + "text": "@从一到无穷大Infinity", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "@qwq啊啊啊啊啊噜", + "rid": "189799722", + "text": "@qwq啊啊啊啊啊噜", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "@有时名字不能取太长", + "rid": "3546388151405126", + "text": "@有时名字不能取太长", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "等5位同学中奖,已私信通知,详情请点击抽奖查看。", + "text": "等5位同学中奖,已私信通知,详情请点击抽奖查看。", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "恭喜@从一到无穷大Infinity@qwq啊啊啊啊啊噜@有时名字不能取太长等5位同学中奖,已私信通知,详情请点击抽奖查看。" + }, + "major": null, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "明ちゃん王:", + "rid": "1280664625", + "text": "明ちゃん王:", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "哇,非常不错呢,跟天依挺搭配的", + "text": "哇,非常不错呢,跟天依挺搭配的", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/63c9d1a31c0da745b61cdb35e0ecb28635675db2.png", + "size": 1, + "text": "[星星眼]", + "type": 1 + }, + "orig_text": "[星星眼]", + "text": "[星星眼]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + } + ], + "text": "哇,非常不错呢,跟天依挺搭配的[星星眼]" + }, + "type": 1 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 88, + "forbidden": false + }, + "forward": { + "count": 12, + "forbidden": false + }, + "like": { + "count": 3088, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "939874290505875465", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/78cdc5ba930ab171ebfe1ecc848cabcd4b0e0974.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "36081646" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/garb/item/684f6dc32decd32fe9db901b81b83b9a1fe39574.png", + "fan": { + "color": "", + "color_format": null, + "is_fan": false, + "num_prefix": "", + "num_str": "", + "number": 0 + }, + "id": 49922, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=49922\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=36081646\u0026native.theme=1\u0026navhide=1", + "name": "古色花香洛天依", + "type": 1 + }, + "face": "https://i1.hdslb.com/bfs/face/78cdc5ba930ab171ebfe1ecc848cabcd4b0e0974.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/36081646/dynamic", + "label": "", + "mid": 36081646, + "name": "洛天依", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png", + "image_enhance": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png", + "image_enhance_frame": "", + "n_pid": 1720437918001, + "name": "洛天依心律共鸣头像框", + "pid": -1843967695 + }, + "pub_action": "", + "pub_time": "", + "pub_ts": 1717669936, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1764777600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": { + "goods": { + "head_icon": "", + "head_text": "UP主的推荐", + "items": [ + { + "brief": "", + "cover": "https://i0.hdslb.com/bfs/mall/mall/ef/9d/2cb00b3649bcb232f62b3169be95407d.png", + "id": "901140704120020992", + "jump_desc": "去看看", + "jump_url": "https://mall.bilibili.com/neul-next/detailuniversal/detail.html?isMerchant=1\u0026page=detailuniversal_detail\u0026saleType=0\u0026itemsId=10406556\u0026loadingShow=1\u0026noTitleBar=1\u0026msource=cps_Mdynamic_36081646\u0026from=\u0026contentId=\u0026track_id=__BGMT__", + "name": "天羽川 洛天依 短袖水手服纯色裙长短袜套装", + "price": "¥49" + } + ], + "jump_url": "" + }, + "type": "ADDITIONAL_TYPE_GOODS" + }, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "​互动抽奖", + "rid": "301330", + "text": "​互动抽奖", + "type": "RICH_TEXT_NODE_TYPE_LOTTERY" + }, + { + "orig_text": "洛天依X", + "text": "洛天依X", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@天羽川JK ", + "rid": "394187581", + "text": "@天羽川JK ", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "联名水手服\u0026长短袜套装 新品预售即将开启啦!\n转发关注天依,揪5位小伙伴送出联名款长短袜1双~", + "text": "联名水手服\u0026长短袜套装 新品预售即将开启啦!\n转发关注天依,揪5位小伙伴送出联名款长短袜1双~", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "http://i0.hdslb.com/bfs/emote/9826fb4f77944387767a37552143fbec40159fa5.png", + "size": 2, + "text": "[洛天依_礼物]", + "type": 3 + }, + "orig_text": "[洛天依_礼物]", + "text": "[洛天依_礼物]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "orig_text": "\n\n❀联名服饰\n-洛天依联名款水手服\n-洛天依还原款长短袜\n\n❀预售时间\n6月8日20:00 起\n\n日常\u0026cos皆宜,大家有没有发现结合了天依的哪些元素呀?", + "text": "\n\n❀联名服饰\n-洛天依联名款水手服\n-洛天依还原款长短袜\n\n❀预售时间\n6月8日20:00 起\n\n日常\u0026cos皆宜,大家有没有发现结合了天依的哪些元素呀?", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/8034b3cb55370d19b1683eb38e7747c5c6c5dba6.png", + "size": 2, + "text": "[洛天依蝶变_星星眼]", + "type": 3 + }, + "orig_text": "[洛天依蝶变_星星眼]", + "text": "[洛天依蝶变_星星眼]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "orig_text": "\n", + "text": "\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "​互动抽奖洛天依X@天羽川JK 联名水手服\u0026长短袜套装 新品预售即将开启啦!\n转发关注天依,揪5位小伙伴送出联名款长短袜1双~[洛天依_礼物]\n\n❀联名服饰\n-洛天依联名款水手服\n-洛天依还原款长短袜\n\n❀预售时间\n6月8日20:00 起\n\n日常\u0026cos皆宜,大家有没有发现结合了天依的哪些元素呀?[洛天依蝶变_星星眼]\n" + }, + "major": { + "draw": { + "id": 318324614, + "items": [ + { + "height": 1280, + "size": 662.59, + "src": "http://i0.hdslb.com/bfs/new_dyn/1f23b61786eadb8c3e3f4c137730715036081646.jpg", + "tags": [], + "width": 904 + }, + { + "height": 1280, + "size": 614.83, + "src": "http://i0.hdslb.com/bfs/new_dyn/7d679216308bb7c65aeba38b4eafdd8936081646.jpg", + "tags": [], + "width": 904 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": { + "id": 1156147, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1156147\u0026topic_name=%E5%A4%A9%E4%BE%9D%E7%9A%84%E5%91%A8%E8%BE%B9", + "name": "天依的周边" + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + }, + { + "basic": { + "comment_id_str": "325807840", + "comment_type": 11, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "325807840" + }, + "id_str": "966677390370537527", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "485703766" + }, + "face": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/485703766/dynamic", + "label": "", + "mid": 485703766, + "name": "英伟达GeForce", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "13小时前", + "pub_ts": 1723910520, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 2000563200000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png", + "label_theme": "ten_annual_vip", + "path": "", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "直面天命,还有 2 天!\nRTX. ON!\n\n投稿来自于:Bilibili", + "text": "直面天命,还有 2 天!\nRTX. ON!\n\n投稿来自于:Bilibili", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@祗殁", + "rid": "12299496", + "text": "@祗殁", + "type": "RICH_TEXT_NODE_TYPE_AT" + } + ], + "text": "直面天命,还有 2 天!\nRTX. ON!\n\n投稿来自于:Bilibili@祗殁" + }, + "major": { + "draw": { + "id": 325807840, + "items": [ + { + "height": 1073, + "size": 66.29785, + "src": "https://i0.hdslb.com/bfs/new_dyn/b47b271135c7c496923d76c6b794e596485703766.png", + "tags": [], + "width": 1213 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 105, + "forbidden": false + }, + "forward": { + "count": 7, + "forbidden": false + }, + "like": { + "count": 872, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + { + "basic": { + "comment_id_str": "1606450518", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "1606450518" + }, + "id_str": "966647978674618373", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/bb23fb77a033759a145f8eda7b5e3a15386f637c.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "1503187" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/archive/e495de36cab75f9a610fb6f2d0ba29a87b794cc6.png", + "fan": { + "color": "#BFC8D2", + "color_format": { + "colors": [ + "#B8C7D0FF", + "#A2A7B0FF" + ], + "end_point": "100,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": true, + "num_prefix": "NO.", + "num_str": "002484", + "number": 2484 + }, + "id": 66898, + "jump_url": "https://www.bilibili.com/h5/mall/digital-card/home?act_id=108\u0026from=post\u0026f_source=garb\u0026-Abrowser=live\u0026hybrid_set_header=2\u0026navhide=1\u0026anchor_task=1", + "name": "BLG 信念干杯勋章", + "type": 3 + }, + "face": "https://i1.hdslb.com/bfs/face/bb23fb77a033759a145f8eda7b5e3a15386f637c.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/1503187/dynamic", + "label": "", + "mid": 1503187, + "name": "和谐号舰长", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "昨天 22:07", + "pub_ts": 1723903670, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1732204800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "1606450518", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV152421Z7bV", + "cover": "http://i1.hdslb.com/bfs/archive/e87786447779ff1a4fb2d941a3321f9750a65300.jpg", + "desc": "多来点这样的更新,太快乐了", + "disable_preview": 0, + "duration_text": "03:39", + "jump_url": "//www.bilibili.com/video/BV152421Z7bV/", + "stat": { + "danmaku": "406", + "play": "6.6万" + }, + "title": "官方:矿车怎么就不能是飞船?", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "吉吉国民开水儿:", + "rid": "43514654", + "text": "吉吉国民开水儿:", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "致敬传奇宰人航空大师张泰玩", + "text": "致敬传奇宰人航空大师张泰玩", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "致敬传奇宰人航空大师张泰玩" + }, + "type": 1 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 218, + "forbidden": false + }, + "forward": { + "count": 15, + "forbidden": false + }, + "like": { + "count": 5694, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "1506427569", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "1506427569" + }, + "id_str": "966629209415876628", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "407045223" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "fan": { + "color": "", + "color_format": null, + "is_fan": false, + "num_prefix": "", + "num_str": "", + "number": 0 + }, + "id": 28, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=407045223\u0026native.theme=1\u0026navhide=1", + "name": "2233娘", + "type": 1 + }, + "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/407045223/dynamic", + "label": "", + "mid": 407045223, + "name": "二次元的中科院物理所", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "昨天 20:55", + "pub_ts": 1723899301, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1745769600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "光是什么?光是我们看到的五彩斑斓的世界,光是自然界能量的来源,光是一种电磁波。我们利用光可以做些什么?如何收集太阳的能量?如何产生光?让我们在本集课程中寻找这些问题的答案~ 错过直播的小伙伴可以来这里补课~", + "text": "光是什么?光是我们看到的五彩斑斓的世界,光是自然界能量的来源,光是一种电磁波。我们利用光可以做些什么?如何收集太阳的能量?如何产生光?让我们在本集课程中寻找这些问题的答案~ 错过直播的小伙伴可以来这里补课~", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "光是什么?光是我们看到的五彩斑斓的世界,光是自然界能量的来源,光是一种电磁波。我们利用光可以做些什么?如何收集太阳的能量?如何产生光?让我们在本集课程中寻找这些问题的答案~ 错过直播的小伙伴可以来这里补课~" + }, + "major": { + "archive": { + "aid": "1506427569", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1uS42197b5", + "cover": "http://i1.hdslb.com/bfs/archive/e13db3349cdc91a00041be9730bbbe42c3e8df55.jpg", + "desc": "光是什么?光是我们看到的五彩斑斓的世界,光是自然界能量的来源,光是一种电磁波。我们利用光可以做些什么?如何收集太阳的能量?如何产生光?让我们在本集课程中寻找这些问题的答案~", + "disable_preview": 0, + "duration_text": "44:45", + "jump_url": "//www.bilibili.com/video/BV1uS42197b5/", + "stat": { + "danmaku": "1", + "play": "3364" + }, + "title": "光照下多姿多彩的世界——光化学和我们的生活【中国科学院科学公开课S06E15】", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": { + "id": 1073121, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1073121\u0026topic_name=%E4%B8%AD%E5%9B%BD%E7%A7%91%E5%AD%A6%E9%99%A2%E7%A7%91%E5%AD%A6%E5%85%AC%E5%BC%80%E8%AF%BE", + "name": "中国科学院科学公开课" + } + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 3, + "forbidden": false + }, + "forward": { + "count": 2, + "forbidden": false + }, + "like": { + "count": 741, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "325765582", + "comment_type": 11, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "325765582" + }, + "id_str": "966583356402696224", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "946974" + }, + "face": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/946974/dynamic", + "label": "", + "mid": 946974, + "name": "影视飓风", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "昨天 17:57", + "pub_ts": 1723888625, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1975248000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png", + "label_theme": "ten_annual_vip", + "path": "", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": { + "reserve": { + "button": { + "check": { + "icon_url": "", + "text": "已预约" + }, + "status": 1, + "type": 2, + "uncheck": { + "icon_url": "https://i0.hdslb.com/bfs/album/1d6af68e116985828780dd843ef435ccd6307e63.png", + "text": "预约" + } + }, + "desc1": { + "style": 0, + "text": "今天 20:00 直播" + }, + "desc2": { + "style": 0, + "text": "4153人预约", + "visible": true + }, + "jump_url": "", + "reserve_total": 4153, + "rid": 4003487, + "state": 0, + "stype": 2, + "title": "直播预约:飓风商店夏促来了!", + "up_mid": 946974 + }, + "type": "ADDITIONAL_TYPE_RESERVE" + }, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "飓风商店夏季活动来啦!\n8月18日周日晚20:00,直播间每15分钟天选抽送【热升华键帽】!\n\n👇新品看这边\n呼声超高的mini托特挂件、防泼水拎包、新版车贴,首发好价!\n👇福利看这边\n经典热销款全场9折,夏秋两季可穿,硬件同享折扣!\n\n总之,记得预约!", + "text": "飓风商店夏季活动来啦!\n8月18日周日晚20:00,直播间每15分钟天选抽送【热升华键帽】!\n\n👇新品看这边\n呼声超高的mini托特挂件、防泼水拎包、新版车贴,首发好价!\n👇福利看这边\n经典热销款全场9折,夏秋两季可穿,硬件同享折扣!\n\n总之,记得预约!", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "飓风商店夏季活动来啦!\n8月18日周日晚20:00,直播间每15分钟天选抽送【热升华键帽】!\n\n👇新品看这边\n呼声超高的mini托特挂件、防泼水拎包、新版车贴,首发好价!\n👇福利看这边\n经典热销款全场9折,夏秋两季可穿,硬件同享折扣!\n\n总之,记得预约!" + }, + "major": { + "draw": { + "id": 325765582, + "items": [ + { + "height": 9829, + "size": 5198.785, + "src": "http://i0.hdslb.com/bfs/new_dyn/9d690134c84c03f6bacf83cf4d21bd73946974.jpg", + "tags": [], + "width": 2251 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 3104, + "forbidden": false + }, + "forward": { + "count": 154, + "forbidden": false + }, + "like": { + "count": 4703, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + { + "basic": { + "comment_id_str": "325753910", + "comment_type": 11, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "325753910" + }, + "id_str": "966552037496979456", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_animation": { + "webp_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "686127" + }, + "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/686127/dynamic", + "label": "", + "mid": 686127, + "name": "籽岷", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png", + "image_enhance_frame": "", + "n_pid": 2066, + "name": "百年大会员", + "pid": 2066 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "昨天 15:55", + "pub_ts": 1723881333, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 4845196800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/c16005a5b39164b3536cbd45618a5edd597a1c51.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/Pzrd8zmpQD.png", + "label_theme": "hundred_annual_vip", + "path": "", + "text": "百年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": { + "type": "ADDITIONAL_TYPE_UPOWER_LOTTERY", + "upower_lottery": { + "button": { + "jump_style": { + "icon_url": "", + "text": "6元充电" + }, + "jump_url": "https://www.bilibili.com/h5/upower/index?mid=686127\u0026default_level=10\u0026levels=10\u0026navhide=1\u0026lotteryId=313280\u0026businessId=966552037496979456\u0026prePage=lotteryCard", + "type": 1 + }, + "desc": { + "jump_url": "https://www.bilibili.com/h5/lottery/result?business_id=966552037496979456\u0026business_type=12", + "style": 1, + "text": "【籽岷定制手偶】*10份" + }, + "hint": { + "style": 0, + "text": "加入当前UP主的「6元档包月充电」即可参与" + }, + "jump_url": "https://www.bilibili.com/h5/lottery/result?business_id=966552037496979456\u0026business_type=12", + "rid": 313280, + "state": 0, + "title": "石粒专属抽奖", + "up_mid": 686127, + "upower_action_state": 2, + "upower_level": 10 + } + }, + "desc": { + "rich_text_nodes": [ + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/garb/ebeae1235fa9397e6e5598ce1e5e2955bb345a8b.png", + "size": 2, + "text": "[UPOWER_686127_闪亮登场]", + "type": 11 + }, + "orig_text": "[UPOWER_686127_闪亮登场]", + "text": "[UPOWER_686127_闪亮登场]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "orig_text": "今天给大家奉上一波新福利,抽10人(籽岷定制手偶)~\n感谢一直为我包月充电的观众们~\n活动开奖时间为8月21日23点59分,大家快来抽奖吧~", + "text": "今天给大家奉上一波新福利,抽10人(籽岷定制手偶)~\n感谢一直为我包月充电的观众们~\n活动开奖时间为8月21日23点59分,大家快来抽奖吧~", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "[UPOWER_686127_闪亮登场]今天给大家奉上一波新福利,抽10人(籽岷定制手偶)~\n感谢一直为我包月充电的观众们~\n活动开奖时间为8月21日23点59分,大家快来抽奖吧~" + }, + "major": { + "draw": { + "id": 325753910, + "items": [ + { + "height": 800, + "size": 596.8096, + "src": "http://i0.hdslb.com/bfs/new_dyn/1b03b7888b105765d985f3093e5d6e4a686127.png", + "tags": [], + "width": 800 + }, + { + "height": 800, + "size": 393.75098, + "src": "http://i0.hdslb.com/bfs/new_dyn/b69ee39531bf8864471ec9fbc7de4402686127.png", + "tags": [], + "width": 800 + }, + { + "height": 800, + "size": 364.8711, + "src": "http://i0.hdslb.com/bfs/new_dyn/0c3fb5268abe60023b0053902bccde66686127.png", + "tags": [], + "width": 800 + }, + { + "height": 800, + "size": 198.65234, + "src": "http://i0.hdslb.com/bfs/new_dyn/693a40f83d2ac6a4952c9541365e1265686127.png", + "tags": [], + "width": 800 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": { + "id": 1006239, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1006239\u0026topic_name=%E7%B1%BD%E5%B2%B7%E5%93%81%E9%89%B4%E5%9B%A2", + "name": "籽岷品鉴团" + } + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 28, + "forbidden": false + }, + "forward": { + "count": 2, + "forbidden": false + }, + "like": { + "count": 2686, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + { + "basic": { + "comment_id_str": "1456450441", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "1456450441" + }, + "id_str": "966513421411418114", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/94183796acd85f2e80f3dca740bc1c3d5cae6410.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "3493131246897478" + }, + "face": "https://i1.hdslb.com/bfs/face/94183796acd85f2e80f3dca740bc1c3d5cae6410.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/3493131246897478/dynamic", + "label": "", + "mid": 3493131246897478, + "name": "电解碳酸钠", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "昨天 13:25", + "pub_ts": 1723872342, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1744732800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "给脚专用的“按键” 我觉得他不应该这么贵", + "text": "给脚专用的“按键” 我觉得他不应该这么贵", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "给脚专用的“按键” 我觉得他不应该这么贵" + }, + "major": { + "archive": { + "aid": "1456450441", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1Yi421a7FC", + "cover": "http://i1.hdslb.com/bfs/archive/b56700e0a1d28ecff2ff135a7cc51e9b09cace79.jpg", + "desc": "用到的配件:\n·带有热插拔轴体功能的任何全新\u0026二手键盘 只要功能正常即可\n·追求极致性价比的 可以直接买剪线键盘进行改造\n·TFS-1脚踏脚踩开关(我买的3.2一个)\n要注意这些脚踏开关有可能是3线 分为常闭和常开\n对于这个型号的开关 我接的是红线+白线 为踩下触发\n·焊油(推荐针管式单手操作)", + "disable_preview": 0, + "duration_text": "06:01", + "jump_url": "//www.bilibili.com/video/BV1Yi421a7FC/", + "stat": { + "danmaku": "149", + "play": "2.7万" + }, + "title": "商家别看!脚踩键盘DIY超值方案?市场售价凭啥那么贵!", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 161, + "forbidden": false + }, + "forward": { + "count": 17, + "forbidden": false + }, + "like": { + "count": 2699, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "966495069003579398", + "comment_type": 17, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "966495069003579398" + }, + "id_str": "966495069003579398", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "946974" + }, + "face": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/946974/dynamic", + "label": "", + "mid": 946974, + "name": "影视飓风", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "昨天 12:14", + "pub_ts": 1723868069, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1975248000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png", + "label_theme": "ten_annual_vip", + "path": "", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "周末啦,希望大家喜欢这期科普分享!我们的官网也加上了电影节的科普和信息汇总,欢迎大家取用~", + "text": "周末啦,希望大家喜欢这期科普分享!我们的官网也加上了电影节的科普和信息汇总,欢迎大家取用~", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "周末啦,希望大家喜欢这期科普分享!我们的官网也加上了电影节的科普和信息汇总,欢迎大家取用~" + }, + "major": null, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 101, + "forbidden": false + }, + "forward": { + "count": 7, + "forbidden": false + }, + "like": { + "count": 5247, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "966197633939931139", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "946974" + }, + "face": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/946974/dynamic", + "label": "", + "mid": 946974, + "name": "影视飓风", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_time": "", + "pub_ts": 1723798817, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1975248000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png", + "label_theme": "ten_annual_vip", + "path": "", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "挺久没有更新的看懂电影系列!", + "text": "挺久没有更新的看懂电影系列!", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "挺久没有更新的看懂电影系列!" + }, + "major": { + "archive": { + "aid": "1506437840", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV13S42197ja", + "cover": "http://i1.hdslb.com/bfs/archive/50d4705b2d804a76f3c19af269dd7804479aa94e.jpg", + "desc": "国内外总共有3000多个大大小小的电影节。那么,短片可以参加电影节吗?什么时候投递获奖概率才大一些?这次我们想和你分享一些投递和参加电影节的门道。我们还整理了一份有关电影节的科普文档,可以来我们的官网看看:https://filmfestival.ysjf.com/。\n如果你喜欢这期视频,请多多支持我们,并将视频分享给其他朋友一起看看!", + "disable_preview": 0, + "duration_text": "10:55", + "jump_url": "//www.bilibili.com/video/BV13S42197ja/", + "stat": { + "danmaku": "2067", + "play": "64.1万" + }, + "title": "全世界3000多个电影节,都在办些啥?", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + }, + { + "basic": { + "comment_id_str": "37185041", + "comment_type": 12, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "37185041" + }, + "id_str": "966484129969340422", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "407045223" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "fan": { + "color": "", + "color_format": null, + "is_fan": false, + "num_prefix": "", + "num_str": "", + "number": 0 + }, + "id": 28, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=407045223\u0026native.theme=1\u0026navhide=1", + "name": "2233娘", + "type": 1 + }, + "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/407045223/dynamic", + "label": "", + "mid": 407045223, + "name": "二次元的中科院物理所", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了文章", + "pub_location_text": "", + "pub_time": "昨天 11:32", + "pub_ts": 1723865522, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1745769600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "article": { + "covers": [ + "https://i0.hdslb.com/bfs/article/708ab38ac38df8fe7851a63c0258fa64407045223.jpg" + ], + "desc": "经历过密码解锁和手势解锁后 真感慨指纹解锁是天才的创造 可惜遇到湿手油手经常失效 甚至擦干了还是这样 这是为什么呢问答导航Q1 鸡蛋在母鸡体内有气室吗?Q2 为什么弹簧是螺旋型的?Q3 闪电为什么总是自上而下,有没有自下而上的闪电呢?Q4 当一束光使电子发生了能级跃迁,原先的光子去哪儿了,消失了吗?Q5 为什么有茶叶的水在转时茶叶会趋向中间而不是两边呢?Q6 为什么塑料相比于其它物质,更容易起静电?Q7 为什么会有空集?空集的存在有什么物理意义? Q8 为什么有纹理的木擦了木蜡油之后会纹理变深,更容易被看", + "id": 37185041, + "jump_url": "//www.bilibili.com/read/cv37185041/", + "label": "16.3万阅读", + "title": "手指沾水擦干但是指纹识别还是失败,这是什么原因?| No.422" + }, + "type": "MAJOR_TYPE_ARTICLE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 23, + "forbidden": false + }, + "forward": { + "count": 7, + "forbidden": false + }, + "like": { + "count": 727, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_ARTICLE", + "visible": true + }, + { + "basic": { + "comment_id_str": "966475883631083553", + "comment_type": 17, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "966475883631083553" + }, + "id_str": "966475883631083553", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "233114659" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/garb/bb140043341137b879e957d09b649ce7c3257820.png", + "fan": { + "color": "#903AC2", + "color_format": { + "colors": [ + "#903AC2FF", + "#903AC2FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": true, + "num_prefix": "NO.", + "num_str": "000001", + "number": 1 + }, + "id": 1706163888001, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=1706163888001\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=233114659\u0026native.theme=1\u0026navhide=1", + "name": "龙腾啾跃-动态卡片粉丝", + "type": 3 + }, + "face": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/233114659/dynamic", + "label": "", + "mid": 233114659, + "name": "碧蓝航线", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png", + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp", + "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/3052b412defbbc7704e887fefde8de539e8027c5.png", + "n_pid": 1987, + "name": "碧蓝航线2020", + "pid": 1987 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "昨天 11:00", + "pub_ts": 1723863602, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1729526400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "恭喜", + "text": "恭喜", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@两百斤的橘猫猫0w0", + "rid": "8391364", + "text": "@两百斤的橘猫猫0w0", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "@一位隐身的Z23厨", + "rid": "382382091", + "text": "@一位隐身的Z23厨", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "@默涛默随波", + "rid": "230373473", + "text": "@默涛默随波", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "等8位同学中奖,已私信通知,详情请点击抽奖查看。", + "text": "等8位同学中奖,已私信通知,详情请点击抽奖查看。", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "恭喜@两百斤的橘猫猫0w0@一位隐身的Z23厨@默涛默随波等8位同学中奖,已私信通知,详情请点击抽奖查看。" + }, + "major": null, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 227, + "forbidden": false + }, + "forward": { + "count": 20, + "forbidden": false + }, + "like": { + "count": 3126, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "963893770559946786", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "233114659" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/garb/bb140043341137b879e957d09b649ce7c3257820.png", + "fan": { + "color": "#903AC2", + "color_format": { + "colors": [ + "#903AC2FF", + "#903AC2FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": true, + "num_prefix": "NO.", + "num_str": "000001", + "number": 1 + }, + "id": 1706163888001, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=1706163888001\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=233114659\u0026native.theme=1\u0026navhide=1", + "name": "龙腾啾跃-动态卡片粉丝", + "type": 3 + }, + "face": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/233114659/dynamic", + "label": "", + "mid": 233114659, + "name": "碧蓝航线", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png", + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp", + "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/3052b412defbbc7704e887fefde8de539e8027c5.png", + "n_pid": 1987, + "name": "碧蓝航线2020", + "pid": 1987 + }, + "pub_action": "", + "pub_time": "", + "pub_ts": 1723262407, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1729526400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": { + "common": { + "button": { + "jump_style": { + "icon_url": "", + "text": "进入" + }, + "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005", + "type": 1 + }, + "cover": "https://i0.hdslb.com/bfs/game/b141a7690c226a0eae66518c713d3af62613b21d.png", + "desc1": "养成", + "desc2": "指挥官,欢迎回港", + "head_text": "相关游戏", + "id_str": "97", + "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005", + "style": 1, + "sub_type": "game", + "title": "碧蓝航线" + }, + "type": "ADDITIONAL_TYPE_COMMON" + }, + "desc": { + "rich_text_nodes": [ + { + "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF", + "orig_text": "#碧蓝航线#", + "text": "#碧蓝航线#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": " ", + "text": " ", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "互动抽奖", + "rid": "312103", + "text": "互动抽奖", + "type": "RICH_TEXT_NODE_TYPE_LOTTERY" + }, + { + "orig_text": " \n兰夜放灯祈相守,\n纤手弄糕思今宵。\n\n关注", + "text": " \n兰夜放灯祈相守,\n纤手弄糕思今宵。\n\n关注", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@碧蓝航线", + "rid": "233114659", + "text": "@碧蓝航线", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 并转发该内容,我们将于8月17日抽取3位指挥官送出【JUUs时间 花园Q版手办】,抽取5位指挥官送出【心智魔方-系列浴球(随机一款)】。\n\n金风玉露,值此良宵,愿与君共度~", + "text": " 并转发该内容,我们将于8月17日抽取3位指挥官送出【JUUs时间 花园Q版手办】,抽取5位指挥官送出【心智魔方-系列浴球(随机一款)】。\n\n金风玉露,值此良宵,愿与君共度~", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "#碧蓝航线# 互动抽奖 \n兰夜放灯祈相守,\n纤手弄糕思今宵。\n\n关注@碧蓝航线 并转发该内容,我们将于8月17日抽取3位指挥官送出【JUUs时间 花园Q版手办】,抽取5位指挥官送出【心智魔方-系列浴球(随机一款)】。\n\n金风玉露,值此良宵,愿与君共度~" + }, + "major": { + "draw": { + "id": 324938558, + "items": [ + { + "height": 3038, + "size": 2025.2646, + "src": "http://i0.hdslb.com/bfs/new_dyn/b0068d1603aee2849ca46a58642fa99e233114659.jpg", + "tags": [], + "width": 5400 + }, + { + "height": 5063, + "size": 7377.1143, + "src": "http://i0.hdslb.com/bfs/new_dyn/c047aafcf90a48b578a63c3e1b86c1de233114659.jpg", + "tags": [], + "width": 9000 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": null + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + }, + { + "basic": { + "comment_id_str": "1456253104", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "1456253104" + }, + "id_str": "966374603744083976", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_animation": { + "webp_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "686127" + }, + "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/686127/dynamic", + "label": "", + "mid": 686127, + "name": "籽岷", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png", + "image_enhance_frame": "", + "n_pid": 2066, + "name": "百年大会员", + "pid": 2066 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "昨天 04:27", + "pub_ts": 1723840021, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 4845196800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/c16005a5b39164b3536cbd45618a5edd597a1c51.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/Pzrd8zmpQD.png", + "label_theme": "hundred_annual_vip", + "path": "", + "text": "百年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "1456253104", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1ai421h7nT", + "cover": "http://i1.hdslb.com/bfs/archive/0245f30593e2963b883cd5953881034ad033fbd5.jpg", + "desc": "https://www.minecraft.net/en-us/article/minecraft-snapshot-24w33a", + "disable_preview": 0, + "duration_text": "16:22", + "jump_url": "//www.bilibili.com/video/BV1ai421h7nT/", + "stat": { + "danmaku": "2149", + "play": "24.5万" + }, + "title": "收纳袋、红石、矿车大改 我的世界新版本介绍 1.21.2 24w33a", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": { + "id": 1028161, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1028161\u0026topic_name=%E6%95%B4%E7%82%B9%E7%94%B5%E5%AD%90%E6%A6%A8%E8%8F%9C", + "name": "整点电子榨菜" + } + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "名字永远是个谜:", + "rid": "2022349482", + "text": "名字永远是个谜:", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "我们轨道交通圈有福了啊啊啊啊啊啊啊!", + "text": "我们轨道交通圈有福了啊啊啊啊啊啊啊!", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "我们轨道交通圈有福了啊啊啊啊啊啊啊!" + }, + "type": 1 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 921, + "forbidden": false + }, + "forward": { + "count": 51, + "forbidden": false + }, + "like": { + "count": 23138, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "325694432", + "comment_type": 11, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "325694432" + }, + "id_str": "966306597269667840", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "485703766" + }, + "face": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/485703766/dynamic", + "label": "", + "mid": 485703766, + "name": "英伟达GeForce", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "昨天 00:03", + "pub_ts": 1723824187, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 2000563200000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png", + "label_theme": "ten_annual_vip", + "path": "", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "直面天命,还有 3 天!\nRTX. ON!\n\n投稿来自于:Bilibili", + "text": "直面天命,还有 3 天!\nRTX. ON!\n\n投稿来自于:Bilibili", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@祗殁 ", + "rid": "12299496", + "text": "@祗殁 ", + "type": "RICH_TEXT_NODE_TYPE_AT" + } + ], + "text": "直面天命,还有 3 天!\nRTX. ON!\n\n投稿来自于:Bilibili@祗殁 " + }, + "major": { + "draw": { + "id": 325694432, + "items": [ + { + "height": 1280, + "size": 59.246094, + "src": "http://i0.hdslb.com/bfs/new_dyn/2e42c52d5e1383fe443f0984a41a9624485703766.jpg", + "tags": [], + "width": 1282 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 115, + "forbidden": false + }, + "forward": { + "count": 3, + "forbidden": false + }, + "like": { + "count": 876, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + { + "basic": { + "comment_id_str": "325690655", + "comment_type": 11, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "325690655" + }, + "id_str": "966298866306515029", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "233114659" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/garb/bb140043341137b879e957d09b649ce7c3257820.png", + "fan": { + "color": "#903AC2", + "color_format": { + "colors": [ + "#903AC2FF", + "#903AC2FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": true, + "num_prefix": "NO.", + "num_str": "000001", + "number": 1 + }, + "id": 1706163888001, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=1706163888001\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=233114659\u0026native.theme=1\u0026navhide=1", + "name": "龙腾啾跃-动态卡片粉丝", + "type": 3 + }, + "face": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/233114659/dynamic", + "label": "", + "mid": 233114659, + "name": "碧蓝航线", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png", + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp", + "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/3052b412defbbc7704e887fefde8de539e8027c5.png", + "n_pid": 1987, + "name": "碧蓝航线2020", + "pid": 1987 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "2天前", + "pub_ts": 1723822387, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1729526400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": { + "common": { + "button": { + "jump_style": { + "icon_url": "", + "text": "进入" + }, + "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005", + "type": 1 + }, + "cover": "https://i0.hdslb.com/bfs/game/b141a7690c226a0eae66518c713d3af62613b21d.png", + "desc1": "养成", + "desc2": "指挥官,欢迎回港", + "head_text": "相关游戏", + "id_str": "97", + "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005", + "style": 1, + "sub_type": "game", + "title": "碧蓝航线" + }, + "type": "ADDITIONAL_TYPE_COMMON" + }, + "desc": { + "rich_text_nodes": [ + { + "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF", + "orig_text": "#碧蓝航线#", + "text": "#碧蓝航线#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": " ", + "text": " ", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF%E6%BC%AB%E5%B1%95", + "orig_text": "#碧蓝航线漫展#", + "text": "#碧蓝航线漫展#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": " ", + "text": " ", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=2024%E6%B8%AF%E5%8C%BA%E7%9B%9B%E5%A4%8F%E6%B8%85%E5%87%89%E8%8A%82", + "orig_text": "#2024港区盛夏清凉节#", + "text": "#2024港区盛夏清凉节#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": "\n◆ 「港区盛夏清凉节」长沙站·街区快闪 到达!◆ \n\n碧蓝夏日,映照专属的街景~\n街区快闪即将开启,\n与少女们一同踏上这场特别的城市漫步之旅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。", + "text": "\n◆ 「港区盛夏清凉节」长沙站·街区快闪 到达!◆ \n\n碧蓝夏日,映照专属的街景~\n街区快闪即将开启,\n与少女们一同踏上这场特别的城市漫步之旅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "#碧蓝航线# #碧蓝航线漫展# #2024港区盛夏清凉节#\n◆ 「港区盛夏清凉节」长沙站·街区快闪 到达!◆ \n\n碧蓝夏日,映照专属的街景~\n街区快闪即将开启,\n与少女们一同踏上这场特别的城市漫步之旅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。" + }, + "major": { + "draw": { + "id": 325690655, + "items": [ + { + "height": 6000, + "size": 2737.6729, + "src": "http://i0.hdslb.com/bfs/new_dyn/722dc5e7eba3c3f6861b294f6bf3020c233114659.jpg", + "tags": [], + "width": 4000 + }, + { + "height": 4000, + "size": 4852.4023, + "src": "http://i0.hdslb.com/bfs/new_dyn/b04110f894184880666ee8b204000846233114659.jpg", + "tags": [], + "width": 6000 + }, + { + "height": 4000, + "size": 3941.9678, + "src": "http://i0.hdslb.com/bfs/new_dyn/8ce3c1e6f2d33a47d42f35193b9e5f55233114659.jpg", + "tags": [], + "width": 6000 + }, + { + "height": 4000, + "size": 4461.9707, + "src": "http://i0.hdslb.com/bfs/new_dyn/ab9a5bf2215f88fed6026d67d98ec901233114659.jpg", + "tags": [], + "width": 6000 + }, + { + "height": 4000, + "size": 3137.0205, + "src": "http://i0.hdslb.com/bfs/new_dyn/18e62cf8ebc7c07b99e042ac4cdeeaaa233114659.jpg", + "tags": [], + "width": 6000 + }, + { + "height": 4000, + "size": 9561.615, + "src": "http://i0.hdslb.com/bfs/new_dyn/1036f447fcbec195e717e2a5b3091a73233114659.jpg", + "tags": [], + "width": 6000 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "豌豆羹:", + "rid": "3493280973064560", + "text": "豌豆羹:", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "大帝皮肤加彩蛋!", + "text": "大帝皮肤加彩蛋!", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "大帝皮肤加彩蛋!" + }, + "type": 1 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 446, + "forbidden": false + }, + "forward": { + "count": 47, + "forbidden": false + }, + "like": { + "count": 4352, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + { + "basic": { + "comment_id_str": "966281785469042740", + "comment_type": 17, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "966281785469042740" + }, + "id_str": "966281785469042740", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "178429408" + }, + "face": "https://i1.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/178429408/dynamic", + "label": "", + "mid": 178429408, + "name": "老弟一号", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "2天前", + "pub_ts": 1723818410, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1728576000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/0DFy9BHgwE.gif", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d7e624d13d3e134251e4174a7318c19a8edbd71.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/uckjAv3Npy.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "不管怎么样,我先把香槟开了", + "text": "不管怎么样,我先把香槟开了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/bf7e00ecab02171f8461ee8cf439c73db9797748.png", + "size": 1, + "text": "[脱单doge]", + "type": 1 + }, + "orig_text": "[脱单doge]", + "text": "[脱单doge]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "orig_text": "要是褒姒,直播抽一百个爵柏电源", + "text": "要是褒姒,直播抽一百个爵柏电源", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "不管怎么样,我先把香槟开了[脱单doge]要是褒姒,直播抽一百个爵柏电源" + }, + "major": null, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "芊芊老猫的日常:", + "rid": "1284100140", + "text": "芊芊老猫的日常:", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "还是好人多啊", + "text": "还是好人多啊", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/4683fd9ffc925fa6423110979d7dcac5eda297f4.png", + "size": 1, + "text": "[OK]", + "type": 1 + }, + "orig_text": "[OK]", + "text": "[OK]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + } + ], + "text": "还是好人多啊[OK]" + }, + "type": 1 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "取消关注", + "type": "THREE_POINT_FOLLOWING" + }, + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "module_stat": { + "comment": { + "count": 156, + "forbidden": false + }, + "forward": { + "count": 1, + "forbidden": false + }, + "like": { + "count": 1367, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "966274874613956608", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/4c9095a6fc7d6ef7bf97ee1c65767f537763c60c.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "652239032" + }, + "face": "https://i2.hdslb.com/bfs/face/4c9095a6fc7d6ef7bf97ee1c65767f537763c60c.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/652239032/dynamic", + "label": "", + "mid": 652239032, + "name": "IGN中国", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_time": "", + "pub_ts": 1723816801, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "《黑神话:悟空》绝对可以说是一座中国游戏行业的里程碑,它所呈现的优秀品质对得起这四年来它背负的所有期待,这是真正意义上放在全球市场也是极具竞争力的国产游戏,而游戏科学也将在此役之后毫无疑问成为全球顶尖ARPG游戏开发商之一。", + "text": "《黑神话:悟空》绝对可以说是一座中国游戏行业的里程碑,它所呈现的优秀品质对得起这四年来它背负的所有期待,这是真正意义上放在全球市场也是极具竞争力的国产游戏,而游戏科学也将在此役之后毫无疑问成为全球顶尖ARPG游戏开发商之一。", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "《黑神话:悟空》绝对可以说是一座中国游戏行业的里程碑,它所呈现的优秀品质对得起这四年来它背负的所有期待,这是真正意义上放在全球市场也是极具竞争力的国产游戏,而游戏科学也将在此役之后毫无疑问成为全球顶尖ARPG游戏开发商之一。" + }, + "major": { + "archive": { + "aid": "1456400345", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1Ti421a7dv", + "cover": "http://i2.hdslb.com/bfs/archive/fd87a4e75738b0de1388df60f5e4ce5011b1367a.jpg", + "desc": "《黑神话:悟空》绝对可以说是一座中国游戏行业的里程碑,它所呈现的优秀品质对得起这四年来它背负的所有期待,这是真正意义上放在全球市场也是极具竞争力的国产游戏,我相信它会成为今年年度游戏的有力竞争者,而游戏科学也将在此役之后毫无疑问成为全球顶尖ARPG游戏开发商之一。", + "disable_preview": 0, + "duration_text": "10:00", + "jump_url": "//www.bilibili.com/video/BV1Ti421a7dv/", + "stat": { + "danmaku": "4.6万", + "play": "595.1万" + }, + "title": "【IGN】10分,《黑神话:悟空》评测:踏平坎坷成大道", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + } + ], + "offset": "966281785469042740", + "update_baseline": "966888011247648768", + "update_num": 5 + } +} +``` + +</details> + +## 检测是否有新动态 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all/update + +*请求方式:GET* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| - | - | - | - | - | +| type | str | 动态类型 | 不必要 | 默认为 `all` | +| update_baseline | id | 更新基线 | 必要 | 用于检测是否有新动态, 默认为上次请求 [获取全部动态列表](#获取全部动态列表) 返回的 `update_baseline`, 实测填 `0` 也可正常获取 | +| web_location | str | 333.1365 | 不必要 | | + +**JSON回复:** + +根: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| code | num | 返回值 | 0: 成功<br />-101: 账号未登录<br />-400: 请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` : + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| update_num | num | 有新动态的数量 | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all/update' \ +--data-urlencode 'update_baseline=114514' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "update_num": 9 + } +} +``` + +</details> diff --git a/docs/dynamic/atlist.md b/docs/dynamic/atlist.md new file mode 100644 index 0000000..a73734f --- /dev/null +++ b/docs/dynamic/atlist.md @@ -0,0 +1,238 @@ +# 根据关键字搜索用户 (at别人时的填充列表) + +**注意关键字不一定顺序匹配,如最后示例** + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/mention/search + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ---------- | ------ | ---------------------------------- | +| keyword | str | 搜索关键字 | 非必要 | 若无此项,则返回所有关注用户的信息 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 成功时为 `0` | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | -------- | ---------------------------------------------- | +| groups | array | 用户分组 | 根据是否关注该用户来分组,未找到用户时为空数组 | + +`groups`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 分组1 | | +| n | obj | 分组(n+1) | | +| …… | obj | …… | …… | + +`groups`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ---------------- | ------------------------ | +| group_name | str | 分组名称 | `我的关注`或`其他` | +| group_type | num | 分组类型 | 2:我的关注<br />4:其他 | +| items | array | 搜索到的用户信息 | 按照认证状态与粉丝数排序 | + +`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 用户1 | | +| n | obj | 用户(n+1) | | +| …… | obj | …… | …… | + +`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ------------ | ---------------------------------------- | +| face | str | 用户头像url | | +| fans | num | 用户粉丝数 | | +| name | str | 用户昵称 | | +| official_verify_type | num | 用户认证状态 | -1:无<br />0:个人认证<br />1:机构认证 | +| uid | str | 用户mid | | + +**示例:** + +搜索关键字为`社会易`的用户 + +```shell +curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/mention/search' \ +--data-urlencode 'keyword=社会易' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "groups": [ + { + "group_name": "我的关注", + "group_type": 2, + "items": [ + { + "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "fans": 3613, + "name": "社会易姐QwQ", + "official_verify_type": -1, + "uid": "293793435" + } + ] + }, + { + "group_name": "其他", + "group_type": 4, + "items": [ + { + "face": "https://i0.hdslb.com/bfs/face/dbc456bdec5e7a4806c9d0311d95ebcc6be674cf.jpg", + "fans": 23464, + "name": "社会易老师", + "official_verify_type": -1, + "uid": "484031754" + }, + { + "face": "https://i1.hdslb.com/bfs/face/5497859a550a017d0a51c640d232c539c2f48991.jpg", + "fans": 11, + "name": "栄禧貿易株式会社", + "official_verify_type": -1, + "uid": "4991467" + }, + { + "face": "https://i2.hdslb.com/bfs/face/311cecf9298158b8a5f47ed3e641328ab5c0cfcd.jpg", + "fans": 10, + "name": "社会李易儒", + "official_verify_type": -1, + "uid": "442101413" + }, + { + "face": "https://i2.hdslb.com/bfs/face/2dad05e4748b5e91e1ec5d3c5d4f0904a5bcdaf0.jpg", + "fans": 8, + "name": "日本国立貿易株式会社", + "official_verify_type": -1, + "uid": "3546589855484501" + }, + { + "face": "http://i0.hdslb.com/bfs/face/2ae12d7f71173baa8e00c4cfe97acb5a3de31566.jpg", + "fans": 6, + "name": "社会小伙肖子易", + "official_verify_type": -1, + "uid": "250129011" + }, + { + "face": "https://i2.hdslb.com/bfs/face/1ebb0d4aa8e2c4b532f82983503ec38b62a1820f.jpg", + "fans": 4, + "name": "社会主义接班人小易", + "official_verify_type": -1, + "uid": "486568790" + }, + { + "face": "http://i0.hdslb.com/bfs/face/dccb52f3c15ba1bb99aac3c86e9825842cc95295.jpg", + "fans": 2, + "name": "社会你易易", + "official_verify_type": -1, + "uid": "497214639" + }, + { + "face": "https://i1.hdslb.com/bfs/face/1902cc0b07ab4a5de6110f5adb2691cbf7051f2b.jpg", + "fans": 1, + "name": "社会打工不容易", + "official_verify_type": -1, + "uid": "3546742186314202" + }, + { + "face": "https://i0.hdslb.com/bfs/face/19ee1b5975969a47ba085cd1f628d86a479b9950.jpg", + "fans": 0, + "name": "社会交易", + "official_verify_type": -1, + "uid": "3493291412687622" + }, + { + "face": "https://i0.hdslb.com/bfs/face/de6afbda484e114b7cedeb621c3cbbaef7800988.jpg", + "fans": 0, + "name": "不谦易会社恐", + "official_verify_type": -1, + "uid": "1602175830" + }, + { + "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg", + "fans": 8, + "name": "社会易总", + "official_verify_type": -1, + "uid": "155817540" + }, + { + "face": "https://i0.hdslb.com/bfs/face/member/noface.jpg", + "fans": 0, + "name": "社会存在与社会易逝", + "official_verify_type": -1, + "uid": "3546578331634371" + }, + { + "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg", + "fans": 0, + "name": "社会易姐QAQ", + "official_verify_type": -1, + "uid": "1983403996" + }, + { + "face": "http://i1.hdslb.com/bfs/face/510cde8f4e3eb27aa50177d619a4200bb501797b.jpg", + "fans": 0, + "name": "社会易大佬人狠话不多", + "official_verify_type": -1, + "uid": "408471763" + }, + { + "face": "http://i1.hdslb.com/bfs/face/7324adb53362527a1bf5f20141a6ae4307011ea7.jpg", + "fans": 0, + "name": "社会易轩", + "official_verify_type": -1, + "uid": "384672256" + }, + { + "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg", + "fans": 0, + "name": "社会易哥", + "official_verify_type": -1, + "uid": "284984452" + }, + { + "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg", + "fans": 0, + "name": "社会易姐", + "official_verify_type": -1, + "uid": "249112673" + }, + { + "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg", + "fans": 0, + "name": "社会易大佬", + "official_verify_type": -1, + "uid": "167967213" + } + ] + } + ] + } +} +``` + +</details> \ No newline at end of file diff --git a/docs/dynamic/banner.md b/docs/dynamic/banner.md new file mode 100644 index 0000000..2df8329 --- /dev/null +++ b/docs/dynamic/banner.md @@ -0,0 +1,132 @@ +# 首页公告栏 + +## 动态首页公告栏 (新版) + +> https://api.bilibili.com/x/dynamic/feed/dyn/banner + +*请求方法: GET* + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| platform | number | 平台? | 不必要 | 默认为 `1`, 留空无 | +| position | string | 位置? | 不必要 | 默认为 `web动态`, 留空无 | +| web_location | string | `333.1365` | 不必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| banners | object[] | 横幅们 | 套了个娃 | + +`data.banners[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| banner_id | number | 横幅 id | 旧版接口无 | +| end_time | number | 结束时间 | UNIX 秒级时间戳 | +| img_url | string | 图片 URL | | +| link | string | 跳转链接 | | +| platform | number | 平台 | 与请求参数对应 | +| position | string | 位置 | 与请求参数对应 | +| start_time | number | 开始时间 | UNIX 秒级时间戳 | +| title | string | 标题 | | +| weight | number | 权重 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/dynamic/feed/dyn/banner?platform=1&position=web动态&web_location=333.1365' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "banners": [ + { + "banner_id": 20, + "end_time": 2056204800, + "img_url": "https://i0.hdslb.com/bfs/vc/9c699f2acbcad00197e92c401b835d2c6aba8a55.png", + "link": "https://www.bilibili.com/blackboard/activity-5zJxM3spoS.html", + "platform": 1, + "position": "web动态", + "start_time": 1582862523, + "title": "点击进入", + "weight": 1 + } + ] + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-05-01T00:21:48.81113265Z --> + +## 动态首页公告栏 (旧版) + +> https://api.vc.bilibili.com/banner_svr/v1/banner_svr/show + + +*请求方法: GET* + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| platform | number | 平台? | 不必要 | 默认为 `1` | +| position | string | 位置? | 不必要 | 默认为 `web动态` | + +**JSON 回复:** + +与 [动态首页公告栏 (新版)](#动态首页公告栏-新版) 相同, 除了少了个 `data.banners[].banner_id` + +**示例:** + +```shell +curl 'https://api.vc.bilibili.com/banner_svr/v1/banner_svr/show' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "banners": [ + { + "img_url": "https://i0.hdslb.com/bfs/vc/9c699f2acbcad00197e92c401b835d2c6aba8a55.png", + "title": "点击进入", + "link": "https://www.bilibili.com/blackboard/activity-5zJxM3spoS.html", + "platform": 1, + "weight": 1, + "position": "web动态", + "start_time": 1582862523, + "end_time": 2056204800 + } + ] + } +} +``` + +</details> diff --git a/docs/dynamic/basicInfo.md b/docs/dynamic/basicInfo.md new file mode 100644 index 0000000..b4b836a --- /dev/null +++ b/docs/dynamic/basicInfo.md @@ -0,0 +1,1581 @@ +# 动态基本信息 + +## 动态转发列表 + +> https://api.vc.bilibili.com/dynamic_repost/v1/dynamic_repost/repost_detail + +请求方式:GET + +==Attention: 转发列表总计超过550部分继续获取可能被限制。== + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| :--------: | :--: | :----: | :----: | :--: | +| dynamic_id | id | 动态id | 必要 | | +| offset | - | - | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 默认为空 | +| msg | num | 空 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------------- | ------------ | +| has_more | bool | 是否还有下一页 | 每页最多20条 | +| total | int | 总计包含 | 不超过20条 | +| _gt_ | num | 0 | 作用尚不明确 | + +`data`中的`items`对象: + +由于参数过多,这里不一一列举,请自行参阅其他文件理解。 + +**示例:** + +获取`哔哩哔哩弹幕网`的动态id为`669016644742283288`动态 + +```shell +curl -G 'https://api.vc.bilibili.com/dynamic_repost/v1/dynamic_repost/repost_detail' \ +--data-urlencode 'dynamic_id=669016644742283288' +``` + +<details> +<summary>查看响应示例</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "has_more": 0, + "total": 3, + "items": [ + { + "desc": { + "uid": 478909651, + "type": 1, + "rid": 669023160171702063, + "acl": 0, + "view": 0, + "repost": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 669023160201379864, + "timestamp": 1654607493, + "pre_dy_id": 669016644742283288, + "orig_dy_id": 669007814298959974, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 478909651, + "uname": "-牛马之玉", + "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg", + "face_nft": 0 + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "", + "level_info": { + "current_level": 2 + } + }, + "uid_type": 1, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669023160201379864", + "pre_dy_id_str": "669016644742283288", + "orig_dy_id_str": "669007814298959974", + "rid_str": "669023160171702063", + "origin": { + "uid": 392836434, + "type": 2, + "rid": 196658860, + "acl": 1024, + "view": 46111, + "repost": 1446, + "like": 0, + "dynamic_id": 669007814298959974, + "timestamp": 1654603920, + "pre_dy_id": 0, + "orig_dy_id": 0, + "uid_type": 1, + "stype": 0, + "r_type": 0, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669007814298959974", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "196658860" + }, + "previous": { + "uid": 9617619, + "type": 1, + "rid": 669016644698939384, + "acl": 1024, + "view": 1381, + "repost": 3, + "like": 0, + "dynamic_id": 669016644742283288, + "timestamp": 1654605976, + "pre_dy_id": 669007814298959974, + "orig_dy_id": 669007814298959974, + "uid_type": 1, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669016644742283288", + "pre_dy_id_str": "669007814298959974", + "orig_dy_id_str": "669007814298959974", + "rid_str": "669016644698939384" + } + }, + "card": "{ \"user\": { \"uid\": 478909651, \"uname\": \"-牛马之玉\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/member\\/noface.jpg\" }, \"item\": { \"rp_id\": 669023160171702063, \"uid\": 478909651, \"content\": \"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品...\", \"ctrl\": \"[{\\\"location\\\":2,\\\"length\\\":7,\\\"data\\\":\\\"9617619\\\",\\\"type\\\":1}]\", \"orig_dy_id\": 669007814298959974, \"pre_dy_id\": 669016644742283288, \"timestamp\": 0, \"at_uids\": [ 9617619 ], \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":4,\\\\\\\"data\\\\\\\":\\\\\\\"4\\\\\\\",\\\\\\\"type\\\\\\\":2}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"互动抽奖 【上B站,看KPL】\\\\r\\\\nKPL首届夏季赛即将来袭,6月8日15:00B站55官方直播间等你来看!你最期待哪场对决呢?更有多位明星主播陪你观赛,趣味吐槽花式解说开赛首日~\\\\r\\\\n\\\\r\\\\n55直播间马超-无双飞将皮肤助力金撒不停,赛事全程天选好礼每局掉落,观赛还能领取游戏内道具!APP端参与直播间【热议】讨论,更有机会获超多奖励。\\\\r\\\\n\\\\r\\\\nKPL赛事征稿开赛日同步上线,带#KPL激励计划#话题投稿,瓜分30万奖金~\\\\r\\\\n战火将燃,谁将勇夺开门红,让我们拭目以待! [打call]\\\\n\\\\n直播间TP:https:\\\\\\/\\\\\\/live.bilibili.com\\\\\\/55 \\\\n赛事预测:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/competition?spm_id_from=444.42.0.0 \\\\n更多比赛:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/schedule?mid=0&gid=0&tid=0&time=1639785600000&spm_id_from=444.42.0.0\\\",\\\"id\\\":196658860,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":6758,\\\"img_size\\\":4693.3251953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/d4fd33fe00c80938daf6f14641f15901bc4a0d17.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080}],\\\"pictures_count\\\":1,\\\"reply\\\":128,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1654603920},\\\"user\\\":{\\\"head_url\\\":\\\"http:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\\\",\\\"name\\\":\\\"哔哩哔哩王者荣耀赛事\\\",\\\"uid\\\":392836434,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1661097600000,\\\"label\\\":{\\\"label_theme\\\":\\\"annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"年度大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":96074}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"4\\\",\\\"length\\\":4,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"verify\\\":{\\\"aegis_enable\\\":true,\\\"asw\\\":{},\\\"cc\\\":{},\\\"csw\\\":{},\\\"dc\\\":{},\\\"gc\\\":{},\\\"ra\\\":{},\\\"sp\\\":{},\\\"sw\\\":{},\\\"ur\\\":{},\\\"verify_first\\\":true}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":96074},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 392836434, \"uname\": \"哔哩哔哩王者荣耀赛事\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\", \"face_nft\": 0 }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩王者荣耀赛事官方帐号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1661097600000, \"vipStatus\": 1, \"themeType\": 0, \"label\": { \"path\": \"\", \"text\": \"年度大会员\", \"label_theme\": \"annual_vip\", \"text_color\": \"#FFFFFF\", \"bg_style\": 1, \"bg_color\": \"#FB7299\", \"border_color\": \"\" }, \"avatar_subscript\": 1, \"nickname_color\": \"#FB7299\", \"role\": 3, \"avatar_subscript_url\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/vip\\/icon_Certification_big_member_22_3x.png\" }, \"pendant\": { \"pid\": 0, \"name\": \"\", \"image\": \"\", \"expire\": 0, \"image_enhance\": \"\", \"image_enhance_frame\": \"\" }, \"rank\": \"10000\", \"sign\": \"哔哩哔哩王者荣耀赛事官方账号\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"\":{\"at_mids\":[{\"at_type\":2,\"mid_list\":[9617619]}],\"content\":\"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品...\",\"data_type\":2,\"need_send_msg\":true,\"publisher\":478909651},\"ctrl\":[{\"data\":\"9617619\",\"length\":7,\"location\":2,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.fast_repost\",\"verify\":{\"aegis_enable\":true,\"asw\":{},\"cc\":{},\"csw\":{},\"dc\":{},\"gc\":{},\"ra\":{},\"sp\":{},\"sw\":{},\"ur\":{}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"}}", + "display": { + "origin": { + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[打call]", + "id": 510, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[打call]", + "url": "http://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "meta": { + "size": 1 + }, + "mtime": 1648834168 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + } + } + }, + { + "desc": { + "uid": 37906788, + "type": 1, + "rid": 669022472968542526, + "acl": 0, + "view": 0, + "repost": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 669022473022341136, + "timestamp": 1654607333, + "pre_dy_id": 669016644742283288, + "orig_dy_id": 669007814298959974, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 37906788, + "uname": "整天就想吃桃子", + "face": "http://i0.hdslb.com/bfs/face/388f29bb0e426d625378b99eec690775467ebb00.jpg", + "face_nft": 0 + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1712073600000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "", + "level_info": { + "current_level": 5 + } + }, + "uid_type": 1, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669022473022341136", + "pre_dy_id_str": "669016644742283288", + "orig_dy_id_str": "669007814298959974", + "rid_str": "669022472968542526", + "origin": { + "uid": 392836434, + "type": 2, + "rid": 196658860, + "acl": 1024, + "view": 46111, + "repost": 1446, + "like": 0, + "dynamic_id": 669007814298959974, + "timestamp": 1654603920, + "pre_dy_id": 0, + "orig_dy_id": 0, + "uid_type": 1, + "stype": 0, + "r_type": 0, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669007814298959974", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "196658860" + }, + "previous": { + "uid": 9617619, + "type": 1, + "rid": 669016644698939384, + "acl": 1024, + "view": 1381, + "repost": 3, + "like": 0, + "dynamic_id": 669016644742283288, + "timestamp": 1654605976, + "pre_dy_id": 669007814298959974, + "orig_dy_id": 669007814298959974, + "uid_type": 1, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669016644742283288", + "pre_dy_id_str": "669007814298959974", + "orig_dy_id_str": "669007814298959974", + "rid_str": "669016644698939384" + } + }, + "card": "{ \"user\": { \"uid\": 37906788, \"uname\": \"整天就想吃桃子\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/388f29bb0e426d625378b99eec690775467ebb00.jpg\" }, \"item\": { \"rp_id\": 669022472968542526, \"uid\": 37906788, \"content\": \"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品不定时掉...\", \"ctrl\": \"[{\\\"location\\\":2,\\\"length\\\":7,\\\"data\\\":\\\"9617619\\\",\\\"type\\\":1}]\", \"orig_dy_id\": 669007814298959974, \"pre_dy_id\": 669016644742283288, \"timestamp\": 0, \"at_uids\": [ 9617619 ], \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":4,\\\\\\\"data\\\\\\\":\\\\\\\"4\\\\\\\",\\\\\\\"type\\\\\\\":2}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"互动抽奖 【上B站,看KPL】\\\\r\\\\nKPL首届夏季赛即将来袭,6月8日15:00B站55官方直播间等你来看!你最期待哪场对决呢?更有多位明星主播陪你观赛,趣味吐槽花式解说开赛首日~\\\\r\\\\n\\\\r\\\\n55直播间马超-无双飞将皮肤助力金撒不停,赛事全程天选好礼每局掉落,观赛还能领取游戏内道具!APP端参与直播间【热议】讨论,更有机会获超多奖励。\\\\r\\\\n\\\\r\\\\nKPL赛事征稿开赛日同步上线,带#KPL激励计划#话题投稿,瓜分30万奖金~\\\\r\\\\n战火将燃,谁将勇夺开门红,让我们拭目以待! [打call]\\\\n\\\\n直播间TP:https:\\\\\\/\\\\\\/live.bilibili.com\\\\\\/55 \\\\n赛事预测:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/competition?spm_id_from=444.42.0.0 \\\\n更多比赛:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/schedule?mid=0&gid=0&tid=0&time=1639785600000&spm_id_from=444.42.0.0\\\",\\\"id\\\":196658860,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":6758,\\\"img_size\\\":4693.3251953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/d4fd33fe00c80938daf6f14641f15901bc4a0d17.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080}],\\\"pictures_count\\\":1,\\\"reply\\\":128,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1654603920},\\\"user\\\":{\\\"head_url\\\":\\\"http:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\\\",\\\"name\\\":\\\"哔哩哔哩王者荣耀赛事\\\",\\\"uid\\\":392836434,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1661097600000,\\\"label\\\":{\\\"label_theme\\\":\\\"annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"年度大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":96074}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"4\\\",\\\"length\\\":4,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"verify\\\":{\\\"aegis_enable\\\":true,\\\"asw\\\":{},\\\"cc\\\":{},\\\"csw\\\":{},\\\"dc\\\":{},\\\"gc\\\":{},\\\"ra\\\":{},\\\"sp\\\":{},\\\"sw\\\":{},\\\"ur\\\":{},\\\"verify_first\\\":true}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":96074},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 392836434, \"uname\": \"哔哩哔哩王者荣耀赛事\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\", \"face_nft\": 0 }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩王者荣耀赛事官方帐号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1661097600000, \"vipStatus\": 1, \"themeType\": 0, \"label\": { \"path\": \"\", \"text\": \"年度大会员\", \"label_theme\": \"annual_vip\", \"text_color\": \"#FFFFFF\", \"bg_style\": 1, \"bg_color\": \"#FB7299\", \"border_color\": \"\" }, \"avatar_subscript\": 1, \"nickname_color\": \"#FB7299\", \"role\": 3, \"avatar_subscript_url\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/vip\\/icon_Certification_big_member_22_3x.png\" }, \"pendant\": { \"pid\": 0, \"name\": \"\", \"image\": \"\", \"expire\": 0, \"image_enhance\": \"\", \"image_enhance_frame\": \"\" }, \"rank\": \"10000\", \"sign\": \"哔哩哔哩王者荣耀赛事官方账号\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"\":{\"at_mids\":[{\"at_type\":2,\"mid_list\":[9617619]}],\"content\":\"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品不定时掉...\",\"data_type\":2,\"need_send_msg\":true,\"publisher\":37906788},\"ctrl\":[{\"data\":\"9617619\",\"length\":7,\"location\":2,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.fast_repost\",\"verify\":{\"aegis_enable\":true,\"asw\":{},\"cc\":{},\"csw\":{},\"dc\":{},\"gc\":{},\"ra\":{},\"sp\":{},\"sw\":{},\"ur\":{}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"}}", + "display": { + "origin": { + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[打call]", + "id": 510, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[打call]", + "url": "http://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "meta": { + "size": 1 + }, + "mtime": 1648834168 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + } + } + }, + { + "desc": { + "uid": 586724890, + "type": 1, + "rid": 669019754258423810, + "acl": 0, + "view": 0, + "repost": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 669019754292314181, + "timestamp": 1654606700, + "pre_dy_id": 669016644742283288, + "orig_dy_id": 669007814298959974, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 586724890, + "uname": "雪羽枭白", + "face": "http://i1.hdslb.com/bfs/face/a270f0df9a621d6d7f05a0ff94c64bad5fcb6964.jpg", + "face_nft": 0 + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "芜湖,起飞~", + "level_info": { + "current_level": 4 + } + }, + "uid_type": 1, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669019754292314181", + "pre_dy_id_str": "669016644742283288", + "orig_dy_id_str": "669007814298959974", + "rid_str": "669019754258423810", + "origin": { + "uid": 392836434, + "type": 2, + "rid": 196658860, + "acl": 1024, + "view": 46111, + "repost": 1446, + "like": 0, + "dynamic_id": 669007814298959974, + "timestamp": 1654603920, + "pre_dy_id": 0, + "orig_dy_id": 0, + "uid_type": 1, + "stype": 0, + "r_type": 0, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669007814298959974", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "196658860" + }, + "previous": { + "uid": 9617619, + "type": 1, + "rid": 669016644698939384, + "acl": 1024, + "view": 1381, + "repost": 3, + "like": 0, + "dynamic_id": 669016644742283288, + "timestamp": 1654605976, + "pre_dy_id": 669007814298959974, + "orig_dy_id": 669007814298959974, + "uid_type": 1, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "669016644742283288", + "pre_dy_id_str": "669007814298959974", + "orig_dy_id_str": "669007814298959974", + "rid_str": "669016644698939384" + } + }, + "card": "{ \"user\": { \"uid\": 586724890, \"uname\": \"雪羽枭白\", \"face\": \"http:\\/\\/i1.hdslb.com\\/bfs\\/face\\/a270f0df9a621d6d7f05a0ff94c64bad5fcb6964.jpg\" }, \"item\": { \"rp_id\": 669019754258423810, \"uid\": 586724890, \"content\": \"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品不定时掉落,记得好好蹲守哦~明天15点,2022KPL夏季赛我们不见不散>>>网页链接\", \"ctrl\": \"[{\\\"location\\\":2,\\\"length\\\":7,\\\"data\\\":\\\"9617619\\\",\\\"type\\\":1}]\", \"orig_dy_id\": 669007814298959974, \"pre_dy_id\": 669016644742283288, \"timestamp\": 0, \"at_uids\": [ 9617619 ], \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":4,\\\\\\\"data\\\\\\\":\\\\\\\"4\\\\\\\",\\\\\\\"type\\\\\\\":2}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"互动抽奖 【上B站,看KPL】\\\\r\\\\nKPL首届夏季赛即将来袭,6月8日15:00B站55官方直播间等你来看!你最期待哪场对决呢?更有多位明星主播陪你观赛,趣味吐槽花式解说开赛首日~\\\\r\\\\n\\\\r\\\\n55直播间马超-无双飞将皮肤助力金撒不停,赛事全程天选好礼每局掉落,观赛还能领取游戏内道具!APP端参与直播间【热议】讨论,更有机会获超多奖励。\\\\r\\\\n\\\\r\\\\nKPL赛事征稿开赛日同步上线,带#KPL激励计划#话题投稿,瓜分30万奖金~\\\\r\\\\n战火将燃,谁将勇夺开门红,让我们拭目以待! [打call]\\\\n\\\\n直播间TP:https:\\\\\\/\\\\\\/live.bilibili.com\\\\\\/55 \\\\n赛事预测:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/competition?spm_id_from=444.42.0.0 \\\\n更多比赛:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/schedule?mid=0&gid=0&tid=0&time=1639785600000&spm_id_from=444.42.0.0\\\",\\\"id\\\":196658860,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":6758,\\\"img_size\\\":4693.3251953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/d4fd33fe00c80938daf6f14641f15901bc4a0d17.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080}],\\\"pictures_count\\\":1,\\\"reply\\\":128,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1654603920},\\\"user\\\":{\\\"head_url\\\":\\\"http:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\\\",\\\"name\\\":\\\"哔哩哔哩王者荣耀赛事\\\",\\\"uid\\\":392836434,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1661097600000,\\\"label\\\":{\\\"label_theme\\\":\\\"annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"年度大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":96074}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"4\\\",\\\"length\\\":4,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"verify\\\":{\\\"aegis_enable\\\":true,\\\"asw\\\":{},\\\"cc\\\":{},\\\"csw\\\":{},\\\"dc\\\":{},\\\"gc\\\":{},\\\"ra\\\":{},\\\"sp\\\":{},\\\"sw\\\":{},\\\"ur\\\":{},\\\"verify_first\\\":true}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":96074},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 392836434, \"uname\": \"哔哩哔哩王者荣耀赛事\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\", \"face_nft\": 0 }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩王者荣耀赛事官方帐号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1661097600000, \"vipStatus\": 1, \"themeType\": 0, \"label\": { \"path\": \"\", \"text\": \"年度大会员\", \"label_theme\": \"annual_vip\", \"text_color\": \"#FFFFFF\", \"bg_style\": 1, \"bg_color\": \"#FB7299\", \"border_color\": \"\" }, \"avatar_subscript\": 1, \"nickname_color\": \"#FB7299\", \"role\": 3, \"avatar_subscript_url\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/vip\\/icon_Certification_big_member_22_3x.png\" }, \"pendant\": { \"pid\": 0, \"name\": \"\", \"image\": \"\", \"expire\": 0, \"image_enhance\": \"\", \"image_enhance_frame\": \"\" }, \"rank\": \"10000\", \"sign\": \"哔哩哔哩王者荣耀赛事官方账号\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"\":{\"at_mids\":[{\"at_type\":2,\"mid_list\":[9617619]}],\"content\":\"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品不定时掉落,记得好好蹲守哦~明天15点,2022KPL夏季赛我们不见不散>>>网页链接\",\"data_type\":2,\"need_send_msg\":true,\"publisher\":586724890},\"ctrl\":[{\"data\":\"9617619\",\"length\":7,\"location\":2,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.dynamic.web\",\"verify\":{\"aegis_enable\":true,\"asw\":{},\"cc\":{},\"csw\":{},\"dc\":{},\"gc\":{},\"ra\":{},\"sp\":{},\"sw\":{},\"ur\":{}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"}}", + "display": { + "origin": { + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[打call]", + "id": 510, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[打call]", + "url": "http://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "meta": { + "size": 1 + }, + "mtime": 1648834168 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + } + } + } + ], + "_gt_": 0 + } +} +``` +</details> + + +## 动态点赞列表 + +> https://api.vc.bilibili.com/dynamic_like/v1/dynamic_like/spec_item_likes + +请求方式:GET + +==Attention: 点赞列表总计超过25K部分继续获取可能被限制。== + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------ | ------- | ---- | +|dynamic_id|int64 | 动态id | 必须 | | +|pn|int64 | 页码 | 非必须 | | +|ps|int64 | 每页数量 | 非必须 |该值不得大于20 | + +**json回复:** +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 默认为空 | +| msg | num | 空 | | + +`data`对象: + +| 字段 | 类型 | 用途 | 备注 | +| -------- | ---- | -------------- | ------------ | +|item_likes|list |点赞信息列表主体 | | +| has_more | bool | 是否还有下一页 | 每页最多20条 | +| total_count | int | 总计点赞数 | | +| _gt_ | num | 0 | 作用尚不明确 | + +`data`中的`item_likes`对象: + +由于参数过多,这里不一一列举,请自行参阅其他文件理解。 + +**示例:** + +获取`哔哩哔哩弹幕网`的动态id为`669016644742283288`动态 +```shell +curl -G 'https://api.vc.bilibili.com/dynamic_like/v1/dynamic_like/spec_item_likes' \ +--data-urlencode 'dynamic_id=669016644742283288' +``` + +<details> +<summary>查看响应示例</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "item_likes": [ + { + "uid": 660169578, + "time": 1654946013, + "face_url": "http://i0.hdslb.com/bfs/face/346ce28e99cc0a7d9cc05b0c0951957445cbcb61.jpg", + "uname": "空蓝奇观", + "user_info": { + "uid": 660169578, + "uname": "空蓝奇观", + "face": "http://i0.hdslb.com/bfs/face/346ce28e99cc0a7d9cc05b0c0951957445cbcb61.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1656604800000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "大会员", + "label_theme": "vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "", + "role": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "。。。", + "level_info": { + "current_level": 4 + } + }, + "attend": 0 + }, + { + "uid": 522318130, + "time": 1654901839, + "face_url": "http://i1.hdslb.com/bfs/face/3159660d82bf0ffc878265cd11f7bb55122848a8.jpg", + "uname": "114514号饼干机器人", + "user_info": { + "uid": 522318130, + "uname": "114514号饼干机器人", + "face": "http://i1.hdslb.com/bfs/face/3159660d82bf0ffc878265cd11f7bb55122848a8.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1655740800000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "大会员", + "label_theme": "vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "", + "role": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "", + "level_info": { + "current_level": 4 + } + }, + "attend": 0 + }, + { + "uid": 473098535, + "time": 1654874055, + "face_url": "http://i2.hdslb.com/bfs/face/ae37c4c8a7512322186eaf1c1cb170362c604215.jpg", + "uname": "花式送人头的感觉", + "user_info": { + "uid": 473098535, + "uname": "花式送人头的感觉", + "face": "http://i2.hdslb.com/bfs/face/ae37c4c8a7512322186eaf1c1cb170362c604215.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1626451200000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 32446, + "name": "EDG战队", + "image": "http://i2.hdslb.com/bfs/garb/item/422c8bd354989845bd9ed64bd00cfa1048e92580.png", + "expire": 0, + "image_enhance": "http://i2.hdslb.com/bfs/garb/item/422c8bd354989845bd9ed64bd00cfa1048e92580.png", + "image_enhance_frame": "" + }, + "sign": "", + "level_info": { + "current_level": 4 + } + }, + "attend": 0 + }, + { + "uid": 297957406, + "time": 1654870870, + "face_url": "http://i1.hdslb.com/bfs/face/c28b431177fa6faffc4b928b9506a7057f002f73.jpg", + "uname": "冷水ensq", + "user_info": { + "uid": 297957406, + "uname": "冷水ensq", + "face": "http://i1.hdslb.com/bfs/face/c28b431177fa6faffc4b928b9506a7057f002f73.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1657036800000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "这个人很神秘,只写了这么点东西", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 384080149, + "time": 1654869742, + "face_url": "http://i1.hdslb.com/bfs/face/74efb9ca3fc68679cb3ddbf331ceffc246f13929.jpg", + "uname": "嵇獬", + "user_info": { + "uid": 384080149, + "uname": "嵇獬", + "face": "http://i1.hdslb.com/bfs/face/74efb9ca3fc68679cb3ddbf331ceffc246f13929.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1583942400000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "这个人很懒,也不知道写什么\n我会一直做自己", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 666484726, + "time": 1654867375, + "face_url": "http://i1.hdslb.com/bfs/face/8e7c02c5d98d8ee52d0643227aed59b4fca1420d.jpg", + "uname": "未未成年累月", + "user_info": { + "uid": 666484726, + "uname": "未未成年累月", + "face": "http://i1.hdslb.com/bfs/face/8e7c02c5d98d8ee52d0643227aed59b4fca1420d.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1626624000000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "", + "level_info": { + "current_level": 3 + } + }, + "attend": 0 + }, + { + "uid": 298557818, + "time": 1654865058, + "face_url": "http://i2.hdslb.com/bfs/face/b3bea3c029e4a35788625228a8ffbcec6c00eaea.jpg", + "uname": "爱吃星河的饼干", + "user_info": { + "uid": 298557818, + "uname": "爱吃星河的饼干", + "face": "http://i2.hdslb.com/bfs/face/b3bea3c029e4a35788625228a8ffbcec6c00eaea.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1603209600000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "规矩,既是束缚,也是保护。", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 431901641, + "time": 1654845296, + "face_url": "http://i2.hdslb.com/bfs/face/88bf1a1c0cbbdf39032fa766e0b2324716b5315e.jpg", + "uname": "水粉墨殇", + "user_info": { + "uid": 431901641, + "uname": "水粉墨殇", + "face": "http://i2.hdslb.com/bfs/face/88bf1a1c0cbbdf39032fa766e0b2324716b5315e.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1655740800000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 5305, + "name": "明日方舟音律系列", + "image": "http://i2.hdslb.com/bfs/garb/item/615a1653281141ddf64cbb98c792ddaee78f7f40.png", + "expire": 0, + "image_enhance": "http://i2.hdslb.com/bfs/garb/item/516ecdf2d495a62f1bac31497c831b711823140c.webp", + "image_enhance_frame": "http://i2.hdslb.com/bfs/garb/item/c0751afbf950373c260254d02768eabf30ff3906.png" + }, + "sign": "", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 670417135, + "time": 1654833667, + "face_url": "http://i1.hdslb.com/bfs/face/f8fddf339016be034736c45714b52fbb148d5252.jpg", + "uname": "阿布不喜欢我", + "user_info": { + "uid": 670417135, + "uname": "阿布不喜欢我", + "face": "http://i1.hdslb.com/bfs/face/f8fddf339016be034736c45714b52fbb148d5252.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1626451200000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "", + "level_info": { + "current_level": 4 + } + }, + "attend": 0 + }, + { + "uid": 339203848, + "time": 1654798783, + "face_url": "http://i1.hdslb.com/bfs/face/6bead07c483681db51d519aed8b8d00de265e8ae.jpg", + "uname": "XD君233", + "user_info": { + "uid": 339203848, + "uname": "XD君233", + "face": "http://i1.hdslb.com/bfs/face/6bead07c483681db51d519aed8b8d00de265e8ae.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1620748800000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "大爱火柴人,我的世界和一些求生枪战游戏", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 199624899, + "time": 1654792330, + "face_url": "http://i0.hdslb.com/bfs/face/59526a5bfbe6985a0741ddaacffaee3c90c5e34a.jpg", + "uname": "猛Pink", + "user_info": { + "uid": 199624899, + "uname": "猛Pink", + "face": "http://i0.hdslb.com/bfs/face/59526a5bfbe6985a0741ddaacffaee3c90c5e34a.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1598112000000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "这个人很神秘,什么都看不了=●ω●=", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 451151619, + "time": 1654791995, + "face_url": "http://i0.hdslb.com/bfs/face/9322b5a5802b5c831b2382afed073f5290be6e38.jpg", + "uname": "七城关", + "user_info": { + "uid": 451151619, + "uname": "七城关", + "face": "http://i0.hdslb.com/bfs/face/9322b5a5802b5c831b2382afed073f5290be6e38.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1655827200000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 6249, + "name": "星座系列:处女座", + "image": "http://i0.hdslb.com/bfs/garb/item/cd82b1c35fe0ea221c4fd56525893bc58ec53300.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/cd82b1c35fe0ea221c4fd56525893bc58ec53300.png", + "image_enhance_frame": "" + }, + "sign": "强迫症", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 375385022, + "time": 1654785903, + "face_url": "http://i2.hdslb.com/bfs/face/fbdfa7917e8f874382f4b42fcccd9c7296461cb9.jpg", + "uname": "想变成魔法少女的笙绘", + "user_info": { + "uid": 375385022, + "uname": "想变成魔法少女的笙绘", + "face": "http://i2.hdslb.com/bfs/face/fbdfa7917e8f874382f4b42fcccd9c7296461cb9.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1643472000000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "希望自己的原创作品可以成为自活过的证明", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 291506521, + "time": 1654782383, + "face_url": "http://i1.hdslb.com/bfs/face/887f13f658cfbee23e3e200fe61755f1a8d5823c.jpg", + "uname": "星が落ちた日", + "user_info": { + "uid": 291506521, + "uname": "星が落ちた日", + "face": "http://i1.hdslb.com/bfs/face/887f13f658cfbee23e3e200fe61755f1a8d5823c.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1673884800000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 4104, + "name": "良辰美景·不问天", + "image": "http://i1.hdslb.com/bfs/garb/item/4dbf08aae75f9479a21db2bb289229b8d71631e1.png", + "expire": 0, + "image_enhance": "http://i1.hdslb.com/bfs/garb/item/253bf41272ddef301c1f6a0361abd49d772bfafc.webp", + "image_enhance_frame": "http://i1.hdslb.com/bfs/garb/item/c4934a1ffdb3865fe79b319de439af3973b53ec9.png" + }, + "sign": "一时摸鱼一时爽,一直摸鱼一直爽!", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 179333519, + "time": 1654780391, + "face_url": "http://i2.hdslb.com/bfs/face/89a58c10bf500fb7c9530ba8f28f73208c510d22.jpg", + "uname": "纳眉兹www", + "user_info": { + "uid": 179333519, + "uname": "纳眉兹www", + "face": "http://i2.hdslb.com/bfs/face/89a58c10bf500fb7c9530ba8f28f73208c510d22.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1646496000000, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "人生", + "level_info": { + "current_level": 4 + } + }, + "attend": 0 + }, + { + "uid": 497821251, + "time": 1654780363, + "face_url": "http://i0.hdslb.com/bfs/face/a7bf301db14cb7fa094dba5f68d13faa7c5798d2.jpg", + "uname": "不器用な・ジョゼ", + "user_info": { + "uid": 497821251, + "uname": "不器用な・ジョゼ", + "face": "http://i0.hdslb.com/bfs/face/a7bf301db14cb7fa094dba5f68d13faa7c5798d2.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1683216000000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 299, + "name": "梦塔·雪谜城", + "image": "http://i0.hdslb.com/bfs/face/c93e1eeb77b1bb0753eff243d49c006bf18d69c5.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/face/c93e1eeb77b1bb0753eff243d49c006bf18d69c5.png", + "image_enhance_frame": "" + }, + "sign": "・花无凋零之日,爱无传达之时,爱情亘古不变,紫罗兰永世长存\n・人活着就是为了樱岛麻衣\nキャ━━━━(゚∀゚)━━━━!!", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + }, + { + "uid": 1054063538, + "time": 1654779485, + "face_url": "http://i2.hdslb.com/bfs/face/bc60a7b5c3b5fd624043050a3ab15e2c4c871803.jpg", + "uname": "贪吃的ZZ", + "user_info": { + "uid": 1054063538, + "uname": "贪吃的ZZ", + "face": "http://i2.hdslb.com/bfs/face/bc60a7b5c3b5fd624043050a3ab15e2c4c871803.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "(ฅ>ω<*ฅ)", + "level_info": { + "current_level": 3 + } + }, + "attend": 0 + }, + { + "uid": 305663999, + "time": 1654777857, + "face_url": "http://i2.hdslb.com/bfs/face/3a2b2f84990ec182af8380ef97db8256c6ecec25.jpg", + "uname": "qw夕颜", + "user_info": { + "uid": 305663999, + "uname": "qw夕颜", + "face": "http://i2.hdslb.com/bfs/face/3a2b2f84990ec182af8380ef97db8256c6ecec25.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "sign": "", + "level_info": { + "current_level": 4 + } + }, + "attend": 0 + }, + { + "uid": 436616802, + "time": 1654776381, + "face_url": "http://i0.hdslb.com/bfs/face/e1ddfcdac95b39217e4710f3605005abfecb53a1.jpg", + "uname": "桐影映江边", + "user_info": { + "uid": 436616802, + "uname": "桐影映江边", + "face": "http://i0.hdslb.com/bfs/face/e1ddfcdac95b39217e4710f3605005abfecb53a1.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1664208000000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "大会员", + "label_theme": "vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "", + "role": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 1990, + "name": "明日方舟", + "image": "http://i0.hdslb.com/bfs/garb/item/0c8e7d627a35c378b757f39419889ef1fcc0ed9b.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/1815c81da71069ea3db4553cad7d233f782da2f2.webp", + "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/ed2b4ef1da228c0b937753542b33af8f04d1d70c.png" + }, + "sign": "追寻着你的身影,从迷失的世界起航,直到深海的尽头~", + "level_info": { + "current_level": 4 + } + }, + "attend": 0 + }, + { + "uid": 266536964, + "time": 1654775142, + "face_url": "http://i2.hdslb.com/bfs/face/b15e60d6e5403075f212d5bd3d30dc0fb3016088.jpg", + "uname": "君九j", + "user_info": { + "uid": 266536964, + "uname": "君九j", + "face": "http://i2.hdslb.com/bfs/face/b15e60d6e5403075f212d5bd3d30dc0fb3016088.jpg", + "rank": "10000", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1683648000000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 1293, + "name": "碧蓝航线", + "image": "http://i2.hdslb.com/bfs/face/2508daec59b2aaada2784f26f9c1c28069f28e43.png", + "expire": 0, + "image_enhance": "http://i2.hdslb.com/bfs/face/2508daec59b2aaada2784f26f9c1c28069f28e43.png", + "image_enhance_frame": "" + }, + "sign": "", + "level_info": { + "current_level": 5 + } + }, + "attend": 0 + } + ], + "has_more": 1, + "total_count": 2367, + "_gt_": 0 + } +} +``` + +</details> + +## 获取草稿列表 + +> https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/get_drafts + +请求方式:GET + +认证方式:Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 正常为"0" | +| ttl | num | 1 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | -------- | ---- | +| drafts | array | 草稿列表 | | + +`drafts`列表的每一项: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | -------------------- | ------------------------------------------------------------ | +| draft_id | str | 草稿id | | +| publish_time | num | 定时发送的秒级时间戳 | | +| type | num | 动态类型 | 请参考[获取特定动态卡片信息](get_dynamic_detail.md) | +| uid | num | 自己的mid | | +| user_profile | obj | 自己的用户信息 | 请参考[用户基本信息](../user/info.md) | +| request | str | 动态内容 | 该项为json转成str,内容请参考[发表纯文本动态](publish.md#发表纯文本动态) | diff --git a/docs/dynamic/card_info.md b/docs/dynamic/card_info.md new file mode 100644 index 0000000..89dcc31 --- /dev/null +++ b/docs/dynamic/card_info.md @@ -0,0 +1,604 @@ +# 动态卡片信息字段 + +不同动态内容卡片的具体信息。包含在 [获取特定动态卡片信息](get_dynamic_detail.md#获取特定动态卡片信息) 等 API 的 JSON 回复中 + +以card字段的形式出现,内容为一个可被解析为Json对象的字符串。 + +不同类型的动态内容拥有不同的字段。 + +注: 本处 `type` 一般不包含在 `card` 字符串代表的对象内 + +**** + +## 转发动态 (type=1) + +需注意账号转发视频投稿,其他用户的动态以及分享收藏夹等均为转发类内容,并不属于type=4300的收藏类动态等。 + +在type=1的转发类动态中,解析出的对象包含以下内容: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| user | obj | 转发者用户信息 | 包含用户名,用户id和头像 | +| item | obj | 转发相关信息 | `content`字段为转发附言 | | +| origin | str | 被转发动态信息 | 即本文档所描述的动态详细信息字段。<br/>动态类型为`item`对象的`orig_type`字段 | +| origin_extend_json | str | 被转发动态补充信息 | | +| origin_user | obj | 被转发用户信息 | | +| activity_infos | obj | 被转发动态参与的活动 | | + +<details> +<summary>查看字段内容示例:</summary> + +```json +{ + "user": { + "uid": 1704629193, + "uname": "钢板狗的狐", + "face": "https://i0.hdslb.com/bfs/face/443bfd128429f84c0d81c20c4354ea5007f7480c.jpg" + }, + "item": { + "rp_id": 587236631985408400, + "uid": 1704629193, + "content": "#阅机无数#这是什么本子", + "ctrl": "", + "orig_dy_id": 587058081595689300, + "pre_dy_id": 587058081595689300, + "timestamp": 1635565083, + "reply": 0, + "orig_type": 8 + }, + "origin": "{\"aid\":933765713,\"attribute\":0,\"cid\":433047365,\"copyright\":1,\"ctime\":1635523511,\"desc\":\"-\",\"dimension\":{\"height\":1920,\"rotate\":0,\"width\":1080},\"duration\":200,\"dynamic\":\"\",\"first_frame\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/storyff\\/n211029a2nf13h6fhybt231isumtaj9x_firsti.jpg\",\"jump_url\":\"bilibili:\\/\\/video\\/933765713\\/?page=1&player_preload=null&player_width=1080&player_height=1920&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/e4c06054bc9d6c564637f70a7565a6a2d24ee521.jpg\",\"mid\":492755628,\"name\":\"Leojdj\"},\"pic\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/archive\\/8b3bd4387d4041389ba7f02ce813b17f96a7f1e2.jpg\",\"player_info\":null,\"pubdate\":1635523511,\"rights\":{\"autoplay\":1,\"bp\":0,\"download\":0,\"elec\":0,\"hd5\":0,\"is_cooperation\":0,\"movie\":0,\"no_background\":0,\"no_reprint\":1,\"pay\":0,\"ugc_pay\":0,\"ugc_pay_preview\":0},\"short_link\":\"https:\\/\\/b23.tv\\/BV16T4y1R7H9\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV16T4y1R7H9\",\"stat\":{\"aid\":933765713,\"coin\":0,\"danmaku\":0,\"dislike\":0,\"favorite\":1,\"his_rank\":0,\"like\":2,\"now_rank\":0,\"reply\":2,\"share\":1,\"view\":70},\"state\":0,\"tid\":95,\"title\":\"试图安装Windows10\",\"tname\":\"数码\",\"up_from_v2\":9,\"videos\":1}", + "origin_extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\"},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "origin_user": { + "info": { + "uid": 492755628, + "uname": "Leojdj", + "face": "https://i0.hdslb.com/bfs/face/e4c06054bc9d6c564637f70a7565a6a2d24ee521.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "vipStatus": 0, + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "", + "level_info": { + "current_level": 3 + } + }, + "activity_infos": { + "details": [ + { + "type": 1, + "detail": "{\"is_show\":1,\"topic_id\":10511051,\"topic_link\":\"https:\\/\\/member.bilibili.com\\/york\\/punch-card?navhide=1\",\"topic_name\":\"打卡挑战\"}" + } + ] + } +} +``` + +</details> + +## 图片动态 (type=2) + +在type=2的图片动态中,解析出的对象包含以下内容: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| item | obj | 图片动态内容 | `description`字段为文字内容<br/>`pictures`字段图片 | | +| user | obj | 发布者用户信息 | 包含用户名,用户id和头像 | + + +<details> +<summary>查看字段内容示例:</summary> + +```json +{ + "item": { + "at_control": "", + "category": "daily", + "description": "#阅机无数#已知这个笔记本的品牌为Dell,隶属于灵越系列,主打外观的设计,目测应该是4代酷睿之前的型号,CPU应该是低压i5/i3,不知道能否找出具体型号", + "id": 172408258, + "is_fav": 0, + "pictures": [ + { + "img_height": 2400, + "img_size": 1425.97998046875, + "img_src": "https://i0.hdslb.com/bfs/album/3716f26eeede4d77874f3eeacd49b0e2e597fcc3.jpg", + "img_tags": null, + "img_width": 1080 + } + ], + "pictures_count": 1, + "reply": 2, + "role": [], + "settings": { + "copy_forbidden": "0" + }, + "source": [], + "title": "", + "upload_time": 1635433727 + }, + "user": { + "head_url": "https://i1.hdslb.com/bfs/face/98f88e00306ac92d30bae013f8295d26bd018093.jpg", + "name": "LostCity失落之城", + "uid": 169216498, + "vip": { + "avatar_subscript": 0, + "due_date": 0, + "label": { + "label_theme": "", + "path": "", + "text": "" + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0, + "vip_pay_type": 0 + } + } +} +``` + +</details> + +## 文字动态 (type=4) + +在type=4的文字动态中,解析出的对象包含以下内容: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| item | obj | 文字动态内容 | `description`字段为文字内容 | | +| user | obj | 发布者用户信息 | 包含用户名,用户id和头像 | + + +<details> +<summary>查看字段内容示例:</summary> + +```json +{ + "user": { + "uid": 403417570, + "uname": "杯子人一君羊", + "face": "https://i1.hdslb.com/bfs/face/cf0772f2e4d76f75ca4c230d9ab1b50012a8bbfa.jpg" + }, + "item": { + "rp_id": 586612173803463700, + "uid": 403417570, + "content": "#阅机无数# 文字题\nthinkpad 09-15年\n触控笔\nenergy star\ncore i5\n[藏狐]", + "ctrl": "", + "orig_dy_id": 0, + "pre_dy_id": 0, + "timestamp": 1635419690, + "reply": 2 + } +} +``` + +</details> + +## 视频投稿动态 (type=8) + +在type=8的视频投稿动态中,解析出的对象包含以下内容: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| aid | num | 视频avid | | +| attribute | num | `0` | [可能已弃用](https://shakaianee.top/archives/9/) | +| cid | num | 视频cid | | +| copyright | num | 原创信息 | 1为原创,2为转载 | +| desc | str | 视频简介 | | +| dimension | obj |视频1p分辨率| | +| duration | num | 视频时长 | 单位秒 | +| dynamic | str | 动态文字内容 | | +| first_frame | str | 视频第一帧图片 | 图片链接 | +| jump_url | str | 视频跳转链接 | | +| mission_id | num | 稿件参与的活动id | | +| owner | obj | 动态作者信息 | 即up主 | +| pic | str | 视频封面 | | +| player_info | ? | 可能是播放器信息 | | +| pubdate | num | 发布时间 | 时间戳 | +| rights | obj | 联合投稿,是否付费等信息 | 可能用来代替原`attribute`字段 | +| stat | obj | 视频数据 | 点赞投币等 | +| state | num | 视频状态 | 详情见**属性数据文档** | +| tid | num | 视频分区编号 | | +| title | str | 视频标题 | | +| tname | str | 视频分区名称 | | +| video | num | 视频数| | + + + +<details> +<summary>查看字段内容示例:</summary> + +```json +{ + "aid": 506318410, + "attribute": 0, + "cid": 432711595, + "copyright": 1, + "ctime": 1635403080, + "desc": "我看谁敢欺负天依依?都别动啊,放那儿让我来!\n好久不写萌歌歌了,耐心心看到结尾,有天依依激萌嚎叫(不\n\n作曲曲/编曲曲/混音音:iKz @Signal-E | 作词词:叫叫与壶壶\n唱歌歌:洛天依 | 调校校:Creuzer\n曲绘绘:pelokio & 贝贝web & 壶芬奇\nPVV:AYWC八毛 @Signal-E\n制作人:iKz\n\n蛀牙牙版:BV1FR4y1n7rt", + "dimension": { + "height": 1080, + "rotate": 0, + "width": 1920 + }, + "duration": 265, + "dynamic": "我看谁敢欺负天依依?都别动啊,放那儿让我来!\n好久不写萌歌歌了,耐心心看到结尾,有洛天依激萌嚎叫(不", + "first_frame": "https://i1.hdslb.com/bfs/storyff/n211029a21oldgobzh2ob1uf3tqav4yy_firsti.jpg", + "jump_url": "bilibili://video/506318410/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0", + "mission_id": 122069, + "owner": { + "face": "https://i1.hdslb.com/bfs/face/4935c75aecf986c3c129400882ee9c5ceeeec4b5.jpg", + "mid": 25681, + "name": "iKz_茶壶" + }, + "pic": "https://i0.hdslb.com/bfs/archive/06749bfe8b9505b00bd572950615912fecadb513.jpg", + "player_info": null, + "pubdate": 1635501604, + "rights": { + "autoplay": 1, + "bp": 0, + "download": 0, + "elec": 0, + "hd5": 1, + "is_cooperation": 1, + "movie": 0, + "no_background": 0, + "no_reprint": 1, + "pay": 0, + "ugc_pay": 0, + "ugc_pay_preview": 0 + }, + "short_link": "https://b23.tv/BV13u411o7Ht", + "short_link_v2": "https://b23.tv/BV13u411o7Ht", + "stat": { + "aid": 506318410, + "coin": 5490, + "danmaku": 486, + "dislike": 0, + "favorite": 6017, + "his_rank": 0, + "like": 8526, + "now_rank": 0, + "reply": 597, + "share": 568, + "view": 44737 + }, + "state": 0, + "tid": 30, + "title": "【超萌萌洛天依!万圣节原创】嘤嘤大作战【iKz-茶壶壶】", + "tname": "VOCALOID·UTAU", + "videos": 1 +} +``` + +</details> + +## 小视频 (type=16) + +## 戏剧? (type=32) + +## 专栏投稿动态 (type=64) + +在type=64的专栏投稿动态中,解析出的对象包含以下内容: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| id | num | 专栏的id,即cv号 | | +| category | obj | 分类号和分类名称 | | +| categories | obj | 分类信息 | | +| title | str | 专栏标题 | | +| summary | str | 专栏简介 | | +| banner_url | str | 头图链接 | | +| template_id | num | 模板信息 | | +| state | num | 专栏状态 | | +| author | obj | 作者信息 | 包含了头像挂件和勋章等 | +| reprint | num | 可能是转载 | | +| image_urls | obj | 图片链接 | | +| publish_time | num | 发布时间 | 时间戳,应该指专栏 | +| ctime | num | 发布时间 | 时间戳,应该指动态 | +| stats | obj | 专栏数据,点赞之类 | 有点踩字段,但并未实装此功能 | +| words | num | 字数 | | +| origin_image_urls | obj | 源图片地址 | | +| list | ? | 可能为文集 | | +| is_like | bool | 是否点赞 | | +| media | obj | 番剧电影相关内容 | 影评的分数,是否有剧透等 | +| apply_time | ? | ? | | +| check_time | ? | ? | | +| original | num | 是否原创 | | +| act_id | num | ? | | +| dispute | ? | 可能为是否争议内容 | | +| authenMark | ? | ? | | +| cover_avid | num | 相关视频id | 例如笔记专栏的原视频 | +| top_video_info | ? | ? | | +| type | num | 可能是专栏类别 | | + +<details> +<summary>查看字段内容示例:</summary> + +```json +{ + "id": 12457797, + "category": { + "id": 42, + "parent_id": 41, + "name": "全部笔记" + }, + "categories": [ + { + "id": 41, + "parent_id": 0, + "name": "笔记" + }, + { + "id": 42, + "parent_id": 41, + "name": "全部笔记" + } + ], + "title": "【编曲教程】弦乐如何编写?二十分钟学会弦乐基础写法~", + "summary": "点击进入查看全文", + "banner_url": "https://i0.hdslb.com/bfs/archive/9c0f743f0d79bf3f73ea196eced55a9211ef363f.jpg", + "template_id": 4, + "state": 0, + "author": { + "mid": 310236726, + "name": "珞林ltyxh", + "face": "https://i0.hdslb.com/bfs/face/8c4aebb01b3cc34154168be51241b0345f110aeb.webp", + "pendant": { + "pid": 2155, + "name": "洛天依8th生日纪念", + "image": "https://i0.hdslb.com/bfs/garb/item/e98718ae0d09e48bc85df969820b88241bc06883.png", + "expire": 0 + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "nameplate": { + "nid": 4, + "name": "青铜殿堂", + "image": "https://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", + "image_small": "https://i2.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", + "level": "普通勋章", + "condition": "单个自制视频总播放数>=1万" + }, + "vip": { + "type": 2, + "status": 1, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299" + } + }, + "reprint": 0, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/banner/6daa4ac60ddec2456bb720dbb4979b07dd705e8a.png" + ], + "publish_time": 1627921161, + "ctime": 1627921161, + "stats": { + "view": 107, + "favorite": 5, + "like": 11, + "dislike": 0, + "reply": 1, + "share": 0, + "coin": 1, + "dynamic": 0 + }, + "words": 225, + "origin_image_urls": [ + "https://i0.hdslb.com/bfs/article/banner/6daa4ac60ddec2456bb720dbb4979b07dd705e8a.png" + ], + "list": null, + "is_like": false, + "media": { + "score": 0, + "media_id": 0, + "title": "", + "cover": "", + "area": "", + "type_id": 0, + "type_name": "", + "spoiler": 0, + "season_id": 0 + }, + "apply_time": "", + "check_time": "", + "original": 1, + "act_id": 0, + "dispute": null, + "authenMark": null, + "cover_avid": 57337301, + "top_video_info": null, + "type": 2 +} +``` + +</details> + +## 音频投稿动态 (type=256) + +在type=256的音频投稿动态中,解析出的对象包含以下内容: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| id | num | 投稿编号 | 即au号 | +| upId | num | 音乐人id | 与用户uid不同 | +| title | str | 音频标题 | | +| upper | str | 上传者名称 | | +| cover | str | 封面图链接 | | +| author | str | 作者名称 | | +| ctime | num | 上传时间 | 时间戳的后面加了三个0 | +| playCnt | num | 播放量 | | +| intro | str | 音频介绍 | | +| schema | str | 跳转链接 | 似乎并不只是url | +| typeInfo | str | 分区信息 | | +| upperAvatar | str | 上传者的头像链接 | | + +<details> +<summary>查看字段内容示例:</summary> + +```json +{ + "id": 2562895, + "upId": 482834, + "title": "[蓝猫原创伴奏]无衣", + "upper": "NBluecat", + "cover": "https://i0.hdslb.com/bfs/music/1e7c4d04bd405159b66893d4cb68977ddf784b42.jpg", + "author": "NBluecat", + "ctime": 1632115270000, + "replyCnt": 1, + "playCnt": 252, + "intro": "_(:з」∠)_这是无衣的伴奏,非常简单", + "schema": "bilibili://music/detail/2562895?name=%5B%E8%93%9D%E7%8C%AB%E5%8E%9F%E5%88%9B%E4%BC%B4%E5%A5%8F%5D%E6%97%A0%E8%A1%A3&uperName=&cover_url=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Fmusic%2F1e7c4d04bd405159b66893d4cb68977ddf784b42.jpg&upperId=&author=NBluecat", + "typeInfo": "音乐 · 纯音乐/演奏", + "upperAvatar": "https://i2.hdslb.com/bfs/face/d5bf3c9f179803134172ff1c6090ba6b999651c6.jpg" +} +``` + +</details> + +## 番剧 (type=512) + +## ??? (type=1000) + +## ??? (type=1001) + +## ??? (type=1024) + +## H5 活动动态 (type=2048) + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| rid | number | 动态 id | | +| sketch | object | 动态卡片内容 | | +| user | object | 用户信息 | | +| vest | object | 动态正文内容 | | + +`sketch` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cover_url | string | 封面 URL | | +| desc_text | string | 描述文本 | | +| sketch_id | number | 卡片 id | 即动态 id | +| target_url | string | 目标 URL | | +| text | string | 文本? | 空? | +| title | string | 标题 | | + +`user` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| face | string | 头像 URL | | +| uid | number | mid (UID) | | +| uname | string | 用户名 | | + +`vest` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| content | string | 内容 | | +| uid | number | 用户 mid (UID) | | + +**示例:** + +<details> +<summary>查看示例:</summary> + +```json +{ + "rid": 1093384350151475200, + "sketch": { + "cover_url": "https://i0.hdslb.com/bfs/game/65e4fa4b3cf2d177148328e2ff76535500bc563c.png", + "desc_text": "分享了一条动态", + "sketch_id": 1093755435448533000, + "target_url": "https://space.bilibili.com/645769214", + "text": "", + "title": "你好,世界" + }, + "user": { + "face": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg", + "uid": 645769214, + "uname": "Session小胡" + }, + "vest": { + "content": "[笑哭]", + "uid": 645769214 + } +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-07-26T01:40:56.464495209Z --> + +## 漫画分享 (type=2049) + +## PGC 番剧 (type=4097) + +## 电影 (type=4098) + +## 电视剧 (type=4099) + +## 国创动漫 (type=4100) + +## 纪录片 (type=4101) + +## 直播 (type=4200) + +## 直播 (type=4201) + +## 收藏夹 (type=4300) + +## 付费课程 (type=4302) + +## 付费课程 (type=4303) + +## 直播 (type=4308) + +## 合集 (type=4310) + +## ??? (type=4311) + +## ??? (type=268435455) diff --git a/docs/dynamic/content.md b/docs/dynamic/content.md new file mode 100644 index 0000000..5164f4b --- /dev/null +++ b/docs/dynamic/content.md @@ -0,0 +1,1034 @@ +# 动态信息 + +## 获取正在直播的已关注者 + +> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | -------- | +| size | num | 每页显示数 | 非必要 | 默认为10 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 默认为0 | +| msg | num | 空 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------- | ------------ | +| count | num | 直播者数量 | | +| group | str | "default" | 作用尚不明确 | +| items | array | 直播者列表 | | +| _gt_ | num | 0 | 作用尚不明确 | + +`data`中的`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 第一位直播者 | | +| n | obj | 第(n+1)位直播者 | | +| …… | obj | …… | …… | + +`data`中的`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ---- | +| face | str | 直播者头像 | | +| link | str | 直播链接 | | +| title | str | 直播标题 | | +| uid | num | 直播者id | | +| uname | str | 直播者昵称 | | + +**示例:** + +```shell +curl -G 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users' \ +--data-urlencode 'size=10' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "count": 4, + "group": "default", + "items": [ + { + "uid": 430774867, + "uname": "AIofficial", + "face": "https://i0.hdslb.com/bfs/face/f9a65c15bd1e9871419e6566aeee891eef420c5b.jpg", + "link": "https://live.bilibili.com/21412734", + "title": "【罚站AI】换装24小时AI直播间唱聊~" + }, + { + "uid": 456664753, + "uname": "央视新闻", + "face": "https://i1.hdslb.com/bfs/face/5a6808606bf1f7a2390b77e14df8d0d1d04680d9.jpg", + "link": "https://live.bilibili.com/21686237", + "title": "8.19中国医师节 一起“医”路同行" + }, + { + "uid": 5755666, + "uname": "可爱的大枣子", + "face": "https://i1.hdslb.com/bfs/face/248428206eca5b9ca34514dc2df54d456fbecb9e.jpg", + "link": "https://live.bilibili.com/2116488", + "title": "早上好" + }, + { + "uid": 290515513, + "uname": "地球频道", + "face": "https://i1.hdslb.com/bfs/face/33b60973ae3608beb27189947b02ccc2164a96d5.jpg", + "link": "https://live.bilibili.com/9196015", + "title": "【直播】从太空看地球" + } + ], + "_gt_": 0 + } +} +``` + +</details> + +## 获取发布新动态的已关注者 + +> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_dyn_uplist + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------------- | ---- | ------------------ | ------ | ---------------- | +| teenagers_mode | num | 是否开启青少年模式 | 非必要 | 否:0<br />是:1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------- | +| code | num | 返回值 | 0:成功<br />-6:未登录 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 默认为0 | +| msg | num | 空 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ----- | ---------- | ------------ | +| button_statement | str | 空 | 作用尚不明确 | +| items | array | 更新者列表 | | +| _gt_ | num | 0 | 作用尚不明确 | + +`data`中的`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 第一位更新者 | | +| n | obj | 第(n+1)位更新者 | | +| …… | obj | …… | …… | + +**示例:** + +```shell +curl -G 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_dyn_uplist' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "button_statement": "", + "items": [{ + "user_profile": { + "info": { + "uid": 332704117, + "uname": "白上吹雪Official", + "face": "https://i1.hdslb.com/bfs/face/26298b21c4a059d95ee9d009bbdf1dca94da951f.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名UP主、直播签约主播" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1634832000000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "hololive一期生,虚拟白发狐狸白上吹雪是也(^・ω・^§)ノ 画师:凪白みと 协力:白上吹雪字幕组 商务合作请私信", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 282994, + "uname": "泠鸢yousa", + "face": "https://i2.hdslb.com/bfs/face/28f95c383f2805dbed32e93007c91ccfda28775f.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 2019百大UP主、直播签约主播" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1649001600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 301, + "name": "实验品家庭", + "image": "https://i1.hdslb.com/bfs/face/6fbee28f782926612eb1ad71d6c8aa7264206fe9.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/face/6fbee28f782926612eb1ad71d6c8aa7264206fe9.png" + }, + "rank": "10000", + "sign": "虚拟艺人团体VirtuaReal Star成员,微博&网易云等搜:泠鸢yousa ", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 13765857, + "uname": "LShang001", + "face": "https://i2.hdslb.com/bfs/face/4bc59f57e6d31fcf868d7e935f643a043dd6b99f.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1599926400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "Excelsior", + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 410527811, + "uname": "WhatOnEarth一探究竟", + "face": "https://i0.hdslb.com/bfs/face/0ef3c74f61c4f5f0ef70ddbf3f1f0ebfed18a1b8.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名科普UP主" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1599494400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "硬核人文科普,精彩社会案例,尽在WOE。", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 519253600, + "uname": "火柴人AlanBecker", + "face": "https://i1.hdslb.com/bfs/face/75e1219501e9ca3e82cad2c4a466fb4b5c7d0557.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "Alan Becker官方帐号,动画UP主" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1594137600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "Alan Becker官方频道", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 293793435, + "uname": "社会易姐QwQ", + "face": "https://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1612454400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨,粉丝群:1136462265", + "level_info": { + "current_level": 5, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 5755666, + "uname": "可爱的大枣子", + "face": "https://i1.hdslb.com/bfs/face/248428206eca5b9ca34514dc2df54d456fbecb9e.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1645286400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "檐外清风惊落一池桃花染", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 51270387, + "uname": "挽竹Killer", + "face": "https://i2.hdslb.com/bfs/face/3a9f7b01c8b7d235fa2fa8d761b94520fb82bd20.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1613404800000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "(15w粉女装直播嗷)粉丝群:872444546", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 4409391, + "uname": "估读", + "face": "https://i0.hdslb.com/bfs/face/f0d6b44b38eff3ce023b354f692cdb5ae0013772.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1578412800000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "关注一下这只硬核up吧~ 脑洞能开,双手能做,立志把硬核内容做得易于食用ヾ(✿゚▽゚)ノ 粉丝群971392670。微博ID“估读酱”", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 70547713, + "uname": "Dr丶寻一", + "face": "https://i1.hdslb.com/bfs/face/fb2f66c64b1de4da329b8ccdbe4cc2db19bab488.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1598025600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 2360, + "name": "#EveOneCat", + "image": "https://i1.hdslb.com/bfs/garb/item/3a6053f073f979a776e02e088dd7dd7694c5b1f3.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/6c7f2ccb92627b11101dfbb616524845cac8f216.webp" + }, + "rank": "10000", + "sign": "准备开黑乐谱的坑,有时还会弄点其他的红石音乐。有什么好的黑乐谱可以私信我下载链接,只要是我电脑上的fl能够成功导入,看实际情况施工。", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 591856754, + "uname": "卢正义的雕刻时光", + "face": "https://i0.hdslb.com/bfs/face/5acc7be5c21c1dc7a4d0ebe8d741e60555971029.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名UP主" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1624377600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "我是卢正义,年方二十有七\n初来贵站,还望各位多多关照\n商务合作⭐ JOJOMONO\n木品咨询⭐ lym11336699\n", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 361818130, + "uname": "是田小浪呀", + "face": "https://i1.hdslb.com/bfs/face/917d7f539e24860a52ccca2e8dbf8d6d6ca0e66b.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "", + "level_info": { + "current_level": 3, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 108572682, + "uname": "月下玄月", + "face": "https://i1.hdslb.com/bfs/face/9cb69b21cd23fce7545c441415db17f2d57af159.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名UP主" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1619712000000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "QQ1群:701762419;QQ2群:1062508843", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 7450650, + "uname": "超果果mc", + "face": "https://i2.hdslb.com/bfs/face/0202ae8b377d750fe3fbeff4f9b8219b48071ee5.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名游戏UP主、直播签约主播" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1645113600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "希望做出大家看了都会开心的视频 微博@超果果mc 商业合作加qq:169113409", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 4958429, + "uname": "Mukyo木西", + "face": "https://i0.hdslb.com/bfs/face/15c9b8360e524332a61b998360dd4958e0d1fd31.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1582992000000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "各个音乐平台搜 Mukyo木西。微博@Mukyo木西就是狗狗。", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 26321770, + "uname": "和猫住の", + "face": "https://i2.hdslb.com/bfs/face/a0f1e2e8fa05317c12064b7026a20900bdb25b5a.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名UP主" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1627488000000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 303, + "name": "喂,看见耳朵啦", + "image": "https://i1.hdslb.com/bfs/face/09f3180cb0a4a0a479045fe4fad705f9b92a82d2.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/face/09f3180cb0a4a0a479045fe4fad705f9b92a82d2.png" + }, + "rank": "10000", + "sign": "年轻人的猫咪救援领养平台,微博/公众号:和猫住 客服v:公众号和猫住菜单“联系我”", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 37556366, + "uname": "NickZhuOfficial", + "face": "https://i0.hdslb.com/bfs/face/e3a45f58368a70c5277af394bb40e32156ca2a23.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 2248, + "name": "搞笑专属头像挂件", + "image": "https://i2.hdslb.com/bfs/garb/item/bab219d170a1662c26beede8944c6afbc6bc2bb4.png", + "expire": 0, + "image_enhance": "https://i2.hdslb.com/bfs/garb/item/bab219d170a1662c26beede8944c6afbc6bc2bb4.png" + }, + "rank": "10000", + "sign": "鬼畜人", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 438345816, + "uname": "盲人母亲曹世美", + "face": "https://i2.hdslb.com/bfs/face/61111e0fa1ce0e8224b7aa48cc8b4dddc2ec6046.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名UP主" + } + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "来自贵州纳雍大山深处的一家三口,父亲腿脚残疾,母亲看不见,还有一个脑瘫儿子,盲人母亲就这样用她一双手撑起了一个家想了解v:llj104890", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 486633990, + "uname": "我是江无情", + "face": "https://i1.hdslb.com/bfs/face/bf667a09070a9345c881ec8e3e6844d8ecb043ca.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名科普UP主" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1617379200000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "一个做视频的,商务请私信微博:我是江无情", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 1 + }, + { + "user_profile": { + "info": { + "uid": 13337125, + "uname": "GoldenEggs", + "face": "https://i0.hdslb.com/bfs/face/11a78303bf3c69a1bf34cab25bb219eeee47961e.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名游戏UP主" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1649865600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "" + }, + "rank": "10000", + "sign": "脑洞区up主,常借助Minecraft平台实现一些好玩的想法 // 创意交流群:871449268/合作QQ:1558854197", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "0" + } + }, + "has_update": 0 + }], + "_gt_": 0 + } +} +``` + +</details> \ No newline at end of file diff --git a/docs/dynamic/detail.md b/docs/dynamic/detail.md new file mode 100644 index 0000000..2018cea --- /dev/null +++ b/docs/dynamic/detail.md @@ -0,0 +1,2327 @@ +# 获取动态详情 + +## 动态详情 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/detail +> https://api.bilibili.com/x/polymer/web-dynamic/desktop/v1/detail + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) (非必要) + +鉴权方式: Cookie (User-Agent) (必要), [Wbi 签名](../misc/sign/wbi.md) (非必要) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| id | num | 动态 ID | 必要 | | +| timezone_offset | num | -480 | 非必要 | | +| platform | str | 平台 | 非必要 | `web` | +| gaia_source | str | 来源 | 非必要 | `main_web` | +| features | str | 功能 | 必要 | `itemOpusStyle,opusBigCover,onlyfansVote,endFooterHidden,decorationCard,onlyfansAssetsV2,ugcDelete,onlyfansQaCard,commentsNewVersion`, 参见 [图文 功能模块](../opus/features.md) | +| web_location | str | `333.1368` | 非必要 | | +| x-bili-device-req-json | obj | 设备信息? | 非必要 | `{"platform":"web","device":"pc"}` | +| x-bili-web-req-json | obj | 请求信息? | 非必要 | `{"spm_id":"333.1368"}` | +| w_rid | str | Wbi 签名 | 不必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) | +| wts | num | UNIX 秒级时间戳 | 不必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) | + +**JSON回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +|---------|-----|------|--------------------------| +| code | num | 响应码 | 0: 成功<br/>-352: 风控校验失败<br />500: 服务器错误<br />4101139: 4101139 | +| message | str | | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|-----|-----| +| item | obj | | | + +`data.item`对象: + +参照 [获取动态列表](./all.md#获取动态列表) + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/detail' \ + -A 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0' \ + -b 'SESSDATA=xxxxxx' \ + --url-query 'id=967717348014293017' \ + --url-query 'w_rid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \ + --url-query 'wts=1724986186' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "item": { + "basic": { + "comment_id_str": "326122895", + "comment_type": 11, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "326122895" + }, + "id_str": "967717348014293017", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "645769214" + }, + "decorate": { + "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "fan": { + "color": "", + "color_format": null, + "is_fan": false, + "num_prefix": "", + "num_str": "", + "number": 0 + }, + "id": 28, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28&isdiy=0&part=card&from=post&f_source=garb&vmid=645769214&native.theme=1&navhide=1", + "name": "2233娘", + "type": 1 + }, + "face": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/645769214/dynamic", + "label": "", + "mid": 645769214, + "name": "Session小胡", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "2024年08月20日 19:17", + "pub_ts": 1724152653, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1665158400000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "今天因为Linux被骂, 决定放弃支持 Windows. 而且明天要开始军训了, 将停更若干时间, 遂发此动态, 望不知.", + "text": "今天因为Linux被骂, 决定放弃支持 Windows. 而且明天要开始军训了, 将停更若干时间, 遂发此动态, 望不知.", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "今天因为Linux被骂, 决定放弃支持 Windows. 而且明天要开始军训了, 将停更若干时间, 遂发此动态, 望不知." + }, + "major": { + "draw": { + "id": 326122895, + "items": [ + { + "height": 1080, + "size": 1005.29, + "src": "http://i0.hdslb.com/bfs/new_dyn/0f6f939334104ddc347566514fa4bfa7645769214.jpg", + "tags": [], + "width": 1440 + } + ] + }, + "type": "MAJOR_TYPE_DRAW" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "967717348014293017", + "dyn_type": 2, + "rid_str": "326122895" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 34, + "forbidden": false + }, + "forward": { + "count": 2, + "forbidden": false + }, + "like": { + "count": 65, + "forbidden": false, + "status": true + } + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + } + } +} +``` + +</details> + +## 动态赞与转发列表 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/reaction + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +注: 登录任意账号即可, 若不登录则返回数为 0 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| id | num | 动态 id | 必要 | | +| offset | obj | 偏移量 | 非必要 | 用于翻页, 即响应的 `data.offset` | +| web_location | str | 333.1369 | 非必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| has_more | bool | 是否有更多 | | +| items | array | 赞与转发列表 | | +| offset | str | 偏移量 | 套了一层字符串的 JSON 对象, 用于下次请求 | +| total | num | 总数 | | + +`data` 对象中的 `items` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| action | str | 操作类型 | 赞了/转发了 | +| attend | num | 参与数 | 1: 对方仅关注了发送者<br />2: 发送者关注了对方 | +| desc | str | 描述 | | +| face | str | 头像 URL | | +| mid | num | 用户 mid | | +| name | str | 用户名 | | + +**示例:** + +获取动态 `967717348014293017` 的赞与转发列表 + +```shell +curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/reaction' \ +--url-query 'id=967717348014293017' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "has_more": true, + "items": [ + { + "action": "赞了", + "attend": 2, + "desc": "", + "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "mid": "293793435", + "name": "社会易姐QwQ" + }, + { + "action": "转发了", + "attend": 2, + "desc": "", + "face": "https://i1.hdslb.com/bfs/face/a8c0d532c19085ff14385abb51450d9c32afe93f.jpg", + "mid": "662407339", + "name": "XhuOffice" + }, + { + "action": "赞了", + "attend": 2, + "desc": "", + "face": "https://i1.hdslb.com/bfs/face/a8c0d532c19085ff14385abb51450d9c32afe93f.jpg", + "mid": "662407339", + "name": "XhuOffice" + }, + { + "action": "转发了", + "attend": 2, + "desc": "", + "face": "https://i1.hdslb.com/bfs/face/2c506dcf0b6507041b0bfafea7505cb1badf6ccd.jpg", + "mid": "616368979", + "name": "淡紫玲儿" + }, + { + "action": "赞了", + "attend": 2, + "desc": "", + "face": "https://i1.hdslb.com/bfs/face/2c506dcf0b6507041b0bfafea7505cb1badf6ccd.jpg", + "mid": "616368979", + "name": "淡紫玲儿" + }, + { + "action": "赞了", + "attend": 2, + "desc": "", + "face": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg", + "mid": "645769214", + "name": "Session小胡" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了3个Up主", + "face": "https://i0.hdslb.com/bfs/face/2ac46bacfdedebf9aecf6415b95dd58636b1e22a.jpg", + "mid": "340463550", + "name": "折耳喵之心" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i1.hdslb.com/bfs/face/ec855a27a42e174521399d7508cece6c0c02c6ff.jpg", + "mid": "628114249", + "name": "at白日梦想家" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了3个Up主", + "face": "https://i1.hdslb.com/bfs/face/81362ba3f99b2702b9746ca7fe67ffc76d3a97c4.jpg", + "mid": "198175", + "name": "傲娇金发黑丝双马尾" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i2.hdslb.com/bfs/face/df1c9bc7d79c84b7227486a944d7a748093fbb31.jpg", + "mid": "1007349302", + "name": "用户9420594" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i0.hdslb.com/bfs/face/f17befd18cab5e157844ab986bd6c60d58d74738.jpg", + "mid": "1180456113", + "name": "人工智能小冰_yoyo" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了2个Up主", + "face": "https://i0.hdslb.com/bfs/face/f1b0ebdf19c2f4b768c5a3e57cbd50e404ad9549.jpg", + "mid": "273008643", + "name": "LV1渡劫失败降到" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i0.hdslb.com/bfs/face/a7732df2624c6a0b6e5856ceb27f3c96598a2fd4.jpg", + "mid": "452290620", + "name": "评论永远比视频精彩" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i0.hdslb.com/bfs/face/cc2ea9088f066b33f24d39434d23aa68cb8ab761.png", + "mid": "91671246", + "name": "樱樱之雪" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了3个Up主", + "face": "http://i1.hdslb.com/bfs/face/d20eae4d6339cef2267b36c1c262ae6466395b64.jpg", + "mid": "340632388", + "name": "天神永恒hb" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了21个Up主", + "face": "https://i0.hdslb.com/bfs/face/368b2a33eed5dc146bd9ab8bf62bc9667653a350.jpg", + "mid": "38120922", + "name": "vgwik" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了2个Up主", + "face": "https://i2.hdslb.com/bfs/face/efbd8bb841ea6340f39854b82d9741f47cb3351e.jpg", + "mid": "691494413", + "name": "熬夜肝不好" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i1.hdslb.com/bfs/face/c46fe783ac7a5291dac4773744b3d35d7cebd77f.jpg", + "mid": "1486540726", + "name": "o_90" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i1.hdslb.com/bfs/face/fece6f971d14fddbddcede65a42edc63d01884d4.jpg", + "mid": "34474963", + "name": "Neko_vecter" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了8个Up主", + "face": "https://i0.hdslb.com/bfs/face/e1d66345bdb6f8c75b782ed5c4b93440860c894d.jpg", + "mid": "88466370", + "name": "没有钱的首富" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了15个Up主", + "face": "https://i0.hdslb.com/bfs/face/f8a6e77e5839e64a7448ddeb7112af86eb47aa48.jpg", + "mid": "14625981", + "name": "龙凌洛" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i2.hdslb.com/bfs/face/18c0bb87fbc8f9fde0d7f92ab88917e517e53df1.jpg", + "mid": "36708269", + "name": "alcoholmole" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i0.hdslb.com/bfs/face/39f0e0ec39e6828b01afc28ad001471d1efa8c66.jpg", + "mid": "52874964", + "name": "黑暗战师" + }, + { + "action": "赞了", + "attend": 1, + "desc": "对方关注了你", + "face": "https://i0.hdslb.com/bfs/face/07d73f7d01c8e8cfb9173d8fe6e40a0c8cb5713d.jpg", + "mid": "702368712", + "name": "-御帝哥哥-" + }, + { + "action": "赞了", + "attend": 0, + "desc": "共同关注了22个Up主", + "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg", + "mid": "398095475", + "name": "meipeter" + }, + { + "action": "赞了", + "attend": 0, + "desc": "", + "face": "https://i1.hdslb.com/bfs/face/a4a1566d7218307839345a079651bf58a69a028f.jpg", + "mid": "101358808", + "name": "香香软软的小阿芙" + } + ], + "offset": "{\"page\":2,\"like\":101358808,\"repost\":-1}", + "total": 65 + } +} +``` + +</details> + +## 动态抽奖详情 + +> https://api.vc.bilibili.com/lottery_svr/v1/lottery_svr/lottery_notice + +*请求方法: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | -------- | ------ | ---- | +| business_id | num | 动态 id | 必要 | | +| bussiness_type | num | 业务类型? | 必要 | 1: 动态抽奖 | +| csrf | str | CSRF Token (即 Cookie 中 bili_jct 字段) | 不必要 | | +| web_location | str | 333.1330 | 不必要 | | + +<details> +<summary>旧版参数:</summary> + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | -------- | ------ | ---- | +| dynamic_id | num | 动态 id | 必要 | | + +</details> + +**JSON回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +| - | - | - | - | +| code | num | 返回值 | 0: 成功<br />-9999: 服务系统错误 | +| message | str | 错误信息 | 无则为空串 | +| msg | str | 错误信息 | 无则为空串 | +| data | obj | 信息本体 | 错误时为空对象 | + +`data`对象: + +| 字段名 | 类型 | 内容 | 备注 | +| - | - | - | - | +| lottery_id | num | 抽奖 id | | +| sender_uid | num | 发送者 mid | | +| business_type | num | 业务类型 | 1: 动态抽奖 | +| business_id | num | 业务 id | 可能与请求参数不同 | +| status | num | 抽奖状态 | 0: 未开奖<br />2: 已开奖 | +| lottery_time | num | 开奖时间 | UNIX 秒级时间戳 | +| lottery_at_num | num | at 人数? | | +| lottery_feed_limit | num | 转发限制? | | +| need_post | num | 是否需要发布? | | +| pay_status | num | 支付状态? | | +| first_prize | num | 一等奖数量 | | +| second_prize | num | 二等奖数量 | | +| third_prize | num | 三等奖数量 | | +| ts | num | 发布时间 | UNIX 秒级时间戳 | +| participants | num | 参与人数 | | +| has_charge_right | bool | 是否有充值权? | | +| participated | bool | 是否参与过? | | +| followed | bool | 是否关注过 | | +| reposted | bool | 是否转发过 | | +| lottery_detail_url | str | 抽奖详情页 URL? | | +| first_prize_cmt | str | 一等奖奖品名称 | | +| third_prize_cmt | str | 三等奖奖品名称 | | +| first_prize_pic | str | 一等奖奖品图片 URL | | +| second_prize_pic | str | 二等奖奖品图片 URL | | +| third_prize_pic | str | 三等奖奖品图片 URL | | +| vip_batch_sign | str | ? | | +| prize_type_first | obj | 一等奖奖品类型 | | +| prize_type_second | obj | 二等奖奖品类型 | 无则不存在 | +| prize_type_third | obj | 三等奖奖品类型 | 无则不存在 | +| lottery_result | obj | 抽奖结果 | 无则不存在 | + +`data`对象中的`prize_type_first`对象: + +| 字段名 | 类型 | 内容 | 备注 | +| - | - | - | - | +| type | num | 奖品类型? | 0 | +| value | obj | 奖品价值? | | + +`prize_type_first`对象中的`value`对象: + +| 字段名 | 类型 | 内容 | 备注 | +| - | - | - | - | +| stype | num | 子奖品类型? | 0 | + +`data`对象中的`prize_type_second`对象: + +与 `prize_type_first` 格式相同 + +`data`对象中的`prize_type_third`对象: + +与 `prize_type_first` 格式相同 + +`data`对象中的`lottery_result`对象: + +| 字段名 | 类型 | 内容 | 备注 | +| - | - | - | - | +| first_prize_result | array | 一等奖结果 | | +| second_prize_result | array | 二等奖结果 | 无则不存在 | +| third_prize_result | array | 三等奖结果 | 无则不存在 | + +`lottery_result`对象中的`first_prize_result`数组: + +| 项名 | 类型 | 内容 | 备注 | +| - | - | - | - | +| uid | num | 中奖者 mid | | +| name | str | 中奖者名称 | | +| face | str | 中奖者头像 URL | | +| hongbao_money | num | 奖品金额? | | + +`lottery_result`对象中的`second_prize_result`数组: + +与 `first_prize_result` 格式相同 + +`lottery_result`对象中的`third_prize_result`数组: + +与 `first_prize_result` 格式相同 + +**示例:** + +```shell +curl -G 'https://api.vc.bilibili.com/lottery_svr/v1/lottery_svr/lottery_notice' \ +--url-query 'business_id=969916293954142214' \ +--url-query 'business_type=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "lottery_id": 314834, + "sender_uid": 36081646, + "business_type": 1, + "business_id": 969916293954142214, + "status": 2, + "lottery_time": 1724860800, + "lottery_at_num": 0, + "lottery_feed_limit": 1, + "need_post": 0, + "pay_status": 0, + "first_prize": 1, + "second_prize": 0, + "third_prize": 0, + "ts": 1724922650, + "participants": 9230, + "has_charge_right": false, + "participated": false, + "followed": false, + "reposted": false, + "lottery_detail_url": "", + "first_prize_cmt": "S档门票", + "third_prize_cmt": "", + "first_prize_pic": "", + "second_prize_pic": "", + "third_prize_pic": "", + "vip_batch_sign": "", + "prize_type_first": { + "type": 0, + "value": { + "stype": 0 + } + }, + "lottery_result": { + "first_prize_result": [ + { + "uid": 1014634854, + "name": "lty世界第一吃货殿下", + "face": "https://i0.hdslb.com/bfs/face/c746083b15f6761ea75c602661123e68784c6b1c.jpg", + "hongbao_money": 0 + } + ] + } + }, + "message": "", + "msg": "" +} +``` + +</details> + +## 动态转发列表 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/forward + +*请求方法: GET* + +鉴权方式: `User-Agent` 为有效浏览器等 + +<!-- #1343 --> + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | -------- | ------ | ---- | +| id | number | 动态 id | 必要 | | +| offset | string | 偏移 | 不必要 | 来自上一次请求的 `data.offset` | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功<br />4101001: 参数错误<br />-352: 风控校验失败 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| has_more | boolean | 是否有更多数据 | | +| items | object[] | 转发列表 | | +| offset | string | 下一页偏移 | 用于下一次请求 | +| total | number | 总数 | | + +`data.items[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | object | 描述 | | +| id_str | string | 进行转发的动态 id | | +| pub_time | string | 发布时间 | | +| user | object | 用户 | | + +`data.items[].desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| rich_text_nodes | object[] | 富文本节点 | 参见 [富文本节点](../opus/rich_text_nodesmd) | +| text | string | 纯文本 | | + +`data.items[].user` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| face | string | 头像 URL | | +| face_nft | boolean | 是否为 NFT 头像 | | +| mid | number | 用户 mid (UID) | | +| name | string | 用户名 | | +| official | object | 认证信息 | | +| pendant | object | 装扮信息 | | +| vip | object | 大会员信息 | | + +`data.items[].user.official` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | string | | | +| role | number | | | +| title | string | | | +| type | number | | | + +`data.items[].user.pendant` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| expire | number | | | +| image | string | | | +| image_enhance | string | | | +| image_enhance_frame | string | | | +| n_pid | number | | | +| name | string | | | +| pid | number | | | + +`data.items[].user.vip` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| avatar_icon | object | | | +| avatar_subscript | number | | | +| avatar_subscript_url | string | | | +| due_date | number | | | +| label | object | | | +| nickname_color | string | | | +| role | number | | | +| status | number | | | +| theme_type | number | | | +| tv_due_date | number | | | +| tv_vip_pay_type | number | | | +| tv_vip_status | number | | | +| type | number | | | +| vip_pay_type | number | | | + +`data.items[].user.vip.avatar_icon` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| icon_resource | object | | | + +`data.items[].user.vip.avatar_icon.icon_resource` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | + +`data.items[].user.vip.label` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| bg_color | string | | | +| bg_style | number | | | +| border_color | string | | | +| img_label_uri_hans | string | | | +| img_label_uri_hans_static | string | | | +| img_label_uri_hant | string | | | +| img_label_uri_hant_static | string | | | +| label_theme | string | | | +| path | string | | | +| text | string | | | +| text_color | string | | | +| use_img_label | boolean | | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/forward' \ +--url-query 'id=1091904489085993012' \ +-A 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "has_more": true, + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "恭喜恭喜​//", + "text": "恭喜恭喜​//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce ", + "rid": "485703766", + "text": "@英伟达GeForce ", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "恭喜恭喜​//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092279955170000920", + "pub_time": "1分钟前", + "user": { + "face": "https://i2.hdslb.com/bfs/face/c831cf26f1012338306a178d70a436a7ac2d79fb.jpg", + "face_nft": false, + "mid": 58964126, + "name": "see_ka", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1699977600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 1, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "转发动态//", + "text": "转发动态//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "转发动态//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092279895003758596", + "pub_time": "1分钟前", + "user": { + "face": "https://i2.hdslb.com/bfs/face/d62d4f1d1e8e74a5bc3befd1367c0e0cace13390.jpg", + "face_nft": false, + "mid": 3546652805696378, + "name": "小大宙", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 0, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "许愿幸运呀嘿嘿,加油加油", + "text": "许愿幸运呀嘿嘿,加油加油", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/garb/c2cb4128fd28a727b4aec120e26adc4adf0f4e75.png", + "size": 2, + "text": "[Akie秋绘七周年_阳光可爱]", + "type": 3 + }, + "orig_text": "[Akie秋绘七周年_阳光可爱]", + "text": "[Akie秋绘七周年_阳光可爱]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/garb/c2cb4128fd28a727b4aec120e26adc4adf0f4e75.png", + "size": 2, + "text": "[Akie秋绘七周年_阳光可爱]", + "type": 3 + }, + "orig_text": "[Akie秋绘七周年_阳光可爱]", + "text": "[Akie秋绘七周年_阳光可爱]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "orig_text": "​//", + "text": "​//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce ", + "rid": "485703766", + "text": "@英伟达GeForce ", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "许愿幸运呀嘿嘿,加油加油[Akie秋绘七周年_阳光可爱][Akie秋绘七周年_阳光可爱]​//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092279663073427464", + "pub_time": "2分钟前", + "user": { + "face": "https://i2.hdslb.com/bfs/face/2286199120c79b81bd77f1c21849288a656e52d3.webp", + "face_nft": false, + "mid": 1627169000, + "name": "咚咚咚巴拉嘎嘎", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 0, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "转发动态//", + "text": "转发动态//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "转发动态//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092278962995855364", + "pub_time": "5分钟前", + "user": { + "face": "https://i0.hdslb.com/bfs/face/b829e7e3a9e7b1dc8e2fb0486ddcd60e61ca9bca.jpg", + "face_nft": false, + "mid": 3493274574654105, + "name": "雷冬冬加油呀", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 0, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "转发动态//", + "text": "转发动态//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "转发动态//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092278920047230984", + "pub_time": "5分钟前", + "user": { + "face": "https://i1.hdslb.com/bfs/face/97630265e04024f6ae169ffc513480821058fe10.jpg", + "face_nft": false, + "mid": 612768016, + "name": "宇宙尽头是被窝", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 0, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "转发动态//", + "text": "转发动态//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "转发动态//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092278580747960353", + "pub_time": "6分钟前", + "user": { + "face": "https://i0.hdslb.com/bfs/face/a5ae348d6ab686e17ab0e2acd5a0d12f4908f55f.jpg", + "face_nft": false, + "mid": 1603962291, + "name": "天堂尿壶_全神贯注", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 0, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "jump_url": "https://b23.tv/7cYpOev", + "orig_text": "https://b23.tv/7cYpOev", + "text": "网页链接", + "type": "RICH_TEXT_NODE_TYPE_WEB" + }, + { + "orig_text": "\ncncs", + "text": "\ncncs", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/garb/55b2580bd5c24f87d3910ef8bd7bd70bb6bc22de.png", + "size": 2, + "text": "[青春烟火静态表情包_比心心]", + "type": 3 + }, + "orig_text": "[青春烟火静态表情包_比心心]", + "text": "[青春烟火静态表情包_比心心]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/garb/55b2580bd5c24f87d3910ef8bd7bd70bb6bc22de.png", + "size": 2, + "text": "[青春烟火静态表情包_比心心]", + "type": 3 + }, + "orig_text": "[青春烟火静态表情包_比心心]", + "text": "[青春烟火静态表情包_比心心]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "orig_text": "​//", + "text": "​//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce ", + "rid": "485703766", + "text": "@英伟达GeForce ", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "https://b23.tv/7cYpOev\ncncs[青春烟火静态表情包_比心心][青春烟火静态表情包_比心心]​//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092278374586384390", + "pub_time": "7分钟前", + "user": { + "face": "https://i0.hdslb.com/bfs/baselabs/ad8743f86fbf3c0afe80505ef2fcf7c567d99cd5.png", + "face_nft": true, + "mid": 3546570991601673, + "name": "敷料", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/open/e9857ee50a657bf8bc004296d1486522489f9ce9.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/open/e9857ee50a657bf8bc004296d1486522489f9ce9.png", + "image_enhance_frame": "", + "n_pid": 1733371830001, + "name": "元大头像挂件", + "pid": -1794957583 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1724774400000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 1, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "//", + "text": "//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092277777626824725", + "pub_time": "9分钟前", + "user": { + "face": "https://i0.hdslb.com/bfs/face/3283cc839ebb4f745891ef2b3eb52b608dc6287e.jpg", + "face_nft": false, + "mid": 241814478, + "name": "巧克力糖三角", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1756569600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "转发动态//", + "text": "转发动态//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": " 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "转发动态//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092277631582208005", + "pub_time": "10分钟前", + "user": { + "face": "https://i2.hdslb.com/bfs/face/44b28a33ee43080ba8ce3b004f61c6f6a8f84ae2.jpg", + "face_nft": false, + "mid": 385330502, + "name": "LunariaFox", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1671292800000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 1, + "vip_pay_type": 0 + } + } + }, + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "转发动态//", + "text": "转发动态//", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@英伟达GeForce", + "rid": "485703766", + "text": "@英伟达GeForce", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "text": ":热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E8%A3%82%E5%8F%98%E5%A4%A9%E5%9C%B0s1%23", + "orig_text": "#裂变天地s1#", + "text": "#裂变天地s1#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23CS2%23", + "orig_text": "#CS2#", + "text": "#CS2#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23TYLOO%23", + "orig_text": "#TYLOO#", + "text": "#TYLOO#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%23%E4%B8%AD%E5%9B%BD%E5%A4%A9%E7%A6%84%E5%88%9B%E5%8E%86%E5%8F%B2%E5%A4%BA%E5%86%A0%23", + "orig_text": "#中国天禄创历史夺冠#", + "text": "#中国天禄创历史夺冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + } + ], + "text": "转发动态//@英伟达GeForce:热爱从未褪色,拼搏终有回响!\n恭喜 TYLOO 站上了世界冠军的领奖台!\n这就是 GEFORCE,这就是 CS:GO,这就是 TYLOO!\n关注@英伟达GeForce 并转发该条动态内容,我们将抽选 3 位小伙伴获得【100元京东E卡】一张!\n#裂变天地s1##CS2##TYLOO##中国天禄创历史夺冠#" + }, + "id_str": "1092276742539706437", + "pub_time": "13分钟前", + "user": { + "face": "https://i0.hdslb.com/bfs/face/3485b31e66a5edcc35da91daccf92d8374b75109.jpg", + "face_nft": false, + "mid": 261738771, + "name": "ak青旗沽酒", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1721318400000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 1, + "vip_pay_type": 0 + } + } + } + ], + "offset": "1092276742539706437", + "total": 1290 + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-07-22T03:25:21.567940914Z --> + +## 获取动态中图片 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/pic + +*请求方法: GET* + +<!-- #1303 --> + +**URL 参数:** + +| 字段 | 类型 | 内容 | 必要性 | 备注 | +| ---- | ------ | ------- | ------ | ---- | +| id | number | 动态 id | 必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | | +| data | object[] | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| height | number | 图片高度 | | +| size | number | 图片大小 | k | +| src | string | 图片 URL | | +| width | number | 图片宽度 | | + +**示例:** + +```shell +-curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/pic' \ +--url-query 'id=1092404028147499014' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": [ + { + "height": 20112, + "size": 9609.4560546875, + "src": "http://i0.hdslb.com/bfs/new_dyn/b3ca19b4a65c2f847fa91d925495eb3f36081646.jpg", + "width": 4167 + }, + { + "height": 21146, + "size": 6948.43359375, + "src": "http://i0.hdslb.com/bfs/new_dyn/60b1549d91ce580a8499f63368b283fc36081646.jpg", + "width": 4167 + }, + { + "height": 29531, + "size": 10990.845703125, + "src": "http://i0.hdslb.com/bfs/new_dyn/598a158fff8a5814fe85ae0f9212b1cf36081646.jpg", + "width": 4167 + } + ], + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-07-23T01:44:31.058550428Z --> + +## 获取转发动态信息 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/forward/item + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**URL 参数:** + +| 字段 | 类型 | 内容 | 必要性 | 备注 | +| ---- | ------ | ------ | ---- | ---- | +| id | number | 动态 id | 必要 | | +| timezone_offset | number | 时区偏移 | 非必要 | `(new Date).getTimezoneOffset()` | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功<br />500: 加载错误,请稍后再试<br />4101105: 请求数据发生错误, 请刷新或稍后重试 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| item | object | 动态信息 | 套了个娃 | + +`data.item` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | object | 动态内容 | | +| id_str | string | 动态 id 字符串 | | +| pub_time | string | 发布时间 | | +| user | object | 发布用户信息 | | + +`data.item.desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| rich_text_nodes | object[] | 富文本节点 | 参见 [富文本节点](../opus/rich_text_node.md) | +| text | string | 纯文本内容 | | + +`data.item.user` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| face | string | 头像 URL | | +| face_nft | boolean | | | +| mid | number | 用户 mid (UID) | | +| name | string | 用户名 | | +| official | object | 认证信息 | | +| pendant | object | 装扮信息 | | +| vip | object | 大会员信息 | | + +`data.item.user.official` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | string | | | +| role | number | | | +| title | string | | | +| type | number | | | + +`data.item.user.pendant` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| expire | number | | | +| image | string | | | +| image_enhance | string | | | +| image_enhance_frame | string | | | +| n_pid | number | | | +| name | string | | | +| pid | number | | | + +`data.item.user.vip` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| avatar_icon | object | | | +| avatar_subscript | number | | | +| avatar_subscript_url | string | | | +| due_date | number | | | +| label | object | | | +| nickname_color | string | | | +| role | number | | | +| status | number | | | +| theme_type | number | | | +| tv_due_date | number | | | +| tv_vip_pay_type | number | | | +| tv_vip_status | number | | | +| type | number | | | +| vip_pay_type | number | | | + +`data.item.user.vip.avatar_icon` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| icon_resource | object | | | +| icon_type | number | | | + +`data.item.user.vip.avatar_icon.icon_resource` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | + +`data.item.user.vip.label` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| bg_color | string | | | +| bg_style | number | | | +| border_color | string | | | +| img_label_uri_hans | string | | | +| img_label_uri_hans_static | string | | | +| img_label_uri_hant | string | | | +| img_label_uri_hant_static | string | | | +| label_theme | string | | | +| path | string | | | +| text | string | | | +| text_color | string | | | +| use_img_label | boolean | | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/forward/item' \ +--url-query 'id=1100082020923473952' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "item": { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "分享视频", + "text": "分享视频", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "分享视频" + }, + "id_str": "1074491510557245446", + "pub_time": "06月04日", + "user": { + "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "face_nft": false, + "mid": 293793435, + "name": "社会易姐QwQ", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "https://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png", + "n_pid": 2511, + "name": "初音未来13周年", + "pid": 2511 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1770825600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 1640793600, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + } + } + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-08-12T08:52:29.430524983Z --> diff --git a/docs/dynamic/dynamic_enum.md b/docs/dynamic/dynamic_enum.md new file mode 100644 index 0000000..6e2fa5b --- /dev/null +++ b/docs/dynamic/dynamic_enum.md @@ -0,0 +1,240 @@ +# 动态类型对照 + +## 动态类型 + +| 类型 | 说明 | comment_id_str | comment_type |rid_str| 示例 | +| --- | --- | --- | --- | --- | --- | +| DYNAMIC_TYPE_NONE | 无效动态 |||| [716510857084796964](https://t.bilibili.com/716510857084796964) | +| DYNAMIC_TYPE_FORWARD | 动态转发 |动态本身id|17||| +| DYNAMIC_TYPE_AV | 投稿视频 |视频AV号| 1 |视频AV号|| +| DYNAMIC_TYPE_PGC | 剧集(番剧、电影、纪录片) |剧集分集AV号| 1 |剧集分集EP号|| +| DYNAMIC_TYPE_COURSES | ||| || +| DYNAMIC_TYPE_WORD | 纯文字动态 |动态本身id|17|| [718377531474968613](https://t.bilibili.com/718377531474968613) | +| DYNAMIC_TYPE_DRAW | 带图动态 |相簿id|11|相簿id| [718384798557536290](https://t.bilibili.com/718384798557536290) | +| DYNAMIC_TYPE_ARTICLE | 投稿专栏 |专栏cv号|12|专栏cv号| [718372214316990512](https://t.bilibili.com/718372214316990512) | +| DYNAMIC_TYPE_MUSIC | 音乐 | 音频au号 | 14 | 音频au号 | [128788657410273954](https://t.bilibili.com/128788657410273954) | +| DYNAMIC_TYPE_COMMON_SQUARE | 装扮<br/>剧集点评<br/>普通分享 ||17|| [551309621391003098](https://t.bilibili.com/551309621391003098)<br/>[716503778995470375](https://t.bilibili.com/716503778995470375)<br/>[716481612656672789](https://t.bilibili.com/716481612656672789) | +| DYNAMIC_TYPE_COMMON_VERTICAL | ||| || +| DYNAMIC_TYPE_LIVE | 直播间分享 |动态本身id||直播间id| [216042859353895488](https://t.bilibili.com/216042859353895488) | +| DYNAMIC_TYPE_MEDIALIST | 收藏夹 |收藏夹ml号|19|收藏夹ml号| [534428265320147158](https://t.bilibili.com/534428265320147158) | +| DYNAMIC_TYPE_COURSES_SEASON | 课程 |||| [717906712866062340](https://t.bilibili.com/717906712866062340) | +| DYNAMIC_TYPE_COURSES_BATCH | |||| | +| DYNAMIC_TYPE_AD | ||| || +| DYNAMIC_TYPE_APPLET | ||| || +| DYNAMIC_TYPE_SUBSCRIPTION | ||| || +| DYNAMIC_TYPE_LIVE_RCMD | 直播开播 |动态本身id|17|live_id| [718371505648435205](https://t.bilibili.com/718371505648435205) | +| DYNAMIC_TYPE_BANNER | ||| || +| DYNAMIC_TYPE_UGC_SEASON | 合集更新 |视频AV号|1|视频AV号| [718390979031203873](https://t.bilibili.com/718390979031203873) | +| DYNAMIC_TYPE_SUBSCRIPTION_NEW | ||| || + +## 富文本节点类型 + +参见 [图文富文本节点类型](../opus/rich_text_nodes.md#富文本节点类型) + +## 作者类型 + +| 类型 | 说明 | 示例 | +|------------------------|------|-----| +| AUTHOR_TYPE_NONE | | | +| AUTHOR_TYPE_NORMAL | 普通更新 | | +| AUTHOR_TYPE_PGC | 剧集更新 | | +| AUTHOR_TYPE_UGC_SEASON | 合集更新 | | + +## + +| 类型 | 说明 | 示例 | +|-----------------|-----|-----| +| EMOJI_TYPE_NONE | | | +| EMOJI_TYPE_OLD | | | +| EMOJI_TYPE_NEW | | | +| EMOJI_TYPE_VIP | | | + +## 相关内容卡片类型 + +| 类型 | 说明 | 示例 | +|-------------------------|------|--------------------------------------------------------------------------| +| ADDITIONAL_TYPE_NONE | | | +| ADDITIONAL_TYPE_PGC | | | +| ADDITIONAL_TYPE_GOODS | 商品信息 | | +| ADDITIONAL_TYPE_VOTE | 投票 | [716365292050055176](https://t.bilibili.com/716365292050055176) | +| ADDITIONAL_TYPE_COMMON | 一般类型 | 游戏<br/>[716357878942793745](https://t.bilibili.com/716357878942793745) | +| ADDITIONAL_TYPE_MATCH | 比赛信息? | | +| ADDITIONAL_TYPE_UP_RCMD | | | +| ADDITIONAL_TYPE_UGC | 视频跳转 | [716489253410832401](https://t.bilibili.com/716489253410832401) | +| ADDITIONAL_TYPE_RESERVE | | 直播预约<br/>[716524987542929443](https://t.bilibili.com/716524987542929443) | +| ADDITIONAL_TYPE_UPOWER_LOTTERY | 充电专属抽奖 | | + +## + +| 类型 | 说明 | 示例 | +|-------------------------------|-----|-----| +| ADDITIONAL_BUTTON_TYPE_NONE | | | +| ADDITIONAL_BUTTON_TYPE_JUMP | | | +| ADDITIONAL_BUTTON_TYPE_BUTTON | | | + +## + +| 类型 | 说明 | 示例 | +|----------------------------------|-----|-----| +| ADDITIONAL_BUTTON_STATUS_NONE | | | +| ADDITIONAL_BUTTON_STATUS_UNCHECK | | | +| ADDITIONAL_BUTTON_STATUS_CHECK | | | + +## + +| 类型 | 说明 | 示例 | +|-------------------------------|-----|-----| +| ADD_BUTTON_CLICK_TYPE_NONE | | | +| ADD_BUTTON_CLICK_TYPE_RESERVE | | | + +## + +| 类型 | 说明 | 示例 | +|-------------------------|-----|-----| +| DISABLE_STATE_HIGHLIGHT | | | +| DISABLE_STATE_GRAY | | | + +## + +| 类型 | 说明 | 示例 | +|----------------------------|-----|-----| +| ADD_BUTTON_BG_STYLE_FILL | | | +| ADD_BUTTON_BG_STYLE_STROKE | | | +| ADD_BUTTON_BG_STYLE_GRAY | | | + +## + +| 类型 | 说明 | 示例 | +|----------------------------------|-----|-----| +| HIGHLIGHT_TEXT_STYLE_TYPE_NONE | | | +| HIGHLIGHT_TEXT_STYLE_TYPE_ACTIVE | | | + +## 动态主体类型 + +| 类型 | 说明 | 示例 | +|-----------------------------|-------|-----------------------------------------------------------------| +| MAJOR_TYPE_NONE | 动态失效 | [716510857084796964](https://t.bilibili.com/716510857084796964) | +| MAJOR_TYPE_NONE | 转发动态 | [866756840240709701](https://www.bilibili.com/opus/866756840240709701) | +| MAJOR_TYPE_OPUS | 图文动态 | [870176712256651305](https://www.bilibili.com/opus/870176712256651305) | +| MAJOR_TYPE_ARCHIVE | 视频 | [716526237365829703](https://t.bilibili.com/716526237365829703) | +| MAJOR_TYPE_PGC | 剧集更新 | [645981661420322824](https://t.bilibili.com/645981661420322824) | +| MAJOR_TYPE_COURSES | | | +| MAJOR_TYPE_DRAW | 带图动态 | [716358050743582725](https://t.bilibili.com/716358050743582725) | +| MAJOR_TYPE_ARTICLE | | | +| MAJOR_TYPE_MUSIC | 音频更新 | | +| MAJOR_TYPE_COMMON | 一般类型 | [716481612656672789](https://t.bilibili.com/716481612656672789) | +| MAJOR_TYPE_LIVE | 直播间分享 | [267505569812738175](https://t.bilibili.com/267505569812738175) | +| MAJOR_TYPE_MEDIALIST | | | +| MAJOR_TYPE_APPLET | | | +| MAJOR_TYPE_SUBSCRIPTION | | | +| MAJOR_TYPE_LIVE_RCMD | 直播状态 | | +| MAJOR_TYPE_UGC_SEASON | 合计更新 | [716509100448415814](https://t.bilibili.com/716509100448415814) | +| MAJOR_TYPE_SUBSCRIPTION_NEW | | | +| MAJOR_TYPE_UPOWER_COMMON | 充电相关 | [1087983622038749191](https://t.bilibili.com/1087983622038749191) | + +## + +| 类型 | 说明 | 示例 | +|-----------------|-----|-----| +| MEDIA_TYPE_NONE | | | +| MEDIA_TYPE_UGC | | | +| MEDIA_TYPE_PGC | | | +| MEDIA_TYPE_LIVE | | | + +## + +| 类型 | 说明 | 示例 | +|--------------------------|-----|-----| +| PGC_SUB_TYPE_NONE | | | +| PGC_SUB_TYPE_BANGUMI | | | +| PGC_SUB_TYPE_MOVIE | | | +| PGC_SUB_TYPE_DOCUMENTARY | | | +| PGC_SUB_TYPE_DOMESTIC | | | +| PGC_SUB_TYPE_TV | | | + +## + +| 类型 | 说明 | 示例 | +|----------------------|-----|-----| +| DRAW_TAG_TYPE_NONE | | | +| DRAW_TAG_TYPE_COMMON | | | +| DRAW_TAG_TYPE_GOODS | | | +| DRAW_TAG_TYPE_USER | | | +| DRAW_TAG_TYPE_TOPIC | | | +| DRAW_TAG_TYPE_LBS | | | + +## + +| 类型 | 说明 | 示例 | +|----------------------------------|-----|-----| +| MAJOR_COMMON_STYLE_TYPE_NONE | | | +| MAJOR_COMMON_STYLE_TYPE_SQUARE | | | +| MAJOR_COMMON_STYLE_TYPE_VERTICAL | | | + +## + +| 类型 | 说明 | 示例 | +|---------------------|-----|-----| +| RESERVE_TYPE_NONE | | | +| RESERVE_TYPE_RECALL | | | + +## + +| 类型 | 说明 | 示例 | +|--------------------------|-----|-----| +| LIVE_STATE_TYPE_NONE | | | +| LIVE_STATE_TYPE_LIVE | | | +| LIVE_STATE_TYPE_ROTATION | | | + +## + +| 类型 | 说明 | 示例 | +|----------------------------------|-----|-----| +| SUBSCRIPTION_NEW_STYLE_TYPE_NONE | | | +| SUBSCRIPTION_NEW_STYLE_TYPE_DRAW | | | +| SUBSCRIPTION_NEW_STYLE_TYPE_LIVE | | | + +## 右上角三点菜单 + +| 类型 | 说明 | 示例 | +|------------------------------|---------|-----| +| THREE_POINT_DELETE | 删除 | | +| THREE_POINT_REPORT | 举报 | | +| THREE_POINT_FOLLOWING | 关注/取消关注 | | +| THREE_POINT_TOP | 置顶/取消置顶 | | +| THREE_POINT_UNFAV | | | +| THREE_POINT_UNSUBS | | | +| THREE_POINT_TOPIC_REPORT | | | +| THREE_POINT_TOPIC_IRRELEVANT | | | +| THREE_POINT_RCMD_RESOURCE | | | +| THREE_POINT_RCMD_FEEDBACK | | | + +## + +| 类型 | 说明 | 示例 | +|--------------------|-----|-----| +| FOLD_TYPE_NONE | | | +| FOLD_TYPE_PUBLISH | | | +| FOLD_TYPE_FREQUENT | | | +| FOLD_TYPE_UNITE | | | +| FOLD_TYPE_LIMIT | | | + +## + +| 类型 | 说明 | 示例 | +|------------------------------|-----|-----| +| DYN_STATUS_TYPE_NONE | | | +| DYN_STATUS_TYPE_NORMAL | | | +| DYN_STATUS_TYPE_AUDITING | | | +| DYN_STATUS_TYPE_SELF_VISIBLE | | | +| DYN_STATUS_TYPE_DELETED | | | + +## + +| 类型 | 说明 | 示例 | +|---------------|-----|-----| +| SCENE_DETAIL | | | +| SCENE_HOT | | | +| SCENE_GENERAL | | | +| SCENE_SPACE | | | +| SCENE_TOPIC | | | diff --git a/docs/dynamic/get_dynamic_detail.md b/docs/dynamic/get_dynamic_detail.md new file mode 100644 index 0000000..2457122 --- /dev/null +++ b/docs/dynamic/get_dynamic_detail.md @@ -0,0 +1,538 @@ +# 特定动态卡片信息 + +## 获取特定动态卡片信息 + +> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail + +*请求方法: GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ---------- | ------ | -------- | +| dynamic_id | id | 动态id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | number | 返回值 | 0: 成功<br />4128001: 请求数据发生错误,请刷新或稍后重试 | +| data | object | 信息本体 | 失败时为 `null` | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------- | ------------ | +| card | object | 动态卡片内容 | 当动态不存在/删除时不返回此项 | + +`data`中的`card`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| activity_infos | obj | 该条动态参与的活动 |当此条动态没有参与任何活动时不显示此项 | +| card | str | 动态详细信息 | 会跟随此动态类型不同发生一定的变化,评论数、点赞数等相关信息参考`desc`字段, 详细可见 [动态详细信息字段](card_info.md) | +| desc | obj | 动态相关信息 | 会跟随此动态类型不同发生一定的变化,详细信息(例如动态描述等)参考`card`字段 | +| display | obj | 动态部分的可操作项 | 会随着动态类型发生变化,主要用于显示动态 | +| extend_json | str | 动态扩展项 | 会随着动态类型发生变化 | + +**示例:** + +获取`哔哩哔哩弹幕网`的动态id为`507420325550127049`动态 + +```shell +curl -G 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail' \ +--data-urlencode 'dynamic_id=507420325550127049' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "card": { + "desc": { + "uid": 8047632, + "type": 8, + "rid": 204774719, + "acl": 0, + "view": 0, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 507420325550127040, + "timestamp": 1616981401, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 8047632, + "uname": "哔哩哔哩弹幕网", + "face": "https://i0.hdslb.com/bfs/face/0c84b9f4ad546d3f20324809d45fc439a2a8ddab.jpg" + }, + "card": { + "official_verify": { + "type": -1 + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1924963200000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "十年大会员", + "label_theme": "ten_annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 7, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "哔哩哔哩 干杯 ( ゜- ゜)つロ", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": "" + } + }, + "spec_type": 0, + "uid_type": 1, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "507420325550127049", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "204774719", + "origin": null, + "bvid": "BV1Dh411S7sS", + "previous": null + }, + "card": "{\"aid\":204774719,\"cid\":316514988,\"ctime\":1616981401,\"desc\":\"2021年3月29日9:30(北京时间),B站在中国香港港交所成功挂牌二次上市。欢迎来到bilibili这座乐园,和超过2亿中国年轻人一起表达自我、拥抱世界。\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":290,\"dynamic\":\"\",\"first_frame\":\"\",\"jump_url\":\"bilibili://video/204774719/?page=1\\u0026player_width=1920\\u0026player_height=1080\\u0026player_rotate=0\",\"owner\":{\"face\":\"https://i0.hdslb.com/bfs/face/0c84b9f4ad546d3f20324809d45fc439a2a8ddab.jpg\",\"mid\":8047632,\"name\":\"哔哩哔哩弹幕网\"},\"pic\":\"http://i0.hdslb.com/bfs/archive/bcbcac6560268ef9cbe59fbf759ac28adf5e0432.jpg\",\"pubdate\":1616981400,\"short_link_v2\":\"\",\"stat\":{\"aid\":204774719,\"coin\":9016,\"danmaku\":742,\"dislike\":0,\"favorite\":5463,\"like\":32802,\"reply\":1603,\"share\":2517,\"view\":278278},\"state\":0,\"tid\":207,\"title\":\"欢迎来到2亿年轻人的乐园——bilibili 回香港上市啦!\",\"tname\":\"财经商业\",\"videos\":1}", + "extend_json": "{\"from\":{\"from\":\"\",\"emoji_type\":1},\"ctrl\":null,\"lott\":null}", + "display": { + "origin": null, + "usr_action_txt": "投稿了视频", + "relation": null, + "live_info": null, + "emoji_info": null, + "highlight": null + } + } + } +} +``` + +</details> + +## 最近更新UP主列表 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/portal + +*请求方式:GET* + +*认证方式:Cookie(SESSDATA) 和 Access_Token* + +**json回复:** + +*根对象* + +| 字段 | 类型 | 内容 | 备注 | +| ------- | --- | ---- | ---- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 默认为0 | +| ttl | int | 1 | 默认为1 | + +`data`对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ---------- | --- | +| live_users | null | 不明 | | +| my_info | obj | 个人关注的一些信息 | | +| up_list | array | 最近更新的up主列表 | | + +`my_info`对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ----------- | ---- | +| dyns | int | 个人动态 | | +| face | str | 头像 | 图像地址 | +| face_nft | int | 不明 | | +| follower | int | 粉丝数量 | | +| following | int | 我的关注 | | +| level_info | obj | 本人等级内容 | | +| mid | int | 账户mid | | +| name | str | 账户名称 | | +| offcial | obj | 认证信息 | | +| space_bg | str | 账户个人中心的背景横幅 | 图像地址 | +| vip | obj | vip信息 | | + +`my_info`中的`level_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | --- | ---- | ---------- | +| current_level | num | 当前等级 | 0-6级 | +| current_min | num | 0 | | +| current_exp | num | 0 | | +| next_exp | num | 0 | | + +`my_info`中的`Official`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | --- | ---- | ------------------------------------- | +| role | num | 认证类型 | 见[用户认证类型一览](../user/official_role.md) | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无<br />0:认证 | + +`my_info`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | --- | --------- | -------------------------------------------- | +| type | num | 会员类型 | 0:无<br />1:月大会员<br />2:年度及以上大会员 | +| status | num | 会员状态 | 0:无<br />1:有 | +| due_date | num | 会员过期时间 | Unix时间戳(毫秒) | +| vip_pay_type | num | 支付类型 | 0:未支付(常见于官方账号)<br />1:已支付(以正常渠道获取的大会员均为此值) | +| theme_type | num | 0 | 作用尚不明确 | +| label | obj | 会员标签 | | +| avatar_subscript | num | 是否显示会员图标 | 0:不显示<br />1:显示 | +| nickname_color | str | 会员昵称颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 | +| role | num | 大角色类型 | 1:月度大会员<br/>3:年度大会员<br/>7:十年大会员<br/>15:百年大会员 | +| avatar_subscript_url | str | 大会员角标地址 | | +| tv_vip_status | num | 电视大会员状态 | 0:未开通 | +| tv_vip_pay_type | num | 电视大会员支付类型 | | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------- | ---- | -------- | ---------------------------------------------------------------------------------------------------------------------------- | +| path | str | 空 | 作用尚不明确 | +| text | str | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` | +| label_theme | str | 会员标签 | vip:大会员<br />annual_vip:年度大会员<br />ten_annual_vip:十年大会员<br />hundred_annual_vip:百年大会员<br/>fools_day_hundred_annual_vip:最强绿鲤鱼 | +| text_color | str | 会员标签 | | +| bg_style | num | 1 | | +| bg_color | str | 会员标签背景颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 | +| border_color | str | 会员标签边框颜色 | 未使用 | +| use_img_label | bool | `true` | | +| img_label_uri_hans | str | `空串` | | +| img_label_uri_hant | str | `空串` | | +| img_label_uri_hans_static | str | 大会员牌子图片 | 简体版 | +| img_label_uri_hant_static | str | 大会员牌子图片 | 繁体版 | + +`data`中的`up_list`数组对象 + +| 字段 | 属性 | 内容 | 备注 | +| ----------------- | ---- | --------- | --- | +| face | str | UP主头像 | | +| has_update | bool | 最近更新是否更新? | | +| is_reserve_recall | bool | 不明 | | +| mid | int | UP主mid | | +| uname | str | up主昵称 | | + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "live_users": null, + "my_info": { + "dyns": 67, + "face": "http://i0.hdslb.com/bfs/face/44253f4e588d72d4c10dde495752142b588455af.jpg", + "face_nft": 0, + "follower": 15, + "following": 77, + "level_info": { + "current_exp": 23846, + "current_level": 5, + "current_min": 10800, + "level_up": -62135596800, + "next_exp": 28800 + }, + "mid": 108534711, + "name": "CiaoMyTime", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "space_bg": "http://i1.hdslb.com/bfs/space/aea2dd7b8894ce31d578d4fad6a7188c7b49cb2f.jpg", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1670256000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/3788b674c69072f1ee252b79a31ecc8c43af3039.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/jwXBWRVwa5.png", + "label_theme": "vip", + "path": "", + "text": "大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "", + "role": 1, + "status": 1, + "theme_type": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 1, + "vip_pay_type": 0 + } + }, + "up_list": [ + { + "face": "https://i2.hdslb.com/bfs/face/09a47992c9cb08f81effede594ddf014f83047fe.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 15135791, + "uname": "东北大学张引" + }, + { + "face": "https://i1.hdslb.com/bfs/face/a83b296101bb36a6f1dacb8fdfa74a57a2c29445.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 1856528671, + "uname": "陆鳐LuLu" + }, + { + "face": "https://i0.hdslb.com/bfs/face/60ec600cc9d84c74c8220ab41ce49bacfdc0895c.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 39180492, + "uname": "蒸気火鸡" + }, + { + "face": "https://i0.hdslb.com/bfs/face/986a9f29848d17b39a99e41557d56dcd1091a3a9.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 2142762, + "uname": "老戴在此" + }, + { + "face": "https://i1.hdslb.com/bfs/face/475f3c05ea494a26f5dd91b277f48b136ae63021.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 431313625, + "uname": "小蓝和他的朋友日常号" + }, + { + "face": "https://i1.hdslb.com/bfs/face/bafb36d5726f8062e578474095abb0e906fec163.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 233114659, + "uname": "碧蓝航线" + }, + { + "face": "https://i0.hdslb.com/bfs/face/39d23f3c5dd2c96fc35db5c2a98f4a8ff73a2d46.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 27534330, + "uname": "崩坏3第一偶像爱酱" + }, + { + "face": "http://i2.hdslb.com/bfs/face/f119348814f30c6bbbcc60bd63c12b8215d19d2f.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 524704055, + "uname": "大庆赶海" + }, + { + "face": "https://i0.hdslb.com/bfs/face/c4340d477356ba108098ba9a566e7ce4a54e0936.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 194326389, + "uname": "兮子cc" + }, + { + "face": "https://i2.hdslb.com/bfs/face/0455b74f73d6a83eef2d6dfbdb4ae2beda42a3ce.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 476833439, + "uname": "盾之勇者成名录" + }, + { + "face": "https://i0.hdslb.com/bfs/face/7c6cdd77937d4bbd2171241fe530e18c0c5bc58e.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 492840942, + "uname": "云视听小电视-TV" + }, + { + "face": "https://i0.hdslb.com/bfs/face/b14881845b777d925876f24cb46b1dc1ad5a0e27.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 1636034895, + "uname": "绝区零" + }, + { + "face": "http://i1.hdslb.com/bfs/face/3b933fe3c47976dd29f30e3a4f7f2bdfd99e8b08.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 603028270, + "uname": "乃木坂46官方" + }, + { + "face": "https://i2.hdslb.com/bfs/face/76ec72b2a530f2f24209c98b5690ef7b536040cf.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 5992670, + "uname": "云之幻" + }, + { + "face": "https://i1.hdslb.com/bfs/face/9ca9ea42fa75d9a651b354a95e8e39f48d8c30d2.jpg", + "has_update": true, + "is_reserve_recall": false, + "mid": 299359111, + "uname": "月圆之夜" + }, + { + "face": "https://i1.hdslb.com/bfs/face/c8c0adce728125167fe44371d451b3dc19a84506.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 79983517, + "uname": "一唐老狮一" + }, + { + "face": "https://i0.hdslb.com/bfs/face/68b4b212d9738c40d8a6a77beb65a6dd4415f81b.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 1861940979, + "uname": "保卫萝卜" + }, + { + "face": "https://i2.hdslb.com/bfs/face/85bab2a17646ccf442d28549e7216fd65c6adeb7.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 2162, + "uname": "GPBeta" + }, + { + "face": "https://i1.hdslb.com/bfs/face/7a41310afc08381ad0451bee8ea07f15fcc411bd.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 508963009, + "uname": "HiiroVTuber" + }, + { + "face": "https://i1.hdslb.com/bfs/face/b085d34fd9d2cd44641ab648cc96e7a3068eb811.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 396848107, + "uname": "不愧是姐姐大人" + }, + { + "face": "https://i0.hdslb.com/bfs/face/3f1496f48a5eb840a974fef0fd7db7a3f225fbe7.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 80304, + "uname": "亚食人" + }, + { + "face": "https://i2.hdslb.com/bfs/face/a7716fec14658ef7365b538fdce0d86eb6123ed4.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 401742377, + "uname": "原神" + }, + { + "face": "https://i0.hdslb.com/bfs/face/81d5201d6095e3802f14094a6906d1a114bc74c7.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 11131476, + "uname": "绫人太太啊" + }, + { + "face": "https://i0.hdslb.com/bfs/face/7d72e58d0ad1b401e4c59960c4b1795efbc57c3a.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 409524162, + "uname": "一线码农聊技术" + }, + { + "face": "https://i0.hdslb.com/bfs/face/5634900a3167310fcd0c6b1102ffc308c68aedd1.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 260054391, + "uname": "CHeems的日常" + }, + { + "face": "https://i2.hdslb.com/bfs/face/81a4c852925b873f42c4971c836a67ea9dd2ef41.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 361469957, + "uname": "软件工艺师" + }, + { + "face": "https://i2.hdslb.com/bfs/face/99e9eb37657f67f547b546b72592d70ab8ce1a4b.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 41059757, + "uname": "刻刻帝TokisakiKuru" + }, + { + "face": "https://i1.hdslb.com/bfs/face/affbd5780e44ec1340f60c5283e81cbee2d9a21a.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 156785512, + "uname": "Swety_Core" + }, + { + "face": "http://i0.hdslb.com/bfs/face/f576c8bd9eb4ec7f7776880581bea2d6c53d1b65.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 298683153, + "uname": "猫和老鼠官方手游" + }, + { + "face": "https://i1.hdslb.com/bfs/face/5161d6bd003c24065c0d0ab2ae2ce7f37f0f607b.jpg", + "has_update": false, + "is_reserve_recall": false, + "mid": 159440647, + "uname": "Uki----" + } + ] + } +} +``` + +</details> diff --git a/docs/dynamic/nav.md b/docs/dynamic/nav.md new file mode 100644 index 0000000..85a2c24 --- /dev/null +++ b/docs/dynamic/nav.md @@ -0,0 +1,1167 @@ +# 获取导航栏动态 + +## 获取导航栏动态列表 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/nav + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------------- | ---- | ---------- | ------ | ----------------------- | +| update_baseline | num | 更新基线 | 非必要 | 获取新动态时使用 | +| offset | num | 分页偏移量 | 非必要 | 翻页时使用 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------------------- | +| code | num | 返回值 | 0: 成功 <br />-101: 未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | ---------------------------- | -------------------------------------------------- | +| has_more | bool | 是否有更多数据 | | +| items | array | 数据数组 | | +| offset | str | 偏移量 | 等于`items`中最后一条记录的id<br/>获取下一页时使用 | +| update_baseline | str | 更新基线 | 等于`items`中第一条记录的id_str | +| update_num | num | 本次获取获取到了多少条新动态 | 在更新基线以上的动态条数 | + +`data`对象中`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ---------------------------- | +| author | obj | UP主 | 参考 [MODULE_TYPE_AUTHOR](../opus/features.md#module-type-author) | +| cover | str | 封面URL | | +| id_str | str | 动态id | | +| pub_time | str | 发布时间 | 文字表述的相对时间 | +| rid | num | 关联id | 视频即aid | +| title | str | 标题 | | +| type | num | 动态类型 | 8: 视频 | +| visible | bool | 是否可见 | true:可见<br/>false:不可见 | + +**示例:** + +获取导航栏动态列表 + +```shell +curl "https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/nav" \ + -b "SESSDATA=xxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "has_more": true, + "items": [ + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg", + "jump_url": "//space.bilibili.com/485703766/dynamic", + "mid": 485703766, + "name": "英伟达GeForce", + "official": { + "desc": "", + "role": 3, + "title": "英伟达GeForce官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 2000563200000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png", + "label_theme": "ten_annual_vip", + "path": "", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 7, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 1 + } + }, + "cover": "http://i2.hdslb.com/bfs/archive/d38b239af580eb199b4bbe55d2388cb603f6e917.jpg", + "id_str": "954636836111646759", + "jump_url": "//www.bilibili.com/video/BV181421k7bu/", + "pub_time": "1小时前", + "rid": 1556082150, + "title": "《异环》首曝丨即将支持 NVIDIA DLSS & 光线追踪技术", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i2.hdslb.com/bfs/archive/a220f26856924287c9dc4fa59c67ff38a2fcd20c.jpg", + "id_str": "954616624230433048", + "jump_url": "//www.bilibili.com/video/BV1RW421R7pE/", + "pub_time": "2小时前", + "rid": 1856122369, + "title": "【夏色祭×可波】《カタオモイ》请感受这份传达给你的心意【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/1b7e4eaf6696038bb96ff38c6d13a6b3778d6a7c.jpg", + "id_str": "954616624230432996", + "jump_url": "//www.bilibili.com/video/BV15Z421u7MX/", + "pub_time": "2小时前", + "rid": 1156047704, + "title": "Ready for my show!中日16位实力舞见高燃开场《唱》【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/5f22e930d0683b5e8d7a81f75b48fdb0c3a0f2e7.jpg", + "id_str": "954616624229384275", + "jump_url": "//www.bilibili.com/video/BV1hz421q7xP/", + "pub_time": "2小时前", + "rid": 1356132445, + "title": "阿梓×尔东和小明倾情演出《暁の車》带你重温高达经典旋律【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i2.hdslb.com/bfs/archive/04b46154e833ea1349c3302f9b9c188a45b016e9.jpg", + "id_str": "954616624228335667", + "jump_url": "//www.bilibili.com/video/BV1LS421R7sr/", + "pub_time": "2小时前", + "rid": 1506089543, + "title": "【Vox Akuma】声之恶魔低音爵士,深情演绎世界名曲【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i0.hdslb.com/bfs/archive/819d73ca191235e89a03c62889073d526b552fc2.jpg", + "id_str": "954616624033300612", + "jump_url": "//www.bilibili.com/video/BV1qM4m127wD/", + "pub_time": "2小时前", + "rid": 1306194854, + "title": "【RAB】全 部 逮 捕!萝 莉 控 的 末 日【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i2.hdslb.com/bfs/archive/01dd21a65db17705479ee4ee550a79856847264e.jpg", + "id_str": "954616624020717623", + "jump_url": "//www.bilibili.com/video/BV1rZ421K7yT/", + "pub_time": "2小时前", + "rid": 1156076206, + "title": "【可波×夏色祭】对你一见钟情啦!《5201314》开启绝赞告白【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/d79b28afc3273d5edb211d03ddc70c45999d57f7.jpg", + "fold": { + "ids": [ + "954616624019669009" + ], + "statement": "展开1条相关动态", + "type": 3, + "users": [] + }, + "id_str": "954616624019669032", + "jump_url": "//www.bilibili.com/video/BV1oE421c7XV/", + "pub_time": "2小时前", + "rid": 1656233700, + "title": "【洛天依】来自2024的《霜雪千年》还记否这一曲喜悲霜雪【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/93b809e050e639c9d8e8e379da96a4c2216ae755.jpg", + "jump_url": "//space.bilibili.com/36081646/dynamic", + "mid": 36081646, + "name": "洛天依", + "official": { + "desc": "", + "role": 2, + "title": "2023年度原创音乐、洛天依官方账号", + "type": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1764777600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/d79b28afc3273d5edb211d03ddc70c45999d57f7.jpg", + "id_str": "954616624019669009", + "jump_url": "//www.bilibili.com/video/BV1oE421c7XV/", + "pub_time": "2小时前", + "rid": 1656233700, + "title": "【洛天依】来自2024的《霜雪千年》还记否这一曲喜悲霜雪【BML2024单品】", + "type": 8, + "visible": false + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/cbbbb6e35c7680261a8a1fb3f582e04de14cbb50.jpg", + "id_str": "954616624002891844", + "jump_url": "//www.bilibili.com/video/BV1Fb421H7YQ/", + "pub_time": "2小时前", + "rid": 1806140865, + "title": "【ChiliChill】《我的悲伤是水做的》,描绘雨天的淡蓝色心情【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/b1f8744db9bad8a4a89bd9fa3fab0d128b347edb.jpg", + "id_str": "954616623998697505", + "jump_url": "//www.bilibili.com/video/BV12m421g759/", + "pub_time": "2小时前", + "rid": 1606234911, + "title": "成为挣脱《Cage》的小鸟,露米Lumi深情吟唱人类希望之歌【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i2.hdslb.com/bfs/archive/52e82dc68f3cbbb598d27437c33e996718e07924.jpg", + "id_str": "954616623995552002", + "jump_url": "//www.bilibili.com/video/BV181421k74U/", + "pub_time": "2小时前", + "rid": 1556081716, + "title": "型月组曲优雅串烧《若能看到明月》🌙🌙🌙【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i0.hdslb.com/bfs/archive/8558fe6746c43182b25f6a590f47b9673d47ba67.jpg", + "id_str": "954616623994503209", + "jump_url": "//www.bilibili.com/video/BV1jW421d7ce/", + "pub_time": "2小时前", + "rid": 1856192192, + "title": "Finana Ryugu超甜演绎童年回忆《プレパレード》最清纯的恋爱预演~【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i2.hdslb.com/bfs/archive/1ebd8cbd38eb9db9451df9978b20bee445d8fea0.jpg", + "id_str": "954616623993454708", + "jump_url": "//www.bilibili.com/video/BV1cw4m1Y7Zs/", + "pub_time": "2小时前", + "rid": 1106145687, + "title": "元气补给站《MORE!JUMP!MORE!》在BML舞台起跳!【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/bc1de2b7e27a5385e3e913fc552b86b744b49fb8.jpg", + "id_str": "954616623990308904", + "jump_url": "//www.bilibili.com/video/BV1QH4y1w7hC/", + "pub_time": "2小时前", + "rid": 1056107813, + "title": "【星瞳】华丽演绎《迷宮バタフライ》🦋一曲重温童年之梦【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i0.hdslb.com/bfs/archive/63617f9210ab2e996f75e8e2fb46c5dc73aeed35.jpg", + "id_str": "954616623980871832", + "jump_url": "//www.bilibili.com/video/BV1L1421b7XJ/", + "pub_time": "2小时前", + "rid": 1556117158, + "title": "奏响《葬送的破阵曲》,按捺不住战斗的心了!【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg", + "jump_url": "//space.bilibili.com/403748305/dynamic", + "mid": 403748305, + "name": "BML制作指挥部", + "official": { + "desc": "", + "role": 3, + "title": "Bilibili Macro Link官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1750176000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i0.hdslb.com/bfs/archive/c3c470e309acef1d8c8f2ce79ed753f9bca50879.jpg", + "id_str": "954616623979823254", + "jump_url": "//www.bilibili.com/video/BV1uy411B7Ca/", + "pub_time": "2小时前", + "rid": 1956028036, + "title": "【猫MEME】转生成只能用MEME讲话的平凡上班族【BML2024单品】", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg", + "jump_url": "//space.bilibili.com/407045223/dynamic", + "mid": 407045223, + "name": "二次元的中科院物理所", + "official": { + "desc": "", + "role": 6, + "title": "中国科学院物理研究所官方账号", + "type": 1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1745769600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 1626364800, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/056db2ac79801d853bebcd41c247788d8ccdb795.jpg", + "id_str": "954609313946533894", + "jump_url": "//www.bilibili.com/video/BV1Wz421q7n5/", + "pub_time": "3小时前", + "rid": 1356075945, + "title": "暑期不失约!第六季《科学公开课》震撼来袭!", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp", + "jump_url": "//space.bilibili.com/686127/dynamic", + "mid": 686127, + "name": "籽岷", + "official": { + "desc": "", + "role": 1, + "title": "2023百大UP主、知名游戏UP主", + "type": 0 + }, + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 4845196800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/c16005a5b39164b3536cbd45618a5edd597a1c51.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/Pzrd8zmpQD.png", + "label_theme": "hundred_annual_vip", + "path": "", + "text": "百年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 15, + "status": 1, + "theme_type": 0, + "tv_due_date": 1692288000, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 1 + } + }, + "cover": "http://i1.hdslb.com/bfs/archive/170237c4589a086afd7d62823765de1cc7306555.jpg", + "id_str": "954478850029387784", + "jump_url": "//www.bilibili.com/video/BV1Jz421q7JH/", + "pub_time": "11小时前", + "rid": 1356097140, + "title": "我的世界 冷门原版生物娘化 材质包", + "type": 8, + "visible": true + }, + { + "author": { + "face": "https://i0.hdslb.com/bfs/face/22e6b4f3c9199b6f4397f0d8df916872d677557b.jpg", + "jump_url": "//space.bilibili.com/625267185/dynamic", + "mid": 625267185, + "name": "零度解说", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 0, + "vip_pay_type": 0 + } + }, + "cover": "http://i0.hdslb.com/bfs/archive/6f0397b546ba4da15fcd9a2e06cbcc1f68e5545c.jpg", + "id_str": "954376956212674594", + "jump_url": "//www.bilibili.com/video/BV141421b7sf/", + "pub_time": "昨天 20:30", + "rid": 1556122058, + "title": "快速提升上网速度!免费又好用,适用 Windows 10 /11,非常简单!!(2024) | 零度解说", + "type": 8, + "visible": true + } + ], + "offset": "954376956212674594", + "update_baseline": "954659517801431040", + "update_num": 0 + } +} +``` + +</details> diff --git a/docs/dynamic/publish.md b/docs/dynamic/publish.md new file mode 100644 index 0000000..a86dbab --- /dev/null +++ b/docs/dynamic/publish.md @@ -0,0 +1,555 @@ +# 发布动态 + +## 为图片动态上传图片 + +> https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +注意: 非日常类型像素宽高必须大于 420 + +**正文参数 (multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | --------------------- | ------ | ---- | +| file_up | file | 需要上传的图片文件 | 必要 | 格式仅支持 `jpg` `png` `gif` | +| category | string | 图片类型 | 不必要 | daily: 日常 (动态) (默认)<br />draw: 绘画 (画友)<br />cos: 摄影 (COSPLAY) | +| biz | string | | 不必要 | `new_dyn` | +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | number | 返回值 | 0: 成功<br />4100001: 参数错误<br />-101: 账号未登录 | +| message | string | 错误信息 | 默认为 `0` | +| data | object | 信息本体 | 成功时为有效信息 | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | -------------- | ---- | +| image_url | string | 已上传图片 URL | | +| image_width | number | 已上传图片宽度 | 像素 | +| image_height | number | 已上传图片高度 | 像素 | +| img_size | number | 已上传图片大小 | k | + +**示例:** + +上传图片 `test.png` 类型为 `日常` + +```shell +curl 'https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs' \ +-F 'file_up=@test.png' \ +-F 'category=daily' \ +-F 'csrf=xxxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "image_url": "http://i0.hdslb.com/bfs/new_dyn/8ad5640045a114b62580614cb512bbc32095498218.png", + "image_width": 73, + "image_height": 71, + "img_size": 6.261 + } +} +``` + +</details> + +## 创建投票 + +> https://api.vc.bilibili.com/vote_svr/v1/vote_svr/create_vote + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +注意: `options` 最少两个, 下标 `n` 从 `0` 开始 + +**正文参数 (multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------------------------- | ---- | ---- | ------ | ---- | +| info[title] | string | 投票标题 | 必要 | | +| info[desc] | string | 投票描述 | 非必要 | 可为空 | +| info[type] | number | 投票类型 | 必要 | 0: 文字投票<br />1: 图片投票 | +| info[choice_cnt] | number | 最多选几项 | 必要 | | +| info[duration] | number | 投票持续秒数 | 必要 | 常用:<br/>三天: 259200<br/>七天: 604800<br/>三十天: 2592000 | +| info[options]\[ n ][desc] | string | 第 n 项选项文字内容 | 必要 | | +| info[options]\[ n ][img_url] | strin | 第 n 项选项投票图片 | 非必要 || +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 非必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------------------------- | +| code | number | 返回值 | 0:成功 <br />5100001: 参数错误 | +| msg | string | 错误信息 | 成功为空 | +| message | string | 错误信息 | 跟上面那个一模一样 | +| data | object | 信息本体 | 仅在正确时既`code=0`时为有效信息 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | -------------- | ---- | +| vote_id | number | 投票 id | | +| \_gt\_ | number | 0 | | + +**示例:** + +创建一个标题为 `是否自愿开学` 持续七天的纯文本投票 + +```shell +curl -X POST 'https://api.vc.bilibili.com/vote_svr/v1/vote_svr/create_vote' \ +--data-urlencode 'info[title]=是否自愿开学' \ +--data-urlencode 'info[desc]=问卷调查:自愿开学' \ +--data-urlencode 'info[type]=0' \ +--data-urlencode 'info[choice_cnt]=1' \ +--data-urlencode 'info[duration]=604800' \ +--data-urlencode 'info[options][0][desc]=自愿' \ +--data-urlencode 'info[options][1][desc]=不自愿' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "vote_id": 4947171, + "_gt_": 0 + } +} +``` + +</details> + +## 发表纯文本动态 + +> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +**正文参数 (multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| dynamic_id | number | 0 | 必要 | | +| type | number | 4 | 必要 | | +| rid | number | 0 | 必要 | | +| content | string | 动态内容 | 必要 | | +| up_choose_comment | number | 0 | 非必要 | | +| up_close_comment | number | 0 | 非必要 | | +| extension | json | 位置信息 | 非必要 | | +| at_uids | string | 动态中 at 到的用户的 uid | 非必要 | 使用逗号`,`分隔 | +| ctrl | array | 特殊格式控制 (如 at 别人时的蓝字体和链接) | 非必要 | | +| csrf_token | string | CSRF Token (即 Cookie 中 bili_jct) | 非必要 | | +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 非必要 | | + +`extension` 参数值: + +```jsonc +{ + "emoji_type": 1, + "lbs_cfg": { + "title": "**市", + "poi": "156330200", + "show_title": "**市", + "type": 1, + "address": "**市", + "location": { + "lng": //显示的经度数值, + "lat": //显示的纬度数值 + }, + "distance": 0 + }, + "flag_cfg": {}, + "from_cfg": { + "location": { + "lat": //用户实际纬度数值, + "lng": //用户实际经度数值 + } + } +} +``` + +`ctrl` 数组中的对象: + +| 参数名 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| location | number | 从全文第几个字开始变蓝 | | +| type | number | 1 | 可能 1 代表链接到用户 mid | +| length | number | 这一段变蓝多少字 | | +| data | string | 链接目标 | 被 at 人的 mid | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | number | 返回值 | 0: 成功 | +| message | string | 错误信息 | 成功为空 | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| result | number | 0 | | +| errmsg | string | 像是服务器日志一样的东西 | | +| dynamic_id | number | 动态 id | | +| create_result | number | 1 | | +| dynamic_id_str | string | 动态 id | 字符串格式 | +| \_gt_ | number | 0 | | + +**示例:** + +<details> +<summary>纯文本:</summary> + +```bash +curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create' \ + --data-urlencode 'dynamic_id=0' \ + --data-urlencode 'type=4' \ + --data-urlencode 'rid=0' \ + --data-urlencode 'content=Hello Bug~' \ + --data-urlencode 'up_choose_comment=0' \ + --data-urlencode 'up_close_comment=0' \ + --data-urlencode 'extension={"emoji_type":1,"from":{"emoji_type":1},"flag_cfg":{}}' \ + --data-urlencode 'at_uids=' \ + --data-urlencode 'ctrl=[]' \ + --data-urlencode 'csrf_token=de2731532b4ab96bc8536da948932668' \ + --data-urlencode 'csrf=de2731532b4ab96bc8536da948932668' \ + -b 'SESSDATA=******' +``` + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "result": 0, + "errmsg": "; Create dynamic:588320531406678918, res:0, result:1; Push create kafka:0; Push create databus:0; Register comment result:0; Add outbox result:1", + "dynamic_id": 588320531406678918, + "create_result": 1, + "dynamic_id_str": "588320531406678918", + "_gt_": 0 + } +} +``` + +</details> + +<details> +<summary>at 两个人:</summary> + +动态正文 +``` +[热词系列_神仙UP]@暮光小猿wzt @社会易姐QwQ +``` + +at_uids +``` +15858903,293793435 +``` + +ctrl +```json +[ + { "location": 11, "type": 1, "length": 9, "data": "15858903" }, + { "location": 20, "type": 1, "length": 9, "data": "293793435" } +] +``` + +命令 +```bash +curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create' \ + --data-urlencode 'dynamic_id': '0' \ + --data-urlencode 'type': '4' \ + --data-urlencode 'rid': '0' \ + --data-urlencode 'content': '[热词系列_神仙UP]@暮光小猿wzt @社会易姐QwQ ' \ + --data-urlencode 'up_choose_comment': '0' \ + --data-urlencode 'up_close_comment': '0' \ + --data-urlencode 'extension': '{"emoji_type":1,"from":{"emoji_type":1},"flag_cfg":{}}' \ + --data-urlencode 'at_uids': '15858903,293793435' \ + --data-urlencode 'ctrl': '[{"location":11,"type":1,"length":9,"data":"15858903"},{"location":20,"type":1,"length":9,"data":"293793435"}]' \ + --data-urlencode 'csrf_token': 'de2731532b4ab96bc8536da948932668' \ + --data-urlencode 'csrf': 'de2731532b4ab96bc8536da948932668' \ + -b 'SESSDATA=******' +``` + +</details> + +## 发表复杂动态 + +> https://api.bilibili.com/x/dynamic/feed/create/dyn + +*请求方法:POST* + +认证方式:Cookie (SESSDATA) + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | + +**正文参数 (application/json):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| dyn_req | object | 请求本体 | 必要 | | + +`dyn_req` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| attach_card | object | 特殊卡片 | 非必要 | 如直播预约等 | +| content | object | 动态内容 | 非必要 | | +| meta | object | 元信息 | 非必要 | 大概是来源信息 | +| scene | number | 动态类型? | 必要 | 纯文本: 1 (实际同 2)<br/>带图: 2<br />4: 转发 | +| pics | object[] | 携带图片 | 非必要 | 最多九个 | +| topic | object | 话题 | 非必要 | | +| option | object | 互动设置 | 非必要 | 没有此项时默认开启评论区 | +| upload_id | string | 客户端生成的 | 非必要 | 内容为`发送人mid`+`当前秒级时间戳`+`四位随机整数`,中间用`_`隔开 | + +`dyn_req.meta` 对象: + +大概是来源信息, 示例见下 + +```json +{ + "app_meta": { + "from": "create.dynamic.web", + "mobi_app": "web" + } +} +``` + +`dyn_req.content` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ----- | -------------------- | ------ | ---- | +| contents | object[] | 动态组件对象有序数组 | 必要 | | + +`dyn_req.content.contents[]` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| raw_text | string | 文本 | 必要 | | +| type | number | 组件类型 id | 不必要 | 参见 [富文本节点类型](../opus/rich_text_nodes.md) | +| biz_id | string | 动态组件的内容id转字符串 | 不必要 | 参见 [富文本节点类型](../opus/rich_text_nodes.md) | + +`dyn_req.topic` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ------- | ------ | -------------------------- | +| from_source | string | 来源id? | 不必要 | 网页版直接选为 `dyn.web.list` | +| from_topic_id | number | 0 | 不必要 | | +| id | number | 话题id | 必要 | | +| name | string | 话题名 | 不必要 | | + +`dyn_req.pics[]` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ----- | ---------------- | ------ | ------------------------------------------------------------ | +| img_height | number | 图高 | 非必要 | 这个东西会直接原封不动传到前端,比如你都写 0 在网页上就看不见了, 但是还会加载 | +| img_width | number | 图宽 | 非必要 | 同上 | +| img_size | float | 图片文件大小(KB) | 非必要 | | +| img_src | string | 图片 URL | 必要 | | + +`dyn_req.option` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------------- | ---- | ------------ | ------ | --------------- | +| up_choose_comment | number | 精选评论flag | 非必要 | 1: 开启 | +| close_comment | number | 关闭评论flag | 非必要 | 同上, 上二选一 | + +`dyn_req.topic` 对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ------------ | ------ | -------- | +| from_source | string | `dyn.web.list` | 非必要 | 作用不明 | +| from_topic_id | number | 0 | 非必要 | 作用不明 | +| id | number | 话题id | 必要 | | +| name | string | 话题名 | 非必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | number | 返回值 | 0: 成功<br />-101: 账号未登录<br />4126021: 你没有绑定手机,无法发布动态 | +| message | string | 错误信息 | 成功为空 | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| result | number | 0 | | +| message | string | 错误信息 | | +| dyn_id | number | 动态 id | | +| dyn_id_str | string | 动态 id | 字符串格式 | +| dyn_type | number | 动态类型 | 1: 转发<br />2: 图文 | +| share_window | object | 分享提示 | 当 Cookie 不存在 `buvid3` 时存在 | + +`data.share_window` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| main_title | string | `分享后会获得更多曝光,快去分享吧` | | + +**示例:** + +<details> +<summary>Cookie 带 `buvid3`:</summary> + +动态正文 +``` +Test礼堂丁真,鉴定为一眼丁真 +``` + +带两张一样的图: + +http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png + +然后关闭评论区 + +命令 + +```bash +curl -X POST 'https://api.bilibili.com/x/dynamic/feed/create/dyn?csrf=xxxxx' \ +-b 'buvid3=114514;SESSDATA=xxxxx;' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "dyn_req": { + "content": { + "contents": [ + { + "raw_text": "Test", + "type": 1, + "biz_id": "" + }, + { + "raw_text": "礼堂丁真,鉴定为一眼丁真", + "type": 2, + "biz_id": "1463028352" + } + ] + }, + "pics": [ + { + "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png", + "img_width": 1368, + "img_height": 1500, + "img_size": 662.6005859375 + }, + { + "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png", + "img_width": 1368, + "img_height": 1500, + "img_size": 662.6005859375 + } + ], + "option": { + "close_comment": 1 + }, + "scene": 2 + } +}' +``` + +响应: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "dyn_id": 755402172521250838, + "dyn_id_str": "755402172521250838", + "dyn_type": 2, + "dyn_rid": 221621773 + } +} +``` + +</details> + +## 立即发布定时动态 + +> https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/publish_now + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ---- | +| draft_id | file | 定时动态(草稿)id | 必要 | | +| csrf | string | CSRF Token(即 Cookie 中 bili_jct) | 必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------ | +| code | number | 返回值 | 0: 成功 | +| data | object | 信息本体 | 正常为空对象 | +| message | string | 错误消息 | 正常为 `0` | +| ttl | number | 1 | | + +<details> +<summary>查看示例</summary> + + +```bash +curl -X POST 'https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/publish_now' \ +--header 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'draft_id=755409289278914611' \ +--data-urlencode 'csrf=xxx' +-b 'SESSDATA=xxxx;' +``` + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> diff --git a/docs/dynamic/space.md b/docs/dynamic/space.md new file mode 100644 index 0000000..a83f3a0 --- /dev/null +++ b/docs/dynamic/space.md @@ -0,0 +1,4473 @@ +# 用户空间动态 + +## 获取用户空间动态 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space +> +> https://api.bilibili.com/x/polymer/web-dynamic/desktop/v1/feed/space + +*请求方法: GET* + +鉴权方式: +* 未登录: 请求标头 `User-Agent` 字段, `Cookie` 需含 `buvid3`; WBI 签名, `dm_img` 系列风控 +* 已登录: 请求标头 `Cookie` 含有效 `SESSDATA` + +注: 该接口现在有一些奇奇怪怪的校验, 存在一定运气成分, 参见 [#686](https://github.com/SocialSisterYi/bilibili-API-collect/issues/686), 所以建议您还是登录吧~ + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----------------|--------|--------|-----| - | +| offset | string | 分页偏移量 | 不必要 | | +| host_mid | string | 被查询用户 UID (mid) |必要| | +| timezone_offset | number | 时区偏移| 不必要| 默认 `-480` | +| platform | string | 平台 | 不必要 | 如 `web` | +| features | string | 功能 | 不必要 | 留空为空, 默认为 `itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,forwardListHidden,decorationCard,commentsNewVersion,onlyfansAssetsV2,ugcDelete,onlyfansQaCard`, 参见 [功能模块](../opus/features.md#features) | +| web_location | string | `333.1387` | 不必要 | | +| dm_img_switch | number | `0` | 不必要 | 仅登录时存在 | +| dm_img_list | object[] | `dm_img` 系列风控 | 不必要 | 仅未登录时存在 | +| dm_img_str | string | `dm_img` 系列风控 | 不必要 | 仅未登录时存在 | +| dm_cover_img_str | string | `dm_img` 系列风控 | 不必要 | 仅未登录时存在 | +| dm_img_inter | object | `dm_img` 系列风控 | 不必要 | 仅未登录时存在 | +| x-bili-device-req-json | object | `{"platform":"web","device":"pc"}` | 不必要 | | +| x-bili-web-req-json | object | `{"spm_id":"333.1387"}` | 不必要 | | +| w_rid | string | WBI 签名 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | +| wts | number | UNIX 秒级时间戳 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | + +**JSON 回复:** + +可参考 [获取动态列表](./all.md#获取动态列表) + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?host_mid=2095498218&features=itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,forwardListHidden,decorationCard,commentsNewVersion,onlyfansAssetsV2,ugcDelete,onlyfansQaCard' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>点击查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "has_more": true, + "items": [ + { + "basic": { + "comment_id_str": "349795473", + "comment_type": 11, + "jump_url": "//www.bilibili.com/opus/1063487284684259332", + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "349795473" + }, + "id_str": "1063487284684259332", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "27分钟前", + "pub_ts": 1746450829, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "opus": { + "fold_action": [ + "展开", + "收起" + ], + "jump_url": "//www.bilibili.com/opus/1063487284684259332", + "pics": [ + { + "height": 512, + "live_url": null, + "size": 9.783203125, + "url": "http://i0.hdslb.com/bfs/new_dyn/8bc3298efe55f2fc3949678538ed5fa52095498218.png", + "width": 512 + } + ], + "summary": { + "rich_text_nodes": [ + { + "orig_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean a augue eget sapien ultricies tristique. Integer rutrum convallis elit et vestibulum. Proin porta magna id congue lobortis. Vestibulum et arcu vestibulum, dignissim est ultrices, laoreet lectus. Nam sed sem vehicula, iaculis lorem ac, tempor arcu. Aliquam nec porta sapien. Nam convallis iaculis urna, et varius dolor. Sed non pellentesque enim. Praesent molestie efficitur rutrum. Nunc sit amet tempus nisl, at sodales augue. Nunc eu risus quis eros euismod rhoncus quis at purus. Aliquam vulputate magna non enim dapibus vestibulum. Sed pellentesque leo eget imperdiet viverra. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;\n\nUt porta non ex quis porta. Proin maximus, diam eget commodo tempus, justo libero ultricies ante, feugiat elementum sem ante sit amet magna. Donec auctor arcu sed ligula imperdiet, eget iaculis nunc mollis.", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean a augue eget sapien ultricies tristique. Integer rutrum convallis elit et vestibulum. Proin porta magna id congue lobortis. Vestibulum et arcu vestibulum, dignissim est ultrices, laoreet lectus. Nam sed sem vehicula, iaculis lorem ac, tempor arcu. Aliquam nec porta sapien. Nam convallis iaculis urna, et varius dolor. Sed non pellentesque enim. Praesent molestie efficitur rutrum. Nunc sit amet tempus nisl, at sodales augue. Nunc eu risus quis eros euismod rhoncus quis at purus. Aliquam vulputate magna non enim dapibus vestibulum. Sed pellentesque leo eget imperdiet viverra. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;\n\nUt porta non ex quis porta. Proin maximus, diam eget commodo tempus, justo libero ultricies ante, feugiat elementum sem ante sit amet magna. Donec auctor arcu sed ligula imperdiet, eget iaculis nunc mollis.", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean a augue eget sapien ultricies tristique. Integer rutrum convallis elit et vestibulum. Proin porta magna id congue lobortis. Vestibulum et arcu vestibulum, dignissim est ultrices, laoreet lectus. Nam sed sem vehicula, iaculis lorem ac, tempor arcu. Aliquam nec porta sapien. Nam convallis iaculis urna, et varius dolor. Sed non pellentesque enim. Praesent molestie efficitur rutrum. Nunc sit amet tempus nisl, at sodales augue. Nunc eu risus quis eros euismod rhoncus quis at purus. Aliquam vulputate magna non enim dapibus vestibulum. Sed pellentesque leo eget imperdiet viverra. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;\n\nUt porta non ex quis porta. Proin maximus, diam eget commodo tempus, justo libero ultricies ante, feugiat elementum sem ante sit amet magna. Donec auctor arcu sed ligula imperdiet, eget iaculis nunc mollis." + }, + "title": "Lorem ipsum dolor si" + }, + "type": "MAJOR_TYPE_OPUS" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "RPG_Teng_Lin", + "rid": "357413690", + "text": "RPG_Teng_Lin", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "取消置顶", + "params": { + "dynamic_id": "1063487284684259332", + "status": true + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "1063487284684259332", + "dyn_type": 2, + "rid_str": "349795473" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 1, + "forbidden": false, + "status": false + } + }, + "module_tag": { + "text": "置顶" + } + }, + "type": "DYNAMIC_TYPE_DRAW", + "visible": true + }, + { + "basic": { + "comment_id_str": "114443295918557", + "comment_type": 1, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "114443295918557" + }, + "id_str": "1062695803784527872", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2天前", + "pub_ts": 1746266548, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114443295918557", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1HUVnz7EX1", + "cover": "http://i1.hdslb.com/bfs/archive/515f60c051c83f98922f78de95a072feebc8f041.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "05:14", + "jump_url": "//www.bilibili.com/video/BV1HUVnz7EX1/", + "stat": { + "danmaku": "1", + "play": "26" + }, + "title": "来自阿洛娜的权威", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "长安不见-雪", + "rid": "3546712641636719", + "text": "长安不见-雪", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "、", + "text": "、", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "旋转的M2", + "rid": "3493264944531941", + "text": "旋转的M2", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1062695803784527872", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "视频删除后将无法恢复,请谨慎操作", + "title": "删除动态会同时删除视频稿件" + }, + "params": { + "dyn_id_str": "1062695803784527872", + "dyn_type": 8, + "rid_str": "114443295918557" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 1, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 4, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "114402862959003", + "comment_type": 1, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "114402862959003" + }, + "id_str": "1060045976462426117", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "04月26日", + "pub_ts": 1745649587, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114402862959003", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1ovLXzPEFq", + "cover": "http://i0.hdslb.com/bfs/archive/b361f14b56080cb17ed5ff24d0b629945c0c150d.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "02:42", + "jump_url": "//www.bilibili.com/video/BV1ovLXzPEFq/", + "stat": { + "danmaku": "0", + "play": "199" + }, + "title": "终于把星野酱带回家了૮₍˃̶ꇴ˂̶₎ა", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "蔚蓝绪山", + "rid": "3493074818828658", + "text": "蔚蓝绪山", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "、", + "text": "、", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "蚕茧自缠萦", + "rid": "291098307", + "text": "蚕茧自缠萦", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1060045976462426117", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "视频删除后将无法恢复,请谨慎操作", + "title": "删除动态会同时删除视频稿件" + }, + "params": { + "dyn_id_str": "1060045976462426117", + "dyn_type": 8, + "rid_str": "114402862959003" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 8, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 9, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "114398483975404", + "comment_type": 1, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "114398483975404" + }, + "id_str": "1059758291001802840", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "04月25日", + "pub_ts": 1745582605, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114398483975404", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1KXLEz9EV8", + "cover": "http://i2.hdslb.com/bfs/archive/915817adaf0c1618ecf28d06d03eb8be8f6c89ff.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "00:14", + "jump_url": "//www.bilibili.com/video/BV1KXLEz9EV8/", + "stat": { + "danmaku": "0", + "play": "205" + }, + "title": "玩了一年多codm,这个什么玩意……", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "长安不见-雪", + "rid": "3546712641636719", + "text": "长安不见-雪", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "、", + "text": "、", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "坤坤丨宝宝", + "rid": "510272506", + "text": "坤坤丨宝宝", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1059758291001802840", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "视频删除后将无法恢复,请谨慎操作", + "title": "删除动态会同时删除视频稿件" + }, + "params": { + "dyn_id_str": "1059758291001802840", + "dyn_type": 8, + "rid_str": "114398483975404" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 1, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 6, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "114392746165578", + "comment_type": 1, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "114392746165578" + }, + "id_str": "1059382215079624725", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "04月24日", + "pub_ts": 1745495043, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114392746165578", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1oZLgz7EeX", + "cover": "http://i1.hdslb.com/bfs/archive/f62117a5e67f2775c892123d1ebe9e23d3523ca8.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "12:25", + "jump_url": "//www.bilibili.com/video/BV1oZLgz7EeX/", + "stat": { + "danmaku": "0", + "play": "335" + }, + "title": "什么才是叫作史上最绝望的死法,……(这爆率正常吗)", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "菌哥电影", + "rid": "628092353", + "text": "菌哥电影", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": "、", + "text": "、", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "是轻甄不是饭团酱", + "rid": "646061108", + "text": "是轻甄不是饭团酱", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1059382215079624725", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "视频删除后将无法恢复,请谨慎操作", + "title": "删除动态会同时删除视频稿件" + }, + "params": { + "dyn_id_str": "1059382215079624725", + "dyn_type": 8, + "rid_str": "114392746165578" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 8, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 18, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "114291361449486", + "comment_type": 1, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "114291361449486" + }, + "id_str": "1052737677322878980", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "04月06日", + "pub_ts": 1743947991, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114291361449486", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV15tR6YEEGN", + "cover": "http://i1.hdslb.com/bfs/archive/f53a964d2438e44db579a2ff373b49e57ea9c752.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "10:26", + "jump_url": "//www.bilibili.com/video/BV15tR6YEEGN/", + "stat": { + "danmaku": "0", + "play": "152" + }, + "title": "有这一款游戏,爆率逆天没有别的(封神)", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "长安不见-雪", + "rid": "3546712641636719", + "text": "长安不见-雪", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1052737677322878980", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "视频删除后将无法恢复,请谨慎操作", + "title": "删除动态会同时删除视频稿件" + }, + "params": { + "dyn_id_str": "1052737677322878980", + "dyn_type": 8, + "rid_str": "114291361449486" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 4, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 3, + "forbidden": false, + "status": true + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + { + "basic": { + "comment_id_str": "1050478468672782345", + "comment_type": 17, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "1050478468672782345" + }, + "id_str": "1050478468672782345", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "03月31日", + "pub_ts": 1743421978, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "我昨晚也有Bug,打航天基地的爆破第二局后我的,趴下滑铲不知道咋回事就点不了跳跃键也点不了然后就只能点开火键和操作键,投掷物能丢以外其他啥也干不了,只能跟人机样送一整局就输了", + "text": "我昨晚也有Bug,打航天基地的爆破第二局后我的,趴下滑铲不知道咋回事就点不了跳跃键也点不了然后就只能点开火键和操作键,投掷物能丢以外其他啥也干不了,只能跟人机样送一整局就输了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/493b36cbadea2356f09933b39e49c5a2f8f625b8.png", + "size": 2, + "text": "[坠落·空_自闭]", + "type": 3 + }, + "orig_text": "[坠落·空_自闭]", + "text": "[坠落·空_自闭]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/86c614f2d21263387fa7ef168450ccd69cce9a0b.png", + "size": 2, + "text": "[坠落·空_哭泣]", + "type": 3 + }, + "orig_text": "[坠落·空_哭泣]", + "text": "[坠落·空_哭泣]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + } + ], + "text": "我昨晚也有Bug,打航天基地的爆破第二局后我的,趴下滑铲不知道咋回事就点不了跳跃键也点不了然后就只能点开火键和操作键,投掷物能丢以外其他啥也干不了,只能跟人机样送一整局就输了[坠落·空_自闭][坠落·空_哭泣]" + }, + "major": null, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "长安不见-雪", + "rid": "3546712641636719", + "text": "长安不见-雪", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1050478468672782345", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "1050478468672782345", + "dyn_type": 1, + "rid_str": "1050478468672782345" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 1, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "1049725573770772488", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/ad1944a6564f065fae1b5d7ee963d08c900fe8d3.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "289949153" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/vip/e2ffa1d1d491fe0464338ed3921327ef5e4b42c5.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "fan": {}, + "id": 28, + "image_enhance": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "item_id": 28, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28&isdiy=0&part=card&from=post&f_source=garb&vmid=289949153&native.theme=1&navhide=1", + "name": "2233娘" + }, + "face": "https://i2.hdslb.com/bfs/face/ad1944a6564f065fae1b5d7ee963d08c900fe8d3.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/289949153/dynamic", + "label": "", + "mid": 289949153, + "name": "谁是fufu", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_time": "", + "pub_ts": 1743246681, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1743350400000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114245391947434", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1vmZAYDEcT", + "cover": "http://i0.hdslb.com/bfs/archive/d3ccb1bd474d55cc4415e073d21f1c8a3d12c22d.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "02:43", + "jump_url": "//www.bilibili.com/video/BV1vmZAYDEcT/", + "stat": { + "danmaku": "49", + "play": "6.5万" + }, + "title": "上号成为人机了!是BUG还是分身?", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": { + "id": 1061343, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1061343&topic_name=%E4%BD%BF%E5%91%BD%E5%8F%AC%E5%94%A4%E6%89%8B%E6%B8%B8%E8%AE%B0%E5%BD%95", + "name": "使命召唤手游记录" + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + }, + { + "basic": { + "comment_id_str": "1049490226780569608", + "comment_type": 17, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "1049490226780569608" + }, + "id_str": "1049490226780569608", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "03月29日", + "pub_ts": 1743191885, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "回复 ", + "text": "回复 ", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "@狂热的地幔", + "rid": "1333987156", + "text": "@狂热的地幔", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " :我试过玩上一个月删了,然后现在我又想玩不知道为什么玩几天又想删", + "text": " :我试过玩上一个月删了,然后现在我又想玩不知道为什么玩几天又想删", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/c3043ba94babf824dea03ce500d0e73763bf4f40.png", + "size": 1, + "text": "[笑哭]", + "type": 1 + }, + "orig_text": "[笑哭]", + "text": "[笑哭]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + } + ], + "text": "回复 @狂热的地幔 :我试过玩上一个月删了,然后现在我又想玩不知道为什么玩几天又想删[笑哭]" + }, + "major": null, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "长安不见-雪", + "rid": "3546712641636719", + "text": "长安不见-雪", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1049490226780569608", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "1049490226780569608", + "dyn_type": 1, + "rid_str": "1049490226780569608" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 1, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "1049336535656169477", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/929fb162c6eb9f81b55b67b3016364a3d00fb437.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "497979931" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/vip/40b8bef91ed10dd8c2b9302d85db76c5f1f3c292.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/vip/99f54078df2412394140aa5df4422bc0a1ca3d3e.png", + "fan": {}, + "id": 5, + "image_enhance": "https://i0.hdslb.com/bfs/vip/99f54078df2412394140aa5df4422bc0a1ca3d3e.png", + "item_id": 5, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=5&isdiy=0&part=card&from=post&f_source=garb&vmid=497979931&native.theme=1&navhide=1", + "name": "33娘" + }, + "face": "https://i1.hdslb.com/bfs/face/929fb162c6eb9f81b55b67b3016364a3d00fb437.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/497979931/dynamic", + "label": "", + "mid": 497979931, + "name": "冰林L", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_time": "", + "pub_ts": 1743156101, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1745856000000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114239469520401", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1E7oXYhEhp", + "cover": "http://i2.hdslb.com/bfs/archive/db15a6d18cdf6cef3cb41b9d9f11847b5c950bc4.jpg", + "desc": "我知道MC不是我生活的全部,但我希望他能陪我更久一点,未来我可能会去尝试做一些MC动画,或者其他的游戏。", + "disable_preview": 0, + "duration_text": "02:39", + "jump_url": "//www.bilibili.com/video/BV1E7oXYhEhp/", + "stat": { + "danmaku": "548", + "play": "31.2万" + }, + "title": "做MC视频10年了,为什么MC越来越无聊了…", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + }, + { + "basic": { + "comment_id_str": "1046005002557980674", + "comment_type": 17, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "1046376087871815681" + }, + "id_str": "1046005002557980674", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "03月19日", + "pub_ts": 1742380418, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "jump_url": "//search.bilibili.com/all?keyword=bilibili%E4%B8%AA%E6%80%A7%E8%A3%85%E6%89%AE", + "orig_text": "#bilibili个性装扮#", + "text": "#bilibili个性装扮#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": " 我正在使用“坠落·空”头像挂件,你也来试试~", + "text": " 我正在使用“坠落·空”头像挂件,你也来试试~", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "#bilibili个性装扮# 我正在使用“坠落·空”头像挂件,你也来试试~" + }, + "major": { + "common": { + "badge": { + "bg_color": "#FB7299", + "color": "#ffffff", + "text": "装扮" + }, + "biz_id": 0, + "biz_type": 231, + "cover": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "desc": "挂件", + "id": "1046376087871815681", + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?f_source=dynamic&from=share&isdiy=0&item_id=68595&native.theme=1&navhide=1&part=pendant&q=953008717620250319183338&vmid=2095498218", + "label": "", + "sketch_id": "1046376087871815680", + "style": 1, + "title": "坠落·空" + }, + "type": "MAJOR_TYPE_COMMON" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1046005002557980674", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "1046005002557980674", + "dyn_type": 2048, + "rid_str": "1046376087871815681" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 1, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_COMMON_SQUARE", + "visible": true + }, + { + "basic": { + "comment_id_str": "1044401021238902802", + "comment_type": 17, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "1044401021238902802" + }, + "id_str": "1044401021238902802", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "03月15日", + "pub_ts": 1742006962, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "我参与了投票", + "text": "我参与了投票", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "​视频类型", + "rid": "14746295", + "text": "​视频类型", + "type": "RICH_TEXT_NODE_TYPE_VOTE" + }, + { + "orig_text": "我投给了我想看抽象的2D动画", + "text": "我投给了我想看抽象的2D动画", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "我参与了投票​视频类型我投给了我想看抽象的2D动画" + }, + "major": null, + "topic": null + }, + "module_interaction": { + "items": [ + { + "desc": { + "rich_text_nodes": [ + { + "orig_text": "长安不见-雪", + "rid": "3546712641636719", + "text": "长安不见-雪", + "type": "RICH_TEXT_NODE_TYPE_AT" + }, + { + "orig_text": " 赞了", + "text": " 赞了", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "" + }, + "type": 0 + } + ] + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1044401021238902802", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "1044401021238902802", + "dyn_type": 1, + "rid_str": "1044401021238902802" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 1, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "jump_url": "//www.bilibili.com/opus/1044394265267929093", + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "1044394265267929093", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/4e08982dd07abbdf86f35a68483424b743f07730.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/5bb7bef5107e448892ab54539298d50eb678de05.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "1142084989" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/archive/7e0eed18747150fa233ba6994489b9096f1d9fe8.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/archive/7e0eed18747150fa233ba6994489b9096f1d9fe8.png", + "fan": { + "color": "#BFC8D2", + "color_format": { + "colors": [ + "#B8C7D0FF", + "#A2A7B0FF" + ], + "end_point": "100,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "XXXX", + "num_desc": "047769", + "number": 47769 + }, + "id": 66945, + "image_enhance": "https://i0.hdslb.com/bfs/archive/7e0eed18747150fa233ba6994489b9096f1d9fe8.png", + "item_id": 66945, + "jump_url": "https://www.bilibili.com/h5/mall/digital-card/home?act_id=101116&from=post&f_source=garb&-Abrowser=live&hybrid_set_header=2&navhide=1&anchor_task=1", + "name": "初音未来三连快乐勋章" + }, + "face": "https://i1.hdslb.com/bfs/face/4e08982dd07abbdf86f35a68483424b743f07730.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/1142084989/dynamic", + "label": "", + "mid": 1142084989, + "name": "不抽象的真菌零_Jack", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/face/5bb7bef5107e448892ab54539298d50eb678de05.png", + "image_enhance": "https://i1.hdslb.com/bfs/face/5bb7bef5107e448892ab54539298d50eb678de05.png", + "image_enhance_frame": "", + "n_pid": 294, + "name": "茶啊二中", + "pid": 294 + }, + "pub_action": "", + "pub_time": "", + "pub_ts": 1742005389, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1751558400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/3788b674c69072f1ee252b79a31ecc8c43af3039.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/jwXBWRVwa5.png", + "label_theme": "vip", + "path": "", + "text": "大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": { + "type": "ADDITIONAL_TYPE_VOTE", + "vote": { + "button": { + "jump_style": { + "text": "参与" + }, + "type": 1 + }, + "choice_cnt": 1, + "default_share": 1, + "desc": "153人参与", + "end_time": 1742091752, + "join_num": 153, + "status": 4, + "title": "视频类型", + "type": null, + "uid": 1142084989, + "vote_id": 14746295 + } + }, + "desc": null, + "major": { + "opus": { + "fold_action": [ + "展开", + "收起" + ], + "jump_url": "//www.bilibili.com/opus/1044394265267929093", + "pics": [], + "summary": { + "rich_text_nodes": [ + { + "orig_text": "投票", + "text": "投票", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "​视频类型", + "rid": "14746295", + "text": "​视频类型", + "type": "RICH_TEXT_NODE_TYPE_VOTE" + } + ], + "text": "投票​视频类型" + }, + "title": null + }, + "type": "MAJOR_TYPE_OPUS" + }, + "topic": null + } + }, + "type": "DYNAMIC_TYPE_WORD", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + }, + { + "basic": { + "comment_id_str": "1044400750626603011", + "comment_type": 17, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "1044400750626603011" + }, + "id_str": "1044400750626603011", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "03月15日", + "pub_ts": 1742006899, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "我参与了投票", + "text": "我参与了投票", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "​你们的头像是", + "rid": "14514807", + "text": "​你们的头像是", + "type": "RICH_TEXT_NODE_TYPE_VOTE" + }, + { + "orig_text": "我投给了女性", + "text": "我投给了女性", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "我参与了投票​你们的头像是我投给了女性" + }, + "major": null, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1044400750626603011", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "1044400750626603011", + "dyn_type": 1, + "rid_str": "1044400750626603011" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 0, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "jump_url": "//www.bilibili.com/opus/1034151558512640008", + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "1034151558512640008", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/3c35c94e5c9fc5aad09052078339ec9faf1aad87.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "1403650486" + }, + "face": "https://i1.hdslb.com/bfs/face/3c35c94e5c9fc5aad09052078339ec9faf1aad87.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/1403650486/dynamic", + "label": "", + "mid": 1403650486, + "name": "小邓Channel", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "", + "pub_time": "", + "pub_ts": 1739620573, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1711382400000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": { + "type": "ADDITIONAL_TYPE_VOTE", + "vote": { + "button": { + "jump_style": { + "text": "参与" + }, + "type": 1 + }, + "choice_cnt": 1, + "default_share": 1, + "desc": "1135人参与", + "end_time": 1742039701, + "join_num": 1135, + "status": 4, + "title": "你们的头像是", + "type": null, + "uid": 1403650486, + "vote_id": 14514807 + } + }, + "desc": null, + "major": { + "opus": { + "fold_action": [ + "展开", + "收起" + ], + "jump_url": "//www.bilibili.com/opus/1034151558512640008", + "pics": [], + "summary": { + "rich_text_nodes": [ + { + "orig_text": "我发起了一个投票", + "text": "我发起了一个投票", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "​你们的头像是", + "rid": "14514807", + "text": "​你们的头像是", + "type": "RICH_TEXT_NODE_TYPE_VOTE" + } + ], + "text": "我发起了一个投票​你们的头像是" + }, + "title": null + }, + "type": "MAJOR_TYPE_OPUS" + }, + "topic": null + } + }, + "type": "DYNAMIC_TYPE_WORD", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + }, + { + "basic": { + "comment_id_str": "1044400681921806345", + "comment_type": 17, + "like_icon": { + "action_url": "https://i0.hdslb.com/bfs/garb/item/cb34de5fbca6b8507adf7364ae785822b74df1f9.bin", + "end_url": "", + "id": 68554, + "start_url": "" + }, + "rid_str": "1044400681921806345" + }, + "id_str": "1044400681921806345", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2095498218" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "fan": { + "color": "#a465e5", + "color_format": { + "colors": [ + "#a465e5FF", + "#a465e5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "坠落·空", + "num_desc": "002272", + "number": 2272 + }, + "id": 68557, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5f6f72f12f56a8217913f29ef991171c897ab443.png", + "item_id": 68557, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=68557&isdiy=0&part=card&from=post&f_source=garb&vmid=2095498218&native.theme=1&navhide=1", + "name": "坠落·空粉丝" + }, + "face": "https://i0.hdslb.com/bfs/face/3f77a9eeb6aa503bd5e0353865d6d737e4ff69c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2095498218/dynamic", + "label": "", + "mid": 2095498218, + "name": "次元壁小宋", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/640b9ee5a12d77bb7431cfc9c815dd25c05f9915.png", + "image_enhance_frame": "", + "n_pid": 68553, + "name": "坠落·空", + "pid": 68553 + }, + "pub_action": "", + "pub_location_text": "", + "pub_time": "03月15日", + "pub_ts": 1742006883, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1683129600000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "我参与了投票", + "text": "我参与了投票", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "​你们露过声吗?", + "rid": "14689974", + "text": "​你们露过声吗?", + "type": "RICH_TEXT_NODE_TYPE_VOTE" + }, + { + "orig_text": "我投给了没露过", + "text": "我投给了没露过", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "我参与了投票​你们露过声吗?我投给了没露过" + }, + "major": null, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "置顶", + "params": { + "dynamic_id": "1044400681921806345", + "status": false + }, + "type": "THREE_POINT_TOP" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "1044400681921806345", + "dyn_type": 1, + "rid_str": "1044400681921806345" + }, + "type": "THREE_POINT_DELETE" + } + ] + }, + "module_stat": { + "comment": { + "count": 0, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 0, + "forbidden": false, + "status": false + } + } + }, + "orig": { + "basic": { + "comment_id_str": "", + "comment_type": 0, + "jump_url": "//www.bilibili.com/opus/1041900177728733184", + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "" + }, + "id_str": "1041900177728733184", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/70af6734f5e92c4345c592b099200b9519fdac23.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "3546855879215762" + }, + "face": "https://i2.hdslb.com/bfs/face/70af6734f5e92c4345c592b099200b9519fdac23.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/3546855879215762/dynamic", + "label": "", + "mid": 3546855879215762, + "name": "爱玩休闲区的樱梦雪", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "", + "pub_time": "", + "pub_ts": 1741424689, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": { + "type": "ADDITIONAL_TYPE_VOTE", + "vote": { + "button": { + "jump_style": { + "text": "参与" + }, + "type": 1 + }, + "choice_cnt": 1, + "default_share": 1, + "desc": "818人参与", + "end_time": 1743239041, + "join_num": 818, + "status": 4, + "title": "你们露过声吗?", + "type": null, + "uid": 3546855879215762, + "vote_id": 14689974 + } + }, + "desc": null, + "major": { + "opus": { + "fold_action": [ + "展开", + "收起" + ], + "jump_url": "//www.bilibili.com/opus/1041900177728733184", + "pics": [], + "summary": { + "rich_text_nodes": [ + { + "orig_text": "我发起了一个投票", + "text": "我发起了一个投票", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "orig_text": "​你们露过声吗?", + "rid": "14689974", + "text": "​你们露过声吗?", + "type": "RICH_TEXT_NODE_TYPE_VOTE" + } + ], + "text": "我发起了一个投票​你们露过声吗?" + }, + "title": null + }, + "type": "MAJOR_TYPE_OPUS" + }, + "topic": null + } + }, + "type": "DYNAMIC_TYPE_WORD", + "visible": true + }, + "type": "DYNAMIC_TYPE_FORWARD", + "visible": true + } + ], + "offset": "1044400681921806345", + "update_baseline": "", + "update_num": 0 + } +} +``` + +</details> + +## 设置置顶动态 + +参见 [设置置顶动态](action.md#设置置顶动态) + +## 取消置顶动态 + +参见 [取消置顶动态](action.md#取消置顶动态) diff --git a/docs/dynamic/topic.md b/docs/dynamic/topic.md new file mode 100644 index 0000000..d553635 --- /dev/null +++ b/docs/dynamic/topic.md @@ -0,0 +1,5736 @@ +# 话题 + +## 获取话题下动态列表 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/topic +> https://app.bilibili.com/x/topic/web/details/cards + +*请求方法: GET* + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| topic_id | number | 话题 ID | 必要 | | +| sort_by | number | 排序方式 | 不必要 | 见回复 `data.topic_card_list.topic_sort_by_conf` 对象 | +| offset | string | 偏移量 | 不必要 | 上一次请求回复的 `data.topic_card_list.offset` | +| page_size | number | 每页数量 | 不必要 | 默认为 `20` | +| source | string | 来源 | 不必要 | 如 `Web` (接口 1) `H5` (接口 2) | +| features | string | 功能模块 | 不必要 | 仅接口 1, 如 `itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,decorationCard`, 参见 [功能模块](../opus/features.md) | +| web_location | string | `333.1036` | 不必要 | 仅接口 2 | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| related_topics | object | 相关话题? | 空对象 | +| topic_card_list | object | 话题卡片列表 | | + +`data.topic_card_list` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| has_more | boolean | 是否有更多 | | +| items | object[] | 动态列表 | 套了个娃 | +| offset | string | 偏移量 | | +| topic_sort_by_conf | object | 排序方式配置 | | + +`data.topic_card_list.items[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| dynamic_card_item | object | 动态 | 基本同 [获取全部动态列表](all.md#获取全部动态列表) 的 `data.items[]` 对象 | +| topic_type | string | 话题类型? | 目前所见似乎只有 `"DYNAMIC"` | + +`data.topic_card_list.topic_sort_by_conf` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| all_sort_by | object[] | 全部排序方式 | | +| default_sort_by | number | 默认排序方式 | | +| show_sort_by | number | 展示的排序方式 | | + +`data.topic_card_list.topic_sort_by_conf.all_sort_by[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| sort_by | number | 排序方式 | | +| sort_name | string | 排序名称 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/topic?topic_id=34958&sort_by=0&offset=&page_size=20&source=Web&features=itemOpusStyle%2ClistOnlyfans%2CopusBigCover%2ConlyfansVote%2CdecorationCard' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "related_topics": {}, + "topic_card_list": { + "has_more": true, + "items": [ + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "114687152757937", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "114687152757937" + }, + "id_str": "1078676238928707587", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/38f6660463a00c412c5cd1917f91bbd8119ee7bc.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "1310515966" + }, + "face": "https://i1.hdslb.com/bfs/face/38f6660463a00c412c5cd1917f91bbd8119ee7bc.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/1310515966/dynamic", + "label": "", + "mid": 1310515966, + "name": "声优音画", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "06月15日", + "pub_ts": 1749987283, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114687152757937", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1hCMtzKEyP", + "cover": "http://i2.hdslb.com/bfs/archive/5994a570d9a12a89bcb50258455ff1302efdb97b.jpg", + "desc": "“把妹王”火麟飞携金句杀疯全场,少年意气燃爆童年DNA!\n出镜配音演员:鞠月斌@配音演员鞠月斌", + "disable_preview": 0, + "duration_text": "00:43", + "jump_url": "//www.bilibili.com/video/BV1hCMtzKEyP/", + "stat": { + "danmaku": "69", + "play": "39.3万" + }, + "title": "声优音画|《超兽武装》经典热血回归!", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 328, + "forbidden": false + }, + "forward": { + "count": 6, + "forbidden": false + }, + "like": { + "count": 40598, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "473683637", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "473683637" + }, + "id_str": "712669283716431894", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/eba2897173640343e5f9294f365ee0eb2082f525.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "387122516" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "fan": { + "color": "#BFC8D2", + "color_format": { + "colors": [ + "#B8C7D0FF", + "#A2A7B0FF" + ], + "end_point": "100,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "XXXX", + "num_desc": "008059", + "number": 8059 + }, + "id": 69432, + "image_enhance": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "item_id": 69432, + "jump_url": "https://www.bilibili.com/h5/mall/digital-card/home?act_id=102704&from=post&f_source=garb&-Abrowser=live&hybrid_set_header=2&navhide=1&anchor_task=1", + "name": "名侦探柯南30周年" + }, + "face": "https://i2.hdslb.com/bfs/face/eba2897173640343e5f9294f365ee0eb2082f525.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/387122516/dynamic", + "label": "", + "mid": 387122516, + "name": "橙子面包酱_", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年10月03日", + "pub_ts": 1664769648, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1755273600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "来啦~", + "text": "来啦~", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "来啦~" + }, + "major": { + "archive": { + "aid": "473683637", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1BT411K7Gv", + "cover": "http://i1.hdslb.com/bfs/archive/d9ac37b09af57553b5d313eef60040a133c730d8.jpg", + "desc": "如果再给我一次机会,我一定会早点拍视频,呜呜呜呜拍到凌晨真的太困了dT-Tb\n这首歌很多人点,我也很喜欢!!!(感觉自己没唱好•᷄ࡇ•᷅)", + "disable_preview": 0, + "duration_text": "04:30", + "jump_url": "//www.bilibili.com/video/BV1BT411K7Gv/", + "stat": { + "danmaku": "463", + "play": "53.9万" + }, + "title": "趁17岁唱一首本兮的《未成年》!!!", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 1365, + "forbidden": false + }, + "forward": { + "count": 241, + "forbidden": false + }, + "like": { + "count": 28628, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "113231091795405", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "113231091795405" + }, + "id_str": "983253769442557958", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/e84fa744dd3cefd073c446fc7737ff3b2482e3a7.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "2170934" + }, + "face": "https://i2.hdslb.com/bfs/face/e84fa744dd3cefd073c446fc7737ff3b2482e3a7.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2170934/dynamic", + "label": "", + "mid": 2170934, + "name": "明月庄主", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2024年10月01日", + "pub_ts": 1727770008, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1925308800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png", + "label_theme": "ten_annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "这个MC存档10岁了!明月庄主单机生存开档十周年。存档发布", + "text": "这个MC存档10岁了!明月庄主单机生存开档十周年。存档发布", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "这个MC存档10岁了!明月庄主单机生存开档十周年。存档发布" + }, + "major": { + "archive": { + "aid": "113231091795405", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1RyxYeGEqC", + "cover": "http://i0.hdslb.com/bfs/archive/d91bd52665bbc354a57bb6470a56504373092adf.jpg", + "desc": "这个MC存档10岁了!明月庄主单机生存开档十周年。存档发布\n\n百度网盘:明月庄主的原版单机生存.优化过1.21.1.7z\n链接:https://pan.baidu.com/s/1eKocLGQyo7sVyysEK1t4lA?pwd=moon \n提取码:moon \n我用夸克网盘分享了「明月庄主的原版单机生存.优化过1.21.1.7z」\n链接:https://pan.quark.cn/s/f47bc9c695b7", + "disable_preview": 0, + "duration_text": "09:21", + "jump_url": "//www.bilibili.com/video/BV1RyxYeGEqC/", + "stat": { + "danmaku": "455", + "play": "9.6万" + }, + "title": "这个MC存档10岁了!明月庄主单机生存开档十周年。存档发布", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 883, + "forbidden": false + }, + "forward": { + "count": 33, + "forbidden": false + }, + "like": { + "count": 8656, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "812023623", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "812023623" + }, + "id_str": "666777038344945689", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "http://i0.hdslb.com/bfs/face/010e6ac40fef4d6560d5d716128b499ea5edf729.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "36776949" + }, + "face": "http://i0.hdslb.com/bfs/face/010e6ac40fef4d6560d5d716128b499ea5edf729.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/36776949/dynamic", + "label": "", + "mid": 36776949, + "name": "柚子爱好者", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年06月01日", + "pub_ts": 1654084527, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1617552000000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "812023623", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1N34y177uz", + "cover": "http://i1.hdslb.com/bfs/archive/b0ac9129e78b7cc4cc95d685c38b076dc0cdcf8e.jpg", + "desc": "最美好的六一礼物", + "disable_preview": 0, + "duration_text": "02:08", + "jump_url": "//www.bilibili.com/video/BV1N34y177uz/", + "stat": { + "danmaku": "240", + "play": "11.3万" + }, + "title": "最美好的六一礼物", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 359, + "forbidden": false + }, + "forward": { + "count": 26, + "forbidden": false + }, + "like": { + "count": 9186, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "687206432", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "687206432" + }, + "id_str": "696709872294559798", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/eba2897173640343e5f9294f365ee0eb2082f525.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "387122516" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "fan": { + "color": "#BFC8D2", + "color_format": { + "colors": [ + "#B8C7D0FF", + "#A2A7B0FF" + ], + "end_point": "100,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "XXXX", + "num_desc": "008059", + "number": 8059 + }, + "id": 69432, + "image_enhance": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "item_id": 69432, + "jump_url": "https://www.bilibili.com/h5/mall/digital-card/home?act_id=102704&from=post&f_source=garb&-Abrowser=live&hybrid_set_header=2&navhide=1&anchor_task=1", + "name": "名侦探柯南30周年" + }, + "face": "https://i2.hdslb.com/bfs/face/eba2897173640343e5f9294f365ee0eb2082f525.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/387122516/dynamic", + "label": "", + "mid": 387122516, + "name": "橙子面包酱_", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年08月21日", + "pub_ts": 1661053808, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1755273600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "♥(。→v←。)♥本兮本兮本兮", + "text": "♥(。→v←。)♥本兮本兮本兮", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "♥(。→v←。)♥本兮本兮本兮" + }, + "major": { + "archive": { + "aid": "687206432", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1FU4y1k75W", + "cover": "http://i0.hdslb.com/bfs/archive/1890a9b9362d57fe8da5aaf7c52c90b5317e821a.jpg", + "desc": "好多人点这首歌,但是我真的驾驭不了wwww˃ʍ˂\n唱错了几句(ᇂ_ᇂ|||)", + "disable_preview": 0, + "duration_text": "02:55", + "jump_url": "//www.bilibili.com/video/BV1FU4y1k75W/", + "stat": { + "danmaku": "125", + "play": "11万" + }, + "title": "【爷青回系列】《你在看孤独的风景》cover本兮", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 477, + "forbidden": false + }, + "forward": { + "count": 34, + "forbidden": false + }, + "like": { + "count": 5837, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "452289087", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "452289087" + }, + "id_str": "875680820193394744", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/9780c885127ddf5ae48b1f98c43e63b97c89ac14.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "7062857" + }, + "face": "https://i2.hdslb.com/bfs/face/9780c885127ddf5ae48b1f98c43e63b97c89ac14.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/7062857/dynamic", + "label": "", + "mid": 7062857, + "name": "星际靓仔", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2023年12月16日", + "pub_ts": 1702723729, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1747670400000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "452289087", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1vj411p784", + "cover": "http://i1.hdslb.com/bfs/archive/3e50d9370c40bd5ea31ecf84419e02c913e895fa.jpg", + "desc": "非常感谢@君龙-金君龙 老师的音频授权!这首男版的《只凝视着你》燃爆了!好声音值得被更多人听到!\n歌手简介:金君龙,曾用名君龙,出生于吉林省延边,中国朝鲜族歌手、音乐制作人、阿里郎组合主唱。(以上内容来自百度百科)", + "disable_preview": 0, + "duration_text": "04:28", + "jump_url": "//www.bilibili.com/video/BV1vj411p784/", + "stat": { + "danmaku": "529", + "play": "20.3万" + }, + "title": "恐怖如斯!男歌手竟原调翻唱灌篮高手片尾曲《只凝视着你》!", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 508, + "forbidden": false + }, + "forward": { + "count": 23, + "forbidden": false + }, + "like": { + "count": 6151, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "684664595", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "684664595" + }, + "id_str": "668133732620697639", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/eba2897173640343e5f9294f365ee0eb2082f525.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "387122516" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "fan": { + "color": "#BFC8D2", + "color_format": { + "colors": [ + "#B8C7D0FF", + "#A2A7B0FF" + ], + "end_point": "100,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "XXXX", + "num_desc": "008059", + "number": 8059 + }, + "id": 69432, + "image_enhance": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "item_id": 69432, + "jump_url": "https://www.bilibili.com/h5/mall/digital-card/home?act_id=102704&from=post&f_source=garb&-Abrowser=live&hybrid_set_header=2&navhide=1&anchor_task=1", + "name": "名侦探柯南30周年" + }, + "face": "https://i2.hdslb.com/bfs/face/eba2897173640343e5f9294f365ee0eb2082f525.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/387122516/dynamic", + "label": "", + "mid": 387122516, + "name": "橙子面包酱_", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年06月05日", + "pub_ts": 1654400407, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1755273600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "684664595", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV15U4y117XE", + "cover": "http://i1.hdslb.com/bfs/archive/abb1dbb1b3b194be1f44ee049a065387bef5560b.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "02:05", + "jump_url": "//www.bilibili.com/video/BV15U4y117XE/", + "stat": { + "danmaku": "56", + "play": "9.6万" + }, + "title": "当然很《爱你》啦!!!今天是王心凌女孩~", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 290, + "forbidden": false + }, + "forward": { + "count": 17, + "forbidden": false + }, + "like": { + "count": 5214, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "703146337", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "703146337" + }, + "id_str": "838814083642818565", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/1d89b423a12ba86987c5c4d4098b285bea645b1c.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "44044545" + }, + "face": "https://i0.hdslb.com/bfs/face/1d89b423a12ba86987c5c4d4098b285bea645b1c.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/44044545/dynamic", + "label": "", + "mid": 44044545, + "name": "双马尾钳子", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2023年09月08日", + "pub_ts": 1694140023, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1775750400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "雾草我做了四天(咳咳)(吐血)", + "text": "雾草我做了四天(咳咳)(吐血)", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "雾草我做了四天(咳咳)(吐血)" + }, + "major": { + "archive": { + "aid": "703146337", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1gm4y1K7rE", + "cover": "http://i1.hdslb.com/bfs/archive/04aadffdc48e010905a0ca2be4167dc4d5300022.jpg", + "desc": "BGM:BV1hT411L7fk\n剧情梗概:\n威廉和鲍勃本来是一对神界情侣,鲍勃为了保护威廉被乌鸦打落凡间转世为人,威廉为了追寻鲍勃,化身入树中,历经千辛万苦终于也转世为人。然而此时的两人已不认得对方,仅靠缘分结为情侣,却处处互相折磨,在痛苦中越陷越深,最后两人双双放手成全对方,各自踏上了新的人生之路。\n\n内含大量游戏贴图替换,剧情为恶搞,请勿当真!(不会真有人当真吧)", + "disable_preview": 0, + "duration_text": "04:25", + "jump_url": "//www.bilibili.com/video/BV1gm4y1K7rE/", + "stat": { + "danmaku": "193", + "play": "6.8万" + }, + "title": "【锈湖】用仙剑奇侠传三的方式打开锈湖", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 200, + "forbidden": false + }, + "forward": { + "count": 21, + "forbidden": false + }, + "like": { + "count": 5565, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "511956063", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "511956063" + }, + "id_str": "664837929337618438", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/04345e01722540db8dce258f8a0051e1a6dba029.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "19954576" + }, + "face": "https://i1.hdslb.com/bfs/face/04345e01722540db8dce258f8a0051e1a6dba029.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/19954576/dynamic", + "label": "", + "mid": 19954576, + "name": "克里斯不关门_", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年05月27日", + "pub_ts": 1653633043, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "王心凌男孩因为一条十年前表演《爱你》的视频 人生第一次被采访了 而且还是央视网…来听听看我的小作文发挥的咋样吧哈哈~还没看过原视频的欢迎来我的主页看看哟~ P.S. 感谢大家之前的热情回应,当年节目的完整版会在这周晚点发,记得关注我才不会错过更新哦 感恩! <3", + "text": "王心凌男孩因为一条十年前表演《爱你》的视频 人生第一次被采访了 而且还是央视网…来听听看我的小作文发挥的咋样吧哈哈~还没看过原视频的欢迎来我的主页看看哟~ P.S. 感谢大家之前的热情回应,当年节目的完整版会在这周晚点发,记得关注我才不会错过更新哦 感恩! <3", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "王心凌男孩因为一条十年前表演《爱你》的视频 人生第一次被采访了 而且还是央视网…来听听看我的小作文发挥的咋样吧哈哈~还没看过原视频的欢迎来我的主页看看哟~ P.S. 感谢大家之前的热情回应,当年节目的完整版会在这周晚点发,记得关注我才不会错过更新哦 感恩! <3" + }, + "major": { + "archive": { + "aid": "511956063", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1zg411o7Sn", + "cover": "http://i0.hdslb.com/bfs/archive/f9969e889d36042a4addfbe6cffc2b1ccf57efc2.jpg", + "desc": "王心凌男孩因为一条十年前表演《爱你》的视频 人生第一次被采访了 而且还是央视网…来听听看我的小作文发挥的咋样吧哈哈~还没看过原视频的欢迎来我的主页看看哟~ P.S. 感谢大家之前的热情回应,当年节目的完整版会在这周晚点发,记得关注我才不会错过更新哦 感恩! <3", + "disable_preview": 0, + "duration_text": "03:16", + "jump_url": "//www.bilibili.com/video/BV1zg411o7Sn/", + "stat": { + "danmaku": "59", + "play": "5.7万" + }, + "title": "王心凌男孩你好 我是央视网记者 可以问你几个问题吗?", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 136, + "forbidden": false + }, + "forward": { + "count": 9, + "forbidden": false + }, + "like": { + "count": 3696, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "526638349", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "526638349" + }, + "id_str": "778087296460128312", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "http://i0.hdslb.com/bfs/face/dbe9074fda0c174a851d0d79e1bd27ddaa18c9e5.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "419805517" + }, + "face": "http://i0.hdslb.com/bfs/face/dbe9074fda0c174a851d0d79e1bd27ddaa18c9e5.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/419805517/dynamic", + "label": "", + "mid": 419805517, + "name": "精分小阿夺", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2023年03月28日", + "pub_ts": 1680000966, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "526638349", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1xM411g7uZ", + "cover": "http://i2.hdslb.com/bfs/archive/ea2e6054e898241debf1fe991b5e36ab562a11df.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "00:47", + "jump_url": "//www.bilibili.com/video/BV1xM411g7uZ/", + "stat": { + "danmaku": "55", + "play": "4.7万" + }, + "title": "有哪些动漫曾带给你“爷青回”的瞬间?", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 45, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 3410, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "726866951", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "726866951" + }, + "id_str": "663496718409531463", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/675aa52717ee9e5aad48e8bd8dd2e1f259b3200c.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "77060623" + }, + "face": "https://i1.hdslb.com/bfs/face/675aa52717ee9e5aad48e8bd8dd2e1f259b3200c.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/77060623/dynamic", + "label": "", + "mid": 77060623, + "name": "pH一sH_肨虎花", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年05月23日", + "pub_ts": 1653320768, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1799596800000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "午夜偷袭!", + "text": "午夜偷袭!", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "午夜偷袭!" + }, + "major": { + "archive": { + "aid": "726866951", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1iS4y1z7oC", + "cover": "http://i0.hdslb.com/bfs/archive/8b6fe643251147bc3a1791d028c56aa1c2ac6984.jpg", + "desc": "听到甜心教主的《爱你》真的忍不住了,忍着伤痛画了这一笔,希望能够得到你的三连!", + "disable_preview": 0, + "duration_text": "03:52", + "jump_url": "//www.bilibili.com/video/BV1iS4y1z7oC/", + "stat": { + "danmaku": "310", + "play": "3.3万" + }, + "title": "这一笔,爷青回!王心凌《梦的光点》", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 211, + "forbidden": false + }, + "forward": { + "count": 3, + "forbidden": false + }, + "like": { + "count": 2485, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "114820430961589", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "114820430961589" + }, + "id_str": "1087411287614291971", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/20843b2d7edf0d096bd09ff767065ebcec6fb3ad.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "3546766148372797" + }, + "face": "https://i1.hdslb.com/bfs/face/20843b2d7edf0d096bd09ff767065ebcec6fb3ad.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/3546766148372797/dynamic", + "label": "", + "mid": 3546766148372797, + "name": "柿杂乱", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "07月09日", + "pub_ts": 1752021070, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "114820430961589", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1XMGszTE8s", + "cover": "http://i0.hdslb.com/bfs/archive/ae8caade776af7e197d8b172f18004916d1f2eb8.jpg", + "desc": "这个视频抠图剪辑找素材花了好几天时间,期间运气太非酋抽卡一直不出彩,被迫开了个新号,感谢你对这个系列的支持。", + "disable_preview": 0, + "duration_text": "00:33", + "jump_url": "//www.bilibili.com/video/BV1XMGszTE8s/", + "stat": { + "danmaku": "39", + "play": "1.7万" + }, + "title": "【SCP×BA】SCP蔚蓝档案合作组织。希望这个也能火。", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 223, + "forbidden": false + }, + "forward": { + "count": 2, + "forbidden": false + }, + "like": { + "count": 2092, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "946166332", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "946166332" + }, + "id_str": "738695406850932758", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/2e591a702d42f753fdfb847825274ef745675e51.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/488870931b1bba66da36d22848f0720480d3d79a.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/2e591a702d42f753fdfb847825274ef745675e51.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "2518014" + }, + "face": "https://i0.hdslb.com/bfs/face/2e591a702d42f753fdfb847825274ef745675e51.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2518014/dynamic", + "label": "", + "mid": 2518014, + "name": "熊木柚子", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/488870931b1bba66da36d22848f0720480d3d79a.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp", + "image_enhance_frame": "https://i0.hdslb.com/bfs/garb/item/4316a3910bb0bd6f2f1c267a3e9187f0b9fe5bd0.png", + "n_pid": 32257, + "name": "EveOneCat2", + "pid": 32257 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年12月12日", + "pub_ts": 1670829327, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1786550400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "彩虹岛里得到的第一件稀有武器就是“黑发狐妖可爱魔杖”", + "text": "彩虹岛里得到的第一件稀有武器就是“黑发狐妖可爱魔杖”", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "彩虹岛里得到的第一件稀有武器就是“黑发狐妖可爱魔杖”" + }, + "major": { + "archive": { + "aid": "946166332", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1iW4y1M7y2", + "cover": "http://i2.hdslb.com/bfs/archive/f49ae764cbee2f4bcda09334f1a2c64488597b76.jpg", + "desc": "彩虹岛游戏音乐翻奏\n作曲:ESti\n演奏乐器:长笛", + "disable_preview": 0, + "duration_text": "02:20", + "jump_url": "//www.bilibili.com/video/BV1iW4y1M7y2/", + "stat": { + "danmaku": "50", + "play": "4.5万" + }, + "title": "【彩虹岛】山岳地带bgm——《shanghai runner》", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 302, + "forbidden": false + }, + "forward": { + "count": 10, + "forbidden": false + }, + "like": { + "count": 2893, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "274780128", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "274780128" + }, + "id_str": "830237944487870470", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/0e66175c1933add3de8c7ff2612912b0ed0eabcb.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "1832864498" + }, + "face": "https://i2.hdslb.com/bfs/face/0e66175c1933add3de8c7ff2612912b0ed0eabcb.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/1832864498/dynamic", + "label": "", + "mid": 1832864498, + "name": "桃之夭夭之桃", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2023年08月16日", + "pub_ts": 1692143235, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "274780128", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1tF411y73f", + "cover": "http://i2.hdslb.com/bfs/archive/ca224c68033c77cd028aa8c748cc544e0c3db746.jpg", + "desc": "最近真的很忙,忙着生病,忙着工作,忙着搬家,所以抓紧时间更新一下。", + "disable_preview": 0, + "duration_text": "02:20", + "jump_url": "//www.bilibili.com/video/BV1tF411y73f/", + "stat": { + "danmaku": "108", + "play": "3.4万" + }, + "title": "你不开心就来看我视频咯!Just forget me please!", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 152, + "forbidden": false + }, + "forward": { + "count": 2, + "forbidden": false + }, + "like": { + "count": 1221, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "404110312", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "404110312" + }, + "id_str": "823361087690768450", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/007e6c54bc86b40950b2d213973cd732f47163ce.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 4, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "16836724" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/ceb7d1827f13103f0d499f62b1ffa8af5f05c143.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/ceb7d1827f13103f0d499f62b1ffa8af5f05c143.png", + "fan": { + "color": "#942b32", + "color_format": { + "colors": [ + "#942b32FF", + "#942b32FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "刺客信条15周年", + "num_desc": "000001", + "number": 1 + }, + "id": 38456, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/ceb7d1827f13103f0d499f62b1ffa8af5f05c143.png", + "item_id": 38456, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=38456&isdiy=0&part=card&from=post&f_source=garb&vmid=16836724&native.theme=1&navhide=1", + "name": "刺客信条15周年粉丝专属" + }, + "face": "https://i1.hdslb.com/bfs/face/007e6c54bc86b40950b2d213973cd732f47163ce.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/16836724/dynamic", + "label": "", + "mid": 16836724, + "name": "UBISOFT育碧", + "official_verify": { + "desc": "", + "type": 1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2023年07月28日", + "pub_ts": 1690542092, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1755792000000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "每个人都是如王子一般的主角,这段名为人生的冒险,就是一场终将胜利的横版闯关。\n《波斯王子》系列历经34年沉浮,如今", + "text": "每个人都是如王子一般的主角,这段名为人生的冒险,就是一场终将胜利的横版闯关。\n《波斯王子》系列历经34年沉浮,如今", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "jump_url": "//search.bilibili.com/all?keyword=%E6%B3%A2%E6%96%AF%E7%8E%8B%E5%AD%90%EF%BC%9A%E5%A4%B1%E8%90%BD%E7%9A%84%E7%8E%8B%E5%86%A0", + "orig_text": "#波斯王子:失落的王冠#", + "text": "#波斯王子:失落的王冠#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + { + "orig_text": "回归系列原点,以横版闯关游戏的姿态归来!想知道《波斯王子》系列是如何走到今天的吗?点击视频进入这场人生的“横版闯关”吧", + "text": "回归系列原点,以横版闯关游戏的姿态归来!想知道《波斯王子》系列是如何走到今天的吗?点击视频进入这场人生的“横版闯关”吧", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + }, + { + "emoji": { + "icon_url": "https://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "size": 1, + "text": "[打call]", + "type": 1 + }, + "orig_text": "[打call]", + "text": "[打call]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + } + ], + "text": "每个人都是如王子一般的主角,这段名为人生的冒险,就是一场终将胜利的横版闯关。\n《波斯王子》系列历经34年沉浮,如今#波斯王子:失落的王冠#回归系列原点,以横版闯关游戏的姿态归来!想知道《波斯王子》系列是如何走到今天的吗?点击视频进入这场人生的“横版闯关”吧[打call]" + }, + "major": { + "archive": { + "aid": "404110312", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV17V41157hA", + "cover": "http://i2.hdslb.com/bfs/archive/9c275f2eb0f3c6b051e5c1abbda1db8201dc7b0f.jpg", + "desc": "时之神力,逆转乾坤;波斯舞台,王子归来!《波斯王子:失落的王冠》的传奇冒险将于2024年1月18日开启!", + "disable_preview": 0, + "duration_text": "05:13", + "jump_url": "//www.bilibili.com/video/BV17V41157hA/", + "stat": { + "danmaku": "25", + "play": "4.6万" + }, + "title": "波斯最强体操运动员是谁?", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 92, + "forbidden": false + }, + "forward": { + "count": 5, + "forbidden": false + }, + "like": { + "count": 1350, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "606448624", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "606448624" + }, + "id_str": "741290237143023616", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/2e591a702d42f753fdfb847825274ef745675e51.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/488870931b1bba66da36d22848f0720480d3d79a.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/2e591a702d42f753fdfb847825274ef745675e51.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "2518014" + }, + "face": "https://i0.hdslb.com/bfs/face/2e591a702d42f753fdfb847825274ef745675e51.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/2518014/dynamic", + "label": "", + "mid": 2518014, + "name": "熊木柚子", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/488870931b1bba66da36d22848f0720480d3d79a.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp", + "image_enhance_frame": "https://i0.hdslb.com/bfs/garb/item/4316a3910bb0bd6f2f1c267a3e9187f0b9fe5bd0.png", + "n_pid": 32257, + "name": "EveOneCat2", + "pid": 32257 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年12月19日", + "pub_ts": 1671433483, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1786550400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "606448624", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1J84y147af", + "cover": "http://i2.hdslb.com/bfs/archive/81ea384080b7598ed4a4ac7bc3cd68341932b042.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "02:19", + "jump_url": "//www.bilibili.com/video/BV1J84y147af/", + "stat": { + "danmaku": "17", + "play": "1.4万" + }, + "title": "【彩虹岛】Merry Christmas 尖叫雪地BGM——《snowfield雪地回音》", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 214, + "forbidden": false + }, + "forward": { + "count": 5, + "forbidden": false + }, + "like": { + "count": 994, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "772580225", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "772580225" + }, + "id_str": "700423623235600425", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/eba2897173640343e5f9294f365ee0eb2082f525.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "387122516" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "fan": { + "color": "#BFC8D2", + "color_format": { + "colors": [ + "#B8C7D0FF", + "#A2A7B0FF" + ], + "end_point": "100,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "XXXX", + "num_desc": "008059", + "number": 8059 + }, + "id": 69432, + "image_enhance": "https://i0.hdslb.com/bfs/garb/open/86e89e72b134283bf72e66c8e7c6e49b2d26d9e3.png", + "item_id": 69432, + "jump_url": "https://www.bilibili.com/h5/mall/digital-card/home?act_id=102704&from=post&f_source=garb&-Abrowser=live&hybrid_set_header=2&navhide=1&anchor_task=1", + "name": "名侦探柯南30周年" + }, + "face": "https://i2.hdslb.com/bfs/face/eba2897173640343e5f9294f365ee0eb2082f525.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/387122516/dynamic", + "label": "", + "mid": 387122516, + "name": "橙子面包酱_", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年08月31日", + "pub_ts": 1661918483, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1755273600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "上学去了˃ʍ˂", + "text": "上学去了˃ʍ˂", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "上学去了˃ʍ˂" + }, + "major": { + "archive": { + "aid": "772580225", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1o14y1W7AZ", + "cover": "http://i2.hdslb.com/bfs/archive/fdf552056a23e3118c15b68f4acf3e62ae9a043d.jpg", + "desc": "开头有点夹子,对不起>人<!!!", + "disable_preview": 0, + "duration_text": "02:43", + "jump_url": "//www.bilibili.com/video/BV1o14y1W7AZ/", + "stat": { + "danmaku": "30", + "play": "1.7万" + }, + "title": "【爷青回系列】《某个心跳》cover本兮", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 159, + "forbidden": false + }, + "forward": { + "count": 6, + "forbidden": false + }, + "like": { + "count": 1222, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "360051457", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "360051457" + }, + "id_str": "809870209103953945", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/991b66faf44236cdacacda526b9ab33f1445b10e.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/488870931b1bba66da36d22848f0720480d3d79a.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/face/991b66faf44236cdacacda526b9ab33f1445b10e.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i1.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "73276978" + }, + "face": "https://i1.hdslb.com/bfs/face/991b66faf44236cdacacda526b9ab33f1445b10e.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/73276978/dynamic", + "label": "", + "mid": 73276978, + "name": "醉樱履冰", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i1.hdslb.com/bfs/garb/item/488870931b1bba66da36d22848f0720480d3d79a.png", + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp", + "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/4316a3910bb0bd6f2f1c267a3e9187f0b9fe5bd0.png", + "n_pid": 32257, + "name": "EveOneCat2", + "pid": 32257 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2023年06月22日", + "pub_ts": 1687401002, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1767542400000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "status": 1, + "theme_type": 0, + "type": 2 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "360051457", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1ZX4y1W7zd", + "cover": "http://i2.hdslb.com/bfs/archive/627de932421b996ef8782c35ad17c816a1a9e7b8.jpg", + "desc": "回放:BV1tN411r7oU\n【逍遥散人】直播间:https://live.bilibili.com/1017\n【逍遥散人】主页:https://space.bilibili.com/168598", + "disable_preview": 0, + "duration_text": "20:16", + "jump_url": "//www.bilibili.com/video/BV1ZX4y1W7zd/", + "stat": { + "danmaku": "165", + "play": "5.6万" + }, + "title": "【逍遥散人】散人看11年前自己的实况《幽灵诡计》", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 80, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 1339, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "897064867", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "897064867" + }, + "id_str": "666670390017261601", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/c93eb41c2b7c1a1741f4ef6126bc78a5332014df.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.8000000000000002, + "axis_y": 0.8000000000000002, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "rgb(255,255,255)", + "border": "2px solid rgba(255,255,255,1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 3, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "48421904" + }, + "decoration_card": { + "big_card_url": "https://i0.hdslb.com/bfs/vip/e2ffa1d1d491fe0464338ed3921327ef5e4b42c5.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "fan": {}, + "id": 28, + "image_enhance": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "item_id": 28, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28&isdiy=0&part=card&from=post&f_source=garb&vmid=48421904&native.theme=1&navhide=1", + "name": "2233娘" + }, + "face": "https://i2.hdslb.com/bfs/face/c93eb41c2b7c1a1741f4ef6126bc78a5332014df.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/48421904/dynamic", + "label": "", + "mid": 48421904, + "name": "贾逸可", + "official_verify": { + "desc": "", + "type": 0 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2022年06月01日", + "pub_ts": 1654059696, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1746288000000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 1 + } + }, + "module_dynamic": { + "additional": null, + "desc": { + "rich_text_nodes": [ + { + "orig_text": "一转眼十年啦,当时我还没有入驻B站,十年前你听过这首《红白机》(游戏机之歌)吗?\n我是既能模仿华语乐坛歌手翻唱,也能原创的贾逸可。祝大家儿童节快乐!\n", + "text": "一转眼十年啦,当时我还没有入驻B站,十年前你听过这首《红白机》(游戏机之歌)吗?\n我是既能模仿华语乐坛歌手翻唱,也能原创的贾逸可。祝大家儿童节快乐!\n", + "type": "RICH_TEXT_NODE_TYPE_TEXT" + } + ], + "text": "一转眼十年啦,当时我还没有入驻B站,十年前你听过这首《红白机》(游戏机之歌)吗?\n我是既能模仿华语乐坛歌手翻唱,也能原创的贾逸可。祝大家儿童节快乐!\n" + }, + "major": { + "archive": { + "aid": "897064867", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1aA4y1d7fQ", + "cover": "http://i1.hdslb.com/bfs/archive/5a20992eb2a886998afdd82a08b975c0e7ea2dbf.jpg", + "desc": "一转眼十年啦,当时我还没有入驻B站,十年前你听过这首《红白机》(游戏机之歌)吗?\n我是既能模仿华语乐坛歌手翻唱,也能原创的贾逸可。祝大家儿童节快乐!\n用这首歌送给我们的童年~一起爷青回,华语乐坛系列:\n【常玉(周董点赞原创)】BV1st4y1s7Kk\n【爱你】BV1gF41157J8\n【热爱105°C的你】BV1qw411Z7Zy\n【孤勇者】BV1AM4y1P7De\n【有何不可】BV1WL411T7vD\n【达拉崩吧】BV1rY411j73X\n【本操纲目】BV1PY411A7sJ\n【萨日朗】BV16L4y1", + "disable_preview": 0, + "duration_text": "03:32", + "jump_url": "//www.bilibili.com/video/BV1aA4y1d7fQ/", + "stat": { + "danmaku": "129", + "play": "2万" + }, + "title": "⚡️爷青回!原创游戏机之歌《红白机》⚡️", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 109, + "forbidden": false + }, + "forward": { + "count": 11, + "forbidden": false + }, + "like": { + "count": 1867, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + }, + { + "dynamic_card_item": { + "basic": { + "comment_id_str": "792152742", + "comment_type": 1, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "792152742" + }, + "id_str": "874962963680722993", + "modules": { + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/3bb211c6aa7a9adc08d22d30b3c818c5040797c1.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "1621845192" + }, + "face": "https://i0.hdslb.com/bfs/face/3bb211c6aa7a9adc08d22d30b3c818c5040797c1.jpg", + "face_nft": false, + "following": null, + "jump_url": "//space.bilibili.com/1621845192/dynamic", + "label": "", + "mid": 1621845192, + "name": "太阳嘟嘟小姐姐", + "official_verify": { + "desc": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_action": "投稿了视频", + "pub_location_text": "", + "pub_time": "2023年12月14日", + "pub_ts": 1702556590, + "type": "AUTHOR_TYPE_NORMAL", + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "status": 0, + "theme_type": 0, + "type": 0 + } + }, + "module_dynamic": { + "additional": null, + "desc": null, + "major": { + "archive": { + "aid": "792152742", + "badge": { + "bg_color": "#FB7299", + "color": "#FFFFFF", + "icon_url": null, + "text": "投稿视频" + }, + "bvid": "BV1ZC4y1X7zu", + "cover": "http://i2.hdslb.com/bfs/archive/edbfc6fa5a168714789678bbea3aab74d8af7e9c.jpg", + "desc": "-", + "disable_preview": 0, + "duration_text": "00:13", + "jump_url": "//www.bilibili.com/video/BV1ZC4y1X7zu/", + "stat": { + "danmaku": "5", + "play": "1.5万" + }, + "title": "仿青儿仿得我要心脏骤停了!大家都说太像了,把我高兴得做梦都要笑醒!呜呜呜太喜欢了!", + "type": 1 + }, + "type": "MAJOR_TYPE_ARCHIVE" + }, + "topic": null + }, + "module_more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + }, + { + "label": "与话题无关", + "type": "THREE_POINT_TOPIC_IRRELEVANT" + } + ] + }, + "module_stat": { + "comment": { + "count": 41, + "forbidden": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 1223, + "forbidden": false, + "status": false + } + } + }, + "type": "DYNAMIC_TYPE_AV", + "visible": true + }, + "topic_type": "DYNAMIC" + } + ], + "offset": "heat_2922347_20_20", + "topic_sort_by_conf": { + "all_sort_by": [ + { + "sort_by": 2, + "sort_name": "热门" + }, + { + "sort_by": 3, + "sort_name": "最新" + } + ], + "default_sort_by": 2, + "show_sort_by": 2 + } + } + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-07-25T01:56:48.912698186Z --> + +## ~~获取包含置顶及热门的动态列表~~ + +> ~~https://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics~~ + +该接口已失效, 参见 [#852](https://github.com/SocialSisterYi/bilibili-API-collect/issues/852), 历史文档见 [此处](https://github.com/SocialSisterYi/bilibili-API-collect/blob/e99f64c9b5c2bbd156e95ca254620378a22697f7/docs/dynamic/tag_dynamics.md#%E8%8E%B7%E5%8F%96%E5%8C%85%E5%90%AB%E7%BD%AE%E9%A1%B6%E5%8F%8A%E7%83%AD%E9%97%A8%E7%9A%84%E5%8A%A8%E6%80%81%E5%88%97%E8%A1%A8) + +## ~~获取历史动态列表~~ + +> ~~https://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history~~ + +该接口已失效, 参见 [#852](https://github.com/SocialSisterYi/bilibili-API-collect/issues/852), 历史文档见 [此处](https://github.com/SocialSisterYi/bilibili-API-collect/blob/e99f64c9b5c2bbd156e95ca254620378a22697f7/docs/dynamic/tag_dynamics.md#%E8%8E%B7%E5%8F%96%E5%8E%86%E5%8F%B2%E5%8A%A8%E6%80%81%E5%88%97%E8%A1%A80) + +## 搜索发布话题 + +> https://app.bilibili.com/x/topic/pub/search +> https://api.bilibili.com/x/topic/pub/search + +*请求方法: GET* + +注: 该接口可能存在传入页面大小与返回数量不匹配的问题, 可能与访问权限有关 + +<!--{ + "from": { + "url": "https://t.bilibili.com/" + "selector": ".bili-topic-search__input__inner" + } +}--> + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| keywords | str | 关键词 | 不必要 | | +| content | str | 空 | 不必要 | | +| upload_id | str | 上传 id? | 不必要 | 页面刷新第一次请求时为空, 后均非空<br />似乎为固定值, 格式: `${your_mid}_${login_or_last_refresh_or_cookie_ts}_${dig4}`, 如 `616368979_1722652786_2534` | +| page_size | int | 页大小 | 不必要 | 默认为 20 | +| page_num | int | 1 | 不必要 | 不用于翻页 | +| offset | int | 偏移 | 不必要 | 可从响应 `data.page_info.offset` 中获取 | +| web_location | str | 333.1365 | 不必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功<br />-400: 请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| new_topic | obj | 新建话题? | | +| has_create_jurisdiction | bool | false | 是否有创建权限? | +| topic_items | array | 话题列表 | | +| request_id | str | 请求 id | | +| page_info | obj | 页信息 | | + +`data` 中的 `new_topic` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| name | str | 请求参数中的 `keywords` | | + +`data` 中的 `topic_items` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| id | num | 话题 id | | +| name | str | 话题名 | | +| view | num | 浏览数 | | +| discuss | num | 讨论数 | | +| stat_desc | str | 状态描述 | | +| description | str | 话题描述 | | +| show_interact_data | bool | false | 是否显示互动数据? | + +`data` 中的 `page_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| offset | num | 下次请求可用的偏移 | 请求参数中的 `offset` + `page_size` | +| has_more | bool | 是否有更多数据 | 当没有更多时可能不存在该字段 | + +**示例:** + +注: 该示例就是解释开头所注的问题的一个示例 + +```shell +curl -G 'https://app.bilibili.com/x/topic/pub/search' \ +--url-query 'keywords=2233' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "new_topic": { + "name": "2233" + }, + "has_create_jurisdiction": false, + "topic_items": [ + { + "id": 1101122, + "name": "2233异世集", + "view": 2502, + "discuss": 11, + "stat_desc": "2502浏览·11讨论", + "description": "分享数字周边", + "show_interact_data": false + }, + { + "id": 1050671, + "name": "2233生日倒计时", + "view": 21149, + "discuss": 130, + "stat_desc": "2.1万浏览·130讨论", + "description": "2233生日倒计时", + "show_interact_data": false + }, + { + "id": 1057129, + "name": "2233手办可可爱爱", + "view": 836, + "discuss": 14, + "stat_desc": "836浏览·14讨论", + "description": "喜欢2233,", + "show_interact_data": false + } + ], + "request_id": "1$0$1723796266$7f515d4e26b7bd5007fb8ca4b066bf0b", + "page_info": { + "offset": 4, + "has_more": true + } + } +} +``` + +</details> + +## 推荐搜索话题? + +> https://app.bilibili.com/x/topic/pub/rcmd/search +> https://api.bilibili.com/x/topic/pub/rcmd/search + +*请求方法: GET* + +注: 该接口好像啥也不返回, 但是网页端会请求该接口 + +<!--{ + "from": { + "url": "https://t.bilibili.com/" + }, + "gh": [1083] +}--> + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| keywords | str | 空 | 不必要 | | +| upload_id | str | 上传 id? | 不必要 | 同上 | +| web_location | str | 333.1365 | 不必要 | 有时请求不带该参数 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | str | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | -- | --- | +| topic_items | unknown[] | 空? | 可能与 [推荐话题](#推荐话题) 相同? | +| request_id | str | 请求 id | 当传入 `keywords` 时不为空| + +**示例:** + +```shell +curl -G 'https://app.bilibili.com/x/topic/pub/rcmd/search' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "topic_items": [], + "request_id": "" + } +} +``` + +</details> + +## 推荐话题 + +> https://app.bilibili.com/x/topic/web/dynamic/rcmd + +*请求方法: GET* + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ------ | ---------- | ------ | ---- | +| source | string | 来源 | 不必要 | 如 `Web` | +| page_size | number | 获取数量 | 不必要 | 默认为 `9`, 留空为 `6`, 最大为 `26`, 最小为 `1` | +| web_location | string | `333.1365` | 不必要 | | + + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 成功时为 `0` | +| ttl | num | `1` | | +| data | str | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| topic_items | object[] | 话题列表 | 套了个娃 | + +`data.topic_items[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| discuss | number | 讨论数 | | +| dynamics | number | 动态数 | | +| id | number | 话题 id | | +| jump_url | string | 跳转 URL | | +| name | string | 话题名 | | +| show_interact_data | boolean | 是否显示互动数据? | | +| view | number | 浏览数 | | + +**示例:** + +```shell +curl -G 'https://app.bilibili.com/x/topic/web/dynamic/rcmd?page_size=9' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "topic_items": [ + { + "discuss": 147, + "dynamics": 20, + "id": 1305890, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305890", + "name": "燕云河西凉州篇预测", + "show_interact_data": false, + "view": 261060 + }, + { + "discuss": 554, + "dynamics": 24, + "id": 1305885, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305885", + "name": "真人版驯龙高手新预告", + "show_interact_data": false, + "view": 472265 + }, + { + "discuss": 24358, + "dynamics": 57, + "id": 1305877, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305877", + "name": "国米4-3巴萨", + "show_interact_data": false, + "view": 4851673 + }, + { + "discuss": 201, + "dynamics": 24, + "id": 1305933, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305933", + "name": "公积金住房贷款利率下调0.25%", + "show_interact_data": false, + "view": 111704 + }, + { + "discuss": 20201, + "dynamics": 70, + "id": 1305920, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305920", + "name": "印度巴基斯坦交火", + "show_interact_data": false, + "view": 12102634 + }, + { + "discuss": 2497, + "dynamics": 37, + "id": 1305940, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305940", + "name": "降准降息释放什么信号", + "show_interact_data": false, + "view": 475373 + }, + { + "discuss": 11970, + "dynamics": 51, + "id": 1305886, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305886", + "name": "淮水竹亭值得一看吗", + "show_interact_data": false, + "view": 3171863 + }, + { + "discuss": 860, + "dynamics": 38, + "id": 1305904, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305904", + "name": "GTA6全新预告", + "show_interact_data": false, + "view": 202393 + }, + { + "discuss": 576, + "dynamics": 23, + "id": 1305830, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1305830", + "name": "默茨正式当选德国新任总理", + "show_interact_data": false, + "view": 280448 + } + ] + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-05-08T06:56:53.249280549Z --> + +## 检查话题是否存在 + +> https://api.bilibili.com/x/topic/pub/is_existed + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +<!-- #1357 --> + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| topic | string | 话题名 | 必要 | 大小写敏感 | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| already_existed | boolean | 是否已经存在 | | +| synonym_topic | object | 类似话题 | | + +`data.synonym_topic` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| topic_items | object[] | 话题列表 | | + +`data.synonym_topic.topic_items[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| description | string | 话题描述 | | +| discuss | number | 讨论数 | | +| dynamics | number | 动态数 | | +| id | number | 话题 id | | +| jump_url | string | 跳转 URL | | +| name | string | 话题名 | | +| show_interact_data | boolean | 显示互动数据? | | +| view | number | 浏览数 | | + +**示例:** + +```shell +-curl -G 'https://api.bilibili.com/x/topic/pub/is_existed' \ +--url-query 'topic=BW2025' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "already_existed": true, + "synonym_topic": { + "topic_items": [ + { + "description": "Ave Mujica、大石昌良、宫野真守、虹咲学园 学园偶像同好会、偶像大师闪耀色彩、Machico、茅原实里、RAISE A SUILEN、TOGENASHI TOGEARI、yama等参演嘉宾信息已解禁🎶7月11日至13日,在国家会展中心(上海)虹馆EH与大家见面~", + "discuss": 44910, + "dynamics": 5183, + "id": 1297553, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1297553", + "name": "BML2025", + "show_interact_data": false, + "view": 35386975 + }, + { + "description": "心火燎原,2025季中冠军赛即将到来。", + "discuss": 48373, + "dynamics": 523, + "id": 1313369, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1313369", + "name": "2025MSI", + "show_interact_data": false, + "view": 15264132 + }, + { + "description": "简中版《命运-冠位指定》将于2025年8月8日-8月10日在杭州举办FES2025九周年纪念展。", + "discuss": 1421, + "dynamics": 121, + "id": 1315085, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1315085", + "name": "FGOFES2025", + "show_interact_data": false, + "view": 927806 + } + ] + } + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-07-26T02:37:34.536597611Z --> + +## 获取指定话题详细信息 + +> https://app.bilibili.com/x/topic/web/details/top + +*请求方法: GET* + +<!-- #1360 --> + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| topic_id | number | 话题 id | 必要 | | +| source | string | 来源 | 不必要 | 如 `Web` `H5` | +| web_location | string | `333.1036` | 不必要 | 当 `source` 为 `H5` 时 | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| click_area_card | object | 点击区域卡片? | | +| functional_card | object | 功能卡片 | | +| top_details | object | 话题详情 | | + +`data.click_area_card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | + +`data.functional_card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| traffic_card | object | 引流卡片 | | + +`data.functional_card.traffic_card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| benefit_point | string | 奖励点 | | +| card_desc | string | 卡片描述 | | +| icon_url | string | 图标 URL | | +| jump_title | string | 跳转标题 | | +| jump_url | string | 跳转 URL | | +| name | string | 名称 | | + +`data.top_details` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| close_pub_layer_entry | boolean | 是否关闭发布层入口? | | +| has_create_jurisdiction | boolean | 是否有创建权限? | | +| operation_content | object | 操作内容? | | +| topic_creator | object | 话题创建者 | | +| topic_item | object | 话题详情 | | +| word_color | number | 话题字体颜色? | | + +`data.top_details.operation_content` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | + +`data.top_details.topic_creator` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| face | string | 头像 URL | | +| name | string | 昵称 | | +| uid | number | mid (UID) | | + +`data.top_details.topic_item` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| back_color | string | 背景色 | | +| ctime | number | 创建时间 | | +| description | string | 话题描述 | | +| discuss | number | 讨论数 | | +| dynamics | number | 动态数 | | +| fav | number | 收藏数 | | +| id | number | 话题 id | | +| jump_url | string | 跳转 URL | | +| like | number | 点赞数 | | +| name | string | 话题名 | | +| share | number | 分享数 | | +| share_pic | string | 分享图片 URL | 似乎就是话题的图标 | +| share_url | string | 分享的 URL | | +| show_interact_data | boolean | 显示互动数据? | | +| view | number | 浏览数 | | + +**示例:** + +```shell +curl -G 'https://app.bilibili.com/x/topic/web/details/top' \ +--url-query 'topic_id=1314000' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "click_area_card": {}, + "functional_card": { + "traffic_card": { + "benefit_point": "投稿4K视频瓜分千万流量&奖金", + "card_desc": "2025-10-01 00:00截止", + "icon_url": "https://i0.hdslb.com/bfs/activity-plat/static/20211019/4c5b6134e2def772efe20dabcca1f6e1/vGqnSBjy8N.png", + "jump_title": "立即参与", + "jump_url": "https://www.bilibili.com/blackboard/era/4Kchaoqingpc.html", + "name": "眼见帧实·B站超高清视频计划" + } + }, + "top_details": { + "close_pub_layer_entry": false, + "has_create_jurisdiction": false, + "operation_content": {}, + "topic_creator": { + "face": "https://i0.hdslb.com/bfs/face/9da46bf581938ff29c2143f186b3f66409c11bf6.jpg", + "name": "赛博星人科技汪", + "uid": 394205865 + }, + "topic_item": { + "back_color": "#6188FF", + "ctime": 1750734201, + "description": "来B站,分享你的超高清视频!2025.6.30-9.30期间,参与“眼见帧实·B站超高清视频计划”活动,投稿超清视频,可以分享超清开箱、超清vlog、超清科普、超清美食、超清风光大片等内容!丰厚奖金&礼物等你来拿~", + "discuss": 435100, + "dynamics": 7902, + "fav": 15, + "id": 1314000, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1314000", + "like": 19, + "name": "B站超高清视频计划", + "share": 7, + "share_pic": "http://i0.hdslb.com/bfs/vc/7701fba940e721ceb756cc73694ebb8f510fe0cc.png", + "share_url": "https://m.bilibili.com/topic-detail?topic_id=1314000", + "show_interact_data": true, + "view": 90735677 + }, + "word_color": 0 + } + }, + "message": "0", + "ttl": 1 +} +``` +</details> + +<!-- Generated by json-apidoc-gen @ 2025-07-26T03:17:14.502472328Z --> diff --git a/docs/electric/Bcoin.md b/docs/electric/Bcoin.md new file mode 100644 index 0000000..970d1bc --- /dev/null +++ b/docs/electric/Bcoin.md @@ -0,0 +1,323 @@ +# B币方式充电 + +<img src="../../assets/img/battery-100.png" width="100" height="100"/> + +**注**:以前充电是电池的概念,1B币折合10电池,一般地充电10电池可获得1经验 + +**目前(2020/12/02后)则是贝壳的概念,1B币折合1贝壳、1经验(如果存在小数点,则经验值向下取整,即2.5B币获得2经验)** + +## 新版本B币充电 + +> https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- | +| bp_num | num | 贝壳数量 | 必要 | 必须在2-9999之间 | +| is_bp_remains_prior | bool | 是否优先扣除B币余额 | 必要 | [true,false],B币充电请选择true | +| up_mid | num | 充电对象用户mid | 必要 | | +| otype | str | 充电来源 | 必要 | up:空间充电<br />archive:视频充电 | +| oid | num | 充电来源代码 | 必要 | 空间充电:充电对象用户mid<br />视频充电:稿件avid | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功(并不代表充电成功) <br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />-500:服务器错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------- | ------------------------------------------------ | +| mid | num | 本用户mid | | +| up_mid | num | 目标用户mid | | +| order_no | str | 留言token | 用于添加充电留言 | +| bp_num | str | 充电贝壳数 | | +| exp | num | 获得经验数 | | +| status | num | 返回结果 | 4:成功<br />-2:低于20电池下限<br />-4:B币不足 | +| msg | str | 错误信息 | 默认为空 | + +**示例:** + +以空间的方式向用户`mid=293793435`充了2贝壳,得到2经验,留言token为`BPRG5CEC3VUPOOANA540` + +此时`data`.`status`=`4` + +~~自己给自己冲QAQ~~ + +```shell +curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \ +--data-urlencode 'bp_num=2' \ +--data-urlencode 'is_bp_remains_prior=true' \ +--data-urlencode 'up_mid=293793435' \ +--data-urlencode 'otype=up' \ +--data-urlencode 'oid=293793435' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 293793435, + "up_mid": 293793435, + "order_no": "BPRG5CEC3VUPOOANA540", + "bp_num": 2, + "exp": "2", + "status": 4, + "msg": "" + } +} +``` + +</details> + +当所充电贝壳数小于2时,充电不会成功 + +此时`data`.`status`=`-2` + +```shell +curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \ +--data-urlencode 'bp_num=1' \ +--data-urlencode 'is_bp_remains_prior=true' \ +--data-urlencode 'otype=up' \ +--data-urlencode 'oid=293793435' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 0, + "up_mid": 0, + "order_no": "", + "bp_num": "0", + "exp": 0, + "status": -2, + "msg": "elec raw order create failed: 88201" + } +} +``` + +</details> + +当所充贝壳数折合的B币数不足时,充电也不会成功 + +此时`data`.`status`=`-4` + +```shell +curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \ +--data-urlencode 'bp_num=99' \ +--data-urlencode 'is_bp_remains_prior=true' \ +--data-urlencode 'up_mid=293793435' \ +--data-urlencode 'otype=up' \ +--data-urlencode 'oid=293793435' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 0, + "up_mid": 0, + "order_no": "", + "bp_num": "0", + "exp": 0, + "status": -4, + "msg": "bp.to.battery http failed, invalid args, errNo=800409904: B 币余额不足" + } +} +``` + +</details> + + +## 老版本B币充电 + +老版本目前已过期,调用接口成功后(code返回0),data.status会返回0,且B币不会消耗,贝壳也不会增加。以下是历史信息: + +<details> +<summary>查看折叠内容</summary> + +> https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- | +| elec_num | num | 充电电池数量 | 必要 | 必须在2-9999之间 | +| up_mid | num | 充电对象用户mid | 必要 | | +| otype | str | 充电来源 | 必要 | up:空间充电<br />archive:视频充电 | +| oid | num | 充电来源代码 | 必要 | 空间充电:充电对象用户mid<br />视频充电:稿件avid | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功(并不代表充电成功) <br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------- | ------------------------------------------------ | +| mid | num | 本用户mid | | +| up_mid | num | 目标用户mid | | +| order_no | str | 留言token | 用于添加充电留言 | +| elec_num | num | 充电电池数 | | +| exp | num | 获得经验数 | | +| status | num | 返回结果 | 4:成功<br />-2:低于20电池下限<br />-4:B币不足 | +| msg | str | 错误信息 | 默认为空 | + +**示例:** + +以空间的方式向用户`mid=293793435`充了20电池,得到2经验,留言token为`BPRG5CEC3VUPOOANA540` + +此时`data`.`status`=`4` + +~~再次自己冲自己QAQ~~ + +```shell +curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \ +--data-urlencode 'elec_num=20' \ +--data-urlencode 'up_mid=293793435' \ +--data-urlencode 'otype=up' \ +--data-urlencode 'oid=293793435' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 293793435, + "up_mid": 293793435, + "order_no": "BPRG5CEC3VUPOOANA540", + "elec_num": 20, + "exp": 2, + "status": 4, + "msg": "" + } +} +``` + +</details> + +当所充电池数小于2时,充电不会成功 + +此时`data`.`status`=`-2` + +```shell +curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \ +--data-urlencode 'elec_num=1' \ +--data-urlencode 'up_mid=293793435' \ +--data-urlencode 'otype=up' \ +--data-urlencode 'oid=293793435' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 0, + "up_mid": 0, + "order_no": "", + "elec_num": 0, + "exp": 0, + "status": -2, + "msg": "elec raw order create failed: 88201" + } +} +``` + +</details> + +当所充电池数折合的B币数不足时,充电也不会成功 + +此时`data`.`status`=`-4` + +```shell +curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \ +--data-urlencode 'elec_num=999' \ +--data-urlencode 'up_mid=293793435' \ +--data-urlencode 'otype=up' \ +--data-urlencode 'oid=293793435' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 0, + "up_mid": 0, + "order_no": "", + "elec_num": 0, + "exp": 0, + "status": -4, + "msg": "bp.to.battery http failed, invalid args, errNo=800409904: B 币余额不足" + } +} +``` + +</details> +</details> diff --git a/docs/electric/WeChat&Alipay.md b/docs/electric/WeChat&Alipay.md new file mode 100644 index 0000000..2d2e193 --- /dev/null +++ b/docs/electric/WeChat&Alipay.md @@ -0,0 +1,198 @@ +# 微信&支付宝方式充电 + +<img src="../../assets/img/battery-100.png" width="100" height="100"/> + +操作流程: + +1. 申请充电二维码及扫码秘钥,秘钥临时保存备用 +2. 使用`qr_code_url`中的值生成二维码 +3. 用支付宝或微信扫描 +4. 以扫码秘钥作为参数轮询检查扫码支付结果 + +## 申请充电二维码及扫码秘钥 + +> https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/qr_code/create + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +秘钥有效时间为10分钟 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| bp_num | num | 充电B币数量 | 必要 | 必须在2-9999之间 | +| is_bp_remains_prior | bool | 是否优先扣除B币 | 必要 | true:是<br />false:否<br />在B币不足时剩余的部分利用支付平台支付 | +| up_mid | num | 充电对象用户mid | 必要 | | +| otype | str | 充电来源 | 必要 | up:空间充电<br />archive:视频充电 | +| oid | num | 充电来源代码 | 必要 | 空间充电:充电对象用户mid<br />视频充电:稿件avid | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />-500:服务器错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------------ | -------- | +| qr_code_url | str | 支付二维码生成内容 | 存在转义 | +| qr_token | str | 扫码秘钥 | | +| exp | num | 获得经验数 | | + +**示例:** + +申请空间的方式向用户23215368充电10电池且不使用B币的支付二维码 + +```shell +curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/create' \ +--data-urlencode 'elec_num=10' \ +--data-urlencode 'up_mid=23215368' \ +--data-urlencode 'is_bp_remains_prior=false' \ +--data-urlencode 'otype=up' \ +--data-urlencode 'oid=23215368' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "qr_code_url": "https://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/gateway?mid=293793435&token=c1cb1d95d2194ba58df6bb0f24ae1aaa", + "qr_token": "c1cb1d95d2194ba58df6bb0f24ae1aaa", + "exp": 1 + } +} +``` + +</details> + +## 检查扫码支付结果 + +> https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | ---- | +| qr_token | str | 扫码秘钥 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------- | ------------------------------------------------------------ | +| qr_token | str | 扫码秘钥 | | +| order_no | str | 留言token | 未成功则无此项<br />用于添加充电留言 | +| mid | num | 当前用户mid | | +| status | num | 状态值 | 若秘钥错误则无此项<br />1:已支付<br />2:未扫描<br />3:未确认 | + +**示例:** + +当申请到的支付二维码未被扫描时,`data`.`status`的值为`2` + +```shell +curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \ +--data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "qr_token": "c7cbdc47fc424cd18f2146db653597b8", + "mid": 293793435, + "status": 2 + } +} +``` + +</details> + +当申请到的支付二维码已扫描但未确认时,`data`.`status`的值为`3` + +```shell +curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \ +--data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "qr_token": "c7cbdc47fc424cd18f2146db653597b8", + "mid": 293793435, + "status": 3 + } +} +``` + +</details> + +成功支付后,`data`.`status`的值为`1`,且`data`.`order_no`存在留言token + +```shell +curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \ +--data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "qr_token": "bd649c836c524550bfe22a369334fc05", + "order_no": "BPTD36U3KP82I31RSSLG", + "mid": 293793435, + "status": 1 + } +} +``` + +</details> diff --git a/docs/electric/charge_list.md b/docs/electric/charge_list.md new file mode 100644 index 0000000..6bd2cdd --- /dev/null +++ b/docs/electric/charge_list.md @@ -0,0 +1,542 @@ +# 充电列表 + +## 获取空间充电公示列表 + +> <https://api.bilibili.com/x/ugcpay-rank/elec/month/up> + +*请求方式:GET* + +本接口需要在请求标头中提供有效的浏览器 UA,如 `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36` + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| up_mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />88214:up主未开通充电 | +| message | str | 错误信息 | | +| ttl | num | 0 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------------- | --------------- | +| count | num | 本月充电人数 | | +| list | array | 本月充电用户列表 | | +| total_count | num | 总计充电次数 | | +| total | num | 总计充电次数 | 同`total_count` | +| special_day | num | 0 | 作用尚不明确 | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------- | +| 0 | obj | 充电用户1 | | +| n | obj | 充电用户(n+1) | 按照充电排名排列 | +| …… | obj | …… | …… | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------- | ---------------- | +| uname | str | 充电用户昵称 | | +| avatar | str | 充电用户头像url | | +| mid | num | 充电对象mid | | +| pay_mid | num | 充电用户mid | | +| rank | num | 充电用户排名 | 取决于充电的多少 | +| trend_type | num | 0 | 作用尚不明确 | +| vip_info | obj | 充电用户会员信息 | | +| message | str | 充电留言 | 无为空 | +| msg_hidden | num | 0 | 作用尚不明确 | + +`list`数组中的对象中的`vip_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------------- | ----- | +| vipDueMsec | num | 大会员过期时间 | 恒为0 | +| vipStatus | num | 大会员状态 | 包月充电时恒为0<br />自定义充电:<br />0:无<br />1:有 | +| vipType | num | 大会员类型 | 包月充电时恒为0<br />自定义充电:<br />0:无<br />1:月大会员<br />2:年度及以上大会员 | + +**示例:** + +查询用户`mid=53456`的充电公示列表 + +```shell +curl -G 'https://api.bilibili.com/x/ugcpay-rank/elec/month/up' \ + -A 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36' \ + --data-urlencode 'up_mid=53456' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "", + "ttl": 0, + "data": { + "count": 8521, + "list": [ + { + "uname": "云梦澡堂", + "avatar": "https://i1.hdslb.com/bfs/face/6589df5fdac0f80593f6a86e4d88dc08e25df3d2.jpg", + "mid": 53456, + "pay_mid": 1555775947, + "rank": 1, + "trend_type": 0, + "vip_info": { "vipDueMsec": 0, "vipStatus": 0, "vipType": 0 }, + "message": "", + "message_hidden": 0 + }, + { + "uname": "在下小天子", + "avatar": "https://i1.hdslb.com/bfs/face/a3bfbe6186889bb50dcd87c1156d07a70227a25b.jpg", + "mid": 53456, + "pay_mid": 508630801, + "rank": 2, + "trend_type": 0, + "vip_info": { "vipDueMsec": 0, "vipStatus": 0, "vipType": 0 }, + "message": "", + "message_hidden": 0 + } + ], + "total_count": 41919, + "total": 41919, + "special_day": 0 + } +} +``` + +</details> + +## 获取视频充电鸣谢名单 + +> <https://api.bilibili.com/x/web-interface/elec/show> + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------------ | ------------------ | +| mid | num | 目标用户mid | 必要 | | +| aid | num | 目标稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 目标稿件bvid | 必要(可选) | avid与bvid任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无视频<br />62001:不需要展示充电信息 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ----- | ---------------- | ------------ | +| show_info | obj | 展示选项 | | +| av_count | num | 目标视频充电人数 | | +| count | num | 本月充电人数 | | +| total_count | num | 总计充电人数 | | +| special_day | num | 0 | 作用尚不明确 | +| display_num | num | 0 | 作用尚不明确 | +| cnt_priv_type | num | 0 | 作用尚不明确 | +| list | array | 本月充电用户列表 | | + +`data`中的`show_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------------------ | ---------------- | +| show | bool | 是否展示视频充电鸣谢名单 | | +| state | num | 充电功能开启状态 | -1:未开通充电功能<br />1:已开通自定义充电<br />2:已开通包月、自定义充电<br />3:已开通包月高档、自定义充电 | +| title | str | 充电按钮显示文字 | 空字符串或 `充电` 或 `充电中` | +| jump_url | str | 跳转url | | +| icon | str | 充电图标 | | +| high_level | obj | 充电专属视频信息 | | +| with_qa_id | num | 充电问答id | | + +`show_info`中的`high_level`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------------------------ | ---------------- | +| privilege_type | num | 解锁视频所需最低定价档位的代码 | 见[充电档位代码与定价](../electric/monthly.md#充电档位代码privilege_type与定价) | +| title | str | 提示标题 | `该视频为「{充电档位名称}」专属视频` | +| sub_title | str | 提示子标题 | `开通「{充电档位定价}元档包月充电」即可观看` | +| show_button | bool | 是否显示按钮 | | +| button_text | str | 按钮文本 | `去开通` | +| jump_url | obj | 跳转url信息 | 详细信息有待补充 | +| intro | str | 充电介绍语 | | +| open | bool | (?) | | +| new | bool | (?) | | +| question_text | str | (?) | | +| qa_detail_link | str | (?) | | + +`high_level`中的`jump_url`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ----------------------- | ---- | +| up_link | str | UP主包月充电购买页面url | | +| paywall_link | str | 视频试看后的提示页面url | | +| previewbar_link | str | 视频预览页面url | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------- | +| 0 | obj | 充电用户1 | | +| n | obj | 充电用户(n+1) | 按照充电排名排列 | +| …… | obj | …… | …… | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | ---------------- | +| mid | num | 充电对象mid | | +| pay_mid | num | 充电用户mid | | +| rank | num | 充电用户排名 | 取决于充电的多少 | +| uname | str | 充电用户昵称 | | +| avatar | str | 充电用户头像url | | +| message | str | 充电留言 | 无为空 | +| msg_deleted | num | 0 | 作用尚不明确 | +| vip_info | obj | 充电用户会员信息 | | +| trend_type | num | 0 | 作用尚不明确 | + +`data`中的`list`数组中的`vip_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------------- | ----- | +| vipType | num | 大会员类型 | 包月充电时恒为0<br />自定义充电:<br />0:无<br />1:月大会员<br />2:年度及以上大会员 | +| vipDueMsec | num | 大会员过期时间 | 恒为0 | +| vipStatus | num | 大会员状态 | 包月充电时恒为0<br />自定义充电:<br />0:无<br />1:有 | + +**示例:** + +获取视频`av967773538`/` BV1up4y1y77i `,用户`mid=53456`的视频充电鸣谢名单 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/elec/show' \ + --data-urlencode 'mid=53456' \ + --data-urlencode 'aid=967773538' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/elec/show' \ + --data-urlencode 'mid=53456' \ + --data-urlencode 'bvid=BV1up4y1y77i' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "show_info": { + "show": true, + "state": 2, + "title": "充电", + "jump_url": "https://www.bilibili.com/h5/upower/index?mid=53456&navhide=1&prePage=video&oid=967773538", + "icon": "https://i0.hdslb.com/bfs/garb/item/33e2e72d9a0c855f036b4cb55448f44af67a0635.png", + "high_level": { + "privilege_type": 0, + "title": "", + "sub_title": "", + "show_button": false, + "button_text": "", + "jump_url": { "up_link": "", "paywall_link": "", "previewbar_link": "" }, + "intro": "", + "open": false, + "new": false + } + }, + "av_count": 0, + "count": 0, + "total_count": 41919, + "special_day": 0, + "display_num": 0, + "cnt_priv_type": 0, + "list": [ + { + "mid": 53456, + "pay_mid": 1555775947, + "rank": 1, + "uname": "云梦澡堂", + "avatar": "https://i1.hdslb.com/bfs/face/6589df5fdac0f80593f6a86e4d88dc08e25df3d2.jpg", + "message": "", + "msg_deleted": 0, + "vip_info": { "vipType": 0, "vipDueMsec": 0, "vipStatus": 0 }, + "trend_type": 0 + }, + { + "mid": 53456, + "pay_mid": 508630801, + "rank": 2, + "uname": "在下小天子", + "avatar": "https://i1.hdslb.com/bfs/face/a3bfbe6186889bb50dcd87c1156d07a70227a25b.jpg", + "message": "", + "msg_deleted": 0, + "vip_info": { "vipType": 0, "vipDueMsec": 0, "vipStatus": 0 }, + "trend_type": 0 + } + ] + } +} +``` + +</details> + +## 查询我收到的充电列表 + +> <https://pay.bilibili.com/bk/brokerage/listForCustomerRechargeRecord> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | -------- | ------ | ------------------- | +| currentPage | num | 页数 | 必要 | | +| pageSize | num | 分页大小 | 必要 | 取值范围\[1,50\] | +| customerId | num | (?) | 必要 | 目前为固定值:10026 | +| beginTime | str | 开始日期 | 非必要 | yyyy-MM-dd | +| endTime | str | 结束日期 | 非必要 | yyyy-MM-dd | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />800501007:user not login<br />800501008:内部错误<br />800501011:请求参数有误 | +| errno | num | | | +| msg | str | | | +| showMsg | str | | | +| data | obj | 信息本体 | | +| success | bool | | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ------------ | ---- | +| page | obj | 分页信息 | | +| result | array | 充电信息本体 | | +| config | array | (?) | | + +`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ---- | +| currentPage | num | 当前页数 | | +| pageSize | num | 当前分页大小 | | +| totalCount | num | 记录总数 | | +| totalPage | num | 总页数 | | + +`result`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ---------------- | ------------------- | +| mid | num | 充电人mid | | +| name | str | 充电人昵称 | | +| avatar | str | 充电人头像 | | +| originalThirdCoin | num | 原始B币数 | | +| brokerage | num | 实际收到的贝壳数 | | +| remark | str | 充电渠道 | Web/安卓/iOS | +| ctime | str | 充电时间 | yyyy-MM-dd HH:mm:ss | + +`config`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ---- | ---------- | +| mid | null | | 总是为null | +| name | null | | 总是为null | +| avatar | null | | 总是为null | +| originalThirdCoin | null | | 总是为null | +| brokerage | null | | 总是为null | +| remark | null | | 总是为null | +| ctime | null | | 总是为null | + +**示例:** + +```shell +curl -G 'https://pay.bilibili.com/bk/brokerage/listForCustomerRechargeRecord' \ + --data-urlencode 'currentPage=1' \ + --data-urlencode 'pageSize=2' \ + --data-urlencode 'customerId=10026' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "errno": 0, + "msg": "SUCCESS", + "showMsg": "交易成功", + "data": { + "page": { + "currentPage": 1, + "pageSize": 2, + "totalCount": 311, + "totalPage": 156 + }, + "result": [ + { + "mid": 2233, + "name": "2233", + "avatar": "http://i2.hdslb.com/bfs/face/f42b7f47c80648d2ee1231f2435b527c60302289.jpg", + "originalThirdCoin": 2, + "brokerage": 1.34, + "remark": "Web", + "ctime": "2022-04-12 17:34:47" + }, + { + "mid": 2233, + "name": "2233", + "avatar": "http://i0.hdslb.com/bfs/face/member/noface.jpg", + "originalThirdCoin": 2, + "brokerage": 0.68, + "remark": "iOS", + "ctime": "2022-04-10 03:41:10" + } + ], + "config": [ + { + "mid": null, + "name": null, + "avatar": null, + "originalThirdCoin": null, + "brokerage": null, + "remark": null, + "ctime": null + } + ] + }, + "success": true +} +``` + +</details> + +## 查询历史充电数据 + +> <https://member.bilibili.com/x/h5/elec/rank/recent> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | ---------------- | +| pn | num | 页数 | 非必要 | | +| ps | num | 分页大小 | 非必要 | 取值范围\[1,20\] | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | ------------ | ---- | +| list | array | 充电信息本体 | | +| pager | obj | 分页信息 | | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ------------------- | +| aid | num | 0 | | +| bvid | str | 空 | | +| elec_num | num | 充电电池数 | | +| title | str | 空 | | +| uname | str | 空 | | +| avatar | str | 空 | | +| ctime | str | 充电时间 | yyyy-MM-dd HH:mm:ss | + +`pager`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------ | ---- | +| current | num | 当前页数 | | +| size | num | 当前分页大小 | | +| total | num | 记录总数 | | + +**示例:** + +```shell +curl -G 'https://member.bilibili.com/x/h5/elec/rank/recent' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "aid": 0, + "bvid": "", + "elec_num": 50, + "title": "", + "uname": "", + "avatar": "", + "ctime": "2020-04-02 03:12:22" + }, + { + "aid": 0, + "bvid": "", + "elec_num": 20, + "title": "", + "uname": "", + "avatar": "", + "ctime": "2020-04-02 03:12:00" + } + ], + "pager": { + "current": 1, + "size": 20, + "total": 38 + } + } +} +``` + +</details> diff --git a/docs/electric/charge_msg.md b/docs/electric/charge_msg.md new file mode 100644 index 0000000..534fe9f --- /dev/null +++ b/docs/electric/charge_msg.md @@ -0,0 +1,298 @@ +# 充电留言 + +## 发送充电留言 + +> https://api.bilibili.com/x/ugcpay/trade/elec/message + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ---- | +| order_id | str | 留言token | 必要 | | +| message | str | 留言内容 | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功 <br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />88203:不能重复留言 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +为留言token为`BPRG5CEC3VUPOOANA540`的充电操作,添加了内容为`支持一下大佬`的留言 + +```shell +curl 'https://api.bilibili.com/x/ugcpay/trade/elec/message' \ + --data-urlencode 'order_id=BPRG5CEC3VUPOOANA540' \ + --data-urlencode 'message=支持一下大佬' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 查询我收到的充电留言 + +> https://member.bilibili.com/x/web/elec/remark/list + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------- | ------ | ---------------- | +| begin | str | 起始日期 | 非必要 | 默认2016-01-01 | +| end | str | 结束日期 | 非必要 | 默认2050-01-01 | +| pn | str | 页数 | 非必要 | | +| ps | str | 分页大小 | 非必要 | 取值范围\[1,12\] | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| msg | str | 错误信息 | 成功时为`0` | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | -------- | ---- | +| list | array | 信息本体 | | +| pager | obj | 分页信息 | | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------------------- | ---- | +| aid | num | | | +| bvid | str | | | +| id | num | 留言记录id | | +| mid | num | 0 | | +| reply_mid | num | 0 | | +| elec_num | num | 0 | | +| state | num | UP是否已经回复这条留言 | 0:未回复<br />1:已回复 | +| msg | str | 留言信息 | | +| aname | str | 空 | | +| uname | str | 空 | | +| avator | str | 空 | | +| reply_name | str | 空 | | +| reply_avator | str | 空 | | +| reply_msg | str | 空 | | +| ctime | num | 留言时间 | 毫秒级时间戳 | +| reply_time | num | 0 | | + +`pager`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------ | ---- | +| current | num | 当前页数 | | +| size | num | 当前分页大小 | | +| total | num | 记录总数 | | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/elec/remark/list?begin=2016-01-01&end=2050-01-01&pn=1&ps=10' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "aid": 0, + "bvid": "", + "id": 6715018, + "mid": 0, + "reply_mid": 0, + "elec_num": 0, + "state": 0, + "msg": "加油", + "aname": "", + "uname": "", + "avator": "", + "reply_name": "", + "reply_avator": "", + "reply_msg": "", + "ctime": 1650665119000, + "reply_time": 0 + } + ], + "pager": { + "current": 1, + "size": 10, + "total": 448 + } + } +} +``` + +</details> + +## 查询充电留言详情 + +> https://member.bilibili.com/x/web/elec/remark/detail + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 留言id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 成功时为 `0` | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------------------- | ---- | +| aid | num | | | +| bvid | str | | | +| id | num | 留言id | | +| mid | num | 留言者mid(充电用户) | | +| reply_mid | num | UP主mid | | +| elec_num | num | 0 | | +| state | num | UP是否已经回复这条留言 | 0:未回复<br />1:已回复 | +| msg | str | 留言内容 | | +| aname | str | 空 | | +| uname | str | 留言者用户名 | | +| avator | str | 留言者头像 | | +| reply_name | str | UP主用户名 | | +| reply_avator | str | UP主头像 | | +| reply_msg | str | 回复内容 | | +| ctime | num | 留言时间 | 毫秒级时间戳 | +| reply_time | num | 回复时间 | 毫秒级时间戳 | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/elec/remark/detail?id=6507563' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aid": 0, + "bvid": "", + "id": 6507563, + "mid": 19978396, + "reply_mid": 2062760, + "elec_num": 0, + "state": 1, + "msg": "感谢搬运", + "aname": "", + "uname": "HANSOOOOOL", + "avator": "http://i1.hdslb.com/bfs/face/5c22af0261b8b3f9a54b6e0038e35430e9ed9cfd.jpg", + "reply_name": "一把近战都不给六花", + "reply_avator": "http://i2.hdslb.com/bfs/face/1804b716084908d4992bdd35827d0c2d7222fe97.jpg", + "reply_msg": "( ̄3 ̄)", + "ctime": 1646726966000, + "reply_time": 1646811946000 + } +} +``` + +</details> + +## 回复充电留言 + +> https://member.bilibili.com/x/web/elec/remark/reply + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| csrf | str | csrf | 必要 | | +| id | num | 留言id | 必要 | | +| msg | str | 回复信息 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />20004:充电服务异常 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | num | 数据本体 | 1:成功<br />2:失败 | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/elec/remark/reply' \ + -b 'SESSDATA=xxx' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'id=6258929' \ + --data-urlencode 'msg=( ̄3 ̄)' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": 1 +} +``` + +</details> diff --git a/docs/electric/monthly.md b/docs/electric/monthly.md new file mode 100644 index 0000000..21dc3ef --- /dev/null +++ b/docs/electric/monthly.md @@ -0,0 +1,746 @@ +# 包月充电 + +<img src="../../assets/img/battery-100.png" width="100" height="100"/> + +## 常量说明 + +### 充电档位代码(`privilege_type`)与定价 + +| 代码 | 定价(单位:元人民币) | +| :--: | :--------------------: | +| 10 | 6 | +| 20 | 30 | +| 30 | 50 | +| 40 | 88 | +| 50 | 128 | +| 60 | 288 | +| 70 | 588 | +| 80 | 998 | +| 100 | 18 | +| 110 | 238 | +| 130 | 68 | + +## 获取包月充电列表 + +> <https://api.live.bilibili.com/xlive/revenue/v1/guard/getChargeRecord> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ------------------------ | +| page | num | 页码 | 必要 | | +| type | num | 充电状态 | 必要 | 1:使用中<br />2:已过期 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误<br />25100004:参数错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ---------------- | ---------------- | +| list | 有内容时:array<br />无内容时:null | 包月充电UP主列表 | 最多10个 | +| page | num | 当前页数 | | +| page_size | num | 当前分页大小 | 一般为10 | +| total_page | num | 总页数 | | +| total_num | num | 用户总数 | | +| is_more | num | 是否有更多用户 | 0:否<br />1:是 | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---------------- | +| 0 | obj | 用户1 | | +| n | obj | 用户(n+1) | | +| …… | obj | …… | …… | + +数组`list`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ----- | ------------------------ | ---------- | +| up_uid | num | 充电UP主mid | | +| user_name | str | 充电UP主昵称 | | +| user_face | str | 充电UP主头像url | | +| item | array | 充电详情 | | +| start | num | 开始充电时间 | 秒级时间戳 | +| high_level_state | num | 是否可对UP主进行高档充电 | | +| elec_reply_state | num | 是否可对UP主进行专属问答 | 0:否<br />1:是<br />2:状态未知 | + +数组`list`中的对象中的`item`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | -------- | +| 0 | obj | 充电档位1 | | +| n | obj | 充电档位(n+1) | | +| …… | obj | …… | …… | + +数组`item`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | --------------------------------------------- | ---------------- | ---------------- | +| privilege_type | num | 充电档位代码 | 详见[充电档位代码与定价](#充电档位代码privilege_type与定价) | +| icon | str | 充电图标 | | +| name | str | 充电档位名称 | | +| expire_time | num | 该档位过期时间 | 秒级时间戳 | +| renew | 开启自动续费时:obj<br />关闭自动续费时:null | 充电自动续费详情 | | +| start_time | num | 该档位生效时间 | 秒级时间戳 | +| renew_list | 开启自动续费时:array<br />关闭自动续费时:null | 充电自动续费列表 | | + +`renew`对象、`renew_list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ------------ | ------------------------------------------------- | +| uid | num | 自己的mid | | +| ruid | num | UP主的mid | | +| goods_id | num | 充电类型 | 172:一个月<br />173:连续包月<br />174:连续包年 | +| status | num | 充电状态 | 1 | +| next_execute_time | num | 下次续费时间 | 秒级时间戳 | +| signed_time | num | 签约时间 | 秒级时间戳 | +| signed_price | num | 下次续费金额 | 单位为千分之一元人民币 | +| pay_channel | num | 签约平台 | 2:微信支付<br />4:支付宝 | +| period | num | 下次充电天数 | | +| mobile_app | str | 充电渠道 | 可为`android`等 | + +**示例:** + +获取自己正在使用的包月充电的列表 + +```shell +curl 'https://api.live.bilibili.com/xlive/revenue/v1/guard/getChargeRecord' \ + --data-urlencode 'page=1' \ + --data-urlencode 'type=1' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "up_uid": 2233, + "user_name": "2233", + "user_face": "https://i0.hdslb.com/bfs/face/noface.jpg", + "item": [ + { + "privilege_type": 10, + "icon": "https://s1.hdslb.com/bfs/templar/york-static/lightning_icon@2x.png", + "name": "为TA充电", + "expire_time": 1703519999, + "renew": { + "uid": 425503913, + "ruid": 2233, + "goods_id": 174, + "status": 1, + "next_execute_time": 1703174400, + "signed_time": 1671618921, + "signed_price": 36000, + "pay_channel": 2, + "period": 366, + "mobile_app": "android" + }, + "start_time": 1671618921, + "renew_list": [ + { + "uid": 425503913, + "ruid": 2233, + "goods_id": 174, + "status": 1, + "next_execute_time": 1703174400, + "signed_time": 1671618921, + "signed_price": 36000, + "pay_channel": 2, + "period": 366, + "mobile_app": "android" + } + ] + } + ], + "start": 1669183804, + "high_level_state": 1, + "elec_reply_state": 1 + }, + { + "up_uid": 293793435, + "user_name": "社会易姐QwQ", + "user_face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "item": [ + { + "privilege_type": 10, + "icon": "https://s1.hdslb.com/bfs/templar/york-static/lightning_icon@2x.png", + "name": "为TA充电", + "expire_time": 1681401599, + "renew": { + "uid": 425503913, + "ruid": 293793435, + "goods_id": 173, + "status": 1, + "next_execute_time": 1680364800, + "signed_time": 1677760921, + "signed_price": 5000, + "pay_channel": 4, + "period": 31, + "mobile_app": "android" + }, + "start_time": 1677760921, + "renew_list": [ + { + "uid": 425503913, + "ruid": 293793435, + "goods_id": 173, + "status": 1, + "next_execute_time": 1680364800, + "signed_time": 1677760921, + "signed_price": 5000, + "pay_channel": 4, + "period": 31, + "mobile_app": "android" + } + ] + } + ], + "start": 1676033795, + "high_level_state": 1, + "elec_reply_state": 1 + } + ], + "page": 1, + "page_size": 10, + "total_page": 3, + "total_num": 22, + "is_more": 1 + } +} +``` + +</details> + +表示自己从2022-11-23 14:10:04开始给“2233”包月充电,并且在2022-12-21 18:35:21在微信开通了连续包年充电,在2023-12-22 00:00:00的时候会自动续费36元,并继续充电366天; + +自己从2023-02-10 20:56:35开始给“社会易姐QwQ”包月充电,并且在2023-03-02 20:42:01在支付宝开通了连续包月充电,在2023-04-02 00:00:00的时候会自动续费5元,并继续充电31天。 + +## UP主包月充电详情 + +> <https://api.bilibili.com/x/upower/item/detail> + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| up_mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | -------------------------- | ------------------------------ | +| upower_rank | obj | 充电详情 | | +| item | obj | 充电欢迎语信息 | | +| user_card | obj | UP主信息 | | +| upower_level | num | UP主开通的充电等级 | 1:非高档充电<br />2:高档充电 | +| elec_reply_state | num | 是否可对UP主进行专属问答 | | +| voucher_state | obj | 包月充电券信息 | **详细信息有待补充** | +| upower_right_count | obj | 不同充电档位下的充电权益数 | | +| only_contain_medal | bool | 享有的权益仅为粉丝勋章 | | +| privilege_type | num | 当前给该UP主包月充电的档位 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价),若从未给该UP主包月充电过则为0 | + +`data`中的`upower_rank`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ---------------- | ------------ | +| total | num | 充电用户总数 | | +| total_desc | str | 充电总数文字说明 | 示例:“1+” | +| list | array | 充电用户列表 | 最多展示30个 | + +`upower_rank`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | -------------------------- | +| 0 | obj | 用户1 | | +| n | obj | 用户(n+1) | 按照最初充电时间排序(?) | +| …… | obj | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | --------------- | ---- | +| rank | num | 充电用户索引 | | +| mid | num | 充电用户mid | | +| nickname | str | 充电用户昵称 | | +| avatar | str | 充电用户头像url | | + +`data`中的`item`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ---------------- | ---- | +| intro_video_aid | str | 充电介绍视频AV号 | | +| welcomes | str | 充电介绍语 | | + +`data`中的`user_card`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------- | ---- | +| avatar | str | UP主头像url | | +| nickname | str | UP主昵称 | | + +`data`中的`upower_right_count`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | -------------------- | ---- | +| {充电档位代码} | num | 该档位下的充电权益数 | | + +**示例:** + +获取`mid=1265680561`的包月充电详情 + +```shell +curl 'https://api.bilibili.com/x/upower/item/detail' \ + --data-urlencode 'up_mid=1265680561' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "upower_rank": { + "total": 5082, + "total_desc": "5000+", + "list": [ + { + "rank": 1, + "mid": 1476475459, + "nickname": "一只屑椒", + "avatar": "https://i1.hdslb.com/bfs/face/dc721da215f4651e0472d566b146ee8fdf198dbe.jpg" + }, + { + "rank": 2, + "mid": 275365317, + "nickname": "-陪我去看海吧i", + "avatar": "https://i0.hdslb.com/bfs/face/dd7547b13020e7f47549ad7908fd3fc58efadefc.jpg" + }, + { + "rank": 3, + "mid": 401909111, + "nickname": "Vege5able", + "avatar": "https://i2.hdslb.com/bfs/face/46b1fdc94c7851ec0c47817adeec13e3225da559.jpg" + } + ] + }, + "item": { + "intro_video_aid": "", + "welcomes": "哈喽b站的小伙伴们,我的充电计划升级啦! 感兴趣就多多支持我吧~(゜-゜)つロ" + }, + "user_card": { + "avatar": "https://i1.hdslb.com/bfs/face/5ddddba98f0265265662a8f7d5383e528a98412b.jpg", + "nickname": "永雏塔菲" + }, + "upower_level": 1, + "elec_reply_state": 1, + "voucher_state": { + "voucher_order_id": "95843e812210c455d1ea6e4714bf105a00", + "user_voucher_state": 2, + "vip_action": 0, + "voucher_name": "包月充电券(6元档)", + "validate_price": 0, + "validate_level": 0, + "activity": "", + "common_time": 0, + "high_level_time": 0, + "specify_up": 0, + "specify_level": 0 + }, + "upower_right_count": { + "10": 3 + }, + "only_contain_medal": false, + "privilege_type": 0 + } +} +``` + +</details> + +## 与UP主的包月充电关系 + +> <https://api.bilibili.com/x/upower/charge/follow/info> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| up_mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | ------------------------------ | ------------------------------------------- | +| days | num | 已保持多少天包月充电状态 | | +| up_card | obj | UP主信息 | | +| user_card | obj | 自己的信息 | | +| remain_days | num | 剩余天数 | 未处于包月充电状态为-1 | +| remain_less_1day | num | 剩余的天数是否小于1天 | 0:否<br />1:是<br />未处于包月充电状态为0 | +| upower_rank | obj | 充电详情 | | +| upower_icon | str | 充电图标url | 仅在处于包月充电状态时有内容 | +| upower_right_count | obj | 当前自己享有该UP主的充电权益数 | | +| only_contain_medal | bool | 享有的权益仅为粉丝勋章 | | +| privilege_type | num | 当前给该UP主包月充电的档位代码 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价),若未处于包月充电状态为0 | +| challenge_info | obj | 充电挑战信息 | **详细信息有待补充** | + +`data`中的`up_card`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------ | ---- | +| mid | num | UP主mid | | +| nickname | str | UP主昵称 | | +| official_title | str | UP主认证信息 | | +| avatar | str | UP主头像url | | + +`data`中的`user_card`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------- | ---- | +| avatar | str | 用户头像url | | +| nickname | str | 用户昵称 | | + +`data`中的`upower_rank`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ---------------- | ----------- | +| total | num | 充电用户总数 | | +| total_desc | str | 充电总数文字说明 | 示例:“1+” | +| list | array | 充电用户列表 | 最多展示6个 | + +`upower_rank`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---------------- | +| 0 | obj | 用户1 | | +| n | obj | 用户(n+1) | 按照充电时间排序 | +| …… | obj | …… | …… | + +数组`list`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | --------------- | ---- | +| rank | num | 充电用户索引 | | +| mid | num | 充电用户mid | | +| nickname | str | 充电用户昵称 | | +| avatar | str | 充电用户头像url | | + +**示例:** + +获取与`mid=293793435`的包月充电关系 + +```shell +curl 'https://api.bilibili.com/x/upower/charge/follow/info' \ + --data-urlencode 'up_mid=293793435' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "days": 17, + "up_card": { + "mid": 293793435, + "nickname": "社会易姐QwQ", + "official_title": "", + "avatar": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg" + }, + "user_card": { + "avatar": "https://i2.hdslb.com/bfs/face/540ed71e2fb2ddd8967c21b392026c34fc15673e.jpg", + "nickname": "晨叶梦春" + }, + "remain_days": 15, + "remain_less_1day": 0, + "upower_rank": { + "total": 1, + "total_desc": "1+", + "list": [ + { + "rank": 1, + "mid": 425503913, + "nickname": "晨叶梦春", + "avatar": "https://i2.hdslb.com/bfs/face/540ed71e2fb2ddd8967c21b392026c34fc15673e.jpg" + } + ] + }, + "upower_icon": "https://i0.hdslb.com/bfs/garb/item/33e2e72d9a0c855f036b4cb55448f44af67a0635.png", + "upower_right_count": 2, + "only_contain_medal": false, + "privilege_type": 10, + "challenge_info": { + "challenge_id": "", + "description": "", + "challenge_type": 0, + "remaining_days": 0, + "end_time": "", + "progress": 0, + "targets": [], + "state": 0, + "end_time_unix": 0, + "pub_dyn": 0, + "dyn_content": "" + } + } +} +``` + +</details> + +表示自己已保持17天对“社会易姐QwQ”的包月充电,剩余15天过期。 + +## 包月充电用户排名 + +> <https://api.bilibili.com/x/upower/up/member/rank/v2> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------------- | ---- | ------------ | ------ | --------- | +| up_mid | num | 目标用户mid | 必要 | | +| ps | num | 每页项数 | 必要 | 最大为101 | +| pn | num | 页码 | 必要 | | +| privilege_type | num | 充电档位代码 | 非必要 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价),默认为可以显示排名的档位中**最高定价**的档位 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ----- | ------------------------------ | -------- | +| up_info | obj | UP主信息 | | +| rank_info | array | 当前档位的充电用户排名 | | +| user_info | obj | 自己在该档位下与UP主的充电关系 | | +| member_total | num | 当前档位的充电用户总数 | | +| privilege_type | num | 当前充电档位代码 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价) | +| is_charge | bool | 自己是否给该UP主包月充电过 | 无论档位 | +| tabs | array | 可显示排名的充电档位代码列表 | | +| level_info | array | 可显示排名的充电档位信息 | | + +`data`中的`up_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | -------------------- | ---------------------------------------- | +| mid | num | UP主mid | | +| nickname | str | UP主昵称 | | +| avatar | str | UP主头像url | | +| type | num | UP主认证类型 | -1:无<br />0:UP主认证<br />1:机构认证 | +| title | str | UP主认证文字 | | +| upower_state | num | UP主充电功能开启状态 | 0:未开通充电功能<br />1:已开通自定义充电<br />2:已开通包月、自定义充电<br />3:已开通包月高档、自定义充电 | + +`data`中的`rank_info`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---------------- | +| 0 | obj | 用户1 | | +| n | obj | 用户(n+1) | 按照充电排名排列 | +| …… | obj | …… | …… | + +`rank_info`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | ----- | +| mid | num | 充电用户mid | | +| nickname | str | 充电用户昵称 | | +| avatar | str | 充电用户头像url | | +| rank | num | 充电用户排名 | | +| day | num | 包月充电天数 | | +| expire_at | num | 包月充电过期时间 | 恒为0 | +| remain_days | num | 剩余天数 | 恒为0 | + +`data`中的`user_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | ------------------------------- | +| mid | num | 用户mid | | +| nickname | str | 用户昵称 | | +| avatar | str | 用户头像url | | +| rank | num | 包月充电排名 | 不在该充电档位用户列表里为-1 | +| day | num | 包月充电天数 | | +| expire_at | num | 包月充电过期时间 | 秒级时间戳,若从未给UP主在该档位下包月充电过为0 | +| remain_days | num | 剩余天数 | 若该档位充电状态已失效为0 | + +`data`中的`tabs`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------- | +| 0 | num | 档位代码1 | | +| n | num | 档位代码(n+1) | | +| …… | num | …… | …… | + +`data`中的`level_info`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---------------- | +| 0 | obj | 档位1 | | +| n | obj | 档位(n+1) | | +| …… | obj | …… | …… | + +`level_info`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | -------------------- | ---------------------- | +| privilege_type | num | 当前充电档位代码 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价) | +| name | str | 档位名称 | | +| price | num | 档位价格 | 单位为百分之一元人民币 | +| member_total | num | 当前档位的用户总数 | | + +**示例:** + +获取给`mid=686127`包月充电的用户排名 + +```shell +curl 'https://api.bilibili.com/x/upower/up/member/rank/v2' \ + --data-urlencode 'up_mid=686127' \ + --data-urlencode 'ps=3' \ + --data-urlencode 'pn=1' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "up_info": { + "mid": 686127, + "nickname": "籽岷", + "avatar": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp", + "type": 0, + "title": "2024百大UP主、知名游戏UP主", + "upower_state": 3 + }, + "rank_info": [ + { + "mid": 187012867, + "nickname": "是我灬不配", + "avatar": "https://i1.hdslb.com/bfs/face/ad4d2ce0705fd766a0ade315f5a6a5984ce479f4.jpg", + "rank": 1, + "day": 682, + "expire_at": 0, + "remain_days": 0 + }, + { + "mid": 20135495, + "nickname": "和平时一样鸽", + "avatar": "https://i2.hdslb.com/bfs/face/0eef725964105f39b1f000a59f232d9094017544.jpg", + "rank": 2, + "day": 620, + "expire_at": 0, + "remain_days": 0 + }, + { + "mid": 490065730, + "nickname": "乔治Y-GYhaha", + "avatar": "https://i1.hdslb.com/bfs/face/e1753e1e43d7a7df5333c5a2f4d3ec1d0334ebe6.jpg", + "rank": 3, + "day": 527, + "expire_at": 0, + "remain_days": 0 + } + ], + "user_info": { + "mid": 425503913, + "nickname": "晨叶梦春", + "avatar": "https://i2.hdslb.com/bfs/face/540ed71e2fb2ddd8967c21b392026c34fc15673e.jpg", + "rank": -1, + "day": 0, + "expire_at": 0, + "remain_days": 0 + }, + "member_total": 46881, + "privilege_type": 50, + "is_charge": false, + "tabs": [50, 10], + "level_info": [ + { + "privilege_type": 50, + "name": "审稿", + "price": 12800, + "member_total": 1082 + }, + { + "privilege_type": 10, + "name": "石粒", + "price": 600, + "member_total": 46158 + } + ] + } +} +``` + +</details> diff --git a/docs/emoji/action.md b/docs/emoji/action.md new file mode 100644 index 0000000..d5bc0bd --- /dev/null +++ b/docs/emoji/action.md @@ -0,0 +1,105 @@ +# 表情操作 + +## 添加表情包 + +> https://api.bilibili.com/x/emote/package/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +只能添加有会员权限或已购买的表情包 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | -------------------------------- | +| package_id | num | 表情包id | 必要 | | +| business | str | 使用场景 | 必要 | reply:评论区<br />dynamic:动态 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +添加id为`25`的表情包,使用场景为评论区 + +```shell +curl 'https://api.bilibili.com/x/emote/package/add' \ +--data-urlencode 'package_id=25' \ +--data-urlencode 'business=reply' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 移除表情包 + +> https://api.bilibili.com/x/emote/package/remove + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | -------------------------------- | +| package_id | num | 表情包id | 必要 | | +| business | str | 使用场景 | 必要 | reply:评论区<br />dynamic:动态 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +移除id为`25`的表情包,使用场景为评论区 + +```shell +curl 'https://api.bilibili.com/x/emote/package/remove' \ +--data-urlencode 'package_id=25' \ +--data-urlencode 'business=reply' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> diff --git a/docs/emoji/list.md b/docs/emoji/list.md new file mode 100644 index 0000000..1435982 --- /dev/null +++ b/docs/emoji/list.md @@ -0,0 +1,639 @@ +# 表情列表 + +## 获取我的表情列表 + +> https://api.bilibili.com/x/emote/user/panel/web + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +使用登录(Cookie)进行会员专属及已购买表情包的分发,否则全为免费表情包 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | -------------------------------- | +| business | str | 使用场景 | 必要 | reply:评论区<br />dynamic:动态 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| packages | array | 表情包 | | + +`data`中的`packages`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | -------------- | +| 0 | obj | 表情包1 | **详情见附表** | +| n | obj | 表情包(n+1) | **详情见附表** | +| …… | obj | …… | …… | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/emote/user/panel/web' \ +--data-urlencode 'business=reply' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "packages": [ + { + "id": 1, + "text": "小黄脸", + "url": "http://i0.hdslb.com/bfs/emote/81edf17314cea3b48674312b4364df44d5c01f17.png", + "mtime": 1591604235, + "type": 1, + "attr": 66, + "meta": { + "size": 1, + "item_id": 958 + }, + "emote": [ + { + "id": 2126, + "package_id": 1, + "text": "[视频卫星]", + "url": "http://i0.hdslb.com/bfs/emote/dce6fc7d6dfeafff01241924db60f8251cca5307.png", + "mtime": 1590986882, + "type": 1, + "attr": 0, + "meta": { + "size": 1 + }, + "flags": {} + }, + { + "id": 1901, + "package_id": 1, + "text": "[加油武汉]", + "url": "http://i0.hdslb.com/bfs/emote/eb966aaa5b690d3f9308a9f936f5b5a72a7f956b.png", + "mtime": 1580024058, + "type": 1, + "attr": 0, + "meta": { + "size": 1 + }, + "flags": {} + }, + { + "id": 1906, + "package_id": 1, + "text": "[口罩]", + "url": "http://i0.hdslb.com/bfs/emote/3ad2f66b151496d2a5fb0a8ea75f32265d778dd3.png", + "mtime": 1581309529, + "type": 1, + "attr": 0, + "meta": { + "size": 1 + }, + "flags": {} + }, + { + "id": 1, + "package_id": 1, + "text": "[微笑]", + "url": "http://i0.hdslb.com/bfs/emote/685612eadc33f6bc233776c6241813385844f182.png", + "mtime": 1582182040, + "type": 1, + "attr": 0, + "meta": { + "size": 1 + }, + "flags": {} + }, + { + "id": 1958, + "package_id": 1, + "text": "[笑]", + "url": "http://i0.hdslb.com/bfs/emote/81edf17314cea3b48674312b4364df44d5c01f17.png", + "mtime": 1582184940, + "type": 1, + "attr": 0, + "meta": { + "size": 1 + }, + "flags": {} + }, + ………… + }, + { + "id": 53, + "text": "热词系列一", + "url": "http://i0.hdslb.com/bfs/emote/bacd6e17997348873ef89e5f1bcbbda877a1606a.png", + "mtime": 1592205524, + "type": 1, + "attr": 2, + "meta": { + "size": 2, + "item_id": 1039 + }, + "emote": [ + { + "id": 1937, + "package_id": 53, + "text": "[热词系列_知识增加]", + "url": "http://i0.hdslb.com/bfs/emote/142409b595982b8210b2958f3d340f3b47942645.png", + "mtime": 1585202919, + "type": 1, + "attr": 2, + "meta": { + "size": 2, + "alias": "知识增加" + }, + "flags": {} + }, + { + "id": 2147, + "package_id": 53, + "text": "[热词系列_希望没事]", + "url": "http://i0.hdslb.com/bfs/emote/6c0d2e6c486d1ba5afd6204a96e102652464a01d.png", + "mtime": 1591689594, + "type": 1, + "attr": 2, + "meta": { + "size": 2, + "alias": "希望没事" + }, + "flags": {} + }, + { + "id": 2083, + "package_id": 53, + "text": "[热词系列_泪目]", + "url": "http://i0.hdslb.com/bfs/emote/bba3703ab90b7d16fe9dbcb85ed949db687f8331.png", + "mtime": 1588910215, + "type": 1, + "attr": 2, + "meta": { + "size": 2, + "alias": "泪目" + }, + "flags": {} + }, + { + "id": 2082, + "package_id": 53, + "text": "[热词系列_保护]", + "url": "http://i0.hdslb.com/bfs/emote/55f8f6445ca7c3170cdfc5b16036abf639ce9b57.png", + "mtime": 1588910215, + "type": 1, + "attr": 2, + "meta": { + "size": 2, + "alias": "保护" + }, + "flags": {} + }, + ………… + }, + ………… + ] + } +} +``` + +</details> + +## 获取指定的表情包明细 + +> https://api.bilibili.com/x/emote/package + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | -------------------------------- | +| business | str | 使用场景 | 必要 | reply:评论区<br />dynamic:动态 | +| ids | nums | 表情包id | 必要 | id之间以`,`隔开 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:obj<br />无效时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| packages | array | 表情包 | | + +`data`中的`packages`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | -------------- | +| 0 | obj | 表情包1 | **详情见附表** | +| n | obj | 表情包(n+1) | **详情见附表** | +| …… | obj | …… | …… | + +**示例:** + +获取表情包id为`93`的表情包明细 + +```shell +curl -G 'https://api.bilibili.com/x/emote/package' \ +--data-urlencode 'ids=93' \ +--data-urlencode 'business=reply' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "packages": [ + { + "id": 93, + "text": "泠鸢yousa", + "url": "http://i0.hdslb.com/bfs/emote/5fa6082e098402d16d58c68e441ae76e40befd2c.png", + "mtime": 1592213522, + "type": 3, + "attr": 28, + "meta": { + "size": 2, + "item_id": 1907, + "item_url": "https://www.bilibili.com/h5/mall/suit/detail?navhide=1&stahide=0&id=1911" + }, + "emote": [ + { + "id": 2086, + "package_id": 93, + "text": "[泠鸢yousa_awsl]", + "url": "http://i0.hdslb.com/bfs/emote/7663b729161bd4556c2ec318c07791000743eb56.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "awsl" + }, + "flags": {} + }, + { + "id": 2087, + "package_id": 93, + "text": "[泠鸢yousa_打call]", + "url": "http://i0.hdslb.com/bfs/emote/718e9495846db4172eb87d2f7f02015a34d35ea2.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "打call" + }, + "flags": {} + }, + { + "id": 2088, + "package_id": 93, + "text": "[泠鸢yousa_沉默]", + "url": "http://i0.hdslb.com/bfs/emote/5e967cf1669743ed92e9a8ff3e5de6d90ca63d3d.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "沉默" + }, + "flags": {} + }, + { + "id": 2089, + "package_id": 93, + "text": "[泠鸢yousa_大哭]", + "url": "http://i0.hdslb.com/bfs/emote/3f757b147b9b1e201470eae7dac9cc0360172569.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "大哭" + }, + "flags": {} + }, + { + "id": 2090, + "package_id": 93, + "text": "[泠鸢yousa_干杯]", + "url": "http://i0.hdslb.com/bfs/emote/5cf5e14101be845233a222ab1bbdc21c63af04c3.png", + "mtime": 1590401422, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "干杯" + }, + "flags": {} + }, + { + "id": 2091, + "package_id": 93, + "text": "[泠鸢yousa_好人卡]", + "url": "http://i0.hdslb.com/bfs/emote/e3907b3bb20b18e7ecb11cd86829c9a4ce5b1b2f.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "好人卡" + }, + "flags": {} + }, + { + "id": 2092, + "package_id": 93, + "text": "[泠鸢yousa_加大力度]", + "url": "http://i0.hdslb.com/bfs/emote/a0393a2d4b522f07a319dfd2e91754a3cdff2c48.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "加大力度" + }, + "flags": {} + }, + { + "id": 2093, + "package_id": 93, + "text": "[泠鸢yousa_滑稽]", + "url": "http://i0.hdslb.com/bfs/emote/a8057c0e0579b93c16010a270e261fd0a64034af.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "滑稽" + }, + "flags": {} + }, + { + "id": 2094, + "package_id": 93, + "text": "[泠鸢yousa_请吃桃]", + "url": "http://i0.hdslb.com/bfs/emote/e92276d9d8c28f85f7dbcc0fbbb6ecb3345ce33e.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "请吃桃" + }, + "flags": {} + }, + { + "id": 2095, + "package_id": 93, + "text": "[泠鸢yousa_惊讶]", + "url": "http://i0.hdslb.com/bfs/emote/9fdc2c5b4b970aded56fe2f326bd4d00e849339d.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "惊讶" + }, + "flags": {} + }, + { + "id": 2096, + "package_id": 93, + "text": "[泠鸢yousa_生气]", + "url": "http://i0.hdslb.com/bfs/emote/9e6ba9ff34101e04d3e321cad486f845f892050e.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "生气" + }, + "flags": {} + }, + { + "id": 2097, + "package_id": 93, + "text": "[泠鸢yousa_贴贴]", + "url": "http://i0.hdslb.com/bfs/emote/dbc177d314231add509501ffc6bc7655fca2c10f.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "贴贴" + }, + "flags": {} + }, + { + "id": 2098, + "package_id": 93, + "text": "[泠鸢yousa_头晕]", + "url": "http://i0.hdslb.com/bfs/emote/49830c1c8a1652f7ee9cb854ac7dbf8e378cdcd6.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "头晕" + }, + "flags": {} + }, + { + "id": 2099, + "package_id": 93, + "text": "[泠鸢yousa_问号]", + "url": "http://i0.hdslb.com/bfs/emote/ab7a543233eff83138c3221c86a762ab36bab7bc.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "问号" + }, + "flags": {} + }, + { + "id": 2100, + "package_id": 93, + "text": "[泠鸢yousa_真棒]", + "url": "http://i0.hdslb.com/bfs/emote/02ea49543a3ac52feee185c156ab08fb2bfdd89e.png", + "mtime": 1589776042, + "type": 3, + "attr": 0, + "meta": { + "size": 2, + "alias": "真棒" + }, + "flags": {} + } + ], + "flags": { + "added": true + } + } + ] + } +} +``` + +</details> + +## 获取所有表情包列表 + +> https://api.bilibili.com/x/emote/setting/panel + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | -------------------------------- | +| business | str | 使用场景 | 必要 | reply:评论区<br />dynamic:动态 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ----- | ---------------- | ---- | +| user_panel_packages | array | 用户拥有的表情包 | | +| all_packages | array | 所有表情包 | | +| mall | obj | 商城页面 | | + +`data`对象中的`user_panel_packages`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | -------------- | +| 0 | obj | 用户拥有的表情包1 | **详情见附表** | +| n | obj | 用户拥有的表情包(n+1) | **详情见附表** | +| …… | obj | …… | …… | + +`data`对象中的`all_packages`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | -------------- | +| 0 | obj | 所有表情包1 | **详情见附表** | +| n | obj | 所有表情包(n+1) | **详情见附表** | +| …… | obj | …… | …… | + +`data`对象中的`mall`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ----------- | ---- | +| title | str | 商城名称 | | +| url | str | 商城页面url | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/emote/setting/panel' \ +--data-urlencode 'business=reply' \ +-b 'SESSDATA=xxx' +``` + +**限于篇幅,代码块示例略** + +## 附表-表情包对象 + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | ----------------- | -------------------------------------------------------- | +| id | num | 表情包id | | +| text | str | 表情包名称 | | +| url | str | 表情包标志图片url | | +| mtime | num | 创建时间 | 时间戳 | +| type | num | 表情包类型 | 1:普通<br />2:会员专属<br />3:购买所得<br />4:颜文字 | +| attr | num | ??? | **作用尚不明确** | +| meta | obj | 属性信息 | | +| emote | array | 表情列表 | | +| flags | obj | 是否添加标志 | | + +`表情包对象`中的`flags`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ------------------------------------------------------------ | +| added | bool | 是否已添加 | true:已添加<br />false:未添加<br />需要登录(SESSDATA)<br />否则恒为false | + +`表情包对象`中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | --------------- | ---------------- | +| size | num | 表情尺寸信息 | 1:小<br />2:大 | +| item_id | num | 购买物品id | | +| item_url | num | 购买物品页面url | 无则无此项 | + +`表情包对象`中的`emote`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 表情1 | | +| n | obj | 表情(n+1) | | +| …… | obj | …… | …… | + +`emote`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ----------- | -------------------------------------------------------- | +| id | num | 表情id | | +| package_id | num | 表情包id | | +| text | str | 表情转义符 | 颜文字时为该字串 | +| url | str | 表情图片url | 颜文字时为该字串 | +| mtime | num | 创建时间 | 时间戳 | +| type | num | 表情类型 | 1:普通<br />2:会员专属<br />3:购买所得<br />4:颜文字 | +| attr | num | ??? | **作用尚不明确** | +| meta | obj | 属性信息 | | +| flags | obj | 禁用标志 | 无则为空 | + +`emote`数组中的对象中的`flags`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------- | ------------------------------------------------------ | +| no_access | bool | 是否为禁用 | true:禁用<br />需要登录(SESSDATA)<br />否则恒为true | + +`emote`数组中的对象中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | ---------------- | +| size | num | 表情尺寸信息 | 1:小<br />2:大 | +| alias | str | 简写名 | 无则无此项 | diff --git a/docs/fav/action.md b/docs/fav/action.md new file mode 100644 index 0000000..1672164 --- /dev/null +++ b/docs/fav/action.md @@ -0,0 +1,472 @@ +# 收藏夹操作 + +## 管理收藏夹 + +### 新建收藏夹 + +> https://api.bilibili.com/x/v3/fav/folder/add + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | -------------- | ------------------------------------ | +| title | str | 收藏夹标题 | 必要 | | +| intro | str | 收藏夹简介 | 非必要 | 默认为空 | +| privacy | num | 是否公开 | 非必要 | 默认为公开<br />0:公开<br />1:私密 | +| cover | str | 封面图url | 非必要 | 封面会被审核 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功<br />-102:账号被封停 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +略.... + +详见[获取收藏夹元数据](info.md#获取收藏夹元数据)中的`data`对象 + +**示例:** + +创建一个叫`test`,简介是`2333`,封面`https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png`,的公开收藏夹: + +```shell +curl 'https://api.bilibili.com/x/v3/fav/folder/add' \ +--data-urlencode 'title=test' \ +--data-urlencode 'intro=2333' \ +--data-urlencode 'privacy=0' \ +--data-urlencode 'cover=https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png' \ +--data-urlencode 'csrf=xxxx' \ +-b 'SESSDATA=xxxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1182306172, + "fid": 11823061, + "mid": 470310172, + "attr": 6, + "title": "test", + "cover": "https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png", + "upper": { + "mid": 0, + "name": "", + "face": "", + "followed": false, + "vip_type": 0, + "vip_statue": 0 + }, + "cover_type": 0, + "cnt_info": { + "collect": 0, + "play": 0, + "thumb_up": 0, + "share": 0 + }, + "type": 0, + "intro": "2333", + "ctime": 0, + "mtime": 0, + "state": 0, + "fav_state": 0, + "like_state": 0, + "media_count": 0 + } +} +``` + +</details> + +### 修改收藏夹 + +> https://api.bilibili.com/x/v3/fav/folder/edit + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | -------------- | ------------------------------------------ | +| media_id | num | 目标收藏夹mdid | 必要 | | +| title | str | 修改收藏夹标题 | 必要 | | +| intro | str | 修改收藏夹简介 | 非必要 | | +| privacy | num | 是否公开 | 非必要 | 默认为公开<br /><br />0:公开<br />1:私密 | +| cover | str | 封面图url | 非必要 | 封面会被审核 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功<br />-102:账号被封停 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +略.... + +详见[获取收藏夹元数据](info.md#获取收藏夹元数据)中的`data`对象 + +**示例:** + +修改id为`1182306172`的名字为`test`,简介为`2333`,封面为`https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png`,公开收藏夹: + +```shell +curl 'https://api.bilibili.com/x/v3/fav/folder/edit' \ +--data-urlencode 'media_id=1182306172' \ +--data-urlencode 'title=test' \ +--data-urlencode 'intro=2333' \ +--data-urlencode 'privacy=0' \ +--data-urlencode 'cover=https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png' \ +--data-urlencode 'csrf=xxxx' \ +-b 'SESSDATA=xxxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1182306172, + "fid": 11823061, + "mid": 470310172, + "attr": 6, + "title": "test", + "cover": "https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png", + "upper": { + "mid": 0, + "name": "", + "face": "", + "followed": false, + "vip_type": 0, + "vip_statue": 0 + }, + "cover_type": 0, + "cnt_info": { + "collect": 0, + "play": 0, + "thumb_up": 0, + "share": 0 + }, + "type": 0, + "intro": "2333", + "ctime": 0, + "mtime": 0, + "state": 0, + "fav_state": 0, + "like_state": 0, + "media_count": 0 + } +} +``` + +</details> + +### 删除收藏夹 + +> https://api.bilibili.com/x/v3/fav/folder/del + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ------------------------ | -------------- | ------------------- | +| media_ids | nums | 目标收藏夹mdid列表 | 必要 | 每个成员间用`,`分隔 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 成功为0 | +| ttl | num | 1 | | +| data | num | 信息本体 | 成功为0 | + +**示例:** + +删除id为`1182306172`的收藏夹: + +```shell +curl 'https://api.bilibili.com/x/v3/fav/folder/del' \ +--data-urlencode 'media_ids=1182306172' \ +--data-urlencode 'csrf=xxxx' \ +-b 'SESSDATA=xxxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +</details> + +## 管理收藏内容 + +### 批量复制内容 + +> https://api.bilibili.com/x/v3/fav/resource/copy + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| src_media_id | num | 源收藏夹id | 必要 | | +| tar_media_id | num | 目标收藏夹id | 必要 | | +| mid | num | 当前用户mid | 必要 | | +| resources | strs | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型}<br />每个成员间用`,`分隔<br />类型:<br />2:视频稿件<br />12:音频<br />21:视频合集<br />内容id:<br />视频稿件:视频稿件avid<br />音频:音频auid<br />视频合集:视频合集id | +| platform | str | 平台标识 | 非必要 | 可为web | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />11010:您访问的内容不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 成功为0 | + +**示例:** + +将id为`1288061499`的收藏夹中视频稿件`av21822819` `av21918689` `av22288065`复制到id为`1178751999`的收藏夹中 + +```shell +curl 'https://api.bilibili.com/x/v3/fav/resource/copy' \ +--data-urlencode 'src_media_id=1288061499' \ +--data-urlencode 'tar_media_id=1178751999' \ +--data-urlencode 'mid=233333' \ +--data-urlencode 'resources=21822819:2,21918689:2,22288065:2' \ +--data-urlencode 'platform=web' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +</details> + +### 批量移动内容 + +> https://api.bilibili.com/x/v3/fav/resource/move + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| src_media_id | num | 源收藏夹id | 必要 | | +| tar_media_id | num | 目标收藏夹id | 必要 | | +| mid | num | 当前用户mid | 必要 | | +| resources | strs | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型}<br />每个成员间用`,`分隔<br />类型:<br />2:视频稿件<br />12:音频<br />21:视频合集<br />内容id:<br />视频稿件:视频稿件avid<br />音频:音频auid<br />视频合集:视频合集id | +| platform | str | 平台标识 | 非必要 | 可为web | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />11010:您访问的内容不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 成功为0 | + +**示例:** + +将id为`1288061499`的收藏夹中视频稿件`av21822819` `av21918689` `av22288065`移动到id为`1178751999`的收藏夹中 + +```shell +curl 'https://api.bilibili.com/x/v3/fav/resource/move' \ +--data-urlencode 'src_media_id=1288061499' \ +--data-urlencode 'tar_media_id=1178751999' \ +--data-urlencode 'mid=233333' \ +--data-urlencode 'resources=21822819:2,21918689:2,22288065:2' \ +--data-urlencode 'platform=web' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +</details> + +### 批量删除内容 + +> https://api.bilibili.com/x/v3/fav/resource/batch-del + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | -------------- | ------------------------ | ------------------------------------------------------------ | ------- | +| resources | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型}<br />每个成员间用`,`分隔<br />类型:<br />2:视频稿件<br />12:音频<br />21:视频合集<br />内容id:<br />视频稿件:视频稿件avid<br />音频:音频auid<br />视频合集:视频合集id | | +| media_id | num | 目标收藏夹id | 必要 | | +| platform | str | 平台标识 | 非必要 | 可为web | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />11010:您访问的内容不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 成功为0 | + +**示例:** + +将id为`1178751999`的收藏夹中视频稿件`av21822819` `av21918689` `av22288065`取消收藏 + +```shell +curl 'https://api.bilibili.com/x/v3/fav/resource/batch-del' \ +--data-urlencode 'resources=21822819:2,21918689:2,22288065:2' \ +--data-urlencode 'media_id=1178751999' \ +--data-urlencode 'platform=web' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +</details> + +### 清空所有失效内容 + +> https://api.bilibili.com/x/v3/fav/resource/clean + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | -------------- | ---- | +| media_id | num | 目标收藏夹id | 必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 成功为0 | + +**示例:** + +清理id为`1161340172`的收藏夹 + +```shell +curl 'https://api.bilibili.com/x/v3/fav/resource/clean' \ +--data-urlencode 'media_id=1161340172' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +</details> diff --git a/docs/fav/info.md b/docs/fav/info.md new file mode 100644 index 0000000..fe02478 --- /dev/null +++ b/docs/fav/info.md @@ -0,0 +1,571 @@ +# 收藏夹基本信息 + +<img src="../../assets/img/collect.svg" width="100" height="100" /> + +## 获取收藏夹元数据 + +> https://api.bilibili.com/x/v3/fav/folder/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) 或 APP + +**注:查询权限收藏夹时需要相应用户登录** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------------- | ------ | ---- | +| media_id | num | 目标收藏夹id(完整id) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-403:访问权限不足<br />11010: 内容不存在 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:obj<br />无效或:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------------- | -------------------------------------------------- | +| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 | +| fid | num | 收藏夹原始id | | +| mid | num | 创建者mid | | +| attr | num | 属性位(?) | | +| title | str | 收藏夹标题 | | +| cover | str | 收藏夹封面图片url | | +| upper | obj | 创建者信息 | | +| cover_type | num | 封面图类别(?) | | +| cnt_info | obj | 收藏夹状态数 | | +| type | num | 类型(?) | 一般是11 | +| intro | str | 备注 | | +| ctime | num | 创建时间 | 时间戳 | +| mtime | num | 收藏时间 | 时间戳 | +| state | num | 状态(?) | 一般为0 | +| fav_state | num | 收藏夹收藏状态 | 已收藏收藏夹:1<br />未收藏收藏夹:0<br />需要登录 | +| like_state | num | 点赞状态 | 已点赞:1<br />未点赞:0<br />需要登录 | +| media_count | num | 收藏夹内容数量 | | + +`data`中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------- | ----------------------------------------------- | +| mid | num | 创建者mid | | +| name | str | 创建者昵称 | | +| face | str | 创建者头像url | | +| followed | bool | 是否已关注创建者 | | +| vip_type | num | 会员类别 | 0:无<br />1:月大会员<br />2:年度及以上大会员 | +| vip_statue | num | 会员开通状态 | 0:无<br />1:有 | + +`data`中的`cnt_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------ | ---- | +| collect | num | 收藏数 | | +| play | num | 播放数 | | +| thumb_up | num | 点赞数 | | +| share | num | 分享数 | | + +**示例:** + +查询收藏夹`id=1052622027`的元数据 + +```shell +curl -G 'https://api.bilibili.com/x/v3/fav/folder/info' \ +--data-urlencode 'media_id=1052622027' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1052622027, + "fid": 10526220, + "mid": 686127, + "attr": 54, + "title": "猛 男 生 存", + "cover": "http://i2.hdslb.com/bfs/archive/bb51ee8a5fc5e03996138155f0f682d30ee16484.jpg", + "upper": { + "mid": 686127, + "name": "籽岷", + "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp", + "followed": true, + "vip_type": 2, + "vip_statue": 1 + }, + "cover_type": 2, + "cnt_info": { + "collect": 3393, + "play": 184822, + "thumb_up": 3918, + "share": 44 + }, + "type": 11, + "intro": "猛 男 生 存", + "ctime": 1598884758, + "mtime": 1598884758, + "state": 0, + "fav_state": 0, + "like_state": 0, + "media_count": 28 + } +} +``` + +</details> + +## 获取指定用户创建的所有收藏夹信息 + +> https://api.bilibili.com/x/v3/fav/folder/created/list-all + +*请求方式:GET* + +认证方式:Cookie (SESSDATA) 或 APP + +若欲查看相应用户的私密收藏夹需要登录 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| up_mid | num | 目标用户mid | 必要 | | +| type | num | 目标内容属性 | 非必要 | 默认为全部<br />0:全部<br />2:视频稿件 | +| rid | num | 目标内容id | 非必要 | 视频稿件:视频稿件avid | +| web_location | str | 333.1387 | 非必要| | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 隐藏时:null<br />公开时:obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | --------------------------------------- | -------------- | ---- | +| count | num | 创建的收藏夹数 | | +| list | 无收藏夹时:null<br />有收藏夹时:array | 收藏夹列表 | | +| season | null | (?) | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | --------------------- | +| 0 | obj | 收藏夹1 | | +| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------------------ | ------------------------------------------ | +| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 | +| fid | num | 收藏夹原始id | | +| mid | num | 创建者mid | | +| attr | num | 收藏夹属性 | 二进制位属性<br />详细说明见下表 | +| title | str | 收藏夹标题 | | +| fav_state | num | 目标id是否存在于该收藏夹 | 存在于该收藏夹:1<br />不存在于该收藏夹:0 | +| media_count | num | 收藏夹内容数量 | | + +`attr`属性位二进制值表: + +| 位 | 内容 | 备注 | +| --------------- | ---------------- | -------------------------------- | +| 0 | 私有收藏夹 | 0:公开<br />1:私有 | +| 1 | 是否为默认收藏夹 | 0:默认收藏夹<br />1:其他收藏夹 | +| 其他有待补充... | | | + +**示例:** + +查询用户`mid=7792521`的收藏夹列表 + +```shell +curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \ +--data-urlencode 'up_mid=7792521' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 5, + "list": [{ + "id": 44233921, + "fid": 442339, + "mid": 7792521, + "attr": 0, + "title": "默认收藏夹", + "fav_state": 0, + "media_count": 85 + }, { + "id": 936347621, + "fid": 9363476, + "mid": 7792521, + "attr": 22, + "title": "放假君的鬼畜私房歌", + "fav_state": 0, + "media_count": 2 + }, { + "id": 845218621, + "fid": 8452186, + "mid": 7792521, + "attr": 22, + "title": "♪一言不合就开唱♪", + "fav_state": 0, + "media_count": 4 + }, { + "id": 844998121, + "fid": 8449981, + "mid": 7792521, + "attr": 22, + "title": "个人作品精选", + "fav_state": 0, + "media_count": 25 + }, { + "id": 381779121, + "fid": 3817791, + "mid": 7792521, + "attr": 22, + "title": "鬼畜小课堂", + "fav_state": 0, + "media_count": 25 + }] + } +} +``` + +</details> + +## 查询用户收藏的视频收藏夹 + +> https://api.bilibili.com/x/v3/fav/folder/collected/list + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| ps | num | 每页项数 | 必要 | 定义域 1 - 大于70 | +| pn | num | 页码 | 必要 | | +| up_mid | num | 目标用户mid | 必要 | | +| platform | str | 平台类型 | 非必要 | 填写web 返回值才会包含用户收藏的视频合集 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />40022:签名过长 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 隐藏时:null<br />公开时:obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | --------------------------------------- | -------------- | ---- | +| count | num | 创建的收藏夹数 | | +| list | 无收藏夹时:null<br />有收藏夹时:array | 收藏夹列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | --------------------- | +| 0 | obj | 收藏夹1 | | +| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------------ | ----------------------------------------- | +| id | num | 收藏夹ml | | +| fid | num | 原始收藏夹mlid | 去除两位mid尾号 | +| mid | num | 创建用户mid | | +| attr | num | 收藏夹属性 | [同上 attr](#获取指定用户创建的所有收藏夹信息) | +| title | str | 收藏夹标题 | | +| cover | str | 收藏夹封面图片url | | +| upper | obj | 收藏夹创建用户信息 | | +| cover_type | num | 2 | 作用尚不明确 | +| intro | str | 空 | 作用尚不明确 | +| ctime | num | 创建时间 | 时间戳 | +| mtime | num | 审核时间 | 时间戳 | +| state | num | 0, 1 | 0: 正常;1:收藏夹已失效 | +| fav_state | num | 0 | 作用尚不明确 | +| media_count | num | 收藏夹总计视频数 | | + +`data`中的`list`数组中的对象中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ------------ | +| mid | num | 创建人mid | | +| name | str | 创建人昵称 | | +| face | str | 空 | 作用尚不明确 | + +**示例:** + +查询用户`mid=293793435`的收藏夹收藏列表 + +```shell +curl -G 'https://api.bilibili.com/x/v3/fav/folder/collected/list' \ +--data-urlencode 'up_mid=293793435' \ +--data-urlencode 'ps=20' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 2, + "list": [{ + "id": 496307088, + "fid": 4963070, + "mid": 412466388, + "attr": 22, + "title": "入站必刷", + "cover": "http://i0.hdslb.com/bfs/archive/baae2b4050363c0ab45465b7cf696b8304fdaca8.jpg", + "upper": { + "mid": 412466388, + "name": "热门菌", + "face": "" + }, + "cover_type": 2, + "intro": "", + "ctime": 1563394571, + "mtime": 1563394571, + "state": 0, + "fav_state": 0, + "media_count": 55 + }, { + "id": 381779121, + "fid": 3817791, + "mid": 7792521, + "attr": 22, + "title": "鬼畜小课堂", + "cover": "http://i2.hdslb.com/bfs/archive/09a668cfdb38fb3a85f905c10f48a2947e36a695.jpg", + "upper": { + "mid": 7792521, + "name": "还有一天就放假了", + "face": "" + }, + "cover_type": 2, + "intro": "", + "ctime": 1553700224, + "mtime": 1557291666, + "state": 0, + "fav_state": 0, + "media_count": 25 + }] + } +} +``` + +</details> + +## 批量获取指定收藏id的内容 + +> https://api.bilibili.com/x/v3/fav/resource/infos + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------------- | ------ | ------------------------------------------------------------ | +| resources | strs | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型}<br />每个成员间用`,`分隔<br />类型:<br />2:视频稿件<br />12:音频<br />内容id:<br />视频稿件:视频稿件avid<br />音频:音频auid | +| platform | str | 平台标识 | 非必要 | 可为web(影响内容列表类型) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------------------------------- | ------------ | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:array<br />无效或:null | 内容信息列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 内容信息1 | | +| n | obj | 内容信息(n+1) | | +| ... | obj | ... | | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------- | ------------------------------------------------------------ | +| id | num | 内容id | 视频稿件:视频稿件avid<br />音频:音频auid | +| type | num | 内容类型 | 2:视频稿件<br />12:音频 | +| title | str | 标题 | | +| cover | str | 封面url | | +| intro | str | 简介 | | +| page | num | 视频分P数 | | +| duration | num | 音频/视频时长 | | +| upper | obj | UP主信息 | | +| attr | num | 属性 | 0:正常<br />1:失效 | +| cnt_info | obj | 状态数 | | +| link | str | 跳转uri | | +| ctime | num | 投稿时间 | 时间戳 | +| pubtime | num | 发布时间 | 时间戳 | +| fav_time | num | 收藏时间 | 时间戳 | +| bv_id | str | 视频稿件bvid | | +| bvid | str | 视频稿件bvid | | +| season | null | (?) | | + +`data`数组中的对象中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| mid | num | UP主mid | | +| name | str | UP主昵称 | | +| face | str | UP主头像url | | + +`data`数组中的对象中的`cnt_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ---- | +| collect | num | 收藏数 | | +| play | num | 播放数 | | +| danmaku | num | 弹幕数 | | + +**示例:** + +批量查询内容 + +1-视频稿件-`av583785685` + +2-音频-`au15664` + +```shell +curl -G 'https://api.bilibili.com/x/v3/fav/resource/infos' \ +--data-urlencode 'resources=583785685:2,15664:12' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "id": 583785685, + "type": 2, + "title": "已失效视频", + "cover": "http://i0.hdslb.com/bfs/archive/be27fd62c99036dce67efface486fb0a88ffed06.jpg", + "intro": "审核君辛苦了~\r\n使用curl命令访问B站api,实现二维码登录 查询登录信息 视频投币 发送评论的操作\r\n本视频作为api收集项目的一个硬核DEMO\r\n由于当时录音的问题,大部分是后期配的,后面声音有点小\r\n想了解更多的去github页面,也可以qq\r\n\r\nbgm:\r\n雲流れ\r\nAutumn rain(未修改版)\r\n四月,初雨微凉", + "page": 1, + "duration": 604, + "upper": { + "mid": 293793435, + "name": "社会易姐QwQ", + "face": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg" + }, + "attr": 1, + "cnt_info": { + "collect": 1470, + "play": 28374, + "danmaku": 64 + }, + "link": "bilibili://video/583785685", + "ctime": 1594049831, + "pubtime": 1594049831, + "fav_time": 0, + "bv_id": "BV1kz4y1X7XP", + "bvid": "BV1kz4y1X7XP", + "season": null + }, + { + "id": 523, + "type": 21, + "title": "2021哔哩哔哩拜年纪", + "cover": "https://i0.hdslb.com/bfs/archive/8ccc50f7cbc671762e0536491bd2b8aeebc0837d.jpg", + "intro": "感谢各位制作者们的辛勤付出!节目精彩,愿大家看的开心!", + "page": 0, + "duration": 0, + "upper": { + "mid": 1868902080, + "name": "哔哩哔哩拜年纪", + "face": "http://i0.hdslb.com/bfs/face/7f6cb94fc071aca9fbb4b1ca9cc6415e86847576.jpg" + }, + "attr": 0, + "cnt_info": { + "collect": 0, + "play": 71527018, + "danmaku": 480547 + }, + "link": "bilibili://video/373561162", + "ctime": 0, + "pubtime": 0, + "fav_time": 0, + "bv_id": "", + "bvid": "", + "season": null + }, + { + "id": 15664, + "type": 12, + "title": "威风堂堂", + "cover": "http://i0.hdslb.com/bfs/music/c417d30b394a8a5d4e8a150ad75837dbae3b79d4.jpg", + "intro": "翻唱。在电脑里放了半个月终于!!!大家寒假快乐!!❁本家sm19233263;❁压制: 寒雨;❁mix: 三星堆;❁vocal: 茶理理。超喜欢michan的那段英文念白所以加了进来w 谢谢三月月和嘟比比你们后期辛苦了!", + "page": 1, + "duration": 200, + "upper": { + "mid": 684169, + "name": "茶理理理子", + "face": "" + }, + "attr": 0, + "cnt_info": { + "collect": 48872, + "play": 1508426, + "danmaku": 0 + }, + "link": "bilibili://music/detail/15664?name=%E5%A8%81%E9%A3%8E%E5%A0%82%E5%A0%82&uperName=%E8%8C%B6%E7%90%86%E7%90%86%E7%90%86%E5%AD%90&cover_url=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Fmusic%2Fc417d30b394a8a5d4e8a150ad75837dbae3b79d4.jpg&upperId=684169&author=%E8%8C%B6%E7%90%86%E7%90%86", + "ctime": 1502347604, + "pubtime": 1502347604, + "fav_time": 0, + "bv_id": "BV1bx411c7qt", + "bvid": "BV1bx411c7qt", + "season": null + } + ] +} +``` + +</details> diff --git a/docs/fav/list.md b/docs/fav/list.md new file mode 100644 index 0000000..34cbae9 --- /dev/null +++ b/docs/fav/list.md @@ -0,0 +1,560 @@ +# 收藏夹内容 + +## 获取收藏夹内容明细列表 + +> https://api.bilibili.com/x/v3/fav/resource/list + +*请求方式:GET* + +认证方式:Cookie或APP + +**注:查询权限收藏夹时需要相应用户登录** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| media_id | num | 目标收藏夹mlid(完整id) | 必要 | | +| tid | num | 分区tid | 非必要 | 默认为全部分区<br />0:全部分区<br />[详见说明](../video/video_zone.md) | +| keyword | str | 搜索关键字 | 非必要 | | +| order | str | 排序方式 | 非必要 | 按收藏时间:mtime<br />按播放量: view<br />按投稿时间:pubtime | +| type | num | 查询范围 | 非必要 | 0:当前收藏夹(对应media_id)<br /> 1:全部收藏夹 | +| ps | num | 每页数量 | 必要 | 定义域:1-20 | +| pn | num | 页码 | 非必要 | 默认为1 | +| platform | str | 平台标识 | 非必要 | 可为web(影响内容列表类型) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:obj<br />无效或:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ------------ | ---- | +| info | obj | 收藏夹元数据 | | +| medias | array | 收藏夹内容 | | +| has_more | bool | 收藏夹是否有下一页 | | +| ttl | num | 接口返回时间 | 时间戳 | + +`data`中的`info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------------- | -------------------------------------------------- | +| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 | +| fid | num | 收藏夹原始id | | +| mid | num | 创建者mid | | +| attr | num | 属性 | 0:正常<br />1:失效 | +| title | str | 收藏夹标题 | | +| cover | str | 收藏夹封面图片url | | +| upper | obj | 创建者信息 | | +| cover_type | num | 封面图类别(?) | | +| cnt_info | obj | 收藏夹状态数 | | +| type | num | 类型(?) | 一般是11 | +| intro | str | 备注 | | +| ctime | num | 创建时间 | 时间戳 | +| mtime | num | 收藏时间 | 时间戳 | +| state | num | 状态(?) | 一般为0 | +| fav_state | num | 收藏夹收藏状态 | 已收藏收藏夹:1<br />未收藏收藏夹:0<br />需要登录 | +| like_state | num | 点赞状态 | 已点赞:1<br />未点赞:0<br />需要登录 | +| media_count | num | 收藏夹内容数量 | | + + +`info`中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------- | ----------------------------------------------- | +| mid | num | 创建者mid | | +| name | str | 创建者昵称 | | +| face | str | 创建者头像url | | +| followed | bool | 是否已关注创建者 | | +| vip_type | num | 会员类别 | 0:无<br />1:月大会员<br />2:年度及以上大会员 | +| vip_statue | num | 会员开通状态 | 0:无<br />1:有 | + +`info`中的`cnt_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------ | ---- | +| collect | num | 收藏数 | | +| play | num | 播放数 | | +| thumb_up | num | 点赞数 | | +| share | num | 分享数 | | + +`data`中的`medias`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 收藏内容1 | | +| n | obj | 收藏内容(n+1) | | +| ... | obj | ... | | + +`medias`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------- | ------------------------------------------------------------ | +| id | num | 内容id | 视频稿件:视频稿件avid<br />音频:音频auid<br />视频合集:视频合集id | +| type | num | 内容类型 | 2:视频稿件<br />12:音频<br />21:视频合集 | +| title | str | 标题 | | +| cover | str | 封面url | | +| intro | str | 简介 | | +| page | num | 视频分P数 | | +| duration | num | 音频/视频时长 | | +| upper | obj | UP主信息 | | +| attr | num | 失效 | 0: 正常;9: up自己删除;1: 其他原因删除 | +| cnt_info | obj | 状态数 | | +| link | str | 跳转uri | | +| ctime | num | 投稿时间 | 时间戳 | +| pubtime | num | 发布时间 | 时间戳 | +| fav_time | num | 收藏时间 | 时间戳 | +| bv_id | str | 视频稿件bvid | | +| bvid | str | 视频稿件bvid | | +| season | null | (?) | | + +`medias`数组中的对象中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| mid | num | UP主mid | | +| name | str | UP主昵称 | | +| face | str | UP主头像url | | + +`medias`数组中的对象中的`cnt_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ---- | +| collect | num | 收藏数 | | +| play | num | 播放数 | | +| danmaku | num | 弹幕数 | | + +**示例:** + +查询收藏夹`id=1052622027`,每页5个视频,第`1`页的内容明细 + +```shell +curl -G 'https://api.bilibili.com/x/v3/fav/resource/list' \ +--data-urlencode 'media_id=1052622027' \ +--data-urlencode 'platform=web' \ +--data-urlencode 'pn=1' \ +--data-urlencode 'ps=5' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "info": { + "id": 1052622027, + "fid": 10526220, + "mid": 686127, + "attr": 54, + "title": "猛 男 生 存", + "cover": "http://i2.hdslb.com/bfs/archive/bb51ee8a5fc5e03996138155f0f682d30ee16484.jpg", + "upper": { + "mid": 686127, + "name": "籽岷", + "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp", + "followed": true, + "vip_type": 2, + "vip_statue": 1 + }, + "cover_type": 2, + "cnt_info": { + "collect": 3393, + "play": 184768, + "thumb_up": 3916, + "share": 44 + }, + "type": 11, + "intro": "猛 男 生 存", + "ctime": 1598884758, + "mtime": 1598884758, + "state": 0, + "fav_state": 0, + "like_state": 0, + "media_count": 28 + }, + "medias": [ + { + "id": 371494037, + "type": 2, + "title": "猛 男 生 存", + "cover": "http://i2.hdslb.com/bfs/archive/bb51ee8a5fc5e03996138155f0f682d30ee16484.jpg", + "intro": "如果大家喜欢我的视频,别忘了点个赞,一键三连,或者关注我的频道哦~\n也可以把我的视频分享给你们的朋友们~\n\n第一集:BV1CZ4y1T7gC\n第二集:BV1oA411a72k\n第三集:BV1fK4y1e7Yj\n第四集:BV1Ya4y1E7Y6\n第五集:BV17V411z75A\n第六集:BV1oi4y137sw\n第七集:BV1Wt4y1D7Uu\n第八集:BV1Bp4y1q7y9\n第九集:BV1Lv411v7G2\n第十集:BV1Xi4y137ER\n第十一集:BV1nC4y1879J\n第十二集:BV1K54y1", + "page": 1, + "duration": 546, + "upper": { + "mid": 686127, + "name": "籽岷", + "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp" + }, + "attr": 0, + "cnt_info": { + "collect": 11256, + "play": 1638040, + "danmaku": 7697 + }, + "link": "bilibili://video/371494037", + "ctime": 1595690513, + "pubtime": 1595690513, + "fav_time": 1598884777, + "bv_id": "BV1CZ4y1T7gC", + "bvid": "BV1CZ4y1T7gC", + "season": null + }, + { + "id": 328991940, + "type": 2, + "title": "猛 男 生 存 2", + "cover": "http://i1.hdslb.com/bfs/archive/aa801612ea0229a08d000a525b715af24cba0964.jpg", + "intro": "如果大家喜欢我的视频,别忘了点个赞,一键三连,或者关注我的频道哦~\n也可以把我的视频分享给你们的朋友们~\n\n第一集:BV1CZ4y1T7gC\n第二集:BV1oA411a72k\n第三集:BV1fK4y1e7Yj\n第四集:BV1Ya4y1E7Y6\n第五集:BV17V411z75A\n第六集:BV1oi4y137sw\n第七集:BV1Wt4y1D7Uu\n第八集:BV1Bp4y1q7y9\n第九集:BV1Lv411v7G2\n第十集:BV1Xi4y137ER\n第十一集:BV1nC4y1879J\n第十二集:BV1K54y1", + "page": 1, + "duration": 644, + "upper": { + "mid": 686127, + "name": "籽岷", + "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp" + }, + "attr": 0, + "cnt_info": { + "collect": 8695, + "play": 1334651, + "danmaku": 6064 + }, + "link": "bilibili://video/328991940", + "ctime": 1595770876, + "pubtime": 1595770876, + "fav_time": 1598884783, + "bv_id": "BV1oA411a72k", + "bvid": "BV1oA411a72k", + "season": null + }, + { + "id": 884042215, + "type": 2, + "title": "猛 男 生 存 3", + "cover": "http://i1.hdslb.com/bfs/archive/f99059637c110dcd1cdae765a946801fbcefe4ab.jpg", + "intro": "如果大家喜欢我的视频,别忘了点个赞,一键三连,或者关注我的频道哦~\n也可以把我的视频分享给你们的朋友们~\n\n第一集:BV1CZ4y1T7gC\n第二集:BV1oA411a72k\n第三集:BV1fK4y1e7Yj\n第四集:BV1Ya4y1E7Y6\n第五集:BV17V411z75A\n第六集:BV1oi4y137sw\n第七集:BV1Wt4y1D7Uu\n第八集:BV1Bp4y1q7y9\n第九集:BV1Lv411v7G2\n第十集:BV1Xi4y137ER\n第十一集:BV1nC4y1879J\n第十二集:BV1K54y1", + "page": 1, + "duration": 703, + "upper": { + "mid": 686127, + "name": "籽岷", + "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp" + }, + "attr": 0, + "cnt_info": { + "collect": 9449, + "play": 1429408, + "danmaku": 8243 + }, + "link": "bilibili://video/884042215", + "ctime": 1595847079, + "pubtime": 1595847079, + "fav_time": 1598884788, + "bv_id": "BV1fK4y1e7Yj", + "bvid": "BV1fK4y1e7Yj", + "season": null + }, + { + "id": 669013980, + "type": 2, + "title": "猛 男 生 存 4", + "cover": "http://i1.hdslb.com/bfs/archive/def0f7009cb9a8b581ee03be9565918ff0c1913d.jpg", + "intro": "如果大家喜欢我的视频,别忘了点个赞,一键三连,或者关注我的频道哦~\n也可以把我的视频分享给你们的朋友们~\n\n第一集:BV1CZ4y1T7gC\n第二集:BV1oA411a72k\n第三集:BV1fK4y1e7Yj\n第四集:BV1Ya4y1E7Y6\n第五集:BV17V411z75A\n第六集:BV1oi4y137sw\n第七集:BV1Wt4y1D7Uu\n第八集:BV1Bp4y1q7y9\n第九集:BV1Lv411v7G2\n第十集:BV1Xi4y137ER\n第十一集:BV1nC4y1879J\n第十二集:BV1K54y1", + "page": 1, + "duration": 895, + "upper": { + "mid": 686127, + "name": "籽岷", + "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp" + }, + "attr": 0, + "cnt_info": { + "collect": 9950, + "play": 1309544, + "danmaku": 13551 + }, + "link": "bilibili://video/669013980", + "ctime": 1595943988, + "pubtime": 1595943988, + "fav_time": 1598884792, + "bv_id": "BV1Ya4y1E7Y6", + "bvid": "BV1Ya4y1E7Y6", + "season": null + }, + { + "id": 414034824, + "type": 2, + "title": "猛 男 生 存 5", + "cover": "http://i2.hdslb.com/bfs/archive/b4844ac89dde221d13bb8ddff80a8c4658bf7dc5.jpg", + "intro": "如果大家喜欢我的视频,别忘了点个赞,一键三连,或者关注我的频道哦~\n也可以把我的视频分享给你们的朋友们~\n\n第一集:BV1CZ4y1T7gC\n第二集:BV1oA411a72k\n第三集:BV1fK4y1e7Yj\n第四集:BV1Ya4y1E7Y6\n第五集:BV17V411z75A\n第六集:BV1oi4y137sw\n第七集:BV1Wt4y1D7Uu\n第八集:BV1Bp4y1q7y9\n第九集:BV1Lv411v7G2\n第十集:BV1Xi4y137ER\n第十一集:BV1nC4y1879J\n第十二集:BV1K54y1", + "page": 1, + "duration": 814, + "upper": { + "mid": 686127, + "name": "籽岷", + "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp" + }, + "attr": 0, + "cnt_info": { + "collect": 9446, + "play": 1235998, + "danmaku": 9021 + }, + "link": "bilibili://video/414034824", + "ctime": 1596023668, + "pubtime": 1596023668, + "fav_time": 1598884798, + "bv_id": "BV17V411z75A", + "bvid": "BV17V411z75A", + "season": null + } + ], + "has_more": true, + "ttl": 1703349018 + } +} +``` + +</details> + +## 获取收藏夹全部内容id + +> https://api.bilibili.com/x/v3/fav/resource/ids + +*请求方式:GET* + +认证方式:Cookie或APP + +**注:查询权限收藏夹时需要相应用户登录** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | --------------------------- | +| media_id | num | 目标收藏夹mlid(完整id) | 必要 | | +| platform | str | 平台标识 | 非必要 | 可为web(影响内容列表类型) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------------------------------- | ---------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:array<br />无效或:null | 内容id列表 | | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | ------------------------------------------------------------ | +| id | num | 内容id | 视频稿件:视频稿件avid<br />音频:音频auid<br />视频合集:视频合集id | +| type | num | 内容类型 | 2:视频稿件<br />12:音频<br />21:视频合集 | +| bv_id | str | 视频稿件bvid | | +| bvid | str | 视频稿件bvid | | + +**示例:** + +查询收藏夹`id=1052622027`的全部内容id + +```shell +curl -G 'https://api.bilibili.com/x/v3/fav/resource/ids' \ +--data-urlencode 'media_id=1052622027' \ +--data-urlencode 'platform=web' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "id": 371494037, + "type": 2, + "bv_id": "BV1CZ4y1T7gC", + "bvid": "BV1CZ4y1T7gC" + }, + { + "id": 328991940, + "type": 2, + "bv_id": "BV1oA411a72k", + "bvid": "BV1oA411a72k" + }, + { + "id": 884042215, + "type": 2, + "bv_id": "BV1fK4y1e7Yj", + "bvid": "BV1fK4y1e7Yj" + }, + { + "id": 669013980, + "type": 2, + "bv_id": "BV1Ya4y1E7Y6", + "bvid": "BV1Ya4y1E7Y6" + }, + { + "id": 414034824, + "type": 2, + "bv_id": "BV17V411z75A", + "bvid": "BV17V411z75A" + }, + { + "id": 541550765, + "type": 2, + "bv_id": "BV1oi4y137sw", + "bvid": "BV1oi4y137sw" + }, + { + "id": 626619000, + "type": 2, + "bv_id": "BV1Wt4y1D7Uu", + "bvid": "BV1Wt4y1D7Uu" + }, + { + "id": 969124957, + "type": 2, + "bv_id": "BV1Bp4y1q7y9", + "bvid": "BV1Bp4y1q7y9" + }, + { + "id": 244079274, + "type": 2, + "bv_id": "BV1Lv411v7G2", + "bvid": "BV1Lv411v7G2" + }, + { + "id": 541500006, + "type": 2, + "bv_id": "BV1Xi4y137ER", + "bvid": "BV1Xi4y137ER" + }, + { + "id": 796655080, + "type": 2, + "bv_id": "BV1nC4y1879J", + "bvid": "BV1nC4y1879J" + }, + { + "id": 839243447, + "type": 2, + "bv_id": "BV1K54y1U77v", + "bvid": "BV1K54y1U77v" + }, + { + "id": 329235451, + "type": 2, + "bv_id": "BV13A411e7ad", + "bvid": "BV13A411e7ad" + }, + { + "id": 884202228, + "type": 2, + "bv_id": "BV1UK4y1v7K6", + "bvid": "BV1UK4y1v7K6" + }, + { + "id": 926710567, + "type": 2, + "bv_id": "BV1BT4y157HK", + "bvid": "BV1BT4y157HK" + }, + { + "id": 754200948, + "type": 2, + "bv_id": "BV1qk4y117Uk", + "bvid": "BV1qk4y117Uk" + }, + { + "id": 371795957, + "type": 2, + "bv_id": "BV1iZ4y1K7LG", + "bvid": "BV1iZ4y1K7LG" + }, + { + "id": 969268280, + "type": 2, + "bv_id": "BV1hp4y1v7mU", + "bvid": "BV1hp4y1v7mU" + }, + { + "id": 414281629, + "type": 2, + "bv_id": "BV1xV411U7mm", + "bvid": "BV1xV411U7mm" + }, + { + "id": 839319009, + "type": 2, + "bv_id": "BV1t54y1U7hg", + "bvid": "BV1t54y1U7hg" + }, + { + "id": 329271769, + "type": 2, + "bv_id": "BV12A411J7JZ", + "bvid": "BV12A411J7JZ" + }, + { + "id": 969365400, + "type": 2, + "bv_id": "BV1wp4y1i7U8", + "bvid": "BV1wp4y1i7U8" + }, + { + "id": 796831427, + "type": 2, + "bv_id": "BV1yC4y1t7Gb", + "bvid": "BV1yC4y1t7Gb" + }, + { + "id": 711972863, + "type": 2, + "bv_id": "BV1YD4y1m7FP", + "bvid": "BV1YD4y1m7FP" + }, + { + "id": 754414390, + "type": 2, + "bv_id": "BV1Yk4y127YR", + "bvid": "BV1Yk4y127YR" + }, + { + "id": 839478683, + "type": 2, + "bv_id": "BV1i54y127uw", + "bvid": "BV1i54y127uw" + }, + { + "id": 499448381, + "type": 2, + "bv_id": "BV19K411N7KE", + "bvid": "BV19K411N7KE" + }, + { + "id": 926919797, + "type": 2, + "bv_id": "BV1QT4y1L7Bb", + "bvid": "BV1QT4y1L7Bb" + } + ] +} +``` + +</details> diff --git a/docs/garb/color.md b/docs/garb/color.md new file mode 100644 index 0000000..c27c16b --- /dev/null +++ b/docs/garb/color.md @@ -0,0 +1,311 @@ +# 主题色 + +## 获取主题色基本信息1 + +> https://club.bilibili.com/api/query.skin.list.do + +*请求方式:GET* + +鉴权方式:appkey + +认证方式:仅可APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| build | num | 版本 | APP方式必要 | 可为`6082000` | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | ------------ | ---------------------------------------------------- | +| ts | num | 当前时间戳 | | +| code | num | 返回值 | 0:成功<br />-3:API校验密匙错误<br />-400:请求错误 | +| data | array | 主题颜色列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 主题颜色1 | | +| n | obj | 主题颜色(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ------------------------------- | +| id | num | 颜色id | | +| name | str | 颜色名称 | | +| is_free | bool | 是否免费 | false:收费<br />true:免费 | +| price | num | 价格 | 单位为硬币 | +| is_bought | bool | 是否已购买 | false:未购买<br />true:已购买 | +| status | num | 状态 | 1:自动续费<br />4:已退订 | +| buy_time | num | 购买时间 | 毫秒时间戳 | +| due_time | num | 到期时间 | 毫秒时间戳 | +| color_name | str | 颜色类型名称 | | +| is_overdue | bool | 是否已到期 | false:未到期<br />true:已到期 | + +**示例:** + +```shell +curl -G 'https://club.bilibili.com/api/query.skin.list.do' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'appkey=1d8b6e7d45233436' \ +--data-urlencode 'build=6082000' \ +--data-urlencode 'sign=2d37f2cd6f86337a6a07cb3cf311be86' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "ts": 1599225638239, + "code": 0, + "data": [ + { + "id": 2, + "name": "少女粉", + "is_free": true, + "price": 0, + "is_bought": false, + "color_name": "pink", + "is_overdue": false + }, + { + "id": 1, + "name": "夜间模式", + "is_free": true, + "price": 0, + "is_bought": false, + "color_name": "black", + "is_overdue": false + }, + { + "id": 3, + "name": "姨妈红", + "is_free": false, + "price": 5, + "is_bought": false, + "color_name": "red", + "is_overdue": false + }, + { + "id": 4, + "name": "咸蛋黄", + "is_free": false, + "price": 5, + "is_bought": false, + "color_name": "yellow", + "is_overdue": false + }, + { + "id": 5, + "name": "早苗绿", + "is_free": false, + "price": 5, + "is_bought": false, + "status": 4, + "buy_time": 1599219782000, + "due_time": 1601811782000, + "color_name": "green", + "is_overdue": false + }, + { + "id": 6, + "name": "胖次蓝", + "is_free": false, + "price": 5, + "is_bought": false, + "color_name": "blue", + "is_overdue": false + }, + { + "id": 7, + "name": "基佬紫", + "is_free": false, + "price": 5, + "is_bought": false, + "color_name": "purple", + "is_overdue": false + } + ] +} +``` + +</details> + +## 获取主题色基本信息2 + +> https://api.bilibili.com/x/garb/skin/color/list + +*请求方式:GET* + +认证方式:仅可Cookie + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | ------------- | +| mobi_app | str | 平台标识 | 非必要 | 可为`android` | +| build | num | 版本 | 非必要 | 可为`6082000` | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | ------------ | ---------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-3:API校验密匙错误<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| data | array | 主题颜色列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 主题颜色1 | | +| n | obj | 主题颜色(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ------------------------------- | +| id | num | 颜色id | | +| name | str | 颜色名称 | | +| is_free | bool | 是否免费 | false:收费<br />true:免费 | +| price | num | 价格 | 单位为硬币 | +| is_bought | bool | 是否已购买 | false:未购买<br />true:已购买 | +| status | num | 状态 | 1:自动续费<br />4:已退订 | +| buy_time | num | 购买时间 | 毫秒时间戳 | +| due_time | num | 到期时间 | 毫秒时间戳 | +| color_name | str | 颜色类型名称 | | +| is_overdue | bool | 是否已到期 | false:未到期<br />true:已到期 | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/garb/skin/color/list' \ +--data-urlencode 'mobi_app=android' \ +--data-urlencode 'build=6082000' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "id": 8, + "name": "简洁白", + "is_free": true, + "price": 0, + "is_bought": false, + "status": 0, + "buy_time": 0, + "due_time": 0, + "color_name": "white", + "is_overdue": false + }, + { + "id": 2, + "name": "少女粉", + "is_free": true, + "price": 0, + "is_bought": false, + "status": 0, + "buy_time": 0, + "due_time": 0, + "color_name": "pink", + "is_overdue": false + }, + { + "id": 1, + "name": "夜间模式", + "is_free": true, + "price": 0, + "is_bought": false, + "status": 0, + "buy_time": 0, + "due_time": 0, + "color_name": "black", + "is_overdue": false + }, + { + "id": 3, + "name": "姨妈红", + "is_free": false, + "price": 5, + "is_bought": false, + "status": 0, + "buy_time": 0, + "due_time": 0, + "color_name": "red", + "is_overdue": false + }, + { + "id": 4, + "name": "咸蛋黄", + "is_free": false, + "price": 5, + "is_bought": false, + "status": 0, + "buy_time": 0, + "due_time": 0, + "color_name": "yellow", + "is_overdue": false + }, + { + "id": 5, + "name": "早苗绿", + "is_free": false, + "price": 5, + "is_bought": false, + "status": 4, + "buy_time": 1599219782000, + "due_time": 1601811782000, + "color_name": "green", + "is_overdue": false + }, + { + "id": 6, + "name": "胖次蓝", + "is_free": false, + "price": 5, + "is_bought": false, + "status": 0, + "buy_time": 0, + "due_time": 0, + "color_name": "blue", + "is_overdue": false + }, + { + "id": 7, + "name": "基佬紫", + "is_free": false, + "price": 5, + "is_bought": false, + "status": 0, + "buy_time": 0, + "due_time": 0, + "color_name": "purple", + "is_overdue": false + } + ] +} +``` + +</details> \ No newline at end of file diff --git a/docs/garb/lottery.md b/docs/garb/lottery.md new file mode 100644 index 0000000..d4dab77 --- /dev/null +++ b/docs/garb/lottery.md @@ -0,0 +1,3201 @@ +# 装扮/收藏集 + +由 [#1080](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1080) 提供 + +## 装扮/收藏集搜索API + +> https://api.bilibili.com/x/garb/v2/mall/home/search + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----- |--- |------- |----- |--- | +| key_word | str | 关键词 | 不必要 | | +| ps | int | 每页返回数据的最大值 | 不必要 | | +| pn | int | 当前页数 | 不必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|-- |-- |-- |-- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 返回数据 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +|-|---|--|--| +| list | array | 返回数据 | 若无则为 null | +| ps | int | 每页返回数据的最大值 | 默认为20 | +| pn | int | 当前页数 | 默认为1 | +| total | int | 查询到数据的总个数 | | + +`data` 中的 `list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-|---|--|--| +| item_id | int | 装扮对应的id | 收藏集均为0,需要在properties获取 | +| name | str | 装扮/收藏集名称 | | +| group_id | int | ?分类的id | | +| group_name | str | ?分类的名称 | | +| part_id | int | 类型id | 装扮为6 收藏集为0 | +| state | str | 当前状态 | 默认为“active” | +| properties | obj | 见下方 | | +| current_activity | obj | 见下方 | | +| next_activity | int | ?下次活动的时间 | | +| current_sources | int | ?活动开始时间 | | +| finish_sources | int | ?活动结束时间 | | +| sale_left_time | int | ?销售剩余时间 | | +| sale_time_end | int | ?销售结束时间 | | +| sale_surplus | int | 未知 | | +| sale_count_desc | str | 销售量显示文本 | | +| total_count_desc | str | 总量显示文本 | | +| tag | str | 当前状态标签 | | +| jump_link | str | 跳转链接 | | +| sales_mode | int | ?销售状态 | | + +`list` 数组中的对象中的 `properties` 对象: + +共有字段: + +| 字段 | 类型 | 内容 | 备注| +|-|---|--|--| +| image_cover | str | 图片封面 | | +| sale_bp_forever_raw | str | 价格 | 以0.01B币为单位| +| type | str | 类型 | 收藏集为dlc_act, 装扮为ip| + +装扮特有: + +| 字段 | 类型 | 内容 | 备注| +| - | - | ---- | ----- | +| desc | str | 介绍文本 | 仅装扮| +| fan_desc | str | 装扮名称 | 仅装扮| +| fan_item_ids | str | 未知 | 仅装扮| +| fan_mid | str | 该up的uid | 仅装扮| +| fan_no_color | str | 十六进制颜色 | 仅装扮| +| fan_recommend_desc | str | 装备说明 | 仅装扮| +| fan_recommend_jump_type | str | 跳转类型 | 仅装扮| +| fan_recommend_jump_value | str | 跳转值 | 仅装扮| +| fan_share_image | str | 分享时的背景图 | 仅装扮| +| gray_rule | str | 未知 | 仅装扮| +| gray_rule_type | str | 未知 | 仅装扮| +| image_cover_color | str | ?图片封面纯色背景 | 仅装扮| +| is_hide | str | 是否隐藏 | 仅装扮| +| item_id_card | str | 装扮背景卡片id | 仅装扮| +| item_id_emoji | str | 装扮表情包id | 仅装扮| +| item_id_thumbup | str | 装扮点赞动画id | 仅装扮| +| open_platform_vip_discount | str | 是否有大会员减免 | 仅装扮| +| owner_uid | str | UID | 默认为虚拟主播衍生品小货架, 仅装扮| +| rank_investor_show | str | 未知 | 仅装扮| +| realname_auth | str | ?是否需要实名认证 | 仅装扮| +| sale_bp_pm_raw | str | 该装扮基础套餐价格 | 以0.01B币为单位, 仅装扮| +| sale_buy_num_limit | str | 购买限额 | 仅装扮| +| sale_quantity | str | 该装扮粉丝专属套餐限额 | 仅装扮| +| sale_quantity_limit | str | 该装扮粉丝专属套餐是否限额 | 仅装扮| +| sale_region_ip_limit | str | 该装扮限制购买地区 | 仅装扮| +| sale_reserve_switch | str | 未知 | 仅装扮| +| sale_time_begin | str | 开始售卖时的时间戳 | 仅装扮| +| sale_type | str | 售卖类型 | 默认为pay, 仅装扮| +| suit_card_type | str | 仅装扮 | | + +收藏集特有: + +| 字段 | 类型 | 内容 | 备注 | +| - | ---- | - | --------- | +| book_amount | str | 购买总数 | 仅收藏集 | +| dlc_act_id | str | 收藏集活动id | 仅收藏集 | +| dlc_act_status | str | 收藏集活动状态 | 仅收藏集 | +| dlc_is_free | str | 收藏集抽奖是否免费 | 仅收藏集 | +| dlc_lottery_id | str | 收藏集抽奖id | 仅收藏集 | +| dlc_lottery_sale_quantity | str | 购买总数 | 仅收藏集 | +| dlc_lottery_type | str | ?抽奖类型 | 仅收藏集 | +| dlc_sale_end_time | str | 收藏集抽奖结束时间 | 仅收藏集 | +| dlc_sale_mode | str | 未知 | 仅收藏集 | +| dlc_sale_start_time | str | 收藏集抽奖开始时间 | 仅收藏集 | +| dlc_surplus_stock | str | 未知 | 仅收藏集 | + +`list` 数组中的对象中的 `current_activity` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | --- | --- | - | +| type | str | 当前永久价格活动类型 | 装扮一般是open_platform_vip_discount, 收藏集一般是first_draw_discount | +| time_limit | bool | 是否存在时间限制 | | +| time_left | int | 剩余时间 | | +| tag | str | 显示标签 | | +| price_bp_forever | int | 永久价格 | 以0.01B币为单位 | +| price_bp_month | int | 一个月的价格 | 以0.01B币为单位 | +| type_month | str | 当前一个月的价格活动类型 | 仅装扮 | +| tag_month | str | 显示标签 | 仅装扮 | +| time_limit_month | bool | 是否存在时间限制 | 仅装扮 | +| time_left_month | int | 剩余时间 | 仅装扮 | + +**示例:** + +搜索关键词为 `2233`: + +```shell +curl -G 'https://api.bilibili.com/x/garb/v2/mall/home/search' \ +--data-urlencode 'key_word=2233' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "item_id": 0, + "name": "2024拜年纪-2233拜年画册", + "group_id": 70, + "group_name": "2024拜年纪-2233拜年画册", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "1395313", + "dlc_act_id": "279", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "256", + "dlc_lottery_sale_quantity": "313028", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "2114406245", + "dlc_sale_mode": "1", + "dlc_sale_start_time": "1707458400", + "dlc_surplus_stock": "0", + "image_cover": "http://i0.hdslb.com/bfs/archive/f96a8cf6866ccef8f54de4773acf0cb07b915ac6.png", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": { + "type": "first_draw_discount", + "time_limit": false, + "time_left": -1728418723, + "tag": "大会员首抽", + "price_bp_month": 490, + "price_bp_forever": 490, + "type_month": "", + "tag_month": "", + "time_limit_month": false, + "time_left_month": 0 + }, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1728418723, + "sale_time_end": -1728418723, + "sale_surplus": 0, + "sale_count_desc": "31万+", + "total_count_desc": "已售31万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=279\u0026hybrid_set_header=2\u0026lottery_id=256", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2024 BML\u0026BW 2233收藏集-2233福利卡池", + "group_id": 70, + "group_name": "2024 BML\u0026BW 2233收藏集-2233福利卡池", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "4376", + "dlc_act_id": "102962", + "dlc_act_status": "2", + "dlc_is_free": "1", + "dlc_lottery_id": "102966", + "dlc_lottery_sale_quantity": "2677", + "dlc_lottery_type": "2", + "dlc_sale_end_time": "1729828800", + "dlc_sale_mode": "2", + "dlc_sale_start_time": "1721876400", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/4a374316b1e9a07cffeccbdeff585c472dcdcc26.png", + "sale_bp_forever_raw": "0", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1728418723, + "sale_time_end": -1728418723, + "sale_surplus": 0, + "sale_count_desc": "2千+", + "total_count_desc": "已发放2千+份", + "tag": "限时DLC", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=102962\u0026hybrid_set_header=2\u0026lottery_id=102966", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2233·幻境序曲-长夜", + "group_id": 70, + "group_name": "2233·幻境序曲-长夜", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "228065", + "dlc_act_id": "102161", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "103087", + "dlc_lottery_sale_quantity": "71200", + "dlc_lottery_type": "2", + "dlc_sale_end_time": "2114406245", + "dlc_sale_mode": "1", + "dlc_sale_start_time": "1722139200", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/f7e4f434ba6b93434b9e60df3c57a07552af4ca1.png", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": { + "type": "first_draw_discount", + "time_limit": false, + "time_left": -1728418723, + "tag": "大会员首抽", + "price_bp_month": 490, + "price_bp_forever": 490, + "type_month": "", + "tag_month": "", + "time_limit_month": false, + "time_left_month": 0 + }, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1728418723, + "sale_time_end": -1728418723, + "sale_surplus": 0, + "sale_count_desc": "7万+", + "total_count_desc": "已售7万+份", + "tag": "DLC池", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=102161\u0026hybrid_set_header=2\u0026lottery_id=103087", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2233·群星闪耀时-双子座", + "group_id": 70, + "group_name": "2233·群星闪耀时-双子座", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "1164544", + "dlc_act_id": "113", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "16", + "dlc_lottery_sale_quantity": "572712", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "2114406245", + "dlc_sale_mode": "1", + "dlc_sale_start_time": "1686196800", + "dlc_surplus_stock": "0", + "image_cover": "http://i0.hdslb.com/bfs/archive/ed35d12a3dce7764d6cb5b02cb4a459373472522.jpg", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": { + "type": "first_draw_discount", + "time_limit": false, + "time_left": -1728418723, + "tag": "大会员首抽", + "price_bp_month": 90, + "price_bp_forever": 90, + "type_month": "", + "tag_month": "", + "time_limit_month": false, + "time_left_month": 0 + }, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1728418723, + "sale_time_end": -1728418723, + "sale_surplus": 0, + "sale_count_desc": "57万+", + "total_count_desc": "已售57万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=113\u0026hybrid_set_header=2\u0026lottery_id=16", + "sales_mode": 0 + }, + { + "item_id": 39389, + "name": "2233人生百戏-花木兰", + "group_id": 70, + "group_name": "2233人生百戏-花木兰", + "part_id": 6, + "state": "active", + "properties": { + "desc": "为从军设妙计女扮男装,涉千山越万水亲赴戎机。2233人生百戏·花木兰装扮上线啦!本套装包括动态卡片、点赞动效和表情包,永久购买还能成为认证粉丝,领取粉丝专属装扮!", + "fan_desc": "人生百戏-花木兰", + "fan_id": "人生百戏-花木兰", + "fan_item_ids": "39335,39384,39353,39354", + "fan_mid": "35365327", + "fan_no_color": "#eb3d3e", + "fan_recommend_desc": "为从军设妙计女扮男装,涉千山越万水亲赴戎机。", + "fan_recommend_jump_type": "url", + "fan_recommend_jump_value": "https://space.bilibili.com/35365327?spm_id_from=333.337.0.0", + "fan_share_image": "https://i0.hdslb.com/bfs/garb/item/5ddd3f72ef2a938e9125851f488068012b841ad4.jpg", + "gray_rule": "true", + "gray_rule_type": "all", + "image_cover": "https://i0.hdslb.com/bfs/garb/item/e21ec12047bcd93e6afb8e52a68eb9835cd54a23.jpg", + "image_cover_color": "#d8b796", + "is_hide": "false", + "item_id_card": "39334", + "item_id_emoji": "39352", + "item_id_thumbup": "39336", + "open_platform_vip_discount": "true", + "owner_uid": "647193094", + "rank_investor_show": "false", + "realname_auth": "false", + "sale_bp_forever_raw": "5000", + "sale_bp_pm_raw": "800", + "sale_buy_num_limit": "100", + "sale_quantity": "20000", + "sale_quantity_limit": "true", + "sale_region_ip_limit": "全球", + "sale_reserve_switch": "false", + "sale_time_begin": "1666868400", + "sale_type": "pay", + "suit_card_type": "big_img", + "type": "ip" + }, + "current_activity": null, + "next_activity": { + "type": "open_platform_vip_discount", + "time_limit": true, + "time_left": 417469277, + "tag": "大会员平台折扣", + "price_bp_month": 640, + "price_bp_forever": 4000, + "type_month": "open_platform_vip_discount", + "tag_month": "大会员平台折扣", + "time_limit_month": true, + "time_left_month": 417469277 + }, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -61550323, + "sale_time_end": -1728418723, + "sale_surplus": 8650, + "sale_count_desc": "1万+", + "total_count_desc": "已售1万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/suit/detail?navhide=1\u0026id=39389", + "sales_mode": 0 + }, + { + "item_id": 4259, + "name": "2233白色情人节", + "group_id": 70, + "group_name": "2233白色情人节", + "part_id": 6, + "state": "active", + "properties": { + "desc": "shot你的心——无论是谁都拥有爱的权利,快换上白色情人节专属装扮来遇见心里的那个ta吧!本套装包括头像挂件、动态卡片、点赞动效和表情包,永久购买还能成为认证粉丝,领取粉丝专属装扮!", + "fan_desc": "白色情人节", + "fan_id": "2233白色情人节", + "fan_item_ids": "4257,4230,4256,4255,4253,4254", + "fan_mid": "174501086", + "fan_no_color": "#f85574", + "fan_recommend_desc": "平淡日常中迎来浪漫的节日,象征爱情的丘比特们悄悄来到少女们身边,用爱之箭觉醒了懵懂悸动的心。新鲜的玫瑰,闪耀光泽的草莓,白色情人节这天为你准备不一样的惊喜。", + "fan_recommend_jump_type": "url", + "fan_recommend_jump_value": "https://b23.tv/54WVWS", + "fan_share_image": "https://i0.hdslb.com/bfs/garb/item/30e3f1b234dd33a2a5446dd7d05b31835ac74d4b.jpg", + "gray_rule": "true", + "gray_rule_type": "all", + "image_cover": "https://i0.hdslb.com/bfs/garb/item/a8d60a7d4f1f5a5de667b307736f701cb39c0741.jpg", + "image_cover_color": "#a3a8ec", + "image_cover_long": "https://i0.hdslb.com/bfs/garb/item/5ac3bb024d42ff0f26de07ce974351d62587c6ea.jpg", + "image_desc": "https://i0.hdslb.com/bfs/garb/item/cfe753a010d124a95fb311c372a5be69d82c8e13.jpg", + "is_hide": "false", + "item_id_card": "4231", + "item_id_emoji": "4252", + "item_id_pendant": "4229", + "item_id_thumbup": "4232", + "open_platform_vip_discount": "true", + "owner_uid": "647193094", + "rank_investor_show": "true", + "realname_auth": "false", + "sale_bp_forever_raw": "5900", + "sale_bp_pm_raw": "800", + "sale_buy_num_limit": "100", + "sale_quantity": "52000", + "sale_quantity_limit": "true", + "sale_region_ip_limit": "全球", + "sale_reserve_switch": "false", + "sale_time_begin": "1615694400", + "sale_type": "pay", + "suit_card_type": "big_img", + "type": "ip" + }, + "current_activity": null, + "next_activity": { + "type": "open_platform_vip_discount", + "time_limit": true, + "time_left": 417469277, + "tag": "大会员平台折扣", + "price_bp_month": 640, + "price_bp_forever": 4720, + "type_month": "open_platform_vip_discount", + "tag_month": "大会员平台折扣", + "time_limit_month": true, + "time_left_month": 417469277 + }, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -112724323, + "sale_time_end": -1728418723, + "sale_surplus": 0, + "sale_count_desc": "5万+", + "total_count_desc": "已售5万+份", + "tag": "粉丝套装已售罄", + "jump_link": "https://www.bilibili.com/h5/mall/suit/detail?navhide=1\u0026id=4259", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2233·少女日记-蔚蓝幻想曲", + "group_id": 70, + "group_name": "2233·少女日记-蔚蓝幻想曲", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "100310", + "dlc_act_id": "103244", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "103885", + "dlc_lottery_sale_quantity": "16563", + "dlc_lottery_type": "2", + "dlc_sale_end_time": "2114406245", + "dlc_sale_mode": "1", + "dlc_sale_start_time": "1727236800", + "dlc_surplus_stock": "0", + "image_cover": "http://i0.hdslb.com/bfs/archive/a04b3e9ef354493a0890a9197412f1c77e01ba0f.jpg", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": { + "type": "first_draw_discount", + "time_limit": false, + "time_left": -1728418723, + "tag": "大会员首抽", + "price_bp_month": 490, + "price_bp_forever": 490, + "type_month": "", + "tag_month": "", + "time_limit_month": false, + "time_left_month": 0 + }, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1728418723, + "sale_time_end": -1728418723, + "sale_surplus": 0, + "sale_count_desc": "1万+", + "total_count_desc": "已售1万+份", + "tag": "DLC池", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=103244\u0026hybrid_set_header=2\u0026lottery_id=103885", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2233·少女日记-十四岁生日", + "group_id": 70, + "group_name": "2233·少女日记-十四岁生日", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "100310", + "dlc_act_id": "103244", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "103247", + "dlc_lottery_sale_quantity": "83747", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "2114406245", + "dlc_sale_mode": "1", + "dlc_sale_start_time": "1723780800", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/9c338eb4841cad917665140cc08c7d14b5c7e0bf.png", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": { + "type": "first_draw_discount", + "time_limit": false, + "time_left": -1728418723, + "tag": "大会员首抽", + "price_bp_month": 490, + "price_bp_forever": 490, + "type_month": "", + "tag_month": "", + "time_limit_month": false, + "time_left_month": 0 + }, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1728418723, + "sale_time_end": -1728418723, + "sale_surplus": 0, + "sale_count_desc": "8万+", + "total_count_desc": "已售8万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=103244\u0026hybrid_set_header=2\u0026lottery_id=103247", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2024 BML\u0026BW 2233收藏集-BML\u0026BW2024", + "group_id": 70, + "group_name": "2024 BML\u0026BW 2233收藏集-BML\u0026BW2024", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "4376", + "dlc_act_id": "102962", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "102963", + "dlc_lottery_sale_quantity": "1699", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "2114406245", + "dlc_sale_mode": "1", + "dlc_sale_start_time": "1721876400", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/6c2d68faf143c33b484b110e2221ab15a0a1f85c.png", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": { + "type": "first_draw_discount", + "time_limit": false, + "time_left": -1728418723, + "tag": "大会员首抽", + "price_bp_month": 490, + "price_bp_forever": 490, + "type_month": "", + "tag_month": "", + "time_limit_month": false, + "time_left_month": 0 + }, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1728418723, + "sale_time_end": -1728418723, + "sale_surplus": 0, + "sale_count_desc": "1千+", + "total_count_desc": "已售1千+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=102962\u0026hybrid_set_header=2\u0026lottery_id=102963", + "sales_mode": 0 + } + ], + "pn": 1, + "ps": 20, + "total": 187 + } +} +``` + +</details> + +## 收藏集信息API + +> https://api.bilibili.com/x/vas/dlc_act/lottery_home_detail + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | ---- | ---- | ---- | +| act_id | int | 收藏集活动id | 必要 | | +| lottery_id | int | 收藏集抽奖id|不必要| 但缺了不返回数据 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 返回数据 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +|-|-|-|-| +| lottery_id | int | 收藏集抽奖id | | +| name | str | 收藏集抽奖名称 | | +| item_list | array | 可抽出的物品列表 | | +| collect_list | obj | 见下方 | | +| button_bubble | null | 未知 | | +| guide_info | null | 未知 | | +| is_booked | int | 未知 | | +| total_book_cnt | int | 未知 | | +| is_fission | int | 未知 | | +| physical_exchange | int | 未知 | | + +`data` 中的 `item_list` 数组中的对象: + +|字段 | 类型 | 内容 | 备注| +|-|-|-|-| +|item_type | int | 物品类型 | 目前只拿到个1, 其他值未知| +|card_info | obj | 见下方 | | + +`item_list` 数组中的对象中的 `card_info` 对象: + +|字段 | 类型 | 内容 | 备注 | +|-|-|-|-| +|card_type_id | int | 该卡片id | | +|card_name | str | 该卡片名称 | | +|card_img | str | 该卡片图片 | 无水印| +|card_type | int | int | 未知| +|video_list | array | 该卡片动态视频 | 无水印| +|is_physical_orientation | int | 该卡片旋转方向 | | +|card_scarcity | int | 该卡片稀有度 | | +|is_mute | int | 该卡片是否静音 | | +|width | int | 该卡片像素宽度 | | +|height | int | 该卡片像素高度 | | +|card_ext_text | str | ?该卡片文件名字符串 | | +|card_img_download | str | 该卡片图片 | 有水印| +|video_list_download | array | 该卡片动态视频 | 有水印| +|subtitles_url | 未知 | | | +|play | null | 未知 | | +|tag | null | 未知 | | +|card_sub_type | int | 未知 | | +|is_new_tag | int | 未知 | | +|is_up_tag | int | 未知 | | +|is_limited_card | int | 未知 | | +|stock_info | null | 未知 | | + +`data` 中的 `collect_list` 对象: + +| 字段 | 类型 | 内容 | 备注| +|-|-|-|-| +| collect_infos | array | 见下方 | | +| collect_chain | null | 未知 | | + +`collect_list` 中的 `collect_infos` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-|-|-|-| +| collect_id | int | 收集品id | | +| start_time | int | 开始时间 | | +| end_time | int | 结束时间 | | +| redeem_text | str | 兑换条件 | | +| redeem_item_type | int | 兑换物类型 | | +| redeem_item_id | str | 兑换物id | | +| redeem_item_name | str | 兑换物名称 | | +| redeem_item_image | str | 兑换物预览图片 | | +| owned_item_amount | int | 拥有的数量 | | +| require_item_amount | int | 需要的数量 | | +| has_redeemed_cnt | int | 兑换次数 | | +| effective_forever | int | 是否永久有效 | | +| redeem_item_image_download | str | 未知 | | +| card_item | obj | 见下方 | 有时为 null | +| jump_url | str | ?跳转链接 | | +| redeem_cond_type | str | 当前兑换状态 | | +| remain_stock | int | 当前库存 | | +| total_stock | int | 总库存 | | +| lottery_id | int | 抽奖id | | +| reward_tag | str | 奖励显示标签 | | +| redeem_detail_image | str | 兑换详情图片 | | +| redeem_detail_videos | null | 未知 | | +| sort | int | 排序 | | +| redeem_items_optional | null | 未知 | | +| unlock_condition | obj | 见下方 | | + +`collect_infos` 数组中的对象中的 `card_item` 对象: + +| 字段 | 类型 | 内容 | 备注| +|-|-|-|-| +| card_type_info | null | | | +| card_asset_info | null | | | +| play | null | | | +| tag | null | | | + +`collect_infos` 数组中的对象中的 `unlock_condition` 对象: + +|字段 | 类型 | 内容 | 备注| +|-|-|-|-| +|unlocked | bool | 是否解锁 | | +|lock_type | int | 解锁类型 | | +|expire_at | int | 过期与 | | +|unlocked_at | int | 解锁于 | | +|unlock_threshold | int | ?解锁起点 | | +|current_threshold | int | ?当前起点 | | + +**示例:** + +```shell +curl -G --url 'https://api.bilibili.com/x/vas/dlc_act/lottery_home_detail' \ +--url-query 'act_id=111' \ +--url-query 'lottery_id=15' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "lottery_id": 15, + "name": "夏日萌菜", + "item_list": [ + { + "item_type": 1, + "card_info": { + "card_type_id": 700903, + "card_name": "水中嬉戏·隐藏", + "card_img": "https://i0.hdslb.com/bfs/baselabs/d41acfc3bfcc9032a9759fbd9e64147a6d9a24b0.png", + "card_type": 2, + "video_list": [ + "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/2b/y2/_000008vnv2ddoooah248hqoyz2gy22b-1-152111110023.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=cos&upsig=d22ca6102adb9ffe257f702047be6ef2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=753ff946c9e4b3813eb72c744ed3a399ba9a225fe4767a7a03835890fcbe4b8a&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0" + ], + "is_physical_orientation": 0, + "card_scarcity": 40, + "is_mute": 0, + "width": 1242, + "height": 1862, + "card_ext_text": "", + "card_img_download": "https://i0.hdslb.com/bfs/garb/d38c42b6f1151298888da5902bca5a41e14f67e1.png", + "video_list_download": [ + "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/digital_watermark/ib/30/_00003d7cuie74gr9z2322d7js5b30ib-teaser.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=hw&upsig=24512302cfa3b1f762f3ad08a0a2f5fe&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=5dc3cdfca31fca94c29a2ec945589ff319e97c3291dec2685184ec4083616cc2&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0" + ], + "subtitles_url": "", + "play": null, + "tag": null, + "card_sub_type": 0, + "is_new_tag": 0, + "is_up_tag": 0, + "is_limited_card": 0, + "stock_info": null + } + }, + { + "item_type": 1, + "card_info": { + "card_type_id": 700902, + "card_name": "轻纱花语·隐藏", + "card_img": "https://i0.hdslb.com/bfs/baselabs/e4721d06a5c435be216b5011f0604c9e07d5e4af.png", + "card_type": 2, + "video_list": [ + "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/jb/4u/_00001f04wekkvpmr92osvwpej1e4ujb-1-152111110023.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=cos&upsig=ad574839c71e5327783acf248b552b3d&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=49276ec1afce1a8f571e257fb6d2ab7488f623aa50c2c3b7252258be72315c5e&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0" + ], + "is_physical_orientation": 0, + "card_scarcity": 30, + "is_mute": 0, + "width": 1242, + "height": 1862, + "card_ext_text": "", + "card_img_download": "https://i0.hdslb.com/bfs/garb/0e49e7c8108a98944a96bfa594cf7f74c72398cf.png", + "video_list_download": [ + "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/digital_watermark/nb/58/_000007ovzgblf574s1ywvm7inwx58nb-teaser.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=cos&upsig=ec9de21147240e94494d736f277dfb64&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=2370473349a25fae0ea023f65f1e09c70b45d086831eef5f4727b8443acdf9f5&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0" + ], + "subtitles_url": "", + "play": null, + "tag": null, + "card_sub_type": 0, + "is_new_tag": 0, + "is_up_tag": 0, + "is_limited_card": 0, + "stock_info": null + } + }, + { + "item_type": 1, + "card_info": { + "card_type_id": 700904, + "card_name": "甜心女仆", + "card_img": "https://i0.hdslb.com/bfs/baselabs/e1f9c56a8f49910d07852f2bd648fee910f36ff6.png", + "card_type": 2, + "video_list": [ + "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/gb/j6/_000015vmteklku8oj1ypmp1yjijj6gb-1-152111110023.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=cos&upsig=c7412fe7b155deecbfea939f7c3d1b21&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=8989673c367aa0ffbe747cdc66129a6d1698f1c2b60ace24861ad62127cdd6da&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0" + ], + "is_physical_orientation": 0, + "card_scarcity": 20, + "is_mute": 0, + "width": 1242, + "height": 1862, + "card_ext_text": "", + "card_img_download": "https://i0.hdslb.com/bfs/garb/e6c69329d843603166fac8d41682c3489fd137d4.png", + "video_list_download": [ + "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/digital_watermark/zb/eq/_000018oi0e68wv4id2vkrk9ovpteqzb-teaser.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=hw&upsig=f972e8cd996d058deb4e0ffb1d57671e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=99054c626717b4ba61c01bbb0fe59f67feac394b89e19e4bbf95290d3a425f94&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0" + ], + "subtitles_url": "", + "play": null, + "tag": null, + "card_sub_type": 0, + "is_new_tag": 0, + "is_up_tag": 0, + "is_limited_card": 0, + "stock_info": null + } + }, + { + "item_type": 1, + "card_info": { + "card_type_id": 700901, + "card_name": "约会憧憬", + "card_img": "https://i0.hdslb.com/bfs/baselabs/924ef9a71bf39010935b4a43845bec13c8a2022c.png", + "card_type": 1, + "video_list": null, + "is_physical_orientation": 0, + "card_scarcity": 10, + "is_mute": 0, + "width": 1242, + "height": 1863, + "card_ext_text": "", + "card_img_download": "https://i0.hdslb.com/bfs/garb/40a9ff949ca7a50dbce146ad28fbb567c2583261.png", + "video_list_download": null, + "subtitles_url": "", + "play": null, + "tag": null, + "card_sub_type": 0, + "is_new_tag": 0, + "is_up_tag": 0, + "is_limited_card": 0, + "stock_info": null + } + }, + { + "item_type": 1, + "card_info": { + "card_type_id": 700900, + "card_name": "夏日小憩", + "card_img": "https://i0.hdslb.com/bfs/baselabs/0eddbfc70200f16bef06acc88ef132eb25ede52d.png", + "card_type": 1, + "video_list": null, + "is_physical_orientation": 0, + "card_scarcity": 10, + "is_mute": 0, + "width": 1242, + "height": 1863, + "card_ext_text": "", + "card_img_download": "https://i0.hdslb.com/bfs/garb/61e26e17705e06ecdfdb9ff97befb19c702cf81e.png", + "video_list_download": null, + "subtitles_url": "", + "play": null, + "tag": null, + "card_sub_type": 0, + "is_new_tag": 0, + "is_up_tag": 0, + "is_limited_card": 0, + "stock_info": null + } + }, + { + "item_type": 1, + "card_info": { + "card_type_id": 700899, + "card_name": "微风校园", + "card_img": "https://i0.hdslb.com/bfs/baselabs/bbeaf7993566684e328e74d8ef7c47e6242869a2.png", + "card_type": 1, + "video_list": null, + "is_physical_orientation": 0, + "card_scarcity": 10, + "is_mute": 0, + "width": 1242, + "height": 1863, + "card_ext_text": "", + "card_img_download": "https://i0.hdslb.com/bfs/garb/8ac61045334699d621363ccac87153a7128ef0c3.png", + "video_list_download": null, + "subtitles_url": "", + "play": null, + "tag": null, + "card_sub_type": 0, + "is_new_tag": 0, + "is_up_tag": 0, + "is_limited_card": 0, + "stock_info": null + } + }, + { + "item_type": 1, + "card_info": { + "card_type_id": 700898, + "card_name": "萌宠幻想", + "card_img": "https://i0.hdslb.com/bfs/baselabs/f93f200ec862b4520b30e8f03219fbaca91a2089.png", + "card_type": 1, + "video_list": null, + "is_physical_orientation": 0, + "card_scarcity": 10, + "is_mute": 0, + "width": 1242, + "height": 1863, + "card_ext_text": "", + "card_img_download": "https://i0.hdslb.com/bfs/garb/93e59f3080f6b8070b0d0621496e4ed6cb20cf8f.png", + "video_list_download": null, + "subtitles_url": "", + "play": null, + "tag": null, + "card_sub_type": 0, + "is_new_tag": 0, + "is_up_tag": 0, + "is_limited_card": 0, + "stock_info": null + } + }, + { + "item_type": 1, + "card_info": { + "card_type_id": 700897, + "card_name": "空中环游", + "card_img": "https://i0.hdslb.com/bfs/baselabs/fc0c020091c0a9fb1778c420bc4f9773a72ea7ba.png", + "card_type": 1, + "video_list": null, + "is_physical_orientation": 0, + "card_scarcity": 10, + "is_mute": 0, + "width": 1242, + "height": 1863, + "card_ext_text": "", + "card_img_download": "https://i0.hdslb.com/bfs/garb/c1c6c9ca84b584bf5f2b0e1ec7d239eb935e4d44.png", + "video_list_download": null, + "subtitles_url": "", + "play": null, + "tag": null, + "card_sub_type": 0, + "is_new_tag": 0, + "is_up_tag": 0, + "is_limited_card": 0, + "stock_info": null + } + } + ], + "collect_list": { + "collect_infos": [ + { + "collect_id": 0, + "start_time": 1685372400, + "end_time": 2114406245, + "redeem_text": "1抽必得勋章,可应用为评论背景&动态卡片", + "redeem_item_type": 1001, + "redeem_item_id": "", + "redeem_item_name": "夏日萌菜勋章", + "redeem_item_image": "http://i0.hdslb.com/bfs/archive/b3d915c6ad88609fb658393585f018459a7e620d.png", + "owned_item_amount": 0, + "require_item_amount": 1, + "has_redeemed_cnt": 0, + "effective_forever": 1, + "redeem_item_image_download": "", + "card_item": null, + "jump_url": "", + "redeem_cond_type": "", + "remain_stock": 0, + "total_stock": -1, + "lottery_id": 0, + "reward_tag": "", + "redeem_detail_image": "", + "redeem_detail_videos": null, + "sort": 0, + "redeem_items_optional": null, + "unlock_condition": { + "unlocked": true, + "lock_type": 0, + "expire_at": 0, + "unlocked_at": 0, + "unlock_threshold": 0, + "current_threshold": 0 + } + }, + { + "collect_id": 172, + "start_time": 1691640000, + "end_time": 2114406245, + "redeem_text": "抽出任意5张不同卡牌,即可领取,单UID仅可领取一次", + "redeem_item_type": 5, + "redeem_item_id": "56658", + "redeem_item_name": "夏日萌菜个性主题", + "redeem_item_image": "https://i0.hdslb.com/bfs/garb/48f755d6d08d96bfebcadee0be4bc34ce42421de.jpg", + "owned_item_amount": 0, + "require_item_amount": 5, + "has_redeemed_cnt": 0, + "effective_forever": 1, + "redeem_item_image_download": "", + "card_item": { + "card_type_info": null, + "play": null, + "tag": null, + "card_asset_info": null + }, + "jump_url": "", + "redeem_cond_type": "scarcity", + "remain_stock": -1, + "total_stock": -1, + "lottery_id": 0, + "reward_tag": "任务奖励限定", + "redeem_detail_image": "https://i0.hdslb.com/bfs/garb/48f755d6d08d96bfebcadee0be4bc34ce42421de.jpg", + "redeem_detail_videos": null, + "sort": 0, + "redeem_items_optional": null, + "unlock_condition": { + "unlocked": true, + "lock_type": 0, + "expire_at": 0, + "unlocked_at": 0, + "unlock_threshold": 0, + "current_threshold": 0 + } + }, + { + "collect_id": 51, + "start_time": 1685372400, + "end_time": 2114406245, + "redeem_text": "抽出任意1张隐藏卡牌,即可领取,单UID仅可领取一次", + "redeem_item_type": 3, + "redeem_item_id": "53199", + "redeem_item_name": "夏日萌菜头像框", + "redeem_item_image": "https://i0.hdslb.com/bfs/garb/item/9fcb99ccfd057c5eac165832d71fb63f07f26097.png", + "owned_item_amount": 0, + "require_item_amount": 1, + "has_redeemed_cnt": 0, + "effective_forever": 1, + "redeem_item_image_download": "", + "card_item": { + "card_type_info": null, + "play": null, + "tag": null, + "card_asset_info": null + }, + "jump_url": "", + "redeem_cond_type": "scarcity", + "remain_stock": -1, + "total_stock": -1, + "lottery_id": 0, + "reward_tag": "任务奖励限定", + "redeem_detail_image": "https://i0.hdslb.com/bfs/garb/item/9fcb99ccfd057c5eac165832d71fb63f07f26097.png", + "redeem_detail_videos": null, + "sort": 0, + "redeem_items_optional": null, + "unlock_condition": { + "unlocked": true, + "lock_type": 0, + "expire_at": 0, + "unlocked_at": 0, + "unlock_threshold": 0, + "current_threshold": 0 + } + }, + { + "collect_id": 50, + "start_time": 1685372400, + "end_time": 2114406245, + "redeem_text": "抽出任意3张不同卡牌,即可领取,单UID仅可领取一次", + "redeem_item_type": 2, + "redeem_item_id": "53178", + "redeem_item_name": "夏日萌菜表情包", + "redeem_item_image": "https://i0.hdslb.com/bfs/garb/462ae9b5735fef4bb9ed87a6d6467a4768b06006.png", + "owned_item_amount": 0, + "require_item_amount": 3, + "has_redeemed_cnt": 0, + "effective_forever": 1, + "redeem_item_image_download": "", + "card_item": { + "card_type_info": null, + "play": null, + "tag": null, + "card_asset_info": null + }, + "jump_url": "", + "redeem_cond_type": "scarcity", + "remain_stock": -1, + "total_stock": -1, + "lottery_id": 0, + "reward_tag": "任务奖励限定", + "redeem_detail_image": "https://i0.hdslb.com/bfs/garb/462ae9b5735fef4bb9ed87a6d6467a4768b06006.png", + "redeem_detail_videos": null, + "sort": 0, + "redeem_items_optional": null, + "unlock_condition": { + "unlocked": true, + "lock_type": 0, + "expire_at": 0, + "unlocked_at": 0, + "unlock_threshold": 0, + "current_threshold": 0 + } + }, + { + "collect_id": 366, + "start_time": 1694768400, + "end_time": 1696953600, + "redeem_text": "抽齐全部8张卡牌领取,直接获得全图鉴进度条标记,10月28日前人工发放头像", + "redeem_item_type": 5, + "redeem_item_id": "59374", + "redeem_item_name": "水中嬉戏·隐藏出框头像", + "redeem_item_image": "https://i0.hdslb.com/bfs/garb/ff981dbdca5c6b539e22596674265ef1cb110c9c.png", + "owned_item_amount": 0, + "require_item_amount": 8, + "has_redeemed_cnt": 0, + "effective_forever": 0, + "redeem_item_image_download": "", + "card_item": { + "card_type_info": null, + "play": null, + "tag": null, + "card_asset_info": null + }, + "jump_url": "", + "redeem_cond_type": "scarcity", + "remain_stock": -1, + "total_stock": -1, + "lottery_id": 0, + "reward_tag": "任务奖励限定", + "redeem_detail_image": "https://i0.hdslb.com/bfs/garb/ff981dbdca5c6b539e22596674265ef1cb110c9c.png", + "redeem_detail_videos": null, + "sort": 0, + "redeem_items_optional": null, + "unlock_condition": { + "unlocked": true, + "lock_type": 0, + "expire_at": 0, + "unlocked_at": 0, + "unlock_threshold": 0, + "current_threshold": 0 + } + } + ], + "collect_chain": null + }, + "button_bubble": null, + "guide_info": null, + "is_booked": 0, + "total_book_cnt": 0, + "is_fission": 0, + "physical_exchange": 0 + } +} +``` + +</details> + +## 主题装扮信息API + +> https://api.bilibili.com/x/garb/v2/mall/suit/detail + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------|-----|------|----| ---- | +| buvid | str | 设备唯一标识 | 不必要 | | +| csrf | str | 用户csrf | 不必要 | | +| from | str | 来源页面 | 不必要 | | +| from_id | int | 来源页面id | 不必要 | | +| item_id | int | 装扮id | 必要 | | +| part | str | ?分类 | 不必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------| +| code | num | 返回值 | `0`:成功<br />`-400`:错误 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|--------|------------| +| item_id | num | 装扮id | | +| name | str | 装扮名称 | | +| group_id | num | 分组id | | +| group_name | str | 分组名称 | | +| part_id | num | 分类id | | +| state | str | 状态 | | +| properties | obj | 装扮具体属性 | | +| current_activity | str | 当前活动 | | +| next_activity | obj | 下一个活动 | | +| current_sources | str | | **作用尚不明确** | +| finish_sources | str | | **作用尚不明确** | +| sale_left_time | num | | **作用尚不明确** | +| sale_time_end | num | | **作用尚不明确** | +| sale_surplus | num | 商品剩余数量 | | +| sale_count_desc | str | 促销销量说明 | | +| total_count_desc | str | 总销量说明 | | +| tag | str | 标签 | | +| jump_link | str | 跳转链接 | | +| sales_mode | num | 促销模式 | | +| suit_items | obj | 装扮具体内容 | | +| fan_user | obj | 装扮来源用户 | | +| unlock_items | obj | 未解锁装扮 | | +| activity_entrance | obj | 活动入口 | | + +`properties` 对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|----------------|-----------------------------| +| desc | str | 说明 | | +| fan_desc | str | 用户说明 | | +| fan_id | str | 装扮id | 获取到的数据,有时候是数字文本,有时候是普通文本 | +| fan_item_ids | str | 装扮id列表 | | +| fan_mid | str | 用户mid | | +| fan_no_color | str | | **为一串颜色16进制字符串,但作用尚不明确** | +| fan_recommend_desc | str | 用户推荐说明 | | +| fan_recommend_jump_type | str | 跳转类型 | | +| fan_recommend_jump_value | str | 跳转的值 | 一般为该装扮所有者的个人空间链接 | +| fan_share_image | str | | | +| gray_rule | str | | **布尔型转换的字符串,作用尚不明确** | +| gray_rule_type | str | | **作用尚不明确** | +| image_cover | str | 图片封面链接 | | +| image_cover_color | str | 图片封面颜色 | | +| is_hide | str | 是否隐藏 | **布尔型转换的字符串,作用尚不明确** | +| item_id_card | str | 动态卡片id | | +| item_id_emoji | str | 表情包id | | +| item_id_thumbup | str | 动态点赞特效id | | +| open_platform_vip_discount | str | 是否开启平台VIP折扣 | | +| owner_uid | str | 装扮所有者的用户uid | | +| rank_investor_show | str | ?显示投资者排名 | **布尔型转换的字符串,作用尚不明确** | +| realname_auth | str | | **布尔型转换的字符串,作用尚不明确** | +| sale_bp_forever_raw | str | | | +| sale_bp_pm_raw | str | | | +| sale_buy_num_limit | str | 促销限制数量 | | +| sale_quantity | str | 促销质量 | 整数型转换的字符串,"10000"可能表示的是这张图的原画 | +| sale_quantity_limit | str | ?是否限制某些质量装扮的销售 | **布尔型转换的字符串,作用尚不明确** | +| sale_region_ip_limit | str | 促销限制地区 | | +| sale_reserve_switch | str | | **布尔型转换的字符串,作用尚不明确** | +| sale_time_begin | str | 促销开始时间的时间戳 | | +| sale_type | str | 促销类型 | | +| suit_card_type | str | 装扮卡片类型 | | +| type | str | 类型 | **作用尚不明确** | + +`suit_items` 对象(可能不全,会继续补充): + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|--------|------------| +| card | array | 动态卡片 | | +| emoji_package | array | 表情包 | | +| card_bg | array | 专属评论装扮 | | +| thumbup | array | 动态点赞特效 | | +| loading | array | 专属加载动画 | | +| play_icon | array | 专属进度条 | | +| skin | array | 专属个性主题 | | +| space_bg | array | 专属空间海报 | | + +`suit_items` 中每个数组的对象: + +**即上文中所列出的 `suit_items` 中的那些数组对象,对于这些数组,<br />它们其中的字段基本都是相同的,不同的地方会在后面继续说明。** + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|---------|----------------------| +| item_id | num | 装扮id | | +| name | str | 装扮名称 | | +| state | str | 状态 | | +| tab_id | num | 分栏id | | +| suit_item_id | num | 所属装扮的id | | +| properties | obj | 装扮具体属性 | **不同点主要集中在这个地方,下文将继续说明** | +| current_activity | str | 当前活动 | | +| next_activity | obj | 下一个活动 | | +| current_sources | str | | **作用尚不明确** | +| finish_sources | str | | **作用尚不明确** | +| sale_left_time | str | | **作用尚不明确** | +| sale_time_end | str | | **作用尚不明确** | +| sale_surplus | str | 商品剩余数量 | | +| items | str | 装扮的具体内容 | | + +关于上述提到的 `properties` 对象中的共有字段: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|----------------------| +| gray_rule | str | | **布尔型转换的字符串,作用尚不明确** | +| gray_rule_type | str | | **作用尚不明确** | +| realname_auth | str | | **布尔型转换的字符串,作用尚不明确** | +| sale_type | str | 促销类型 | | +| image | str | 图片 | | +| image_preview_small | str | 预览图 | | + +`emoji_package` 数组中的对象中 `properties` 对象中的额外字段: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|-------|----------------------| +| addable | str | | **布尔型转换的字符串,作用尚不明确** | +| biz | str | | **作用尚不明确** | +| is_symbol | str | | **布尔型转换的字符串,作用尚不明确** | +| permanent | str | 是否永久 | | +| preview | str | | **布尔型转换的字符串,作用尚不明确** | +| recently_used | str | | **布尔型转换的字符串,作用尚不明确** | +| recommend | str | 是否推荐 | | +| ref_mid | str | | | +| removable | str | 是否可移除 | | +| setting_pannel_not_show | str | | **布尔型转换的字符串,作用尚不明确** | +| size | str | 尺寸 | | +| sortable | str | 排序类型 | | + +`loading` 数组中的对象中 `properties` 对象中的额外字段: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------------|----------------------| +| loading_frame_url | str | 进度条动画的其中一帧 | | +| loading_url | str | 进度条动画 | | + +`play_icon` 数组中的对象中 `properties` 对象中的额外字段: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|-------------|----------------------| +| drag_left_png | str | 进度条向左拖动时的图片 | | +| drag_right_png | str | 进度条向右拖动时的图片 | | +| middle_png | str | 进度条暂停时的图片 | | +| squared_image | str | 效果图 | | +| static_icon_image | str | 静态图标 | | + +`skin` 数组中的对象中 `properties` 对象中的额外字段: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|---------------------|----------------------| +| head_bg | str | 首页顶部图片 | | +| head_myself_mp4_play | str | 个人空间顶部视频动画的播放类型 | | +| head_myself_squared_bg | str | 个人空间顶部图片 | | +| head_tab_bg | str | 首页顶部标签栏背景图 | | +| image_cover | str | 封面图 | | +| package_md5 | str | 装扮图包的md5值 | | +| package_url | str | 装扮图包的压缩包链接 | | +| skin_mode | str | 皮肤模式 | | +| tail_bg | str | 首页底部图片 | | +| tail_color | str | 首页底部颜色 | | +| tail_color_selected | str | 首页底部被选中时的颜色 | | +| tail_icon_ani | str | 首页底部是否播放动画 | | +| tail_icon_ani_mode | str | 首页底部动画的播放类型 | | +| tail_icon_channel | str | 首页底部“动态”按钮图片 | | +| tail_icon_dynamic | str | 首页底部“发布动态”按钮图片 | | +| tail_icon_main | str | 首页底部“首页”按钮图片 | | +| tail_icon_mode | str | 首页底部图标模式 | | +| tail_icon_myself | str | 首页底部“我的”按钮图片 | | +| tail_icon_pub_btn_bg | str | 首页底部“发布动态”按钮图片 | | +| tail_icon_selected_channel | str | 首页底部“动态”按钮被选中时的图片 | | +| tail_icon_selected_dynamic | str | 首页底部“发布动态”按钮被选中时的图片 | | +| tail_icon_selected_main | str | 首页底部“首页”按钮被选中时的图片 | | +| tail_icon_selected_myself | str | 首页底部“我的”按钮被选中时的图片 | | +| tail_icon_selected_pub_btn_bg | str | 首页底部“发布动态”按钮被选中时的图片 | | +| tail_icon_selected_shop | str | 首页底部“会员购”按钮被选中时的图片 | | +| tail_icon_shop | str | 首页底部“会员购”按钮图片 | | + +`space_bg` 数组中的对象中 `properties` 对象中的额外字段: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|-------------|----------------------| +| image1_landscape | str | 第一张空间海报 | | +| image1_portrait | str | 第一张空间海报(纵向) | | + +**如果是第二张图,则是`image2_xxx`,以此类推。** + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/garb/v2/mall/suit/detail' \ + --data-urlencode 'buvid=xxx(非必须)' \ + --data-urlencode 'csrf=xxx(非必须)' \ + --data-urlencode 'item_id=42193' \ + --data-urlencode 'part=suit(非必须)' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "item_id":42193, + "name":"装扮小姐姐·梦幻冬季", + "group_id":69, + "group_name":"装扮小姐姐·梦幻冬季", + "part_id":6, + "state":"active", + "properties":{ + "desc":"扮扮糖集合啦!装扮小姐姐邀你共度梦幻冬季~", + "fan_desc":"装扮小姐姐·梦幻冬季", + "fan_id":"装扮小姐姐·梦幻冬季", + "fan_item_ids":"42190,42124,42192,42191,42188,42189", + "fan_mid":"647193094", + "fan_no_color":"#3e52eb", + "fan_recommend_desc":"扮扮糖集合啦!装扮小姐姐邀你共度梦幻冬季~", + "fan_recommend_jump_type":"url", + "fan_recommend_jump_value":"https://space.bilibili.com/647193094?spm_id_from=333.337.0.0", + "fan_share_image":"https://i0.hdslb.com/bfs/garb/item/f9ad456fb74fc58896743eb393664e3c7622de0c.jpg", + "gray_rule":"true", + "gray_rule_type":"all", + "image_cover":"https://i0.hdslb.com/bfs/garb/item/14072c2cb4f82c053d85dc92911da37583a17668.jpg", + "image_cover_color":"#dcf0f9", + "is_hide":"false", + "item_id_card":"42123", + "item_id_emoji":"42157", + "item_id_thumbup":"42125", + "open_platform_vip_discount":"true", + "owner_uid":"647193094", + "rank_investor_show":"false", + "realname_auth":"false", + "sale_bp_forever_raw":"5500", + "sale_bp_pm_raw":"800", + "sale_buy_num_limit":"100", + "sale_quantity":"10000", + "sale_quantity_limit":"true", + "sale_region_ip_limit":"全球", + "sale_reserve_switch":"false", + "sale_time_begin":"1670410800", + "sale_type":"pay", + "suit_card_type":"big_img", + "type":"ip" + }, + "current_activity":null, + "next_activity":{ + "type":"open_platform_vip_discount", + "time_limit":true, + "time_left":410175990, + "tag":"大会员平台折扣", + "price_bp_month":640, + "price_bp_forever":4400, + "type_month":"open_platform_vip_discount", + "tag_month":"大会员平台折扣", + "time_limit_month":true, + "time_left_month":410175990 + }, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-65301210, + "sale_time_end":-1735712010, + "sale_surplus":0, + "sale_count_desc":"1万+", + "total_count_desc":"", + "tag":"粉丝套装已售罄", + "jump_link":"", + "sales_mode":0, + "suit_items":{ + "card":[ + { + "item_id":42124, + "name":"装扮小姐姐梦幻冬季粉丝", + "state":"active", + "tab_id":35, + "suit_item_id":42193, + "properties":{ + "gray_rule":"true", + "gray_rule_type":"all", + "hot":"false", + "image":"https://i0.hdslb.com/bfs/garb/item/3bebd46d5ac6eaa1d6c3f65854b184932fb6230b.png", + "image_preview_small":"https://i0.hdslb.com/bfs/garb/item/611fc0d3401623977f580f592747d721de330fc6.png", + "realname_auth":"false", + "sale_type":"other" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":null + }, + { + "item_id":42123, + "name":"装扮小姐姐梦幻冬季", + "state":"active", + "tab_id":35, + "suit_item_id":42193, + "properties":{ + "gray_rule":"true", + "gray_rule_type":"all", + "hot":"false", + "image":"https://i0.hdslb.com/bfs/garb/item/757320776561f6bf881b3c50bd59fc937cea3387.png", + "realname_auth":"false", + "sale_type":"other" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":null + } + ], + "card_bg":[ + { + "item_id":42189, + "name":"装扮小姐姐梦幻冬季", + "state":"active", + "tab_id":44, + "suit_item_id":42193, + "properties":{ + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/38cbcb481923f6a3d7e724a3837324a8ab0f602e.png", + "image_preview_small":"https://i0.hdslb.com/bfs/garb/item/c9621eedabdc728d728158aafab2e271f152561e.png", + "realname_auth":"false", + "sale_type":"suit" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":null + } + ], + "emoji_package":[ + { + "item_id":42157, + "name":"装扮小姐姐梦幻冬季", + "state":"active", + "tab_id":8, + "suit_item_id":42193, + "properties":{ + "addable":"true", + "biz":"dynamic,reply,watch_full", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/0dd53dc27d401cad0a3bfc07d91dba3af3a5d6d0.png", + "is_symbol":"false", + "item_ids":"42158,42159,42160,42161,42162,42163,42164,42165,42166,42167,42168,42169,42170,42171,42172,42173,42174,42175,42176,42177,42178,42179,42180,42181,42182,42183,42184,42185,42186,42187", + "permanent":"false", + "preview":"false", + "realname_auth":"false", + "recently_used":"false", + "recommend":"false", + "ref_mid":"0", + "removable":"true", + "sale_type":"pay", + "setting_pannel_not_show":"false", + "size":"L", + "sortable":"true" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":[ + { + "item_id":42158, + "name":"[装扮小姐姐梦幻冬季_揉脸]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/e47ad8b1c16ebaa780e0574f360c67f4c45e6325.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42159, + "name":"[装扮小姐姐梦幻冬季_啾咪]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/098619d6f2859966157dc0da4d3a24ae7a690781.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42160, + "name":"[装扮小姐姐梦幻冬季_下雪了]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/08a64a396b710f8670096c5f380f2839f973d218.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42161, + "name":"[装扮小姐姐梦幻冬季_圣诞老人]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/e86122e145000e00362d635c6ebe8ac4260de7f6.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42162, + "name":"[装扮小姐姐梦幻冬季_多喝热水]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/59fb78d3801682c94b126abc0fc1f1b7603dee06.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42163, + "name":"[装扮小姐姐梦幻冬季_扔]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/d762bb454bb2f4fc3827167749b3d61597657b3b.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42164, + "name":"[装扮小姐姐梦幻冬季_生气]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/47fc00a0f13ebd61237c4617a1e5485d0647e7f5.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42165, + "name":"[装扮小姐姐梦幻冬季_贴贴]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/3a7580978ee11f033860af2435bcef6fa282ee64.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42166, + "name":"[装扮小姐姐梦幻冬季_没米了]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/55b3660d73951fb394c6f0594c9fdbeca4f39bea.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42167, + "name":"[装扮小姐姐梦幻冬季_冲鸭]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/cb7c2fbc6ab19d3462d44cabf10b87458650bf28.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42168, + "name":"[装扮小姐姐梦幻冬季_累了]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/884f721618392a0efe6686c2c61fddf04c6f2d73.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42169, + "name":"[装扮小姐姐梦幻冬季_斯密马赛]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/1bbe9b564ee17701a22e848287a5f7983fdfcb34.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42170, + "name":"[装扮小姐姐梦幻冬季_告辞]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/264c9ab6a2503013e79eecdb86118f057762bae5.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42171, + "name":"[装扮小姐姐梦幻冬季_吃我一拳]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/2f7b233826fa0d0729619bbf3dc2220b4c534b3f.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42172, + "name":"[装扮小姐姐梦幻冬季_乌拉]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/23dca67aed7565a4f3e21d8d9d5337125b34d399.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42173, + "name":"[装扮小姐姐梦幻冬季_委屈]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/cec0b3ade7249740cee45f98100275fa7cf7320a.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42174, + "name":"[装扮小姐姐梦幻冬季_溜冰]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/3704984c68c867820103795c4b5313fea0c097e9.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42175, + "name":"[装扮小姐姐梦幻冬季_好耶]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/621d4683d492901c814c64ca3c7bb880ae818779.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42176, + "name":"[装扮小姐姐梦幻冬季_硬撑罢了]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/b4d10356d0ac483b29c875518e0c539809468ba9.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42177, + "name":"[装扮小姐姐梦幻冬季_摸鱼]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/da7205f6a8e7213cca2a06e71c819850cae28977.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42178, + "name":"[装扮小姐姐梦幻冬季_注意保暖]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/170df6f81c3f42defbc07192d19de02525b14348.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42179, + "name":"[装扮小姐姐梦幻冬季_抽我]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/45541e4471e57e59b4aa6b7bcc43e800e3cbde85.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42180, + "name":"[装扮小姐姐梦幻冬季_疑问]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/0d07fd66d3888ea55aa98fa8d520a6e759596e2b.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42181, + "name":"[装扮小姐姐梦幻冬季_抱抱]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/44481b886560e9e1300781ad8a1a4d1dfbbfd6fe.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42182, + "name":"[装扮小姐姐梦幻冬季_烤红薯]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/828555bbfa4dd8cadb9fdfa5868d3101c637945b.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42183, + "name":"[装扮小姐姐梦幻冬季_Power!]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/e4744b70edd5a271dcb6f1b1c62fa32dfa92c9fb.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42184, + "name":"[装扮小姐姐梦幻冬季_堆雪人]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/9407cb861173253f1a1206e3bda7497aebfd98ec.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42185, + "name":"[装扮小姐姐梦幻冬季_好的]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/d73bccf93a20c6eedeb81d975eba99ebc048a88e.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42186, + "name":"[装扮小姐姐梦幻冬季_滑雪]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/36af70fea3fc1636de990597c1a929fecba412db.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + }, + { + "item_id":42187, + "name":"[装扮小姐姐梦幻冬季_吃火锅]", + "state":"active", + "tab_id":7, + "suit_item_id":0, + "properties":{ + "associate":"false", + "gray_rule":"true", + "gray_rule_type":"all", + "image":"https://i0.hdslb.com/bfs/garb/item/bc234259d7971bd6255f9c464597285582e7ff82.png", + "is_symbol":"false", + "ref_mid":"0", + "sale_type":"pay" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0 + } + ] + } + ], + "loading":[ + { + "item_id":42191, + "name":"装扮小姐姐梦幻冬季", + "state":"active", + "tab_id":54, + "suit_item_id":42193, + "properties":{ + "gray_rule":"true", + "gray_rule_type":"all", + "image_preview_small":"https://i0.hdslb.com/bfs/garb/item/32377c9cb1167e1e251c467f6a56ca2b59f130b0.png", + "loading_frame_url":"https://i0.hdslb.com/bfs/garb/item/f2121039298817318e9a10ef25cd802ef7a546f0.png", + "loading_url":"https://i0.hdslb.com/bfs/garb/item/e5ba77a4c2d21809e5f2e407e7bf03a7df635a2c.webp", + "realname_auth":"false", + "ver":"1670384406" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":null + } + ], + "play_icon":[ + { + "item_id":42192, + "name":"装扮小姐姐梦幻冬季", + "state":"active", + "tab_id":56, + "suit_item_id":42193, + "properties":{ + "drag_left_png":"https://i0.hdslb.com/bfs/garb/item/933cdf41a554ce65b2bac7cc2af578c065a01ff8.png", + "drag_right_png":"https://i0.hdslb.com/bfs/garb/item/1632ab1d853694d61fe170710b447f6bd9c9152b.png", + "gray_rule":"true", + "gray_rule_type":"all", + "middle_png":"https://i0.hdslb.com/bfs/garb/item/4e1eaa52e65da8e14bce321e7abab9e9a3a28b30.png", + "realname_auth":"false", + "squared_image":"https://i0.hdslb.com/bfs/garb/item/ca4d76d7e8384b18354709ac7e3a422a900f7e07.png", + "static_icon_image":"https://i0.hdslb.com/bfs/garb/item/a98ffc9a8871ded890959c22916f38aba61521fc.png", + "ver":"1670384416" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":null + } + ], + "skin":[ + { + "item_id":42190, + "name":"装扮小姐姐梦幻冬季", + "state":"active", + "tab_id":45, + "suit_item_id":42193, + "properties":{ + "color":"#ffffff", + "color_mode":"dark", + "color_second_page":"#5d85c0", + "gray_rule":"true", + "gray_rule_type":"all", + "head_bg":"https://i0.hdslb.com/bfs/garb/item/6c74dac067a429029befc787572b5b7bc83f50a1.jpg", + "head_myself_mp4_play":"once", + "head_myself_squared_bg":"https://i0.hdslb.com/bfs/garb/item/8cff6c83023c9523669e89fc28e1cd7600f196ff.jpg", + "head_tab_bg":"https://i0.hdslb.com/bfs/garb/item/1fe3d1b486ab50d6ffdf30b29bc063818ecde544.jpg", + "image_cover":"https://i0.hdslb.com/bfs/garb/item/14072c2cb4f82c053d85dc92911da37583a17668.jpg", + "image_preview":"https://i0.hdslb.com/bfs/garb/item/14072c2cb4f82c053d85dc92911da37583a17668.jpg", + "package_md5":"4ed60db32789eb79c3e96dc8d6a23ebb", + "package_url":"https://i0.hdslb.com/bfs/garb/zip/b3c95365b791bc58fd56bba7c14b43377d7af82d.zip", + "realname_auth":"false", + "skin_mode":"normal", + "tail_bg":"https://i0.hdslb.com/bfs/garb/item/fda401903a377d79afd576f9ba921c83091e6943.png", + "tail_color":"#f6f1fd", + "tail_color_selected":"#5af1ff", + "tail_icon_ani":"true", + "tail_icon_ani_mode":"once", + "tail_icon_channel":"https://i0.hdslb.com/bfs/garb/item/504a27e5227f30741e35b5817079974335f13d29.png", + "tail_icon_dynamic":"https://i0.hdslb.com/bfs/garb/item/4e0ef0c9540277694087f0aca8aca86b87dc9331.png", + "tail_icon_main":"https://i0.hdslb.com/bfs/garb/item/2a1a97c098bf0d2374a141d8da7fad1e0d1cee24.png", + "tail_icon_mode":"img", + "tail_icon_myself":"https://i0.hdslb.com/bfs/garb/item/20050ddbc0265828e42f068b74b8f5d947f8b7b8.png", + "tail_icon_pub_btn_bg":"https://i0.hdslb.com/bfs/garb/item/4e0ef0c9540277694087f0aca8aca86b87dc9331.png", + "tail_icon_selected_channel":"https://i0.hdslb.com/bfs/garb/item/d14d87016fa2e995917f40148239bc1fa5961ec5.png", + "tail_icon_selected_dynamic":"https://i0.hdslb.com/bfs/garb/item/1b0fb973534600990ad48058eff901643fe7e9fc.png", + "tail_icon_selected_main":"https://i0.hdslb.com/bfs/garb/item/ce1272d036f196ea90e08a433d0003246822aabf.png", + "tail_icon_selected_myself":"https://i0.hdslb.com/bfs/garb/item/a7bbb67de4f22c105529e57b2a1b27737fb6d9df.png", + "tail_icon_selected_pub_btn_bg":"https://i0.hdslb.com/bfs/garb/item/1b0fb973534600990ad48058eff901643fe7e9fc.png", + "tail_icon_selected_shop":"https://i0.hdslb.com/bfs/garb/item/e1622e9643b6ec2186e9f88ee6251334a842e3d0.png", + "tail_icon_shop":"https://i0.hdslb.com/bfs/garb/item/a2eaa41ae4aba160b8b8a9cdc7bc98fd47f2720d.png", + "ver":"1670384396" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":null + } + ], + "space_bg":[ + { + "item_id":42188, + "name":"装扮小姐姐梦幻冬季", + "state":"active", + "tab_id":37, + "suit_item_id":42193, + "properties":{ + "fan_no_color":"#3e52eb", + "fan_no_image":"https://i0.hdslb.com/bfs/garb/item/d4888365d80401c72fc34bcc1697c36eb2477a97.png", + "gray_rule":"true", + "gray_rule_type":"all", + "image1_landscape":"https://i0.hdslb.com/bfs/garb/item/971519888f96d2e3cd88e55cb2360ac087f1dde7.png", + "image1_portrait":"https://i0.hdslb.com/bfs/garb/item/78fb9e4a63a17854c7df1e3b1f5f9f48df723e2c.jpg", + "image2_landscape":"https://i0.hdslb.com/bfs/garb/item/90a99f2615ba34596b05cd2a268490cf0072f1e7.png", + "image2_portrait":"https://i0.hdslb.com/bfs/garb/item/11d1a96097ebe357c47277f6c0397a0323c316a5.jpg", + "image3_landscape":"https://i0.hdslb.com/bfs/garb/item/3d2e029d2f6d8c3a425377af5be47a4c8bf2d102.jpg", + "image3_portrait":"https://i0.hdslb.com/bfs/garb/item/3d1495d80211c07ab6773f7aa1d6cb198940907d.jpg", + "realname_auth":"false" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":null + } + ], + "thumbup":[ + { + "item_id":42125, + "name":"装扮小姐姐梦幻冬季", + "state":"active", + "tab_id":36, + "suit_item_id":42193, + "properties":{ + "gray_rule":"true", + "gray_rule_type":"all", + "image_ani":"https://i0.hdslb.com/bfs/garb/item/6a2ae0534879d765087c284c745b3e88340a7371.bin", + "image_ani_cut":"https://i0.hdslb.com/bfs/garb/item/6a2ae0534879d765087c284c745b3e88340a7371.bin", + "image_preview":"https://i0.hdslb.com/bfs/garb/item/0cbe14efc8d5397bb6edbd4adae5dcf0ce307c15.png", + "realname_auth":"false" + }, + "current_activity":null, + "next_activity":null, + "current_sources":null, + "finish_sources":null, + "sale_left_time":-1735712010, + "sale_time_end":-1735712010, + "sale_surplus":0, + "items":null + } + ] + }, + "fan_user":{ + "mid":647193094, + "nickname":"装扮小姐姐", + "avatar":"https://i1.hdslb.com/bfs/baselabs/523830e526a81001e4c3dcec9f317623a4f1dd2e.png" + }, + "unlock_items":null, + "activity_entrance":{ + "id":0, + "item_id":0, + "title":"", + "image_cover":"", + "jump_link":"" + } + } +} +``` + +</details> + +## 主题装扮列表API + +> https://api.bilibili.com/x/garb/v2/mall/partition/item/list + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|---------|-----|---------------------------------------------------------------------------| +| csrf | str | 用户csrf | 非必要 | | +| group_id | num | 分组id | 非必要 | 建议加上,不填的时候为0,一般配合`part_id`使用。<br />`0`: 装扮<br />`22`: 头像挂件<br />`5`: 动态卡片 | +| location | str | | 非必要 | **尚不明确** | +| part_id | num | 分类id | 必要 | 一般配合`group_id`使用。<br />`6`: 装扮<br />`1`: 头像挂件<br />`2`: 动态卡片<br /> | +| pn | num | 页码 | 非必要 | 不填为1 | +| ps | num | 每页的数据数量 | 非必要 | 不填为20,默认值和最大值也都为20 | +| sort_type | num | 排序方式 | 非必要 | `0`: 默认排序<br />`1`: 按销量排序<br />`2`: 按最新上架时间排序 | +| user_info | str | 用户信息 | 非必要 | 为json对象,其中包含`buvid`和`buvid3`两个字段。 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------------| +| code | num | 返回值 | `0`:成功<br />`-400`:错误 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-------|------|--------------| +| page | obj | 分页信息 | 包含装扮总数、页码和每页的数据数量 | +| list | array | 装扮列表 | | +| offset_info | str | 补偿信息 | **作用尚不明确** | +| group | str | 分组 | **作用尚不明确** | + +`list`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-----|-----|---------------| +| item_id | num | 装扮id | 如果为0,则该装扮为收藏集 | +| name | str | 装扮名称 | | +| group_id | num | 分组id | | +| group_name | str | 分组名称 | | +| part_id | num | 分类id | | +| state | str | 状态 | | +| properties | obj | 装扮具体属性 | | +| current_activity | str | 当前活动 | | +| next_activity | obj | 下一个活动 | | +| current_sources | str | | **作用尚不明确** | +| finish_sources | str | | **作用尚不明确** | +| sale_left_time | num | | **作用尚不明确** | +| sale_time_end | num | | **作用尚不明确** | +| sale_surplus | num | 商品剩余数量 | | +| sale_count_desc | str | 促销销量说明 | | +| total_count_desc | str | 总销量说明 | | +| tag | str | 标签 | | +| jump_link | str | 跳转链接 | | +| sales_mode | num | 促销模式 | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/garb/v2/mall/partition/item/list' \ + --data-urlencode 'group_id=0' \ + --data-urlencode 'part_id=6' \ + --data-urlencode 'pn=1' \ + --data-urlencode 'ps=20' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "page": { + "total": 0, + "pn": 1, + "ps": 10 + }, + "list": [ + { + "item_id": 0, + "name": "MyGO!!!!!收藏集", + "group_id": 47, + "group_name": "MyGO!!!!!收藏集", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "59811", + "dlc_act_id": "102857", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "102858", + "dlc_lottery_sale_quantity": "1418368", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/c34fdba0b2a2aa31ff22bda77e217ca9c7e37344.jpg", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "100万+", + "total_count_desc": "已售100万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=102857&hybrid_set_header=2&lottery_id=102858", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "饿殍:明末千里行", + "group_id": 49, + "group_name": "饿殍:明末千里行", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "21825", + "dlc_act_id": "102794", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "102886", + "dlc_lottery_sale_quantity": "520677", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/838639725c0c37f6ccc5e85b2a1ed6ff895baca2.jpg", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "52万+", + "total_count_desc": "已售52万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=102794&hybrid_set_header=2&lottery_id=102886", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2024拜年纪", + "group_id": 70, + "group_name": "2024拜年纪", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "30103", + "dlc_act_id": "279", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "256", + "dlc_lottery_sale_quantity": "332544", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "http://i0.hdslb.com/bfs/archive/f96a8cf6866ccef8f54de4773acf0cb07b915ac6.png", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "33万+", + "total_count_desc": "已售33万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=279&hybrid_set_header=2&lottery_id=256", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2233·十五周年站庆", + "group_id": 70, + "group_name": "2233·十五周年站庆", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "38339", + "dlc_act_id": "293", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "302", + "dlc_lottery_sale_quantity": "63336", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "http://i0.hdslb.com/bfs/archive/633174e11f3587166e31b37cc87feb184808408d.jpg", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "6万+", + "total_count_desc": "已售6万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=293&hybrid_set_header=2&lottery_id=302", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "奈姬niki收藏集", + "group_id": 47, + "group_name": "奈姬niki收藏集", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "24158", + "dlc_act_id": "104783", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "104784", + "dlc_lottery_sale_quantity": "120787", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/6a2395d9be428ac09766deafbd8ead49503216ea.jpg", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "12万+", + "total_count_desc": "已售12万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=104783&hybrid_set_header=2&lottery_id=104784", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "黎歌Neeko收藏集-幻夏恋歌", + "group_id": 47, + "group_name": "黎歌Neeko收藏集-幻夏恋歌", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "22125", + "dlc_act_id": "100858", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "102305", + "dlc_lottery_sale_quantity": "528139", + "dlc_lottery_type": "2", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/ff57aba427ce4dd3608660233ba1d3ec518ff6aa.png", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "52万+", + "total_count_desc": "已售52万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=100858&hybrid_set_header=2&lottery_id=102305", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "2024明日方舟音律联觉", + "group_id": 49, + "group_name": "2024明日方舟音律联觉", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "59594", + "dlc_act_id": "102942", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "102943", + "dlc_lottery_sale_quantity": "1126215", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/c59397dff6e6618058b7d943aa9614b0d74a9c17.jpg", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "100万+", + "total_count_desc": "已售100万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=102942&hybrid_set_header=2&lottery_id=102943", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "BLG·2023LPL出征收藏集", + "group_id": 49, + "group_name": "BLG·2023LPL出征收藏集", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "18878", + "dlc_act_id": "228", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "157", + "dlc_lottery_sale_quantity": "14537", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "http://i0.hdslb.com/bfs/archive/dc0af06ae0e5018cc24ecab1be76742ff1ad9fc2.png", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "1万+", + "total_count_desc": "已售1万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=228&hybrid_set_header=2&lottery_id=157", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "幻星乐园", + "group_id": 107, + "group_name": "幻星乐园", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "22563", + "dlc_act_id": "103874", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "103875", + "dlc_lottery_sale_quantity": "319104", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/0f8eb52dfb0d3c7f89fb4d33749e4bf62544112e.jpg", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "31万+", + "total_count_desc": "已售31万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=103874&hybrid_set_header=2&lottery_id=103875", + "sales_mode": 0 + }, + { + "item_id": 0, + "name": "玉之けだま_毛玉收藏集", + "group_id": 46, + "group_name": "玉之けだま_毛玉收藏集", + "part_id": 0, + "state": "active", + "properties": { + "book_amount": "30723", + "dlc_act_id": "104459", + "dlc_act_status": "2", + "dlc_is_free": "0", + "dlc_lottery_id": "104460", + "dlc_lottery_sale_quantity": "267724", + "dlc_lottery_type": "1", + "dlc_sale_end_time": "0", + "dlc_sale_mode": "0", + "dlc_sale_start_time": "0", + "dlc_surplus_stock": "0", + "image_cover": "https://i0.hdslb.com/bfs/garb/565bf9465865efdd28b07c40f8352e43091ff4da.png", + "sale_bp_forever_raw": "990", + "type": "dlc_act" + }, + "current_activity": null, + "next_activity": null, + "current_sources": null, + "finish_sources": null, + "sale_left_time": -1735808611, + "sale_time_end": -1735808611, + "sale_surplus": 0, + "sale_count_desc": "26万+", + "total_count_desc": "已售26万+份", + "tag": "", + "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=104459&hybrid_set_header=2&lottery_id=104460", + "sales_mode": 0 + } + ], + "offset_info": "pool::10", + "group": "garb_feed_recommend_rule_ab_key:1" + } +} +``` + +</details> + +## 收藏集列表API + +> https://api.bilibili.com/x/vas/dlc_act/act/list + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-------|------|--------|-----|---------------------------| +| csrf | str | 用户csrf | 非必要 | | +| scene | num | | 非必要 | **作用尚不明确,默认为1,不填则获取到空数据** | +| site | site | 位置 | 非必要 | 不填为20,但建议填上,会影响到后面的json数据 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|------|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | `0`:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | +| is_more | bool | 是否还有足够的收藏集 | 如果为true,则说明如果继续增加url参数中site的值,都还能从当前的位置往后列出20份收藏集;<br />如果为false,则说明如果继续增加url参数中site的值,将无法继续从当前位置列出20份收藏集(最多也是20份),<br />这表示页面已经拉到底了,可用于判断是否已经获取完了所有收藏集的数据。 | +| site | num | 位置 | **它的值为url参数中site的值的基础上再加20**,比如url参数中的site值为0,则此site的值为20,<br />表示这页的收藏集列表是从序号为0的收藏集开始列出,直到列出往后的20份。 | + +`data` 对象中的 `list` 数组对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-----|---------|---------------| +| act_id | num | 收藏集id | | +| act_name | num | 收藏集名称 | | +| act_pic | num | 收藏集封面图片 | | +| sale_price | num | 收藏集价格 | 以0.01B币为单位 | +| act_desc | num | 收藏集说明 | | +| tag | num | 标签 | | +| lottery_id | num | 抽奖id | | +| lottery_type | num | 抽奖类型 | | +| act_link | num | 收藏集链接 | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/vas/dlc_act/act/list' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'scene=1' \ + --data-urlencode 'site=0' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "act_id": 105432, + "act_name": "挚友的旅途·羽毛收藏集", + "act_pic": "https://i0.hdslb.com/bfs/garb/b6a7314b6ad321b638c3d2270903c02c0d2d7b20.png", + "sale_price": 9900, + "act_desc": "已售份数6千+", + "tag": "新奖励", + "lottery_id": 105433, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105432&hybrid_set_header=2&lottery_id=105433" + }, + { + "act_id": 102054, + "act_name": "兰音的衣柜奇缘-兰音·拾光幻梦", + "act_pic": "https://i0.hdslb.com/bfs/garb/b7e5465ff80a3260cdc1c1255853730bfc6bd818.jpg", + "sale_price": 9900, + "act_desc": "已售份数3万+", + "tag": "新卡池", + "lottery_id": 105434, + "lottery_type": 2, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=102054&hybrid_set_header=2&lottery_id=105434" + }, + { + "act_id": 102550, + "act_name": "洛天依·收藏集-戏游九州", + "act_pic": "https://i0.hdslb.com/bfs/garb/74706a52bc08764828f9251439055b18646e98b3.png", + "sale_price": 9900, + "act_desc": "已售份数6万+", + "tag": "新奖励", + "lottery_id": 105269, + "lottery_type": 2, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=102550&hybrid_set_header=2&lottery_id=105269" + }, + { + "act_id": 105006, + "act_name": "村村宇宙·小猫女仆降临", + "act_pic": "https://i0.hdslb.com/bfs/garb/cfccce3c1520b828f02d7b4e009cc7d965133025.jpg", + "sale_price": 9900, + "act_desc": "已售份数1万+", + "tag": "新奖励", + "lottery_id": 105167, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105006&hybrid_set_header=2&lottery_id=105167" + }, + { + "act_id": 105435, + "act_name": "东方收藏集·浮生若梦", + "act_pic": "https://i0.hdslb.com/bfs/garb/27156281f59f774198f38b9a4a64d9a74efb9290.png", + "sale_price": 9900, + "act_desc": "已售份数6万+", + "tag": "新奖励", + "lottery_id": 105438, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105435&hybrid_set_header=2&lottery_id=105438" + }, + { + "act_id": 105407, + "act_name": "紫罗兰永恒花园收藏集", + "act_pic": "https://i0.hdslb.com/bfs/garb/9e54ae06dfd32625071153adc702eb7554b45af8.jpg", + "sale_price": 9900, + "act_desc": "已售份数1万+", + "tag": "新奖励", + "lottery_id": 105408, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105407&hybrid_set_header=2&lottery_id=105408" + }, + { + "act_id": 105461, + "act_name": "Team Spirit 冠军收藏集", + "act_pic": "https://i0.hdslb.com/bfs/garb/0a68dac1e2d37767c26930ad4d3121e2b7c56c44.jpg", + "sale_price": 9900, + "act_desc": "已售份数9千+", + "tag": "新奖励", + "lottery_id": 105462, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105461&hybrid_set_header=2&lottery_id=105462" + }, + { + "act_id": 105326, + "act_name": "小神奈殿下收藏集", + "act_pic": "https://i0.hdslb.com/bfs/garb/ed3b6e516ef05cf595cf9d24203e16205eea55e5.png", + "sale_price": 9900, + "act_desc": "已售份数1万+", + "tag": "新奖励", + "lottery_id": 105327, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105326&hybrid_set_header=2&lottery_id=105327" + }, + { + "act_id": 105444, + "act_name": "yumekiii收藏集", + "act_pic": "https://i0.hdslb.com/bfs/garb/afc2dd57c962244d8021b92752038714b7b3341e.png", + "sale_price": 9900, + "act_desc": "已售份数3千+", + "tag": "新奖励", + "lottery_id": 105445, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105444&hybrid_set_header=2&lottery_id=105445" + }, + { + "act_id": 101545, + "act_name": "Sheya收藏集-月食梦-镜海之梦", + "act_pic": "https://i0.hdslb.com/bfs/garb/262e59d60698d6797488f081826e172e6689c339.jpg", + "sale_price": 9900, + "act_desc": "已售份数3千+", + "tag": "新卡池", + "lottery_id": 105451, + "lottery_type": 2, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=101545&hybrid_set_header=2&lottery_id=105451" + }, + { + "act_id": 105388, + "act_name": "LOOPY可爱计划", + "act_pic": "https://i0.hdslb.com/bfs/garb/f24711f2f35cb9db7919bb888af3fe23f5c588ad.jpg", + "sale_price": 9900, + "act_desc": "", + "tag": "限时卡池", + "lottery_id": 105411, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105388&hybrid_set_header=2&lottery_id=105411" + }, + { + "act_id": 105413, + "act_name": "范式起源", + "act_pic": "https://i0.hdslb.com/bfs/garb/784d6073f5cc3110117449da018845443b9c484d.png", + "sale_price": 9900, + "act_desc": "已售份数1万+", + "tag": "", + "lottery_id": 105414, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105413&hybrid_set_header=2&lottery_id=105414" + }, + { + "act_id": 105409, + "act_name": "VirtuaReal碧波澜影", + "act_pic": "https://i0.hdslb.com/bfs/garb/63f57f0014e47d1302005a5c6ab0164e925c69ef.png", + "sale_price": 9900, + "act_desc": "已售份数3万+", + "tag": "", + "lottery_id": 105410, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105409&hybrid_set_header=2&lottery_id=105410" + }, + { + "act_id": 101388, + "act_name": "寺田堤拉 TERADA TERA-白橙绘锦", + "act_pic": "https://i0.hdslb.com/bfs/garb/8ec594c0a11706846f5394eaac78fd97065000b1.png", + "sale_price": 9900, + "act_desc": "已售份数5千+", + "tag": "", + "lottery_id": 104985, + "lottery_type": 2, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=101388&hybrid_set_header=2&lottery_id=104985" + }, + { + "act_id": 104978, + "act_name": "少女乐队的呐喊", + "act_pic": "https://i0.hdslb.com/bfs/garb/cdf0c00bd070ee77951e695355b3394be53b8288.jpg", + "sale_price": 9900, + "act_desc": "已售份数39万+", + "tag": "", + "lottery_id": 105056, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=104978&hybrid_set_header=2&lottery_id=105056" + }, + { + "act_id": 104174, + "act_name": "顾晓Khaos收藏集", + "act_pic": "https://i0.hdslb.com/bfs/garb/52152a236bcd4e2829012eb8cc32d1e2f24490c9.png", + "sale_price": 9900, + "act_desc": "已售份数8千+", + "tag": "", + "lottery_id": 104181, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=104174&hybrid_set_header=2&lottery_id=104181" + }, + { + "act_id": 105151, + "act_name": "晴云-醒时晴空", + "act_pic": "https://i0.hdslb.com/bfs/garb/1320dd55c13a11dfc7c714a75b56159d73c2feae.jpg", + "sale_price": 9900, + "act_desc": "已售份数3千+", + "tag": "", + "lottery_id": 105168, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=105151&hybrid_set_header=2&lottery_id=105168" + }, + { + "act_id": 103966, + "act_name": "礼拜六Liu收藏集", + "act_pic": "https://i0.hdslb.com/bfs/garb/9c5b03a79074b1354ee4277d77c108441ac8ff35.jpg", + "sale_price": 9900, + "act_desc": "已售份数1万+", + "tag": "", + "lottery_id": 103967, + "lottery_type": 1, + "act_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live&act_id=103966&hybrid_set_header=2&lottery_id=103967" + } + ], + "is_more": true, + "site": 20 + } +} +``` + +</details> \ No newline at end of file diff --git a/docs/garb/skin.md b/docs/garb/skin.md new file mode 100644 index 0000000..c91d5d5 --- /dev/null +++ b/docs/garb/skin.md @@ -0,0 +1,267 @@ +# APP主题 + +## 获取主题及加载动画 + +> https://app.bilibili.com/x/resource/show/skin + +*请求方式:GET* + +鉴权方式:appkey + +认证方式:仅可APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| build | num | 版本 | APP方式必要 | 可为`6082000` | +| ts | num | 当前时间戳 | APP方式必要 | 可为`0` | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-3:API校验密匙错误<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ------------ | ------------ | +| user_equip | obj | 个性主题信息 | 有效时有此项 | +| skin_colors | array | 主题颜色列表 | | +| load_equip | obj | 加载动画信息 | 有效时有此项 | + +`data`中的`user_equip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | --------------- | ------ | +| id | num | 装扮id | | +| name | str | 装扮名称 | | +| preview | str | 装扮封面url | | +| ver | num | 装扮版本 | 时间戳 | +| package_url | str | 装扮包url | | +| package_md5 | str | 装扮包md5校验值 | | +| data | obj | 装扮配置 | | + +`user_equip`中的`data`对象: + +| 字段 | 类型 | 内容 | 必要性 | 备注 | +| ------------------- | ---- | ----------------- | -------- | --------------------------- | +| color_mode | str | 颜色模式 | 必要 | light:亮色<br />dark:暗色 | +| color | str | 前景色? | 必要 | 颜色<br />1. 使用十六进制颜色值<br />2. 颜色值的大小写不限,下同<br />3. 例:#ffffff | +| color_second_page | str | 背景色? | 必要 | 颜色 | +| tail_color | str | 底边栏颜色 | 必要 | 颜色 | +| tail_color_selected | str | 底边栏颜色(选择时) | 必要 | 颜色 | +| tail_icon_ani | bool | 有无底边栏动画 | 必要 | false:无<br />true:有 | +| tail_icon_ani_mode | str | 底边栏动画循环播放 | 必要 | once:播放一次 | +| head_myself_mp4_play| str | 我的页面头图(视频)循环 | 必要 | once:播放一次<br />loop:循环播放 | +| tail_icon_mode | str | 底栏改图标或改颜色 | 必要 | img:图标<br />color:颜色 | +| side_bg_color | str | 侧边栏颜色 | 非必要 | 颜色<br />5.x 版本客户端的侧边栏 | +| side_line_color | str | 侧边栏线条颜色? | 非必要 | 颜色<br />5.x 版本客户端的侧边栏 | +| tail_icon_color | str | 底栏图标颜色 | 可能必要 | 颜色<br />若 tail_icon_mode = "color",则必要 | +| tail_icon_color_dark| str | 底栏图标颜色(夜间模式) | 可能必要 | 颜色<br />若 tail_icon_mode = "color",则必要 | +| tail_icon_color_selected| str | 底栏图标颜色(选择时) | 可能必要 | 颜色<br />若 tail_icon_mode = "color",则必要 | +| tail_icon_color_selected_dark| str | 底栏图标颜色(选择时)(夜间模式) | 可能必要 | 颜色<br />若 tail_icon_mode = "color",则必要 | + +`skin_colors`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 主题颜色1 | | +| n | obj | 主题颜色(n+1) | | +| …… | obj | …… | …… | + +`skin_colors`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ------------------------------- | +| id | num | 颜色id | | +| name | str | 颜色名称 | | +| is_free | bool | 是否免费 | false:收费<br />true:免费 | +| price | num | 价格 | 单位为硬币 | +| is_bought | bool | 是否已购买 | false:未购买<br />true:已购买 | +| status | num | 状态 | 1:自动续费<br />4:已退订 | +| buy_time | num | 购买时间 | 毫秒时间戳 | +| due_time | num | 到期时间 | 毫秒时间戳 | +| color_name | str | 颜色类型名称 | | +| is_overdue | bool | 是否已到期 | false:未到期<br />true:已到期 | + +`data`中的`load_equip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | --------------- | ------ | +| id | num | 装扮id | | +| name | str | 装扮名称 | | +| ver | num | 装扮版本 | 时间戳 | +| loading_url | str | 加载动画图标url | | + +**示例:** + +```shell +curl -G 'https://app.bilibili.com/x/resource/show/skin' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'appkey=1d8b6e7d45233436' \ +--data-urlencode 'build=6082000' \ +--data-urlencode 'ts=0' \ +--data-urlencode 'sign=ea212fea5b00a6278ea6d9938b4c500e' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "user_equip": { + "id": 2529, + "name": "初音未来-日版", + "preview": "http://i0.hdslb.com/bfs/garb/item/2fa16380b31b3cee6c889d645f2699de8e9d9faf.jpg", + "ver": 1598600025, + "package_url": "http://i0.hdslb.com/bfs/garb/zip/9c393edea0c7b7b59685a20cd655363ef573a325.zip", + "package_md5": "7b6d20d998ad543c6a275948a6a1a5fe", + "data": { + "color_mode": "light", + "color": "#212121", + "color_second_page": "#fff2d2", + "side_bg_color": "#ffe7ae", + "tail_color": "#996c00", + "tail_color_selected": "#0d6872", + "tail_icon_ani": true, + "tail_icon_ani_mode": "once" + } + }, + "skin_colors": [ + { + "id": 2, + "name": "少女粉", + "is_free": true, + "color_name": "pink" + }, + { + "id": 1, + "name": "夜间模式", + "is_free": true, + "color_name": "black" + }, + { + "id": 3, + "name": "姨妈红", + "price": 5, + "color_name": "red" + }, + { + "id": 4, + "name": "咸蛋黄", + "price": 5, + "color_name": "yellow" + }, + { + "id": 5, + "name": "早苗绿", + "price": 5, + "status": 4, + "buy_time": 1599219782000, + "due_time": 1601811782000, + "color_name": "green" + }, + { + "id": 6, + "name": "胖次蓝", + "price": 5, + "color_name": "blue" + }, + { + "id": 7, + "name": "基佬紫", + "price": 5, + "color_name": "purple" + } + ], + "load_equip": { + "id": 2531, + "name": "初音未来13周年", + "ver": 1598602035, + "loading_url": "http://i0.hdslb.com/bfs/garb/item/9b12e8b5cc16a4c2e71e91c43796f09d5e132847.webp" + } + } +} +``` + +</details> + +## 主题包结构 + +主题包为app端付费主题(套装)的整合包,以zip格式通过url分发 + +包内的图片文件为app对应的资源替换,替换时可随意修改后缀 jpg 或 png + +必要性:head_bg 及 head_tab_bg 为必要,其他非必要 + +| 文件名 | 说明 | +| --------------------------------- | -------------------------- | +| head_bg.jpg | 首页顶部栏背景 | +| head_tab_bg.jpg | 顶部栏背景 | +| head_myself_bg.jpg | 【我的】页面头图(小) | +| head_myself_squared_bg.jpg | 【我的】页面头图(大) | +| head_myself_mp4_bg.mp4 | 【我的】页面头图(视频)<br />格式参考:后缀必须 mp4、分辨率 1242 x 1074、60 FPS、去掉音轨(音频) | +| side_bg.jpg | 侧边栏背景 | +| side_bg_bottom.jpg | 侧边栏底部背景 | +| tail_bg.png | 底部栏背景 | +| tail_icon_main.png | 【首页】按钮 | +| tail_icon_channel.png | 【频道】按钮 | +| tail_icon_dynamic.png | 【动态】按钮 | +| tail_icon_shop.png | 【会员购】按钮 | +| tail_icon_myself.png | 【我的】按钮 | +| tail_icon_pub_btn_bg.png | 【发布】按钮 | +| tail_icon_selected_main.png | 【首页】按钮(选中状态) | +| tail_icon_selected_channel.png | 【频道】按钮(选中状态) | +| tail_icon_selected_dynamic.png | 【动态】按钮(选中状态) | +| tail_icon_selected_shop.png | 【会员购】按钮(选中状态) | +| tail_icon_selected_myself.png | 【我的】按钮(选中状态) | +| tail_icon_selected_pub_btn_bg.png | 【发布】按钮(选中状态) | + + +以`id=2529(初音未来-日版)`的资源为例 + +```shell +wget https://i0.hdslb.com/bfs/garb/zip/9c393edea0c7b7b59685a20cd655363ef573a325.zip +unzip -l 9c393edea0c7b7b59685a20cd655363ef573a325.zip +``` + +返回为 + +``` +Archive: 9c393edea0c7b7b59685a20cd655363ef573a325.zip + Length Date Time Name +--------- ---------- ----- ---- + 22995 1980-00-00 00:00 tail_icon_selected_myself.png + 18444 1980-00-00 00:00 head_bg.jpg + 3061 1980-00-00 00:00 head_tab_bg.jpg + 188898 1980-00-00 00:00 side_bg.jpg + 2842 1980-00-00 00:00 side_bg_bottom.jpg + 203134 1980-00-00 00:00 tail_bg.png + 27539 1980-00-00 00:00 tail_icon_main.png + 25632 1980-00-00 00:00 tail_icon_selected_main.png + 27415 1980-00-00 00:00 tail_icon_selected_channel.png + 191706 1980-00-00 00:00 head_myself_squared_bg.jpg + 27919 1980-00-00 00:00 tail_icon_channel.png + 27262 1980-00-00 00:00 tail_icon_selected_dynamic.png + 147738 1980-00-00 00:00 head_myself_bg.jpg + 28182 1980-00-00 00:00 tail_icon_dynamic.png + 25878 1980-00-00 00:00 tail_icon_shop.png + 26487 1980-00-00 00:00 tail_icon_selected_shop.png + 21831 1980-00-00 00:00 tail_icon_myself.png +--------- ------- + 1016963 17 files +``` + diff --git a/docs/historytoview/history.md b/docs/historytoview/history.md new file mode 100644 index 0000000..bf49a71 --- /dev/null +++ b/docs/historytoview/history.md @@ -0,0 +1,845 @@ +# 历史记录 + +## 获取历史记录列表_web端 + +> https://api.bilibili.com/x/web-interface/history/cursor + +*请求方式:GET* + +认证方式:Cookie (SESSDATA) + +注:`max`、`business`、`view_at`参数用于历史记录列表的 IFS (无限滚动),其用法类似链表的 next 指针 + +本接口也可以返回已失效稿件的信息 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| max | num | 历史记录截止目标 id | 非必要 | 默认为 0<br />稿件:稿件 avid<br />剧集(番剧 / 影视):剧集 ssid<br />直播:直播间 id<br />文集:文集 rlid<br />文章:文章 cvid | +| business | str | 历史记录截止目标业务类型 | 非必要 | 默认为空<br />archive:稿件<br />pgc:剧集(番剧 / 影视)<br />live:直播<br />article-list:文集<br />article:文章 | +| view_at | num | 历史记录截止时间 | 非必要 | 时间戳<br />默认为 0<br />0 为当前时间 | +| type | str | 历史记录分类筛选 | 非必要 | all:全部类型(默认)<br />archive:稿件<br />live:直播<br />article:文章 | +| ps | num | 每页项数 | 非必要 | 默认为 20,最大 30 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | ------------ | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | array | 历史记录列表 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ---------------- | ---- | +| cursor | obj | 历史记录页面信息 | | +| tab | array | 历史记录筛选类型 | | +| list | array | 分段历史记录列表 | | + +`data`中的`cursor`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------------- | -------------- | +| max | num | 最后一项目标 id | **见请求参数** | +| view_at | num | 最后一项时间节点 | 时间戳 | +| business | str | 最后一项业务类型 | **见请求参数** | +| ps | num | 每页项数 | | + +`data`中的`tab`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------ | ---- | +| 0 | obj | 历史记录筛选类型 1 | | +| 1 | obj | 历史记录筛选类型 2 | | +| 2 | obj | 历史记录筛选类型 3 | | + +`tab`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ---- | +| type | str | 类型 | | +| name | str | 类型名 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---------------- | +| 0 | obj | 历史记录 1 | | +| n | obj | 历史记录 (n+1) | 按照查看顺序排列 | +| …… | obj | | | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ------------------------------- | ------------------------ | ---------------------------------------- | +| title | str | 条目标题 | | +| long_title | str | 条目副标题 | | +| cover | str | 条目封面图 url | 用于专栏以外的条目 | +| covers | 有效时:array<br />无效时:null | 条目封面图组 | 仅用于专栏 | +| uri | str | 重定向 url | 仅用于剧集和直播 | +| history | obj | 条目详细信息 | | +| videos | num | 视频分 P 数目 | 仅用于稿件视频 | +| author_name | str | UP 主昵称 | | +| author_face | str | UP 主头像 url | | +| author_mid | num | UP 主 mid | | +| view_at | num | 查看时间 | 时间戳 | +| progress | num | 视频观看进度 | 单位为秒<br />用于稿件视频或剧集 | +| badge | str | 角标文案 | 稿件视频 / 剧集 / 笔记 | +| show_title | str | 分 P 标题 | 用于稿件视频或剧集 | +| duration | num | 视频总时长 | 用于稿件视频或剧集 | +| current | str | (?) | | +| total | num | 总计分集数 | 仅用于剧集 | +| new_desc | str | 最新一话 / 最新一 P 标识 | 用于稿件视频或剧集 | +| is_finish | num | 是否已完结 | 仅用于剧集<br />0:未完结<br />1:已完结 | +| is_fav | num | 是否收藏 | 0:未收藏<br />1:已收藏 | +| kid | num | 条目目标 id | **详细内容见参数** | +| tag_name | str | 子分区名 | 用于稿件视频和直播 | +| live_status | num | 直播状态 | 仅用于直播<br />0:未开播<br />1:已开播 | + +`list`数组中的对象中的`covers`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | str | 封面图片 1 | | +| n | str | 封面图片 (n+1) | | +| …… | str | …… | | + +`list`数组中的对象中的`history`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | --------------------- | ------------------------------------------------------------ | +| oid | num | 目标id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):稿件avid<br />直播(当`business=live`时):直播间id<br />文章(当`business=article`时):文章cvid<br />文集(当`business=article-list`时):文集rlid | +| epid | num | 剧集epid | 仅用于剧集 | +| bvid | str | 稿件bvid | 仅用于稿件视频 | +| page | num | 观看到的视频分P数 | 仅用于稿件视频 | +| cid | num | 观看到的对象id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):视频cid<br />文集(当`business=article-list`时):文章cvid | +| part | str | 观看到的视频分 P 标题 | 仅用于稿件视频 | +| business | str | 业务类型 | **见请求参数** | +| dt | num | 记录查看的平台代码 | 1 3 5 7:手机端<br />2:web端<br />4 6:pad端<br />9: 智能音箱/游戏机33:TV端<br />0:其他 | + +**示例:** + +获取当前时间截止的5条历史记录 + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/history/cursor' \ +--data-urlencode 'ps=5' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "cursor": { + "max": 26193, + "view_at": 1592985807, + "business": "pgc", + "ps": 5 + }, + "tab": [ + { + "type": "archive", + "name": "视频" + }, + { + "type": "live", + "name": "直播" + }, + { + "type": "article", + "name": "专栏" + } + ], + "list": [ + { + "title": "韩国漫画如何出海掘金?一年出口额2.8亿元", + "long_title": "", + "cover": "", + "covers": [ + "https://i0.hdslb.com/bfs/article/b170c6fd7429ae205d6cb935e1d431710d82609d.jpg" + ], + "uri": "", + "history": { + "oid": 6470274, + "epid": 0, + "bvid": "", + "page": 0, + "cid": 0, + "part": "", + "business": "article", + "dt": 2 + }, + "videos": 0, + "author_name": "三文娱", + "author_face": "http://i1.hdslb.com/bfs/face/98566839756a8e3de6e183109984b032de6ff2d9.jpg", + "author_mid": 34772409, + "view_at": 1593000539, + "progress": 0, + "badge": "专栏", + "show_title": "", + "duration": 0, + "current": "", + "total": 0, + "new_desc": "", + "is_finish": 0, + "is_fav": 0, + "kid": 6470274, + "tag_name": "", + "live_status": 0 + }, + { + "title": "从国际空间站俯瞰地球,静谧蓝星守护者", + "long_title": "", + "cover": "http://i0.hdslb.com/bfs/live/new_room_cover/f07d8a0c7c5655f81cf1586903a121f2680cf3bc.jpg", + "covers": null, + "uri": "https://live.bilibili.com/14047", + "history": { + "oid": 14047, + "epid": 0, + "bvid": "", + "page": 0, + "cid": 0, + "part": "", + "business": "live", + "dt": 2 + }, + "videos": 0, + "author_name": "Zelo-Balance", + "author_face": "http://i1.hdslb.com/bfs/face/7303b3032d1e13ca7c788cd9c30d4430f8ffd1ea.jpg", + "author_mid": 19193, + "view_at": 1592999822, + "progress": 0, + "badge": "直播中", + "show_title": "", + "duration": 0, + "current": "", + "total": 0, + "new_desc": "", + "is_finish": 0, + "is_fav": 0, + "kid": 14047, + "tag_name": "户外", + "live_status": 1 + }, + { + "title": "许巍 《蓝莲花》吉他Cover,这回你们不用截图抓我了吧", + "long_title": "", + "cover": "http://i2.hdslb.com/bfs/archive/0225b1f1a790393097ceebb51e89796be806d6bc.jpg", + "covers": null, + "uri": "", + "history": { + "oid": 883617049, + "epid": 0, + "bvid": "BV1sK4y147ob", + "page": 1, + "cid": 205017957, + "part": "许巍 《蓝莲花》 Cover_1", + "business": "archive", + "dt": 2 + }, + "videos": 1, + "author_name": "硬核拆解", + "author_face": "http://i1.hdslb.com/bfs/face/4e131c9609299303cdde882792fc62b9f99cdcde.jpg", + "author_mid": 427494870, + "view_at": 1592999572, + "progress": 13, + "badge": "", + "show_title": "", + "duration": 91, + "current": "", + "total": 0, + "new_desc": "", + "is_finish": 0, + "is_fav": 0, + "kid": 883617049, + "tag_name": "演奏", + "live_status": 0 + }, + { + "title": "从清楚与混沌之分看Vtuber形象塑造", + "long_title": "", + "cover": "", + "covers": [ + "https://i0.hdslb.com/bfs/article/5ddb94dd1890c639622717c7083fb2917b4aa475.jpg" + ], + "uri": "", + "history": { + "oid": 268656, + "epid": 0, + "bvid": "", + "page": 0, + "cid": 6233590, + "part": "", + "business": "article-list", + "dt": 2 + }, + "videos": 0, + "author_name": "普天一光", + "author_face": "http://i2.hdslb.com/bfs/face/3702810bdac3d5103d684e61dc5bc8492a74f904.jpg", + "author_mid": 6614889, + "view_at": 1592998686, + "progress": 0, + "badge": "专栏", + "show_title": "", + "duration": 0, + "current": "", + "total": 0, + "new_desc": "", + "is_finish": 0, + "is_fav": 0, + "kid": 268656, + "tag_name": "", + "live_status": 0 + }, + { + "title": "百妖谱", + "long_title": "庆忌(下)", + "cover": "http://i0.hdslb.com/bfs/archive/695a4566d05620a24c51d6eb935fa4767d673b45.jpg", + "covers": null, + "uri": "https://www.bilibili.com/bangumi/play/ss26193", + "history": { + "oid": 370908663, + "epid": 326789, + "bvid": "", + "page": 0, + "cid": 199204975, + "part": "", + "business": "pgc", + "dt": 3 + }, + "videos": 0, + "author_name": "", + "author_face": "", + "author_mid": 0, + "view_at": 1592985807, + "progress": 533, + "badge": "国创", + "show_title": "第8话 庆忌(下)", + "duration": 1402, + "current": "", + "total": 12, + "new_desc": "更新至第10话", + "is_finish": 0, + "is_fav": 0, + "kid": 26193, + "tag_name": "", + "live_status": 0 + } + ] + } +} +``` + +</details> + +## 获取视频观看历史记录_web端旧版 + +> https://api.bilibili.com/x/v2/history + +*请求方式:GET* + +认证方式:Cookie (SESSDATA) + +本接口也可以返回已失效稿件的信息 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ------- | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | ------------ | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 历史记录列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ------------------------------------------ | +| 0 | obj | 历史观看1 | | +| n | obj | 历史观看(n+1) | 按照观看顺序排列<br />项数为总计观看视频数 | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------------- | ------- | ------------------------------ | ------------------------------------------------------------ | +| aid | num | 稿件avid | | +| videos | num | 视频分P总数 | 默认为1 | +| tid | num | 分区tid | | +| tname | str | 子分区名称 | | +| copyright | num | 是否转载 | 1:原创<br />2:转载<br />3:未填写 | +| pic | str | 视频封面图片url | | +| title | str | 稿件标题 | | +| pubdate | num | 稿件发布时间 | 时间戳 | +| ctime | num | 用户提交稿件的时间 | 时间戳 | +| desc | str | 视频简介 | | +| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`state`备注 | +| ~~attribute~~(仅做历史性保留) | ~~num~~ | ~~稿件属性位配置~~ | 本字段已被删除<br />~~略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`attribute`备注~~ | +| duration | num | 视频总计持续时长(所有分P) | 单位为秒 | +| rights | obj | 视频属性标志 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`rights`对象 | +| owner | obj | 视频UP主信息 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`owner`对象 | +| stat | obj | 视频状态数 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`stat`对象 | +| dynamic | str | 视频同步发布的的动态的文字内容 | 无为空 | +| cid | num | 视频1P cid | | +| dimension | obj | 视频1P分辨率 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`dimension`对象 | +| bangumi | obj | 番剧/影视信息 | 非番剧/影视无此项 | +| cheese | obj | 课程信息 | 非课程无此项 | +| favorite | bool | 是否已收藏 | true:已收藏<br />false:未收藏 | +| type | num | 视频属性 | 3:普通视频<br />4:剧集<br />10:课程 | +| sub_type | num | 附视频属性 | 0:普通视频<br />1:番剧<br />2:电影<br />3:纪录片<br />4:国创<br />5:电视剧<br />7:综艺 | +| device | num | 观看平台代码 | 1 3 5 7:手机端<br />2:web端<br />4 6:pad端<br />33:TV端<br />0:其他 | +| page | obj | 最后观看的分P信息 | | +| count | num | 分P数 | 非投稿视频无此项 | +| progress | num | 观看进度 | 单位为秒 | +| view_at | num | 观看时间 | 时间戳 | +| kid | num | 稿件avid | | +| business | str | 视频类型标识 | archive:用户投稿视频<br />pgc:番剧/影视<br />cheese:课程 | +| redirect_link | str | 重定向url | | +| bvid | str | 稿件bvid | | + +`data`数组中的对象`bangumi`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | --------------- | ------------ | +| cover | str | 番剧封面图片url | | +| ep_id | num | 番剧epid | | +| episode_status | num | ??? | | +| follow | num | 0 | 作用尚不明确 | +| long_title | str | 单集标题 | | +| season | obj | 剧集信息 | | +| title | str | 集数 | | + +`bangumi`中的`season`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------ | ---------------------- | +| is_finish | num | 是否完结 | 0:连载中<br />1:完结 | +| newest_ep_id | num | 最细一话epid | | +| newest_ep_index | str | 最细一话集数 | | +| season_id | num | 番剧ssid | | +| season_status | num | ??? | | +| season_type | num | ??? | | +| title | str | 番剧标题 | | +| total_count | num | 总集数 | | + +`data`数组中的对象`cheese`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | --------------- | ---- | +| cover | str | 课程封面图片url | | +| long_title | str | 完整标题 | | +| number | str | 本集数 | | +| season_id | num | 课程ssid | | +| update_info | str | 总集数 | | + +**示例:** + +查询当前视频历史记录列表 + +```shell +curl -G 'https://api.bilibili.com/x/v2/history' \ +--data-urlencode 'ps=5' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "aid": 96523832, + "videos": 1, + "tid": 33, + "tname": "连载动画", + "copyright": 2, + "pic": "http://i0.hdslb.com/bfs/archive/dfc29be381565ee041a0ec9cfc7a32f8a63f76cd.jpg", + "title": "【1月】异度侵入 ID:INVADED 12【独家正版】", + "pubdate": 1584289800, + "ctime": 1584289800, + "desc": "#12", + "state": 0, + "attribute": 338688, + "duration": 1481, + "redirect_url": "https://www.bilibili.com/bangumi/play/ep307457", + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 1, + "hd5": 1, + "no_reprint": 0, + "autoplay": 0, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 928123, + "name": "哔哩哔哩番剧", + "face": "http://i1.hdslb.com/bfs/face/7a8412cbacb9fd18f40ddbbf0ad183e45afc1365.jpg" + }, + "stat": { + "aid": 96523832, + "view": 4772927, + "danmaku": 108890, + "reply": 48584, + "favorite": 46, + "coin": 61768, + "share": 290, + "now_rank": 0, + "his_rank": 0, + "like": 1241, + "dislike": 0 + }, + "dynamic": "", + "cid": 164789275, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "favorite": false, + "type": 4, + "sub_type": 1, + "device": 3, + "page": { + "cid": 164789275, + "page": 1, + "from": "vupload", + "part": "ID_INVADED_112.encoded", + "duration": 1481, + "vid": "", + "weblink": "", + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + } + }, + "bangumi": { + "ep_id": 307457, + "title": "12", + "long_title": "CHANNELED", + "episode_status": 13, + "follow": 0, + "cover": "http://i0.hdslb.com/bfs/archive/dfc29be381565ee041a0ec9cfc7a32f8a63f76cd.jpg", + "season": { + "season_id": 29310, + "title": "异度侵入 ID:INVADED", + "season_status": 13, + "is_finish": 1, + "total_count": 13, + "newest_ep_id": 307774, + "newest_ep_index": "13", + "season_type": 1 + } + }, + "progress": 277, + "view_at": 1588831600, + "kid": 29310, + "business": "pgc", + "redirect_link": "https://www.bilibili.com/bangumi/play/ep307457", + "bvid": "BV1K7411f7uu" + }, + { + "aid": 497899395, + "videos": 1, + "tid": 189, + "tname": "电脑装机", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/fd4e0893b234ee729cf15198065eced98367ebfe.jpg", + "title": "600元的2007款iMac,如今过时了吗?", + "pubdate": 1587727345, + "ctime": 1587708111, + "desc": "苹果东西是真的保值,酷睿2现在都还能卖的这么贵。第一次使用4K画质进行拍摄,应该比以前清楚一些。如有问题请在评论区指出,谢谢!", + "state": 0, + "attribute": 16768, + "duration": 389, + "mission_id": 13106, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 3391089, + "name": "数字云糕Official", + "face": "http://i2.hdslb.com/bfs/face/238dfbca5dda5de2d5ba95ee4e99804714e2b5e2.jpg" + }, + "stat": { + "aid": 497899395, + "view": 23325, + "danmaku": 92, + "reply": 115, + "favorite": 195, + "coin": 132, + "share": 23, + "now_rank": 0, + "his_rank": 0, + "like": 555, + "dislike": 0 + }, + "dynamic": "#IMAC##APPLE##MAC# 苹果东西是真的保值,酷睿2现在都还能卖的这么贵。第一次使用4K画质进行拍摄,应该比以前清楚一些。", + "cid": 182570131, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "favorite": false, + "type": 3, + "sub_type": 0, + "device": 3, + "page": { + "cid": 182570131, + "page": 1, + "from": "vupload", + "part": "iMac", + "duration": 389, + "vid": "", + "weblink": "", + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + } + }, + "count": 1, + "progress": -1, + "view_at": 1588828357, + "kid": 497899395, + "business": "archive", + "redirect_link": "https://www.bilibili.com/video/av497899395", + "bvid": "BV1NK41157EF" + } + ] +} +``` + +</details> + +## 删除历史记录 + +> https://api.bilibili.com/x/v2/history/delete + +*请求方式:POST* + +认证方式:Cookie (SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------------------------------------------------- | ------ | ------------------------------------------------------------ | +| kid | str | 删除的目标记录,格式为`{业务类型}_{目标id}`详见备注 | 必要 | 视频:archive\_{稿件avid}<br />直播:live_{直播间id}<br />专栏:article\_{专栏cvid}<br />剧集:pgc\_{剧集ssid}<br />文集:article-list\_{文集rlid} | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +删除视频`av540580868`的观看历史记录 + +```shell +curl 'https://api.bilibili.com/x/v2/history/delete' \ +--data-urlencode 'kid=archive_540580868' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 清空历史记录 + +> https://api.bilibili.com/x/v2/history/clear + +*请求方式:POST* + +认证方式:Cookie (SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +清空历史记录 + +```shell +curl 'https://api.bilibili.com/x/v2/history/clear' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 停用历史记录 + +> https://api.bilibili.com/x/v2/history/shadow/set + +*请求方式:POST* + +认证方式:Cookie (SESSDATA) + +该操作不会影响原有历史记录 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | -------------------------------------------- | +| switch | bool | 停用开关 | 非必要 | true:停用<br />false:正常<br />默认为false | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +停用历史记录功能 + +```shell +curl 'https://api.bilibili.com/x/v2/history/shadow/set' \ +--data-urlencode 'switch=true' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 查询历史记录停用状态 + +> https://api.bilibili.com/x/v2/history/shadow + +*请求方式:GET* + +认证方式:Cookie (SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | bool | 停用状态 | true:停用<br />false:正常 | + +**示例:** + +当前状态为未停用视频历史记录 + +```shell +curl 'https://api.bilibili.com/x/v2/history/shadow' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": false +} +``` + +</details> diff --git a/docs/historytoview/toview.md b/docs/historytoview/toview.md new file mode 100644 index 0000000..e44248a --- /dev/null +++ b/docs/historytoview/toview.md @@ -0,0 +1,462 @@ +# 稍后再看 + +<img src="../../assets/img/toview.png" width="25" height="20"/> + +## 视频添加稍后再看 + +> https://api.bilibili.com/x/v2/history/toview/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +最多添加100个视频 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------------ | ------------------ | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />90001:列表已满<br />90003:稿件已经被删除 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +添加视频`av41687433`/`BV1ht41147kj`到稍后再看列表 + +avid方式: + +```shell +curl 'https://api.bilibili.com/x/v2/history/toview/add' \ +--data-urlencode 'aid=41687433' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl 'https://api.bilibili.com/x/v2/history/toview/add' \ +--data-urlencode 'bvid=BV1ht41147kj' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 添加频道中所有视频到稍后再看 + +> https://space.bilibili.com/ajax/channel/addAllToView + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`及`DedeUserID__ckMd5`存在且不为0,referer为 `.bilibili.com`域名下 + +带有转义 + +超过容量后会截取容量之内的添加 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| cid | num | 目标频道id | 必要 | | +| mid | num | 目标频道所属的用户mid | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | --------------------------- | +| status | bool | 是否成功 | false:失败<br />true:成功 | +| data | str | 错误信息 | | + +**示例:** + +添加用户`mid=282994`下的频道`4693`中所有视频到稍后再看 + +```shell +curl 'https://space.bilibili.com/ajax/channel/addAllToView' \ +--data-urlencode 'cid=4693' \ +--data-urlencode 'mid=282994' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' +-e 'https://www.bilibili.com' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "status": true, + "data": "操作成功" +} +``` + +</details> + +## 获取稍后再看视频列表 + +> https://api.bilibili.com/x/v2/history/toview + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | data | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ---------------- | ---- | +| count | num | 稍后再看视频数 | | +| list | array | 稍后再看视频列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------------------------------------- | +| 0 | obj | 稍后再看1 | | +| n | obj | 稍后再看(n+1) | 按照添加顺序排列<br />项数为总计稍后再看视频数 | +| …… | obj | …… | …… | +| 99 | obj | 最后一项 | | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------------- | ------- | ------------------------------ | ------------------------------------------------------------ | +| aid | num | 稿件avid | | +| videos | num | 稿件分P总数 | 默认为1 | +| tid | num | 分区tid | | +| tname | str | 子分区名称 | | +| copyright | num | 是否转载 | 1:原创<br />2:转载<br />3:未填写 | +| pic | str | 稿件封面图片url | | +| title | str | 稿件标题 | | +| pubdate | num | 稿件发布时间 | 时间戳 | +| ctime | num | 用户提交稿件的时间 | 时间戳 | +| desc | str | 视频简介 | | +| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`state`备注 | +| ~~attribute~~(仅做历史性保留) | ~~num~~ | ~~稿件属性位配置~~ | 本字段已被删除~~略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`attribute`备注~~ | +| duration | num | 稿件总时长(所有分P) | 单位为秒 | +| rights | obj | 稿件属性标志 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`rights`对象 | +| owner | obj | 稿件UP主信息 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`owner`对象 | +| stat | obj | 稿件状态数 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`stat`对象 | +| dynamic | str | 视频同步发布的的动态的文字内容 | 无为空 | +| dimension | obj | 稿件1P分辨率 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`dimension`对象 | +| count | num | 稿件分P数 | 非投稿视频无此项 | +| cid | num | 视频cid | | +| progress | num | 观看进度时间 | 单位为秒 | +| add_at | num | 添加时间 | 时间戳 | +| bvid | str | 稿件bvid | | + +**示例:** + +获取稍后再看视频列表 + +```shell +curl 'https://api.bilibili.com/x/v2/history/toview' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 25, + "list": [ + { + "aid": 200333024, + "videos": 1, + "tid": 95, + "tname": "手机平板", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/a5e3072e670daec4c01a182aae91c1f85a48001e.jpg", + "title": "【山新】疫情下,配音演员怎么开工录音?", + "pubdate": 1586959137, + "ctime": 1586959137, + "desc": "疫情这段时间,配音演员们是怎么录音的呢=W=", + "state": 0, + "attribute": 16768, + "duration": 218, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 14082, + "name": "山新", + "face": "http://i0.hdslb.com/bfs/face/74c82caee6d9eb623e56161ea8ed6d68afabfeae.jpg" + }, + "stat": { + "aid": 200333024, + "view": 361123, + "danmaku": 1792, + "reply": 1376, + "favorite": 7571, + "coin": 12129, + "share": 895, + "now_rank": 0, + "his_rank": 0, + "like": 54705, + "dislike": 0 + }, + "dynamic": "疫情这段时间,配音演员们是怎么录音的呢=W=", + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "page": { + "cid": 178808041, + "page": 1, + "from": "vupload", + "part": "无标题", + "duration": 218, + "vid": "", + "weblink": "", + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + } + }, + "count": 1, + "cid": 178808041, + "progress": 32, + "add_at": 1587041785, + "bvid": "BV1Yz411B7n3" + }, + { + "aid": 710350011, + "videos": 1, + "tid": 124, + "tname": "趣味科普人文", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/c5b7e7c07a4abf27029c5afb3ab65fee4475b9a9.jpg", + "title": "不花一分钱建立自己的网站!给硬盘里的小姐姐换个新家!", + "pubdate": 1586919626, + "ctime": 1586898238, + "desc": "制作视频不易,你的点赞是对我最大的支持!\nUP主的个人网站:https://amdradeonrin.github.io/MIKU/\n视频提到的文件在网站有下载\nGitHub上的网站源码:https://github.com/AMDRadeonRin/MIKU", + "state": 0, + "attribute": 16768, + "duration": 169, + "mission_id": 13106, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 179757857, + "name": "GTX690战术核显卡导弹", + "face": "http://i2.hdslb.com/bfs/face/2504de8c1eeef22d91bbc45803f6b29afcbb0adf.jpg" + }, + "stat": { + "aid": 710350011, + "view": 3293, + "danmaku": 37, + "reply": 117, + "favorite": 355, + "coin": 76, + "share": 11, + "now_rank": 0, + "his_rank": 0, + "like": 325, + "dislike": 0 + }, + "dynamic": "#网页制作##HTML##网页#给你们科普一下怎么弄网站吧,你们也可以考虑整一个XD", + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "count": 1, + "cid": 0, + "progress": 0, + "add_at": 1587012410, + "bvid": "BV1LQ4y1T7Xh" + }, + ………… + ] + } +} +``` + +</details> + +## 删除稍后再看视频 + +> https://api.bilibili.com/x/v2/history/toview/del + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| viewed | bool | 是否删除所有已观看的视频 | 非必要 | true:删除已观看视频<br />false:不删除已观看视频<br />默认为false | +| aid | num | 删除的目标记录的avid | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +删除视频`av540580868`的稍后再看记录 + +```shell +curl 'https://api.bilibili.com/x/v2/history/toview/del' \ +--data-urlencode 'aid=540580868' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +删除所有已观看的视频 + +```shell +curl 'https://api.bilibili.com/x/v2/history/toview/del' \ +--data-urlencode 'viewed=true' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> + +## 清空稍后再看视频列表 + +> https://api.bilibili.com/x/v2/history/toview/clear + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| csrf | num | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +清空稍后再看视频列表 + +```shell +curl 'https://api.bilibili.com/x/v2/history/toview/clear' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +</details> diff --git a/docs/live/danmaku.md b/docs/live/danmaku.md new file mode 100644 index 0000000..3171c47 --- /dev/null +++ b/docs/live/danmaku.md @@ -0,0 +1,1828 @@ +# 直播间弹幕 + +## 获取当前用户对应直播间可发弹幕配置 + +> https://api.live.bilibili.com/xlive/web-room/v1/dM/GetDMConfigByGroup + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +未登录也可以获取,但颜色只有白色可用,模式只有滚动。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---- | --- | --- | ---- | --- | +| room_id | num | 直播间id | 必要 | | +| web_location | str | (?) | 非必要 | 作用尚不明确 | +| w_rid | str | wbi签名 | 非必要 | 不强制需要 | +| wts | num | 秒时间戳 | 非必要 | 不强制需要 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功<br />-400: 参数错误 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | | +| msg | str | 信息 | 成功时存在,为`""`(空字符串) | +| ttl | num | `1` | 成功时不存在 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| group | arr | 弹幕颜色组 | | +| mode | arr | 弹幕显示模式 | | + +`data.group` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| name | str | 显示名称 | | +| sort | num | 用于排序 | | +| color | arr | 该组颜色列表 | | + +`data.group[i].color` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| name | str | 颜色名 | | +| color | str | 十进制颜色值 | 发送弹幕用 | +| color\_hex | str | 十六进制颜色值 | 发送弹幕用 | +| status | num | 可用状态 | 0: 不可用<br />1: 可用 | +| weight | num | (?) | 作用尚不明确 | +| color\_id | num | 颜色id? | | +| origin | num | (?) | | + +`data.mode` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| name | str | 模式名称 | | +| mode | num | 模式值 | 发送弹幕用 | +| type | str | 模式类型 | | +| status | num | 可用状态 | 0: 不可用<br />1: 可用 | + +**示例:** + +获取未登录用户在直播间 `1` 的弹幕配置可用情况 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/dM/GetDMConfigByGroup?room_id=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "group": [ + { + "name": "普", + "sort": 0, + "color": [ + { + "name": "白色", + "color": "16777215", + "color_hex": "ffffff", + "status": 1, + "weight": -9999, + "color_id": -9999, + "origin": 0 + } + ] + }, + { + "name": "航", + "sort": 100, + "color": [ + { + "name": "紫色", + "color": "14893055", + "color_hex": "e33fff", + "status": 0, + "weight": 0, + "color_id": 6, + "origin": 1 + } + ] + }, + { + "name": "粉", + "sort": 200, + "color": [ + { + "name": "松石绿", + "color": "5566168", + "color_hex": "54eed8", + "status": 0, + "weight": 99, + "color_id": 66, + "origin": 2 + }, + { + "name": "雨后蓝", + "color": "5816798", + "color_hex": "58c1de", + "status": 0, + "weight": 98, + "color_id": 67, + "origin": 2 + }, + { + "name": "星空蓝", + "color": "4546550", + "color_hex": "455ff6", + "status": 0, + "weight": 97, + "color_id": 68, + "origin": 2 + }, + { + "name": "紫罗兰", + "color": "9920249", + "color_hex": "975ef9", + "status": 0, + "weight": 96, + "color_id": 69, + "origin": 2 + }, + { + "name": "梦境红", + "color": "12802438", + "color_hex": "c35986", + "status": 0, + "weight": 95, + "color_id": 70, + "origin": 2 + }, + { + "name": "热力橙", + "color": "16747553", + "color_hex": "ff8c21", + "status": 0, + "weight": 94, + "color_id": 71, + "origin": 2 + }, + { + "name": "香槟金", + "color": "16774434", + "color_hex": "fff522", + "status": 0, + "weight": 93, + "color_id": 72, + "origin": 2 + } + ] + }, + { + "name": "爷", + "sort": 300, + "color": [ + { + "name": "红色", + "color": "16738408", + "color_hex": "ff6868", + "status": 0, + "weight": 0, + "color_id": 8, + "origin": 3 + }, + { + "name": "蓝色", + "color": "6737151", + "color_hex": "66ccff", + "status": 0, + "weight": 0, + "color_id": 7, + "origin": 3 + } + ] + }, + { + "name": "活", + "sort": 400, + "color": [ + { + "name": "盛典金", + "color": "16766720", + "color_hex": "ffd700", + "status": 0, + "weight": 100, + "color_id": 44, + "origin": 4 + }, + { + "name": "升腾蓝", + "color": "4286945", + "color_hex": "4169e1", + "status": 0, + "weight": 100, + "color_id": 43, + "origin": 4 + }, + { + "name": "青色", + "color": "65532", + "color_hex": "fffc", + "status": 0, + "weight": 0, + "color_id": 5, + "origin": 4 + }, + { + "name": "绿色", + "color": "8322816", + "color_hex": "7eff00", + "status": 0, + "weight": 0, + "color_id": 4, + "origin": 4 + }, + { + "name": "黄色弹幕", + "color": "16772431", + "color_hex": "ffed4f", + "status": 0, + "weight": 0, + "color_id": 3, + "origin": 4 + }, + { + "name": "橙色", + "color": "16750592", + "color_hex": "ff9800", + "status": 0, + "weight": 0, + "color_id": 2, + "origin": 4 + }, + { + "name": "粉色", + "color": "16741274", + "color_hex": "ff739a", + "status": 0, + "weight": 0, + "color_id": 1, + "origin": 4 + } + ] + } + ], + "mode": [ + { + "name": "滚动", + "mode": 1, + "type": "scroll", + "status": 1 + }, + { + "name": "底部", + "mode": 4, + "type": "bottom", + "status": 0 + }, + { + "name": "顶部", + "mode": 5, + "type": "top", + "status": 0 + } + ] + }, + "message": "", + "msg": "" +} +``` + +</details> + + +## 获取直播间最近历史弹幕 + +> https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory + +<!--{ + "from": { + "url": "https://www.bilibili.com/read/cv8186413/" + } +}--> + +*请求方式: GET* + +注: 该接口部分返回信息不明, 仅供参考, 来源 [cv8186413](https://www.bilibili.com/read/cv8186413/) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | --- | - | - | +| roomid | num | 直播间短ID | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功<br />-400: 请求错误 | +| message | str | 错误信息 | 默认为空 | +| msg | str | 空 | 仅请求成功时存在 | +| ttl | num | 1 | 仅请求失败时存在 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| admin | array | 管理员最新的10条弹幕消息 | 格式与`room`相同 | +| room | array | 普通用户的10条弹幕信息 | 格式与`admin`相同 | + +`data`中的任意数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| text | str | 弹幕内容 | | +| dm_type | num | 弹幕类型 | | +| uid | num | 弹幕发送者的UID | | +| nickname | str | 弹幕发送者的昵称 | | +| uname_color | str | 弹幕发送者的昵称颜色? | | +| timeline | str | 弹幕发送时间 | 格式为`yyyy-MM-dd HH:mm:ss` | +| isadmin | num | 是否为管理员 | | +| vip | num | 是否为VIP? || +| svip | num | 是否为SVIP? || +| medal | array | 粉丝勋章信息? | 格式不明 | +| title | array | 标题? | 格式不明 | +| user_level | array | 用户等级信息? | 格式不明 | +| rank | num | 排名? | [用户空间详细信息](../user/info.md#获取用户详细信息) | +| teamid | num | | | +| rnd | str | 随机数种子? | | +| user_title | str | 用户头衔? |格式不明| +| guard_level | | 大航海等级? | | +| bubble | | | | +| bubble_color | | | | +| lpl | | | | +| yeah_space_url | | | | +| jump_to_url | | | | +| check_info | obj | 弹幕审核信息? | | +| voice_dm_info | obj | 语音弹幕信息? | | +| emoticon | obj | 房间独有表情信息 | | +| emots | obj | 默认表情信息 | 结构为`表情名-信息`组成的键值对<br />如果信息不含默认表情,则返回 null | +| id_str | str | 弹幕ID? | | +| wealth_level | num | 财富等级? | | +| bubble_id_v2 | num | | | +| reply | obj | 回复的弹幕 | | +| group_medal | null | | | +| user | obj | 该用户信息 || + +`data`对象中的`emoticon`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------------------ | ---------------------------- | +| id | num | 0 | | +| emoticon_unique | str | 表情的独特标识 | 格式为`room_房间号_表情id` | +| text | text | 表情的触发词 | | +| perm | num | 发送权限? | 1:所有人都可发送 | +| url | str | 表情的图像链接 | | +| in_player_area | num | 是否显示在直播画面区域? | | +| bulge_display | num | 是否高亮显示? | | +| is_dynamic | num | 是否为动态表情 | 0:静态图像<br />1:动态图像 | +| height | num | 表情的高度 | | +| width | num | 表情的宽度 | | + +`data`对象中的`emots`对象中的任意一个值对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ---------------- | ------------------------- | +| count | num | 重复发送数量 | | +| descript | str | 表情描述 | | +| emoji | str | 表情描述 | | +| emotion_id | num | 表情 id | | +| emotion_unique | str | 表情的独特标识符 | 格式可能为`emoji_表情 id` | +| height | num | 表情的宽度 | | +| url | str | 表情的图像链接 | | +| width | num | 表情的高度 | | + +`data`对象中的`user`对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | --- | --- | +| uid | num | 用户 mid || +| base | obj | 用户基本信息 || +| medal | null | || +| wealth | null | || +| title | obj | 用户标题? || +| guard | null | || +| uhead_frame | null | || +| guard_leader | obj | | | + +`data`对象中的`user`对象中的`base`对象: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | --- | --- | +| name | str | 用户名 || +| face | str | 用户头像 url || +| name_color | num | 用户名颜色? || +| is_mystery | bool | 是否为神秘用户? || +| risk_ctrl_info | null | | | +| origin_info | obj | 原始信息? | | +| official_info | obj | 认证信息 | | +| name_color_str | str | | | + +**示例:** + +```shell +curl -G 'https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory' \ +--url-query 'roomid=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "admin": [], + "room": [ + { + "text": "‫", + "dm_type": 0, + "uid": 20276964, + "nickname": "咸菜拉面", + "uname_color": "", + "timeline": "2024-08-15 05:05:06", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [ + 27, + "小孩梓", + "阿梓从小就很可爱", + 80397, + 398668, + "", + 0, + 6809855, + 398668, + 6850801, + 3, + 1, + 7706705 + ], + "title": [ + "title-86-1", + "title-86-1" + ], + "user_level": [ + 59, + 0, + 16752445, + 931 + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723669505", + "user_title": "title-86-1", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723669506, + "ct": "18434F3D" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "74368f428dfaec806cd205e62866bd1c45", + "wealth_level": 37, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 20276964, + "base": { + "name": "咸菜拉面", + "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "咸菜拉面", + "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "小孩梓", + "level": 27, + "color_start": 398668, + "color_end": 6850801, + "color_border": 6809855, + "color": 398668, + "id": 13139, + "typ": 0, + "is_light": 1, + "ruid": 7706705, + "guard_level": 3, + "score": 50112778, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": null, + "title": { + "old_title_css_id": "title-86-1", + "title_css_id": "title-86-1" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "‫", + "dm_type": 0, + "uid": 20276964, + "nickname": "咸菜拉面", + "uname_color": "", + "timeline": "2024-08-16 05:05:06", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [ + 27, + "小孩梓", + "阿梓从小就很可爱", + 80397, + 398668, + "", + 0, + 6809855, + 398668, + 6850801, + 3, + 1, + 7706705 + ], + "title": [ + "title-86-1", + "title-86-1" + ], + "user_level": [ + 59, + 0, + 16752445, + 931 + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723755905", + "user_title": "title-86-1", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723755906, + "ct": "F65D229F" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "7f3bb90826ad642012a31368f266be6d2", + "wealth_level": 37, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 20276964, + "base": { + "name": "咸菜拉面", + "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "咸菜拉面", + "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "小孩梓", + "level": 27, + "color_start": 398668, + "color_end": 6850801, + "color_border": 6809855, + "color": 398668, + "id": 13139, + "typ": 0, + "is_light": 1, + "ruid": 7706705, + "guard_level": 3, + "score": 50112778, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": null, + "title": { + "old_title_css_id": "title-86-1", + "title_css_id": "title-86-1" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "好帅", + "dm_type": 0, + "uid": 3546708493469870, + "nickname": "aodun1", + "uname_color": "", + "timeline": "2024-08-16 22:33:28", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [], + "title": [ + "", + "" + ], + "user_level": [ + 0, + 0, + 9868950, + ">50000" + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723811729", + "user_title": "", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723818808, + "ct": "1B75FB" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "088336a59eb277942ee353dd6666bf6347", + "wealth_level": 0, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 3546708493469870, + "base": { + "name": "aodun1", + "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "aodun1", + "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": null, + "wealth": null, + "title": { + "old_title_css_id": "", + "title_css_id": "" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "好帅", + "dm_type": 0, + "uid": 3546708493469870, + "nickname": "aodun1", + "uname_color": "", + "timeline": "2024-08-16 22:35:16", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [], + "title": [ + "", + "" + ], + "user_level": [ + 0, + 0, + 9868950, + ">50000" + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723811729", + "user_title": "", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723818916, + "ct": "D6ABF2E7" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "6f421255746f5d8e4731fdadac66bf6356", + "wealth_level": 0, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 3546708493469870, + "base": { + "name": "aodun1", + "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "aodun1", + "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": null, + "wealth": null, + "title": { + "old_title_css_id": "", + "title_css_id": "" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "好帅", + "dm_type": 0, + "uid": 3546708493469870, + "nickname": "aodun1", + "uname_color": "", + "timeline": "2024-08-16 22:36:51", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [], + "title": [ + "", + "" + ], + "user_level": [ + 0, + 0, + 9868950, + ">50000" + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723811729", + "user_title": "", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723819011, + "ct": "1B6978C1" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "270f5a2ac69c5904617873cc4666bf640", + "wealth_level": 0, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 3546708493469870, + "base": { + "name": "aodun1", + "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "aodun1", + "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": null, + "wealth": null, + "title": { + "old_title_css_id": "", + "title_css_id": "" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "好帅", + "dm_type": 0, + "uid": 3546708493469870, + "nickname": "aodun1", + "uname_color": "", + "timeline": "2024-08-16 22:39:01", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [], + "title": [ + "", + "" + ], + "user_level": [ + 0, + 0, + 9868950, + ">50000" + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723811729", + "user_title": "", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723819141, + "ct": "143613AF" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "002ebbdc402b3d625052865f7b66bf6469", + "wealth_level": 0, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 3546708493469870, + "base": { + "name": "aodun1", + "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "aodun1", + "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": null, + "wealth": null, + "title": { + "old_title_css_id": "", + "title_css_id": "" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "赚麻了 哈哈", + "dm_type": 0, + "uid": 243082910, + "nickname": "可人的樱花", + "uname_color": "", + "timeline": "2024-08-17 01:00:49", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [], + "title": [ + "", + "" + ], + "user_level": [ + 0, + 0, + 9868950, + ">50000" + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723379161", + "user_title": "", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723827649, + "ct": "3917D4D7" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "03f3261e144366383c49c6b5d166bf8563", + "wealth_level": 7, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 243082910, + "base": { + "name": "可人的樱花", + "face": "http://i2.hdslb.com/bfs/face/5faa9bef952f831236b740932c559476658f88e5.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "可人的樱花", + "face": "http://i2.hdslb.com/bfs/face/5faa9bef952f831236b740932c559476658f88e5.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": null, + "wealth": null, + "title": { + "old_title_css_id": "", + "title_css_id": "" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "‫", + "dm_type": 0, + "uid": 20276964, + "nickname": "咸菜拉面", + "uname_color": "", + "timeline": "2024-08-17 05:05:07", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [ + 27, + "小孩梓", + "阿梓从小就很可爱", + 80397, + 398668, + "", + 0, + 6809855, + 398668, + 6850801, + 3, + 1, + 7706705 + ], + "title": [ + "title-86-1", + "title-86-1" + ], + "user_level": [ + 59, + 0, + 16752445, + 931 + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723842307", + "user_title": "title-86-1", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723842307, + "ct": "8B947ABC" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "1a928b968afaa7825ea506ffe566bfbf16", + "wealth_level": 37, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 20276964, + "base": { + "name": "咸菜拉面", + "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "咸菜拉面", + "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "小孩梓", + "level": 27, + "color_start": 398668, + "color_end": 6850801, + "color_border": 6809855, + "color": 398668, + "id": 13139, + "typ": 0, + "is_light": 1, + "ruid": 7706705, + "guard_level": 3, + "score": 50112778, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": null, + "title": { + "old_title_css_id": "title-86-1", + "title_css_id": "title-86-1" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "下播啦~ 感谢大家的陪伴~ 下次见哦~", + "dm_type": 0, + "uid": 3546614675278489, + "nickname": "机器人管家_鱼", + "uname_color": "", + "timeline": "2024-08-18 00:07:36", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [ + 21, + "赴神明", + "Mr_钟明", + 27751673, + 1725515, + "", + 0, + 12632256, + 12632256, + 12632256, + 0, + 0, + 3493291261692485 + ], + "title": [ + "", + "" + ], + "user_level": [ + 11, + 0, + 6406234, + ">50000" + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723910862", + "user_title": "", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723910856, + "ct": "9BD05026" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "2ee6101973eeb69931eb86ac7e66c0ca17", + "wealth_level": 23, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 3546614675278489, + "base": { + "name": "机器人管家_鱼", + "face": "https://i1.hdslb.com/bfs/face/de737cd746a96742c07ced6c213aa25cf0429d90.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "机器人管家_鱼", + "face": "https://i1.hdslb.com/bfs/face/de737cd746a96742c07ced6c213aa25cf0429d90.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "赴神明", + "level": 21, + "color_start": 12632256, + "color_end": 12632256, + "color_border": 12632256, + "color": 1725515, + "id": 1231122, + "typ": 0, + "is_light": 0, + "ruid": 3493291261692485, + "guard_level": 0, + "score": 50001573, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#919298CC", + "v2_medal_color_end": "#919298CC", + "v2_medal_color_border": "#919298CC", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C6C7299", + "user_receive_count": 0 + }, + "wealth": null, + "title": { + "old_title_css_id": "", + "title_css_id": "" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + }, + { + "text": "‫", + "dm_type": 0, + "uid": 20276964, + "nickname": "咸菜拉面", + "uname_color": "", + "timeline": "2024-08-18 05:05:05", + "isadmin": 0, + "vip": 0, + "svip": 0, + "medal": [ + 27, + "小孩梓", + "阿梓从小就很可爱", + 80397, + 398668, + "", + 0, + 6809855, + 398668, + 6850801, + 3, + 1, + 7706705 + ], + "title": [ + "title-86-1", + "title-86-1" + ], + "user_level": [ + 59, + 0, + 16752445, + 931 + ], + "rank": 10000, + "teamid": 0, + "rnd": "1723928706", + "user_title": "title-86-1", + "guard_level": 0, + "bubble": 0, + "bubble_color": "", + "lpl": 0, + "yeah_space_url": "", + "jump_to_url": "", + "check_info": { + "ts": 1723928705, + "ct": "8A379FF4" + }, + "voice_dm_info": { + "voice_url": "", + "file_format": "", + "text": "", + "file_duration": 0, + "file_id": "" + }, + "emoticon": { + "id": 0, + "emoticon_unique": "", + "text": "", + "perm": 0, + "url": "", + "in_player_area": 0, + "bulge_display": 0, + "is_dynamic": 0, + "height": 0, + "width": 0 + }, + "emots": null, + "id_str": "41e8b55dea381d494cfe60ba3466c11064", + "wealth_level": 37, + "bubble_id_v2": 0, + "reply": { + "show_reply": true, + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false + }, + "group_medal": null, + "user": { + "uid": 20276964, + "base": { + "name": "咸菜拉面", + "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "咸菜拉面", + "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "小孩梓", + "level": 27, + "color_start": 398668, + "color_end": 6850801, + "color_border": 6809855, + "color": 398668, + "id": 13139, + "typ": 0, + "is_light": 1, + "ruid": 7706705, + "guard_level": 3, + "score": 50112778, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": null, + "title": { + "old_title_css_id": "title-86-1", + "title_css_id": "title-86-1" + }, + "guard": null, + "uhead_frame": null, + "guard_leader": { + "is_guard_leader": false + } + } + } + ] + }, + "message": "", + "msg": "" +} +``` + +</details> + +## 设置弹幕样式 + +> https://api.live.bilibili.com/xlive/web-room/v1/dM/AjaxSetConfig + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---- | --- | --- | ---- | --- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| csrf\_token | str | 同csrf | 非必要 | | +| room\_id | num | 直播间id | 必要 | | +| color | str | 颜色值 | 必要(可选) | color和mode任选一个 | +| mode | num | 弹幕模式 | 必要(可选) | color和mode任选一个 | + +注1: 抓取到的color格式是`"0x"+六位十六进制小写颜色值`,实际不需要`0x`,且不区分大小写。 + +注2: 若color和mode同时存在将只处理color,mode将被忽略。(见[#1236(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1236#issuecomment-2849019923)) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功<br />-101: 账号未登录<br />-500: 未达到使用条件<br />10064002: 参数错误<br />10065107: 颜色不存在 | +| message | str | 错误信息 | | +| ttl | num | `1` | | +| data | obj | 信息本体 | 部分情况不存在,10064002时为`null` | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| status | num | 同code | | +| msg | str | 提示信息 | 成功时有内容 | +| roomid | num | 直播间id | | + +**示例:** + +更改直播间 `1017` 的弹幕颜色为白色 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/dM/AjaxSetConfig' \ + --data-urlencode 'room_id=1017' \ + --data-urlencode 'color=0xffffff' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "status":0, + "msg":"设置成功~", + "roomid":1017 + } +} +``` + +</details> + +## 发送直播弹幕 + +> https://api.live.bilibili.com/msg/send + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | --- | ----- | --- | +| w_rid | str | wbi签名 | 非必要 | 不强制需要 | +| wts | num | Unix 秒时间戳 | 非必要 | 不强制需要 | + +**正文参数 (`application/x-www-form-urlencoded`或`multipart/form-data`):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---- | --- | --- | ---- | --- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| roomid | num | 直播间id | 必要 | | +| msg | str | 弹幕内容 | 必要 | | +| rnd | num | 当前 Unix 秒时间戳 | 必要 | | +| fontsize | num | 字体大小 | 必要 | 默认为`25` | +| color | num | 十进制颜色值 | 必要 | 实际无效果 | +| mode | num | 展示模式 | 非必要 | 默认为`1` | +| bubble | num | (?) | 非必要 | 值为`0` | +| room\_type | num | (?) | 非必要 | `0` | +| jumpfrom | num | (?) | 非必要 | `0` | +| reply\_mid | num | 要“@”的用户mid | 非必要 | 默认为`0` | +| reply\_attr | num | (?) | 非必要 | `0` | +| reply\_uname | str | 要“@”的用户名称 | 非必要 | 默认为`""`,提供reply\_mid时不需要提供 | +| replay\_dmid | str | 要回复的弹幕id | 非必要 | 默认为`""` | +| statistics | str | (?) | 非必要 | `{"appId":100,"platform":5}` | +| csrf_token | str | 同csrf | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | `-101`:账号未登录<br />`-111`:csrf 校验失败<br />`-400`:请求错误,带有必须参数的信息<br />`1003212`:超出限制长度<br />`10031`:发送频率过快 | +| message | str | 错误信息 | | +| msg | str | 同`message` | | +| data | obj | 信息本体 | | +| ttl | num | `1` | 在小于0的code中存在 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| mode_info | obj | 弹幕信息 | | +| dm_v2 | null | v2弹幕 | | + +`data.mode_info` 对象: + +基本上与[直播间信息流#弹幕 (DANMU_MSG)](message_stream.md#弹幕-danmu_msg)的`info[0][15]`对象相同。 + +**示例:** + +给直播间 `1899237171` 发送内容为 `QwQ` 的弹幕 + +```shell +curl 'https://api.live.bilibili.com/msg/send' \ + --data-urlencode 'roomid=1899237171' \ + --data-urlencode 'msg=QwQ' \ + --data-urlencode 'rnd=1744956003' \ + --data-urlencode 'fontsize=25' + --data-urlencode 'color=16777215' + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "data":{ + "mode_info":{ + "mode":0, + "show_player_type":0, + "extra":"{\"send_from_me\":true,\"master_player_hidden\":false,\"mode\":0,\"color\":16777215,\"dm_type\":0,\"font_size\":25,\"player_mode\":1,\"show_player_type\":0,\"content\":\"QwQ\",\"user_hash\":\"2402762465\",\"emoticon_unique\":\"\",\"bulge_display\":0,\"recommend_score\":7,\"main_state_dm_color\":\"\",\"objective_state_dm_color\":\"\",\"direction\":0,\"pk_direction\":0,\"quartet_direction\":0,\"anniversary_crowd\":0,\"yeah_space_type\":\"\",\"yeah_space_url\":\"\",\"jump_to_url\":\"\",\"space_type\":\"\",\"space_url\":\"\",\"animation\":{},\"emots\":null,\"is_audited\":false,\"id_str\":\"4e3ed8ede9409b234b5e1d64c06801ea3119\",\"icon\":null,\"show_reply\":true,\"reply_mid\":0,\"reply_uname\":\"\",\"reply_uname_color\":\"\",\"reply_is_mystery\":false,\"reply_type_enum\":0,\"hit_combo\":0,\"esports_jump_url\":\"\"}", + "user":{ + "uid":438160221, + "base":{ + "name":"weatfe", + "face":"https://i0.hdslb.com/bfs/face/member/noface.jpg", + "name_color":0, + "is_mystery":false, + "risk_ctrl_info":null, + "origin_info":{ + "name":"weatfe", + "face":"https://i0.hdslb.com/bfs/face/member/noface.jpg" + }, + "official_info":{ + "role":0, + "title":"", + "desc":"", + "type":-1 + }, + "name_color_str":"" + }, + "medal":null, + "wealth":null, + "title":{ + "old_title_css_id":"", + "title_css_id":"" + }, + "guard":null, + "uhead_frame":null, + "guard_leader":{ + "is_guard_leader":false + } + } + }, + "dm_v2":null + }, + "message":"", + "msg":"" +} +``` + +</details> diff --git a/docs/live/emoticons.md b/docs/live/emoticons.md new file mode 100644 index 0000000..75ee998 --- /dev/null +++ b/docs/live/emoticons.md @@ -0,0 +1,927 @@ +# 直播间表情 + +## 获取直播间的表情包 + +> https://api.live.bilibili.com/xlive/web-ucenter/v2/emoticon/GetEmoticons + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ------ | ---------- | ------ | ---- | +| platform | string | 平台 | 必要 | 已知: `pc``android` `ios` | +| room_id | number | 直播间长号 | 必要 | 只支持 `room_id` 不支持 `short_id` | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ---- | +| code | number | 返回值 | 0: 成功 | +| message | string | 错误消息 | 默认为 0 | +| ttl | number | 1 | | +| data | object | 信息本体 | 见下 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | -------- | ---------- | ---- | +| data | object[] | 表情包数据 | 套了个娃 | +| fans_brand | number | 品牌标识? | | +| purchase_url | null? | 购买链接? | | + +`data.data[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------------- | -------- | --------- | ---- | +| current_cover | string | 封面 URL | | +| emoticons | object[] | 表情列表 | | +| pkg_descript | string | 文字描述 | | +| pkg_id | number | 包 ID | | +| pkg_name | string | 包名称 | | +| pkg_perm | number | 使用权限? | | +| pkg_type | number | 包类型 | | +| recently_used_emoticons | unknown[] | 最近使用的表情 | | +| top_show | object | 顶部展示信息? | | +| top_show_recent | object | 最近使用的顶部展示信息? | | +| unlock_identity | number | 解锁所需身份标识? | | +| unlock_need_gift | number | 解锁所需礼物? | | + +`data.data[].emoticons[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ------ | ---- | ---- | +| bulge_display | number | 突出展示? | | +| descript | string | 描述 | | +| emoji | string | 触发关键词? | | +| emoticon_id | number | 表情 ID | | +| emoticon_unique | string | 表情唯一标识 | | +| emoticon_value_type | number | 表情值类型? | | +| height | number | 表情图片高度 | | +| identity | number | 身份限制标识? | | +| in_player_area | number | 播放器区域内展示? | | +| is_dynamic | number | 是否为动态表情? | | +| perm | number | 使用权限? | | +| unlock_need_gift | number | 解锁需求礼物? | | +| unlock_need_level | number | 解锁需求等级? | | +| unlock_show_color | string | 解锁展示颜色? | | +| unlock_show_image | string | 解锁展示图片? | | +| unlock_show_text | string | 解锁展示文字? | | +| url | string | 表情图片 URL | | +| width | number | 表情图片宽度 | | + +`data.data[].top_show` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | ---- | ---- | +| top_left | object | | 左上 | +| top_right | object | | 右上 | + +`data.data[].top_show.top_left` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ----- | ---- | +| image | string | 图片? | | +| text | string | 文字 | | + +`data.data[].top_show.top_right` 对象: + +同 `data.data[].top_show.top_left` 对象 + +`data.data[].top_show_recent` 对象: + +同 `data.data[].top_show` 对象 + +`data.data[].top_show_recent.top_left` 对象: + +同 `data.data[].top_show.top_left` 对象 + +`data.data[].top_show_recent.top_right` 对象: + +同 `data.data[].top_show.top_left` 对象 + +**示例:** + +获取直播间 `14047` 的表情包, 平台为 `android` + +```shell +curl -G 'https://api.live.bilibili.com/xlive/web-ucenter/v2/emoticon/GetEmoticons' \ +--url-query 'room_id=14047' \ +--url-query 'platform=android' \ +-b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data": { + "data": [ + { + "current_cover": "http://i0.hdslb.com/bfs/live/39b7667c2601e4da8019472f5e3df1f2278278b6.png", + "emoticons": [ + { + "bulge_display": 0, + "descript": "", + "emoji": "啊", + "emoticon_id": 331, + "emoticon_unique": "official_331", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/cbf2746062242e77bdcb9eb08edbf9b151fe0c2e.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "冲鸭", + "emoticon_id": 332, + "emoticon_unique": "official_332", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/dea7fbbc1c3d3c80f4c7b27263e13460f21874e4.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "upup", + "emoticon_id": 348, + "emoticon_unique": "official_348", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/38d84a4cd2f40069202ee13bbdca5b23d29710fb.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "星星向龙", + "emoticon_id": 343, + "emoticon_unique": "official_343", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/a69423be39b0f2a87dc74f2e44ead70de0eb0d4f.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "欧皇驾到", + "emoticon_id": 335, + "emoticon_unique": "official_335", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/650399e68d0d93df4b3f9e95e7437e83be7fbb1a.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "这个好耶", + "emoticon_id": 345, + "emoticon_unique": "official_345", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/2ce08b31618d3ad0d34877bf949ef0089a0438b7.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "泰裤辣", + "emoticon_id": 339, + "emoticon_unique": "official_339", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/82c38fc930ae764b4c6215f544bf8e1dba73b51c.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "闪避技能", + "emoticon_id": 337, + "emoticon_unique": "official_337", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/fa3febe6c62f3bcd042953141930d96fb8451e60.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "稳住能赢", + "emoticon_id": 342, + "emoticon_unique": "official_342", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/b3495aaa935b045bfc2e1d52738ea7b124e0d552.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "中奖喷雾", + "emoticon_id": 346, + "emoticon_unique": "official_346", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/c3cfa182d16564301d39e4c7e4c186dfb9fabf96.png", + "width": 200 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "赞", + "emoticon_id": 147, + "emoticon_unique": "official_147", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/bbd9045570d0c022a984c637e406cb0e1f208aa9.png", + "width": 150 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "妙啊", + "emoticon_id": 109, + "emoticon_unique": "official_109", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/7b7a2567ad1520f962ee226df777eaf3ca368fbc.png", + "width": 138 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "有点东西", + "emoticon_id": 113, + "emoticon_unique": "official_113", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/39e518474a3673c35245bf6ef8ebfff2c003fdc3.png", + "width": 186 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "很有精神", + "emoticon_id": 150, + "emoticon_unique": "official_150", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/e91cbe30b2db1e624bd964ad1f949661501f42f8.png", + "width": 201 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "泪目", + "emoticon_id": 103, + "emoticon_unique": "official_103", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/aa93b9af7ba03b50df23b64e9afd0d271955cd71.png", + "width": 144 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "赢麻了", + "emoticon_id": 128, + "emoticon_unique": "official_128", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/1d4c71243548a1241f422e90cd8ba2b75c282f6b.png", + "width": 156 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "钝角", + "emoticon_id": 133, + "emoticon_unique": "official_133", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/38cf68c25d9ff5d364468a062fc79571db942ff3.png", + "width": 153 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "干杯", + "emoticon_id": 149, + "emoticon_unique": "official_149", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/8fedede4028a72e71dae31270eedff5f706f7d18.png", + "width": 162 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "2333", + "emoticon_id": 124, + "emoticon_unique": "official_124", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/a98e35996545509188fe4d24bd1a56518ea5af48.png", + "width": 183 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "打call", + "emoticon_id": 146, + "emoticon_unique": "official_146", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/fa1eb4dce3ad198bb8650499830560886ce1116c.png", + "width": 195 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "多谢款待", + "emoticon_id": 148, + "emoticon_unique": "official_148", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/4609dad97c0dfa61f8da0b52ab6fff98e0cf1e58.png", + "width": 207 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "awsl", + "emoticon_id": 102, + "emoticon_unique": "official_102", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/328e93ce9304090f4035e3aa7ef031d015bbc915.png", + "width": 162 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "鸡汤来咯", + "emoticon_id": 137, + "emoticon_unique": "official_137", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/b371151503978177b237afb85185b0f5431d0106.png", + "width": 198 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "雀食", + "emoticon_id": 118, + "emoticon_unique": "official_118", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/7251dc7df587388a3933743bf38394d12a922cd7.png", + "width": 159 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "禁止套娃", + "emoticon_id": 108, + "emoticon_unique": "official_108", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/6a644577437d0bd8a314990dd8ccbec0f3b30c92.png", + "width": 204 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "暗中观察", + "emoticon_id": 104, + "emoticon_unique": "official_104", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/18af5576a4582535a3c828c3ae46a7855d9c6070.png", + "width": 156 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "保熟吗", + "emoticon_id": 105, + "emoticon_unique": "official_105", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/0e28444c8e2faef3169e98e1a41c487144d877d4.png", + "width": 162 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "比心", + "emoticon_id": 106, + "emoticon_unique": "official_106", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/1ba5126b10e5efe3e4e29509d033a37f128beab2.png", + "width": 132 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "咸鱼翻身", + "emoticon_id": 110, + "emoticon_unique": "official_110", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/7db4188c050f55ec59a1629fbc5a53661e4ba780.png", + "width": 180 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "mua", + "emoticon_id": 111, + "emoticon_unique": "official_111", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/08f1aebaa4d9c170aa79cbafe521ef0891bdf2b5.png", + "width": 165 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "来了来了", + "emoticon_id": 115, + "emoticon_unique": "official_115", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/61e790813c51eab55ebe0699df1e9834c90b68ba.png", + "width": 168 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "贴贴", + "emoticon_id": 116, + "emoticon_unique": "official_116", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/88b49dac03bfd5d4cb49672956f78beb2ebd0d0b.png", + "width": 162 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "牛牛牛", + "emoticon_id": 117, + "emoticon_unique": "official_117", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/343f7f7e87fa8a07df63f9cba6b776196d9066f0.png", + "width": 168 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "颠个勺", + "emoticon_id": 119, + "emoticon_unique": "official_119", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/625989e78079e3dc38d75cb9ac392fe8c1aa4a75.png", + "width": 195 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "好家伙", + "emoticon_id": 122, + "emoticon_unique": "official_122", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/c2650bf9bbc79b682a4b67b24df067fdd3e5e9ca.png", + "width": 165 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "下次一定", + "emoticon_id": 125, + "emoticon_unique": "official_125", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/cc2652cef69b22117f1911391567bd2957f27e08.png", + "width": 177 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "不上Ban", + "emoticon_id": 126, + "emoticon_unique": "official_126", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/eff44c1fc03311573e8817ca8010aca72404f65c.png", + "width": 231 + }, + { + "bulge_display": 0, + "descript": "", + "emoji": "上热榜", + "emoticon_id": 134, + "emoticon_unique": "official_134", + "emoticon_value_type": 0, + "height": 60, + "identity": 99, + "in_player_area": 1, + "is_dynamic": 1, + "perm": 1, + "unlock_need_gift": 0, + "unlock_need_level": 0, + "unlock_show_color": "", + "unlock_show_image": "", + "unlock_show_text": "", + "url": "http://i0.hdslb.com/bfs/live/83d5b9cdaaa820c2756c013031d34dac1fd4156b.png", + "width": 168 + } + ], + "pkg_descript": "官方表情(系统)", + "pkg_id": 1, + "pkg_name": "通用表情", + "pkg_perm": 1, + "pkg_type": 1, + "recently_used_emoticons": [], + "top_show": { + "top_left": { + "image": "", + "text": "通用表情" + }, + "top_right": { + "image": "", + "text": "" + } + }, + "top_show_recent": { + "top_left": { + "image": "", + "text": "" + }, + "top_right": { + "image": "", + "text": "" + } + }, + "unlock_identity": 0, + "unlock_need_gift": 0 + } + ], + "fans_brand": 1, + "purchase_url": null + }, + "message": "0", + "ttl": 1 +} +``` +</details> diff --git a/docs/live/follow_up_live.md b/docs/live/follow_up_live.md new file mode 100644 index 0000000..8c7d0a1 --- /dev/null +++ b/docs/live/follow_up_live.md @@ -0,0 +1,317 @@ +# 关注UP直播情况 + +## 用户关注的所有UP的直播情况 + +> https://api.live.bilibili.com/xlive/web-ucenter/user/following + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------|-----|------|-----|-------| +| page | num | 页码 | 非必要 | 默认为`1` | +| page_size | num | 每页的数据数量 | 非必要 | 有效值`1`-`10`, 默认为`10` | +| ignoreRecord | num | | | **尚不明确**<br />一般为`1` | +| hit_ab | bool | | | **尚不明确**<br />建议用`true`, 不填为`false` | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------| +| code | num | 返回值 | `0`:成功<br />`-101`:错误 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------| +| title | str | 标题 | | +| pageSize | num | 每页的数据数量 | | +| totalPage | num | 分页数量 | | +| list | obj | UP直播情况列表 | | +| count | num | 曾直播过的UP数量 | | +| never_lived_count | num | 未直播过的UP数量 | | +| live_count | num | 正在直播的UP数量 | | +| never_lived_faces | list | | **尚不明确** | + +`list`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-----|-----|-----------| +| roomid | num | 房间号 | | +| uid | num | 主播uid | | +| uname | str | 主播名 | | +| title | str | 直播标题 | | +| face | str | 主播头像 | | +| live_status | num | 是否正在直播 | `0`: 未直播<br />`1`: 正在直播 | +| record_num | num | | **尚不明确**<br />一般为0 | +| recent_record_id | str | | **尚不明确**<br />一般为空 | +| is_attention | num | | **尚不明确**<br />一般为1 | +| clipnum | num | | **尚不明确**<br />一般为0 | +| fans_num | num | | **尚不明确**<br />一般为0 | +| area_name | str | | **尚不明确**<br />一般为空 | +| area_value | str | | **尚不明确**<br />一般为空 | +| tags | str | | **尚不明确**<br />一般为空 | +| recent_record_id_v2 | str | | **尚不明确**<br />一般为空 | +| record_num_v2 | num | | **尚不明确**<br />一般为0 | +| record_live_time | num | 主播上一次直播结束的时间戳 | 正在直播时, 值为`0` | +| area_name_v2 | str | 频道的名称 | | +| room_news | str | 房间公告 | | +| switch | bool | | **尚不明确** | +| watch_icon | str | | **尚不明确** | +| text_small | str | | **尚不明确**<br />当主播正在直播时, 为在线人数(可能) | +| room_cover | str | 房间封面图片的URL | | +| parent_area_id | num | 父分区id | | +| area_id | num | 分区id | | + +**示例:** + +```shell +curl -G 'https://api.live.bilibili.com/xlive/web-ucenter/user/following' \ + -b 'SESSDATA=xxx' \ + --data-urlencode 'page=1' \ + --data-urlencode 'page_size=2' \ + --data-urlencode 'ignoreRecord=1' \ + --data-urlencode 'hit_ab=true' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "title": "哔哩哔哩直播 - 我的关注", + "pageSize": 2, + "totalPage": 26, + "list": [ + { + "roomid": 544853, + "uid": 686127, + "uname": "籽岷", + "title": "尝试双机位", + "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp", + "live_status": 0, + "record_num": 0, + "recent_record_id": "", + "is_attention": 1, + "clipnum": 0, + "fans_num": 0, + "area_name": "", + "area_value": "", + "tags": "", + "recent_record_id_v2": "", + "record_num_v2": 0, + "record_live_time": 1720011626, + "area_name_v2": "新游推荐", + "room_news": "", + "switch": true, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "text_small": "10.9万", + "room_cover": "http://i0.hdslb.com/bfs/live/new_room_cover/6c89c41d7695a080d31ae21c128f7759a7f419e5.jpg", + "parent_area_id": 6, + "area_id": 889 + }, + { + "roomid": 21686237, + "uid": 456664753, + "uname": "央视新闻", + "title": "央视新闻的直播间", + "face": "https://i1.hdslb.com/bfs/face/38a8db1c187b64a1412fafffbf350f8a3f436371.jpg", + "live_status": 0, + "record_num": 0, + "recent_record_id": "", + "is_attention": 1, + "clipnum": 0, + "fans_num": 0, + "area_name": "", + "area_value": "", + "tags": "", + "recent_record_id_v2": "", + "record_num_v2": 0, + "record_live_time": 1720001717, + "area_name_v2": "社科法律心理", + "room_news": "", + "switch": false, + "watch_icon": "https://i0.hdslb.com/bfs/live/0b265af1af0a77abc47aa3b8f1a5c0769d8bd23b.png", + "text_small": "0", + "room_cover": "http://i0.hdslb.com/bfs/live/d650d0e6e49397ea71d630be0a0e686679df16d8.jpg", + "parent_area_id": 11, + "area_id": 376 + } + ], + "count": 52, + "never_lived_count": 30, + "live_count": 0, + "never_lived_faces": [] + } +} + +``` + +</details> + +## 用户关注的所有UP且正在直播的列表(PC端) + +> https://api.live.bilibili.com/xlive/web-ucenter/v1/xfetter/GetWebList + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|------|----------------------------------|-----|------------------| +| hit_ab | bool | 会影响到json回复中部分字段的值,具体的影响效果会在下表列出。 | 非必要 | 默认为true,不填为false | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------| +| code | num | 返回值 | 0:成功<br />1:参数错误 | +| msg | str | 错误信息 | 默认为空 | +| message | str | 错误信息 | 默认为空 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|------|--------------|--------------------------------------------------------------------| +| rooms | list | 正在直播的房间列表 | 受到url参数hit_ab的影响:<br />true时能够获取到全部正在开播的直播间列表,<br />false时只会获取到前10个。 | +| list | list | 正在直播的房间列表 | 疑似与rooms字段的内容相同,并且同样受到url参数hit_ab的影响,受影响的效果同rooms字段。 | +| count | num | 关注列表中正在直播的人数 | 受到url参数hit_ab的影响:hit_ab为true时为0 | +| not_living_num | num | 关注列表中未开播的人数 | 受到url参数hit_ab的影响:hit_ab为false时为0 | + +`rooms`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|------|--------------|---------------------------------------------------------------| +| title | num | 直播间标题 | | +| room_id | num | 直播间真实id | | +| uid | num | 目标用户mid | | +| online | num | 观看人数 | 受url参数hit_ab的影响,hit_ab为true时为0 | +| live_time | num | 已经直播的时长(单位为秒) | 受url参数hit_ab的影响,hit_ab为true时为0 | +| live_status | num | 开播状态 | 0:未开播<br />1:直播中<br />2:轮播中 | +| short_id | num | 直播间短id | 受url参数hit_ab的影响,hit_ab为true时为0 | +| area | num | 分区id | 受url参数hit_ab的影响,hit_ab为true时为0 | +| area_name | str | 分区名称 | | +| area_v2_id | num | 二级分区id | | +| area_v2_name | str | 二级分区名 | | +| area_v2_parent_name | str | 二级父分区名 | | +| area_v2_parent_id | num | 二级父分区id | | +| uname | str | 用户名 | | +| face | str | 用户头像图片链接 | | +| tag_name | str | 标签名 | | +| tags | str | 标签列表 | | +| cover_from_user | str | 直播间封面图片链接 | 受url参数hit_ab的影响,hit_ab为true时为0 | +| keyframe | str | 关键帧图片链接 | 用于网页端悬浮展示。受url参数hit_ab的影响,hit_ab为true时为0 | +| lock_till | str | 未知 | 时间日期格式为:yyyy-MM-dd hh-mm-ss。<br />受url参数hit_ab的影响,hit_ab为true时为空字符串 | +| hidden_till | str | 未知 | 时间日期格式为:yyyy-MM-dd hh-mm-ss。<br />受url参数hit_ab的影响,hit_ab为true时为空字符串 | +| broadcast_type | num | 广播类型 | | +| is_encrypt | bool | 直播间是否加密 | | +| link | str | 直播间链接 | 受url参数hit_ab的影响,hit_ab为true时为空字符串 | +| nickname | str | 用户昵称 | 受url参数hit_ab的影响,hit_ab为true时为空字符串 | +| roomname | str | 直播间名称 | 受url参数hit_ab的影响,hit_ab为true时为空字符串 | +| roomid | num | 直播间真实id | 受url参数hit_ab的影响,hit_ab为true时为0 | +| liveTime | num | 开播时间 | 受url参数hit_ab的影响,hit_ab为true时为0 | + +**示例:** + +```shell +curl -G 'https://api.live.bilibili.com/xlive/web-ucenter/v1/xfetter/GetWebList' \ +--header 'Cookie: SESSDATA=xxx' \ +--data-urlencode 'hit_ab=false' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "rooms": [ + { + "title": "虚拟区优质跨年直播展演", + "room_id": 21496316, + "uid": 441666939, + "online": 2308, + "live_time": 17313, + "live_status": 1, + "short_id": 36, + "area": 6, + "area_name": "生活娱乐", + "area_v2_id": 744, + "area_v2_name": "虚拟Singer", + "area_v2_parent_name": "虚拟主播", + "area_v2_parent_id": 9, + "uname": "虚拟区官方频道", + "face": "https://i0.hdslb.com/bfs/face/a26b52bc7837ce6867802575d300ed70d5e6f2d5.jpg", + "tag_name": "", + "tags": "", + "cover_from_user": "https://i0.hdslb.com/bfs/live/new_room_cover/5d7a4526062cf1dc4e88e016638a856c1ac7db03.jpg", + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe12311645000021496316pkuk08.jpg", + "lock_till": "0000-00-00 00:00:00", + "hidden_till": "0000-00-00 00:00:00", + "broadcast_type": 0, + "is_encrypt": false, + "link": "https://live.bilibili.com/21496316?broadcast_type=0", + "nickname": "虚拟区官方频道", + "roomname": "虚拟区优质跨年直播展演", + "roomid": 21496316, + "liveTime": 1735617438 + } + ], + "list": [ + { + "title": "虚拟区优质跨年直播展演", + "room_id": 21496316, + "uid": 441666939, + "online": 2308, + "live_time": 17313, + "live_status": 1, + "short_id": 36, + "area": 6, + "area_name": "生活娱乐", + "area_v2_id": 744, + "area_v2_name": "虚拟Singer", + "area_v2_parent_name": "虚拟主播", + "area_v2_parent_id": 9, + "uname": "虚拟区官方频道", + "face": "https://i0.hdslb.com/bfs/face/a26b52bc7837ce6867802575d300ed70d5e6f2d5.jpg", + "tag_name": "", + "tags": "", + "cover_from_user": "https://i0.hdslb.com/bfs/live/new_room_cover/5d7a4526062cf1dc4e88e016638a856c1ac7db03.jpg", + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe12311645000021496316pkuk08.jpg", + "lock_till": "0000-00-00 00:00:00", + "hidden_till": "0000-00-00 00:00:00", + "broadcast_type": 0, + "is_encrypt": false, + "link": "https://live.bilibili.com/21496316?broadcast_type=0", + "nickname": "虚拟区官方频道", + "roomname": "虚拟区优质跨年直播展演", + "roomid": 21496316, + "liveTime": 1735617438 + } + ], + "count": 1, + "not_living_num": 0 + } +} +``` + +</details> \ No newline at end of file diff --git a/docs/live/gift.md b/docs/live/gift.md new file mode 100644 index 0000000..daa99a1 --- /dev/null +++ b/docs/live/gift.md @@ -0,0 +1,191 @@ +## 获取直播间内礼物 + +> https://api.live.bilibili.com/xlive/web-room/v1/giftPanel/roomGiftList + +*请求方式:GET* + +认证方式:无 (无需添加Cookie) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------------- | ---- | ---------- | ------ | -------------------------------- | +| platform | str | web | 必要 | | +| room_id | num | 主播房间号 | 必要 | | +| area_parent_id | num | 直播分区 | 非必要 | 不填写可能会获取不到部分活动礼物 | +| area_id | num | 直播子分区 | 非必要 | 不填写可能会获取不到部分活动礼物 | + +**json回复:** + + + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data.gift_config.base_config.list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | ------------------- | --------------------------- | +| id | num | 礼物id | | +| name | str | 礼物名字 | | +| price | num | 该值/1000的单位为元 | | +| type | num | | | +| coin_type | str | 一般为gold,即电池 | | +| effect | num | 特效类型? | 观察到可能出现的值为0,2,3 | +| stay_time | num | 礼物展示的时间? | 均为3 | +| animation_frame_num | num | 礼物动画帧数 | | +| desc | str | 礼物描述 | | +| img_basic | str | 礼物图片 | | +| gif | str | 礼物gif动画 | | + +**示例:** + +查询`room_id=23375552`的直播间礼物信息 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/giftPanel/roomGiftList?platform=pc&room_id=23174842' +``` + +## 获取盲盒概率 + +> https://api.live.bilibili.com/xlive/general-interface/v1/blindFirstWin/getInfo + +*请求方式:GET* + +认证方式:无 (无需添加Cookie) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ---- | ---------------- | ---- | +| gift_id | num | | 盲盒对应的礼物id | | + +**json回复:** + + + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | -------- | ---- | +| note_text | str | 描述 | | +| blind_price | num | 盲盒价格 | | +| blind_gift_name | str | 盲盒名字 | | +| gifts | array | 盲盒价格 | | + +`gifts数组`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------------- | ---- | +| gift_id | num | 爆出的礼物id | | +| price | num | 爆出的礼物价格 | | +| gift_name | str | 礼物名字 | | +| gift_img | str | 礼物图片 | | +| chance | str | 概率 | | + +**示例:** + +查询`心动盲盒`的概率 + +```shell +curl 'https://api.live.bilibili.com/xlive/general-interface/v1/blindFirstWin/getInfo?gift_id=32251' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "note_text": "每日1次机会,首次投喂盲盒时享首抽福利!", + "blind_price": 15000, + "gifts": [ + { + "gift_id": 32125, + "price": 2000, + "gift_name": "电影票", + "gift_img": "https://s1.hdslb.com/bfs/live/20864a10beaea541c7dce264d5bbc56676d63e4f.png", + "is_win_gift": 0, + "chance": "6%" + }, + { + "gift_id": 32126, + "price": 9000, + "gift_name": "棉花糖", + "gift_img": "https://s1.hdslb.com/bfs/live/b555682af41551c28f8ad19dc5c4ed87943c84f4.png", + "is_win_gift": 0, + "chance": "44.5%" + }, + { + "gift_id": 32128, + "price": 16000, + "gift_name": "爱心抱枕", + "gift_img": "https://s1.hdslb.com/bfs/live/824714c830966d7bec381e35ef808b1f478e21ee.png", + "is_win_gift": 1, + "chance": "45.56%" + }, + { + "gift_id": 32281, + "price": 40000, + "gift_name": "绮彩权杖", + "gift_img": "https://s1.hdslb.com/bfs/live/5cecbf274a4205ef76ed3f11c6540f0c6743363c.png", + "is_win_gift": 1, + "chance": "3.7%" + }, + { + "gift_id": 32282, + "price": 100000, + "gift_name": "时空之站", + "gift_img": "https://s1.hdslb.com/bfs/live/9ee53aedda3c891fdf23d35c14b3bdc4e0504a97.png", + "is_win_gift": 1, + "chance": "0.12%" + }, + { + "gift_id": 34894, + "price": 200000, + "gift_name": "蛇形护符", + "gift_img": "https://s1.hdslb.com/bfs/live/2127dd998083a8981ef4e31a4e6787ce5a4d0f9f.png", + "is_win_gift": 1, + "chance": "0.08%" + }, + { + "gift_id": 32132, + "price": 2233000, + "gift_name": "浪漫城堡", + "gift_img": "https://s1.hdslb.com/bfs/live/216fac597b3c5619d56ed332bcf5f880ea657e8e.png", + "is_win_gift": 1, + "chance": "0.04%" + } + ], + "friday_yq_id": 106472, + "is_first": true, + "ab_res": 1, + "uid": 451537183, + "conf_id": 51, + "pre_imgs": [ + { + "gift_id": 32132, + "preview_url": "http://i0.hdslb.com/bfs/live/e40708d0c8ef9505027ac33ad2a17a23e8e01139.mp4" + } + ], + "blind_gift_name": "心动盲盒" + } +} +``` +</details> \ No newline at end of file diff --git a/docs/live/guard.md b/docs/live/guard.md new file mode 100644 index 0000000..2938907 --- /dev/null +++ b/docs/live/guard.md @@ -0,0 +1,592 @@ +## 查询大航海成员 +> https://api.live.bilibili.com/xlive/app-room/v2/guardTab/topListNew + +*请求方式: GET* + +认证方式:无(无需Cookie) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | --------------------------------------- | +| roomid | num | 直播间号 | 必要 | | +| page | num | 页数 | 必要 | | +| ruid | num | 主播id | 必要 | | +| page_size | num | 页大小 | 非必要 | 默认20,最大30,若超过则作为10处理 | +| typ | num | 排序方式 | 非必要 | typ=3,4,5分别为按周/月/总航海亲密度排序 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------------- | --------------------------------------- | +| info | obj | 主播mid | | +| top3 | array | 整个列表的top3 | +| list | array | 大航海成员 | page=1时,list[0]得到的会是榜单的第四名 | + +`list`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------- | ----- | +| ruid | num | 主播UID | | +| rank | num | 榜单排名 | | +| accompany | num | 陪伴天数 | | +| uinfo | obj | 用户信息 | | +| score | num | 亲密度 | 恒为0 | + +`list`对象的`uinfo`: +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | -------------------------------------------------------- | +| uid | num | 用户UID | | +| base | obj | 用户基本信息 | | +| medal | obj | 粉丝牌 | 与[此处](/bilibili-API-collect/docs/user/medals)基本一致 | + +`list`对象的`uinfo`的`base`: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ------ | -------- | ---- | +| name | string | 用户名 | | +| face | string | 用戶头像 | | + + +**示例:** + +查询`23174842`直播间的大航海成员 + + +```shell +curl ' https://api.live.bilibili.com/xlive/app-room/v2/guardTab/topListNew?ruid=504140200&roomid=23174842&page=1' +``` + + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "info": { + "num": 23, + "page": 10, + "now": 1, + "achievement_level": 1, + "anchor_guard_achieve_level": 0, + "achievement_icon_src": "", + "buy_guard_icon_src": "https://i0.hdslb.com/bfs/live/4a481b491767f9d91165a4631252de4503d63a17.png", + "rule_doc_src": "", + "ex_background_src": "https://i0.hdslb.com/bfs/live/d0e938839a9dee733e8a7f9f6a3a132108ae22bc.png", + "color_start": "", + "color_end": "", + "tab_color": [ + "#4DDDDBD5", + "#26CFCBC0" + ], + "title_color": [ + "#FFC9CCD0", + "#FF9499A0" + ] + }, + "list": [ + { + "ruid": 504140200, + "rank": 4, + "accompany": 36, + "uinfo": { + "uid": 432911315, + "base": { + "name": "幻想乡的年华", + "face": "https://i2.hdslb.com/bfs/face/5ddde7a8466aa2d60d082ccfc08a0267445b193b.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "幻想乡的年华", + "face": "https://i2.hdslb.com/bfs/face/5ddde7a8466aa2d60d082ccfc08a0267445b193b.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "软饭兔", + "level": 25, + "color_start": 398668, + "color_end": 6850801, + "color_border": 16771156, + "color": 398668, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 504140200, + "guard_level": 2, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": null, + "title": null, + "guard": { + "level": 2, + "expired_str": "" + }, + "uhead_frame": null, + "guard_leader": null + }, + "score": 0 + }, + { + "ruid": 504140200, + "rank": 5, + "accompany": 513, + "uinfo": { + "uid": 7816639, + "base": { + "name": "在这样的时光", + "face": "https://i1.hdslb.com/bfs/face/3b0091dda76e095351907e9c708b9571716aa3e1.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "在这样的时光", + "face": "https://i1.hdslb.com/bfs/face/3b0091dda76e095351907e9c708b9571716aa3e1.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "软饭兔", + "level": 30, + "color_start": 2951253, + "color_end": 10329087, + "color_border": 6809855, + "color": 2951253, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 504140200, + "guard_level": 3, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#9660E5CC", + "v2_medal_color_end": "#9660E5CC", + "v2_medal_color_border": "#D47AFFFF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C00A099", + "user_receive_count": 0 + }, + "wealth": null, + "title": null, + "guard": { + "level": 3, + "expired_str": "" + }, + "uhead_frame": null, + "guard_leader": null + }, + "score": 0 + } + ], + "top3": [ + { + "ruid": 504140200, + "rank": 1, + "accompany": 306, + "uinfo": { + "uid": 85743027, + "base": { + "name": "-小fa---", + "face": "https://i0.hdslb.com/bfs/face/82b2d0fef27b7b69be0d121b3ef0491504bbaae8.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "-小fa---", + "face": "https://i0.hdslb.com/bfs/face/82b2d0fef27b7b69be0d121b3ef0491504bbaae8.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "软饭兔", + "level": 30, + "color_start": 2951253, + "color_end": 10329087, + "color_border": 16771156, + "color": 2951253, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 504140200, + "guard_level": 2, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#9660E5CC", + "v2_medal_color_end": "#9660E5CC", + "v2_medal_color_border": "#D47AFFFF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C00A099", + "user_receive_count": 0 + }, + "wealth": null, + "title": null, + "guard": { + "level": 2, + "expired_str": "" + }, + "uhead_frame": null, + "guard_leader": null + }, + "score": 0 + }, + { + "ruid": 504140200, + "rank": 2, + "accompany": 1005, + "uinfo": { + "uid": 28601039, + "base": { + "name": "捏软软的上帝", + "face": "https://i2.hdslb.com/bfs/face/1f2a9b20294452d5c6ce9f40c66b186ef57b92e5.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "捏软软的上帝", + "face": "https://i2.hdslb.com/bfs/face/1f2a9b20294452d5c6ce9f40c66b186ef57b92e5.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "软饭兔", + "level": 29, + "color_start": 2951253, + "color_end": 10329087, + "color_border": 16771156, + "color": 2951253, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 504140200, + "guard_level": 2, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#9660E5CC", + "v2_medal_color_end": "#9660E5CC", + "v2_medal_color_border": "#D47AFFFF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C00A099", + "user_receive_count": 0 + }, + "wealth": null, + "title": null, + "guard": { + "level": 2, + "expired_str": "" + }, + "uhead_frame": null, + "guard_leader": null + }, + "score": 0 + }, + { + "ruid": 504140200, + "rank": 3, + "accompany": 95, + "uinfo": { + "uid": 3546834244995088, + "base": { + "name": "老实逸流-恩师软软riu", + "face": "https://i1.hdslb.com/bfs/face/0b1f95d926acfb06c8d7d9c66d2e1fabf3e1a3c4.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": { + "name": "老实逸流-恩师软软riu", + "face": "https://i1.hdslb.com/bfs/face/0b1f95d926acfb06c8d7d9c66d2e1fabf3e1a3c4.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "软饭兔", + "level": 28, + "color_start": 398668, + "color_end": 6850801, + "color_border": 16771156, + "color": 398668, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 504140200, + "guard_level": 2, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": null, + "title": null, + "guard": { + "level": 2, + "expired_str": "" + }, + "uhead_frame": null, + "guard_leader": null + }, + "score": 0 + } + ], + "my_follow_info": { + "accompany_days": 0, + "auto_renew": 0, + "renew_remind": { + "content": "", + "type": 0, + "hint": "" + }, + "rank": 0, + "ruid": 0, + "uinfo": null, + "expired_time": "" + }, + "guard_warn": { + "is_warn": 0, + "warn": "", + "expired": 0, + "will_expired": 0, + "address": "" + }, + "exist_benefit": false, + "remind_benefit": "立即上船", + "ab": { + "guard_accompany_list": 1 + }, + "remind_msg": "头号粉丝大航海,上船后可上榜", + "typ": 0, + "extop": null, + "guard_leader": null, + "main_text": "", + "sub_text": "", + "btn_type": 1, + "prompt_text": "头号粉丝大航海,等你来上船" + } +} +``` + +</details> + + +## 查询粉丝团成员 + + +> https://api.live.bilibili.com/xlive/general-interface/v1/rank/getFansMembersRank + +*请求方式: GET* + +认证方式:无(无需Cookie) + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------------- | ------------------- | ----------------------------------------------------------------------------------------------- | +| page | num | 页数 | 必要 | | +| ruid | num | 主播id | 必要 | | +| page_size | num | 每页返回的数量 | 必要 | 最大30,若超过则作为10处理 | +| rank_type | num | 排序方式 | 非必要 | 1:按照粉丝牌还亮着的粉丝团成员的亲密度排序<br> 2:按照**所有**没上过舰的粉丝团成员的亲密度排序 | +| ts | num | 13位时间戳 | 当rank_type=2时必要 | 该值>=1000即可 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ----- | -------------- | ---- | +| item | array | 内容 | | +| num | num | 粉丝团成员数量 | +| medal_status | num | | + +`list`对象 + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | ---------------------------------------------------------------- | ---- | +| user_rank | num | 排名 | +| uid | num | 用户UID | +| name | str | 用户名 | +| face | str | 用户头像 | +| score | num | 亲密度 | +| medal_name | str | 粉丝牌名字 | +| level | num | 粉丝牌等级 | +| target_id | num | 主播UID | +| guard_level | num | 大航海类型,1,2,3分别为总督,提督,舰长 | +| medal_color_start | num | 粉丝牌渐变起始色 | +| medal_color_end | num | 粉丝牌渐变结束色 | +| medal_color_border | num | 粉丝牌边框颜色 | +| guard_icon | str | 大航海图标URL | +| uinfo_medal | obj | 粉丝牌,与[此处](/bilibili-API-collect/docs/user/medals)基本一致 | + + +**示例:** + +查询用户`504140200`的粉丝团成员 + +```shell +curl 'https://api.live.bilibili.com/xlive/general-interface/v1/rank/getFansMembersRank?ruid=504140200&page_size=10&page=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "item": [ + { + "user_rank": 1, + "uid": 85743027, + "name": "小软兔のfa", + "face": "https://i0.hdslb.com/bfs/face/bdbcabf8d927844ae4f8f9c65862077e29afb989.jpg", + "score": 50990540, + "medal_name": "软饭兔", + "level": 30, + "target_id": 504140200, + "special": "", + "guard_level": 3, + "medal_color_start": 2951253, + "medal_color_end": 10329087, + "medal_color_border": 6809855, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "uinfo_medal": { + "name": "软饭兔", + "level": 30, + "color_start": 2951253, + "color_end": 10329087, + "color_border": 6809855, + "color": 0, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 504140200, + "guard_level": 3, + "score": 50990540, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#9660E5CC", + "v2_medal_color_end": "#9660E5CC", + "v2_medal_color_border": "#D47AFFFF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C00A099", + "user_receive_count": 0 + }, + "tag": null, + "is_pokeable": false + }, + { + "user_rank": 2, + "uid": 7816639, + "name": "在这样的时光", + "face": "https://i1.hdslb.com/bfs/face/3b0091dda76e095351907e9c708b9571716aa3e1.jpg", + "score": 50704568, + "medal_name": "软饭兔", + "level": 30, + "target_id": 504140200, + "special": "", + "guard_level": 3, + "medal_color_start": 2951253, + "medal_color_end": 10329087, + "medal_color_border": 6809855, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "uinfo_medal": { + "name": "软饭兔", + "level": 30, + "color_start": 2951253, + "color_end": 10329087, + "color_border": 6809855, + "color": 0, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 504140200, + "guard_level": 3, + "score": 50704568, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#9660E5CC", + "v2_medal_color_end": "#9660E5CC", + "v2_medal_color_border": "#D47AFFFF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C00A099", + "user_receive_count": 0 + }, + "tag": null, + "is_pokeable": false + } + ], + "num": 89, + "medal_status": 1 + } +} +``` + +</details> diff --git a/docs/live/info.md b/docs/live/info.md new file mode 100644 index 0000000..0ad09b8 --- /dev/null +++ b/docs/live/info.md @@ -0,0 +1,1269 @@ +# 直播间基本信息 + +## 获取直播间信息 + +> https://api.live.bilibili.com/room/v1/Room/get_info + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------|-----|------|-----|-------| +| room_id | num | 直播间号 | 必要 | 可以为短号 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------| +| code | num | 返回值 | 0:成功<br />1:不存在 | +| message | str | 错误信息 | | +| msg | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------------|-----------|--------|-----------------------------| +| uid | num | 主播mid | | +| room_id | num | 直播间长号 | | +| short_id | num | 直播间短号 | 为0是无短号 | +| attention | num | 关注数量 | | +| online | num | 观看人数 | | +| is_portrait | bool | 是否竖屏 | | +| description | str | 描述 | | +| live_status | num | 直播状态 | 0:未开播<br />1:直播中<br />2:轮播中 | +| area_id | num | 分区id | | +| parent_area_id | num | 父分区id | | +| parent_area_name | str | 父分区名称 | | +| old_area_id | num | 旧版分区id | | +| background | str | 背景图片链接 | | +| title | str | 标题 | | +| user_cover | str | 封面 | | +| keyframe | str | 关键帧 | 用于网页端悬浮展示 | +| is_strict_room | bool | 未知 | 未知 | +| live_time | str | 直播开始时间 | YYYY-MM-DD HH:mm:ss | +| tags | str | 标签 | ','分隔 | +| is_anchor | num | 未知 | 未知 | +| room_silent_type | str | 禁言状态 | | +| room_silent_level | num | 禁言等级 | | +| room_silent_second | num | 禁言时间 | 单位是秒 | +| area_name | str | 分区名称 | | +| pardants | str | 未知 | 未知 | +| area_pardants | str | 未知 | 未知 | +| hot_words | list(str) | 热词 | | +| hot_words_status | num | 热词状态 | | +| verify | str | 未知 | 未知 | +| new_pendants | obj | 头像框\大v | | +| up_session | str | 未知 | | +| pk_status | num | pk状态 | | +| pk_id | num | pk id | | +| battle_id | num | 未知 | | +| allow_change_area_time | num | | | +| allow_upload_cover_time | num | | | +| studio_info | obj | | | + +`new_pendants`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-----|-----|-------------------| +| frame | obj | 头像框 | | +| mobile_frame | obj | 同上 | 手机版, 结构一致, 可能null | +| badge | obj | 大v | | +| mobile_badge | obj | 同上 | 手机版, 结构一致, 可能null | + +`frame`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|------|--------|-----| +| name | str | 名称 | | +| value | str | 值 | | +| position | num | 位置 | | +| desc | str | 描述 | | +| area | num | 分区 | | +| area_old | num | 旧分区 | | +| bg_color | str | 背景色 | | +| bg_pic | str | 背景图 | | +| use_old_area | bool | 是否旧分区号 | | + +`badge`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|-----|-------------------------------------------| +| name | str | 类型 | v_person: 个人认证(黄) <br /> v_company: 企业认证(蓝) | +| position | num | 位置 | | +| value | str | 值 | | +| desc | str | 描述 | | + +`studio_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-------|-----|-----| +| status | num | | | +| master_list | array | | | + +**示例:** + +查询直播间`room_id=1`信息 + +```shell +curl -G 'https://api.live.bilibili.com/room/v1/Room/get_info' \ +--data-urlencode 'room_id=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "ok", + "message": "ok", + "data": { + "uid": 9617619, + "room_id": 5440, + "short_id": 1, + "attention": 11919499, + "online": 0, + "is_portrait": false, + "description": "欢迎加入bilibili《快乐运动研究社》,和B站UP主们一起探讨有关运动的经历感受,解决身体和情绪的“疑难杂症”,寻找适合自己的运动,一起跟练!本期我们一起探讨:运动健身能缓解社交恐惧吗?", + "live_status": 2, + "area_id": 145, + "parent_area_id": 1, + "parent_area_name": "娱乐", + "old_area_id": 6, + "background": "", + "title": "快乐运动研究社", + "user_cover": "https://i0.hdslb.com/bfs/live/new_room_cover/96943b8d106a777a34cf796421bb4254163b30e1.jpg", + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe08121926000000005440np0q7a.jpg", + "is_strict_room": false, + "live_time": "0000-00-00 00:00:00", + "tags": "", + "is_anchor": 0, + "room_silent_type": "", + "room_silent_level": 1, + "room_silent_second": 0, + "area_name": "视频聊天", + "pendants": "", + "area_pendants": "", + "hot_words": [ + "2333333", + "喂,妖妖零吗", + "红红火火恍恍惚惚", + "FFFFFFFFFF", + "Yooooooo", + "啪啪啪啪啪", + "666666666", + "老司机带带我", + "你为什么这么熟练啊", + "gg", + "prprpr", + "向大佬低头", + "请大家注意弹幕礼仪哦!", + "还有这种操作!", + "囍", + "打call", + "你气不气?", + "队友呢?" + ], + "hot_words_status": 0, + "verify": "", + "new_pendants": { + "frame": { + "name": "", + "value": "", + "position": 0, + "desc": "", + "area": 0, + "area_old": 0, + "bg_color": "", + "bg_pic": "", + "use_old_area": false + }, + "badge": { + "name": "v_company", + "position": 3, + "value": "", + "desc": "哔哩哔哩直播官方账号" + }, + "mobile_frame": { + "name": "", + "value": "", + "position": 0, + "desc": "", + "area": 0, + "area_old": 0, + "bg_color": "", + "bg_pic": "", + "use_old_area": false + }, + "mobile_badge": null + }, + "up_session": "", + "pk_status": 0, + "pk_id": 0, + "battle_id": 0, + "allow_change_area_time": 0, + "allow_upload_cover_time": 0, + "studio_info": { + "status": 0, + "master_list": [] + } + } +} +``` + +</details> + +## 获取用户对应的直播间状态 + +> https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|---------|-----|-----| +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|---------------------| +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------|-----|-----------|------------------| +| roomStatus | num | 直播间状态 | 0:无房间<br />1:有房间 | +| roundStatus | num | 轮播状态 | 0:未轮播<br />1:轮播 | +| live_status | num | 直播状态 | 0:未开播<br />1:直播中 | +| url | str | 直播间网页url | | +| title | str | 直播间标题 | | +| cover | str | 直播间封面url | | +| online | num | 直播间人气 | 值为上次直播时刷新 | +| roomid | num | 直播间id(短号) | | +| broadcast_type | num | 0 | | +| online_hidden | num | 0 | | + +**示例:** + +查询用户`mid=322892`的直播间信息 + +```shell +curl -G 'https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld' \ +--data-urlencode 'mid=322892' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "roomStatus": 1, + "roundStatus": 0, + "live_status": 1, + "url": "https://live.bilibili.com/5441", + "title": "好久没当黑铁主播了", + "cover": "http://i0.hdslb.com/bfs/live/room_cover/833f7ff506bac17c06010e8834922993657505b2.jpg", + "online": 268602, + "roomid": 5441, + "broadcast_type": 0, + "online_hidden": 0 + } +} +``` + +</details> + +## 获取房间页初始化信息 + +> https://api.live.bilibili.com/room/v1/Room/room_init + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|------------|-----|-----| +| id | num | 目标直播间号(短号) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------| +| code | num | 返回值 | 0:成功<br />60004:直播间不存在 | +| msg | str | 错误信息 | 默认为ok | +| message | str | 错误信息 | 默认为ok | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|------|--------------|------------------------------------| +| room_id | num | 直播间真实id | | +| short_id | num | 直播间id(短号) | | +| uid | num | 主播用户mid | | +| need_p2p | num | 是否p2p | | +| is_hidden | bool | 是否隐藏 | | +| is_locked | bool | 是否锁定 | | +| is_portrait | bool | 是否竖屏 | | +| live_status | num | 直播状态 | 0:未开播<br />1:直播中<br />2:轮播中 | +| hidden_till | num | 隐藏时间戳 | | +| lock_till | num | 锁定时间戳 | | +| encrypted | bool | 是否加密 | | +| pwd_verified | bool | 加密房间是否通过密码验证 | `encrypted`=true时才有意义 | +| live_time | num | 开播时间 | 未开播时为`-62170012800` | +| room_shield | num | 未知 | | +| is_sp | num | 是否为特殊直播间 | 0:普通直播间<br />1:付费直播间 | +| special_type | num | 特殊直播间标志 | 0:普通直播间<br />1:付费直播间<br />2:拜年祭直播间 | + +**示例:** + +查询直播间`id=76`的直播间信息 + +```shell +curl -G 'https://api.live.bilibili.com/room/v1/Room/room_init' \ +--data-urlencode 'id=76' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "ok", + "message": "ok", + "data": { + "room_id": 14073662, + "short_id": 76, + "uid": 50333369, + "need_p2p": 0, + "is_hidden": false, + "is_locked": false, + "is_portrait": false, + "live_status": 1, + "hidden_till": 0, + "lock_till": 0, + "encrypted": false, + "pwd_verified": false, + "live_time": 1602151186, + "room_shield": 1, + "is_sp": 0, + "special_type": 0 + } +} +``` + +</details> + +## 获取主播信息 + +> https://api.live.bilibili.com/live_user/v1/Master/info + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|---------|-----|-----| +| uid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------| +| code | num | 返回值 | 0:成功<br />1:参数错误 | +| msg | str | 错误信息 | 默认为空 | +| message | str | 错误信息 | 默认为空 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------|-----|-----------|------------| +| info | obj | 主播信息 | | +| exp | obj | 经验等级 | | +| follower_num | num | 主播粉丝数 | | +| room_id | num | 直播间id(短号) | | +| medal_name | str | 粉丝勋章名 | | +| glory_count | num | 主播荣誉数 | | +| pendant | str | 直播间头像框url | | +| link_group_num | num | 0 | **作用尚不明确** | +| room_news | obj | 主播公告 | | + +`info`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------|-----|---------|-------------------------| +| uid | num | 主播mid | | +| uname | str | 主播用户名 | | +| face | str | 主播头像url | | +| official_verify | obj | 认证信息 | | +| gender | num | 主播性别 | -1:保密<br />0:女<br />1:男 | + +`info`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|------------------------------| +| type | num | 主播认证类型 | -1:无<br />0:个人认证<br />1:机构认证 | +| desc | str | 主播认证信息 | | + +`exp`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-----|------|-----| +| master_level | obj | 主播等级 | | + +`exp`中的`master_level`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-------|--------|-----| +| level | num | 当前等级 | | +| color | num | 等级框颜色 | | +| current | array | 当前等级信息 | | +| next | array | 下一等级信息 | | + +`master_level`中的`current`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|------|-----| +| 0 | num | 升级积分 | | +| 1 | num | 总积分 | | + +`master_level`中的`next`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|------|-----| +| 0 | num | 升级积分 | | +| 1 | num | 总积分 | | + +`room_news`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------------|-----|------|-----| +| content | str | 公告内容 | | +| ctime | str | 公告时间 | | +| ctime_text | str | 公告日期 | | + +**示例:** + +查询直播间`mid=2`的主播信息 + +```shell +curl -G 'https://api.live.bilibili.com/live_user/v1/Master/info' \ +--data-urlencode 'uid=2' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "info": { + "uid": 2, + "uname": "碧诗", + "face": "https://i0.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "official_verify": { + "type": 0, + "desc": "bilibili个人认证:bilibili创始人(站长)" + }, + "gender": 1 + }, + "exp": { + "master_level": { + "level": 30, + "color": 10512625, + "current": [ + 2870000, + 11883810 + ], + "next": [ + 3730000, + 15613810 + ] + } + }, + "follower_num": 926624, + "room_id": 1024, + "medal_name": "逸国", + "glory_count": 0, + "pendant": "", + "link_group_num": 0, + "room_news": { + "content": "", + "ctime": "", + "ctime_text": "" + } + } +} +``` + +</details> + +## 获取直播间基本信息 + +> https://api.live.bilibili.com/xlive/web-room/v1/index/getRoomBaseInfo + +*请求方式: GET* + +注: 亦可用于批量获取 + +<!--{ + "gh": [745] +}--> + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | --- | - | - | +| req_biz | str | `web_room_componet` | 必要 | | +| room_ids | num | 直播间短ID | 不必要 | 多个重复该参数即可 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功<br />-400: 请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| by_uids | obj | 空 | | +| by_room_ids | obj | 直播间信息 | | + +`data`中的`by_room_ids`对象: + +以直播间长ID为键, 直播间信息为值的, 按键名降序排序 + +`by_room_ids`中的值对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| room_id | num | 直播间长ID | | +| uid | num | 主播用户mid | | +| area_id | num | 直播间分区ID | | +| live_status | num | 直播状态 | 0: 未开播<br />1: 直播中<br />2: 轮播中 | +| live_url | str | 直播间网页url | | +| parent_area_id | num | 直播间父分区ID | | +| title | str | 直播间标题 | | +| parent_area_name | str | 直播间父分区名称 | | +| area_name | str | 直播间分区名称 | | +| live_time | str | 开播时间 | `yyyy-MM-dd HH:mm:ss` | +| description | str | 直播间简介 | | +| tags | str | 直播间标签 | 以 `,` 分隔 | +| attention | num | 关注数 | | +| online | num | 在线人数 | | +| short_id | num | 直播间短ID | 为0是无短号 | +| uname | str | 主播用户名 | | +| cover | str | 直播间封面url | | +| background | str | 直播间背景url | | +| join_slide | num | 1 | | +| live_id | num | 0 | | +| live_id_str | str | "0" | | + +**示例:** + +```shell +curl -G 'https://api.live.bilibili.com/xlive/web-room/v1/index/getRoomBaseInfo' \ +--url-query 'req_biz=web_room_componet' \ +--url-query 'room_ids=1' \ +--url-query 'room_ids=3 +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "by_uids": {}, + "by_room_ids": { + "23058": { + "room_id": 23058, + "uid": 11153765, + "area_id": 190, + "live_status": 0, + "live_url": "https://live.bilibili.com/23058", + "parent_area_id": 5, + "title": "哔哩哔哩音悦台", + "parent_area_name": "电台", + "area_name": "唱见电台", + "live_time": "0000-00-00 00:00:00", + "description": "<p>这里是哔哩哔哩官方音乐台喔!</p><p>一起来听音乐吧ε=ε=(ノ≧∇≦)ノ</p><p>没想到蒸汽配圣诞下装,意外的很暴露呢=3=</p>\n", + "tags": "", + "attention": 225431, + "online": 0, + "short_id": 3, + "uname": "3号直播间", + "cover": "", + "background": "https://i0.hdslb.com/bfs/live/2836bb7b84c792e2c6aadfd4d1cce13484775fa3.jpg", + "join_slide": 1, + "live_id": 0, + "live_id_str": "0" + }, + "5440": { + "room_id": 5440, + "uid": 9617619, + "area_id": 701, + "live_status": 2, + "live_url": "https://live.bilibili.com/5440", + "parent_area_id": 11, + "title": "华为nova Flip新生之夜", + "parent_area_name": "知识", + "area_name": "科技·科学", + "live_time": "0000-00-00 00:00:00", + "description": "<p>华为novaFlip新生之夜正在直播中!备案号:Z0910417240818001<br></p>", + "tags": "", + "attention": 17848313, + "online": 0, + "short_id": 1, + "uname": "哔哩哔哩直播", + "cover": "http://i0.hdslb.com/bfs/live/1a862058e4211a5e73a8a1bf0635953ea08a4091.jpg", + "background": "http://i0.hdslb.com/bfs/live/ec518ede15d4c2547c83cb59f14752450c0889b0.jpg", + "join_slide": 1, + "live_id": 0, + "live_id_str": "0" + } + } + } +} +``` + +</details> + +## 批量查询直播间状态 + +> https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids + +*请求方式:GET/POST* + +认证方式:无 (无需添加Cookie) + +**url参数 (GET方式):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-------|------------|-----|-----| +| uids[] | array | 要查询的主播 mid | 必要 | | + +**正文参数 (POST方式):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|------|------------|-----|-----| +| uids | nums | 要查询的主播 mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-------------------------| +| code | num | 返回值 | 0:成功<br />-111:csrf校验失败 | +| message | str | 错误信息 | 默认为success | +| msg | str | 错误信息 | 默认为success | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----|-----|-------|------------| +| uid | str | 直播间信息 | 实际字段为主播mid | + +`uid`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------------------|-----|-----------|------------------------------| +| title | str | 直播间标题 | | +| room_id | num | 直播间房间号 | 直播间实际房间号 | +| uid | num | 主播mid | | +| online | num | 直播间在线人数 | | +| live_time | num | 开播时间戳,单位秒,未开播时为0 | | +| live_status | num | 直播间开播状态 | 0:未开播<br />1:正在直播<br />2:轮播中 | +| short_id | num | 直播间房间号 | 直播间短房间号,常见于签约主播 | +| area | num | 直播间分区id | | +| area_name | str | 直播间分区名 | | +| area_v2_id | num | 直播间新版分区id | | +| area_v2_name | str | 直播间新版分区名 | | +| area_v2_parent_id | num | 直播间父分区id | | +| area_v2_parent_name | str | 直播间父分区名 | | +| uname | str | 主播用户名 | | +| face | str | 主播头像url | | +| tag_name | str | 直播间标签 | | +| tags | str | 直播间自定标签 | | +| cover_from_user | str | 直播间封面url | | +| keyframe | str | 直播间关键帧url | | +| lock_till | str | 直播间封禁信息 | | +| hidden_till | str | 直播间隐藏信息 | | +| broadcast_type | num | 直播类型 | 0:普通直播<br />1:手机直播 | + +**示例:** + +查询用户`mid=672328094`的直播间信息 + +```shell +# GET方式 +curl -G 'https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids' +--data-urlencode 'uids[]=672328094' + +# POST方式 +curl 'https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids' \ +-H "Content-Type: application/json" \ +-d "{\"uids\": [672328094]}" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "672328094": { + "title": "【B限】玩个毛线", + "room_id": 22637261, + "uid": 672328094, + "online": 4087370, + "live_time": 0, + "live_status": 2, + "short_id": 0, + "area": 6, + "area_name": "生活娱乐", + "area_v2_id": 371, + "area_v2_name": "虚拟主播", + "area_v2_parent_name": "虚拟主播", + "area_v2_parent_id": 9, + "uname": "嘉然今天吃什么", + "face": "http://i2.hdslb.com/bfs/face/d399d6f5cf7943a996ae96999ba3e6ae2a2988de.jpg", + "tag_name": "日常,学习,萌宠,厨艺,手机直播", + "tags": "", + "cover_from_user": "http://i0.hdslb.com/bfs/live/new_room_cover/f3ed7a782c13086e536ec8bc6e9593bb4918f905.jpg", + "keyframe": "http://i0.hdslb.com/bfs/live-key-frame/keyframe041722000000226372619dr3m8.jpg", + "lock_till": "0000-00-00 00:00:00", + "hidden_till": "0000-00-00 00:00:00", + "broadcast_type": 0 + } + } +} +``` + +</details> + + +## 清晰度代码 + +| 代码 | 说明 | +|-------|-----| +| 30000 | 杜比 | +| 20000 | 4K | +| 10000 | 原画 | +| 400 | 蓝光 | +| 250 | 超清 | +| 150 | 高清 | +| 80 | 流畅 | + +## 获取直播间信息 + +> https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo + +*请求方式:GET* + +认证方式:无 (无需添加Cookie) + +**url参数 (GET方式):** + +| 参数名 | 类型 | 内容 | 必填 | 备注 | +|----------|-----|-------|-----|------------------------------------------------| +| room_id | num | 直播间id | 必要 | | +| protocol | str | 直播协议 | 必要 | 0:http_stream<br/>1:http_hls<br/>可多选, 使用英文逗号分隔 | +| format | str | 格式 | 必要 | 0:flv<br/>1:ts<br/>2:fmp4<br/>可多选, 使用英文逗号分隔 | +| codec | str | 编码格式 | 必要 | 0:AVC<br/>1:HEVC<br/>可多选, 使用英文逗号分隔 | +| qn | num | 清晰度编码 | | 默认`150`<br/>[清晰度代码](#清晰度代码) | +| platform | str | `web` | | | +| ptype | num | `8` | | | +| dolby | num | `5` | | | +| panorama | num | `1` | | | +| only_audio | num | 是否为音频流 | 非必要 | 默认为视频流,`1` 为音频流 | + +**json回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------------| +| code | num | 响应码 | 0:成功<br/>1002002:参数错误 | +| message | str | 0 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段名 | 类型 | 内容 | 备注 | +|-------------------|-------|-----------|---------------------------| +| room_id | num | 直播间id | | +| short_id | num | 直播间短id | | +| uid | num | 主播uid | | +| is_hidden | bool | 直播间是否被隐藏 | | +| is_locked | bool | 直播间是否被锁定 | | +| is_portrait | bool | 是否竖屏 | | +| live_status | num | 直播状态 | 0:未开播<br/>1:直播中<br/>2:轮播中 | +| hidden_till | num | 隐藏结束时间 | | +| lock_till | num | 封禁结束时间 | 秒级时间戳 | +| encrypted | bool | 直播间为加密直播间 | | +| pwd_verified | bool | 是否通过密码验证 | 当`encrypted`为`true`时才有意义 | +| live_time | num | 本次开播时间 | 秒级时间戳 | +| room_shield | num | | | +| all_special_types | array | | | +| playurl_info | obj | 直播流信息 | | + +`playurl_info`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|-----|-----|-----| +| conf_json | str | | | +| playurl | obj | | | + +`playurl`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|-------|-------|-----| +| cid | num | 直播间id | | +| g_qn_desc | array | 清晰度列表 | | +| stream | array | 直播流信息 | | +| p2p_data | obj | | | +| dolby_qn | | | | + +`g_qn_desc`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|-----|-------|-----------------| +| qn | num | 清晰度代码 | [清晰度代码](#清晰度代码) | +| desc | str | 清晰度描述 | | +| hdr_desc | str | | | +| attr_desc | | | | + +`stream`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------------|-------|------|-----| +| protocol_name | str | 协议名 | | +| format | array | 格式列表 | | + +`format`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------------|-------|------|-----| +| format_name | str | 格式名 | | +| codec | array | 编码列表 | | + +`codec`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------------|-------|-----------|-----------------| +| codec_name | str | 编码名 | | +| current_qn | num | 当前清晰度编码 | [清晰度代码](#清晰度代码) | +| accept_qn | array | 可用清晰度编码列表 | [清晰度代码](#清晰度代码) | +| base_url | str | 播放源路径 | | +| url_info | array | 域名信息列表 | | +| hdr_qn | null | | | +| dolby_type | num | | | +| attr_name | str | | | + +`url_info`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------------|-----|-------|-----| +| host | str | 域名 | | +| extra | str | URL参数 | | +| stream_ttl | num | | | + +`p2p_data`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|------|-----|-----| +| p2p | bool | | | +| p2p_type | num | | | +| m_p2p | bool | | | +| m_servers | null | | | + +**示例:** + +查询`room_id=3`的直播间信息 + +```shell +curl -L -X GET 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id=3&protocol=0,1&format=0,1,2&codec=0,1&qn=10000' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "room_id": 23058, + "short_id": 3, + "uid": 11153765, + "is_hidden": false, + "is_locked": false, + "is_portrait": false, + "live_status": 1, + "hidden_till": 0, + "lock_till": 0, + "encrypted": false, + "pwd_verified": true, + "live_time": 1671425336, + "room_shield": 1, + "all_special_types": [], + "playurl_info": { + "conf_json": "{\"cdn_rate\":10000,\"report_interval_sec\":150}", + "playurl": { + "cid": 23058, + "g_qn_desc": [ + { + "qn": 30000, + "desc": "杜比", + "hdr_desc": "", + "attr_desc": null + }, + { + "qn": 20000, + "desc": "4K", + "hdr_desc": "", + "attr_desc": null + }, + { + "qn": 10000, + "desc": "原画", + "hdr_desc": "", + "attr_desc": null + }, + { + "qn": 400, + "desc": "蓝光", + "hdr_desc": "HDR", + "attr_desc": null + }, + { + "qn": 250, + "desc": "超清", + "hdr_desc": "HDR", + "attr_desc": null + }, + { + "qn": 150, + "desc": "高清", + "hdr_desc": "", + "attr_desc": null + }, + { + "qn": 80, + "desc": "流畅", + "hdr_desc": "", + "attr_desc": null + } + ], + "stream": [ + { + "protocol_name": "http_stream", + "format": [ + { + "format_name": "flv", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000, + 150 + ], + "base_url": "/live-bvc/462997/live_11153765_9369560.flv?", + "url_info": [ + { + "host": "https://cn-hbcd-cu-02-20.bilivideo.com", + "extra": "expires=1674103815&pt=web&deadline=1674103815&len=0&oi=1963941079&platform=web&qn=10000&trid=1000061f434c07ac4f4184820bfb141e75e8&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=f494aa9e92e24943061fe5082494ec44&sk=33541455720f64c7671bc1480acfb176&p2p_type=1&src=57345&sl=1&free_type=0&sid=cn-hbcd-cu-02-20&chash=1&sche=ban&score=12&pp=rtmp&machinezone=jd&source=onetier&trace=0&site=92e80b6f3ebfd393e7d1c1e2e648d9c1&order=1", + "stream_ttl": 3600 + } + ], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "" + } + ] + } + ] + }, + { + "protocol_name": "http_hls", + "format": [ + { + "format_name": "ts", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000, + 150 + ], + "base_url": "/live-bvc/462997/live_11153765_9369560.m3u8?", + "url_info": [ + { + "host": "https://cn-hbcd-cu-02-20.bilivideo.com", + "extra": "expires=1674103815&len=0&oi=1963941079&pt=web&qn=10000&trid=1003061f434c07ac4f4184820bfb141e75e8&sigparams=cdn,expires,len,oi,pt,qn,trid&cdn=cn-gotcha01&sign=4f9bcec18e3afdca04b31ffb285ec915&sk=33541455720f64c7671bc1480acfb176&p2p_type=1&src=57345&sl=1&free_type=0&sid=cn-hbcd-cu-02-20&chash=1&sche=ban&score=12&pp=rtmp&machinezone=jd&source=onetier&trace=0&site=92e80b6f3ebfd393e7d1c1e2e648d9c1&order=1", + "stream_ttl": 3600 + } + ], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "" + } + ] + }, + { + "format_name": "fmp4", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000, + 150 + ], + "base_url": "/live-bvc/462997/live_11153765_9369560/index.m3u8?", + "url_info": [ + { + "host": "https://cn-hbcd-cu-02-20.bilivideo.com", + "extra": "expires=1674103815&len=0&oi=1963941079&pt=web&qn=10000&trid=1007061f434c07ac4f4184820bfb141e75e8&sigparams=cdn,expires,len,oi,pt,qn,trid&cdn=cn-gotcha01&sign=cc57dce528316d8389f2f34e7bd15f5c&sk=a99391b8b4d5779b2e32e41dbc989d2d&flvsk=33541455720f64c7671bc1480acfb176&p2p_type=1&src=57345&sl=1&free_type=0&sid=cn-hbcd-cu-02-20&chash=1&sche=ban&bvchls=1&score=12&pp=rtmp&machinezone=jd&source=onetier&trace=0&site=92e80b6f3ebfd393e7d1c1e2e648d9c1&order=1", + "stream_ttl": 3600 + }, + { + "host": "https://c1--cn-gotcha208.bilivideo.com", + "extra": "expires=1674103815&len=0&oi=1963941079&pt=web&qn=10000&trid=1007061f434c07ac4f4184820bfb141e75e8&sigparams=cdn,expires,len,oi,pt,qn,trid&cdn=cn-gotcha208&sign=2ff96adf5056c8dbee546955260fc2df&sk=a99391b8b4d5779b2e32e41dbc989d2d&p2p_type=1&src=57345&sl=1&free_type=0&pp=rtmp&machinezone=jd&source=onetier&trace=0&site=92e80b6f3ebfd393e7d1c1e2e648d9c1&order=2", + "stream_ttl": 3600 + } + ], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "" + } + ] + } + ] + } + ], + "p2p_data": { + "p2p": true, + "p2p_type": 1, + "m_p2p": false, + "m_servers": null + }, + "dolby_qn": null + } + } + } +} +``` + +</details> + + + + + +## 获取直播间主播信息 + +> https://api.live.bilibili.com/live_user/v1/UserInfo/get_anchor_in_room + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------|-----|------|-----|-------| +| roomid | num | 直播间号 | 必要 | 可以为短号 | + + +**json回复:** + + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------| +| code | num | 返回值 | 0:成功 (直播间不存在也为0) | +| message | str | 错误信息 | | +| msg | str | 错误信息 | | +| data | obj | 信息本体 | | + + + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------------|-----------|--------|-----------------------------| +| info | obj | 主播信息 | | +| level | obj | 直播等级 | | +| san | num | 主播san值 | 12满分 | + + +`info`对象: + + +| 字段 | 类型 | 内容 | 备注 | +|-------------------|------|------------------|----------| +| uid | num | 主播mid | | +| uname | str | 主播用户名 | | +| face | str | 主播头像URL | | +| rank | str | 主播排名 | | +| platform_user_level | num | 平台用户等级 | | +| mobile_verify | num | 手机验证状态 | | +| identification | num | 身份认证状态 | | +| official_verify | obj | 认证信息 | | +| vip_type | num | VIP类型 | | +| gender | num | 主播性别 | -1:保密<br />0:女<br />1:男 | + + +`info`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|------|----------|-----| +| type | num | 主播认证类型 | -1:无<br />0:个人认证<br />1:机构认证 | +| desc | str | 主播认证信息 | | +| role | num | 未知 | | + +`level`对象: + + + +| 字段 | 类型 | 内容 | 备注 | +|--------------|------|------------------|----------| +| uid | num | 用户ID | | +| cost | num | 消费金额 | | +| rcost | num | 充值金额 | | +| user_score | str | 用户积分 | | +| vip | num | VIP状态 | | +| vip_time | str | VIP到期时间 | | +| svip | num | SVIP状态 | | +| svip_time | str | SVIP到期时间 | | +| update_time | str | 更新时间 | | +| master_level | obj | 主播等级 | | +| user_level | num | 用户等级 | | +| color | num | 颜色值 | | +| anchor_score | num | 主播积分 | | + + + +`level` 中的 `master_level`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------|------|------------------|----------| +| level | num | 主播等级 | | +| color | num | 颜色值 | | +| current | list | 当前积分 | | +| next | list | 下一等级积分 | | +| anchor_score | num | 主播积分 | | +| upgrade_score | num | 升级积分 | | +| master_level_color | num | 主播等级颜色值 | | +| sort | str | 排名 | | + + +**示例:** + +查询`roomid=1`的直播间主播信息 + +```shell +curl -G 'https://api.live.bilibili.com/live_user/v1/UserInfo/get_anchor_in_room' \ +--data-urlencode 'roomid=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "info": { + "uid": 9617619, + "uname": "哔哩哔哩直播", + "face": "https://i0.hdslb.com/bfs/face/8f6a614a48a3813d90da7a11894ae56a59396fcd.jpg", + "rank": "10000", + "platform_user_level": 6, + "mobile_verify": 1, + "identification": 1, + "official_verify": { + "type": 1, + "desc": "哔哩哔哩直播官方账号", + "role": 3 + }, + "vip_type": 2, + "gender": -1 + }, + "level": { + "uid": 9617619, + "cost": 7782673656, + "rcost": 20199200291, + "user_score": "0", + "vip": 0, + "vip_time": "0000-00-00 00:00:00", + "svip": 0, + "svip_time": "0000-00-00 00:00:00", + "update_time": "2024-08-08 17:13:12", + "master_level": { + "level": 40, + "color": 16746162, + "current": [0, 147013810], + "next": [0, 147013810], + "anchor_score": 201992002, + "upgrade_score": 0, + "master_level_color": 16746162, + "sort": "\u003E10000" + }, + "user_level": 60, + "color": 16752445, + "anchor_score": 201992002 + }, + "san": 12 + } +} +``` + +</details> diff --git a/docs/live/live_area.md b/docs/live/live_area.md new file mode 100644 index 0000000..4f86ef9 --- /dev/null +++ b/docs/live/live_area.md @@ -0,0 +1,210 @@ +# 直播间分区 + +## 获取全部直播间分区列表 + +> https://api.live.bilibili.com/room/v1/Area/getList + +*请求方式:GET* + +直播分区共有两级,分别是父分区和子分区 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | ---------- | ------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | array | 父分区列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 父分区1 | | +| n | obj | 父分区(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ---- | +| id | num | 父分区id | | +| name | name | 父分区名 | | +| list | list | 子分区列表 | | + +`data`数组中的对象中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 子分区1 | | +| n | obj | 子分区(n+1) | | +| …… | obj | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ----------------- | ---------------- | +| id | str | 子分区id | | +| parent_id | str | 父分区id | | +| old_area_id | str | 旧分区id | | +| name | str | 子分区名 | | +| act_id | str | 0 | **作用尚不明确** | +| pk_status | str | ??? | **作用尚不明确** | +| hot_status | num | 是否为热门分区 | 0:否<br />1:是 | +| lock_status | str | 0 | **作用尚不明确** | +| pic | str | 子分区标志图片url | | +| parent_name | str | 父分区名 | | +| area_type | num | | | + +**示例:** + +如想在`网游`父分区下的`英雄联盟`分区开播,则查到子分区id为`86` + +```shell +curl 'https://api.live.bilibili.com/room/v1/Area/getList' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": [ + { + "id": 2, + "name": "网游", + "list": [ + { + "id": "86", + "parent_id": "2", + "old_area_id": "4", + "name": "英雄联盟", + "act_id": "0", + "pk_status": "0", + "hot_status": 1, + "lock_status": "0", + "pic": "http://i0.hdslb.com/bfs/vc/dcfb14f14ec83e503147a262e7607858b05d7ac0.png", + "parent_name": "网游", + "area_type": 0 + }, + { + "id": "252", + "parent_id": "2", + "old_area_id": "3", + "name": "逃离塔科夫", + "act_id": "0", + "pk_status": "0", + "hot_status": 1, + "lock_status": "0", + "pic": "http://i0.hdslb.com/bfs/vc/762a7de3dd5fe8165d1d55b232484a017941592f.png", + "parent_name": "网游", + "area_type": 0 + }, + { + "id": "80", + "parent_id": "2", + "old_area_id": "1", + "name": "绝地求生", + "act_id": "0", + "pk_status": "0", + "hot_status": 1, + "lock_status": "0", + "pic": "http://i0.hdslb.com/bfs/vc/43ca83fdcd10505eaeef1b76cf8ce642a53b94da.png", + "parent_name": "网游", + "area_type": 0 + }, + ………… + ] + }, + { + "id": 3, + "name": "手游", + "list": [ + { + "id": "35", + "parent_id": "3", + "old_area_id": "12", + "name": "王者荣耀", + "act_id": "0", + "pk_status": "0", + "hot_status": 1, + "lock_status": "0", + "pic": "http://i0.hdslb.com/bfs/vc/0fefa924760b2dd492a12dddafe179bfa1216918.png", + "parent_name": "手游", + "area_type": 0 + }, + ………… + ] + }, + { + "id": 6, + "name": "单机", + "list": [ + { + "id": "236", + "parent_id": "6", + "old_area_id": "1", + "name": "主机游戏", + "act_id": "0", + "pk_status": "0", + "hot_status": 1, + "lock_status": "0", + "pic": "http://i0.hdslb.com/bfs/vc/edb636ee59f902e3134a2790545045bddd70978e.png", + "parent_name": "单机", + "area_type": 0 + }, + ………… + ] + }, + { + "id": 1, + "name": "娱乐", + "list": [ + { + "id": "21", + "parent_id": "1", + "old_area_id": "10", + "name": "视频唱见", + "act_id": "0", + "pk_status": "1", + "hot_status": 1, + "lock_status": "0", + "pic": "http://i0.hdslb.com/bfs/vc/72b93ddafdf63c9f0b626ad546847a3c03c92b6f.png", + "cate_id": "12", + "parent_name": "娱乐", + "area_type": 0 + }, + ………… + ] + }, + { + "id": 5, + "name": "电台", + "list": [ + { + "id": "190", + "parent_id": "5", + "old_area_id": "10", + "name": "唱见电台", + "act_id": "0", + "pk_status": "0", + "hot_status": 0, + "lock_status": "0", + "pic": "http://i0.hdslb.com/bfs/vc/d22d7fafbf9b24e2bc3ce1df5eb9f006e6035e5d.png", + "parent_name": "电台", + "area_type": 0 + }, + ………… + ] + } + ] +} +``` + +</details> diff --git a/docs/live/live_bill.md b/docs/live/live_bill.md new file mode 100644 index 0000000..16c07fd --- /dev/null +++ b/docs/live/live_bill.md @@ -0,0 +1,328 @@ +# 直播流水 + +## 获取所有礼物列表 + +> https://api.live.bilibili.com/gift/v1/master/getGiftTypes + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | -------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为 success | +| message | str | 错误信息 | 默认为 success | +| data | array | 礼物列表 | | + +`data` 数组: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------- | ------------------------------------------------------------------------------ | +| gift_id | num | 礼物 id | | +| gift_name | str | 礼物名称 | | +| price | num | 瓜子数量 | 电池礼物为金瓜子数量,银瓜子礼物为银瓜子数量。 (金瓜子数量 / 100 = 电池数量) | + +*注:特殊礼物如舰长、提督、总督等没有 `price` 字段* + +<details> +<summary>查看响应示例:</summary> + +```jsonc + { + "code": 0, + "msg": "success", + "message": "success", + "data": [ + { + "gift_id": 10001, + "gift_name": "总督" + }, + { + "gift_id": 10002, + "gift_name": "提督" + }, + { + "gift_id": 10003, + "gift_name": "舰长" + }, + { + "gift_id": 12000, + "gift_name": "醒目留言" + }, + { + "gift_id": 1, + "price": 100, + "gift_name": "辣条" + }, + { + "gift_id": 3, + "price": 9900, + "gift_name": "B坷垃" + }, + { + "gift_id": 6, + "price": 1000, + "gift_name": "亿圆" + }, + { + "gift_id": 30426, + "price": 0, + "gift_name": "BLS能量石" + }, + { + "gift_id": 30706, + "price": 1000, + "gift_name": "生日快乐" + }, + { + "gift_id": 30707, + "price": 5200, + "gift_name": "生日蛋糕" + }, + { + "gift_id": 30708, + "price": 52000, + "gift_name": "生日王冠" + }, + { + "gift_id": 31049, + "price": 6600, + "gift_name": "干杯" + }, + { + "gift_id": 31116, + "price": 6600, + "gift_name": "干杯" + }, + { + "gift_id": 31251, + "price": 6600, + "gift_name": "干杯" + }, + { + "gift_id": 31531, + "price": 0, + "gift_name": "PK票" + }, + { + "gift_id": 31588, + "price": 19900, + "gift_name": "星河入梦" + }, + { + "gift_id": 31589, + "price": 131400, + "gift_name": "我星永恒" + }, + { + "gift_id": 32276, + "price": 0, + "gift_name": "粉丝团灯牌" + }, + // ... + ] + } +``` + +</details> + +## 获取流水 + +> https://api.live.bilibili.com/xlive/revenue/v1/giftStream/getReceivedGiftStreamNextList + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +请求参数: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ------------- | ----------------------- | ---------- | -------------------------------------- | +| limit | num | 一页有多少条目 | 必要 | | +| coin_type | num | 礼物类型 | 必要 | 0 为所有,1 为电池礼物,2 为银瓜子礼物 | +| begin_time | date / string | 流水的日期 | 必要 | 格式为 yyyy-MM-dd | +| uname | string | 筛选的用户名 | 非必要 | | +| last_id | num | 上一页页末的礼物列表 id | 翻页时必要 | 见下方 `list` 数组说明 | +| gift_id | num | 筛选的礼物 id | | | + +请求示例:`https://api.live.bilibili.com/xlive/revenue/v1/giftStream/getReceivedGiftStreamNextList?limit=20&coin_type=0&begin_time=2023-01-01` + +请求示例(翻页时):`https://api.live.bilibili.com/xlive/revenue/v1/giftStream/getReceivedGiftStreamNextList?last_id=13834493&limit=20&coin_type=0&begin_time=2023-01-01` + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | -------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为 success | +| message | str | 错误信息 | 默认为 success | +| data | object | 流水 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ----- | -------------- | -------------- | +| has_more | num | 是否由下一页 | 1 为是,0 为否 | +| total_hamster | num | 总的金仓鼠收益 | | +| list | array | 礼物列表 | | + +`list` 数组: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---------- | ------------------------------------- | -------------------------- | +| uid | num | 送礼用户的 uid | | +| uname | str | 用户名 | | +| time | date / str | 送礼时间 | | +| gift_id | num | 礼物 id | | +| gift_name | str | 礼物名字 | | +| gift_img | str | 礼物图片链接 | | +| gift_num | num | 礼物数量 | | +| hamster | num | 金仓鼠数量 | | +| gold | num | 礼物价值(金瓜子) | | +| silver | num | 礼物价值(银瓜子) | | +| ios_hamster | num | 由 iOS 端送出的礼物所收到的金仓鼠 | | +| normal_hamster | num | 一般情况下收到的金仓鼠 | | +| ios_gold | num | 由 iOS 端送出的礼物所收到的金瓜子数量 | | +| normal_gold | num | 一般情况下收到的金瓜子数量 | | +| is_hybrid | bool | 是否混合 | 作用不明 | +| id | num | 此项 id | 用于翻页 | +| is_open_platfrom | num | 是否开放平台 | 作用不明 | +| open_platfrom_rate | num | 开放平台比率 (?) | 作用不明 | +| receive_title | str | | 作用不明 ,一般为 `"主播"` | +| room_id | num | 送礼房间id | 如果礼物为上舰,此项为 `0` | + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "uid": 0000000000, + "uname": "XXXXXXX", + "time": "2023-01-01 00:00:00", + "gift_id": 31216, + "gift_name": "i了i了", + "gift_img": "https://s1.hdslb.com/bfs/live/1157a445487b39c0b7368d91b22290c60fa665b2.png", + "gift_num": 1, + "hamster": 50, + "gold": 100, + "silver": 0, + "ios_hamster": 0, + "normal_hamster": 50, + "ios_gold": 0, + "normal_gold": 100, + "is_hybrid": false, + "id": 14269551, + "is_open_platfrom": 0, + "open_platfrom_rate": 0, + "receive_title": "主播", + "room_id": 000001 + }, + { + "uid": 0000000000, + "uname": "XXXXXXX", + "time": "2023-01-01 00:00:00", + "gift_id": 10003, + "gift_name": "舰长", + "gift_img": "https://i0.hdslb.com/bfs/live/f1be2a2d5b227ce72641de1ad64bcc7f9e4111c3.png", + "gift_num": 1, + "hamster": 69000, + "gold": 138000, + "silver": 0, + "ios_hamster": 0, + "normal_hamster": 69000, + "ios_gold": 0, + "normal_gold": 138000, + "is_hybrid": false, + "id": 14258453, + "is_open_platfrom": 0, + "open_platfrom_rate": 0, + "receive_title": "主播", + "room_id": 000000 + }, + { + "uid": 0000000000, + "uname": "XXXXXXX", + "time": "2023-01-01 00:00:00", + "gift_id": 31036, + "gift_name": "小花花", + "gift_img": "https://s1.hdslb.com/bfs/live/8b40d0470890e7d573995383af8a8ae074d485d9.png", + "gift_num": 1, + "hamster": 50, + "gold": 100, + "silver": 0, + "ios_hamster": 0, + "normal_hamster": 50, + "ios_gold": 0, + "normal_gold": 100, + "is_hybrid": false, + "id": 14243903, + "is_open_platfrom": 0, + "open_platfrom_rate": 0, + "receive_title": "主播", + "room_id": 000001 + }, + { + "uid": 0000000000, + "uname": "XXXXXXX", + "time": "2023-01-01 00:00:00", + "gift_id": 30047, + "gift_name": "友谊的小船", + "gift_img": "https://s1.hdslb.com/bfs/live/b33c94c51b669bd88f811ecf5f4e34a1db22a648.png", + "gift_num": 1, + "hamster": 2450, + "gold": 4900, + "silver": 0, + "ios_hamster": 0, + "normal_hamster": 2450, + "ios_gold": 0, + "normal_gold": 4900, + "is_hybrid": false, + "id": 14242683, + "is_open_platfrom": 0, + "open_platfrom_rate": 0, + "receive_title": "主播", + "room_id": 000001 + }, + { + "uid": 0000000000, + "uname": "XXXXXXX", + "time": "2023-01-01 00:00:00", + "gift_id": 31738, + "gift_name": "粉丝团灯牌", + "gift_img": "https://s1.hdslb.com/bfs/live/cbed3bb0a894369b49ceaf0b5337b4491b75ac42.png", + "gift_num": 1, + "hamster": 0, + "gold": 1000, + "silver": 1000, + "ios_hamster": 0, + "normal_hamster": 0, + "ios_gold": 0, + "normal_gold": 0, + "is_hybrid": false, + "id": 14237376, + "is_open_platfrom": 0, + "open_platfrom_rate": 0, + "receive_title": "主播", + "room_id": 000001 + } + ], + "has_more": 1, + "total_hamster": 122050 + } +} +``` + +</details> diff --git a/docs/live/live_data.md b/docs/live/live_data.md new file mode 100644 index 0000000..5cec881 --- /dev/null +++ b/docs/live/live_data.md @@ -0,0 +1,183 @@ +# 直播数据 + +## 获取直播场次的直播数据 + +> https://api.live.bilibili.com/xlive/app-blink/v1/live/StopLiveData + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +只能获取自己的直播数据。最好在直播结束时立即请求,否则直播时长可能不准确。 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | 若不提供将会获得无效数据 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功<br />-101:未登录 | +| message | str | 提示信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| LiveTime | num | 该直播场次的直播时长 | 单位:秒,直播结束后还会增长 | +| AddFans | num | 该直播场次的新增粉丝 | | +| HamsterRmb | num | 该直播场次的收益 | | +| NewFansClub | num | 该直播场次新获得粉丝勋章数量 | | +| DanmuNum | num | 该直播场次的弹幕条数 | | +| MaxOnline | num | 该直播场次的最大在线? | [需要验证] | +| WatchedCount | num | 该直播场次的看过人数 | | + +**示例:** + +获取自己的直播数据 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/live/StopLiveData?live_key=634808443264569139' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "LiveTime": 77603, + "AddFans": 0, + "HamsterRmb": 0, + "NewFansClub": 0, + "DanmuNum": 3, + "MaxOnline": 13, + "WatchedCount": 2 + } +} +``` + +</details> + +## 获取直播表现 + +> https://api.live.bilibili.com/xlive/app-blink/v1/date/Overview + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功<br />-101:未登录 | +| message | str | 提示信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| graph | arr | 图表数据 | 在界面显示为雷达图 | +| propose | null | (?) | | + +`data.graph` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 数据类别 | | +| … | obj | 数据类别 | | + +`data.graph` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| name | str | 显示的名称 | | +| index | str | 类别标识 | | +| me | num | 自己在这个类别的数值 | | +| max | num | 这个类别最外侧那条线的数值 | | +| aver | num | 同水平主播在这个类别的数值 | | + +**示例:** + +获取自己的直播表现 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/date/Overview' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "graph": [ + { + "name": "收益", + "index": "income", + "me": 0, + "max": 9.27, + "aver": 8.04 + }, + { + "name": "累计观看", + "index": "watchedCount", + "me": 5.13, + "max": 7.01, + "aver": 6.17 + }, + { + "name": "新增粉丝", + "index": "fans", + "me": 0, + "max": 2.58, + "aver": 0 + }, + { + "name": "用户平均观看时长", + "index": "watchTime", + "me": 9.31, + "max": 11.82, + "aver": 10.88 + }, + { + "name": "开播时长", + "index": "broadcast", + "me": 17.57, + "max": 17.42, + "aver": 16.6 + }, + { + "name": "弹幕数量", + "index": "barrage", + "me": 7.37, + "max": 8.02, + "aver": 6.91 + } + ], + "propose": null + } +} +``` + +</details> diff --git a/docs/live/live_replay.md b/docs/live/live_replay.md new file mode 100644 index 0000000..e158cbc --- /dev/null +++ b/docs/live/live_replay.md @@ -0,0 +1,2147 @@ +# 直播回放 + +<!-- 网页端: https://link.bilibili.com/#/my-room/live-record ;移动端: https://live.bilibili.com/p/html/live-app-playback/index.html#new --> + +注: 直播回放相关接口较新,随时可能出现变化。 + +## 获取直播回放列表 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetReplayList + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +只能获取自己14天的回放,详细信息请查看[对应页面](https://link.bilibili.com/#/my-room/live-record) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| page | num | 页码 | 非必要 | 默认第1页 | +| page_size | num | 每页内容数量 | 非必要 | 默认30项,最大30项 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功<br />-101:未登录 | +| message | str | 提示信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| replay_info | arr | 回放信息列表 | 无结果时为`null` | +| pagination | obj | 分页信息 | | +| archive_flag | bool | (?) | 作用尚不明确 | +| can\_edit | num | (?) | 作用尚不明确 | +| can_upload | bool | (?) | 作用尚不明确 | +| has_third_platform_live| bool | (?) | 作用尚不明确 | + +`data.replay_info` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| replay_id | num | 直播回放id | | +| live_info | obj | 直播信息 | | +| video_info | obj | 回放视频信息 | | +| alarm_info | obj | 警报信息 | | +| room_id | num | 直播间id | | +| live_key | str | 标记直播场次的key | | +| start_time | num | 直播开始秒时间戳 | 调用[开始直播](manage.md#开始直播)接口的时间 | +| end_time | num | 直播结束秒时间戳 | 调用[关闭直播](manage.md#关闭直播)接口的时间 | + +`data.replay_info[i].live_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| title | str | 直播标题 | 直播结束时的标题 | +| cover | str | 直播封面 | | +| live_time | num | 直播时间 | 同`data.replay_info[i].start_time` | +| live_type | num | 直播类型? | 作用尚不明确 | +| platform | str | 直播平台 | | + +`data.replay_info[i].video_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| replay_status | num | 回放状态 | 作用尚不明确 | +| estimated_time | str | 直播回放合成结束时间 | 未合成时为`"1970-01-01 08:00:00"` | +| duration | num | 直播时长 | 单位秒 | +| download_url | str | 下载链接片段 | 整场直播回放合成成功时存在<br />建议通过[请求整场直播回放下载链接](#请求整场直播回放下载链接)来获取下载链接 | +| alert_code | num | 快速检查警告代码 | 整场直播回放合成失败时不存在 | +| alert_message | str | 快速检查警告信息 | 整场直播回放合成失败时不存在 | + +`data.replay_info[i].alarm_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 回放合成警报代码 | | +| message | str | 回放合成错误信息 | | +| cur_time | num | 当前时间戳 | Unix秒时间戳 | +| is_ban_publish | bool | 是否禁止发布? | | + +`data.pagination` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| page | num | 请求的页码 | | +| page_size | num | 内容数量 | | +| total | num | 总计内容数量 | | + +**示例:** + +获取自己直播回放列表的第1页,每页2项 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetReplayList?page=1&page_size=2' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "replay_info": [ + { + "replay_id": 13517082, + "live_info": { + "title": "随缘摸鱼", + "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "live_time": 1756479520, + "live_type": 1, + "platform": "android_link" + }, + "video_info": { + "replay_status": -8, + "estimated_time": "1970-01-01 08:00:00", + "duration": 9350, + "alert_code": 2, + "alert_message": "录像时长远小于开播时长,请关注直播时网络状况" + }, + "alarm_info": { + "code": -8, + "message": "直播内容存在违规片段", + "cur_time": 1756496581, + "is_ban_publish": false + }, + "room_id": 1899237171, + "live_key": "637117671085969203", + "start_time": 1756479520, + "end_time": 1756488870 + }, + { + "replay_id": 13487274, + "live_info": { + "title": "随缘摸鱼", + "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "live_time": 1756385910, + "live_type": 1, + "platform": "android_link" + }, + "video_info": { + "replay_status": 2, + "estimated_time": "1970-01-01 08:00:00", + "duration": 14985, + "alert_code": 2, + "alert_message": "录像时长远小于开播时长,请关注直播时网络状况" + }, + "alarm_info": { + "code": 2, + "message": "录像生成失败,请稍后再试", + "cur_time": 1756496581, + "is_ban_publish": false + }, + "room_id": 1899237171, + "live_key": "636823272552664883", + "start_time": 1756385910, + "end_time": 1756400895 + } + ], + "pagination": { + "page": 1, + "page_size": 2, + "total": 16 + }, + "archive_flag": false, + "can_edit": 1, + "can_upload": false, + "has_third_platform_live": false + } +} +``` + +</details> + +## 获取某位主播的回放列表 + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetOtherSliceList + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +需要获得那位主播的授权才能获取数据。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_uid | num | 目标主播的uid | 必要 | | +| time_range | num | 回放列表的时间范围 | 非必要 | 默认获取近14天<br />1:近3天<br />2:近7天<br />3:近14天 | +| page | num | 页码 | 非必要 | 默认第1页 | +| page_size | num | 每页内容数量 | 非必要 | 默认30项,最大30项 | +| web_location | str | (?) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -101:未登录<br />0:成功<br />301:没有剪辑权限 | +| message | str | 提示信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 与[获取直播回放列表](#获取直播回放列表)接口的信息本体相同 | + +**示例:** + +获取某位主播的回放列表,他已授权你回放剪辑权限 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetOtherSliceList?live_uid=1&time_range=1&page=1&page_size=2' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "replay_info": [ + { + "replay_id": 14657830, + "live_info": { + "title": "随缘摸鱼", + "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "live_time": 1760352139, + "live_type": 1, + "platform": "android_link" + }, + "video_info": { + "replay_status": 2, + "estimated_time": "1970-01-01 08:00:00", + "duration": 858, + "alert_code": 2, + "alert_message": "录像时长远小于开播时长,请关注直播时网络状况" + }, + "alarm_info": { + "code": 2, + "message": "录像生成失败,请稍后再试", + "cur_time": 1760362012, + "is_ban_publish": false + }, + "room_id": 1899237171, + "live_key": "648437353747320627", + "start_time": 1760352139, + "end_time": 1760352997 + }, + { + "replay_id": 14646585, + "live_info": { + "title": "随缘摸鱼", + "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "live_time": 1760285326, + "live_type": 1, + "platform": "android_link" + }, + "video_info": { + "replay_status": 2, + "estimated_time": "1970-01-01 08:00:00", + "duration": 464, + "alert_code": 2, + "alert_message": "录像时长远小于开播时长,请关注直播时网络状况" + }, + "alarm_info": { + "code": 2, + "message": "录像生成失败,请稍后再试", + "cur_time": 1760362012, + "is_ban_publish": false + }, + "room_id": 1899237171, + "live_key": "648321565723987763", + "start_time": 1760285326, + "end_time": 1760285790 + } + ], + "pagination": { + "page": 1, + "page_size": 2, + "total": 4 + }, + "archive_flag": false, + "can_edit": 1, + "can_upload": false, + "has_third_platform_live": false + } +} +``` + +</details> + +## 获取已发布片段的信息 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetVideoSliceList + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +只能获取主播自己的已发布片段。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| page | num | 页码 | 非必要 | 默认第1页 | +| page_size | num | 每页内容数量 | 非必要 | 默认20项,最大20项 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功<br />-101:未登录 | +| message | str | 提示信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| list | arr | 切片信息 | | +| page | num | 请求的页码 | | +| page_size | num | 内容数量 | | +| total | num | 总计内容数量 | | + +`data.list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| silce_id | num | 切片id | | +| av_title | str | 切片标题 | | +| av_cover | str | 切片封面 | | +| av_status | num | 切片状态 | 1:发布中<br />2:已投稿<br />3:投稿失败 | +| avid | num | 切片视频的avid | 状态为2时存在 | +| ctime | str | 切片创建时间 | | +| start_tm | str | 切片开始时间 | | +| end_tm | str | 切片结束时间 | | +| av_duration | num | 切片时长 | 状态为2且创作中心出现有效视频时长时存在 | +| failed_reason | str | 失败原因 | 状态为3时存在,2024-09-01前发布失败的切片可能不存在 | +| live_type | num | (?) | 作用尚不明确 | +| cnt_play | num | 播放数 | 视频有播放时存在;若该页出现任意状态不为2的项也会不存在 | +| cnt_danmaku | num | 弹幕数 | 视频有弹幕时存在;若该页出现任意状态不为2的项也会不存在 | + +**示例:** + +获取自己第1页的已发布片段信息,每页3项 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetVideoSliceList?page=1&page_size=3' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "slice_id": 882357, + "av_title": "2025051720 error", + "av_cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "av_status": 1, + "ctime": "2025-05-18 18:13:13", + "start_tm": "2025-05-17 21:07:04", + "end_tm": "2025-05-17 21:16:00", + "live_type": 1 + }, + { + "slice_id": 879189, + "av_title": "2025051721 zzz 0", + "av_cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "av_status": 3, + "ctime": "2025-05-18 00:32:52", + "start_tm": "2025-05-17 21:07:34", + "end_tm": "2025-05-17 23:02:03", + "failed_reason": "duration_false", + "live_type": 1 + }, + { + "slice_id": 876259, + "av_title": "202505171449", + "av_cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "av_status": 2, + "avid": 114521830065531, + "ctime": "2025-05-17 14:49:18", + "start_tm": "2025-05-17 14:19:36", + "end_tm": "2025-05-17 14:23:48", + "av_duration": 341, + "live_type": 1 + } + ], + "page": 1, + "page_size": 3, + "total": 347 + } +} +``` + +</details> + +## 获取你为某位主播剪辑的已发布片段 + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetPublishedList + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +需要获得那位主播的授权才能获取数据。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_uid | num | 目标主播的uid | 必要 | | +| page | num | 页码 | 非必要 | 默认第1页 | +| page_size | num | 每页内容数量 | 非必要 | 默认20项,最大20项 | +| web_location | str | (?) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -101:未登录<br />0:成功<br />301:没有剪辑权限 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| slice_info | arr 或 null | 切片信息 | 无内容时为`null` | +| pagination | obj | 分页信息 | | + +`data.slice_info` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| slice_id | num | 切片id | | +| uid | num | 发布者uid? | | +| live_uid | num | 主播uid | | +| live_key | str | 标记直播场次的key | | +| title | str | 切片标题 | | +| cover | str | 切片封面 | 若未在[给某位主播投稿直播回放片段](#给某位主播投稿直播回放片段)接口中传递封面将会无此字段,同时及大可能导致发布失败且没有失败提示 | +| high_light_id | num | 绑定的高光时刻 | 在[给某位主播投稿直播回放片段](#给某位主播投稿直播回放片段)接口中提供相关参数时存在 | +| start_time | str | 片段开始时间 | | +| end_time | str | 片段结束时间 | | +| status | num | 切片状态 | 参见[获取已发布片段的信息](#获取已发布片段的信息)接口 | +| fail_reason | str | 失败提示 | 状态为3且有提示信息时存在 | +| filename | str | 切片视频文件名 | 内部使用,可作为参数传递给创作中心,视频合成完成时存在 | +| avid | num | 切片视频的avid | 状态为2时存在 | +| ctime | str | 切片创建时间 | | +| av_duration | num | 切片时长 | 状态为2且创作中心出现有效视频时长时存在 | +| live_type | num | (?) | 作用尚不明确 | + +`data.pagination` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| page | num | 请求的页码 | | +| page_size | num | 内容数量 | | +| total | num | 总计内容数量 | `data.slice_info`有内容时存在 | + +**示例:** + +获取为某位主播剪辑的已发布片段,他已授权你回放剪辑权限 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetPublishedList?live_uid=1&page=1&page_size=20' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "slice_info": [ + { + "slice_id": 4302, + "uid": 438160221, + "live_uid": 438160221, + "live_key": "648506223547911987", + "title": "test202510201450", + "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "high_light_id": 12810575, + "start_time": "2025-10-13 23:11:00", + "end_time": "2025-10-13 23:14:00", + "status": 3, + "fail_reason": "合成失败,重新编辑投稿试试~", + "ctime": "2025-10-20 14:50:18", + "live_type": 1 + }, + { + "slice_id": 4300, + "uid": 438160221, + "live_uid": 438160221, + "live_key": "648437353747320627", + "title": "test202510201318", + "start_time": "2025-10-13 18:42:36", + "end_time": "2025-10-13 18:43:36", + "status": 3, + "filename": "n251020tx1rbha851nt85y2fj21bygm8", + "ctime": "2025-10-20 13:41:00", + "live_type": 1 + }, + { + "slice_id": 4299, + "uid": 438160221, + "live_uid": 438160221, + "live_key": "648437353747320627", + "title": "test202510201318", + "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "start_time": "2025-10-13 18:42:35", + "end_time": "2025-10-13 18:43:35", + "status": 2, + "filename": "n251020tx2u500g1krssxg3om5ou8bdw", + "avid": 115404865274992, + "ctime": "2025-10-20 13:36:44", + "av_duration": 63, + "live_type": 1 + } + ], + "pagination": { + "page": 1, + "page_size": 20, + "total": 4 + } + } +} +``` + +</details> + +## 获取回放剪辑草稿列表 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetDraftList + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +只能获取主播自己的回放剪辑草稿。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| page | num | 页码 | 非必要 | 默认第1页 | +| page_size | num | 每页内容数量 | 非必要 | 默认30项,最大30项 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -101:未登录<br />0:成功<br />301:没有剪辑权限 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| draft_info | arr | 草稿信息 | 无结果时为`null` | +| pagination | obj | 分页信息 | | + +`data.draft_info` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| id | num | 回放剪辑id | | +| title | str | 回放剪辑标题 | | +| cover | str | 回放剪辑封面 | 有封面时存在;若不存在将使用 https://s1.hdslb.com/bfs/static/blive/blfe-link-center/static/img/default.187078d.png | +| live\_key | str | 标记直播场次的key | | +| ctime | str | 回放剪辑创建时间 | | +| live_start_time | str | 直播开始时间 | | +| live_end_time | str | 直播结束时间 | | +| live_type | num | (?) | 作用尚不明确 | + +`data.pagination` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| page | num | 请求的页码 | | +| page_size | num | 内容数量 | | +| total | num | 总计内容数量 | | + +**示例:** + +请求自己的回放剪辑草稿列表 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetDraftList?page=1&page_size=12' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "draft_info": [ + { + "id": 988275, + "title": "直播场次 2025-05-19 20:45:04", + "live_key": "609431465787395891", + "ctime": "2025-05-22 01:08:20", + "live_start_time": "2025-05-19 20:45:04", + "live_end_time": "2025-05-20 09:40:13", + "live_type": 1 + }, + { + "id": 987665, + "title": "直播场次 2025-05-19 20:45:04 切片", + "cover": "http://i0.hdslb.com/bfs/live/9bdf1df3d823734c59382120a9a7c10b177dbefd.png", + "live_key": "609431465787395891", + "ctime": "2025-05-21 20:28:48", + "live_start_time": "2025-05-19 20:45:04", + "live_end_time": "2025-05-20 09:40:13", + "live_type": 1 + } + ], + "pagination": { + "page": 1, + "page_size": 30, + "total": 2 + } + } +} +``` + +</details> + +## 获取你为某位主播剪辑的草稿 + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetDraftList + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +需要获得那位主播的授权才能获取数据。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_uid | num | 目标主播的uid | 必要 | | +| page | num | 页码 | 非必要 | 默认第1页 | +| page_size | num | 每页内容数量 | 非必要 | 默认30项,最大30项 | +| web_location | str | (?) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -101:未登录<br />0:成功<br />301:没有剪辑权限 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 与[获取回放剪辑草稿列表](#获取回放剪辑草稿列表)接口的信息本体相同 | + +**示例:** + +获取你为某位主播剪辑的草稿,他已授权你回放剪辑权限 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetDraftList?live_uid=1&page=1&page_size=20' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "draft_info": [ + { + "id": 1148889, + "title": "直播场次 2025-09-30 23:53:06", + "live_key": "645328214036844339", + "ctime": "2025-10-14 14:48:22", + "live_start_time": "2025-09-30 23:53:06", + "live_end_time": "2025-10-01 01:41:29", + "live_type": 1 + } + ], + "pagination": { + "page": 1, + "page_size": 30, + "total": 1 + } + } +} +``` + +</details> + +## 删除某个回放剪辑草稿 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/DeleteSliceDraft + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +主播删除自己的回放剪辑草稿时使用。 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| draft_id | num | 回放剪辑id | 必要 | | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:参数错误<br />-101:未登录<br />-111:csrf校验失败<br />0:成功<br />206:无可操作草稿 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | `0` | | +| message | str | `""` | | + +**示例:** + +删除回放剪辑id为`988275`的草稿 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/DeleteSliceDraft' \ + --data-urlencode 'draft_id=988275' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "code": 0, + "message": "" + } +} +``` + +</details> + +## 删除为某个主播剪辑的草稿 + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/DeleteSliceDraft + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +删除你为某位主播创建的回放剪辑草稿。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**正文参数( application/json ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| draft_id | num | 回放剪辑id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误<br />-101:未登录<br />-111:csrf校验失败<br />0:成功<br />206:无可操作草稿 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 与[](#删除某个回放剪辑草稿)的信息本体相同 | + +**示例:** + +删除回放剪辑id为`1148889`的草稿 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/DeleteSliceDraft?csrf=xxx' \ + -H 'Content-Type: application/json' \ + -b 'SESSDATA=xxx;bili_jct=xxx' \ + -d '{"draft_id":1148889}' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "code": 0, + "message": "" + } +} +``` + +</details> + +## 请求整场直播回放下载链接 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorVideoDownload + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +是否生成回放取决于回放状态,处于可生成回放状态且未生成整场直播回放时将进行生成。 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| record_id | num | 直播回放id | 必要(可选) | `record_id`和`live_key`必选其一 | +| live_key | str | 标记直播场次的key | 必要(可选) | `record_id`和`live_key`必选其一 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -101:未登录<br />-111:csrf校验失败<br />0:成功<br />100:非法参数<br />210:回放id或场次key无效<br />217:未找到直播录像 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| record | obj | 回放状态 | | +| download_url | str | 回放下载链接 | 完成时存在 | +| download_url_list | arr | 回放下载链接列表 | 完成时存在 | + +`data.record` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| uid | num | 用户mid | | +| record_id | num | 直播回放id | | +| status | num | 回放状态 | | +| estimated_time | num | 预计结束时间 | Unix秒时间戳 | +| current_time | num | 当前时间 | Unix秒时间戳 | +| merge_time | num | 开始合并时间 | Unix秒时间戳 | +| toast | str | 提示信息 | 失败时存在 | + +`data.download_url_list` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | --- | --- | --- | +| 0 | str | 回放下载链接 | | + +**示例:** + +请求回放id为`10597910`的下载链接 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorVideoDownload' \ + --data-urlencode 'record_id=10597910' \ + --data-urlencode 'live_key=607942821532667699' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "record": { + "uid": 438160221, + "record_id": 10597910, + "status": 30, + "estimated_time": 1747639543, + "current_time": 1747639106, + "merge_time": 1747638665 + }, + "download_url": "https://upos-sz-mirrorali.bilivideo.com/ugcever/n250519sa3hkpirw61hjskuit4d9fdsj.mp4?deadline=1747682306&gen=record2vod&os=upos&trid=da40b42594d5446da29cb0d2b2f25f45&uparams=deadline,gen,os,trid&upsig=c6ac5f218af40b2c120b3f5add2e4d6b&attname=直播回放_2025-05-13_20-49-04.mp4", + "download_url_list": [ + "https://upos-sz-mirrorali.bilivideo.com/ugcever/n250519sa3hkpirw61hjskuit4d9fdsj.mp4?deadline=1747682306&gen=record2vod&os=upos&trid=da40b42594d5446da29cb0d2b2f25f45&uparams=deadline,gen,os,trid&upsig=c6ac5f218af40b2c120b3f5add2e4d6b&attname=直播回放_2025-05-13_20-49-04.mp4" + ] + } +} +``` + +</details> + +## 获取回放的信息 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecordsSubsect + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| record_id | num | 直播回放id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:参数错误<br />-101:未登录<br />0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 失败时不可用 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| list | arr | 回放信息列表 | | + +`data.list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| uid | num | 用户mid | | +| record_id | num | 直播回放id | | +| title | str | 直播标题 | | +| cover | str | 直播封面 | | +| status | num | 回放状态 | | +| start\_time | num | 直播开始时间 | Unix秒时间戳 | +| end_time | num | 直播结束时间 | Unix秒时间戳 | + +**示例:** + +获取回放id为`10707664`的信息 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecordsSubsect?record_id=10707664' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "uid": 438160221, + "record_id": 10707664, + "title": "摆", + "cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png", + "status": 2, + "start_time": 1747508293, + "end_time": 1747508499 + } + ] + } +} +``` + +</details> + +## 轮询回放状态 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecord + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| records | str | 直播回放id列表 | 必要 | 用`,`分隔 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -101:未登录<br />-400:参数错误<br />0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| list | arr | 查询结果 | 无效的id会被忽略 | + +`data.list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| uid | num | 用户mid | | +| record_id | num | 直播回放id | | +| status | num | 回放状态 | | +| current_time | num | 当前时间戳 | Unix秒时间戳 | +| estimated_time | num | 预计结束时间戳 | 初次[请求回放下载链接](#请求整场直播回放下载链接)后存在 | +| merge_time | num | 合成开始时间戳 | 初次[请求回放下载链接](#请求整场直播回放下载链接)后存在 | + +**示例:** + +查询各种回放id + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecord' \ + --data-urlencode 'records=10727160,10597910,10687720,10230000,99999999' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "uid": 91089731, + "record_id": 10230000, + "status": 2, + "current_time": 1747641604 + }, + { + "uid": 438160221, + "record_id": 10597910, + "status": 30, + "estimated_time": 1747639543, + "current_time": 1747641604, + "merge_time": 1747638665 + }, + { + "uid": 438160221, + "record_id": 10687720, + "status": -30, + "estimated_time": 1747635525, + "current_time": 1747641604, + "merge_time": 1747635486, + "toast": "因直播过程中存在推流质量问题(网络波动或丢包),本场直播回放无法合成" + }, + { + "uid": 3493299121817771, + "record_id": 10727160, + "status": 2, + "current_time": 1747641604 + } + ] + } +} +``` + +</details> + +## 获取切片视频流 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStream + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +主播获取自己的切片视频流时使用。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].live_key` | +| start_time | num | 直播开始时间戳 | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].start_time` | +| end_time | num | 直播结束时间戳 | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].end_time` | +| web_location | str | (?) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:参数缺失<br />-101:未登录<br />0:成功<br />100:非法参数<br />202:场次无效 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| list | arr 或 null | 直播回放视频列表 | 如果该场回放没有视频流将为`null` | +| ban_list | null 或 arr | 不可发布的回放时间 | 如果该场回放没有不可发布的时间将为`null` | + +`data.list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| start_time | num | 片段开始时间戳 | Unix秒时间戳 | +| end_time | num | 片段结束时间戳 | Unix秒时间戳 | +| stream | str | 直播回放视频流 | | +| type | num | 类型? | 2:一般回放? | + +`data.ban_list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| start_time | num | 不可发布片段的开始时间戳 | Unix秒时间戳 | +| end_time | num | 不可发布片段的结束时间戳 | Unix秒时间戳 | + +**示例:** + +获取某个场次的视频流 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStream?live_key=637117671085969203&start_time=1756479520&end_time=1756488870' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "start_time": 1756479528, + "end_time": 1756488870, + "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?none=为了防止信息泄露,不提供完整链接。目前该视频流可以获取违规片段的视频。", + "type": 2 + } + ], + "ban_list": [ + { + "start_time": 1756487070, + "end_time": 1756488870 + } + ] + } +} +``` + +</details> + +## 获取某位主播的切片视频流 + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetUserSliceStream + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +需要获得那位主播的授权才能获取数据。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].live_key` | +| start_time | num | 直播开始时间戳 | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].start_time` | +| end_time | num | 直播结束时间戳 | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].end_time` | +| live_uid | num | 目标主播的uid | 必要 | | +| web_location | str | (?) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:参数缺失<br />-101:未登录<br />0:成功<br />100:非法参数<br />202:场次无效<br />301:没有剪辑权限 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| list | arr | 直播回放视频列表 | 与[获取切片视频流](#获取切片视频流)的`data.list`数组相同 | + +**示例:** + +获取某个场次的视频流,他已授权你回放剪辑权限 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetUserSliceStream?live_key=646125196758224691&start_time=1759507126&end_time=1759513440&live_uid=1' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "start_time": 1759507132, + "end_time": 1759508222, + "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?none=获取视频流的参数。", + "type": 2 + } + ] + } +} +``` + +</details> + +## 获取直播会话数据 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetLiveSessionData + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +主播获取自己的直播会话数据时使用。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | | +| start_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 | +| end_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 | +| web_location | str | (?) | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -500:服务器错误<br />-101:未登录<br />0:成功<br />100:非法参数<br />202:场次无效 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| session_data | arr | 会话数据 | | +| max_danmaku | num | 弹幕最多的时间戳 | Unix秒时间戳,没有则为`0` | +| max_pcu | num | 进房最多的时间戳 | Unix秒时间戳,没有则为`0` | +| max_value | num | (?) | 效果未知 | +| high_light_data | arr | 高光时刻数据 | | +| ass_url | str | ASS字幕链接 | 用作弹幕显示 | +| high_light_stat | obj | 高亮状态信息 | | + +`data.session_data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| ts | num | 采样时间 | Unix秒时间戳 | +| value | num | 弹幕数量 | | + +`data.high_light_data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| id | num | 高光id | | +| type | num | 高光类型 | 1:弹幕<br />2:进房 | +| start_time | num | 高光开始时间戳 | Unix秒时间戳 | +| end_time | num | 高光结束时间戳 | Unix秒时间戳 | +| title | str | 高光提示标题 | | +| cover | str | (?) | 目前为`""` | +| extra | str | (?) | 目前为`""` | + +`data.high_light_stat` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| original_hl | num | “高光时刻”数量 | 有“高光时刻”时存在 | +| manual_hl | num | “已保存”数量 | 有“已保存”时存在,调用[手动保存高亮片段](#手动保存高亮片段)进行保存 | + +注: 可能还存在一个“回溯录制”的字段。 + +**示例:** + +获取场次key为`607113721045847859`的会话数据 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetLiveSessionData?live_key=607113721045847859&start_tm=0000-01-01+00:00:00&end_tm=1970-01-01+00:00:00' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "session_data": [ + { + "ts": 1752927300, + "value": 0 + }, + { + "ts": 1752927360, + "value": 0 + }, + { + "ts": 1752927420, + "value": 0 + }, + // 省略掉大部分重复内容 + { + "ts": 1752946620, + "value": 0 + }, + { + "ts": 1752946680, + "value": 0 + }, + { + "ts": 1752946740, + "value": 0 + } + ], + "max_danmaku": 1752928860, + "max_pcu": 1752928200, + "max_value": 0, + "high_light_data": [ + { + "id": 9628113, + "type": 1, + "start_time": 1752928860, + "end_time": 1752929040, + "title": "弹幕高光 Top 1", + "cover": "", + "extra": "" + }, + { + "id": 9628114, + "type": 1, + "start_time": 1752938460, + "end_time": 1752938640, + "title": "弹幕高光 Top 2", + "cover": "", + "extra": "" + }, + { + "id": 9628115, + "type": 1, + "start_time": 1752938040, + "end_time": 1752938220, + "title": "弹幕高光 Top 3", + "cover": "", + "extra": "" + }, + { + "id": 9628112, + "type": 2, + "start_time": 1752928140, + "end_time": 1752928320, + "title": "进房高光时刻", + "cover": "", + "extra": "" + } + ], + "ass_url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/dmass_1899237171_625727121464233779.ass?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250802%2Fjssz%2Fs3%2Faws4_request\u0026X-Amz-Date=20250802T072504Z\u0026X-Amz-Expires=7200\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=384b42382469059a1f4c6b04c7bd2290a0c74c01375df1681eedb3ba8aca5c3c", + "high_light_stat": { + "original_hl": 4, + "manual_hl": 6 + } + } +} +``` + +</details> + +## 获取某位主播的直播会话数据 + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetUserLiveSessionData + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +需要获得那位主播的授权才能获取数据。 + +若已提供`live_key`和`live_uid`参数,则必须正确提供`start_tm`和`end_tm`参数,否则服务器可能无法成功响应,响应头中的`Bili-Status-Code`为`-500`。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | 需要提供目标主播的live_key | +| start_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 | +| end_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 | +| live_uid | num | 目标主播的uid | 必要 | | +| web_location | str | (?) | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -500:服务器错误<br />-101:未登录<br />0:成功<br />100:非法参数<br />202:场次无效<br />301:没有剪辑权限 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 与[获取直播会话数据](#获取直播会话数据)的信息本体相同 | + +**示例:** + +获取某位主播的某场次会话数据,他已授权你回放剪辑权限 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetUserLiveSessionData?live_key=645810156612095795&start_tm=2025-10-02+20:58:21&end_tm=2025-10-03+01:21:06&live_uid=1' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "session_data": [ + { + "ts": 1759507080, + "value": 0 + }, + { + "ts": 1759507140, + "value": 0 + },// 省略掉绝大部分数据 + { + "ts": 1759513440, + "value": 1 + } + ], + "max_danmaku": 1759513380, + "max_pcu": 1759507200, + "max_value": 0, + "high_light_data": [ + { + "id": 12472658, + "type": 1, + "start_time": 1759513320, + "end_time": 1759513440, + "title": "弹幕高光 Top 1", + "cover": "", + "extra": "" + }// 省略掉剩下两条 + ], + "high_light_stat": { + "original_hl": 3 + } + } +} +``` + +</details> + +## 获取用户高光列表 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserGetManualHighlightList (主播使用) + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/UserGetManualHighlightList (粉丝使用) + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | | +| manual_type | num | 查询类型 | 必要 | 1:回溯录制<br />2:已保存片段 | +| live_uid | num | 目标主播的uid | 必要(可选) | 通过粉丝使用接口时必要 | +| web_location | str | (?) | 非必要 | 作用尚不明确 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误<br />-101:未登录<br />0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| high_light_stat | obj | 高亮状态信息 | | +| manual_highlight_list | arr | 高光列表 | 有内容时存在 | + +`data.manual_highlight_list` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 第一条高光信息 | 最少存在1条,目前没有高光内容将看不到这个数组 | +| … | obj | 某一条高光信息 | | +| i | obj | 最后一条高光信息 | | + +`data.manual_highlight_list` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| manual_id | num | 片段id | | +| highlight_title | str | 片段标题 | | +| start_ts | num | 开始时间戳 | Unix 秒时间戳 | +| end_ts | num | 结束时间戳 | Unix 秒时间戳 | +| uid | num | 保存者uid? | | +| ruid | num | 主播uid | | +| live_key | str | 标记直播场次的key | | + +`data.high_light_stat` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| original_hl | num | “高光时刻”数量 | 有“高光时刻”时存在 | +| manual_hl | num | “已保存”数量 | 有“已保存”时存在,调用[手动保存高亮片段](#手动保存高亮片段)进行保存 | + +注: 可能还存在一个“回溯录制”的字段。 + +**示例:** + +主播获取用户保存列表 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserGetManualHighlightList?live_key=625727121464233779&manual_type=2' \ + -b 'SESSDATA=xxx' +``` + +粉丝获取用户保存列表 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/UserGetManualHighlightList?live_key=645810156612095795&manual_type=2&live_uid=1' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +只有高光时刻的示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "high_light_stat": { + "original_hl": 4 + } + } +} +``` + +有保存片段的示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "manual_highlight_list": [ + { + "manual_id": 14434, + "highlight_title": "手动保存片段【6】", + "start_ts": 1752935402, + "end_ts": 1752935402, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14428, + "highlight_title": "手动保存片段【5】", + "start_ts": 1752935402, + "end_ts": 1752935204, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14426, + "highlight_title": "手动保存片段【4】", + "start_ts": 1752935402, + "end_ts": 1752935404, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14425, + "highlight_title": "手动保存片段【3】", + "start_ts": 1752935402, + "end_ts": 1752935404, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14424, + "highlight_title": "手动保存片段【2】", + "start_ts": 1752927342, + "end_ts": 1752935404, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + }, + { + "manual_id": 14423, + "highlight_title": "手动保存片段【1】", + "start_ts": 1752927336, + "end_ts": 1752946748, + "uid": 438160221, + "ruid": 438160221, + "live_key": "625727121464233779" + } + ], + "high_light_stat": { + "original_hl": 4, + "manual_hl": 6 + } + } +} +``` + +</details> + +## 获取某个时间的视频帧 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoKeyFrame (主播使用) + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetAnchorVideoKeyFrame (粉丝使用) + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**正文参数( application/json ):** + +根对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | | +| live_uid | num | 目标主播的uid | 必要(可选) | 通过粉丝使用接口时必要 | +| time_list | str | 秒时间戳列表,用`,`分隔 | 必要 | 时间间隔低于30秒将会导致只提供部分内容 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误<br />-111:csrf校验失败<br />-101:未登录<br />0:成功<br />10121188:权限不足 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| list | arr | 指定时间的视频帧列表 | 场次key无效时为`null` | + +`data.list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| ts | num | 时间戳 | 对应请求的`time_list`其中某一个 | +| url | str | 该时间的视频帧 | 该时间有视频且取帧成功时存在 | + +**示例:** + +主播获取某场直播的视频帧 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoKeyFrame?csrf=xxx' \ + -H 'Content-Type: application/json' \ + -b 'SESSDATA=xxx;bili_jct=xxx' \ + -d '{"live_key":"609431465787395891","time_list":"174758900,1747658930,1747658960"}' +``` + +粉丝获取某场直播的视频帧 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/GetAnchorVideoKeyFrame?csrf=xxx' \ + -H 'Content-Type: application/json' \ + -b 'SESSDATA=xxx;bili_jct=xxx' \ + -d '{"live_key":"645810156612095795","time_list":"1759410340,1759418126","live_uid":1}' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "ts": 174758900 + }, + { + "ts": 1747658930, + "url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/live_438160221_32373699_20250519204900.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250520%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20250520T180202Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=8d42a3d5fd1995e5e2bf98d453a986bec48529a9ae97d5d7eedee8a59b22418a" + }, + { + "ts": 1747658960, + "url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/live_438160221_32373699_20250519205001.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250520%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20250520T180202Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=f4a3803d4147492ced14eefbb6953e772b886e195d51dbfac800e77320adeba2" + } + ] + } +} +``` + +</details> + +## 手动保存高亮片段 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserManualSaveHighlight (主播使用) + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/UserManualSaveHighlight (粉丝使用) + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | | +| start_ts | num | 开始时间戳 | 必要 | Unix 秒时间戳 | +| end_ts | num | 结束时间戳 | 必要 | Unix 秒时间戳 | +| live_uid | num | 目标主播的uid | 必要(可选) | 通过粉丝使用接口时必要 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +注: 开始时间减结束时间的结果小于1可能导致[直播回放片段发布页面](#直播回放片段发布页面)无法处理这个片段。 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误<br />-111:csrf校验失败<br />-101:未登录<br />0:成功<br /> | +| message | str | 错误信息 | | +| ttl | num | `1` | | +| data | obj | 信息本体 | 成功时为空对象 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | `-1` | | +| message | str | 错误提示 | `主播没有对应场次` , `保存时间点未开播` | + +**示例:** + +主播手动保存一个片段 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserManualSaveHighlight' \ + --data-urlencode 'live_key=625727121464233779' \ + --data-urlencode 'start_ts=1752935402' \ + --data-urlencode 'end_ts=1752935404' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +粉丝手动保存一个片段 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/UserManualSaveHighlight' \ + --data-urlencode 'live_key=645810156612095795' \ + --data-urlencode 'start_ts=1759409907' \ + --data-urlencode 'end_ts=1759410087' \ + --data-urlencode 'live_uid=1' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> + +## 投稿直播回放片段 + +> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorPublishVideoSlice + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +主播投稿自己的直播回放片段时使用。 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_key | str | 标记直播场次的key | 必要 | 必须为自己的live_key | +| start_ts | num | 开始时间戳 | 必要 | 开始和结束时间目前相差不能大于2小时 | +| end_ts | num | 结束时间戳 | 必要 | 开始和结束时间目前相差不能大于2小时 | +| av_title | str | 切片标题 | 必要 | 不能与现有标题重复 | +| av_cover | str | 切片封面URL | 必要 | 必须为`.hdslb.com`域名下的图片,否则合成结束时会出错 | +| av_highlight | num | 高光绑定 | 非必要 | | +| with_subtitle | num | 是否携带字幕 | 非必要 | 效果不明确 | +| with_danmaku | num | 是否带弹幕? | 非必要 | 传递`1`时可能导致处于“发布中”状态时不在[获取已发布片段的信息](#获取已发布片段的信息)中显示 | +| with_reserve | num | 投稿携带下场直播提醒 | 非必要 | 0:不携带,1:携带 | +| av_speed | str | 倍速投稿 | 非必要 | 格式为 `倍速值 + "x"` ,使用非1x倍速时可能导致处于“发布中”状态时不在[获取已发布片段的信息](#获取已发布片段的信息)中显示<br />允许值: `0.5x` , `0.75x` , `1.0x` , `1.25x` , `1.5x` , `2.0x` | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -111:csrf校验失败<br />-101:未登录<br />0:成功<br />4000:时长过长<br />4001:操作太快<br />4002:片段已投稿<br />4003:请选择精彩片段再投稿哦<br />4006:标题已使用<br />4008:不被允许的视频倍速<br />4009:该片段存在违规内容,不允许投稿 | +| message | str | 错误信息 | | +| ttl | num | `1` | | +| data | obj | 信息本体 | 成功时有效 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| video_slice_id | num | 切片id | | + +注: 若返回值出现4001不一定就是操作太快,不提供某些必要参数或某个参数不正确也会导致返回4001。 + +**示例:** + +为某个场次投稿切片 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorPublishVideoSlice' \ + --data-urlencode 'live_key=609431465787395891' \ + --data-urlencode 'start_ts=1747680306' \ + --data-urlencode 'end_ts=1747687506' \ + --data-urlencode 'av_title=2025051920' \ + --data-urlencode 'av_cover=https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png' \ + --data-urlencode 'av_highlight=0' \ + --data-urlencode 'with_subtitle=0' \ + --data-urlencode 'with_danmaku=0' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data":{ + "video_slice_id": 898374 + } +} +``` + +</details> + +## 给某位主播投稿直播回放片段 + +> https://api.live.bilibili.com/xlive/web-room/v1/videoService/UserPublishOtherVideoSlice + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +需要获得那位主播的授权。 + +**正文参数( application/x-www-form-urlencoded ):** + +与[投稿直播回放片段](#投稿直播回放片段)的正文参数相比,多了`live_uid`参数,少了`av_speed`参数,其它参数基本相同。 + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| live_uid | num | 目标主播的uid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -111:csrf校验失败<br />-101:未登录<br />0:成功<br />100:非法参数<br />4000:时长过长<br />5006:用户已经投稿过该片段 | +| message | str | 错误信息 | | +| ttl | num | `1` | | +| data | obj | 信息本体 | 成功时有效 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| video_slice_id | num | 切片id | 似乎与主播不共用一个切片id | + +**示例:** + +为某个场次投稿切片 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/videoService/UserPublishOtherVideoSlice' \ + --data-urlencode 'live_key=648437353747320627' \ + --data-urlencode 'start_ts=1760352154' \ + --data-urlencode 'end_ts=1760352214' \ + --data-urlencode 'av_title=202510201318' \ + --data-urlencode 'av_cover=https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png' \ + --data-urlencode 'av_highlight=0' \ + --data-urlencode 'with_subtitle=0' \ + --data-urlencode 'with_danmaku=0' \ + --data-urlencode 'with_reserve=1' \ + --data-urlencode 'live_uid=1' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data":{ + "video_slice_id": 4300 + } +} +``` + +</details> + +## 下载整场直播回放的流程 + +此处的流程是从[直播回放](https://link.bilibili.com/#/my-room/live-record)的“下载回放”功能得出的。 + +1. 先[请求整场直播回放下载链接](#请求整场直播回放下载链接)接口,让它开始合成回放; + +2. (可选)请求[获取回放的信息](#获取回放的信息)接口,生成合成进度页面; + +3. [轮询回放合成状态](#轮询回放状态),当状态变为`30`转到流程4,变为`-30`转到流程5; + +4. 再次[请求整场直播回放下载链接](#请求整场直播回放下载链接),获取下载链接并下载。 + +5. 请求[获取直播回放列表](#获取直播回放列表),刷新页面并根据信息提示失败。 + +## 直播回放片段发布页面 + +通过此处的链接可以打开直播回放片段发布页面。 + +> https://live.bilibili.com/web-cut/quick-publish.html (网页端) + +> https://live.bilibili.com/web-cut/quick-publish-mobile.html (移动端) + +注:移动端强制限制只能投稿15分钟的片段,网页端则看[投稿直播回放片段](#投稿直播回放片段)接口允许多长的时间。 + +**url查询参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| start_time | num | 直播开始时间 | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].start_time` | +| end_time | num | 直播结束时间 | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].end_time` | +| live_key | str | 标记直播场次的key | 必要 | 对应[获取直播回放列表](#获取直播回放列表)的`data.replay_info[i].live_key` | +| cover | str | 封面URL | 非必要 | 可以自定义封面(必须为B站图床,详见[投稿接口](#投稿直播回放片段)),或者在[获取直播回放列表](#获取直播回放列表)使用直播封面 | +| anchor_id | num | 目标主播的uid | 非必要 | 要剪辑某位主播的回放时必须提供 | +| anchor_name | num | 目标主播的名称 | 非必要 | 由[某位主播的直播回放剪辑界面](#某位主播的直播回放剪辑界面)传递 | + +**示例链接:** + +网页端: https://live.bilibili.com/web-cut/quick-publish.html?start_time=1747508293&end_time=1747508499&live_key=609041817764368179&cover=https%3A%2F%2Fi0.hdslb.com%2Fbfs%2Flive%2F59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png + +移动端: https://live.bilibili.com/web-cut/quick-publish-mobile.html?start_time=1747508293&end_time=1747508499&live_key=609041817764368179 + +粉丝剪辑: https://live.bilibili.com/web-cut/quick-publish.html?start_time=1760766799&end_time=1760774101&live_key=649597291269984051&cover=https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png&anchor_id=1&anchor_name=null + +## 直播回放剪辑页面 + +此链接用于打开直播回放轻剪辑页面,在点击[直播回放片段发布页面](#直播回放片段发布页面)的“高级剪辑”按钮或某一个[主播回放剪辑草稿](#获取回放剪辑草稿列表)、[粉丝回放剪辑草稿](#获取你为某位主播剪辑的草稿)后自动打开。 + +> https://live.bilibili.com/web-cut/index.html + +**url查询参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| start_time | num | 直播开始时间戳 | 必要 | 用于[获取切片视频流](#获取切片视频流) | +| end_time | num | 直播结束时间戳 | 必要 | 用于[获取切片视频流](#获取切片视频流) | +| live_key | str | 标记直播场次的key | 必要 | 用于[获取切片视频流](#获取切片视频流) | +| draft_id | num | 回放剪辑id | 必要 | | +| init | num | (?) | 非必要 | 作用尚不明确 | +| with_reserve | num | 投稿携带下场直播提醒? | 非必要 | 0:不携带,1:携带 | +| anchor_id | num | 目标主播的uid | 非必要 | | + +**示例链接:** https://live.bilibili.com/web-cut/index.html?start_time=1747658704&end_time=1747705213&live_key=609431465787395891&draft_id=988275 + +## 某位主播的直播回放剪辑界面 + +此链接用于打开某位主播的直播回放剪辑界面,需要获得那位主播的授权。 + +主播自己访问该界面也需要自己在剪辑权限页面内开启该功能。 + +> https://live.bilibili.com/web-cut/replay-cut.html + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| anchor_Id | num | 主播uid | 必要 | 参数名不区分大小写 | +| anchor_name | str | 主播名称 | 非必要 | 用于在UI中显示主播名称,目前可随意传递,若不提供将使用 `未知主播` 显示 | + +**示例链接:** https://live.bilibili.com/web-cut/replay-cut.html?anchor_Id=1&anchor_name=bishi diff --git a/docs/live/live_stream.md b/docs/live/live_stream.md new file mode 100644 index 0000000..57b9fac --- /dev/null +++ b/docs/live/live_stream.md @@ -0,0 +1,156 @@ +# 直播间视频流 + +## 根据真实直播间号获取直播视频流 + +> https://api.live.bilibili.com/room/v1/Room/playUrl + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| cid | num | 目标真实直播间号 | 必要 | 直播间的`room_id`(非短号) | +| platform | str | 直播流格式 | 非必要 | h5:hls方式<br />web:http-flv方式<br />默认为http-flv方式 | +| quality | num | 画质 | 非必要 | `qn`与`quality`任选其一<br />2:流畅<br />3:高清<br />4:原画 | +| qn | str | 画质 | 非必要 | `qn`与`quality`任选其一<br />80:流畅<br />150:高清<br />250:超清<br />400:蓝光<br />10000:原画<br />20000:4K<br />25000:默认<br />30000:杜比 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功<br />-400:参数错误<br />19002003:房间信息不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | str | 1 | | +| data | obj | 信息本体 | | + + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------- | ------------------------ | +| current_quality | num | 当前画质代码`qn` | | +| accept_quality | array | 可选画质数参数 | | +| current_qn | num | 当前画质代码`quality` | | +| quality_description | array | 可选画质参数`quality` | | +| durl | array | 直播流url组 | | + +`accept_quality`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ---- | +| 0 | str | `qn`画质代码1 | | +| n | str | `qn`画质代码(n+1) | | +| …… | str | …… | …… | + +`quality_description`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 画质代码1 | | +| n | obj | 画质代码(n+1) | | +| …… | obj | …… | …… | + +`quality_description`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------------- | ---- | +| qn | num | 画质代码 | | +| desc | str | 该代码对应的画质名称 | | + +`durl`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 主线服务器 | | +| n | obj | 备线n服务器 | | +| …… | obj | …… | …… | + +`durl`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------- | ------------------------ | +| url | str | 直播流url | flv或m3u8格式<br />**注:带有转义** | +| length | num | 0 | 作用尚不明确 | +| order | num | 服务器线路序号 | | +| stream_type | num | 0 | 作用尚不明确 | +| p2p_type | num | 0 | 作用尚不明确 | + +**示例:** + +查询直播间`cid=14073662`的直播间信息 + +```shell +curl -G 'https://api.live.bilibili.com/room/v1/Room/playUrl' \ +--data-urlencode 'cid=14073662' \ +--data-urlencode 'qn=10000' \ +--data-urlencode 'platform=web' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "current_quality": 3, + "accept_quality": [ + "4", + "3", + "2" + ], + "current_qn": 3, + "quality_description": [ + { + "qn": 4, + "desc": "原画" + }, + { + "qn": 3, + "desc": "高清" + }, + { + "qn": 2, + "desc": "流畅" + } + ], + "durl": [ + { + "url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/601131/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=20e4ac695fbdd1d11d5dac4f93caa783&ptype=0&src=9&sl=1&order=1", + "length": 0, + "order": 1, + "stream_type": 0, + "p2p_type": 0 + }, + { + "url": "https://d1--cn-gotcha01.bilivideo.com/live-bvc/757951/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha01&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=9deea67bb9e9c1f0fa3886a34aa09473&ptype=0&src=9&sl=1&order=2", + "length": 0, + "order": 2, + "stream_type": 0, + "p2p_type": 0 + }, + { + "url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/982058/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=8753b270960034660184d975d86c0161&ptype=0&src=9&sl=1&order=3", + "length": 0, + "order": 3, + "stream_type": 0, + "p2p_type": 0 + }, + { + "url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/139554/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=cf93474e923c9ba8288c45d954f81045&ptype=0&src=9&sl=1&order=4", + "length": 0, + "order": 4, + "stream_type": 0, + "p2p_type": 0 + } + ] + } +} +``` + +</details> diff --git a/docs/live/live_vote.md b/docs/live/live_vote.md new file mode 100644 index 0000000..8e2af3f --- /dev/null +++ b/docs/live/live_vote.md @@ -0,0 +1,470 @@ +# 直播投票 + +## 查询投票信息 + +> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/votePanel + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误<br />-101:未登录<br />0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 不是登录信息对应的直播间时将为 `null` | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| vote_info | obj | 当前活动的投票信息 | 若当前没有活动的投票将为空对象 | +| templates | arr | 投票模板 | | + +`data.vote_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| status | num | 投票状态 | 见[投票状态](#投票状态)枚举 | +| question | str | 投票问题 | | +| options | arr | 投票选项 | | +| duration | num | 投票持续时间 | 单位:毫秒 | +| result | num | 投票结果偏向哪一方状态 | | +| result_text | str | 投票结果偏向哪一方 | | +| etime_str | str | 投票结束时间 | | +| left_duration | num | 投票剩余时间 | 单位:毫秒,投票结束后不存在 | +| interaction_id | num | 投票互动id | | +| template_id | num | 投票模板id | 使用模板时存在 | + +`data.vote_info.options` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 投票选项1 | | +| 1 | obj | 投票选项2 | | + +`data.vote_info.options` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| idx | num | 选项id | | +| desc | str | 投票选项描述 | | +| percent | num | 投票选项占比显示 | | + +`data.templates` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 投票模板信息 | | +| … | obj | 投票模板信息 | | + +`data.templates` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| template_id | num | 模板id | | +| question | str | 投票问题 | | +| option_a | str | 投票选项A | | +| option_b | str | 投票选项B | | + +**示例:** + +查询投票信息 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/votePanel?room_id=1' +``` + +<details> +<summary>查看响应示例:</summary> + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "vote_info": { + "status": 4, + "question": "醒醒", + "options": [ + { + "idx": 1, + "desc": "醒", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "睡", + "percent": 0.5 + } + ], + "duration": 600000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 15:44", + "left_duration": 549660, + "interaction_id": 120122595433984 + }, + "templates": [ + { + "template_id": 54339003518976, + "question": "哪边赢", + "option_a": "左", + "option_b": "右" + }, + { + "template_id": 48570973661696, + "question": "只因你太美唱的好吗?", + "option_a": "你干嘛", + "option_b": "哎哟" + }, + // 省略了大部分内容 + { + "template_id": 46203444257280, + "question": "№!", + "option_a": "虾头", + "option_b": "抽象" + }, + { + "template_id": 96177095781888, + "question": "相信奇迹吗", + "option_a": "相信", + "option_b": "必须相信" + }, + { + "template_id": 103827382481920, + "question": "1", + "option_a": "1", + "option_b": "1" + } + ] + } +} +``` + +</details> + +## 查询投票历史 + +> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/voteHistory + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:请求错误<br />-101:未登录<br />0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | 不是登录信息对应的直播间时将为空对象 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| history | arr | 投票历史列表 | | + +`data.history` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 | +| … | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 | +| 9 | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 | + +`data.history` 数组中对象: + +与 [查询投票信息](#查询投票信息) json回复的 `data.vote_info` 相同。 + +**示例:** + +```shell +curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/voteHistory?room_id=1' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "history": [ + { + "status": 5, + "question": "醒醒", + "options": [ + { + "idx": 1, + "desc": "醒", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "睡", + "percent": 0.5 + } + ], + "duration": 600000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 15:44", + "interaction_id": 120122595433984 + }, + { + "status": 5, + "question": "会不会睡死?", + "options": [ + { + "idx": 1, + "desc": "包会的", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "不会的", + "percent": 0.5 + } + ], + "duration": 60000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 14:57", + "interaction_id": 120117830648832 + }, + { + "status": 5, + "question": "会不会睡着?", + "options": [ + { + "idx": 1, + "desc": "包会的", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "不会的", + "percent": 0.5 + } + ], + "duration": 180000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 14:53", + "interaction_id": 120117121798656 + }, + { + "status": 5, + "question": "能不能一把过", + "options": [ + { + "idx": 1, + "desc": "能", + "percent": 0.5 + }, + { + "idx": 2, + "desc": "不能", + "percent": 0.5 + } + ], + "duration": 60000, + "result": 1, + "result_text": "平局", + "etime_str": "08-31 14:41", + "interaction_id": 120115796409344, + "template_id": 3109187328000 + } + // 省略其余6项 + ] + } +} +``` + +</details> + +## 投票状态 + +此处列出已发现的投票状态,在投票信息和直播信息流 `DM_INTERACTION` 的类型 `101` 等地方使用。 + +当前状态信息来自混淆代码寻找而来。 + +| 值 | 含义 | 备注 | +| -- | ---- | ---- | +| 0 | | 键名 `NONE` | +| 1 | 等待审核 | 键名 `WAITING_AUDIT` | +| 2 | 审核失败 | 键名 `AUDIT_FAILED` | +| 4 | 投票进行中 | 键名 `DURING` | +| 5 | 投票结束 | 键名 `END` | +| 6 | | 键名 `STOP` | + +## 创建直播投票 + +> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/createVote + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +投票创建完成后,投票信息和审核结果将以直播信息流 `DM_INTERACTION` 的类型 `101` 下发。 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 | +| duration | num | 持续时间 | 必要 | 必须为整数,目前范围`0<d<10` | +| question | str | 投票问题 | 必要 | | +| option_a | str | 选项A | 必要 | | +| option_b | str | 选项B | 必要 | | +| template_id | num | 投票模板id | 非必要 | | +| live_key | str | 直播场次key | 非必要 | 需要更多信息 | +| sub_session_key | str | (?) | 非必要 | 需要更多信息 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| visit_id | str | (?) | 非必要 | 作用尚不明确 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -404:不是自己的直播间<br />-400:参数错误<br />-101:未登录<br />-111:csrf校验失败<br />0:成功 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| interaction_id | num | 投票互动id | | + +**示例:** + +创建一个投票 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/createVote' \ + --data-urlencode 'room_id=3' \ + --data-urlencode 'duration=1' \ + --data-urlencode 'question=abcdef' \ + --data-urlencode 'option_a=A' \ + --data-urlencode 'option_b=B' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data":{ + "interaction_id":120008099262976 + } +} +``` + +</details> + +## 中断直播投票 + +> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/terminateVote + +*请求方法: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| interaction_id | num | 投票互动id | 必要 | 必须为该登录信息创建的投票 | +| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| visit_id | str | (?) | 非必要 | 作用尚不明确 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | -400:参数错误<br />-101:未登录<br />-111:csrf校验失败<br />0:成功<br />1003402:修改投票状态失败 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | null | 无 | | + +**示例:** + +中断某个投票 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/terminateVote' \ + --data-urlencode 'interaction_id=120122595433984' \ + --data-urlencode 'room_id=1' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": null +} +``` + +</details> + +## 弹幕投票主播侧界面 + +> https://live.bilibili.com/p/html/live-app-guessing-game/anchor_vote.html + +直接访问此页面存在部分功能不可用的情况。 + +**URL查询参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| room_id | num | 直播间id | 必要 | 必须为自己的直播间 | diff --git a/docs/live/manage.md b/docs/live/manage.md new file mode 100644 index 0000000..88d54c1 --- /dev/null +++ b/docs/live/manage.md @@ -0,0 +1,742 @@ +# 直播间管理 + +## 开通直播间 + +> https://api.live.bilibili.com/xlive/app-blink/v1/preLive/CreateRoom + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | -------------------- | +| platform | str | 客户端? | 必要 | 默认值web | +| visit_id | str | 未知 | | 默认空 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| csrf_token | str | CSRF Token(位于 cookie) | | | + + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />1531193016:已经创建直播间~<br />-400:请求错误 | +| ttl | str | 错误信息 | 默认为1 | +| message | str | 错误信息 | 默认为0 | +| data | array | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ---------------- | ---------------------- | +| roomID | str | 直播间房间号 | 创建成功返回直播间号 | + +**示例:** + +开通直播间 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/preLive/CreateRoom' \ +--data-urlencode 'platform=web' \ +--data-urlencode 'visit_id=' \ +--data-urlencode 'csrf=xxx' \ +--data-urlencode 'csrf_token=xxx' \ +-b 'SESSDATA=xxx;bili_jct=xx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "roomID": "1234" + } +} +``` + +```json +{ + "code": 1531193016, + "message": "已经创建直播间~", + "ttl": 1, + "data": { + "roomID": "" + } +} +``` + +</details> + + + +## 更新直播间信息 + +> https://api.live.bilibili.com/room/v1/Room/update + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | -------------------- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| csrf_token | str | CSRF Token(位于 cookie) | 非必要 | | +| platform | str | 平台标识 | 非必要 | | +| visit_id | str | (?) | 非必要 | 某种标识? | +| room_id | num | 直播间id | 必要 | 必须为自己的直播间id | +| title | str | 直播间标题 | 非必要 | 上限40个字符 | +| area\_id | num | 直播分区id(子分区id) | 非必要 | 详见[直播分区](live_area.md) | +| add\_tag | str | 要添加的标签 | 非必要 | 开播设置界面上限10个字符 | +| del\_tag | str | 要删除的标签 | 非必要 | 若存在`add_tag`时不起作用 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-1:操作太频繁<br />1:错误<br />3:未登录或鉴权失败<br />405:不允许的请求方法<br />60009:分区已下线<br />65530:token错误(登录错误)<br /> | +| msg | str | 错误信息 | 默认为ok | +| message | str | 错误信息 | 默认为ok | +| data | obj | 信息本体 | 部分失败情况下是`[]`(空数组) | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ---- | ---- | +| sub_session_key | str | 信息变动标识 | | +| audit_info | obj | 标题审核信息 | | + +`data`中的`audit_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | ---- | ---- | +| audit_title_reason | str | 标题审核提示 | | +| audit_title_status | num | 标题审核状态 | | +| audit_title | str | 被审核的标题 | 更新标题时存在 | +| update_title | str | `""` | 作用尚不明确 | + +**示例:** + +修改直播间`10352053`标题为`测试` + +```shell +curl 'https://api.live.bilibili.com/room/v1/Room/update' \ + --data-urlencode 'room_id=10352053' \ + --data-urlencode 'title=测试' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "msg":"ok", + "message":"ok", + "data":{ + "sub_session_key":"", + "audit_info":{ + "audit_title_reason":"先发后审", + "update_title":"", + "audit_title_status":2, + "audit_title":"测试" + } + } +} +``` + +</details> + +修改直播间`10352053`分区为`40` + +```shell +curl 'https://api.live.bilibili.com/room/v1/Room/update' \ + --data-urlencode 'room_id=10352053' \ + --data-urlencode 'area_id=40' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "ok", + "message": "ok", + "data": { + "sub_session_key": "", + "audit_info": { + "audit_title_reason": "", + "update_title": "", + "audit_title_status": 0 + } + } +} +``` + +</details> + +给直播间`11996900`添加一个标签为`测试标签` + +```shell +curl 'https://api.live.bilibili.com/room/v1/Room/update' \ + --data-urlencode 'room_id=11996900' \ + --data-urlencode 'add_tag=测试标签' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "ok", + "message": "ok", + "data": { + "sub_session_key": "", + "audit_info": { + "audit_title_reason": "", + "update_title": "", + "audit_title_status": 0 + } + } +} +``` + +</details> + +给直播间`11996900`删除内容为`测试标签`的标签 + +```shell +curl 'https://api.live.bilibili.com/room/v1/Room/update' \ + --data-urlencode 'room_id=11996900' \ + --data-urlencode 'del_tag=测试标签' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "ok", + "message": "ok", + "data": { + "sub_session_key": "", + "audit_info": { + "audit_title_reason": "", + "update_title": "", + "audit_title_status": 0 + } + } +} +``` + +</details> + +## 开始直播 + +> https://api.live.bilibili.com/room/v1/Room/startLive + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +开播时必须有分区选择,开播后返回推流地址 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| room_id | num | 直播间id | 必要 | 必须为自己的直播间 id | +| area_v2 | num | 直播分区id(子分区 id) | 必要 | 详见[直播分区](live_area.md) | +| platform | str | 直播平台 | 必要 | 可选值:`pc`、`pc_link` (直播姬 PC), `android_link` (直播姬 Android) | +| csrf | str | CSRF Token(位于 cookie) | 必要 | | +| csrf_token | str | CSRF Token(位于 cookie) | 非必要 | | +| version | str | 直播姬版本号 | 非必要 | 建议与 `build` 一同提供,详见下方说明。可从[直播姬版本号获取](#直播姬版本号获取)接口获得。 | +| build | num | 直播姬构建号 | 非必要 | 建议与 `version` 一同提供。 | +| appkey | str | APP密钥 | 条件性必要 | 特定情况下必要,详见下方说明。 | +| sign | str | APP API签名得到的 sign | 条件性必要 | 特定情况下必要,详见下方说明。 | + +**说明**: 截止至 2025 年 7 月 20 日,部分账户不提供 `version` `build` `appkey` `sign` 也可获取推流码,部分账户会返回 `60024` (需要人脸认证),此时请尝试提供 `version` `build`,目前似乎没有校验,提供了就可以。(比如 `version:1.0.0` `build:1234`) 如果仍然返回 `60024`,请尝试提供 `appkey` `sign` 参数。如果你的 `version` 和 `build` 为 `7.19.0.9432` 和 `9432`,必须提供 `appkey` `sign`。 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0: 成功<br />-400: 请求错误<br />1: 错误<br />60009: 分区不存在<br />60013: 所在地区受实名认证限制无法开播<br />60024: 目标分区需要人脸认证<br />60034: 系统维护仅支持直播姬开播<br />60037: web在线开播已下线<br />65530: token错误 (登录失效)<br />**(其他错误码有待补充)** | +| msg | str | 提示信息 | 默认为空 | +| message | str | 提示信息 | 默认为空 | +| data | obj | 信息本体 | 成功时返回 | + + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ---------------- | ---------------------- | +| change | num | 是否改变状态 | 0:未改变<br />1:改变 | +| status | str | 直播间状态 | `LIVE` | +| room_type | num | 0 | 作用尚不明确 | +| rtmp | obj | RTMP推流地址信息 | | +| protocols | array | 推流协议、地址、密钥等信息<br />其中地址、密钥与 `rtmp` 字段的内容是一致的 | 协议只见到过 `rtmp` | +| try_time | str | ??? | 作用尚不明确 | +| live_key | str | 标记直播场次的key | | +| sub_session_key | str | 信息变动标识 | | +| notice | obj | ??? | 作用尚不明确 | +| qr | str | `""` | 作用尚不明确 | +| need_face_auth | bool | 需要人脸识别? | 作用尚不明确 | +| service_source | str | ??? | 作用尚不明确 | +| rtmp\_backup | null | ??? | 作用尚不明确 | +| up_stream_extra | obj | 主播推流额外信息? | | + +`data`中的`rtmp`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------------------------------- | ------------ | +| addr | str | RTMP推流(发送)地址 | **重要** | +| code | str | RTMP推流参数(密钥) | **重要** | +| new_link | str | 获取CDN推流ip地址重定向信息的url | 没啥用 | +| provider | str | 推流云服务节点厂商 | `txy`: 腾讯云 | + +`data`中的`protocols`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ------------ | +| 0 | obj | 与 `rtmp` 字段在地址和密钥上相同的推流协议信息 | | + +`data`中的`protocols`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------------------------------- | ------------ | +| protocol | str | rtmp | 推流协议 | +| addr | str | RTMP推流(发送)地址 | 格式为 `rtmp://<推流节点>/live-bvc/` | +| code | str | RTMP推流参数(密钥) | 格式为 `?streamname=live_<B站UID>_<未知数字>&key=<密钥>&schedule=rtmp&pflag=<开播平台标志>` | +| new_link | str | 获取CDN推流ip地址重定向信息的url | | +| provider | str | 推流云服务节点厂商 | `txy`: 腾讯云 | + +`data`中的`notice`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---- | ------------ | +| type | num | 1 | 作用尚不明确 | +| status | num | 0 | 作用尚不明确 | +| title | str | 空 | 作用尚不明确 | +| msg | str | 空 | 作用尚不明确 | +| button_text | str | 空 | 作用尚不明确 | +| button_url | str | 空 | 作用尚不明确 | + +`data`中的`up_stream_extra`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| isp | str | 主播的互联网服务提供商 | | + +**示例:** + +以`27`作为分区id开播直播间`10352053` + +其中`"data"."rtmp"."addr"`为推流地址 + +`"data"."rtmp"."code"`为推流参数 + +```shell +curl 'https://api.live.bilibili.com/room/v1/Room/startLive' \ +--data-urlencode 'room_id=10352053' \ +--data-urlencode 'area_v2=27' \ +--data-urlencode 'platform=pc' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx;bili_jct=xx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "data":{ + "change": 1, + "status": "LIVE", + "try_time": "0000-00-00 00:00:00", + "room_type": 0, + "live_key": "608336837537435443", + "sub_session_key": "608336837537435443sub_time:1747292297", + "rtmp":{ + "type": 1, + "addr": "rtmp://live-push.bilivideo.com/live-bvc/", + "code": "?streamname=live_348892132_32373699\u0026key=e03061d4a7529d8eaa322dc4d330ca1c\u0026schedule=rtmp\u0026pflag=11", + "new_link": "https://core.bilivideo.com/video/uplinkcore/selfbuild/schedule?up_rtmp=live-push.bilivideo.com%2Flive-bvc%2F%3Fstreamname%3Dlive_348892132_32373699%26key%3De73061d8a7539d8eaa233dc4d880ca1c%26schedule%3Drtmp%26pflag%3D11\u0026edge=edge", + "provider": "live" + }, + "protocols":[ + { + "protocol": "rtmp", + "addr": "rtmp://live-push.bilivideo.com/live-bvc/","code":"?streamname=live_348892132_32373699\u0026key=e73061d4a1002d8eaa322dc4d880ca1c\u0026schedule=rtmp\u0026pflag=11", + "new_link": "https://core.bilivideo.com/video/uplinkcore/selfbuild/schedule?up_rtmp=live-push.bilivideo.com%2Flive-bvc%2F%3Fstreamname%3Dlive_348892132_32373699%26key%3De10298d4a7539d8eaa322dc4d220ca1c%26schedule%3Drtmp%26pflag%3D11\u0026edge=edge", + "provider": "txy" + } + ], + "notice":{ + "type": 1, + "status": 0, + "title": "", + "msg": "", + "button_text": "", + "button_url": "" + }, + "qr": "", + "need_face_auth": false, + "service_source": "live-streaming", + "rtmp_backup": null, + "up_stream_extra":{ + "isp": "电信" + } + }, + "message": "", + "msg": "" +} +``` + +</details> + +## 关闭直播 + +> https://api.live.bilibili.com/room/v1/Room/stopLive + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | -------------------- | +| platform | str | 直播平台 | 必要 | 直播姬(pc):pc_link<br />直播姬(android):android_link | +| room_id | num | 直播间id | 必要 | 必须为自己的直播间id | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />65530:token错误(登录错误)<br />-400:没有权限<br />60034: 系统维护仅支持直播姬关播<br />**(其他错误码有待补充)** | +| msg | str | 提示信息 | 默认为空 | +| message | str | 提示信息 | 默认为空 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | ---------------------- | +| change | num | 是否改变状态 | 0:未改变<br />1:改变 | +| status | str | 直播间状态 | `PREPARING`、`ROUND` | + +**示例:** + +关闭直播间`10352053`的直播 + +```shell +curl 'https://api.live.bilibili.com/room/v1/Room/stopLive' \ + --data-urlencode 'platform=pc_link' \ + --data-urlencode 'room_id=10352053' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "change": 1, + "status": "PREPARING" + } +} +``` + +</details> + +## 预更新直播间信息 + +> https://api.live.bilibili.com/xlive/app-blink/v1/preLive/UpdatePreLiveInfo + +*请求方法: POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | --- | ---- | ----- | --- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| platform | str | 平台标识 | 必要 | 似乎可随意提供<br />网页端: web | +| mobi_app | str | 平台标识? | 必要 | 似乎可随意提供<br />网页端: web | +| build | num | 构建标识? | 必要 | 建议取`1`,似乎可随意提供 | +| cover | str | 直播封面链接 | 非必要 | 图片链接需要在`.hdslb.com`域名下 | +| title | str | 直播间标题 | 非必要 | 参见[更新直播间信息](#更新直播间信息)的title参数 | +| coverVertical | str | (?) | 非必要 | 作用尚不明确 | +| liveDirectionType | num | (?) | 非必要 | `1` | +| visit_id | str | (?) | 非必要 | `""` | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功<br />1: 错误<br />100402: 图片地址不合法 | +| message | str | 错误信息 | 成功时为`"0"` | +| ttl | num | `1` | | +| data | obj | 内容本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| audit_info | obj | 审核信息 | | + +`data.audit_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| audit_title | str | 被审核的标题 | | +| audit_title_status | num | 标题审核状态 | | +| audit_title_reason | str | 标题审核提示 | | + +**示例:** + +更新直播间封面 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/preLive/UpdatePreLiveInfo' \ + --data-urlencode 'platform=web' \ + --data-urlencode 'mobi_app=web' \ + --data-urlencode 'build=1' \ + --data-urlencode 'cover=https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data":{ + "audit_info":{ + "audit_title": "", + "audit_title_status": 0, + "audit_title_reason": "" + } + } +} +``` + +</details> + +使用此接口更新直播间标题 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/preLive/UpdatePreLiveInfo' \ + --data-urlencode 'platform=web' \ + --data-urlencode 'mobi_app=web' \ + --data-urlencode 'build=1' \ + --data-urlencode 'title=你好你好,我是花火~咱们来找点乐子吧?小灰毛,不要害羞嘛,要大胆的来,一起欢愉吧' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data":{ + "audit_info":{ + "audit_title": "你好你好,我是花火~咱们来找点乐子吧?小灰毛,不要害羞嘛,要大胆的来,一起欢愉吧", + "audit_title_status": 2, + "audit_title_reason": "先发后审" + } + } +} +``` + +</details> + +## 更新直播间公告 + +> https://api.live.bilibili.com/xlive/app-blink/v1/index/updateRoomNews + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | --------------------- | +| room_id | num | 直播间id | 必要 | 必须为自己的直播间id | +| uid | num | 用户id | 必要 | | +| content | str | 公告内容 | 必要 | 最大60个字符,可以为空 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| csrf_token | str | CSRF Token(位于 cookie) | | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />65530:token错误(登录错误)<br />1:错误 | +| data | array | 空 | | +| message | str | 错误信息 | 默认为ok | +| ttl | num | 1 | 作用尚不明确 | + +**示例:** + +修改直播间`11996900`公告为`测试修改公告` + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/index/updateRoomNews' \ +--data-urlencode 'room_id=11996900' \ +--data-urlencode 'uid=306903238' \ +--data-urlencode 'content=测试修改公告' \ +--data-urlencode 'csrf_token=xxx' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx;bili_jct=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +</details> + +## PC直播姬版本号获取 +> https://api.live.bilibili.com/xlive/app-blink/v1/liveVersionInfo/getHomePageLiveVersion + +*请求方式:GET* + +认证方式:无 + +鉴权方式:无 + +**请求参数 (Query):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | --------------------- | +| appkey | str | APP密钥 | 不必要 |使用PC投稿工具的appkey和appsec| +| sign | str | APP API签名得到的sign | 不必要 | | +| system_version | num | 暂不清楚 | 必要 | 可以直接写2 | +| ts | num | 10位时间戳 | 不必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------------------ | +| code | num | 返回值 | 0:成功<br />-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | obj | 内容本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------------------ | ---------------------- | +| curr_version | str | 直播姬最新版本号 | | +| build | num | 直播姬构建号 | | +| instruction | str | 更新说明(简要) | | +| file_size | str | 文件大小(字节) | | +| file_md5 | str | 安装包文件MD5 | | +| content | str | HTML格式的更新内容 | | +| download_url | str | 安装包下载链接 | | +| hdiffpatch_switch | num | 增量更新开关? | | + +**示例:** + +获取直播姬最新版本信息 + +```shell +curl 'https://api.live.bilibili.com/xlive/app-blink/v1/liveVersionInfo/getHomePageLiveVersion?appkey=aae92bc66f3edfab&sign=49d289e3ad34c509cc66fbee1c0affec&system_version=2&ts=1752971145' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "curr_version": "7.19.0.9432", + "build": 9432, + "instruction": "\u3010\u65b0\u589e\u3011\u65b0\u589e\u7f8e\u989c\u8c03\u6574\u5165\u53e3\n\u3010\u4f18\u5316\u3011\u5df2\u77e5\u95ee\u9898\u4f18\u5316", + "file_size": "300867136", + "file_md5": "e1619a8e2603aa94b58a58121f94403f", + "content": "<p>\u3010\u65b0\u589e\u3011\u65b0\u589e\u7f8e\u989c\u8c03\u6574\u5165\u53e3<br>\u3010\u4f18\u5316\u3011\u5df2\u77e5\u95ee\u9898\u4f18\u5316</p><p></p><p><br></p>", + "download_url": "https://dl.hdslb.com/bili/bililive/win/Livehime-Win-beta-7.19.0.9432-x64.exe", + "hdiffpatch_switch": 1 + } +} +``` + +</details> + + diff --git a/docs/live/message_stream.md b/docs/live/message_stream.md new file mode 100644 index 0000000..be7c355 --- /dev/null +++ b/docs/live/message_stream.md @@ -0,0 +1,7543 @@ +# 直播间信息流 + +## 获取信息流认证秘钥 + +> https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo + +*请求方法: GET* + +认证方式: Cookie(SESSDATA) + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md), Cookie中的`buvid3`不为空 + +可以选择进行认证,若未认证视作未登录,将会受到限制,详见后续内容。 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | ---- | +| id | num | 直播间真实id | 必要 | | +| type | num | (?) | 非必要 | 作用尚不明确 | +| web_location | str | (?) | 非必要 | 作用尚不明确 | +| w_rid | str | Wbi 签名 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | +| wts | num | 当前时间戳 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | + +注: 从2025年5月26日开始正式强制要求Wbi签名,2025年6月27日开始要求`buvid3`。见[#1295](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1295) + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0: 成功<br />1: 错误<br />65530: token 错误 (登录错误)<br />60009: 分区不存在<br />1002002: 房间号错误<br />**(其他错误码有待补充)** | +| message | str | 错误信息 | 默认为空 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ----- | -------------------- | ---- | +| group | str | live | | +| business_id | num | 0 | | +| refresh_row_factor | num | 0.125 | | +| refresh_rate | num | 100 | | +| max_delay | num | 5000 | | +| token | str | 认证秘钥 | | +| host_list | array | 信息流服务器节点列表 | | + +`data.host_list[n]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ---- | +| host | str | 服务器域名 | | +| port | num | TCP 端口 | | +| wss_port | num | WSS 端口 | | +| ws_port | num | WS 端口 | | + +**示例:** + +获得直播间 `1017` 的信息流认证秘钥 + +```shell +curl 'https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?id=1017&type=0&web_location=444.8&w_rid=cf24f88ea0cbb61e7b29aed0c070187d&wts=1748266797' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data":{ + "group": "live", + "business_id": 0, + "refresh_row_factor": 0.125, + "refresh_rate": 100, + "max_delay": 5000, + "token": "gZ2Pp2T4rIc2HfD0e53FHhQAwKWjb6-QDD84AcxXi8sk3S89XcdvPWOgClZIMZ5mESr19-JKTOFxayX4IjeSQuckWqohE5Y0aHn-agpc2uU7aPXW3-Xmra3QEKljMZS5fM3q2vCf2XcAsjc8Xup7MVAc8SLWWXhQz0s7f1alCkaJBAIPA-i2nS39Ri4O", + "host_list":[ + { + "host": "zj-cn-live-comet.chat.bilibili.com", + "port": 2243, + "wss_port": 2245, + "ws_port": 2244 + }, + { + "host": "zj-cn-live-comet.chat.bilibili.com", + "port": 2243, + "wss_port": 2245, + "ws_port": 2244 + }, + { + "host": "bd-sz-live-comet-14.chat.bilibili.com", + "port": 2243, + "wss_port": 2245, + "ws_port": 2244 + }, + { + "host": "bd-bj-live-comet-09.chat.bilibili.com", + "port": 2243, + "wss_port": 2245, + "ws_port": 2244 + }, + { + "host": "broadcastlv.chat.bilibili.com", + "port": 2243, + "wss_port": 2245, + "ws_port": 2244 + } + ] + } +} +``` + +</details> + +## 数据包格式 + +数据包为 MQ (Message Queue, 消息队列) 使用 WebSocket 或 TCP 连接作为通道, 具体格式为 头部数据 + 正文数据 + +**注: 特别的**, WS 与 WSS 连接地址带有路径 `/sub`, 如 `wss://broadcastlv.chat.bilibili.com:443/sub`. + +**再注:** B 站更新了隐私政策, 连接建立后, 若该连接认证时传入信息来自未登录用户, 会提示 `为保护用户隐私,未注册登陆用户将无法查看他人昵称`, 随后部分数据包(如“弹幕”、“用户交互消息”)的用户 mid 都为 `0`, 用户名部分也使用 `*` 保护, 部分房间受到豁免, 参见 [#732](https://github.com/SocialSisterYi/bilibili-API-collect/issues/732) + +操作流程 (伪代码): + +```javascript +const s = new Socket(uri); +// 认证包 +s.send('verify_hello'); +s.receive('verfiy_reply'); +// 心跳包 +setInterval(() => { + s.send('heartbeat'); + s.receive('heartbeat_reply'); +}, 30000); +// 接收普通包 +while (!s.isclosed()) { + s.receive('normal_package'); +} +``` + +头部格式: + +| 偏移量 | 长度 | 类型 | 含义 | +| ------ | ---- | ------ | ------------------------------------ | +| 0 | 4 | uint32 | 封包总大小 (头部大小 + 正文大小) | +| 4 | 2 | uint16 | 头部大小 (一般为 0x0010, 即 16 字节) | +| 6 | 2 | uint16 | 协议版本:<br />0: 普通包 (正文不使用压缩)<br />1: 心跳及认证包 (正文不使用压缩)<br />2: 普通包 (正文使用 zlib 压缩)<br/>3: 普通包 (使用 brotli 压缩的多个带文件头的普通包) | +| 8 | 4 | uint32 | 操作码 (封包类型) | +| 12 | 4 | uint32 | sequence, 每次发包时向上递增 | + +操作码: + +| 代码 | 含义 | +| ---- | ------------------- | +| 2 | 心跳包 | +| 3 | 心跳包回复 (人气值) | +| 5 | 普通包 (命令) | +| 7 | 认证包 | +| 8 | 认证包回复 | + +*普通包可能包含多条命令, 每个命令有一个头部, 指示该条命令的长度等信息* + +## 数据包 + +### 认证包 + +*方向: 上行* + +注: 连接成功后 5 秒内发送, 否则强制断开连接 + +再注: 若`uid`字段填写的是用户mid,则通过`获取信息流认证密钥`接口使用的认证信息所属用户mid必须与`uid`字段相同,并正确传递认证密钥,否则强制断开连接。 + +**JSON正文:** + +根对象: + +| 字段 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------ | ------ | --------------------------- | +| uid | num | 用户mid | 非必要 | 0 即为游客登录 | +| roomid | num | 加入房间的id | 必要 | 直播间真实id | +| protover | num | 协议版本 | 非必要 | 3, 与数据包头部协议版本无关 | +| platform | str | 平台标识 | 非必要 | `web` | +| type | num | 2 | 非必要 | | +| key | str | 认证秘钥 | 非必要 | | + +**示例:** + +```text +00000000: 0000 00ff 0010 0001 0000 0007 0000 0001 ................ +00000001: 7b22 7569 6422 3a31 3630 3134 3836 3234 {"uid":160148624 +00000002: 2c22 726f 6f6d 6964 223a 3232 3630 3831 ,"roomid":226081 +00000003: 3132 2c22 7072 6f74 6f76 6572 223a 332c 12,"protover":3, +00000004: 2270 6c61 7466 6f72 6d22 3a22 7765 6222 "platform":"web" +00000005: 2c22 7479 7065 223a 322c 226b 6579 223a ,"type":2,"key": +00000006: 2230 7670 5448 5737 7757 556e 6c6f 5270 "0vpTHW7wWUnloRp +00000007: 5251 6b47 764e 626e 7776 7364 6d2d 7159 RQkGvNbnwvsdm-qY +00000008: 4777 4243 5875 2d59 5164 6e57 7653 5547 GwBCXu-YQdnWvSUG +00000009: 7373 4139 7962 4b68 7932 6a78 3952 6f63 ssA9ybKhy2jx9Roc +0000000a: 4150 4651 6d54 4f6b 5277 6b4b 687a 4479 APFQmTOkRwkKhzDy +0000000b: 4839 5054 756f 5468 6834 4630 7562 584c H9PTuoThh4F0ubXL +0000000c: 4964 6e69 3734 5539 304b 4242 6972 3248 Idni74U90KBBir2H +0000000d: 7451 3941 3777 674b 3438 4b7a 495f 5a5a tQ9A7wgK48KzI_ZZ +0000000e: 3838 7557 4e59 6652 4f48 6964 4e6a 3732 88uWNYfROHidNj72 +0000000f: 7061 796e 3479 3071 4268 513d 3d22 7d payn4y0qBhQ=="} +``` + +### 认证包回复 + +*方向: 下行* + +注: 在认证包发送成功后就会收到 JSON 正文, 若失败则返回 HTTP/0.9 的 403 + +**JSON正文:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ----------- | +| code | num | 返回值 | 0: 认证成功 | + +**示例:** + +```text +00000000: 0000 001a 0010 0001 0000 0008 0000 0001 ................ +00000001: 7b22 636f 6465 223a 307d {"code":0} +``` + +### 心跳包 + +*方向: 上行* + +注: 30 秒左右发送一次, 否则 60 秒后会被强制断开连接 + +**正文:** + +可以为空或任意字符 + +**示例:** + +```text +00000000: 0000 001f 0010 0001 0000 0002 0000 0001 ................ +00000001: 5b6f 626a 6563 7420 4f62 6a65 6374 5d [object Object] +``` + +### 心跳包回复 (人气值) + +*方向: 下行* + +注: 在心跳包发送成功后就会收到 + +**正文:** + +正文分为两个部分 + +- 第一部分: uint32 整数代表的房间当前的人气值 + +- 第二部分: 心跳包正文内容 + +**示例:** + +示例房间内人气值为 2466 (0x000009a2) + +```text +00000000: 0000 0014 0010 0001 0000 0003 0000 0000 ................ +00000001: 0000 09a2 5b6f 626a 6563 7420 4f62 6a65 ....[object Obje +00000002: 6374 5d ct] +``` + +### 普通包 + +*方向: 下行* + +**正文:** + +一般为普通 JSON 数据 + +大多数普通包都经过 zlib 或 brotli 压缩 + +**示例:** + +```text +00000000: 0000 0086 0010 0003 0000 0005 0000 0000 ................ +00000001: 8b38 8000 0000 7200 1000 0000 0000 0500 .8....r......... +00000002: 0000 007b 2263 6d64 223a 2257 4154 4348 ...{"cmd":"WATCH +00000003: 4544 5f43 4841 4e47 4522 2c22 6461 7461 ED_CHANGE","data +00000004: 223a 7b22 6e75 6d22 3a32 3230 3937 2c22 ":{"num":22097," +00000005: 7465 7874 5f73 6d61 6c6c 223a 2232 2e32 text_small":"2.2 +00000006: e4b8 8722 2c22 7465 7874 5f6c 6172 6765 ...","text_large +00000007: 223a 2232 2e32 e4b8 87e4 baba e79c 8be8 ":"2.2.......... +00000008: bf87 227d 7d03 .."}}. +``` + +<!-- 2 年前的索引, 留作纪念, 不会增加新的内容 + +- [弹幕](#弹幕) +- [进场或关注消息](#进场或关注消息) +- [送礼](#送礼) +- [礼物星球点亮](#礼物星球点亮) +- [礼物连击](#礼物连击) +- [通知消息](#通知消息) +- [主播准备中](#主播准备中) +- [直播开始](#直播开始) +- [主播信息更新](#主播信息更新) +- [直播间高能榜](#直播间高能榜) +- [直播间高能用户数量](#直播间高能用户数量) +- [用户到达直播间高能榜前三名的消息](#用户到达直播间高能榜前三名的消息) +- [直播间用户点赞](#直播间用户点赞) +- [直播间点赞数](#直播间点赞数) +- [直播间发红包弹幕](#直播间发红包弹幕) +- [直播间红包](#直播间红包) +- [直播间抢到红包的用户](#直播间抢到红包的用户) +- [直播间看过人数](#直播间看过人数) +- [用户进场特效](#用户进场特效) +- [直播间在所属分区的排名改变](#直播间在所属分区的排名改变) +- [直播间在所属分区排名提升的祝福](#直播间在所属分区排名提升的祝福) +- [直播间信息更改](#直播间信息更改) +- [醒目留言按钮](#醒目留言按钮) +- [顶部横幅](#顶部横幅) +- [下播的直播间](#下播的直播间) +- [未知消息](#未知消息) + +--> + +#### 弹幕 (DANMU_MSG) + +注: 当收到弹幕时接收到此条消息, 10 进制转 16 进制若位数不足则在左侧补 `0` + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | ----------- | ---- | +| cmd | str | `DANMU_MSG` | | +| dm_v2 | str | 空串? | | +| info | array | 弹幕信息 | 感谢 [#1084](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1084) 补充 | +| msg_id | str | 弹幕id? | 极低概率存在 | +| p_is_ack | bool | | 极低概率存在 | +| p_msg_type | num | | 极低概率存在 | +| send_time | num | 发送时间戳 | Unix 毫秒时间戳,极低概率存在 | + +`info` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ----- | ------------------ | ---- | +| 0 | array | 弹幕信息 | 大部分信息可从 `info[0][15].extra` 获取 | +| 1 | str | 弹幕文本 | | +| 2 | array | 发送者信息 | 大部分信息可从 `info[0][15].user` 获取 | +| 3 | array | 发送者粉丝勋章信息 | 若无则为空 | +| 4 | array | 发送者UL等级信息 | | +| 5 | array | ? | | +| 6 | num | 0? | | +| 7 | num | 0? | | +| 8 | null | | | +| 9 | obj | 发送时间戳 | | +| 10 | num | 0? | | +| 11 | num | 0? | | +| 12 | null | | | +| 13 | null | | | +| 14 | num | 0? | | +| 15 | num | ? | | +| 16 | array | ? | | + +`info[0]` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ------------------------ | ---- | +| 0 | num | | | +| 1 | num | 弹幕模式 | 弹幕的 mode 字段 | +| 2 | num | 弹幕字体大小 | 弹幕的 fontsize 字段 | +| 3 | num | 弹幕颜色 | 弹幕的 color 字段<br />十六进制颜色值的十进制数字 | +| 4 | num | 发送时的 UNIX 毫秒时间戳 | 弹幕的 rnd 字段 | +| 5 | num | | 一个负整数 | +| 6 | num | 0? | | +| 7 | str | 可能为颜色? | 一个 16 进制数 | +| 8 | num | 0? | | +| 9 | num | 0? | | +| 10 | num | 0? | | +| 11 | str | 空串? | | +| 12 | num | 0? | | +| 13 | str | 字符串表示的 JSON Object | 空? | +| 14 | str | 字符串表示的 JSON Object | 空? | +| 15 | obj | 弹幕补充信息 | | +| 16 | obj | 活动相关信息? | | +| 17 | num | 0? | | +| 18 | null | | | + +`info[0][15]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | ------------ | ---- | +| extra | str | 弹幕信息 | 字符串表示的 JSON | +| mode | num | 弹幕模式? | | +| show_player_type | num | 0? | | +| user | obj | 用户相关信息 | | + +`info[0][15].extra` 表示的对象: + +见下方 JSONC + +```jsonc +{ + "send_from_me": false, // 是否由该接收消息的用户发送 + "mode": 0, // 弹幕模式 (info[0][1]) + "color": 9920249, // 弹幕颜色 (info[0][3]) + "dm_type": 0, + "font_size": 25, // 弹幕字体大小 (info[0][2]) + "player_mode": 1, + "show_player_type": 0, + "content": "白花300块[热]", // 弹幕文本 (info[1]) + "user_hash": "197700816", + "emoticon_unique": "", + "bulge_display": 0, + "recommend_score": 3, + "main_state_dm_color": "", + "objective_state_dm_color": "", + "direction": 0, // 弹幕方向? + "pk_direction": 0, + "quartet_direction": 0, + "anniversary_crowd": 0, + "yeah_space_type": "", + "yeah_space_url": "", + "jump_to_url": "", + "space_type": "", + "space_url": "", + "animation": {}, + "emots": { // 表情相关信息 (用于文本替换) + "[热]": { + "count": 1, + "descript": "[热]", + "emoji": "[热]", + "emoticon_id": 278, + "emoticon_unique": "emoji_278", + "height": 20, + "url": "http://i0.hdslb.com/bfs/live/6df760280b17a6cbac8c1874d357298f982ba4cf.png", + "width": 20 + } + }, + "is_audited": false, + "id_str": "364b06e3c561af3d5921f1253d66c1d575", + "icon": { + "prefix": { + "type": 1, + "resource": "ChronosWealth_4.png" + } + }, + "show_reply": true, // 显示回复? + "reply_mid": 0, + "reply_uname": "", + "reply_uname_color": "", + "reply_is_mystery": false, + "hit_combo": 0 +} +``` + +`info[0][15].user` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------- | ---- | +| base | obj | 基本信息 | | +| guard | null | | | +| guard_leader | obj | ? | | +| medal | obj | 粉丝排信息 | 参见 [指定用户的所有粉丝勋章信息](../user/medals.md#指定用户的所有粉丝勋章信息) `data.list[n].uinfo_medal` | +| title | obj | ? | | +| uhead_frame | null | | | +| uid | num | 发送者 mid | | +| wealth | null | | | + +`info[0][15].user.base` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ---------------- | ------- | +| face | str | 发送者头像 URL | | +| is_mystery | bool | 是否是神秘用户? | | +| name | str | 发送者用户名 | | +| name_color | num | 用户名颜色 | 10 进制 | +| name_color_str | num | 字符串表示的颜色 | | +| offical_info | obj | 认证信息 | 参见 [用户空间详细信息](../user/info.md#用户空间详细信息) `data.official` | +| origin_info | obj | 同 `face` `name` | | +| risk_ctrl_info | null | | | + +`info[0][15].user.title` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | ----- | ---- | +| old_title_css_id | str | 空串? | | +| title_css_id | str | 空串? | | + +`info[0][16]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ----- | ---- | +| activity_identity | str | 空串? | | +| activity_source | num | 0? | | +| not_show | num | 0? | | + +`info[2]` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ------------- | ---- | +| 0 | num | 发送者 mid | 同 `info[0][15].user.uid` | +| 1 | str | 发送者用户名 | 同 `info[0][15].user.base.name` | +| 2 | num | 0? | | +| 3 | num | 0? | | +| 4 | num | 0? | | +| 5 | num | 用户权限等级? | 参见 [用户空间详细信息](../user/info.md#用户空间详细信息) `data.rank` | +| 6 | num | ? | | + +`info[3]` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ---------------------------------------- | ---- | +| 0 | num | 同 `info[0][15].user.medal.level` | | +| 1 | str | 同 `info[0][15].user.medal.name` | | +| 2 | str | 粉丝牌创建主播名称 | | +| 3 | num | ? | | +| 4 | num | 同 `info[0][15].user.medal.color` | | +| 5 | str | 空串? | | +| 6 | num | 0? | | +| 7 | num | 同 `info[0][15].user.medal.color_border` | | +| 8 | num | 同 `info[0][15].user.medal.color_start` | | +| 9 | num | 同 `info[0][15].user.medal.color_end` | | +| 10 | num | 同 `info[0][15].user.medal.guard_level` | | +| 11 | num | 同 `info[0][15].user.medal.is_light` | | +| 12 | num | 同 `info[0][15].user.medal.ruid` | | + +`info[4]` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ---- | ---- | +| 0 | num | ? | | +| 1 | num | ? | | +| 2 | num | ? | | +| 3 | num | ? | | +| 4 | num | ? | | + +`info[5]` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ----- | ---- | +| 0 | str | 空串? | | +| 1 | str | 空串? | | + +`info[9]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | --------------- | +| ct | str | ? | 16 进制 | +| ts | num | 发送时间 | UNIX 秒级时间戳 | + +`info[16]` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ---- | ---- | +| 0 | num | ? | | + +**示例:** + +<details> +<summary>查看消息示例(带注释):</summary> + +```jsonc +{ + "cmd": "DANMU_MSG", + "dm_v2": "", + "info": [ + [ + 0, + 1, + 25, //字体大小 + 9920249, //弹幕颜色代码(10进制)#975ef9 + 1723979200649, + -1312973962, + 0, + "0bc8acd0", + 0, + 0, + 0, + "", + 0, + "{}", + "{}", + { + "extra": "{\"send_from_me\":false,\"mode\":0,\"color\":9920249,\"dm_type\":0,\"font_size\":25,\"player_mode\":1,\"show_player_type\":0,\"content\":\"白花300块[热]\",\"user_hash\":\"197700816\",\"emoticon_unique\":\"\",\"bulge_display\":0,\"recommend_score\":3,\"main_state_dm_color\":\"\",\"objective_state_dm_color\":\"\",\"direction\":0,\"pk_direction\":0,\"quartet_direction\":0,\"anniversary_crowd\":0,\"yeah_space_type\":\"\",\"yeah_space_url\":\"\",\"jump_to_url\":\"\",\"space_type\":\"\",\"space_url\":\"\",\"animation\":{},\"emots\":{\"[热]\":{\"count\":1,\"descript\":\"[热]\",\"emoji\":\"[热]\",\"emoticon_id\":278,\"emoticon_unique\":\"emoji_278\",\"height\":20,\"url\":\"http://i0.hdslb.com/bfs/live/6df760280b17a6cbac8c1874d357298f982ba4cf.png\",\"width\":20}},\"is_audited\":false,\"id_str\":\"364b06e3c561af3d5921f1253d66c1d575\",\"icon\":{\"prefix\":{\"type\":1,\"resource\":\"ChronosWealth_4.png\"}},\"show_reply\":true,\"reply_mid\":0,\"reply_uname\":\"\",\"reply_uname_color\":\"\",\"reply_is_mystery\":false,\"hit_combo\":0}", + "mode": 0, + "show_player_type": 0, + "user": { + "base": { + "face": "https://i1.hdslb.com/bfs/face/5a9bb9cac3afbb58347c808ae76aaa41ca967d07.jpg", //弹幕发送用户头像 + "is_mystery": false, + "name": "tim1997", //弹幕发送用户名称 + "name_color": 0, + "name_color_str": "", + "official_info": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "origin_info": { + "face": "https://i1.hdslb.com/bfs/face/5a9bb9cac3afbb58347c808ae76aaa41ca967d07.jpg", + "name": "tim1997" + }, + "risk_ctrl_info": null + }, + "guard": null, + "guard_leader": { + "is_guard_leader": false + }, + "medal": { + "color": 2951253, //粉丝牌颜色(10进制)#2d0855 + "color_border": 16771156, //粉丝牌边框颜色(10进制)#ffe854 + "color_end": 10329087, //粉丝牌渐变颜色结束(10进制)#9d9bff + "color_start": 2951253, //粉丝牌渐变颜色开始(10进制)#2d0855 + "guard_icon": "https://i0.hdslb.com/bfs/live/1d16bf0fcc3b1b768d1179d60f1fdbabe6ab4489.png", //粉丝牌左边的图标 + "guard_level": 1, //类型 1.总督 2.提督 3,舰长 + "honor_icon": "", + "id": 1279130, + "is_light": 1, + "level": 29, //粉丝牌等级 + "name": "果咩吖", //粉丝牌名称 + "ruid": 3546569288714792, //粉丝牌创建者UID + "score": 50427312, + "typ": 0, + "user_receive_count": 0, + "v2_medal_color_border": "#D47AFFFF", //粉丝牌边框颜色(APP) + "v2_medal_color_end": "#9660E5CC", //粉丝牌渐变颜色结束(APP) + "v2_medal_color_level": "#6C00A099", //粉丝牌右边等级数字颜色(APP) + "v2_medal_color_start": "#9660E5CC", //粉丝牌渐变颜色开始(APP) + "v2_medal_color_text": "#FFFFFFFF" //粉丝牌右边圆形颜色(APP) + }, + "title": { + "old_title_css_id": "", + "title_css_id": "" + }, + "uhead_frame": null, + "uid": 6088969, //弹幕发送用户UID + "wealth": null + } + }, + { + "activity_identity": "", + "activity_source": 0, + "not_show": 0 + }, + 0 + ], + "白花300块[热]", //弹幕内容 + [ + 6088969, //同info[0][15].user.uid + "tim1997", //同info[0][15].user.base.name + 0, + 0, + 0, + 10000, + 1, + "" + ], + [ + 29, //同info[0][15].user.medal.level + "果咩吖", //同info[0][15].user.medal.name + "果宝Official", //粉丝牌创建主播名称 + 31180317, + 2951253, //同info[0][15].user.medal.color + "", + 0, + 16771156, //同info[0][15].user.medal.color_border + 2951253, //同info[0][15].user.medal.color_start + 10329087, //同info[0][15].user.medal.color_end + 1, //同info[0][15].user.medal.guard_level + 1, //同info[0][15].user.medal.is_light + 3546569288714792 //同info[0][15].user.medal.ruid + ], + [ + 39, + 0, + 10512625, + 42523, + 2 + ], + [ + "", + "" + ], + 0, + 0, + null, + { + "ct": "AFFF4206", + "ts": 1723979200 //时间戳(秒级) + }, + 0, + 0, + null, + null, + 0, + 1040, + [ + 49 + ], + null + ] +} +``` + +</details> + +#### 交互信息合并 (DM_INTERACTION) + +注: 连续多条相同弹幕时触发 + +**JSON正文:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | ---- | +| cmd | str | `DM_INTERACTION` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ---- | +| id | num | 事件 ID | | +| status | num | 状态 | | +| type | num | 事件类型 | 101:投票<br />102:弹幕<br />103:关注<br />104:送礼<br />105:分享<br />106:点赞 | +| data | str | 事件数据 | 一个JSON字符串 | +| dmsource | num | | | + +`data.data` 字符串对象: + +内容格式取决于`data.type`的类型,下面将按照`data.data(类型)`进行区分标记。 + +温馨提示: 要记得先解析`data.data`内的JSON字符串,不要直接使用哦。 + +`data.data(101)` 对象: (投票) + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| question | str | 投票问题 | | +| options | obj | 投票详细选项 | | +| vote_id | num | 投票id | | +| cnt | num | 弹幕计数 | | +| duration | num | 持续时间 | 单位毫秒 | +| left_duration | num | 剩余时间 | 单位毫秒 | +| fade_duration | num | (?) | | +| waiting_duration | num | (?) | | +| result | num | 投票倾向状态 | | +| result_text | str | 投票倾向提示 | | +| component | str | 投票链接 | | +| natural_die_duration | num | (?) | | +| my_vote | num | (?) | | +| component_anchor | str | 投票控制链接 | | +| audit_reason | str | 审核结果 | | +| combo | obj | 投票状态展示 | | + +`data.data(101).options` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| idx | num | 选项索引 | | +| desc | str | 选项内容 | | +| cnt | num | 票数 | | +| percent | num | 显示占比 | | + +`data.data(101).combo` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| id | num | 标识id | 同`data.data.options`数组中对象的`idx` | +| status | num | 状态 | 同`data.status` | +| content | str | 投票选项内容 | | +| cnt | str | 弹幕计数 | | +| guide | str | (?) | 空字符串 | +| left_duration | num | 剩余时间 | | +| fade_duration | num | (?) | | +| prefix_icon | str | 投票选项图标 | | + +`data.data(102)` 对象: (弹幕) + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ----- | -------------------- | ---- | +| combo | array | 连续发送弹幕事件信息 | | +| merge_interval | num | 合并弹幕时间间隔 | | +| card_appear_interval | num | 弹窗出现时间间隔 | | +| send_interval | num | 发送时间间隔 | | + +`data.data(102).combo[n]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------------- | ------------- | +| id | num | 标识 ID | | +| status | num | 状态 | | +| content | str | 重复的弹幕内容 | | +| cnt | num | 重复数量 | | +| guide | str | 标题词 | "他们都在说:" | +| left_duration | num | 左移时长 | | +| fade_duration | num | 淡化时长 | | + +`data.data(103)` 对象: (关注) + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| fade\_duration | num | | | +| cnt | num | 关注计数 | | +| card_appear_interval | num | | | +| suffix\_text | str | 提示文本 | `人关注了主播` | +| reset\_cnt | num | | | +| display\_flag | num | | | + +`data.data(104)` 对象: (送礼) + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| fade\_duration | num | | | +| cnt | num | 投喂计数 | | +| card_appear_interval | num | | | +| suffix\_text | str | 提示文本 | `人在投喂` | +| reset\_cnt | num | | | +| display\_flag | num | | | +| gift\_id | num | 礼物 ID | | +| gift_alert_message | str | | | + +`data.data(105)` 对象: (分享) + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| fade\_duration | num | | | +| cnt | num | 分享计数 | | +| card_appear_interval | num | | | +| suffix\_text | str | 提示文本 | `人分享了直播间` | +| reset\_cnt | num | | | +| display\_flag | num | | | + +`data.data(106)` 对象: (点赞) + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| fade\_duration | num | | | +| cnt | num | 点赞计数 | | +| card_appear_interval | num | | | +| suffix\_text | str | 提示文本 | `人正在点赞` | +| reset\_cnt | num | | | +| display\_flag | num | | | + +**示例:** + +<details> +<summary>查看正文示例:</summary> + +type===101 + +```json +{ + "cmd": "DM_INTERACTION", + "data": { + "data": "{\"question\":\"投票\",\"options\":[{\"idx\":1,\"desc\":\"赞成\",\"cnt\":0,\"percent\":0.5},{\"idx\":2,\"desc\":\"弃权\",\"cnt\":0,\"percent\":0.5}],\"vote_id\":98014370742272,\"cnt\":0,\"duration\":60000,\"left_duration\":60000,\"fade_duration\":1000,\"waiting_duration\":-1,\"result\":1,\"result_text\":\"平局\",\"component\":\"https://live.bilibili.com/p/html/live-app-guessing-game/vote.html?is_live_half_webview=1\\u0026hybrid_half_ui=1,3,100p,245,0,0,30,100,12,0;2,2,375,100p,0,0,30,100,12,0;3,3,100p,245,0,0,30,100,12,0;4,2,375,100p,0,0,30,100,12,0;5,3,100p,70p,0,0,30,100,12,0;6,3,100p,70p,0,0,30,100,12,0;7,3,100p,70p,0,0,30,100,12,0;8,3,100p,70p,0,0,30,100,12,0\",\"natural_die_duration\":30000,\"my_vote\":0,\"component_anchor\":\"https://live.bilibili.com/p/html/live-app-guessing-game/anchor_vote.html?pc_ui=390,428,0,3\\u0026is_live_half_webview=1\\u0026hybrid_half_ui=1,3,100p,448,0,0,30,0,12,0;2,2,375,100p,0,0,30,0,12,0;3,3,100p,448,0,0,30,0,12,0;4,2,375,100p,0,0,30,0,12,0;5,3,100p,448,0,0,30,0,12,0;6,2,320,100p,0,0,30,0,12,0;7,2,320,100p,0,0,30,0,12,0;8,2,320,100p,0,0,30,0,12,0#/\",\"audit_reason\":\"您提交的弹幕投票未审核通过,请修改\",\"combo\":[{\"id\":1,\"status\":2,\"content\":\"赞成\",\"cnt\":0,\"guide\":\"\",\"left_duration\":60000,\"fade_duration\":0,\"prefix_icon\":\"http://i0.hdslb.com/bfs/dm/7d7e3682c9116aa3503418abe3cde6b45ed2e91e.png\"},{\"id\":2,\"status\":2,\"content\":\"弃权\",\"cnt\":0,\"guide\":\"\",\"left_duration\":60000,\"fade_duration\":0,\"prefix_icon\":\"http://i0.hdslb.com/bfs/dm/f83c7280b2a90b4f58a68fd8c594ea7d5667e3cb.png\"}]}", + "dmscore": 36, + "id": 98014370742272, + "status": 2, + "type": 101 + } +} +``` + +type===102 + +```json +{ + "cmd": "DM_INTERACTION", + "data": { + "id": 6785480089600, + "status": 4, + "type": 102, + "data": { + "combo": [ + { + "id": 6785480089600, + "status": 4, + "content": "晚安", + "cnt": 3, + "guide": "他们都在说:", + "left_duration": 20000, + "fade_duration": 60000 + } + ], + "merge_interval": 1000, + "card_appear_interval": 1000, + "send_interval": 1000 + } + } +} +``` + +type===103 + +```json +{ + "cmd": "DM_INTERACTION", + "data": { + "data": "{\"fade_duration\":10000,\"cnt\":6,\"card_appear_interval\":0,\"suffix_text\":\"人关注了主播\",\"reset_cnt\":0,\"display_flag\":1}", + "dmscore": 36, + "id": 94362402889728, + "status": 4, + "type": 103 + } +} +``` + +type===104 + +```json +{ + "cmd": "DM_INTERACTION", + "data": { + "data": "{\"fade_duration\":10000,\"cnt\":5,\"card_appear_interval\":0,\"suffix_text\":\"人在投喂\",\"reset_cnt\":0,\"display_flag\":1,\"gift_id\":33988,\"gift_alert_message\":\"投喂一个%s支持主播\"}", + "dmscore": 36, + "id": 85744481752576, + "status": 5, + "type": 104 + } +} +``` + +type===105 + +```json +{ + "cmd": "DM_INTERACTION", + "data": { + "data": "{\"fade_duration\":10000,\"cnt\":1,\"card_appear_interval\":0,\"suffix_text\":\"人分享了直播间\",\"reset_cnt\":0,\"display_flag\":1}", + "dmscore": 36, + "id": 85743053669888, + "status": 4, + "type": 105 + } +} +``` + +type===106 + +```json +{ + "cmd": "DM_INTERACTION", + "data": { + "data": "{\"fade_duration\":10000,\"cnt\":11,\"card_appear_interval\":0,\"suffix_text\":\"人正在点赞\",\"reset_cnt\":1,\"display_flag\":1}", + "dmscore": 36, + "id": 66159395305984, + "status": 5, + "type": 106 + } +} +``` + +</details> + +#### 用户交互消息 (INTERACT_WORD) + +注: 有用户进入直播间、关注主播、分享直播间时触发 + +已被`INTERACT_WORD_V2`替换。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `INTERACT_WORD` | | +| data | obj | 用户交互信息 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| contribution | obj | 待调查 | | +| dmscore | num | 待调查 | | +| fans_medal | obj | 粉丝勋章 | | +| identities | num | 待调查 | | +| is_spread | num | 待调查 | | +| msg_type | num | 1为进场,2为关注,3为分享 | | +| roomid | num | 房间号 | | +| is_spread | num | 待调查 | | +| is_spread | num | 待调查 | | +| score | num | 待调查 | | +| spread_desc | str | 待调查 | | +| spread_info | str | 待调查 | | +| tail_icon | num | 待调查 | | +| timestamp | num | 时间戳 | | +| trigger_time | num | 触发时间 | | +| uid | num | 用户ID | | +| uname | str | 用户名称 | | +| uname_color | str | 用户名称颜色 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "INTERACT_WORD", + "data": { + "contribution": { + "grade": 0 + }, + "dmscore": 4, + "fans_medal": { + "anchor_roomid": 890976, + "guard_level": 0, + "icon_id": 0, + "is_lighted": 0, + "medal_color": 6067854, + "medal_color_border": 12632256, + "medal_color_end": 12632256, + "medal_color_start": 12632256, + "medal_level": 1, + "medal_name": "小豆皮", + "score": 134, + "special": "", + "target_id": 6574487 + }, + "identities": [ + 1 + ], + "is_spread": 0, + "msg_type": 1, + "roomid": 24143902, + "score": 1644563948936, + "spread_desc": "", + "spread_info": "", + "tail_icon": 0, + "timestamp": 1644563948, + "trigger_time": 1644563947876475000, + "uid": 335979315, + "uname": "TIM_Init", + "uname_color": "" + } +} +``` + +</details> + +#### 用户交互消息V2 (INTERACT_WORD_V2) + +注: 该cmd已将`INTERACT_WORD`替换 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `INTERACT_WORD_V2` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| dmscore | num | | | +| pb | str | 使用 base64 编码 protobuf 后的数据 | 解析后数据基本与`INTERACT_WORD`的`data`相同 | + +用于解析protobuf数据的proto文件: [#1332(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1332#issuecomment-3047237367) + +注: 先用 base64 解码 `data.pb` 内的字符串为字节数据pb,再使用proto文件解码pb数据。 + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "INTERACT_WORD_V2", + "data": { + "dmscore": 3, + "pb": "CJTwwNEBEgpTdGFyU2VhMjQ2IgIDASgBMNWgITispaTDBkDUubHe/jJKLAiv8CkQEhoG55Sf5oCBIKS6ngYopLqeBjCkup4GOKS6ngZAAWDVoCFo9JQRYgB4gZ/v1tmc1qcYmgEAsgHPAQiU8MDRARJYCgpTdGFyU2VhMjQ2EkpodHRwczovL2kwLmhkc2xiLmNvbS9iZnMvZmFjZS8xMDliNzg3YzVmMTEzYzRhM2M3NDE1YmI5YmY2YjgyYmMzM2JjNGUyLmpwZxpnCgbnlJ/mgIEQEhikup4GIKS6ngYopLqeBjCkup4GOP/hAUgBUK/wKWD0lBF6CSNEQzZCNkI5OYIBCSNEQzZCNkI5OYoBCSNEQzZCNkI5OZIBCSNGRkZGRkZGRpoBCSM4MTAwMUY5OSICCAkyALoBAA==" + } +} +``` + +</details> + +#### 上舰通知 (GUARD_BUY) + +注: 当有用户购买 舰长 / 提督 / 总督 时 + +**JSON消息:** + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| cmd | str | `GUARD_BUY` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- |-----|--------------------------|-----| +| uid | num | 用户ID | | +| username | str | 用户名称 | | +| guard_level | num | 大航海等级 | 1: 总督<br />2: 提督<br />3:舰长 | +| num | num | 数量 | | +| price | num | 原金瓜子标价 | 即 CNY\*1000 | +| gift_id | num | 礼物id | | +| gift_name | str | 礼物名称 | | +| start_time | num | 待调查 | | +| end_time | num | 待调查 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "GUARD_BUY", + "data": { + "uid": 14225357, + "username": "妙妙喵喵妙妙喵O_O", + "guard_level": 3, + "num": 1, + "price": 198000, + "gift_id": 10003, + "gift_name": "舰长", + "start_time": 1677069316, + "end_time": 1677069316 + } +} +``` + +</details> + +#### 用户庆祝消息 (USER_TOAST_MSG) + +注: 用户购买 舰长 / 提督 / 总督 后的庆祝消息, 内容包含用户陪伴天数 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | ---- | +| cmd | str | `USER_TOAST_MSG` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- |-----|--------------------------|-----| +| anchor_show | bool | 是否显示 | | +| color | str | 颜色 | | +| dmscore | num | 待调查 | | +| effect_id | num | 待调查 | | +| face_effect_id | num | 待调查 | | +| gift_id | num | 礼物id | | +| group_name | str | 待调查 | | +| group_op_type | num | 待调查 | | +| group_role_name | str | 待调查 | | +| guard_level | num | 大航海等级 | 1: 总督<br />2:<br />提督<br />3:舰长 | +| is_group | num | 待调查 | | +| is_show | num | 待调查 | | +| num | num | 上舰个数 | | +| op_type | num | 待调查 | | +| payflow_id | str | 待调查 | | +| price | num | 实际金瓜子标价 | 即 CNY\*1000 | +| role_name | str | 身份名称 | | +| room_effect_id | num | 待调查 | | +| room_group_effect_id | num | 待调查 | | +| start_time | num | 待调查 | | +| svga_block | num | 待调查 | | +| target_guard_count | str | 庆祝消息正文 | | +| toast_msg | num | 待调查 | | +| uid | num | 上舰人UID | | +| unit | str | 购买身份时间单位 | | +| user_show | bool | 待调查 | | +| username | str | 上舰人用户名 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "USER_TOAST_MSG", + "data": { + "anchor_show": true, + "color": "#00D1F1", + "dmscore": 90, + "effect_id": 397, + "end_time": 1702580687, + "face_effect_id": 44, + "gift_id": 10003, + "group_name": "", + "group_op_type": 0, + "group_role_name": "", + "guard_level": 3, + "is_group": 0, + "is_show": 0, + "num": 1, + "op_type": 1, + "payflow_id": "2312150304155852173446521", + "price": 138000, + "role_name": "舰长", + "room_effect_id": 590, + "room_group_effect_id": 1337, + "start_time": 1702580687, + "svga_block": 0, + "target_guard_count": 146, + "toast_msg": "<%无光之日%> 在主播Mia米娅-的直播间开通了舰长,今天是TA陪伴主播的第1天", + "uid": 79667344, + "unit": "月", + "user_show": true, + "username": "无光之日" + } +} +``` + +</details> + +#### 醒目留言 (SUPER_CHAT_MESSAGE) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | --------------------- | ---- | +| cmd | str | `SUPER_CHAT_MESSAGE` | | +| data | obj | 信息本体 | | +| roomid | num | 直播间房间号 (非短号) | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- |-----|----------------| --------- | +| background_bottom_color | str | 待调查 | | +| background_color | str | 待调查 | | +| background_color_end | str | 待调查 | | +| background_color_start | str | 待调查 | | +| background_icon | str | 待调查 | | +| background_image | str | 待调查 | | +| background_price_color | str | 待调查 | | +| color_point | num | 待调查 | | +| dmscore | num | 待调查 | | +| end_time | num | 待调查 | | +| gift | obj | 礼物信息 | | +| id | num | 醒目留言 ID | | +| is_ranked | num | 待调查 | | +| is_send_audit | num | 待调查 | | +| medal_info | obj | SC发送用户佩戴的粉丝牌信息 | | +| message | str | sc内容 | | +| message_font_color | str | SC文本颜色 | | +| message_trans | str | 机翻sc内容 | | +| price | num | sc金额 | 为 CNY 价值 | +| rate | num | 待调查 | | +| start_time | num | 待调查 | | +| time | num | sc持续时间 | | +| token | num | 待调查 | | +| trans_mark | num | 待调查 | | +| ts | num | 待调查 | | +| uid | num | 发送用户uid | | +| user_info | obj | 发送用户信息 | | + +`data.gift` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- |-----|------|------| +| gift_id | num | 礼物id | | +| gift_name | str | 礼物名称 | 一般均为"醒目留言" | +| num | num | 数量 | | + +`data.medal_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- |-----|-------------|------| +| anchor_roomid | num | 房间号 | 包含短号 | +| anchor_uname | str | 主播昵称 | | +| guard_level | num | 大航海等级 | 1: 总督<br/>2: 提督<br />3: 舰长 | +| icon_id | num | 待调查 | | +| is_lighted | num | 待调查 | | +| medal_color | str | 待调查 | | +| medal_color_border | num | 待调查 | | +| medal_color_end | num | 待调查 | | +| medal_color_start | num | 待调查 | | +| medal_level | num | 粉丝牌等级 | | +| medal_name | str | 粉丝牌名称 | | +| special | str | 待调查 | | +| target_id | num | 粉丝牌对应的主播mid | | + +`data.user_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- |-----|-------|------| +| face | num | 用户头像 | | +| face_frame | num | 头像边框 | | +| guard_level | num | 大航海等级 | 1: 总督<br />2: 提督<br />3: 舰长 | +| is_main_vip | num | 待调查 | | +| is_svip | num | 待调查 | | +| is_vip | num | 待调查 | | +| level_color | str | 待调查 | | +| manager | num | 待调查 | | +| name_color | str | 待调查 | | +| title | str | 待调查 | | +| uname | str | 用户名称 | | +| user_level | num | 待调查 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "SUPER_CHAT_MESSAGE", + "data": { + "background_bottom_color": "#2A60B2", + "background_color": "#EDF5FF", + "background_color_end": "#405D85", + "background_color_start": "#3171D2", + "background_icon": "", + "background_image": "https://i0.hdslb.com/bfs/live/a712efa5c6ebc67bafbe8352d3e74b820a00c13e.png", + "background_price_color": "#7497CD", + "color_point": 0.7, + "dmscore": 120, + "end_time": 1677069095, + "gift": { + "gift_id": 12000, + "gift_name": "醒目留言", + "num": 1 + }, + "id": 6522809, + "is_ranked": 1, + "is_send_audit": 0, + "medal_info": { + "anchor_roomid": 732, + "anchor_uname": "Asaki大人", + "guard_level": 3, + "icon_id": 0, + "is_lighted": 1, + "medal_color": "#1a544b", + "medal_color_border": 6809855, + "medal_color_end": 5414290, + "medal_color_start": 1725515, + "medal_level": 21, + "medal_name": "ASAKI", + "special": "", + "target_id": 194484313 + }, + "message": "猪播完美预测自己第一个死,这就是鹅鸭杀高玩吗", + "message_font_color": "#A3F6FF", + "message_trans": "", + "price": 30, + "rate": 1000, + "start_time": 1677069035, + "time": 60, + "token": "7BED5681", + "trans_mark": 0, + "ts": 1677069035, + "uid": 294094150, + "user_info": { + "face": "https://i1.hdslb.com/bfs/face/7a11b48e0a3055e220fa8b4c7d938cd4bcac2577.jpg", + "face_frame": "https://i0.hdslb.com/bfs/live/80f732943cc3367029df65e267960d56736a82ee.png", + "guard_level": 3, + "is_main_vip": 1, + "is_svip": 0, + "is_vip": 0, + "level_color": "#969696", + "manager": 0, + "name_color": "#00D1F1", + "title": "0", + "uname": "界原虚", + "user_level": 6 + } + }, + "roomid": 6154037 +} +``` + +</details> + +#### 醒目留言日语 (SUPER_CHAT_MESSAGE_JPN) + +基本同 [醒目留言 (SUPER_CHAT_MESSAGE)](#醒目留言-super_chat_message), 但多了 `message_jpn` 字段 + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "SUPER_CHAT_MESSAGE_JPN", + "data": { + "id": "3790747", + "uid": "394060741", + "price": 30, + "rate": 1000, + "message": "棉花!!转盘中了武器后,上号30抽3武器,救命!!!", + "message_jpn": "", + "is_ranked": 1, + "background_image": "https://i0.hdslb.com/bfs/live/a712efa5c6ebc67bafbe8352d3e74b820a00c13e.png", + "background_color": "#EDF5FF", + "background_icon": "", + "background_price_color": "#7497CD", + "background_bottom_color": "#2A60B2", + "ts": 1650363318, + "token": "24655ABF", + "medal_info": { + "icon_id": 0, + "target_id": 1871001, + "special": "", + "anchor_uname": "棉花大哥哥", + "anchor_roomid": 103, + "medal_level": 24, + "medal_name": "棉花花", + "medal_color": "#1a544b" + }, + "user_info": { + "uname": "改了名真的能中吗", + "face": "http://i1.hdslb.com/bfs/face/e2391f132cd981fb70468a8ce9418513e959eb10.jpg", + "face_frame": "https://i0.hdslb.com/bfs/live/80f732943cc3367029df65e267960d56736a82ee.png", + "guard_level": 3, + "user_level": 11, + "level_color": "#61c05a", + "is_vip": 0, + "is_svip": 0, + "is_main_vip": 1, + "title": "0", + "manager": 0 + }, + "time": 60, + "start_time": 1650363318, + "end_time": 1650363378, + "gift": { + "num": 1, + "gift_id": 12000, + "gift_name": "醒目留言" + } + }, + "roomid": "34348" +} +``` + +</details> + +#### 醒目留言删除 (SUPER_CHAT_MESSAGE_DELETE) + +<!--{ + "gh": [360] +}--> + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `SUPER_CHAT_MESSAGE_DELETE` | | +| data | obj | 消息本体 | | +| roomid | num | 直播间号 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| ids | arr | 待删除的醒目留言 ID 列表 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "SUPER_CHAT_MESSAGE_DELETE", + "data": { + "ids": [ + 3897503 + ] + }, + "roomid": 23708804 +} +``` + +</details> + +#### 送礼 (SEND_GIFT) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| cmd | str | `SEND_GIFT` | | +| data | obj | 消息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| action | str | 礼物操作,一般为"投喂" | | +| batch_combo_id | str | 待调查 | 有时为空字符串 | +| batch_combo_send | obj | 待调查 | 有时为null | +| beatId | str | 待调查 | | +| biz_source | str | 待调查 | | +| blind_gift | | 待调查 | | +| broadcast_id | num | 待调查 | | +| coin_type | str | 标识金银瓜子礼物对应是否付费? | | +| combo_resources_id | num | 待调查 | | +| combo_send | | 待调查 | | +| comber_stay_time | num | 待调查 | | +| combo_total_coin | num | 待调查 | | +| crit_prob | num | 待调查 | | +| demarcation | num | 待调查 | | +| discount_price | num | 待调查 | | +| dmscore | num | 待调查 | | +| draw | num | 待调查 | | +| effect | num | 待调查 | | +| effect_block | num | 待调查 | | +| face | str | 礼物投喂者的头像URL | | +| face_effect_id | num | 待调查 | | +| face_effect_type | num | 待调查 | | +| float_sc_resource_id | num | 待调查 | | +| giftId | num | 礼物ID | | +| giftName | str | 礼物名称 | | +| giftType | num | 待调查 | | +| gold | number | 待调查 | | +| guard_level | num | 待调查 | | +| is_first | bool | 待调查 | | +| is_join_receiver | bool | 待调查 | | +| is_naming | bool | 待调查 | | +| is_special_batch | num | 待调查 | | +| magnification | num | 待调查 | | +| medal_info | obj | 礼物投喂者粉丝奖牌信息 | | +| name_color | str | 待调查 | | +| num | num | 该次投喂的礼物数量 | | +| original_gift_name | str | 待调查 | | +| price | num | 价值 | | +| rcost | num | 待调查 | | +| receive_user_info | obj | 礼物接收者信息,一般是主播 | | +| remain | num | 待调查 | | +| rnd | num | 礼物发送时的时间戳,以及后面9位未知数字 | | +| send_master | | 待调查 | | +| silver | num | 待调查 | | +| super | num | 待调查 | | +| super_batch_gift_num | num | 待调查 | | +| super_gift_num | num | 待调查 | | +| svga_block | num | 待调查 | | +| switch | bool | 待调查 | | +| tag_image | str | 待调查 | | +| tid | num | 礼物发送时的时间戳,以及后面9位未知数字 | 似乎与rnd字段相同 | +| timestamp | num | 礼物发送时的时间戳 | | +| top_list | | 待调查 | | +| total_coin | num | 实际金银瓜子总价值 | 不是总等于 num*price | +| uid | num | 礼物投喂者的UID | | +| uname | str | 礼物投喂者的名称 | | + +`data.batch_combo_send` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| action | str | 礼物操作,一般为"投喂" | | +| batch_combo_id | str | 待调查 | | +| batch_combo_num | num | 待调查 | | +| blind_gift | | 待调查 | | +| gift_id | num | 待调查 | | +| gift_name | str | 投喂的礼物名称 | 待调查 | +| gift_num | num | 投喂礼物数量 | 待调查 | +| send_master | | 待调查 | | +| uid | num | 礼物投喂者的UID | | +| uname | str | 礼物投喂者的名称 | | + +`data.medal_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| anchor_roomid | num | 待调查 | | +| anchor_uname | str | 待调查 | | +| guard_level | num | 待调查 | | +| icon_id | num | 待调查 | | +| is_lighted | num | 待调查 | | +| medal_color | num | 礼物投喂者的粉丝奖牌颜色 | 十六进制颜色值转为了十进制表示 | +| medal_border_color | num | 礼物投喂者的粉丝奖牌边框颜色 | 十六进制颜色值的十进制表示 | +| medal_color_end | num | 待调查 | | +| medal_color_start | num | 待调查 | | +| medal_level | num | 礼物投喂者的粉丝奖牌等级 | | +| medal_name | str | 礼物投喂者的粉丝奖牌名称 | | +| special | str | 待调查 | | +| target_id | num | 待调查 | | + +`data.receive_user_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| uid | num | 礼物接收者的UID | 一般为主播的UID | +| uname | str | 礼物接收者的名称 | 一般为主播的名称 | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "SEND_GIFT", + "data": { + "action": "投喂", + "batch_combo_id": "batch:gift:combo_id:510149209:36047134:31036:1673622464.8445", + "batch_combo_send": { + "action": "投喂", + "batch_combo_id": "batch:gift:combo_id:510149209:36047134:31036:1673622464.8445", + "batch_combo_num": 1, + "blind_gift": null, + "gift_id": 31036, + "gift_name": "小花花", + "gift_num": 1, + "send_master": null, + "uid": 510149209, + "uname": "12138额83121" + }, + "beatId": "", + "biz_source": "live", + "blind_gift": null, + "broadcast_id": 0, + "coin_type": "gold", + "combo_resources_id": 1, + "combo_send": { + "action": "投喂", + "combo_id": "gift:combo_id:510149209:36047134:31036:1673622464.8434", + "combo_num": 1, + "gift_id": 31036, + "gift_name": "小花花", + "gift_num": 1, + "send_master": null, + "uid": 510149209, + "uname": "12138额83121" + }, + "combo_stay_time": 3, + "combo_total_coin": 100, + "crit_prob": 0, + "demarcation": 1, + "discount_price": 100, + "dmscore": 8, + "draw": 0, + "effect": 0, + "effect_block": 0, + "face": "https://i1.hdslb.com/bfs/face/fb79103e8b33547023e2010030b6889bba2b49bf.jpg", + "face_effect_id": 0, + "face_effect_type": 0, + "float_sc_resource_id": 0, + "giftId": 31036, + "giftName": "小花花", + "giftType": 0, + "gold": 0, + "guard_level": 0, + "is_first": true, + "is_join_receiver": false, + "is_naming": false, + "is_special_batch": 0, + "magnification": 1, + "medal_info": { + "anchor_roomid": 0, + "anchor_uname": "", + "guard_level": 0, + "icon_id": 0, + "is_lighted": 0, + "medal_color": 0, + "medal_color_border": 0, + "medal_color_end": 0, + "medal_color_start": 0, + "medal_level": 0, + "medal_name": "", + "special": "", + "target_id": 0 + }, + "name_color": "", + "num": 1, + "original_gift_name": "", + "price": 100, + "rcost": 164536872, + "receive_user_info": { + "uid": 36047134, + "uname": "小霖QL" + }, + "remain": 0, + "rnd": "1673622464121900003", + "send_master": null, + "silver": 0, + "super": 0, + "super_batch_gift_num": 1, + "super_gift_num": 1, + "svga_block": 0, + "switch": true, + "tag_image": "", + "tid": "1673622464121900003", + "timestamp": 1673622464, + "top_list": null, + "total_coin": 100, + "uid": 510149209, + "uname": "12138额83121" + } +} +``` + +</details> + +#### 礼物星球点亮 (GIFT_STAR_PROCESS) + +注: 主播的礼物星球其一点亮之后 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `GIFT_STAR_PROCESS` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| status | num | 待调查 | | +| tip | str | 点亮礼物星球的消息文本 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "GIFT_STAR_PROCESS", + "data": { + "status": 1, + "tip": "情书已点亮" + } +} +``` + +</details> + +#### 礼物星球进度更新 (WIDGET_GIFT_STAR_PROCESS) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `WIDGET_GIFT_STAR_PROCESS` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| start_date | num | 开始时间? | 一个年月日数字,格式 `Number(String(年) + String(月) + String(日))`,详见消息示例 | +| process_list | arr | 礼物进度列表 | | +| finished | bool | 是否完成? | | +| ddl_timestamp | num | 截止时间? | Unix 秒时间戳 | +| version | num | 更新时间 | Unix 毫秒时间戳 | +| reward_gift | num | | | +| reward_gift_img | str | | | +| reward_gift_name | str | | | +| level_info | null | (?) | | + +`data.process_list` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 礼物需求1 | | +| 1 | obj | 礼物需求2 | | +| 2 | obj | 礼物需求3 | | + +`data.process_list` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| gift_id | num | 礼物id | | +| gift_img | str | 礼物图片 | | +| gift_name | str | 礼物名称 | `礼物星球` | +| completed_num | num | 当前数量 | | +| target_num | num | 目标数量 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "WIDGET_GIFT_STAR_PROCESS", + "data": { + "start_date": 20250728, + "process_list": [ + { + "gift_id": 33988, + "gift_img": "https://s1.hdslb.com/bfs/live/7164c955ec0ed7537491d189b821cc68f1bea20d.png", + "gift_name": "礼物星球", + "completed_num": 155, + "target_num": 1000 + }, + { + "gift_id": 31036, + "gift_img": "https://s1.hdslb.com/bfs/live/8b40d0470890e7d573995383af8a8ae074d485d9.png", + "gift_name": "礼物星球", + "completed_num": 123, + "target_num": 500 + }, + { + "gift_id": 34382, + "gift_img": "https://s1.hdslb.com/bfs/live/3a1cc7ca50da48670d9f7aa6c8d3cd874228f7b0.png", + "gift_name": "礼物星球", + "completed_num": 0, + "target_num": 1 + } + ], + "finished": false, + "ddl_timestamp": 1754236800, + "version": 1754030237877, + "reward_gift": 0, + "reward_gift_img": "", + "reward_gift_name": "", + "level_info": null + } +} +``` + +</details> + +#### 礼物连击 (COMBO_SEND) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `COMBO_SEND` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| action | str | 礼物操作,一般为"投喂" | | +| batch_combo_id | str | 待调查 | | +| batch_combo_num | num | 连击礼物数量 | | +| combo_id | str | 待调查 | | +| combo_num | str | 连击礼物数量 | | +| combo_total_coin | num | 待调查 | | +| dmscore | num | 待调查 | | +| gift_id | num | 待调查 | | +| gift_name | str | 连击礼物的名称 | | +| gift_num | num | 0 | | +| is_join_receiver | bool | 待调查 | | +| is_naming | bool | 待调查 | | +| is_show | num | 待调查 | | +| medal_info | obj | 礼物投喂者的粉丝勋章信息 | | +| name_color | str | 待调查 | | +| r_uname | str | 主播的名称 | | +| receive_user_info | obj | 主播的UID和名称 | | +| ruid | num | 主播的UID | | +| send_master | | 待调查 | | +| total_num | num | 连击礼物数量 | | +| uid | num | 礼物投喂者的UID | | +| uname | str | 礼物投喂者的名称 | | + +`data.receive_user_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| uid | number | 礼物接收者的UID | 一般为主播的UID | +| uname | string | 礼物接收者的名称 | 一般为主播的名称 | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "COMBO_SEND", + "data": { + "action": "投喂", + "batch_combo_id": "batch:gift:combo_id:3493090830584635:29857468:31036:1673774515.6190", + "batch_combo_num": 2, + "combo_id": "gift:combo_id:3493090830584635:29857468:31036:1673774515.6180", + "combo_num": 2, + "combo_total_coin": 200, + "dmscore": 112, + "gift_id": 31036, + "gift_name": "小花花", + "gift_num": 0, + "is_join_receiver": false, + "is_naming": false, + "is_show": 1, + "medal_info": { + "anchor_roomid": 0, + "anchor_uname": "", + "guard_level": 0, + "icon_id": 0, + "is_lighted": 1, + "medal_color": 6067854, + "medal_color_border": 6067854, + "medal_color_end": 6067854, + "medal_color_start": 6067854, + "medal_level": 3, + "medal_name": "爱珞珞", + "special": "", + "target_id": 3493076559465366 + }, + "name_color": "", + "r_uname": "露萌不要雨草", + "receive_user_info": { + "uid": 29857468, + "uname": "露萌不要雨草" + }, + "ruid": 29857468, + "send_master": null, + "total_num": 2, + "uid": 3493090830584635, + "uname": "DOC-Neo" + } +} +``` + +</details> + +#### 特殊礼物 (SPECIAL_GIFT) + +<!--{ + "gh": [360] +}--> + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| cmd | str | `SPECIAL_GIFT` | | +| data | obj | 信息本体 | | + +`data` 对象: + +以 数字 为键, JSON Object 为值的表 + +`data['?']` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| action | str | 操作? | | +| content | str | 内容 | | +| hadJoin | num | 是否加入? | | +| id | str | ? | 字符串表示的数字 | +| num | str | 数量 | | +| storm_gif | str | GIF 动画 URL | | +| time | str | 持续时间? | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "SPECIAL_GIFT", + "data": { + "39": { + "action": "start", + "content": "可爱即正义~~", + "hadJoin": 0, + "id": "3306976431489", + "num": 1, + "storm_gif": "http://static.hdslb.com/live-static/live-room/images/gift-section/mobilegift/2/jiezou.gif?2017011901", + "time": 90 + } + } +} +``` + +</details> + +<!-- +#### 欢迎加入房间 + +#### 欢迎房管加入房间 +--> + +#### 通知消息 (NOTICE_MSG) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `NOTICE_MSG` | | +| id | num | 待调查 | | +| name | str | 通知名 | | +| full | obj | 完整显示信息? | | +| half | obj | 半部显示信息? | | | +| side | obj | 边缘显示信息? | | +| roomid | num | 目标直播间短号 | | +| real_roomid | num | 目标直播间真实ID | | +| msg_common | str | 显示的消息内容 | | +| msg_self | str | 消息内容本身 | 剔除额外文本 | +| link_url | str | 通知消息跳转的URL | | +| msg_type | num | 待调查 | | +| shield_uid | num | 待调查 | | +| business_id | str | 待调查 | | +| scatter | obj | 待调查 | | +| marquee_id | str | 待调查 | | +| notice_type | num | 待调查 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "NOTICE_MSG", + "id": 804, + "name": "人气榜第一名", + "full": { + "head_icon": "https://i0.hdslb.com/bfs/live/f74b09c7fb83123a0dd66c536b6d5b143d271b08.png", + "tail_icon": "https://i0.hdslb.com/bfs/live/822da481fdaba986d738db5d8fd469ffa95a8fa1.webp", + "head_icon_fa": "https://i0.hdslb.com/bfs/live/f74b09c7fb83123a0dd66c536b6d5b143d271b08.png", + "tail_icon_fa": "https://i0.hdslb.com/bfs/live/38cb2a9f1209b16c0f15162b0b553e3b28d9f16f.png", + "head_icon_fan": 1, + "tail_icon_fan": 4, + "background": "#FFE6BD", + "color": "#9D5412", + "highlight": "#FF6933", + "time": 20 + }, + "half": { + "head_icon": "https://i0.hdslb.com/bfs/live/f74b09c7fb83123a0dd66c536b6d5b143d271b08.png", + "tail_icon": "https://i0.hdslb.com/bfs/live/822da481fdaba986d738db5d8fd469ffa95a8fa1.webp", + "background": "#FFE6BD", + "color": "#9D5412", + "highlight": "#FF6933", + "time": 0 + }, + "side": { + "head_icon": "", + "background": "", + "color": "", + "highlight": "", + "border": "" + }, + "roomid": 23919301, + "real_roomid": 23919301, + "msg_common": "恭喜主播<%AG超玩会王者荣耀一诺%>荣获上小时人气榜第<%1%>名!点击传送查看精彩内容!", + "msg_self": "恭喜主播<%AG超玩会王者荣耀一诺%>荣获上小时人气榜第<%1%>名!", + "link_url": "https://live.bilibili.com/23919301?broadcast_type=0&is_room_feed=1&from=28003&extra_jump_from=28003", + "msg_type": 1, + "shield_uid": -1, + "business_id": "", + "scatter": { + "min": 0, + "max": 0 + }, + "marquee_id": "", + "notice_type": 0 +} +``` + +```json +{ + "cmd": "NOTICE_MSG", + "id": 814, + "name": "幻影飞船专用", + "full": { + "head_icon": "https://i0.hdslb.com/bfs/live/08978f1721200e11328d1f7d6231b21bcca20488.gif", + "tail_icon": "https://i0.hdslb.com/bfs/live/822da481fdaba986d738db5d8fd469ffa95a8fa1.webp", + "head_icon_fa": "https://i0.hdslb.com/bfs/live/08978f1721200e11328d1f7d6231b21bcca20488.gif", + "tail_icon_fa": "https://i0.hdslb.com/bfs/live/38cb2a9f1209b16c0f15162b0b553e3b28d9f16f.png", + "head_icon_fan": 1, + "tail_icon_fan": 4, + "background": "#F09153", + "color": "#FFFFFF", + "highlight": "#FFE600", + "time": 15 + }, + "half": { + "head_icon": "https://i0.hdslb.com/bfs/live/08978f1721200e11328d1f7d6231b21bcca20488.gif", + "tail_icon": "", + "background": "#F09153", + "color": "#FFFFFFFF", + "highlight": "#FFE600", + "time": 15 + }, + "side": { + "head_icon": "", + "background": "", + "color": "", + "highlight": "", + "border": "" + }, + "roomid": 25207004, + "real_roomid": 25207004, + "msg_common": "<%咖啡_ミシェル%>投喂<%夜月瓜瓜sukuyi%>1个幻影飞船,向着浩瀚星辰出发!", + "msg_self": "<%咖啡_ミシェル%>投喂<%夜月瓜瓜sukuyi%>1个幻影飞船,向着浩瀚星辰出发!", + "link_url": "https://live.bilibili.com/25207004?broadcast_type=0&is_room_feed=1&from=28003&extra_jump_from=28003&live_lottery_type=1", + "msg_type": 2, + "shield_uid": -1, + "business_id": "32356", + "scatter": { + "min": 0, + "max": 0 + }, + "marquee_id": "", + "notice_type": 0 +} +``` + +</details> + +#### 主播准备中 (PREPARING) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `PREPARING` | | +| round | num | 轮播状态:<br/>1正在轮播<br/>0未轮播 | 开启轮播时存在 | +| roomid | str | 直播间ID | 未知是真实ID还是短号 | 类型似乎从num改为str | +| msg\_id | str | 信息id? | | +| p\_is\_ack | bool | | 未知 | +| p\_msg\_type | num | `1` | 未知 | +| send\_time | num | 发送时间 | UNIX 毫秒时间戳 | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +有启用轮播: + +```json +{ + "cmd": "PREPARING", + "msg_id": "26964930181741056:1000:1000", + "p_is_ack": true, + "p_msg_type": 1, + "roomid": "1899237171", + "round": 1, + "send_time": 1739985402716 +} +``` + +未启用轮播: + +```json +{ + "cmd": "PREPARING", + "msg_id": "27040425357932032:1000:1000", + "p_is_ack": true, + "p_msg_type": 1, + "roomid": "1017", + "send_time": 1740129398337 +} +``` + +</details> + +#### 直播开始 (LIVE) + +注:请求了开始直播接口、开始向服务器推流时下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `LIVE` | | +| live_key | str | 标记直播场次的key | 与开始直播接口获得的live_key相同 | +| voice_background | str | ? | | +| sub_session_key | str | ? | | +| live_platform | str | 开播平台? | 推测由开播接口决定 | +| live_model | num | ? | | +| live_time | num | 开播时间 | UNIX 秒级时间戳,只有请求了开始直播后立刻下发的那个数据包里存在 | +| roomid | num | 直播间号 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "LIVE", + "live_key": "234304209915761953", + "voice_background": "", + "sub_session_key": "234304209915761953sub_time:1651036923", + "live_platform": "pc", + "live_model": 0, + "live_time": 1651036923, + "roomid": 23614753 +} +``` + +</details> + +#### 主播信息更新 (ROOM_REAL_TIME_MESSAGE_UPDATE) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `ROOM_REAL_TIME_MESSAGE_UPDATE` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| roomid | num | 直播间ID | 未知是真实ID还是短号 | +| fans | num | 主播当前粉丝数 | | +| red_notice | num | 待调查 | | +| fans_club | num | 主播粉丝团人数 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ROOM_REAL_TIME_MESSAGE_UPDATE", + "data": { + "roomid": 8618057, + "fans": 136, + "red_notice": -1, + "fans_club": 8 + } +} +``` + +</details> + +#### 播放链接刷新 (PLAYURL_RELOAD) + +注: 该cmd通常不提供播放链接。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cmd | str | `PLAYURL_RELOAD` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| reload_option | obj | 刷新选项? | | +| playurl | obj | 播放链接信息 | | + +`data.reload_option` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| reload_stream_name | arr | 空数组? | | +| reload_format | arr | 空数组? | | +| scatter | num | | | + +`data.playurl` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cid | num | 直播间真实id | | +| g_qn_desc | arr | 画质描述 | | +| stream | arr | 直播流信息 | | +| p2p_data | obj | P2P信息 | | +| dolby_qn | null | dolby画质信息? | | + +`data.playurl.g_qn_desc` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| 0 | obj | 首个画质信息 | | +| … | obj | 多个画质信息 | | +| i | obj | 最后画质信息 | | + +`data.playurl.g_qn_desc` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| qn | num | 画质代码 | | +| desc | str | 画质描述 | | +| hdr_desc | str | | | +| attr_desc | null | | | +| hdr_type | num | | | +| media_base_desc | null 或 obj | 媒体描述 | + +`data.playurl.g_qn_desc[i].media_base_desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| detail_desc | obj | 详细? | | +| brief_desc | obj | 简洁? | | + +`data.playurl.g_qn_desc[i].media_base_desc.detail_desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | str | 画质描述 | | +| tag | arr | 画质标签 | 字符串数组,部分画质存在 | + +`data.playurl.g_qn_desc[i].media_base_desc.brief_desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | str | 画质描述 | | +| badge | str | 画质描述 | 部分画质存在 | + +`data.stream` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| protocol_name | str | 协议名称 | | +| format | arr | 封装格式列表 | | + +`data.stream[i].format` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| format_name | str | 视频封装格式名称 | | +| codec | arr | 编码列表 | | +| master_url | str | | | + +`data.stream[i].format[i].codec` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| codec_name | str | 视频编码名称 | | +| current_qn | num | 当前画质代码? | | +| accept_qn | arr | 允许的画质代码? | 数字数组 | +| base_url | str | | | +| url_info | arr | | | +| hdr_qn | null | | | +| dolby_type | num | | | +| attr_name | str | | | +| hdr_type | num | | | +| drm | bool | | | +| drm_key_systems | null | | | +| video_codecs | obj | 视频编码信息 | 不一定存在 | +| audio_codecs | obj | 音频编码信息 | 不一定存在 | + +`data.stream[i].format[i].codec[i].video_codecs` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| base | str | 编码格式 | | + +`data.stream[i].format[i].codec[i].audio_codecs` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| base | str | 编码格式 | | + +`data.playurl.p2p_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| p2p | bool | | | +| p2p_type | num | | | +| m_p2p | bool | | | +| m_servers | null | | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "PLAYURL_RELOAD", + "data": { + "reload_option": { + "reload_stream_name": [], + "reload_format": [], + "scatter": 3000 + }, + "playurl": { + "cid": 41682, + "g_qn_desc": [ + { + "qn": 30000, + "desc": "杜比", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + }, + { + "qn": 20000, + "desc": "4K", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + }, + { + "qn": 10000, + "desc": "原画", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": { + "detail_desc": { + "desc": "1080P 原画", + "tag": [ + "高帧率" + ] + }, + "brief_desc": { + "desc": "1080P", + "badge": "原画" + } + } + }, + { + "qn": 400, + "desc": "蓝光", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + }, + { + "qn": 250, + "desc": "超清", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": { + "detail_desc": { + "desc": "720P 超清" + }, + "brief_desc": { + "desc": "720P" + } + } + }, + { + "qn": 150, + "desc": "高清", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + }, + { + "qn": 80, + "desc": "流畅", + "hdr_desc": "", + "attr_desc": null, + "hdr_type": 0, + "media_base_desc": null + } + ], + "stream": [ + { + "protocol_name": "http_stream", + "format": [ + { + "format_name": "flv", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "avc1.64002a" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + }, + { + "codec_name": "hevc", + "current_qn": 250, + "accept_qn": [ + 250 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "hvc1.1.6.L120" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + } + ], + "master_url": "" + } + ] + }, + { + "protocol_name": "http_hls", + "format": [ + { + "format_name": "ts", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "avc1.64002a" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + }, + { + "codec_name": "hevc", + "current_qn": 250, + "accept_qn": [ + 250 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "hvc1.1.6.L120" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + } + ], + "master_url": "" + }, + { + "format_name": "fmp4", + "codec": [ + { + "codec_name": "avc", + "current_qn": 10000, + "accept_qn": [ + 10000 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "avc1.64002a" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + }, + { + "codec_name": "hevc", + "current_qn": 250, + "accept_qn": [ + 250 + ], + "base_url": "", + "url_info": [], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "", + "hdr_type": 0, + "drm": false, + "drm_key_systems": null, + "video_codecs": { + "base": "hvc1.1.6.L120" + }, + "audio_codecs": { + "base": "mp4a.40.2" + } + } + ], + "master_url": "" + } + ] + } + ], + "p2p_data": { + "p2p": false, + "p2p_type": 0, + "m_p2p": false, + "m_servers": null + }, + "dolby_qn": null + } + } +} +``` + +</details> + +#### 直播间高能榜 (ONLINE_RANK_V2) + +注: 直播间高能用户数据刷新 + +在线榜已被 `ONLINE_RANK_V3` 替换 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `ONLINE_RANK_V2` | | +| data | obj | 直播间高能用户数据 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| list | array | 在直播间高能用户中的用户信息 | | +| rank_type | str | 榜单类型 | | + +`data.list[n]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| uid | num | 用户 mid | | +| face | str | 用户头像 URL | | +| score | str | 该用户的贡献值 | | +| uname | str | 用户名称 | | +| rank | num | 该用户在高能榜中的排名 | | +| guard_level | num | 大航海等级? | | +| is_mystery | bool | | | +| uinfo | obj | 用户信息 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ONLINE_RANK_V2", + "data": { + "list": [ + { + "uid": 2082621455, + "face": "https://i2.hdslb.com/bfs/face/9de6050277fa13d830eb97e3453d89843de46a31.jpg", + "score": "20", + "uname": "8级萌新_小华", + "rank": 1, + "guard_level": 0 + }, + { + "uid": 50500335, + "face": "https://i0.hdslb.com/bfs/face/ca722209251478ef0ffb45c3adeafb9dab283c57.jpg", + "score": "20", + "uname": "属官一号", + "rank": 2, + "guard_level": 0 + }, + { + "uid": 29857468, + "face": "https://i1.hdslb.com/bfs/face/7b4ae2e7e950f2dfb2bd969859c813487ce3b64c.jpg", + "score": "12", + "uname": "露萌不要雨草", + "rank": 3, + "guard_level": 0 + } + ], + "rank_type": "gold-rank" + } +} +``` + +</details> + +#### 直播间高能榜V3 (ONLINE_RANK_V3) + +注: 直播间高能用户数据刷新 + +替换 `ONLINE_RANK_V2` + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cmd | str | `ONLINE_RANK_V3` | | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| pb | str | 使用 base64 编码 protobuf 后的数据 | 解析后数据基本与`ONLINE_RANK_V2`的`data`相同 | + +用于解析protobuf数据的proto文件: [#1332(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1332#issuecomment-3055621742) + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ONLINE_RANK_V3", + "data": { + "pb": "CgtvbmxpbmVfcmFuaxqqAwi8jscKEkpodHRwczovL2kyLmhkc2xiLmNvbS9iZnMvZmFjZS9iODM3MGMzMGM3ZDg5NDg4YjRjOWYyNWZmMTgyNjc4OTEyYTRiOTA3LmpwZxoCMTIiDOW4jOWwlOWonOWonCgBMAFCwAIIvI7HChKfAgoM5biM5bCU5aic5aicEkpodHRwczovL2kyLmhkc2xiLmNvbS9iZnMvZmFjZS9iODM3MGMzMGM3ZDg5NDg4YjRjOWYyNWZmMTgyNjc4OTEyYTRiOTA3LmpwZypaCgzluIzlsJTlqJzlqJwSSmh0dHBzOi8vaTIuaGRzbGIuY29tL2Jmcy9mYWNlL2I4MzcwYzMwYzdkODk0ODhiNGM5ZjI1ZmYxODI2Nzg5MTJhNGI5MDcuanBnMloKDOW4jOWwlOWonOWonBJKaHR0cHM6Ly9pMi5oZHNsYi5jb20vYmZzL2ZhY2UvYjgzNzBjMzBjN2Q4OTQ4OGI0YzlmMjVmZjE4MjY3ODkxMmE0YjkwNy5qcGc6CyD///////////8BMhcIARITMjAyNS0wNy0yOSAyMzo1OTo1ORrNAwjnyMIDEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9mZWNhYTQ3ZTQ2ODljOWVmYTg0MzBiNmViNzRmNTM2ZTMxN2ZmODYwLmpwZxoBOCIV5byl6IC26IC26IC26IC26IC26IC2KAIwAkLbAgjnyMIDEroCChXlvKXogLbogLbogLbogLbogLbogLYSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlL2ZlY2FhNDdlNDY4OWM5ZWZhODQzMGI2ZWI3NGY1MzZlMzE3ZmY4NjAuanBnKmMKFeW8peiAtuiAtuiAtuiAtuiAtuiAthJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZmVjYWE0N2U0Njg5YzllZmE4NDMwYjZlYjc0ZjUzNmUzMTdmZjg2MC5qcGcyYwoV5byl6IC26IC26IC26IC26IC26IC2EkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9mZWNhYTQ3ZTQ2ODljOWVmYTg0MzBiNmViNzRmNTM2ZTMxN2ZmODYwLmpwZzoLIP///////////wEyFwgCEhMyMDI1LTA4LTAzIDIzOjU5OjU5GvUDCMTF4wQSS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicBoBNiIe5oKg5ZOJ55qE6buR5ZCs5aSn546L5aSq5Zuw6L69KAMwA0L5AgjExeMEEtgCCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicCptCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicDJtCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicDoLIP///////////wEyFwgDEhMyMDI1LTA3LTI2IDIzOjU5OjU5GtkDCLzSxwkSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzAyMGYxOWEwNTNjZDBkNGZjNGMyYmQzOTlmYWNjMTk3YWJiZWY5N2EuanBnGgE2IhjmuLjmiYvlpb3pl7LnmoTmtYXogIHluIgoBDADQuQCCLzSxwkSwwIKGOa4uOaJi+WlvemXsueahOa1heiAgeW4iBJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvMDIwZjE5YTA1M2NkMGQ0ZmM0YzJiZDM5OWZhY2MxOTdhYmJlZjk3YS5qcGcqZgoY5ri45omL5aW96Zey55qE5rWF6ICB5biIEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS8wMjBmMTlhMDUzY2QwZDRmYzRjMmJkMzk5ZmFjYzE5N2FiYmVmOTdhLmpwZzJmChjmuLjmiYvlpb3pl7LnmoTmtYXogIHluIgSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzAyMGYxOWEwNTNjZDBkNGZjNGMyYmQzOTlmYWNjMTk3YWJiZWY5N2EuanBnOgsg////////////ATIXCAMSEzIwMjUtMDgtMDQgMjM6NTk6NTkakAMIp9P+CRJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZTJkYmM4ZTQ5NzA3NzFiNjlhNWEyYzYzMDI0YTg5NzhjMjc3YWNmMi5qcGcaATYiDOmaj+WFieaykOW9sSgFQqkCCKfT/gkSnwIKDOmaj+WFieaykOW9sRJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZTJkYmM4ZTQ5NzA3NzFiNjlhNWEyYzYzMDI0YTg5NzhjMjc3YWNmMi5qcGcqWgoM6ZqP5YWJ5rKQ5b2xEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9lMmRiYzhlNDk3MDc3MWI2OWE1YTJjNjMwMjRhODk3OGMyNzdhY2YyLmpwZzJaCgzpmo/lhYnmspDlvbESSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlL2UyZGJjOGU0OTcwNzcxYjY5YTVhMmM2MzAyNGE4OTc4YzI3N2FjZjIuanBnOgsg////////////ATIAGrYDCPWvn4sBEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS80ZTNkYTdmYWJiOWZlMTkyNzRhYmQ0ZTdlYWMyNmQ3MjI4OGQyNmEwLmpwZxoBNiIV5pKS5qyi5YS/55qE5rCU5rOh5YS/KAZCxQII9a+fiwESugIKFeaSkuasouWEv+eahOawlOazoeWEvxJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvNGUzZGE3ZmFiYjlmZTE5Mjc0YWJkNGU3ZWFjMjZkNzIyODhkMjZhMC5qcGcqYwoV5pKS5qyi5YS/55qE5rCU5rOh5YS/EkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS80ZTNkYTdmYWJiOWZlMTkyNzRhYmQ0ZTdlYWMyNmQ3MjI4OGQyNmEwLmpwZzJjChXmkpLmrKLlhL/nmoTmsJTms6HlhL8SSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzRlM2RhN2ZhYmI5ZmUxOTI3NGFiZDRlN2VhYzI2ZDcyMjg4ZDI2YTAuanBnOgsg////////////ATIAGusDCPTXwbEBEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS8yN2RiOGQ5MTY3ZDRhMmUyMDg0NjUzNDJkOGVmZjQzZWUzMGJiOGNlLmpwZxoBNiIc57OW5b+D6JuL6JuLLeWNg+WNg+azoue6r+WGoCgHMANC8QII9NfBsQESzwIKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnKmoKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnMmoKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnOgsg////////////ATIXCAMSEzIwMjUtMDctMjUgMjM6NTk6NTk=" + } +} +``` + +</details> + +#### 直播间高能用户数量 (ONLINE_RANK_COUNT) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `ONLINE_RANK_COUNT` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| count | num | 直播间高能用户数量 | 存在上限 | +| count_text | str | 直播间高能用户数量文本 | | +| online_count | num | 直播间在线用户数量 | 存在上限 | +| online_count_text | str | 直播间在线用户数量文本 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ONLINE_RANK_COUNT", + "data": { + "count": 1084, + "count_text": "1084", + "online_count": 1084, + "online_count_text": "1084" + } +} +``` + +</details> + +#### 未登录通知 (LOG_IN_NOTICE) + +注:未使用认证信息进行登录将会下发此数据包,通常于认证包回复后下发,在后续时间里也有可能会下发;部分受到豁免的直播间不会下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `LOG_IN_NOTICE` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| notice\_msg | str | 通知内容 | | +| image\_web | str | 在网页端使用的通知图片 | | +| image\_app | str | 在app端使用的图片 | (未确认) | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "LOG_IN_NOTICE", + "data": { + "notice_msg": "为保护用户隐私,未登录无法查看他人昵称", + "image_web": "http://i0.hdslb.com/bfs/dm/75e7c16b99208df259fe0a93354fd3440cbab412.png", + "image_app": "http://i0.hdslb.com/bfs/dm/b632f7dcd3acf47deffb5f9ccc9546ae97a3415b.png" + } +} +``` + +</details> + +#### 用户到达直播间高能榜前三名的消息 (ONLINE_RANK_TOP3) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `ONLINE_RANK_TOP3` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| dmscore | num | 待调查 | | +| list | array | 消息内容和高能榜排名 | | + +`data.list[n]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| msg | str | 消息内容 | | +| rank | num | 该用户的高能榜排名 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ONLINE_RANK_TOP3", + "data": { + "dmscore": 112, + "list": [ + { + "msg": "恭喜 <%你干嘛哈哈哎哟%> 成为高能用户", + "rank": 1 + } + ] + } +} +``` + +</details> + +#### 直播间在人气榜的排名改变 (POPULAR_RANK_CHANGED) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `POPULAR_RANK_CHANGED` | | +| data | obj | 直播间的人气榜排名信息 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| uid | num | 主播 mid | | +| rank | num | 人气榜排名 | | +| countdown | num | 人气榜下轮结算剩余时长 | | +| timestamp | num | 触发时的Unix时间戳 | | +| cache_key | str | 待调查 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "POPULAR_RANK_CHANGED", + "data": { + "uid": 780791, + "rank": 36, + "countdown": 1927, + "timestamp": 1702578474, + "cache_key": "rank_change:91a4e81ba3034ae894d61e432aa13081" + } +} +``` + +</details> + +#### 直播间限时热门榜排名改变 (HOT_RANK_CHANGED) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `HOT_RANK_CHANGED` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| rank | num | 排名 | | +| trend | num | 趋势? | | +| countdown | num | 剩余时间? | | +| timestamp | num | 当前时间? | UNIX 秒级时间戳 | +| web_url | str | 排行榜 URL | | +| live_url | str | 排行榜 URL | | +| blink_url | str | 排行榜 URL | | +| live_link_url | str | 排行榜 URL | | +| pc_link_url | str | 排行榜 URL | | +| icon | str | 图标 URL | | +| area_name | str | 分区名称 | | +| rank_desc | str | 空? | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "HOT_RANK_CHANGED", + "data": { + "rank": 31, + "trend": 1, + "countdown": 1440, + "timestamp": 1651037760, + "web_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=2&area_id=9&parent_area_id=9&second_area_id=0", + "live_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=1&area_id=9&parent_area_id=9&second_area_id=0&is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,12,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,12,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0", + "blink_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=3&area_id=9&parent_area_id=9&second_area_id=0&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0", + "live_link_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=5&area_id=9&parent_area_id=9&second_area_id=0&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0", + "pc_link_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=4&is_live_half_webview=1&area_id=9&parent_area_id=9&second_area_id=0&pc_ui=338,465,f4eefa,0", + "icon": "https://i0.hdslb.com/bfs/live/63217712edb588864b2c714225992e7f46b0b917.png", + "area_name": "虚拟", + "rank_desc": "" + } +} +``` + +</details> + +#### 当前直播间限时热门榜排名改变V2 (HOT_RANK_CHANGED_V2) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `HOT_RANK_CHANGED_V2` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| rank | num | 排名 | | +| trend | num | 趋势? | | +| countdown | num | 剩余时间? | | +| timestamp | num | 当前时间? | UNIX 秒级时间戳 | +| web_url | str | 排行榜 URL | | +| live_url | str | 排行榜 URL | | +| blink_url | str | 排行榜 URL | | +| live_link_url | str | 排行榜 URL | | +| pc_link_url | str | 排行榜 URL | | +| icon | str | 图标 URL | | +| area_name | str | 分区名称 | | +| rank_desc | str | 排行榜说明 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "HOT_RANK_CHANGED_V2", + "data": { + "rank": 31, + "trend": 0, + "countdown": 1440, + "timestamp": 1651037760, + "web_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=2&area_id=9&parent_area_id=9&second_area_id=371", + "live_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=1&area_id=9&parent_area_id=9&second_area_id=371&is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,12,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,12,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0", + "blink_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=3&area_id=9&parent_area_id=9&second_area_id=371&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0", + "live_link_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=5&area_id=9&parent_area_id=9&second_area_id=371&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0", + "pc_link_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=4&is_live_half_webview=1&area_id=9&parent_area_id=9&second_area_id=371&pc_ui=338,465,f4eefa,0", + "icon": "https://i0.hdslb.com/bfs/live/cb2e160ac4f562b347bb5ae6e635688ebc69580f.png", + "area_name": "虚拟主播", + "rank_desc": "虚拟主播top50" + } +} +``` + +</details> + +#### 限时热门榜上榜信息 (HOT_RANK_SETTLEMENT) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `HOT_RANK_SETTLEMENT` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| area_name | str | 分区名称 | | +| cache_key | str | ? | | +| dm_msg | str | 弹幕提示信息 | | +| dmscore | num | ? | | +| face | str | 主播头像 URL | | +| icon | str | 图标 URL | | +| rank | num | 排名 | | +| timestamp | num | 时间 | UNIX 秒级时间戳 | +| uname | str | 主播用户名 | | +| url | str | 排行榜 URL | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "HOT_RANK_SETTLEMENT", + "data": { + "area_name": "虚拟主播", + "cache_key": "2f8baf923a6b7df5a045df6c7181984c", + "dm_msg": "恭喜主播 <% 白黑卡扣 %> 荣登限时热门榜虚拟主播榜top9! 即将获得热门流量推荐哦!", + "dmscore": 144, + "face": "http://i0.hdslb.com/bfs/face/ddfcd696213e07884ce227c6ba6d23a007a08c02.jpg", + "icon": "https://i0.hdslb.com/bfs/live/63217712edb588864b2c714225992e7f46b0b917.png", + "rank": 9, + "timestamp": 1651041000, + "uname": "白黑卡扣", + "url": "https://live.bilibili.com/p/html/live-app-hotrank/result.html?is_live_half_webview=1&hybrid_half_ui=1,5,250,200,f4eefa,0,30,0,0,0;2,5,250,200,f4eefa,0,30,0,0,0;3,5,250,200,f4eefa,0,30,0,0,0;4,5,250,200,f4eefa,0,30,0,0,0;5,5,250,200,f4eefa,0,30,0,0,0;6,5,250,200,f4eefa,0,30,0,0,0;7,5,250,200,f4eefa,0,30,0,0,0;8,5,250,200,f4eefa,0,30,0,0,0&areaId=9&cache_key=2f8baf923a6b7df5a045df6c7181984c" + } +} +``` + +</details> + +#### 限时热门榜上榜信息V2 (HOT_RANK_SETTLEMENT_V2) + +**JSON消息:** + +基本同 [限时热门榜上榜信息](#限时热门榜上榜信息-hot_rank_settlement), 但没有 `data.dmscore` 字段 + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "HOT_RANK_SETTLEMENT_V2", + "data": { + "rank": 9, + "uname": "白黑卡扣", + "face": "http://i0.hdslb.com/bfs/face/ddfcd696213e07884ce227c6ba6d23a007a08c02.jpg", + "timestamp": 1651040700, + "icon": "https://i0.hdslb.com/bfs/live/cb2e160ac4f562b347bb5ae6e635688ebc69580f.png", + "area_name": "虚拟主播", + "url": "https://live.bilibili.com/p/html/live-app-hotrank/result.html?is_live_half_webview=1&hybrid_half_ui=1,5,250,200,f4eefa,0,30,0,0,0;2,5,250,200,f4eefa,0,30,0,0,0;3,5,250,200,f4eefa,0,30,0,0,0;4,5,250,200,f4eefa,0,30,0,0,0;5,5,250,200,f4eefa,0,30,0,0,0;6,5,250,200,f4eefa,0,30,0,0,0;7,5,250,200,f4eefa,0,30,0,0,0;8,5,250,200,f4eefa,0,30,0,0,0&areaId=371&cache_key=693b7b029b66976a399cf4e3485d265a", + "cache_key": "693b7b029b66976a399cf4e3485d265a", + "dm_msg": "恭喜主播 <% 白黑卡扣 %> 荣登限时热门榜虚拟主播榜top9! 即将获得热门流量推荐哦!" + } +} +``` + +</details> + +#### 直播间用户点赞 (LIKE_INFO_V3_CLICK) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `LIKE_INFO_V3_CLICK` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| show_area | num | 待调查 | | +| msg_type | num | 待调查 | | +| like_icon | str | 点赞图标的URL | | +| uid | num | 点赞的用户的UID | | +| like_text | str | 点赞文本 | | +| uname | str | 点赞的用户的名称 | | +| uname_color | str | 点赞的用户的名称颜色 | | +| identities | array | 待调查 | | +| fans_medal | obj | 点赞的用户的粉丝勋章信息 | | +| contribution_info | obj | 待调查 | | +| dmscore | num | 待调查 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "LIKE_INFO_V3_CLICK", + "data": { + "show_area": 0, + "msg_type": 6, + "like_icon": "https://i0.hdslb.com/bfs/live/23678e3d90402bea6a65251b3e728044c21b1f0f.png", + "uid": 32174213, + "like_text": "为主播点赞了", + "uname": "MeiDngS", + "uname_color": "", + "identities": [ + 1 + ], + "fans_medal": { + "target_id": 0, + "medal_level": 0, + "medal_name": "", + "medal_color": 0, + "medal_color_start": 12632256, + "medal_color_end": 12632256, + "medal_color_border": 12632256, + "is_lighted": 0, + "guard_level": 0, + "special": "", + "icon_id": 0, + "anchor_roomid": 0, + "score": 0 + }, + "contribution_info": { + "grade": 0 + }, + "dmscore": 20 + } +} +``` + +</details> + +#### 直播间点赞数更新 (LIKE_INFO_V3_UPDATE) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `LIKE_INFO_V3_UPDATE` | | +| data | obj | 直播间点赞数 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| click_count | num | 直播间点赞数 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "LIKE_INFO_V3_UPDATE", + "data": { + "click_count": 3227 + } +} +``` + +</details> + +#### 直播间发红包弹幕 (POPULARITY_RED_POCKET_START) + +注: 开始抽取红包 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `POPULARITY_RED_POCKET_START` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| lot_id | num | 发送的红包的ID | | +| sender_uid | num | 发送者的UID | | +| sender_name | str | 发送者的名称 | | +| sender_face | str | 发送者的头像的URL | | +| join_requirement | num | 待调查 | | +| danmu | str | 用户参与红包时自动发送的弹幕内容 | | +| current_time | num | 服务器发送数据包的Unix时间戳 | | +| start_time | num | 可以开始抢红包的Unix时间戳 | | +| end_time | num | 抢红包的结束时间Unix时间戳 | | +| last_time | num | 红包的持续时间(秒) | start_time - end_time | +| remove_time | num | 待调查 | | +| replace_time | num | 待调查 | | +| lot_status | num | 待调查 | | +| h5_url | str | 红包页面的URL | | +| user_status | num | 用户参与状态,但是不知道是哪个用户 | 1已参与<br />2未参与 | +| awards | array | 红包内包含的礼物的信息 | | +| lot_config_id | num | 待调查 | | +| total_price | num | 内含抽取奖品金瓜子总价值 | 目前红包的 20% 会直接交给主播, 所以 20 电池 (2 CNY) 对应 2000 金瓜子的 80% 是 1600 金瓜子 | +| wait_num | num | 待调查 | | + +`data.awards[n]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| gift_id | num | 礼物ID | | +| gift_name | str | 礼物名称 | | +| gift_pic | str | 礼物图标URL | | +| num | num | 该礼物的数量 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "POPULARITY_RED_POCKET_START", + "data": { + "lot_id": 2062329, + "sender_uid": 181851309, + "sender_name": "毒瘤老肥仔", + "sender_face": "http://i0.hdslb.com/bfs/face/fed3871b01976ddd35fd3f772ffc2d4949f1391d.jpg", + "join_requirement": 1, + "danmu": "老板大气!点点红包抽礼物!", + "current_time": 1650425344, + "start_time": 1650425343, + "end_time": 1650425523, + "last_time": 180, + "remove_time": 1650425538, + "replace_time": 1650425533, + "lot_status": 1, + "h5_url": "https://live.bilibili.com/p/html/live-app-red-envelope/popularity.html?is_live_half_webview=1&hybrid_half_ui=1,5,100p,100p,000000,0,50,0,0,1;2,5,100p,100p,000000,0,50,0,0,1;3,5,100p,100p,000000,0,50,0,0,1;4,5,100p,100p,000000,0,50,0,0,1;5,5,100p,100p,000000,0,50,0,0,1;6,5,100p,100p,000000,0,50,0,0,1;7,5,100p,100p,000000,0,50,0,0,1;8,5,100p,100p,000000,0,50,0,0,1&hybrid_rotate_d=1&hybrid_biz=popularityRedPacket&lotteryId=2062329", + "user_status": 2, + "awards": [ + { + "gift_id": 31212, + "gift_name": "打call", + "gift_pic": "https://s1.hdslb.com/bfs/live/f75291a0e267425c41e1ce31b5ffd6bfedc6f0b6.png", + "num": 2 + }, + { + "gift_id": 31214, + "gift_name": "牛哇", + "gift_pic": "https://s1.hdslb.com/bfs/live/b8a38b4bd3be120becddfb92650786f00dffad48.png", + "num": 3 + }, + { + "gift_id": 31216, + "gift_name": "i了i了", + "gift_pic": "https://s1.hdslb.com/bfs/live/1157a445487b39c0b7368d91b22290c60fa665b2.png", + "num": 3 + } + ], + "lot_config_id": 3, + "total_price": 1600, + "wait_num": 0 + } +} +``` + +</details> + +#### 直播间红包 (POPULARITY_RED_POCKET_NEW) + +注: 与 [直播间发红包弹幕](#直播间发红包弹幕-popularity_red_pocket_start) 不同, 那个是发红包的弹幕信息, 这个则和 [送礼](#送礼-send_gift) 的信息相似, 但也有前者的一些字段 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------------- | ---- | +| cmd | str | `POPULARITY_RED_POCKET_NEW` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | ---- | +| lot_id | num | 红包 ID | | +| start_time | num | 开抢时间 | UNIX 秒级时间戳 | +| current_time | num | 当前时间 | UNIX 秒级时间戳 | +| wait_num | num | 0? | | +| uname | str | 发送者用户名 | | +| uid | num | 发送者的 mid | | +| action | str | 礼物操作 | | +| num | num | 礼物数量 | | +| gift_name | str | `红包` | | +| gift_id | num | 礼物 ID? | | +| price | num | 电池标价 | | +| name_color | str | 用户名颜色 | | +| medal_info | obj | 发送者粉丝牌 | | + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "POPULARITY_RED_POCKET_NEW", + "data": { + "lot_id": 2062329, + "start_time": 1650425343, + "current_time": 1650425343, + "wait_num": 0, + "uname": "毒瘤老肥仔", + "uid": 181851309, + "action": "送出", + "num": 1, + "gift_name": "红包", + "gift_id": 13000, + "price": 20, + "name_color": "#00D1F1", + "medal_info": { + "target_id": 11909915, + "special": "", + "icon_id": 0, + "anchor_uname": "", + "anchor_roomid": 0, + "medal_level": 22, + "medal_name": "伊克拉", + "medal_color": 1725515, + "medal_color_start": 1725515, + "medal_color_end": 5414290, + "medal_color_border": 6809855, + "is_lighted": 1, + "guard_level": 3 + } + } +} +``` + +</details> + +#### 直播间抢到红包的用户 (POPULARITY_RED_POCKET_WINNER_LIST) + +注: 红包中奖列表 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------------------------- | ---- | +| cmd | str | `POPULARITY_RED_POCKET_WINNER_LIST` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | -------- | ---- | +| lot_id | num | 红包 ID | | +| total_num | num | 礼物总数 | | +| winner_info | array | 中奖信息 | | +| awards | obj | 礼物信息 | | +| version | num | | | + +`data.winner_info` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ----- | ------------ | ---- | +| 0 | array | 中奖者 1 | | +| …… | array | …… | | +| n | array | 中奖者 (n+1) | | + +`data.winner_info[n]` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ---------------------- | ---- | +| 0 | num | 该抢到红包的用户的 mid | | +| 1 | str | 该抢到红包的用户的名称 | | +| 2 | num | bag_id? | | +| 3 | num | 该用户抢到的礼物的 ID | | + +`data.awards` 对象: + +以 礼物 ID 为键, JSON Object 为值的表 + +`data.awards['?']` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ---- | +| award_type | num | 奖品类型? | | +| award_name | str | 礼物名称 | | +| award_pic | str | 礼物图标 URL | | +| award_big_pic | str | 礼物大图 URL | | +| award_price | num | 礼物价值 | | + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "POPULARITY_RED_POCKET_WINNER_LIST", + "data": { + "lot_id": 8445764, + "total_num": 8, + "winner_info": [ + [ + 38554435, + "我的0019", + 4581509, + 31212 + ], + [ + 516174930, + "云来海遛鸟大爷", + 4606389, + 31212 + ] + ], + "awards": { + "31212": { + "award_type": 1, + "award_name": "打call", + "award_pic": "https://s1.hdslb.com/bfs/live/461be640f60788c1d159ec8d6c5d5cf1ef3d1830.png", + "award_big_pic": "https://i0.hdslb.com/bfs/live/9e6521c57f24c7149c054d265818d4b82059f2ef.png", + "award_price": 500 + }, + "31214": { + "award_type": 1, + "award_name": "牛哇", + "award_pic": "https://s1.hdslb.com/bfs/live/91ac8e35dd93a7196325f1e2052356e71d135afb.png", + "award_big_pic": "https://i0.hdslb.com/bfs/live/3b74c117b4f265edcea261bc5608a58d3a7c300a.png", + "award_price": 100 + }, + "31216": { + "award_type": 1, + "award_name": "i了i了", + "award_pic": "https://s1.hdslb.com/bfs/live/1157a445487b39c0b7368d91b22290c60fa665b2.png", + "award_big_pic": "https://i0.hdslb.com/bfs/live/cfb9c3d9bdd2c25c95b7d859ebaa590ca9362adb.png", + "award_price": 100 + } + }, + "version": 1 + } +} +``` + +</details> + +#### 直播间看过人数 (WATCHED_CHANGE) + +注: 当前直播历史观众数量, 可替代人气 + +**正文:** + +数据包的正文, 前19字节的信息未知: + +```text +00000001: 8b38 8000 0000 7200 1000 0000 0000 0500 .8....r......... +00000002: 0000 00 ... +``` + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | ---- | +| cmd | str | `WATCHED_CHANGE` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------- | ---- | +| num | num | 看过人数 | | +| text_small | str | 显示文字 (小) | | +| text_large | str | 显示文字 (大) | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "WATCHED_CHANGE", + "data": { + "num": 17903, + "text_small": "1.7万", + "text_large": "1.7万人看过" + } +} +``` + +</details> + +#### 用户进场特效 (ENTRY_EFFECT) + +注: 有进场特效的用户进入直播间 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| cmd | str | `ENTRY_EFFECT` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------------- | ----- | ---------------- | ---- | +| id | num | ? | | +| uid | num | 进场用户 mid | | +| target_id | num | 主播 mid? | | +| mock_effect | num | ? | | +| face | str | 进场用户头像 URL | | +| privilege_type | num | ? | | +| copy_writing | str | 进场欢迎文本 | | +| copy_color | str | 进场欢迎文本颜色 | 16 进制 | +| highlight_color | str | 高亮颜色? | 16 进制 | +| priority | num | 优先级? | | +| basemap_url | str | 进场特效背景 URL | APP 端 | +| show_avatar | num | 是否显示用户头像 | 1: 显示<br/>0: 不显示 | +| effective_time | num | ? | | +| web_basemap_url | str | 进场特效背景 URL | 网页端 | +| web_effective_time | num | 进场特效生存时间 | 网页端 | +| web_effect_close | num | ? | | +| web_close_time | num | ? | | +| business | num | ? | | +| copy_writing_v2 | str | 进场欢迎文本 | APP 端? | +| icon_list | array | 空? | | +| max_delay_time | num | 最大等待时间? | | +| trigger_time | num | 触发时间戳 | UNIX 纳秒时间戳 | +| identities | num | 标识符? | | +| effect_silent_time | num | ? | | +| effective_time_new | num | ? | | +| web_dynamic_url_webp | str | ? | | +| web_dynamic_url_apng | str | ? | | +| mobile_dynamic_url_webp | str | ? | | +| wealthy_info | obj | 荣耀等级信息 | | +| new_style | num | ? | | +| is_mystery | bool | ? | | +| uinfo | obj | 用户信息 | | +| full_cartoon_id | num | ? | | +| priority_level | num | ? | | +| wealth_style_info | obj | 荣耀等级样式信息 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ENTRY_EFFECT", + "data": { + "id": 380, + "uid": 31382283, + "target_id": 12892411, + "mock_effect": 0, + "face": "https://i0.hdslb.com/bfs/face/876e30e89faa5672858cc17bdb357362ec96bc29.jpg", + "privilege_type": 0, + "copy_writing": "<%WYCBat%> 来了", + "copy_color": "#F7F7F7", + "highlight_color": "#FFFFFF", + "priority": 1, + "basemap_url": "", + "show_avatar": 0, + "effective_time": 0, + "web_basemap_url": "https://i0.hdslb.com/bfs/live/mlive/19e7564ed9d466b02f341abfa979c6e38c2ffffb.png", + "web_effective_time": 4, + "web_effect_close": 1, + "web_close_time": 900, + "business": 6, + "copy_writing_v2": "<%WYCBat%> 来了", + "icon_list": [], + "max_delay_time": 7, + "trigger_time": 1748545763327647435, + "identities": 1, + "effect_silent_time": 0, + "effective_time_new": 0, + "web_dynamic_url_webp": "", + "web_dynamic_url_apng": "", + "mobile_dynamic_url_webp": "", + "wealthy_info": { + "uid": 0, + "level": 17, + "level_total_score": 0, + "cur_score": 0, + "upgrade_need_score": 0, + "status": 0, + "dm_icon_key": "" + }, + "new_style": 1, + "is_mystery": false, + "uinfo": { + "uid": 31382283, + "base": { + "name": "WYCBat", + "face": "https://i0.hdslb.com/bfs/face/876e30e89faa5672858cc17bdb357362ec96bc29.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": null, + "official_info": null, + "name_color_str": "" + }, + "medal": null, + "wealth": { + "level": 17, + "dm_icon_key": "" + }, + "title": null, + "guard": { + "level": 0, + "expired_str": "" + }, + "uhead_frame": null, + "guard_leader": null + }, + "full_cartoon_id": 1802, + "priority_level": 0, + "wealth_style_info": { + "url": "https://i0.hdslb.com/bfs/live/b6f2bf3e27f22b3039594842f0005b05a0dc5dae.png" + } + } +} +``` + +</details> + +#### 必须接受的用户进场特效 (ENTRY_EFFECT_MUST_RECEIVE) + +注: 在部分主播进入自己的直播间时下发。 + +结构与 [用户进场特效 (ENTRY_EFFECT)](#用户进场特效-ENTRY_EFFECT) 完全相同。 + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ENTRY_EFFECT_MUST_RECEIVE", + "data": { + "id": 135, + "uid": 438160221, + "target_id": 438160221, + "mock_effect": 0, + "face": "https://i0.hdslb.com/bfs/face/member/noface.jpg", + "privilege_type": 0, + "copy_writing": "<%weatfe%> 来了", + "copy_color": "#000000", + "highlight_color": "#FFF100", + "priority": 1, + "basemap_url": "https://i0.hdslb.com/bfs/live/mlive/da6933ea70f31c4df63f4b68b735891284888357.png", + "show_avatar": 1, + "effective_time": 1, + "web_basemap_url": "https://i0.hdslb.com/bfs/live/mlive/da6933ea70f31c4df63f4b68b735891284888357.png", + "web_effective_time": 2, + "web_effect_close": 0, + "web_close_time": 900, + "business": 3, + "copy_writing_v2": "<%weatfe%> 来了", + "icon_list": [], + "max_delay_time": 7, + "trigger_time": 1746031259272981482, + "identities": 1, + "effect_silent_time": 0, + "effective_time_new": 0, + "web_dynamic_url_webp": "", + "web_dynamic_url_apng": "", + "mobile_dynamic_url_webp": "", + "wealthy_info": null, + "new_style": 0, + "is_mystery": false, + "uinfo": { + "uid": 438160221, + "base": { + "name": "weatfe", + "face": "https://i0.hdslb.com/bfs/face/member/noface.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": null, + "origin_info": null, + "official_info": null, + "name_color_str": "" + }, + "medal": { + "name": "粉丝团", + "level": 11, + "color_start": 9272486, + "color_end": 9272486, + "color_border": 9272486, + "color": 9272486, + "id": 2956282, + "typ": 0, + "is_light": 1, + "ruid": 438160221, + "guard_level": 0, + "score": 16000, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#596FE099", + "v2_medal_color_end": "#596FE099", + "v2_medal_color_border": "#596FE099", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": { + "level": 5, + "dm_icon_key": "" + }, + "title": null, + "guard": { + "level": 0, + "expired_str": "" + }, + "uhead_frame": null, + "guard_leader": null + }, + "full_cartoon_id": 0, + "priority_level": 0, + "wealth_style_info": { + "url": "https://i0.hdslb.com/bfs/live/24f6ef867c3905064136f5c4e33a8d423d41ebdd.png" + } + } +} +``` + +</details> + +#### 全屏特效 (FULL_SCREEN_SPECIAL_EFFECT) + +**示例:** + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "cmd": "FULL_SCREEN_SPECIAL_EFFECT", + "data": { + "type": 2, + "ids": [ + 514 + ], + "queue": 2, + "platform_in": [ + 1, + 2 + ] + } +} +``` + +</details> + +#### 直播间在所属分区的排名改变 (AREA_RANK_CHANGED) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `AREA_RANK_CHANGED` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------ | ---- | +| conf_id | num | 配置 ID? | | +| rank_name | str | 排行榜名称 | | +| uid | num | 主播 mid | | +| rank | num | 直播间在分区的排名 | 没有上榜则为 0 | +| icon_url_blue | str | 蓝色排名图标 URL | | +| icon_url_pink | str | 粉色排名图标 URL | | +| icon_url_grey | str | 灰色排名图标 URL | | +| action_type | num | ? | | +| timestamp | num | 当前时间 | UNIX 秒级时间戳 | +| msg_id | str | ? | 一串 UUID | +| jump_url_link | str | 排行榜跳转链接 | | +| jump_url_pc | str | 排行榜跳转链接 | | +| jump_url_pink | str | 排行榜跳转链接 | | +| jump_url_web | str | 排行榜跳转链接 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "AREA_RANK_CHANGED", + "data": { + "conf_id": 23, + "rank_name": "手游航海", + "uid": 27717502, + "rank": 4, + "icon_url_blue": "https://i0.hdslb.com/bfs/live/18e2990a546d33368200f9058f3d9dbc4038eb5c.png", + "icon_url_pink": "https://i0.hdslb.com/bfs/live/a6c490c36e88c7b191a04883a5ec15aed187a8f7.png", + "icon_url_grey": "https://i0.hdslb.com/bfs/live/cb7444b1faf1d785df6265bfdc1fcfc993419b76.png", + "action_type": 1, + "timestamp": 1673625610, + "msg_id": "e93c7860-b901-41ca-aad8-fe538a5fac9c", + "jump_url_link": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=3&ruid=27717502&conf_id=23&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0#/area-rank", + "jump_url_pc": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=4&ruid=27717502&conf_id=23&pc_ui=338,465,f4eefa,0#/area-rank", + "jump_url_pink": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=1&ruid=27717502&conf_id=23&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0#/area-rank", + "jump_url_web": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=2&ruid=27717502&conf_id=23#/area-rank" + } +} +``` + +</details> + +#### 广播通知弹幕信息 (COMMON_NOTICE_DANMAKU) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `COMMON_NOTICE_DANMAKU` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| biz_id | num | 待调查 | | +| content_segments | array | 文本分段 | | +| danmaku_style | obj | 文本样式信息 | 可能不存在 | +| danmaku_url | str | 待调查 | | +| dmscore | num | 待调查 | | +| terminals | array | 指定显示的终端 | 数字数组 | + +`data.content_segments[n]` 数组中的对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| background_color | arr 或 null | 背景颜色? | 字符串数组,可能不存在 | +| background_color_dark | arr 或 null | 深色模式背景颜色? | 可能不存在 | +| font_bold | bool | text 字段是否加粗? | 可能不存在 | +| font_color | str | text 字段的十六进制颜色值 | | +| font_color_dark | str | text 字段的十六进制颜色值 | APP端设置为深色模式时使用,可能不存在 | +| highlight_font_color | str | text 字段高亮部分的十六进制颜色值? | 可能不存在 | +| highlight_font_color_dark | str | text 字段高亮部分的十六进制颜色值? | 深色模式时使用,可能不存在 | +| img_height | num | 图片高度 | 可能不存在 | +| img_url | str | 图片链接 | 可能不存在 | +| img_width | str | 图片宽度 | 可能不存在 | +| text | str | 文本 | | +| type | num | 文本组件类型 | 1:普通文本<br />2:图片<br />3:链接 | +| uri | str | 链接 | 文本组件类型为 `3` 时存在 | + +`data.danmaku_style` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| background_color | str | 文本背景颜色的十六进制颜色值 | | +| background_color_dark | str | 文本背景颜色的十六进制颜色值 | APP端设置为深色模式时使用 | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "COMMON_NOTICE_DANMAKU", + "data": { + "content_segments": [ + { + "font_color": "#FB7299", + "text": "春日限时任务:任务即将结束,抓紧完成获取3元红包奖励吧!未完成任务进度将重置", + "type": 1 + } + ], + "dmscore": 144, + "terminals": [ + 1, + 2, + 3, + 4, + 5 + ] + } +} +``` + +```json +{ + "cmd": "COMMON_NOTICE_DANMAKU", + "data": { + "biz_id": 0, + "content_segments": [ + { + "font_color": "#CCCCCC", + "font_color_dark": "#CCCCCC", + "text": "恭喜主播 时雨ioo ", + "type": 1 + }, + { + "font_color": "#F494AF", + "font_color_dark": "#F494AF", + "text": "成为手游航海当前第5名", + "type": 1 + } + ], + "danmaku_style": { + "background_color": null, + "background_color_dark": null + }, + "danmaku_uri": "", + "dmscore": 144, + "terminals": [ + 1, + 2, + 3 + ] + } +} +``` + +```json +{ + "cmd": "COMMON_NOTICE_DANMAKU", + "data": { + "content_segments": [ + { + "background_color": null, + "background_color_dark": null, + "font_bold": false, + "font_color": "#F294AE", + "font_color_dark": "", + "highlight_font_color": "", + "highlight_font_color_dark": "", + "img_height": 0, + "img_url": "", + "img_width": 0, + "text": "疯狂星期五:疯狂任务今日24点结束,请关注任务完成情况~", + "type": 1 + }, + { + "background_color": [ + "#FA729A" + ], + "background_color_dark": null, + "font_bold": false, + "font_color": "#FFFFFF", + "font_color_dark": "", + "highlight_font_color": "", + "highlight_font_color_dark": "", + "img_height": 0, + "img_url": "", + "img_width": 0, + "text": "立即查看", + "type": 3, + "uri": "https://live.bilibili.com/p/html/bilili-page-gift-intro-container/index.html?is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,0,0,30,100,12;2,2,375,100p,0,0,30,100,0;3,3,100p,544,0,0,30,100,12;4,2,375,100p,0,0,30,100,0;5,3,100p,70p,0,0,30,100,0;6,3,100p,70p,0,0,30,100,0;7,3,100p,70p,0,0,30,100,0;8,3,100p,70p,0,0,30,100,0&gift_id=32251&roomId=6154037&anchorId=194484313&sendTargetUid=194484313&active_tab=1" + } + ], + "danmaku_style": { + "background_color": null, + "background_color_dark": null + }, + "dmscore": 1008, + "terminals": [ + 1, + 2, + 3, + 4, + 5 + ] + } +} +``` + +</details> + +#### 直播间信息更改 (ROOM_CHANGE) + +注: 例如直播间标题更改、直播间分区更改 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `ROOM_CHANGE` | | +| data | obj | | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| title | str | 直播间标题 | | +| area_id | num | 当前直播间所属二级分区的ID | | +| parent_area_id | num | 当前直播间所属一级分区的ID | | +| area_name | str | 当前直播间所属二级分区的名称 | | +| parent_area_name | str | 当前直播间所属一级分区名称 | | +| live_key | str | 标记直播场次的key | 未开播更新直播间信息时为`"0"` | +| sub_session_key | str | 待调查 | 未开播更新直播间信息时为`""`(空字符串) | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +已开播: + +```json +{ + "cmd": "ROOM_CHANGE", + "data": { + "title": "开始白给CS", + "area_id": 371, + "parent_area_id": 9, + "area_name": "虚拟主播", + "parent_area_name": "虚拟主播", + "live_key": "320830629635915849", + "sub_session_key": "320830629635915849sub_time:1673690546" + } +} +``` + +未开播: + +```json +{ + "cmd": "ROOM_CHANGE", + "data": { + "title": "随缘", + "area_id": 216, + "parent_area_id": 6, + "area_name": "我的世界", + "parent_area_name": "单机游戏", + "live_key": "0", + "sub_session_key": "" + } +} +``` + +</details> + +#### 直播间内容审核报告 (ROOM_CONTENT_AUDIT_REPORT) + +注:这个数据包需要更新直播间标题且使用主播的登录信息才会下发,更新直播间标题后一般不会立刻下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ROOM_CONTENT_AUDIT_REPORT` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| audit_content_type | num | 审核内容类型? | | +| room\_id | num | 直播间ID | 未知是真实ID还是短号 | +| anchor\_uid | num | 主播的用户mid | | +| audit\_status | num | 审核状态? | | +| audit\_title | str | 被审核的直播间标题 | | +| audit\_reason | str | 审核结果 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ROOM_CONTENT_AUDIT_REPORT", + "data": { + "audit_content_type": 1, + "room_id": 1899237171, + "anchor_uid": 438160221, + "audit_status": 2, + "audit_title": "崩坏学园2", + "audit_reason": "一审通过" + } +} +``` + +</details> + +#### 醒目留言按钮 (SUPER_CHAT_ENTRANCE) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `SUPER_CHAT_ENTRANCE` | | +| data | obj | 醒目留言按钮的信息 | | +| roomid | num | 直播间ID | 未知是短号还是真实ID | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| status | num | 待调查 | | +| jump_url | str | 按下“醒目留言”按钮后弹出小窗的页面URL | | +| icon | str | “醒目留言”按钮图标的URL | | +| broadcast_type | num | 待调查 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "SUPER_CHAT_ENTRANCE", + "data": { + "status": 1, + "jump_url": "https://live.bilibili.com/p/html/live-app-superchat2/index.html?is_live_half_webview=1&hybrid_half_ui=1,3,100p,70p,ffffff,0,30,100;2,2,375,100p,ffffff,0,30,100;3,3,100p,70p,ffffff,0,30,100;4,2,375,100p,ffffff,0,30,100;5,3,100p,60p,ffffff,0,30,100;6,3,100p,60p,ffffff,0,30,100;7,3,100p,60p,ffffff,0,30,100", + "icon": "https://i0.hdslb.com/bfs/live/0a9ebd72c76e9cbede9547386dd453475d4af6fe.png", + "broadcast_type": 1 + }, + "roomid": "8618057" +} +``` + +</details> + +#### 顶部横幅 (WIDGET_BANNER) + +注: 网页端在直播间标题下面的横幅, 例如 限时任务 等 + +**JSON消息:** + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `WIDGET_BANNER` | | +| data | obj | 横幅信息 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| timestamp | num | 服务器发送数据包时的Unix时间戳 | | +| widget_list | obj | 横幅信息 | 待调查 | + +`data.widget_list` 对象: + +以 横幅 ID 为键, JSON Object 为值的表 + +`data.widget_list['?']` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| id | num | 横幅ID | | +| title | str | 待调查 | | +| cover | str | 待调查 | | +| web_cover | str | 待调查 | | +| tip_text | str | 待调查 | | +| tip_text_color | str | 待调查 | | +| tip_bottom_color | str | 待调查 | | +| jump_url | str | 点击横幅后出现小窗的页面的URL | | +| url | str | 待调查 | | +| stay_time | num | 待调查 | | +| site | num | 待调查 | | +| platform_in | array | 待调查 | | +| type | num | 待调查 | | +| band_id | num | 待调查 | | +| sub_key | str | 待调查 | | +| sub_data | str | 横幅数据 | | +| is_add | bool | 待调查 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "WIDGET_BANNER", + "data": { + "timestamp": 1673684868, + "widget_list": { + "308": { + "id": 308, + "title": "一月限时任务", + "cover": "", + "web_cover": "", + "tip_text": "限时任务", + "tip_text_color": "", + "tip_bottom_color": "", + "jump_url": "https://live.bilibili.com/activity/live-activity-battle/index.html?app_name=time_limited_task_jan_2023&is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,0,0,0,0,12,0;2,2,375,100p,0,0,0,0,12,0;3,3,100p,70p,0,0,0,0,12,0;4,2,375,100p,0,0,0,0,12,0;5,3,100p,70p,0,0,0,0,12,0;6,3,100p,70p,0,0,0,0,12,0;7,3,100p,70p,0,0,0,0,12,0;8,3,100p,70p,0,0,0,0,12,0&room_id=8618057&uid=29857468#/", + "url": "", + "stay_time": 5, + "site": 1, + "platform_in": [ + "live", + "blink", + "live_link", + "web", + "pc_link" + ], + "type": 1, + "band_id": 101558, + "sub_key": "", + "sub_data": "%7B%22task_status%22%3A0%2C%22current_val%22%3A10%2C%22target_val%22%3A1200%2C%22timeout%22%3A1673687024%2C%22reward_price%22%3A8%2C%22reward_type%22%3A1%7D", + "is_add": true + } + } + } +} +``` + +</details> + +#### 礼物心愿单进度 (WIDGET_WISH_LIST) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `WIDGET_WISH_LIST` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| wish | array | 礼物心愿单信息 | | +| wish_status | num | ? | | +| sid | num | ? | | +| wish_status_info | array | ? | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "WIDGET_WISH_LIST", + "data": { + "wish": [ + { + "type": 3, + "gift_id": 10003, + "gift_name": "舰长", + "gift_img": "https://i0.hdslb.com/bfs/live/f1be2a2d5b227ce72641de1ad64bcc7f9e4111c3.png", + "gift_price": 198000, + "target_num": 5, + "current_num": 0 + }, + { + "type": 2, + "gift_id": 3, + "gift_name": "B坷垃", + "gift_img": "https://s1.hdslb.com/bfs/live/cc8bfcbc24c8b65937f62ce0d16b31ab987dce47.png", + "gift_price": 9900, + "target_num": 5, + "current_num": 0 + }, + { + "type": 2, + "gift_id": 31039, + "gift_name": "牛哇牛哇", + "gift_img": "https://s1.hdslb.com/bfs/live/b8a38b4bd3be120becddfb92650786f00dffad48.png", + "gift_price": 100, + "target_num": 10, + "current_num": 0 + } + ], + "wish_status": 1, + "sid": 477, + "wish_status_info": [ + { + "wish_status_msg": "设定心 愿", + "wish_status_img": "https://i0.hdslb.com/bfs/live/38f82bac32794e79776f7371269453652bd58a87.png", + "wish_status": 0 + }, + { + "wish_status_msg": "达成", + "wish_status_img": "https://i0.hdslb.com/bfs/live/1dae635924437239fc69e561a1a9467508521249.png", + "wish_status": 2 + }, + { + "wish_status_msg": "收集失败", + "wish_status_img": "https://i0.hdslb.com/bfs/live/3bbd30fdd32d085cc90e9ccd98c65a886dca9a8f.png", + "wish_status": 3 + } + ], + "wish_name": "心愿" + } +} +``` + +</details> + +#### 礼物星球信息 (WIDGET_WISH_INFO) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `WIDGET_WISH_INFO` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| sid | num | (?) | | +| wish | arr | 礼物需求信息 | | +| jump_url | str | 用户端礼物星球界面 | | +| wish_status | num | 礼物星球状态 | | +| card_text | str | 卡片提示文本 | | +| modal_text | str | 需求标题 | | +| button_text | str | 按钮文本 | | +| show_time | num | 显示时间 | 单位秒 | +| ts | num | 发送时间戳 | Unix秒时间戳 | +| tid | num | (?) | | +| wish_status_info | arr | 状态对照信息 | | +| wish_name | str | 礼物星球名称 | | + +`data.wish` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| gift_id | num | 礼物id | | +| target_num | num | 需求数量 | | +| gift_img | str | 礼物图片URL | | +| gift_price | num | 礼物金瓜子标价 | CNY×1000 | +| gift_name | str | 礼物名称 | | +| wish_status | num | 该礼物达成状态 | | + +`data.wish_status_info` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| wish_status_msg | str | 状态提示信息 | | +| wish_status_img | str | 状态图片URL | | +| wish_status | str | 状态 | | +| wish_status_desc | str | 状态描述 | 不一定存在 | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "WIDGET_WISH_INFO", + "data": { + "sid": 658537, + "wish": [ + { + "gift_id": 31036, + "target_num": 1, + "gift_img": "https://s1.hdslb.com/bfs/live/8b40d0470890e7d573995383af8a8ae074d485d9.png", + "gift_price": 100, + "gift_name": "小花花", + "wish_status": 1 + }, + { + "gift_id": 30758, + "target_num": 1, + "gift_img": "https://s1.hdslb.com/bfs/live/3ddb10b055b9d1826829ec0fad93ab56484d4a90.png", + "gift_price": 100, + "gift_name": "这个好诶", + "wish_status": 1 + }, + { + "gift_id": 31039, + "target_num": 1, + "gift_img": "https://s1.hdslb.com/bfs/live/91ac8e35dd93a7196325f1e2052356e71d135afb.png", + "gift_price": 100, + "gift_name": "牛哇牛哇", + "wish_status": 1 + } + ], + "jump_url": "https://live.bilibili.com/p/html/bilili-page-gift-wishes-mix-planet/user.html?is_live_half_webview=1&hybrid_half_ui=1,3,100p,70p,0,0,30,100,15,0;2,2,375,100p,0,0,30,100,15,0;3,3,100p,70p,0,0,30,100,15,0;4,2,375,100p,0,0,30,100,15,0;5,3,100p,70p,0,0,30,100,15,0;6,3,100p,70p,0,0,30,100,15,0;7,3,100p,70p,0,0,30,100,15,0;8,3,100p,70p,0,0,30,100,15,0", + "wish_status": 1, + "card_text": "主播今日心愿还未完成", + "modal_text": "今日心愿礼物", + "button_text": "去助力", + "show_time": 5, + "ts": 1746257134, + "tid": 6585370000, + "wish_status_info": [ + { + "wish_status_msg": "礼物星球待点亮", + "wish_status_img": "https://i0.hdslb.com/bfs/live/e507f8b101289b2ce6741880a28304215a65f5bf.png", + "wish_status": -1 + }, + { + "wish_status_msg": "今日心愿暂未达成", + "wish_status_img": "https://i0.hdslb.com/bfs/live/e507f8b101289b2ce6741880a28304215a65f5bf.png", + "wish_status": 1 + }, + { + "wish_status_msg": "今日心愿已达成", + "wish_status_img": "https://i0.hdslb.com/bfs/live/e507f8b101289b2ce6741880a28304215a65f5bf.png", + "wish_status": 2, + "wish_status_desc": "已完成" + } + ], + "wish_name": "心愿礼物" + } +} +``` + +</details> + +#### 下播的直播间 (STOP_LIVE_ROOM_LIST) + +注: 估计是更新关注的主播直播状态的 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | `STOP_LIVE_ROOM_LIST` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| room_id_list | array | 下播的直播间ID | | + +`data.room_id_list` 数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ---- | ---- | +| 0 | num | 第 1 个下播的直播间 ID | | +| 1 | num | 第 2 个下播的直播间 ID | | +| …… | num | …… | | +| n | num | 第 (n+1) 个下播的直播间 ID | | + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "STOP_LIVE_ROOM_LIST", + "data": { + "room_id_list": [ + 14507570, 23963084, 24370437, 24380902, 24889494, + 22735090, 24268758, 24668544, 38325, 24762357, + 3222966, 6684395, 24199566, 24864470, 10224194, + 14953052, 6198131, 898214, 10412034, 22506883, + 23932516, 6768714, 24392281, 1799500, 22392518, + 22976729, 21557043, 24896092, 11718936, 21612704, + 21778117, 24145539, 23178318, 23575414, 24842462, + 22245210, 24895499, 3133873, 1298898, 22175308, + 3600684, 2053035, 270652, 24877480, 3854611, + 21512488, 24393104, 24756457, 4630683, 6955412, + 23199465, 2880481, 23868339, 717791, 24068307, + 24875243, 22777819, 24896061, 24619665 + ] + } +} +``` + +</details> + +#### 系统信息 (SYS_MSG) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `SYS_MSG` | | +| msg | str | 提示信息 | | +| url | str | 跳转 URL | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "SYS_MSG", + "msg": "争夺开启,时间周五20点至周日20点,逾期不候哟!", + "url": "" +} +``` + +</details> + +#### 警告 (WARNING) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `WARNING` | | +| msg | str | 警告信息 | | +| roomid | num | 直播间 ID | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "WARNING", + "msg": "图片内容不适宜,请立即调整", + "roomid": 22195814 +} +``` + +</details> + +#### 切断 (CUT_OFF) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `CUT_OFF` | | +| msg | str | 切断原因 | | +| roomid | num | 直播间 ID | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "CUT_OFF", + "msg": "违反直播言论规范,请立即调整", + "roomid": 23993070 +} +``` + +</details> + +#### 切断V2 (CUT_OFF_V2) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `CUT_OFF_V2` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cut_off_scene | num | | | +| timestamp | num | 操作时间戳 | UNIX 秒时间戳 | +| cut_off_version | num | 切断提示信息版本? | | +| cut_off_data | obj | 切断提示信息 | | + +`data.cut_off_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cut_off_title | str | 对话框窗口标题 | | +| cut\_off\_message\_list | array | 对话框正文列表 | | +| cut\_off\_tip\_list | array | 对话框提示信息列表 | | +| cut\_off\_button\_list | array | 对话框按钮列表 | | + +`data.cut_off_data.cut_off_message_list` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 首个正文信息 | | +| … | obj | 单个正文信息 | | +| i | obj | 最后正文信息 | | + +`data.cut_off_data.cut_off_message_list[i]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| type | num | 显示类别 | `1`:一个“`label`:`content`”格式的信息 | +| label | str | 标签 | | +| content | str | 内容 | | + +`data.cut_off_data.cut_off_tip_list` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 首个提示行信息 | | +| … | obj | 单个提示行信息 | | +| i | obj | 最后提示行信息 | | + +`data.cut_off_data.cut_off_tip_list[i]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| show\_platform | array | 要在哪个客户端显示的指代 | | +| message_list | array | 提示信息列表 | | + +`data.cut_off_data.cut_off_tip_list[i].message_list` 数组: + +| 索引 | 类型 | 内容 | 备注 | +|:---:| --- | --- | --- | +| 0 | obj | 首个提示组件信息 | | +| … | obj | 单个提示组件信息 | | +| i1 | obj | 最后提示组件信息 | | + +`data.cut_off_data.cut_off_tip_list[i].message_list[i1]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| type | num | 显示类型 | `1`:纯文本<br />`2`:链接 | +| content | str | 显示文本 | | +| link_url | str | 链接 | type为2时有内容 | + +`data.cut_off_data.cut_off_button_list` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 首个按钮信息 | | +| … | obj | 单个按钮信息 | | +| i | obj | 最后按钮信息 | | + +`data.cut_off_data.cut_off_button_list[i]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| show_platform | array | 要在那个客户端显示的指代 | `1`和`2`可能是手机直播姬<br />`3`和`4`可能是pc直播姬或网页直播姬 | +| button\_text | str | 按钮文本 | | +| button\_action | num | 按钮操作 | `1`:关闭窗口?<br />`2`:跳转到链接? | +| button_link_url | str | 跳转链接 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "CUT_OFF_V2", + "data": { + "cut_off_scene": 1, + "timestamp": 1731590280, + "cut_off_version": 1, + "cut_off_data": { + "cut_off_title": "违规提示", + "cut_off_message_list": [ + { + "type": 1, + "label": "处罚结果", + "content": "切断本场直播" + }, + { + "type": 1, + "label": "违规原因", + "content": "您本场直播存在挂机、录播等消极直播行为,因此直播被切断,请您及时整改" + }, + { + "type": 1, + "label": "处罚时间", + "content": "2024年11月14日21时17分" + } + ], + "cut_off_tip_list": [ + { + "show_platform": [ + 3, + 4 + ], + "message_list": [ + { + "type": 1, + "content": "请在", + "link_url": "" + }, + { + "type": 2, + "content": "【处罚中心】", + "link_url": "https://link.bilibili.com/p/center/index?my-room/violation-records#/my-room/violation-records" + }, + { + "type": 1, + "content": "查看你的违规记录", + "link_url": "" + } + ] + } + ], + "cut_off_button_list": [ + { + "show_platform": [ + 1, + 2 + ], + "button_text": "了解详情", + "button_action": 2, + "button_link_url": "https://live.bilibili.com/p/html/live-anchor-galaxy/violation_records/mobile.html?-Abrowser=live&is_live_webview=1" + }, + { + "show_platform": [ + 3, + 4 + ], + "button_text": "我知道了", + "button_action": 1, + "button_link_url": "" + } + ] + } + } +} +``` + +</details> + +#### 直播对话框 (ANCHOR_ECOLOGY_LIVING_DIALOG) + +注:推测在自动检测到画面不怎么变化且没人聊天时警告下发,见[#1139(issue正文)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1139#issue-2657488653)。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ANCHOR_ECOLOGY_LIVING_DIALOG` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| dialog\_scene | num | | | +| timestamp | num | 触发时间戳 | UNIX 秒时间戳 | +| valid_timestamp | num | | | +| dialog\_top\_vertical\_img | str | | | +| dialog\_top\_landscape_img | str | | | +| dialog\_title | str | 对话框标题 | | +| dialog_message_list | array | 对话框正文列表 | 参见`CUT_OFF_V2` | +| dialog_tip_list | array | 对话框提示信息列表 | 参见`CUT_OFF_V2` | +| dialog_button_list | array | 对话框按钮列表 | 参见`CUT_OFF_V2` | + +`data.dialog_message_list` 数组: + +同`CUT_OFF_V2`的`data.cut_off_data.cut_off_message_list`数组。 + +`data.dialog_tip_list` 数组: + +同`CUT_OFF_V2`的`data.cut_off_data.cut_off_tip_list`数组。 + +`data.dialog_button_list` 数组: + +同`CUT_OFF_V2`的`data.cut_off_data.cut_off_button_list`数组。 + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ANCHOR_ECOLOGY_LIVING_DIALOG", + "data": { + "dialog_scene": 1, + "timestamp": 1731504845, + "valid_timestamp": 0, + "dialog_top_vertical_img": "https://i0.hdslb.com/bfs/live/ee359d3e89bb044914f72a557a4ac2d3b5ba4004.png", + "dialog_top_landscape_img": "https://i0.hdslb.com/bfs/live/ee359d3e89bb044914f72a557a4ac2d3b5ba4004.png", + "dialog_title": "直播间违规", + "dialog_message_list": [ + { + "type": 1, + "label": "处罚结果", + "content": "警告" + }, + { + "type": 1, + "label": "违规原因", + "content": "您本场直播存在挂机、录播等消极直播行为,请及时整改" + }, + { + "type": 1, + "label": "处罚时间", + "content": "2024年11月13日21时34分" + } + ], + "dialog_tip_list": [ + { + "show_platform": [ + 1, + 2 + ], + "message_list": [ + { + "type": 1, + "content": "请在", + "link_url": "" + }, + { + "type": 2, + "content": "【处罚中心】", + "link_url": "https://live.bilibili.com/p/html/live-anchor-galaxy/violation_records/mobile.html?is_live_half_webview=1u0026hybrid_rotate_d=1u0026is_cling_player=1u0026hybrid_half_ui=1,3,100p,70p,0,1,30,100;2,2,375,100p,0,1,30,100;3,3,100p,70p,0,1,30,100;4,2,375,100p,0,1,30,100;5,3,100p,70p,0,1,30,100;6,3,100p,70p,0,1,30,100;7,3,100p,70p,0,1,30,100;8,3,100p,70p,0,1,30,100#/" + }, + { + "type": 1, + "content": "查看你的违规记录", + "link_url": "" + } + ] + }, + { + "show_platform": [ + 3, + 4 + ], + "message_list": [ + { + "type": 1, + "content": "请在", + "link_url": "" + }, + { + "type": 2, + "content": "【处罚中心】", + "link_url": "https://link.bilibili.com/#/my-room/violation-records?jump_type=browser&app_common=open" + }, + { + "type": 1, + "content": "查看你的违规记录", + "link_url": "" + } + ] + } + ], + "dialog_button_list": [ + { + "show_platform": [ + 1, + 2, + 3, + 4 + ], + "button_text": "我知道了", + "button_action": 1, + "button_link_url": "" + } + ] + } +} +``` + +</details> + +#### 直播间背景图片修改 (CHANGE_ROOM_INFO) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `CHANGE_ROOM_INFO` | | +| background | str | 背景图 URL | | +| roomid | num | 直播间 ID | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "CHANGE_ROOM_INFO", + "background": "https://i0.hdslb.com/bfs/live/2388faed3728f3396052273ad4c3c9af21c411fc.jpg", + "roomid": 23993070 +} +``` + +</details> + +#### 直播间皮肤变更 (ROOM_SKIN_MSG) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ROOM_SKIN_MSG` | | +| skin_id | num | 皮肤 ID | | +| status | num | 状态? | | +| end_time | num | 皮肤结束时间? | UNIX 秒级时间戳 | +| current_time | num | 当前时间 | UNIX 秒级时间戳 | +| only_local | bool | 仅在本地显示? | | +| scatter | obj | ? | | +| skin_config | obj | 皮肤配置 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ROOM_SKIN_MSG", + "skin_id": 353, + "status": 1, + "end_time": 1652620669, + "current_time": 1652015870, + "only_local": false, + "scatter": { + "min": 1, + "max": 200 + }, + "skin_config": { + "android": { + "1": { + "zip": "https://i0.hdslb.com/bfs/live/fab943a5d7eeb871ecf06413283d17536e67ab91.zip", + "md5": "011EBB3E14192212FD50852245DC74FA" + } + }, + "ios": { + "1": { + "zip": "https://i0.hdslb.com/bfs/live/e7d8768dcb3975d82d794fe6b39756317916a7fe.zip", + "md5": "B1223577FE9C5C248EC1326CDACF8379" + } + }, + "ipad": { + "1": { + "zip": "https://i0.hdslb.com/bfs/live/0856e17be073d75b70098609ae26572ba1534605.zip", + "md5": "481AE75FFD0E0DE91EAFB5B6E0F8936B" + } + }, + "web": { + "1": { + "zip": "https://i0.hdslb.com/bfs/live/0b3770980e600f23629c8445fd211d4a12ec4b6f.zip", + "md5": "8F98F79F02DEFE8B69EE2F6DE7416DFF", + "platform": "web", + "version": "1", + "headInfoBgPic": "https://i0.hdslb.com/bfs/live/d293e69b70af34df0fef086a86552b1761a33a75.jpg", + "giftControlBgPic": "https://i0.hdslb.com/bfs/live/1a124c5547c784f41dc3d7f65f446c56c4cbb73e.jpg", + "rankListBgPic": "https://i0.hdslb.com/bfs/live/af8580a956d0eac6ea1d2cc97ea743d435a86874.jpg", + "mainText": "#FFffffff", + "normalText": "#FFffffff", + "highlightContent": "#FFffd119", + "border": "#FFaec2ff", + "buttonText": "#FF123ab2" + } + } + } +} +``` + +</details> + +#### 开启等级禁言 (ROOM_SILENT_ON) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| data | obj | 信息本体 | | +| cmd | str | `ROOM_SILENT_ON` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| type | str | 类型? | | +| level | num | 等级? | | +| second | num | 时间? | UNIX 秒级时间戳 | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "data": { + "type": "member", + "level": 1, + "second": 1651000426 + }, + "cmd": "ROOM_SILENT_ON" +} +``` + +</details> + +#### 关闭等级禁言 (ROOM_SILENT_OFF) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| data | obj | 信息本体 | | +| cmd | str | `ROOM_SILENT_OFF` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| type | str | 空 | | +| level | num | 0 | | +| second | num | 0 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "data": { + "type": "", + "level": 0, + "second": 0 + }, + "cmd": "ROOM_SILENT_OFF" +} +``` + +</details> + +#### 指定观众禁言 (ROOM_BLOCK_MSG) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ROOM_BLOCK_MSG` | | +| data | obj | 详细信息 | | +| uid | num | 禁言用户 mid | | +| uname | str | 禁言用户名 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| dmscore | num | 弹幕分数? | | +| operator | num | 操作者? | | +| uid | num | 禁言用户 mid | | +| uname | str | 禁言用户名 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ROOM_BLOCK_MSG", + "data": { + "dmscore": 30, + "operator": 2, + "uid": 37903025, + "uname": "玉麟珑" + }, + "uid": "37903025", + "uname": "玉麟珑" +} +``` + +</details> + +#### 房管列表 (ROOM_ADMINS) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ROOM_ADMINS` | | +| uids | array | 房管 mid 列表 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ROOM_ADMINS", + "uids": [ 898424, 384203692, 1309513, 30816752, 23931549, 223134 ] +} +``` + +</details> + +#### 设立房管 (room_admin_entrance) + +注: 此处 cmd 内容为小写 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `room_admin_entrance` | | +| dmscore | num | 弹幕分数? | | +| level | num | 等级? | | +| msg | str | 提示信息 | | +| uid | num | 用户 mid | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "room_admin_entrance", + "dmscore": 45, + "level": 1, + "msg": "系统提示:你已被主播设为房管", + "uid": 223134 +} +``` + +</details> + +#### 撤销房管 (ROOM_ADMIN_REVOKE) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ROOM_ADMIN_REVOKE` | | +| msg | str | 提示信息 | | +| uid | num | 用户 mid | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ROOM_ADMIN_REVOKE", + "msg": "撤销房管", + "uid": 6791627 +} +``` + +</details> + +#### 多个直播视角信息 (LIVE_MULTI_VIEW_NEW_INFO) + +部分活动直播间会下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `LIVE_MULTI_VIEW_NEW_INFO` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| title | str | 活动标题 | 活动结束后为`""` | +| room_id | num | 主直播间id | 活动结束后为`0` | +| copy_writing | str | 提示文本 | 活动结束后为`""` | +| bg_image | str | 背景图片 | 活动结束后为`""` | +| sub_slt_color | str | 切换按钮颜色? | 活动结束后为`""` | +| sub_bg_color | str | 切换按钮背景颜色? | 活动结束后为`""` | +| sub_text_color | str | 切换按钮文本颜色? | 活动结束后为`""` | +| view_type | num | | | +| room_list | arr | 房间列表 | 不包括“未直播”状态的直播间,活动结束后为`null` | +| relation_view | arr | 详细关系? | 不包括“未直播”状态的直播间,活动结束后为`null` | +| view_pattern | num | | | +| gather_room_list | arr | 空数组? | 活动结束后为`null` | + +`data.room_list` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| order_id | num | 顺序id | | +| room_id | num | 直播间id | 似乎是长号 | +| room_name | str | 主播名称 | | +| live_status | num | 直播状态 | 1:直播中<br />2:轮播中 | +| jump_url | str | 加入直播间的链接 | | + +`data.relation_view` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| order_id | num | 顺序id | | +| view_type | num | | | +| view_id | num | 直播间id | | +| view_name | str | 主播名称 | | +| title | str | 直播间标题 | | +| cover | str | 直播间封面 | | +| jump_url | str | 加入直播间的链接 | | +| switch | bool | | | +| num | num | 看过人数 | | +| watch_icon | str | 看过图标 | | +| live_status | num | 直播状态 | 同`data.room_list[i].live_status` | +| text_small | str | 看过人数文本 | | +| use_view_vt | bool | | | +| anchor_face | str | 主播头像 | | +| match_live_room | bool | | | +| match_info | null | | | +| duration | num | | | +| up_name | str | `""` | | +| pub_date | str | | | +| gather_id | num | | | +| sub_name | str | | | + +**示例:** + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "cmd": "LIVE_MULTI_VIEW_NEW_INFO", + "data": { + "title": "战地风云6公开测试", + "room_id": 5050, + "copy_writing": "更多视角", + "bg_image": "https://i0.hdslb.com/bfs/live/edaa9477a1d8325dd0c36c419b6fd5f9646b2419.png", + "sub_slt_color": "#FFFFFF", + "sub_bg_color": "#333333", + "sub_text_color": "#FFFFFF", + "view_type": 0, + "room_list": [ + { + "order_id": 2, + "room_id": 6154037, + "room_name": "Asaki大人", + "live_status": 2, + "jump_url": "https://live.bilibili.com/6154037?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 4, + "room_id": 1521765, + "room_name": "南云鸟羽", + "live_status": 1, + "jump_url": "https://live.bilibili.com/1521765?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 8, + "room_id": 24065, + "room_name": "闻香识", + "live_status": 1, + "jump_url": "https://live.bilibili.com/24065?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 14, + "room_id": 38528, + "room_name": "乔伊奥斯托雷", + "live_status": 1, + "jump_url": "https://live.bilibili.com/38528?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 15, + "room_id": 21263282, + "room_name": "Yommyko", + "live_status": 2, + "jump_url": "https://live.bilibili.com/21263282?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 16, + "room_id": 5513659, + "room_name": "狙佬-zuener", + "live_status": 1, + "jump_url": "https://live.bilibili.com/5513659?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 18, + "room_id": 146007, + "room_name": "Kisflow", + "live_status": 1, + "jump_url": "https://live.bilibili.com/146007?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 19, + "room_id": 1163043, + "room_name": "人形鹿头自走炮", + "live_status": 1, + "jump_url": "https://live.bilibili.com/1163043?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 20, + "room_id": 3343118, + "room_name": "版尤黑紫", + "live_status": 1, + "jump_url": "https://live.bilibili.com/3343118?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 21, + "room_id": 25212992, + "room_name": "贝施汀", + "live_status": 1, + "jump_url": "https://live.bilibili.com/25212992?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 22, + "room_id": 11313, + "room_name": "丧心病狂的魔笑", + "live_status": 1, + "jump_url": "https://live.bilibili.com/11313?broadcast_type=0&is_room_feed=1&live_from=28022" + }, + { + "order_id": 24, + "room_id": 902302, + "room_name": "LF叶绿", + "live_status": 1, + "jump_url": "https://live.bilibili.com/902302?broadcast_type=0&is_room_feed=1&live_from=28022" + } + ], + "relation_view": [ + { + "order_id": 2, + "view_type": 0, + "view_id": 6154037, + "view_name": "Asaki大人", + "title": "猪猪猪", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/87e0332a5c3c8cd73fa7616045111b90b0199087.jpg", + "jump_url": "https://live.bilibili.com/6154037?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 2305, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 2, + "text_small": "2305", + "use_view_vt": false, + "anchor_face": "https://i1.hdslb.com/bfs/face/84a861facfa041b46f7a30897e9ed3f2e05e0519.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 4, + "view_type": 0, + "view_id": 1521765, + "view_name": "南云鸟羽", + "title": "【战地6B测】下午四点开!聊天摸鱼", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/a8216e0b5469949fcbcc72458c7955b562838a89.jpg", + "jump_url": "https://live.bilibili.com/1521765?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 36987, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "3.6万", + "use_view_vt": false, + "anchor_face": "https://i1.hdslb.com/bfs/face/f4744b6346ddaccb4642a0f05f25d798fb5d8474.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 8, + "view_type": 0, + "view_id": 24065, + "view_name": "闻香识", + "title": "4点战地6!!", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/6e309306fcb7bdeeb5e72f8b4c2d1ed7ba7e1e29.jpg", + "jump_url": "https://live.bilibili.com/24065?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 32408, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "3.2万", + "use_view_vt": false, + "anchor_face": "https://i0.hdslb.com/bfs/face/df21869b067816e03c517bc774f6ebf5a86563de.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 14, + "view_type": 0, + "view_id": 38528, + "view_name": "乔伊奥斯托雷", + "title": "[战地六B测]捞薯条,吃薯条,谁是薯条?", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/a89ebcd8b4f3e841ddb7cb53fbdc6013a9956013.jpg", + "jump_url": "https://live.bilibili.com/38528?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 3660, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "3660", + "use_view_vt": false, + "anchor_face": "https://i1.hdslb.com/bfs/face/82ef4b09c26751649da2a48960d23fd87baa6db5.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 15, + "view_type": 0, + "view_id": 21263282, + "view_name": "Yommyko", + "title": "和广东双马尾搏斗!禁闭求生2", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/86ac43cf0c1db277b92a5e83324558ceab2bb108.jpg", + "jump_url": "https://live.bilibili.com/21263282?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 1583, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 2, + "text_small": "1583", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/9718e4c59c2cfcc9f8b747ad8ea5006fad78a76a.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 16, + "view_type": 0, + "view_id": 5513659, + "view_name": "狙佬-zuener", + "title": "战地6!开玩!七年之约已到!", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/b1779156686031460633d31362205456d1bb53df.jpg", + "jump_url": "https://live.bilibili.com/5513659?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 30035, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "3.0万", + "use_view_vt": false, + "anchor_face": "https://i0.hdslb.com/bfs/face/bdb4b214d3446aca7c11b408ae6f35c89f52a5cc.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 18, + "view_type": 0, + "view_id": 146007, + "view_name": "Kisflow", + "title": "战地6 BETA 战场老登职业哥", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/0007988a93c06215f0ffd96f7a4e3834d1396408.jpg", + "jump_url": "https://live.bilibili.com/146007?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 7839, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "7839", + "use_view_vt": false, + "anchor_face": "https://i1.hdslb.com/bfs/face/5761dbf3f03b1a31ad8a6aec01452c97e93c16c0.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 19, + "view_type": 0, + "view_id": 1163043, + "view_name": "人形鹿头自走炮", + "title": "神秘远光84男", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/cea622fe174d8c3fd26e58ea5a7e3b709fd8aee4.jpg", + "jump_url": "https://live.bilibili.com/1163043?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 20796, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "2.0万", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/259c1f3b485ad5e2182446246fccb87114701ed8.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 20, + "view_type": 0, + "view_id": 3343118, + "view_name": "版尤黑紫", + "title": "爽玩!战地6B测", + "cover": "https://i0.hdslb.com/bfs/live/user_cover/039be5f223d26d4108941f1f056ee5842e3e5720.jpg", + "jump_url": "https://live.bilibili.com/3343118?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 1704, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "1704", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/3cdcbc8945d18575279ac55c75f4da9f0a7dbc9e.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 21, + "view_type": 0, + "view_id": 25212992, + "view_name": "贝施汀", + "title": "战地6还没开服,先直播剪会儿视频聊聊天", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/fb0227b71dca8555588c9c6c0af329cf250123a9.jpg", + "jump_url": "https://live.bilibili.com/25212992?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 2207, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "2207", + "use_view_vt": false, + "anchor_face": "https://i0.hdslb.com/bfs/face/7242e856562166a27e8be4a184e4cddbaed8177f.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 22, + "view_type": 0, + "view_id": 11313, + "view_name": "丧心病狂的魔笑", + "title": "等待测试开启!但是先直播周边开箱!", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/48fb912da0f665427eb230ef3273defdb1a33fa4.jpg", + "jump_url": "https://live.bilibili.com/11313?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 2924, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "2924", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/e672848bc2718b79ca2f44eb447e84282c6f806d.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + }, + { + "order_id": 24, + "view_type": 0, + "view_id": 902302, + "view_name": "LF叶绿", + "title": "《田 野 打 架 6》", + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/3b18086f9e70f719917c5d4561c25defdd13cd82.jpg", + "jump_url": "https://live.bilibili.com/902302?broadcast_type=0&is_room_feed=1&live_from=28022", + "switch": true, + "num": 1897, + "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "live_status": 1, + "text_small": "1897", + "use_view_vt": false, + "anchor_face": "https://i2.hdslb.com/bfs/face/5e3570095f5af77d20188ea45d45da216a31e52d.jpg", + "match_live_room": false, + "match_info": null, + "duration": 0, + "up_name": "", + "pub_date": "", + "gather_id": 0, + "sub_name": "" + } + ], + "view_pattern": 1, + "gather_room_list": [] + } +} +``` + +</details> + +#### 天选时刻合法检查 (ANCHOR_LOT_CHECKSTATUS) + +**示例:** + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "cmd": "ANCHOR_LOT_CHECKSTATUS", + "data": { + "id": 2553641, + "reject_reason": "由于奖品格式不合格,请仔细检查后再提交哦", + "status": 5, + "uid": 1827176970 + } +} +``` + +</details> + +#### 天选时刻开始 (ANCHOR_LOT_START) + +**示例:** + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "cmd": "ANCHOR_LOT_START", + "data": { + "asset_icon": "https://i0.hdslb.com/bfs/live/627ee2d9e71c682810e7dc4400d5ae2713442c02.png", + "award_image": "", + "award_name": "艺术头像绘制", + "award_num": 1, + "cur_gift_num": 0, + "current_time": 1651037946, + "danmu": "卡宝下午好", + "gift_id": 3, + "gift_name": "B坷垃", + "gift_num": 1, + "gift_price": 9900, + "goaway_time": 180, + "goods_id": 15, + "id": 2553648, + "is_broadcast": 1, + "join_type": 1, + "lot_status": 0, + "max_time": 600, + "require_text": "当前主播粉丝勋章至少1级", + "require_type": 2, + "require_value": 1, + "room_id": 23614753, + "send_gift_ensure": 0, + "show_panel": 1, + "start_dont_popup": 0, + "status": 1, + "time": 599, + "url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html?is_live_half_webview=1&hybrid_biz=live-lottery-anchor&hybrid_half_ui=1,5,100p,100p,000000,0,30,0,0,1;2,5,100p,100p,000000,0,30,0,0,1;3,5,100p,100p,000000,0,30,0,0,1;4,5,100p,100p,000000,0,30,0,0,1;5,5,100p,100p,000000,0,30,0,0,1;6,5,100p,100p,000000,0,30,0,0,1;7,5,100p,100p,000000,0,30,0,0,1;8,5,100p,100p,000000,0,30,0,0,1", + "web_url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html" + } +} +``` + +</details> + +#### 天选时刻结束 (ANCHOR_LOT_END) + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ANCHOR_LOT_END", + "data": { + "id": 2553648 + } +} +``` + +</details> + +#### 天选时刻中奖者 (ANCHOR_LOT_AWARD) + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ANCHOR_LOT_AWARD", + "data": { + "award_dont_popup": 1, + "award_image": "", + "award_name": "艺术头像绘制", + "award_num": 1, + "award_users": [ + { + "uid": 8318700, + "uname": "桥下念喬", + "face": "http://i0.hdslb.com/bfs/face/dfde2ffc6286c2c5189592cc84fd70bcf977b143.jpg", + "level": 21, + "color": 5805790 + } + ], + "id": 2553648, + "lot_status": 2, + "url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html?is_live_half_webview=1&hybrid_biz=live-lottery-anchor&hybrid_half_ui=1,5,100p,100p,000000,0,30,0,0,1;2,5,100p,100p,000000,0,30,0,0,1;3,5,100p,100p,000000,0,30,0,0,1;4,5,100p,100p,000000,0,30,0,0,1;5,5,100p,100p,000000,0,30,0,0,1;6,5,100p,100p,000000,0,30,0,0,1;7,5,100p,100p,000000,0,30,0,0,1;8,5,100p,100p,000000,0,30,0,0,1", + "web_url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html" + } +} +``` + +</details> + +#### 天选时刻通知 (ANCHOR_LOT_NOTICE) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ANCHOR_LOT_NOTICE` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| notice\_type | num | 通知卡片类型? | | +| lottery\_card | obj | 通知卡片内容 | | + +`data.lottery_card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| show\_time | num | 显示时间? | | +| button\_text | str | 按钮文本? | | +| icon | str | 图标 | | +| title | str | 标题? | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "data": { + "notice_type": 1, + "lottery_card": { + "show_time": 30, + "button_text": "去发奖", + "icon": "https://i0.hdslb.com/bfs/live/95970204111233f181fc28622502aaf1a9359b9a.png", + "title": "发天选有助于人气累积" + } + }, + "cmd": "ANCHOR_LOT_NOTICE" +} +``` + +</details> + +#### 语音连麦开关 (VOICE_JOIN_SWITCH) + +在直播姬开关连麦功能时下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `VOICE_JOIN_SWITCH` | | +| data | obj | 信息本体 | | +| room_id | num | 直播间id | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| room_id | num | 直播间id | | +| room_status | num | 连麦开关状态 | | +| root_status | num | 连麦开关状态 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +开: + +```json +{ + "cmd": "VOICE_JOIN_SWITCH", + "data": { + "room_id": 1899237171, + "room_status": 1, + "root_status": 1 + }, + "room_id": 1899237171 +} +``` + +关: + +```json +{ + "cmd": "VOICE_JOIN_SWITCH", + "data": { + "room_id": 1899237171, + "room_status": 0, + "root_status": 0 + }, + "room_id": 1899237171 +} +``` + +</details> + +#### 邀请视频连线 (VIDEO_CONNECTION_JOIN_START) + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "VIDEO_CONNECTION_JOIN_START", + "data": { + "status": 1, + "invited_uid": 351686170, + "channel_id": "72057594038132685", + "invited_uname": "小妹睡不醒", + "invited_face": "http://i1.hdslb.com/bfs/face/828562203e620f711fb4c786f05996357857ed4d.jpg", + "start_at": 1651237440, + "current_time": 1651237440 + }, + "roomid": 12401854 +} +``` + +</details> + +#### 视频连线信息 (VIDEO_CONNECTION_MSG) + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "VIDEO_CONNECTION_MSG", + "data": { + "channel_id": "72057594038132685", + "current_time": 1651237440, + "dmscore": 4, + "toast": "主播发起了视频连线" + } +} +``` + +</details> + +#### 结束视频连线 (VIDEO_CONNECTION_JOIN_END) + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "VIDEO_CONNECTION_JOIN_END", + "data": { + "channel_id": "72057594038132685", + "start_at": 1651238384, + "toast": "主播 结束了与小妹睡不醒的连线.", + "current_time": 1651238384 + }, + "roomid": 22195814 +} +``` + +</details> + +#### 重连直播间? (REENTER_LIVE_ROOM) + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "REENTER_LIVE_ROOM", + "data": { + "room_id": 22195814, + "request_random_sec_range": 10, + "reason": 1 + }, + "roomid": 22195814 +} +``` + +</details> + +#### 连线礼物信息 (UNIVERSAL_EVENT_GIFT) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `UNIVERSAL_EVENT_GIFT` | | +| data | obj | 信息本体 | | +| msg_id | str | | | +| p_is_ack | bool | | | +| p_msg_type | num | | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| anchor_uid | num | 主播uid | | +| info | obj | 连线信息 | | +| room_id | num | 直播间id | | + +`data.info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| biz_session_id | str | 连线会话id? | | +| business_label | str | | | +| interact_channel_id | str | 频道id? | | +| interact_connect_type | num | | | +| interact_max_users | num | 最大连线数? | | +| interact_mode | obj | | | +| interact_template | obj | 展示模板 | | +| invoking_time | num | | | +| members | arr | 连线成员 | 参见 `UNIVERSAL_EVENT_GIFT_V2` 的 `data.members` ,缺少部分字段 | +| members_version | num | | | +| multi_conn_info | obj | 连线信息 | | +| room_owner | num | 发起者uid | | +| room_start_at | str | | | +| room_start_at_ts | num | | | +| room_status | num | | | +| session_start_at | str | | | +| session_start_at_ts | num | | | +| session_status | num | | | +| system_time_unix | num | 服务器时间戳 | Unix 秒时间戳 | +| trace_id | str | | | +| version | num | 数据版本 | Unix 毫秒时间戳 | + +`data.info.interact_mode` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| apply_timeout | num | 超时? | | +| interact_mode_type | num | | | +| invite_timeout | num | 邀请超时? | | +| join_types | arr | 加入类型? | 数字数组 | +| position_mode | num | | | + +`data.info.interact_template` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| is_variable_layout | bool | 布局是否可变? | | +| layout_data | obj | 布局信息 | | +| layout_id | str | 布局id | | +| layout_list | null | ? | | +| show_interact_ui | bool | 显示交互UI? | | +| template_id | str | 模板id? | | + +`data.info.interact_template.layout_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| best_area_show_pos | num | | | +| cells | arr | 具体布局信息 | | +| default_cell | obj | | | +| height | num | | | +| rtc_resolution | obj | | | +| width | num | | | + +`data.info.interact_template.layout_data.cells` 数组中对象: + +与 `data.info.interact_template.layout_data.default_cell` 对象相同 + +`data.info.interact_template.layout_data.default_cell` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| can_zoom | num | | | +| default_open | num | | | +| height | num | | | +| mobile_avatar_size | num | | | +| mobile_font_size | num | | | +| pc_web_avatar_size | num | | | +| pc_web_font_size | num | | | +| position | num | 定位? | | +| width | num | | | +| x | num | | | +| y | num | | | +| z_index | num | | | + +`data.info.interact_template.layout_data.rtc_resolution` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code_rate_init | num | | | +| code_rate_max | num | | | +| code_rate_min | num | | | +| horizontal_height | num | | | +| horizontal_width | num | | | +| vertical_height | num | | | +| vertical_width | num | | | + +`data.info.members` 数组中对象: + +参见 [`UNIVERSAL_EVENT_GIFT_V2`](#连线礼物信息v2-universal_event_gift_v2) 的 `data.members` 数组中对象,本cmd缺少部分字段。 + +`data.info.multi_conn_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| room_owner | num | 发起人uid | | +| scores | arr | 礼物信息 | | +| show_score | num | 是否显示? | | + +`data.info.multi_conn_info.scores` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| price | num | 礼物累计价值 | CNY × 100 | +| price_text | str | 礼物累计价值文本 | | +| uid | num | 对应主播uid | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "UNIVERSAL_EVENT_GIFT", + "data": { + "anchor_uid": 1950658, + "info": { + "biz_session_id": "17545643420522077733317", + "business_label": "universal_multi_conn", + "interact_channel_id": "4679025140177408", + "interact_connect_type": 0, + "interact_max_users": 9, + "interact_mode": { + "apply_timeout": 20, + "interact_mode_type": 0, + "invite_timeout": 30, + "join_types": [ + 1, + 2 + ], + "position_mode": 0 + }, + "interact_template": { + "is_variable_layout": true, + "layout_data": { + "best_area_show_pos": 0, + "cells": [ + { + "can_zoom": 2, + "default_open": 0, + "height": 48, + "mobile_avatar_size": 64, + "mobile_font_size": 0, + "pc_web_avatar_size": 112, + "pc_web_font_size": 0, + "position": 0, + "width": 30, + "x": 0, + "y": 0, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 1, + "width": 0, + "x": 30, + "y": 0, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 2, + "width": 0, + "x": 45, + "y": 0, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 3, + "width": 0, + "x": 30, + "y": 16, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 4, + "width": 0, + "x": 45, + "y": 16, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 5, + "width": 0, + "x": 30, + "y": 32, + "z_index": 0 + }, + { + "can_zoom": 1, + "default_open": 0, + "height": 0, + "mobile_avatar_size": 0, + "mobile_font_size": 0, + "pc_web_avatar_size": 0, + "pc_web_font_size": 0, + "position": 6, + "width": 0, + "x": 45, + "y": 32, + "z_index": 0 + } + ], + "default_cell": { + "can_zoom": 0, + "default_open": 1, + "height": 16, + "mobile_avatar_size": 40, + "mobile_font_size": 10, + "pc_web_avatar_size": 72, + "pc_web_font_size": 14, + "position": 0, + "width": 15, + "x": 0, + "y": 0, + "z_index": 0 + }, + "height": 48, + "rtc_resolution": { + "code_rate_init": 500, + "code_rate_max": 700, + "code_rate_min": 375, + "horizontal_height": 400, + "horizontal_width": 500, + "vertical_height": 576, + "vertical_width": 360 + }, + "width": 60 + }, + "layout_id": "left1_right6", + "layout_list": null, + "show_interact_ui": true, + "template_id": "multi_conn_grid" + }, + "invoking_time": 1, + "members": [ + { + "face": "https://i1.hdslb.com/bfs/face/2ddb513f600c203f21aefb9725ab0eb84f093943.jpg", + "gender": 0, + "join_time": 1754564992, + "link_id": "44479117", + "position": 0, + "room_id": 41682, + "uid": 1950658, + "uname": "早稻叽" + }, + { + "face": "https://i1.hdslb.com/bfs/face/5958bb6814f25d832775ca37043d38f893b4a478.jpg", + "gender": -1, + "join_time": 1754564347, + "link_id": "44478459", + "position": 1, + "room_id": 26376408, + "uid": 2077733317, + "uname": "烛不遥" + }, + { + "face": "https://i0.hdslb.com/bfs/face/7c862b4ad1a29cdd2b849bcea3c3812b67770d21.jpg", + "gender": 0, + "join_time": 1754564347, + "link_id": "44478460", + "position": 2, + "room_id": 1774970222, + "uid": 1035559935, + "uname": "新砂Athia" + }, + { + "face": "https://i0.hdslb.com/bfs/face/81c1f45b45958c19523bb7cbae7fc3fa99b4aae1.jpg", + "gender": -1, + "join_time": 1754564361, + "link_id": "44478500", + "position": 3, + "room_id": 31361500, + "uid": 3546581471070432, + "uname": "颂温暖_Swanna" + }, + { + "face": "https://i2.hdslb.com/bfs/face/eceb8fa58c41b7cd733bebafcd7c1f3e33b37b07.jpg", + "gender": 0, + "join_time": 1754564385, + "link_id": "44478528", + "position": 4, + "room_id": 1937830041, + "uid": 3546768203582225, + "uname": "暴躁小辣jo" + }, + { + "face": "https://i0.hdslb.com/bfs/face/12c1cd0df2ee6e6bb09b279b0553cdc9ae4af4f0.jpg", + "gender": -1, + "join_time": 1754564774, + "link_id": "44478875", + "position": 5, + "room_id": 23090250, + "uid": 475912512, + "uname": "抵抗Resistance" + } + ], + "members_version": 3974722551, + "multi_conn_info": { + "room_owner": 2077733317, + "scores": [ + { + "price": 82900, + "price_text": "829", + "uid": 1950658 + }, + { + "price": 21200, + "price_text": "212", + "uid": 2077733317 + }, + { + "price": 30400, + "price_text": "304", + "uid": 1035559935 + }, + { + "price": 675600, + "price_text": "6756", + "uid": 3546581471070432 + }, + { + "price": 96800, + "price_text": "968", + "uid": 3546768203582225 + }, + { + "price": 79200, + "price_text": "792", + "uid": 475912512 + } + ], + "show_score": 1 + }, + "room_owner": 2077733317, + "room_start_at": "", + "room_start_at_ts": 0, + "room_status": 1, + "session_start_at": "", + "session_start_at_ts": 0, + "session_status": 1, + "system_time_unix": 1754568295, + "trace_id": "", + "version": 1754568295428 + }, + "room_id": 41682 + }, + "msg_id": "34610565842749442:1000:1000", + "p_is_ack": true, + "p_msg_type": 1, + "send_time": 1754568295441 +} +``` + +</details> + +#### 连线礼物信息V2 (UNIVERSAL_EVENT_GIFT_V2) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `UNIVERSAL_EVENT_GIFT_V2` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| biz_session_id | str | 连线会话id? | | +| interact_channel_id | str | 频道id? | | +| interact_template | obj | 交互模板信息 | | +| members | arr | 连线成员 | | +| stream_control | null | | | +| version | num | 数据版本 | Unix 毫秒时间戳 | +| session_status | num | | | +| business_label | str | | | +| invoking_time | num | | | +| members_version | num | | | +| room_status | num | | | +| system_time_unix | num | 服务器时间戳 | Unix 秒时间戳 | +| room_owner | num | 发起人uid | | +| session_start_at | str | 会话开始时间 | | +| session_start_at_ts | num | 会话经过时间 | | +| room_start_at | str | 当前直播间加入会话时间 | | +| room_start_at_ts | num | 当前直播间自加入会话开始经过的时间 | | +| trace_id | str | 追踪id? | | +| biz_extra_data | obj | | | +| channel_users | arr | 当前连线频道内uid列表 | | + +`data.interact_template` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| template_id | str | 模板id? | | +| show_interact_ui | bool | 显示交互UI? | | +| layout_id | str | 样式id? | | + +`data.members` 数组中对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| uid | num | 连线主播uid | | +| uname | str | 连线主播名称 | | +| face | str | 连线主播头像 | | +| position | num | 位置? | | +| join_time | num | 加入时间 | Unix 秒时间戳 | +| link_id | str | | | +| gender | num | | | +| room_id | num | 连线主播直播间id | | +| fans_num | num | | | +| display_name | str | 显示名称 | | +| biz_extra_data | obj | | | +| join_time_ts | num | | | + +`data.members[i].biz_extra_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| multi_conn | obj | | | + +`data.members[i].biz_extra_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| price | num | 礼物累计价值 | CNY × 100 | +| price_text | str | 礼物累计价值文本 | | + +`data.biz_extra_data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| multi_conn | obj | | | + +`data.biz_extra_data.multi_conn` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| show_score | num | | | +| support_full_zoom | num | | | + +`data.channel_users` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | num | 主播uid | | +| … | num | 主播uid | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "UNIVERSAL_EVENT_GIFT_V2", + "data": { + "biz_session_id": "17545643420522077733317", + "interact_channel_id": "4679025140177408", + "interact_template": { + "template_id": "multi_conn_grid", + "show_interact_ui": true, + "layout_id": "left1_right6" + }, + "members": [ + { + "uid": 1950658, + "uname": "早稻叽", + "face": "https://i1.hdslb.com/bfs/face/2ddb513f600c203f21aefb9725ab0eb84f093943.jpg", + "position": 0, + "join_time": 1754564992, + "link_id": "44479117", + "gender": 0, + "room_id": 41682, + "fans_num": 0, + "display_name": "本房主播", + "biz_extra_data": { + "multi_conn": { + "price": 82900, + "price_text": "829" + } + }, + "join_time_ts": 0 + }, + { + "uid": 2077733317, + "uname": "烛不遥", + "face": "https://i1.hdslb.com/bfs/face/5958bb6814f25d832775ca37043d38f893b4a478.jpg", + "position": 1, + "join_time": 1754564347, + "link_id": "44478459", + "gender": -1, + "room_id": 26376408, + "fans_num": 0, + "display_name": "烛不遥", + "biz_extra_data": { + "multi_conn": { + "price": 21200, + "price_text": "212" + } + }, + "join_time_ts": 0 + }, + { + "uid": 1035559935, + "uname": "新砂Athia", + "face": "https://i0.hdslb.com/bfs/face/7c862b4ad1a29cdd2b849bcea3c3812b67770d21.jpg", + "position": 2, + "join_time": 1754564347, + "link_id": "44478460", + "gender": 0, + "room_id": 1774970222, + "fans_num": 0, + "display_name": "新砂Athia", + "biz_extra_data": { + "multi_conn": { + "price": 30400, + "price_text": "304" + } + }, + "join_time_ts": 0 + }, + { + "uid": 3546581471070432, + "uname": "颂温暖_Swanna", + "face": "https://i0.hdslb.com/bfs/face/81c1f45b45958c19523bb7cbae7fc3fa99b4aae1.jpg", + "position": 3, + "join_time": 1754564361, + "link_id": "44478500", + "gender": -1, + "room_id": 31361500, + "fans_num": 0, + "display_name": "颂温暖_Swanna", + "biz_extra_data": { + "multi_conn": { + "price": 675600, + "price_text": "6756" + } + }, + "join_time_ts": 0 + }, + { + "uid": 3546768203582225, + "uname": "暴躁小辣jo", + "face": "https://i2.hdslb.com/bfs/face/eceb8fa58c41b7cd733bebafcd7c1f3e33b37b07.jpg", + "position": 4, + "join_time": 1754564385, + "link_id": "44478528", + "gender": 0, + "room_id": 1937830041, + "fans_num": 0, + "display_name": "暴躁小辣jo", + "biz_extra_data": { + "multi_conn": { + "price": 96800, + "price_text": "968" + } + }, + "join_time_ts": 0 + }, + { + "uid": 475912512, + "uname": "抵抗Resistance", + "face": "https://i0.hdslb.com/bfs/face/12c1cd0df2ee6e6bb09b279b0553cdc9ae4af4f0.jpg", + "position": 5, + "join_time": 1754564774, + "link_id": "44478875", + "gender": -1, + "room_id": 23090250, + "fans_num": 0, + "display_name": "抵抗Resistance", + "biz_extra_data": { + "multi_conn": { + "price": 79200, + "price_text": "792" + } + }, + "join_time_ts": 0 + } + ], + "stream_control": null, + "version": 1754568295421, + "session_status": 1, + "business_label": "universal_multi_conn", + "invoking_time": 2, + "members_version": 1262102210, + "room_status": 1, + "system_time_unix": 1754568295, + "room_owner": 2077733317, + "session_start_at": "2025-08-07 18:59:06", + "session_start_at_ts": 3949, + "room_start_at": "2025-08-07 19:09:52", + "room_start_at_ts": 3303, + "trace_id": "55df19c042f09f5c625d7b8b60689496", + "biz_extra_data": { + "multi_conn": { + "show_score": 1, + "support_full_zoom": 2 + } + }, + "channel_users": [ + 1950658, + 2077733317, + 1035559935, + 3546581471070432, + 3546768203582225, + 475912512 + ] + } +} +``` + +</details> + +#### ??? (PLAY_TOGETHER) + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "PLAY_TOGETHER", + "data": { + "ruid": 29857468, + "roomid": 8618057, + "action": "switch_off", + "uid": 0, + "timestamp": 1673690546, + "message": "", + "message_type": 0, + "jump_url": "", + "web_url": "", + "apply_number": 0, + "refresh_tool": false, + "cur_fleet_num": 0, + "max_fleet_num": 0 + } +} +``` + +```json +{ + "cmd": "PLAY_TOGETHER", + "data": { + "ruid": 29857468, + "roomid": 8618057, + "action": "switch_off", + "uid": 0, + "timestamp": 1673690549, + "message": "系统提示:主播已切换分区", + "message_type": 3, + "jump_url": "", + "web_url": "", + "apply_number": 0, + "refresh_tool": true, + "cur_fleet_num": 0, + "max_fleet_num": 0 + } +} +``` + +</details> + +#### ??? (PLAYTOGETHER_ICON_CHANGE) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `PLAYTOGETHER_ICON_CHANGE` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| area_id | num | 直播分区id | | +| has_perm | num | | | +| show_count | num | | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "PLAYTOGETHER_ICON_CHANGE", + "data": { + "area_id": 40, + "has_perm": 0, + "show_count": 0 + } +} +``` + +</details> + +#### 直播小助手? (ANCHOR_BROADCAST) + +第一次达到了某种条件下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ANCHOR_BROADCAST` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| sender | str | 标题? | `直播小助手` | +| msg | str | 提示消息 | | +| platform | num | 平台标识? | `0` | +| button\_info | obj | 按钮信息? | | +| milestone\_type | str | 里程碑类型? | `session_livetime`,`first_share`,`session_share` | +| milestone\_value | num | 里程值? | | +| milestone\_index | num | 里程碑类型的索引? | `1`,`5`,`6`,`7` | + +`data.button_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| button\_name | str | | | +| blink_button_type | str | | | +| blink_button_target | str | | | +| blink_button_extra | str | | | +| blink_button_label | num | | | +| hime_button_type | str | | | +| hime_button_target | str | | | +| hime_button_extra | str | | | +| hime\_button\_h5\_type | str | | | +| hime_button_label | num | | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ANCHOR_BROADCAST", + "data": { + "sender": "直播小助手", + "msg": "恭喜你,开播时长达到180分钟!", + "platform": 0, + "button_info": { + "button_name": "", + "blink_button_type": "", + "blink_button_target": "", + "blink_button_extra": "", + "blink_button_label": 0, + "hime_button_type": "", + "hime_button_target": "", + "hime_button_extra": "", + "hime_button_h5_type": "", + "hime_button_label": 0 + }, + "milestone_type": "session_livetime", + "milestone_value": 10800, + "milestone_index": 6 + } +} +``` + +</details> + +#### 直播小助手? (ANCHOR_HELPER_DANMU) + +几乎与`ANCHOR_BROADCAST`一同下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `ANCHOR_HELPER_DANMU` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| sender | str | 标题? | `直播小助手` | +| msg | str | 提示消息 | | +| platform | num | 平台标识? | | +| button\_platform | num | | | +| button\_name | str | | | +| button\_target | str | | | +| button\_label | num | | | +| report\_type | str | 上报类型? | | +| report | str | | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "ANCHOR_HELPER_DANMU", + "data": { + "sender": "直播小助手", + "msg": "恭喜你,开播时长达到150分钟!", + "platform": 3, + "button_platform": 0, + "button_name": "", + "button_target": "", + "button_label": 0, + "report_type": "milestone", + "report": "session_livetime:5:9000" + } +} +``` + +</details> + +#### 直播进度条节点标签 (PLAY_TAG) + +注: 在特定直播间的特定情况下发。 + +例如: 在[直播间6](https://live.bilibili.com/6)内,有人打出了某种操作。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `PLAY_TAG` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| tag\_id | num | 标签 ID | | +| pic | str | 标签图标 | 通常显示于进度条之上 | +| timestamp | num | UNIX 秒时间戳 | | +| type | str | 操作类型 | `ADD`:添加 | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "PLAY_TAG", + "data": { + "tag_id": 367751, + "pic": "https://i0.hdslb.com/bfs/live/0e04525fee9ea6ea6973e8bd1116d9f1f6501d37.png", + "timestamp": 1740319807, + "type": "ADD" + } +} +``` + +</details> + +#### 冲榜提示卡 (POPULAR_RANK_GUIDE_CARD) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `POPULAR_RANK_GUIDE_CARD` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| ruid | num | 主播uid | | +| title | str | 提示标题 | | +| sub_text | str | 提示副标题 | | +| icon_img | str | 提示卡图标 | 主播头像 | +| gift_id | num | 礼物id | | +| countdown | num | 显示时间 | | +| popup_title | str | 提示文本 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "POPULAR_RANK_GUIDE_CARD", + "data": { + "ruid": 194484313, + "title": "目前人气榜NO.1", + "sub_text": "帮我投喂人气票冲榜吧~", + "icon_img": "https://i1.hdslb.com/bfs/face/84a861facfa041b46f7a30897e9ed3f2e05e0519.jpg", + "gift_id": 33988, + "countdown": 10, + "popup_title": "投喂一个人气票帮助主播打榜~" + } +} +``` + +</details> + +#### ??? (RECALL_DANMU_MSG) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `RECALL_DANMU_MSG` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| recall_type | num | 类型? | `2` | +| target_id | num | | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "RECALL_DANMU_MSG", + "data": { + "recall_type": 2, + "target_id": 525503743 + } +} +``` + +</details> + +#### 直播剪辑 (OTHER_SLICE_LOADING_RESULT) + +注: 点击剪辑按钮后的几秒内下发,目前只有网页端有这个按钮,且部分直播间可用(2025-02-20记录)。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `OTHER_SLICE_LOADING_RESULT` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| data | array | 剪辑片段数据 | | +| live_key | str | 标记直播场次的key | 未验证真实性 | + +`data.data` 数组: + +| 索引 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| 0 | obj | 单个片段数据 | | + +`data.data[i]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| start\_time | num | 片段开始时间时间戳 | UNIX 秒时间戳 | +| end\_time | num | 片段结束时间时间戳 | UNIX 秒时间戳 | +| stream | str | 从开始时间到结束时间内的直播视频片段 | 需要使用浏览器用户代理字符串,特别是m3u文件内的视频链接 | +| type | num | 类型? | | +| ban\_ec | bool | ? | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "OTHER_SLICE_LOADING_RESULT", + "data": { + "data": [ + { + "start_time": 1740037738, + "end_time": 1740038916, + "stream": "https://jssz-boss.hdslb.com/live2arc_anchor_video/vod_579433011406177273.m3u?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250220%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20250220T080858Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=52be315e8e7def8e11f86d3c6d4952362725c3c087a433780926bc0e8c88c2e1", + "type": 0, + "ban_ec": false + } + ], + "live_key": "579433011406177273" + } +} +``` + +</details> + +#### 有人购买主播推荐商品 (GOTO_BUY_FLOW) + +用户昵称会打星号(`*`)显示。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `GOTO_BUY_FLOW` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| text | str | 去购买提示 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "GOTO_BUY_FLOW", + "data": { + "text": "回**正在去买" + } +} +``` + +</details> + +#### 热抢提示 (HOT_BUY_NUM) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `HOT_BUY_NUM` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| num | num | 热抢数量 | | +| goods_id | str | 商品id | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "HOT_BUY_NUM", + "data": { + "num": 81, + "goods_id": "1817875296579985408" + } +} +``` + +</details> + +#### 荣耀等级通知 (WEALTH_NOTIFY) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `WEALTH_NOTIFY` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| flag | num | 标志? | | +| info | obj | 信息 | | + +`data.info`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| effect_key | num | (?) | | +| has_items_changed | num | (?) | | +| level | num | 达到的等级 | | +| send_time | num | 发送时间 | UNIX 毫秒时间戳 | +| status | num | 状态? | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "WEALTH_NOTIFY", + "data": { + "flag": 3, + "info": { + "effect_key": 1073, + "has_items_changed": 1, + "level": 5, + "send_time": 1743337942833, + "status": 1 + } + } +} +``` + +</details> + +#### ??? (USER_PANEL_RED_ALARM) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `USER_PANEL_RED_ALARM` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| module | str | (?) | | +| alarm_num | num | (?) | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "USER_PANEL_RED_ALARM", + "data": { + "module": "user_head_dot", + "alarm_num": 1 + } +} +``` + +</details> + +#### ??? (GIFT_BOARD_RED_DOT) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `GIFT_BOARD_RED_DOT` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| categoryL1 | str | (?) | 作用尚不明确 | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "GIFT_BOARD_RED_DOT", + "data": { + "categoryL1": "3" + } +} +``` + +</details> + +#### 粉丝勋章更新 (MESSAGEBOX_USER_MEDAL_CHANGE) + +升级或点亮时下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `MESSAGEBOX_USER_MEDAL_CHANGE` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| type | num | 提示类型 | 1:升级<br />2:点亮 | +| uid | num | 用户mid | | +| up_uid | num | 主播mid | | +| medal_level | num | 粉丝勋章等级 | | +| medal_name | str | 粉丝勋章名称 | | +| medal_color_start | num | 十进制粉丝勋章起始颜色 | | +| medal_color_end | num | 十进制粉丝勋章结束颜色 | | +| medal_color_border | num | 十进制粉丝勋章边框颜色 | | +| is_lighted | num | 是否点亮? | 1:点亮? | +| is_lighted_v2 | bool | 是否点亮v2? | | +| guard_level | num | 大航海等级 | | +| unlock | num | (?) | | +| unlock_level | num | (?) | | +| multi_unlock_level | str | (?) | | +| upper_bound_content | str | 提示内容 | | +| uinfo_medal | obj | 粉丝勋章信息 | 参见 [指定用户的所有粉丝勋章信息](../user/medals.md#指定用户的所有粉丝勋章信息) `data.list[n].uinfo_medal` 对象 | +| effect_id | num | (?) | | + +`data.uinfo_medal` 对象: + +参见 [指定用户的所有粉丝勋章信息](../user/medals.md#指定用户的所有粉丝勋章信息) json回复的 `data.list[n].uinfo_medal` 对象。 + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "MESSAGEBOX_USER_MEDAL_CHANGE", + "data": { + "type": 2, + "uid": 438160221, + "up_uid": 407045223, + "medal_level": 3, + "medal_name": "研究猿", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "is_lighted": 1, + "is_lighted_v2": true, + "guard_level": 0, + "unlock": 0, + "unlock_level": 0, + "multi_unlock_level": "", + "upper_bound_content": "", + "uinfo_medal": { + "name": "研究猿", + "level": 3, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 407045223, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "effect_id": 1861 + } +} +``` + +</details> + +#### 获得粉丝勋章 (MESSAGEBOX_USER_GAIN_MEDAL) + +获得时下发。 + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `MESSAGEBOX_USER_GAIN_MEDAL` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| type | num | 类型 | 0 | +| uid | num | 用户mid | | +| up_uid | num | 主播uid | | +| medal_id | num | 勋章id | | +| medal_name | str | 勋章名称 | | +| medal_level | num | 勋章等级 | | +| medal_color | num | 勋章颜色 | | +| medal_color_start | num | 十进制勋章起始颜色 | | +| medal_color_end | num | 十进制勋章结束颜色 | | +| medal_color_border | num | 十进制勋章边框颜色 | | +| msg_title | str | 消息标题 | | +| msg_content | str | 消息内容 | | +| normal_color | num | (?) | | +| highlight_color | num | (?) | | +| intimacy | num | 当前亲密度 | | +| next_intimacy | num | 升级所需亲密度 | | +| today_feed | num | 今日亲密度 | | +| day_limit | num | 今日亲密度上限 | | +| is_wear | num | (?) | | +| guard_level | num | 大航海等级 | | +| is_received | num | (?) | | +| is_lighted | num | 是否点亮? | 1:点亮? | +| is_lighted_v2 | bool | 是否点亮v2? | | +| toast | str | 提示 | | +| fan_name | str | 粉丝名称 | | +| uinfo_medal | obj | 粉丝勋章信息 | 参见 [指定用户的所有粉丝勋章信息](../user/medals.md#指定用户的所有粉丝勋章信息) `data.list[n].uinfo_medal` 对象 | + +`data.uinfo_medal` 对象: + +参见 [指定用户的所有粉丝勋章信息](../user/medals.md#指定用户的所有粉丝勋章信息) json回复的 `data.list[n].uinfo_medal` 对象。 + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "MESSAGEBOX_USER_GAIN_MEDAL", + "data": { + "type": 0, + "uid": 438160221, + "up_uid": 11602644, + "medal_id": 19252517, + "medal_name": "广药", + "medal_level": 1, + "medal_color": 6067854, + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "msg_title": "恭喜你获得【WuGuangYao】的粉丝勋章~", + "msg_content": "获得100点亲密度\n你的粉丝勋章达到1级", + "normal_color": 7697781, + "highlight_color": 16478873, + "intimacy": 100, + "next_intimacy": 201, + "today_feed": 100, + "day_limit": 2000, + "is_wear": 0, + "guard_level": 0, + "is_received": 1, + "is_lighted": 1, + "is_lighted_v2": true, + "toast": "成功入团并关注主播,得1级大礼包", + "fan_name": "weatfe", + "uinfo_medal": { + "name": "广药", + "level": 1, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 6067854, + "id": 19252517, + "typ": 0, + "is_light": 1, + "ruid": 11602644, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + } +} +``` + +</details> + +#### 粉丝团戳一戳礼物通知 (FANS_CLUB_POKE_GIFT_NOTICE) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `FANS_CLUB_POKE_GIFT_NOTICE` | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| icon | str | 图标 | | +| uface | str | 头像 | | +| bg_img_url | str | 背景图片 | | +| text | str | 提示文本 | | +| highlight_text | str | 高亮文本? | | +| button_text | str | 按钮文本 | | +| display_duration | num | 显示时间? | | +| room_id | num | 房间号 | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "FANS_CLUB_POKE_GIFT_NOTICE", + "data": { + "icon": "https://i0.hdslb.com/bfs/live/37a2fe03f2af95928c67cbac889e10dab6f7d42a.png", + "uface": "https://i0.hdslb.com/bfs/face/member/noface.jpg", + "bg_img_url": "https://i0.hdslb.com/bfs/live/fbe99002b5914157d783f8e07f021e2fd6ba5c1b.png", + "text": "主播戳了戳你~投喂礼物获5倍亲密度加成", + "highlight_text": "5倍亲密度加成", + "button_text": "去投喂", + "display_duration": 8, + "room_id": 1899237171 + } +} +``` + +</details> + +#### ??? (master_qn_strategy_chg) + +**JSON消息:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| cmd | str | `master_qn_strategy_chg` | | +| data | str | 信息本体 | JSON文本 | + +`data` JSON解析后对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| mtime | num | (?) | Unix秒时间戳 | +| scatter | arr | (?) | | + +**示例:** + +<details> +<summary>查看消息示例:</summary> + +```json +{ + "cmd": "master_qn_strategy_chg", + "data": "{\"mtime\":1744380444,\"scatter\":[0,300]}" +} +``` + +</details> diff --git a/docs/live/recommend.md b/docs/live/recommend.md new file mode 100644 index 0000000..edbf016 --- /dev/null +++ b/docs/live/recommend.md @@ -0,0 +1,717 @@ +# 直播推荐 + +## 主页获取直播推荐 + +> https://api.live.bilibili.com/xlive/web-interface/v1/webMain/getMoreRecList + +*请求方法: GET* + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ------ | ---------- | ------ | ---- | +| platform | string | 平台类型 | 必要 | 默认为 `web`, 实测可为任意非空串 | +| web_location | string | `333.1007` | 非必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ---- | +| code | number | 返回值 | 0: 成功 | +| message | string | 错误信息 | 默认为 `0` | +| ttl | number | 1 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ------ | ------------- | -------- | +| recommend_room_list | Array | 推荐房间列表 | 套了个娃 | +| top_room_id | number | 置顶直播间号? | | + +`data` 对象中 `recommend_room_list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------------- | -------------- | ---------------- | ---- | +| head_box | object \| null | 头像框 | 无则为 `null` | +| area_v2_id | number | 分区 ID | | +| area_v2_parent_id | number | 父分区 ID | | +| area_v2_name | string | 分区名称 | | +| area_v2_parent_name | string | 父分区名称 | | +| broadcast_type | number | 广播类型? | | +| cover | string | 封面 URL | | +| link | string | 直播间链接 | 仅 `pathname` 与 `query` 部分 | +| online | number | 观看人数 | | +| pendant_Info | object | ??? | 作用尚不明确 | +| roomid | number | 直播间 ID | | +| title | string | 直播间标题 | | +| uname | string | 主播用户名 | | +| face | string | 主播头像 URL | | +| verify | object | 认证信息 | 参见 [用户基本信息](../user/info.md) | +| uid | number | 主播用户 mid | | +| keyframe | string | 关键帧 URL | | +| is_auto_play | number | 是否自动播放? | | +| head_box_type | number | 头像框类型? | | +| flag | number | 标记? | 作用尚不明确 | +| session_id | string | 会话 ID? | 格式为: 本次请求相同的小写无分隔 UUID + 下划线 + 大写以连字符分隔的 UUID | +| show_callback | string | 展示回调 URL? | | +| click_callback | string | 点击回调 URL? | | +| special_id | number | 特殊 ID? | 作用尚不明确 | +| watched_show | object | 观看展示 | 见下 | +| is_nft | number | 是否为 NFT 头像? | | +| nft_dmark | string | ??? | 作用尚不明确 | +| is_ad | boolean | 是否为广告 | | +| ad_transparent_content | unknown | ??? | 作用尚不明确 | +| show_ad_icon | boolean | 显示广告图标 | | +| status | boolean | 状态? | 作用尚不明确 | +| followers | number | 0 | 作用尚不明确 | + +`recommend_room_list` 数组中的对象中的 `watched_show` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ------- | -------- | ---- | +| switch | boolean | ??? | 作用尚不明确 | +| num | number | 看过人数 | | +| text_small | string | 小文本 | xxx | +| text_large | string | 大文本 | xxx人看过 | +| icon | string | 图标 URL | 浅色线条眼睛图标 | +| icon_location | number | 0 | | +| icon_web | string | 图标 URL | 深色线条眼睛图标 (Web 端) | + +**示例:** + +```shell +curl -G 'https://api.live.bilibili.com/xlive/web-interface/v1/webMain/getMoreRecList' \ +--url-query 'platform=web' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "recommend_room_list": [ + { + "head_box": null, + "area_v2_id": 237, + "area_v2_parent_id": 6, + "area_v2_name": "怀旧游戏", + "area_v2_parent_name": "单机游戏", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/34aedc9409c0abaf622fdb9c6137896b8a9f95d0.jpg", + "link": "/923833?hotRank=0", + "online": 262700, + "pendant_Info": {}, + "roomid": 923833, + "title": "融合版斗蛐蛐s3.5赛季!", + "uname": "沉默寡言白河愁", + "face": "https://i0.hdslb.com/bfs/face/14169798ca31108e4441e790c14b24706def67a3.jpg", + "verify": { + "role": 1, + "desc": "bilibili 知名游戏UP主、直播高能主播", + "type": 0 + }, + "uid": 34646754, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071535000000923833okbn8y.jpg", + "is_auto_play": 1, + "head_box_type": 0, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_9A44BEBD-CAEB-46AD-8FD7-B91BA8471EAA", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_9A44BEBD-CAEB-46AD-8FD7-B91BA8471EAA&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=923833&parent_id=6&area_id=237&page=0&position=1&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_9A44BEBD-CAEB-46AD-8FD7-B91BA8471EAA&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=923833&parent_id=6&area_id=237&page=0&position=1&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 30460, + "text_small": "3.0万", + "text_large": "3.0万人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": { + "name": "大乱斗乱斗之王", + "value": "https://i0.hdslb.com/bfs/live/fc28a2a4123154012e0ce3da1273de5f17e81b24.png", + "desc": "" + }, + "area_v2_id": 817, + "area_v2_parent_id": 5, + "area_v2_name": "男声电台", + "area_v2_parent_name": "电台", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/b15e3a1045321a7ffa7da08a47a276ca37557ef1.jpg", + "link": "/32190922?hotRank=0", + "online": 45487, + "pendant_Info": { + "2": { + "type": "mobile_index_badge", + "name": "福佑嘉年", + "position": 2, + "text": "省级亚军", + "bg_color": "#FB9E60", + "bg_pic": "http://i0.hdslb.com/bfs/live/13819a59895263cb25cc2ead3fecfaa3e864aac8.png", + "pendant_id": 1750, + "priority": 200, + "created_at": 1738512313 + } + }, + "roomid": 32190922, + "title": "我想我们会幸福美满", + "uname": "黑羊Klein", + "face": "https://i2.hdslb.com/bfs/face/307c62a8b30a6dcfc02e9670e5dc10d0ecec6921.jpg", + "verify": { + "role": 0, + "desc": "", + "type": -1 + }, + "uid": 1989648419, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071536000032190922ma6cnx.jpg", + "is_auto_play": 0, + "head_box_type": 1, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_178A3B8F-86C1-4831-9DBB-9788C2445752", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_178A3B8F-86C1-4831-9DBB-9788C2445752&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=32190922&parent_id=5&area_id=817&page=0&position=2&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_178A3B8F-86C1-4831-9DBB-9788C2445752&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=32190922&parent_id=5&area_id=817&page=0&position=2&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 491, + "text_small": "491", + "text_large": "491人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": null, + "area_v2_id": 654, + "area_v2_parent_id": 2, + "area_v2_name": "诛仙世界", + "area_v2_parent_name": "网游", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/fdad2cfb408510df56a01af66254f630ee4b86b8.jpg", + "link": "/25959685?hotRank=0", + "online": 2151, + "pendant_Info": {}, + "roomid": 25959685, + "title": "免费接所有职业,死灵渊!只要收益", + "uname": "哦-是大一啊", + "face": "https://i1.hdslb.com/bfs/face/f83290ab5667f9c1ed778fb9c7c9cf6bf7624d4e.jpg", + "verify": { + "role": 0, + "desc": "", + "type": -1 + }, + "uid": 361517464, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071535000025959685tx1grb.jpg", + "is_auto_play": 1, + "head_box_type": 0, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_FB0DABE2-6A09-4EB7-8D2B-A4F892243A96", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_FB0DABE2-6A09-4EB7-8D2B-A4F892243A96&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=25959685&parent_id=2&area_id=654&page=0&position=3&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_FB0DABE2-6A09-4EB7-8D2B-A4F892243A96&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=25959685&parent_id=2&area_id=654&page=0&position=3&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 269, + "text_small": "269", + "text_large": "269人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": { + "name": "钻石传说", + "value": "https://i0.hdslb.com/bfs/live/2007dc239982e909a3c9971c27968e5c0a872917.png", + "desc": "" + }, + "area_v2_id": 192, + "area_v2_parent_id": 5, + "area_v2_name": "聊天电台", + "area_v2_parent_name": "电台", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/22f1fcac8d9764901005ae5867a8c6b589b93ac5.jpg", + "link": "/31169918?hotRank=0", + "online": 27764, + "pendant_Info": {}, + "roomid": 31169918, + "title": "东北最后的温柔", + "uname": "关关-苏苏冠", + "face": "https://i2.hdslb.com/bfs/face/14f5102417107a6535c11ec9ad99050f7d712a17.jpg", + "verify": { + "role": 0, + "desc": "", + "type": -1 + }, + "uid": 3537120278874479, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071532000031169918qep44l.jpg", + "is_auto_play": 0, + "head_box_type": 1, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_3E272538-AA76-4953-BF21-5BB19ECFEE28", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_3E272538-AA76-4953-BF21-5BB19ECFEE28&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=31169918&parent_id=5&area_id=192&page=0&position=4&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_3E272538-AA76-4953-BF21-5BB19ECFEE28&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=31169918&parent_id=5&area_id=192&page=0&position=4&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 297, + "text_small": "297", + "text_large": "297人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": null, + "area_v2_id": 82, + "area_v2_parent_id": 2, + "area_v2_name": "剑网3", + "area_v2_parent_name": "网游", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/user_cover/9551fbb571b35bac3702c47e955177f17cab5cd2.jpg", + "link": "/2849730?hotRank=0", + "online": 4008, + "pendant_Info": {}, + "roomid": 2849730, + "title": "午间陪伴花间刷币", + "uname": "o诡墨o", + "face": "https://i1.hdslb.com/bfs/face/43ab308f836eb352aa4d541b55aafab2fa4435aa.jpg", + "verify": { + "role": 0, + "desc": "", + "type": -1 + }, + "uid": 71574442, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071535000002849730qo0792.jpg", + "is_auto_play": 1, + "head_box_type": 0, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_4BAFD91A-DDED-4655-BE47-064A6152BF9B", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_4BAFD91A-DDED-4655-BE47-064A6152BF9B&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=2849730&parent_id=2&area_id=82&page=0&position=5&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_4BAFD91A-DDED-4655-BE47-064A6152BF9B&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=2849730&parent_id=2&area_id=82&page=0&position=5&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 204, + "text_small": "204", + "text_large": "204人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": { + "name": "迷梦幻境头像框", + "value": "https://i0.hdslb.com/bfs/garb/open/d272c8cdb2ab737f5aa3c1cf5a27db274e0ce034.png", + "desc": "" + }, + "area_v2_id": 744, + "area_v2_parent_id": 9, + "area_v2_name": "虚拟Singer", + "area_v2_parent_name": "虚拟主播", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/6e68e5c4f3d720e6f14952174be848383b879dad.jpg", + "link": "/21603945?hotRank=0", + "online": 10606, + "pendant_Info": {}, + "roomid": 21603945, + "title": "听歌碎碎念!~", + "uname": "Minicatty", + "face": "https://i0.hdslb.com/bfs/face/812d9ea6f3420d5c58ff455408275563f03fb861.jpg", + "verify": { + "role": 7, + "desc": "bilibili 直播高能主播", + "type": 0 + }, + "uid": 423902976, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071535000021603945pekr70.jpg", + "is_auto_play": 0, + "head_box_type": 2, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_56778C3F-4B14-4C78-8DF8-53721196E8D8", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_56778C3F-4B14-4C78-8DF8-53721196E8D8&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=21603945&parent_id=9&area_id=744&page=0&position=6&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_56778C3F-4B14-4C78-8DF8-53721196E8D8&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=21603945&parent_id=9&area_id=744&page=0&position=6&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 235, + "text_small": "235", + "text_large": "235人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": null, + "area_v2_id": 80, + "area_v2_parent_id": 2, + "area_v2_name": "吃鸡行动", + "area_v2_parent_name": "网游", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/fa7292a8741a40a612a1c466da58b7f9cc08f363.jpg", + "link": "/22976905?hotRank=0", + "online": 8536, + "pendant_Info": {}, + "roomid": 22976905, + "title": "全是细节!", + "uname": "菠萝鸽", + "face": "https://i1.hdslb.com/bfs/face/f073d24cbb992b4589825896de3fb9bc559ba180.jpg", + "verify": { + "role": 1, + "desc": "bilibili 知名游戏UP主、直播高能主播", + "type": 0 + }, + "uid": 1849164526, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715350000229769056wy0mu.jpg", + "is_auto_play": 1, + "head_box_type": 0, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_CE3B32EC-E84D-4545-A693-97882454E0ED", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_CE3B32EC-E84D-4545-A693-97882454E0ED&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=22976905&parent_id=2&area_id=80&page=0&position=7&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_CE3B32EC-E84D-4545-A693-97882454E0ED&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=22976905&parent_id=2&area_id=80&page=0&position=7&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 919, + "text_small": "919", + "text_large": "919人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": null, + "area_v2_id": 646, + "area_v2_parent_id": 10, + "area_v2_name": "生活杂谈", + "area_v2_parent_name": "生活", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/833e4d5449bcb4e425eb6399e0ef71f06903d083.jpg", + "link": "/21291747?hotRank=0", + "online": 38125, + "pendant_Info": {}, + "roomid": 21291747, + "title": "哪吒抢了封神票房?", + "uname": "陈哥惜命天涯", + "face": "https://i1.hdslb.com/bfs/face/d2c7e9c9b918ec969b2e15a5f2194bae3acd966e.jpg", + "verify": { + "role": 0, + "desc": "", + "type": -1 + }, + "uid": 286563388, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe0207153000002129174742tpke.jpg", + "is_auto_play": 0, + "head_box_type": 0, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_63BEC7F6-172E-46FC-BBAD-8CD3547AE6C1", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_63BEC7F6-172E-46FC-BBAD-8CD3547AE6C1&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=21291747&parent_id=10&area_id=646&page=0&position=8&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_63BEC7F6-172E-46FC-BBAD-8CD3547AE6C1&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=21291747&parent_id=10&area_id=646&page=0&position=8&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 3107, + "text_small": "3107", + "text_large": "3107人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": { + "name": "Lirin兔耳娘 收藏集", + "value": "https://i2.hdslb.com/bfs/garb/open/41e2a2e3693f49e0b721c443fd784aa533456c49.png", + "desc": "" + }, + "area_v2_id": 745, + "area_v2_parent_id": 9, + "area_v2_name": "虚拟Gamer", + "area_v2_parent_name": "虚拟主播", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/b444bc87fbe1b346184f061efaffff21b24371f1.jpg", + "link": "/23797026?hotRank=0", + "online": 13294, + "pendant_Info": {}, + "roomid": 23797026, + "title": "日v 萌新玩玩三角洲♡", + "uname": "樱咲奈央_Official", + "face": "https://i2.hdslb.com/bfs/face/163330968a4a5fc8f31e9da9e919bbc258ecf40c.jpg", + "verify": { + "role": 7, + "desc": "bilibili直播高能主播", + "type": 0 + }, + "uid": 1880188304, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715310000237970260gnmn1.jpg", + "is_auto_play": 0, + "head_box_type": 2, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_691E1F11-4960-4707-92EF-0F0D996E434C", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_691E1F11-4960-4707-92EF-0F0D996E434C&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=23797026&parent_id=9&area_id=745&page=0&position=9&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_691E1F11-4960-4707-92EF-0F0D996E434C&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=23797026&parent_id=9&area_id=745&page=0&position=9&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 999, + "text_small": "999", + "text_large": "999人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": null, + "area_v2_id": 624, + "area_v2_parent_id": 10, + "area_v2_name": "电子榨菜", + "area_v2_parent_name": "生活", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/user_cover/a8a7681eaf20e43e16444e502106a436eb0e454c.jpg", + "link": "/1831473323?hotRank=0", + "online": 6510, + "pendant_Info": {}, + "roomid": 1831473323, + "title": "粤语片-法证1", + "uname": "曦曦每天都开心呀", + "face": "https://i1.hdslb.com/bfs/face/aa2112252080ec2298ea51b129c842fea7ed58f5.jpg", + "verify": { + "role": 0, + "desc": "", + "type": -1 + }, + "uid": 1434707683, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715350018314733230k1dhu.jpg", + "is_auto_play": 0, + "head_box_type": 0, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_947BC1A4-E0F4-4ECE-AE40-9D9817848F9A", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_947BC1A4-E0F4-4ECE-AE40-9D9817848F9A&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=1831473323&parent_id=10&area_id=624&page=0&position=10&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_947BC1A4-E0F4-4ECE-AE40-9D9817848F9A&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=1831473323&parent_id=10&area_id=624&page=0&position=10&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 1446, + "text_small": "1446", + "text_large": "1446人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": { + "name": "帕里", + "value": "https://i0.hdslb.com/bfs/garb/item/7c9cd30bfab66e9490d8a03fc48754cdb12b4901.png", + "desc": "" + }, + "area_v2_id": 745, + "area_v2_parent_id": 9, + "area_v2_name": "虚拟Gamer", + "area_v2_parent_name": "虚拟主播", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/bd898138564a7e892e05dd1ff9cf9c34bdd9cb5b.jpg", + "link": "/42512?hotRank=0", + "online": 11612, + "pendant_Info": {}, + "roomid": 42512, + "title": "【文明7】使臣,你去死一下,然后我发兵", + "uname": "优礼子Ghaast", + "face": "https://i0.hdslb.com/bfs/face/e3f05d5b7bf56c57f55026676da71cc487d93988.jpg", + "verify": { + "role": 7, + "desc": "bilibili直播高能主播", + "type": 0 + }, + "uid": 6141432, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715350000000425126wxphk.jpg", + "is_auto_play": 0, + "head_box_type": 2, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_0517EBF3-EE5C-4967-A77A-9DB3F89A58A8", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_0517EBF3-EE5C-4967-A77A-9DB3F89A58A8&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=42512&parent_id=9&area_id=745&page=0&position=11&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_0517EBF3-EE5C-4967-A77A-9DB3F89A58A8&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=42512&parent_id=9&area_id=745&page=0&position=11&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 1998, + "text_small": "1998", + "text_large": "1998人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + }, + { + "head_box": { + "name": "百人舰队主播头像", + "value": "https://i0.hdslb.com/bfs/vc/071eb10548fe9bc482ff69331983d94192ce9507.png", + "desc": "" + }, + "area_v2_id": 102, + "area_v2_parent_id": 2, + "area_v2_name": "最终幻想14", + "area_v2_parent_name": "网游", + "broadcast_type": 0, + "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/9370e1bbda854c8ac3b9a2a9a6e960106f307580.jpg", + "link": "/1897222?hotRank=0", + "online": 80052, + "pendant_Info": { + "1": { + "type": "mobile_index_badge", + "name": "百人成就", + "position": 1, + "text": "", + "bg_color": "#FB9E60", + "bg_pic": "https://i0.hdslb.com/bfs/live/539ce26c45cd4019f55b64cfbcedc3c01820e539.png", + "pendant_id": 426, + "priority": 1, + "created_at": 1738857680 + } + }, + "roomid": 1897222, + "title": "鸟区pvp", + "uname": "猫姐姐nya", + "face": "https://i1.hdslb.com/bfs/face/acc5559db9494af780b05fbf05c158995c48d023.jpg", + "verify": { + "role": 1, + "desc": "bilibili 知名游戏UP主", + "type": 0 + }, + "uid": 41377819, + "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715360000018972225sqtbh.jpg", + "is_auto_play": 1, + "head_box_type": 1, + "flag": 0, + "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_93F5FBE6-4F84-40C9-AEA1-149E9D5D366E", + "group_id": 1000217, + "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_93F5FBE6-4F84-40C9-AEA1-149E9D5D366E&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=1897222&parent_id=2&area_id=102&page=0&position=12&platform=web", + "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_93F5FBE6-4F84-40C9-AEA1-149E9D5D366E&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=1897222&parent_id=2&area_id=102&page=0&position=12&platform=web", + "special_id": 0, + "watched_show": { + "switch": true, + "num": 2930, + "text_small": "2930", + "text_large": "2930人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": 0, + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + }, + "is_nft": 0, + "nft_dmark": "", + "is_ad": false, + "ad_transparent_content": null, + "show_ad_icon": false, + "status": false, + "followers": 0 + } + ], + "top_room_id": 0 + } +} +``` + +</details> diff --git a/docs/live/redpocket.md b/docs/live/redpocket.md new file mode 100644 index 0000000..aafb1ff --- /dev/null +++ b/docs/live/redpocket.md @@ -0,0 +1,126 @@ +# 直播间人气红包 + +## 获取指定直播间的红包信息 + +> https://api.live.bilibili.com/xlive/lottery-interface/v1/lottery/getLotteryInfoWeb + +*请求方式:GET* + +认证方式(可选):Cookie(SESSDATA) + +如果不携带Cookie信息,user_status将始终返回2(未参与)。 + +如果所查询的直播间无红包,popularity_red_pocket为null。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ---------------- | ------ | ---- | +| roomid | str | 直播间id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | ---------- | ------------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 0:成功 | +| ttl | num | TimeToLive | 正常为1 | +| data | object | 返回数据 | | + +`data`对象: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| popularity_red_pocket | array | 人气红包信息 | | +| …… | ...... | …… | …… | + +`popularity_red_pocket`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ---- | +| lot_id | num | 红包id | | +| sender_uid | num | 红包发送者uid | | +| sender_name | str | 红包发送者昵称 | | +| sender_face | str | 红包发送者头像 | | +| join_requirement | num | 参与条件? | | +| danmu | str | 参与红包时自动发送的弹幕内容 | | +| awards | array | 红包内容 | | +| lot_status | num | 未知 | | +| h5_url | str | 红包界面 | | +| user_status | num | 用户是否已参与 | 1:已参与 2:未参与 | +| lot_config_id | num | 未知 | | +| total_price | num | 红包总计价格 | | + +**示例:** + +查询房间号为24146996的直播间红包信息: + +```shell +curl -G 'https://api.live.bilibili.com/xlive/lottery-interface/v1/lottery/getLotteryInfoWeb?roomid=24146996' +``` + +<details> +<summary>查看响应示例:</summary> + +```json + +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "pk": null, + "guard": null, + "gift": null, + "storm": null, + "silver": null, + "activity_box": { + "ACTIVITY_ID": 0, + "ACTIVITY_PIC": "" + }, + "danmu": null, + "anchor": null, + "red_pocket": null, + "popularity_red_pocket": [{ + "lot_id": 622474, + "sender_uid": 1651908873, + "sender_name": "九泽糖糖の小蘑菇", + "sender_face": "http://i0.hdslb.com/bfs/face/c932c5c8b1607fe2e1da22b9780af19662dac939.jpg", + "join_requirement": 1, + "danmu": "老板大气!点点红包抽礼物!", + "awards": [{ + "gift_id": 31212, + "num": 2, + "gift_name": "打call", + "gift_pic": "https://s1.hdslb.com/bfs/live/f75291a0e267425c41e1ce31b5ffd6bfedc6f0b6.png" + }, { + "gift_id": 31214, + "num": 3, + "gift_name": "牛哇", + "gift_pic": "https://s1.hdslb.com/bfs/live/23475a7a6170e0d94ba52720e23060dc7604b735.png" + }, { + "gift_id": 31216, + "num": 3, + "gift_name": "i了i了", + "gift_pic": "https://s1.hdslb.com/bfs/live/1157a445487b39c0b7368d91b22290c60fa665b2.png" + }], + "start_time": 1645358104, + "end_time": 1645358284, + "last_time": 180, + "remove_time": 1645358299, + "replace_time": 1645358294, + "current_time": 1645358231, + "lot_status": 1, + "h5_url": "https://live.bilibili.com/p/html/live-app-red-envelope/popularity.html?is_live_half_webview=1\u0026hybrid_half_ui=1,5,100p,100p,000000,0,50,0,0,1;2,5,100p,100p,000000,0,50,0,0,1;3,5,100p,100p,000000,0,50,0,0,1;4,5,100p,100p,000000,0,50,0,0,1;5,5,100p,100p,000000,0,50,0,0,1;6,5,100p,100p,000000,0,50,0,0,1;7,5,100p,100p,000000,0,50,0,0,1;8,5,100p,100p,000000,0,50,0,0,1\u0026hybrid_rotate_d=1\u0026hybrid_biz=popularityRedPacket\u0026lotteryId=622474", + "user_status": 1, + "lot_config_id": 3, + "total_price": 1600 + }], + "activity_box_info": null + } +} +``` + +</details> diff --git a/docs/live/report.md b/docs/live/report.md new file mode 100644 index 0000000..0dd3ec5 --- /dev/null +++ b/docs/live/report.md @@ -0,0 +1,66 @@ +# 直播心跳上报 + +## 直播心跳 (Web端) + +> https://live-trace.bilibili.com/xlive/rdata-interface/v1/heartbeat/webHeartBeat + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------- | ----------- | ----------------- | +| hb | str | heartbeat 正文 | 不必要 | 使用 base64 编码 | +| pf | str | 平台名称 | 不必要 | 可为 `web` | + +`hb` 解码参数: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ---- | ---- | +| 0 | num | 上次返回的 next_interval 值 | 默认 60 | +| 1 | num | 真实直播间号 | | +| 2 | num | 1 | 作用尚不明确 | +| 3 | num | 0 | 作用尚不明确 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | num | 返回值 | | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| next_interval | num | 下次心跳间隔 | | + +**示例:** + +上报直播间 26863308 的心跳 + +```shell +curl -G "https://live-trace.bilibili.com/xlive/rdata-interface/v1/heartbeat/webHeartBeat" \ +--data-urlencode "hb=$(echo "60|26863308|1|0" | base64 -)" \ +--data-urlencode "pf=web" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "next_interval": 60 + } +} +``` + +</details> diff --git a/docs/live/silent_user_manage.md b/docs/live/silent_user_manage.md new file mode 100644 index 0000000..59502de --- /dev/null +++ b/docs/live/silent_user_manage.md @@ -0,0 +1,219 @@ +# 直播间禁言相关 API + +## 禁言观众 + +> https://api.live.bilibili.com/xlive/web-ucenter/v1/banned/AddSilentUser + +*请求方式:post* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | --- | ---------- | --- | ------------------ | +| room_id | str | 直播间Id | 必要 | | +| tuid | str | 要禁言的uid | 必要 | | +| msg | str | 要禁言的弹幕内容 | 非必要 | | +| mobile_app | str | web | 必要 | 定值"web"即可 | +| hour | num | 禁言时长 | 必要 | -1为永久,0为本场直播 | +| csrf_token | str | CSRF Token | 必要 | cookie中的bili_jct字段 | +| csrf | str | CSRF Token | 必要 | cookie中的bili_jct字段 | +| visit_id | str | 不明 | 非必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | --- | ---- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为 "0" | +| ttl | str | 1 | | +| data | obj | 信息本体 | 成功为空 | + +**示例:** + +```shell +curl -X POST 'https://api.live.bilibili.com/xlive/web-ucenter/v1/banned/AddSilentUser' \ +--data-urlencode 'room_id=xxxxxx' \ +--data-urlencode 'tuid=xxx' \ +--data-urlencode 'msg=xxxx' \ +--data-urlencode 'mobile_app=web' \ +--data-urlencode 'csrf_token=xx' \ +--data-urlencode 'csrf=xx' \ +--data-urlencode 'visit_id=' \ +-H 'Content-Type:application/x-www-form-urlencoded' \ +-b 'SESSDATA=xxx; bili_jct=xx;' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{"code":0,"message":"0","ttl":1,"data":{}} +``` + +</details> + +## 查询直播间禁言列表 + +> https://api.live.bilibili.com/xlive/web-ucenter/v1/banned/GetSilentUserList + +*请求方式:post* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | --- | ---------- | --- | ------------------ | +| room_id | str | 直播间Id | 必要 | | +| ps | str | 列表页码 | 必要 | | +| csrf_token | str | CSRF Token | 必要 | cookie中的bili_jct字段 | +| csrf | str | CSRF Token | 必要 | cookie中的bili_jct字段 | +| visit_id | str | 不明 | 非必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | --- | ---- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为 "0" | +| ttl | str | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ------ | ------- | +| data | array | 禁言列表 | 数组中为obj | +| total | int | 禁言观众数量 | | +| total_page | int | 页码总数量 | | + +`data`对象中`data`数组的元素对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | --- | ------ | --------- | +| tuid | num | 禁言者uid | | +| tname | str | 禁言者昵称 | | +| uid | num | 发起者uid | | +| name | str | 发起者昵称 | | +| ctime | str | 禁言时间 | | +| id | num | 禁言记录Id | 解除禁言时用到 | +| is_anchor | num | 不明 | | +| face | str | 禁言者头像 | | +| admin_level | num | 发起者权限 | 0:主播,1:房管 | + +**示例:** + +```shell +curl -X POST 'https://api.live.bilibili.com/xlive/web-ucenter/v1/banned/GetSilentUserList' \ +--data-urlencode 'room_id=xxxxxxx' \ +--data-urlencode 'ps=1' \ +--data-urlencode 'csrf_token=xxx' \ +--data-urlencode 'csrf=xxx' \ +--data-urlencode 'visit_id=' \ +-H 'Content-Type:application/x-www-form-urlencoded' \ +-b 'SESSDATA=xxxx; bili_jct=xxx;' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "data":[ + { + "tuid":123456, + "tname":"xxxxx", + "uid":123456, + "name":"xxxx", + "ctime":"2023-12-15 16:32:46", + "id":13493921, + "is_anchor":0, + "face":"https://i1.hdslb.com/bfs/face/xxxxx.jpg", + "admin_level":1 + }, + { + "tuid":123456, + "tname":"xx", + "uid":123456, + "name":"xxxx", + "ctime":"2021-08-23 22:26:06", + "id":8018136, + "is_anchor":1, + "face":"https://i1.hdslb.com/bfs/face/xxxxxx.jpg", + "admin_level":0 + } + ], + "total":2, + "total_page":1 + } +} +``` + +</details> + +## 解除禁言 + +> https://api.live.bilibili.com/banned_service/v1/Silent/del_room_block_user + +*请求方式:post* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | --- | ---------- | --- | ---------------------- | +| roomid | str | 直播间Id | 必要 | 注意该接口名称没有“_” | +| id | str | 禁言记录Id | 必要 | GetSilentUserList 接口获取 | +| csrf_token | str | CSRF Token | 必要 | cookie中的bili_jct字段 | +| csrf | str | CSRF Token | 必要 | cookie中的bili_jct字段 | +| visit_id | str | 不明 | 非必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | --- | ---- | ---- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 成功为空 | +| ttl | str | 1 | | +| data | obj | 信息本体 | 成功为空 | + +**示例:** + +```shell +curl -X POST 'https://api.live.bilibili.com/banned_service/v1/Silent/del_room_block_user' \ +--data-urlencode 'roomid=xxxxxxxxx' \ +--data-urlencode 'id=xxxxx' \ +--data-urlencode 'csrf_token=xxx' \ +--data-urlencode 'csrf=xxx' \ +--data-urlencode 'visit_id=' \ +-H 'Content-Type:application/x-www-form-urlencoded' \ +-b 'SESSDATA=xxxxxx; bili_jct=xxx;' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{"code":0,"msg":"","message":"","data":[]} +``` + +</details> diff --git a/docs/live/user.md b/docs/live/user.md new file mode 100644 index 0000000..560998e --- /dev/null +++ b/docs/live/user.md @@ -0,0 +1,1248 @@ +# 直播间用户实用 API + +## 获取自己持有的粉丝勋章信息 + +> ~~https://api.live.bilibili.com/fans_medal/v5/live_fans_medal/iApiMedal~~ (旧) +> https://api.live.bilibili.com/xlive/app-ucenter/v1/user/GetMyMedals + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ------------ | ------ | ------------------------------------------------- | +| page_size | num | 每页的数量 | 必要 | 最大为 10,超出 `1002002:参数异常` | +| page | num | 返回结果页数 | 必要 | 两个参数不填返回空,只 page 不填或错误则 500 异常 | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功<br />-1002002:参数异常<br />-500:服务器异常 | +| message | str | 错误信息 | 默认为 "0" | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ---------------- | ---- | +| count | num | 勋章数量 | | +| items | array | 粉丝勋章信息本体 | | +| page_info | obj | 页码信息 | | + +`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ------ | -------------------- | -------------------------------------- | +| can_delete | bool | 可否删除 | | +| day_limit | num | 日经验上限(原力值) | eg: 1500 | +| guard_level | num | | | +| guard_medal_title | str | 加成状态 | | +| intimacy | num | 当前已得亲密度 | | +| is_lighted | num | 是否点亮 | 0:未点亮<br />1:点亮 | +| level | num | 勋章等级 | | +| medal_name | str | 勋章名 | | +| medal_color_border | num | 勋章边框颜色信息 | 颜色数值为 10 进制的 16 进制值(下同) | +| medal_color_start | num | 勋章起始颜色 | 从右往左渐变(20 级+勋章) | +| medal_color_end | num | 勋章结束颜色 | 从右往左渐变(20 级+勋章) | +| medal_id | num | 粉丝勋章 id | | +| next_intimacy | num | 升级所需经验 | | +| today_feed | num | 本日亲密度 | | +| roomid | num | 直播间房间号 | | +| status | num | | | +| target_id | number | up 主 mid | | +| target_name | str | up 主用户名 | | +| uname | str | up 主用户名 | | + +`page_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------------- | ---- | +| total_page | num | 页码总长度 | | +| cur_page | num | 当前返回的页码 | | + +**示例:** + +```shell +curl https://api.live.bilibili.com/xlive/app-ucenter/v1/user/GetMyMedals?page=1&page_size=10 \ +-b "SESSDATA=xxx" +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "items": [ + { + "can_deleted": true, + "day_limit": 1500, + "guard_level": 0, + "guard_medal_title": "未开启加成", + "intimacy": 9617, + "is_lighted": 0, + "level": 11, + "medal_name": "锦依卫", + "medal_color_border": 12632256, + "medal_color_end": 12632256, + "medal_color_start": 12632256, + "medal_id": 29245, + "next_intimacy": 10000, + "today_feed": 0, + "roomid": 1546736, + "status": 0, + "target_id": 36081646, + "target_name": "洛天依", + "uname": "洛天依" + } + ], + "page_info": { + "cur_page": 1, + "total_page": 1 + }, + "count": 1 + } +} +``` + +</details> + + +## 佩戴勋章 + +> https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear + +*请求方式:POST* + +**表单参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ----------------------- | ------ | ---- | +| medal_id | num | 勋章 id | 必要 | | +| csrf | num | cookie 中 bili_jct 字段 | 必要 | | +| csrf_token | num | 同上 | 必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------- | +| code | num | 返回值 | 0:成功 | +| ttl | num | 1 | | +| message | str | 错误信息 | 默认为佩戴成功 | +| data | obj | 信息本体 | 默认为无 | + +**示例:** + +佩戴勋章 id 为 1 的勋章 + +```JavaScript +var madelForm = new FormData(); +madelForm.append("medal_id", 1); +madelForm.append("csrf", bili_jct); +madelForm.append("csrf_token", bili_jct); +$.ajax({ + url: "https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear", + type: "POST", + data: madelForm, + dataType: "JSON", + processData: false, + contentType: false, + cache: false, + xhrFields: { + withCredentials: true + }, + success: function (){ + + } +}) +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "佩戴成功", + "ttl": 1, + "data": {} +} +``` + +</details> + +## ~~直播签到(已下线)~~ + +> https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign + +_请求方式:GET_ + +认证方式:Cookie(SESSDATA)或 APP + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------ | +| code | num | 返回值 | 0:成功<br />1:参数错误 | +| ttl | num | 1 | | +| message | str | 错误信息 | 默认为当日签到奖励内容 | +| data | obj | 信息本体 | 默认为空 | + +(目前已下线) + +<details> +<summary>查看响应示例(下线后):</summary> + +```json +{ + "code": 1, + "message": "签到活动已下线,无法使用。", + "ttl": 1, + "data": null +} +``` + +</details> + + +## 本月直播签到信息 + +> https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/WebGetSignInfo + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| ttl | num | 1 | | +| message | str | 错误信息 | 默认为0 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ---------------------------- | ------------------------ | +| text | str | 今日签到奖励信息 | 默认为空 | +| specialText | str | 连续签到奖励信息 | 默认为空 | +| status | num | 签到状态 | 0:未签到<br />1:已签到 | +| allDays | num | 当月天数 | | +| curMonth | num | 当前月 | | +| curYear | num | 当前年 | | +| curDay | num | 当前日 | | +| curData | str | 当前日期(格式化) | eg: 2023-2-19 | +| hadSignDays | num | 当月已签到天数 | 默认为0 | +| newTask | num | 作用未知 | 默认为0 | +| signDaysList | array | 当月已签到日列表 | 默认为空 | +| signBonusDaysList | array | 当月已签到且有特殊奖励日列表 | 默认为空 | + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "text": "3000点用户经验,2根辣条", + "specialText": "再签到7天可以获得50根辣条", + "status": 1, + "allDays": 28, + "curMonth": 2, + "curYear": 2023, + "curDay": 19, + "curDate": "2023-2-19", + "hadSignDays": 13, + "newTask": 0, + "signDaysList": [ + 2, + 3, + 4, + 5, + 6, + 7, + 11, + 13, + 14, + 15, + 17, + 18, + 19 + ], + "signBonusDaysList": [ + 6 + ] + } +} +``` + +</details> + +## 上月直播签到信息 + +> https://api.live.bilibili.com/sign/getLastMonthSignDays + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| ttl | num | 1 | | +| message | str | 错误信息 | 默认为0 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ---------------------------- | -------- | +| days | num | 上月天数 | | +| month | num | 上月月份值 | | +| hadSignDays | num | 上月已签到天数 | 默认为0 | +| signDaysList | array | 上月已签到日列表 | 默认为空 | +| signBonusDaysList | array | 上月已签到且有特殊奖励日列表 | 默认为空 | + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "month": 1, + "days": 31, + "hadSignDays": 20, + "signDaysList": [ + 1, + 2, + 3, + 6, + 7, + 8, + 10, + 12, + 13, + 14, + 15, + 18, + 20, + 23, + 24, + 25, + 26, + 27, + 30, + 31 + ], + "signBonusDaysList": [ + 7, + 31 + ] + } +} +``` + +</details> + +## 查询直播间贡献榜 + +> https://api.live.bilibili.com//xlive/general-interface/v1/rank/getOnlineGoldRank + +*请求方式:GET* + +认证方式:无 + +**url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------------- | ------ | ------ | +| roomId | num | 房间号 | 必要 | | +| page | num | 返回结果页数 | 必要 | | +| pageSize | num | 返回结果页大小 | 必要 | 最大50 | +| ruid | num | 主播uid | 必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | + + + + + +`data`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ----- | ------------ | ---- | +| onlineNum | num | 在线观众数量 | | +| OnlineRankItem | array | 结果 | | | + +`OnlineRankItem`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | ---- | +| userRank | num | 贡献值排名 | | +| uid | num | 用户id | | | +| name | str | 用户名字 | | | +| face | str | 用户头像 | | | +| score | num | 贡献值 | | | +| medalInfo | obj | 粉丝牌对象 | | | +| guard_level | num | 大航海类型 | | | +| wealth_level | num | 荣耀等级 | | | +| guard_level | num | 大航海类型 | | | +| uinfo | obj | 用户详细信息 | | | + +`uinfo`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | ---- | +| uid | num | 用户uid | | +| base | obj | 用户基本信息 | | | +| medal | obj | 用户粉丝牌 | | | +| face | str | 用户头像 | | | +| guard | obj | 大航海 | | | + +`guard`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | ---- | +| level | num | 大航海类型 | | +| expired_str | str | 大航海到期时间 | | | + + +**示例:** + +查询`23174842`直播间的大航海成员 + + +```shell +curl 'https://api.live.bilibili.com//xlive/general-interface/v1/rank/getOnlineGoldRank?roomId=26854650&ruid=3493118494116797&page=3&pageSize=20' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "onlineNum": 45, + "OnlineRankItem": [ + { + "userRank": 1, + "uid": 36136895, + "name": "四月hallu", + "face": "https://i2.hdslb.com/bfs/face/5e5166ecc4c17d4dbc7a09dbb6bb749d9f537985.jpg", + "score": 3768, + "medalInfo": { + "guardLevel": 3, + "medalColorStart": 2951253, + "medalColorEnd": 10329087, + "medalColorBorder": 6809855, + "medalName": "钢板鹿", + "level": 29, + "targetId": 3493118494116797, + "isLight": 1 + }, + "guard_level": 3, + "wealth_level": 41, + "is_mystery": false, + "uinfo": { + "uid": 36136895, + "base": { + "name": "四月hallu", + "face": "https://i2.hdslb.com/bfs/face/5e5166ecc4c17d4dbc7a09dbb6bb749d9f537985.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": { + "name": "四月hallu", + "face": "https://i2.hdslb.com/bfs/face/5e5166ecc4c17d4dbc7a09dbb6bb749d9f537985.jpg" + }, + "origin_info": { + "name": "四月hallu", + "face": "https://i2.hdslb.com/bfs/face/5e5166ecc4c17d4dbc7a09dbb6bb749d9f537985.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "钢板鹿", + "level": 29, + "color_start": 2951253, + "color_end": 10329087, + "color_border": 6809855, + "color": 2951253, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 3493118494116797, + "guard_level": 3, + "score": 50422604, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#9660E5CC", + "v2_medal_color_end": "#9660E5CC", + "v2_medal_color_border": "#D47AFFFF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C00A099", + "user_receive_count": 0 + }, + "wealth": { + "level": 41, + "dm_icon_key": "ChronosWealth_4.png" + }, + "title": null, + "guard": { + "level": 3, + "expired_str": "2025-07-07 23:59:59" + }, + "uhead_frame": null, + "guard_leader": null + } + }, + { + "userRank": 2, + "uid": 1182882611, + "name": "重生指令", + "face": "https://i2.hdslb.com/bfs/face/6762c39b424e6de5bf0292fd12a019201a501fb9.jpg", + "score": 1546, + "medalInfo": { + "guardLevel": 0, + "medalColorStart": 12632256, + "medalColorEnd": 12632256, + "medalColorBorder": 12632256, + "medalName": "雪狐咕", + "level": 24, + "targetId": 477792, + "isLight": 0 + }, + "guard_level": 3, + "wealth_level": 22, + "is_mystery": false, + "uinfo": { + "uid": 1182882611, + "base": { + "name": "重生指令", + "face": "https://i2.hdslb.com/bfs/face/6762c39b424e6de5bf0292fd12a019201a501fb9.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": { + "name": "重生指令", + "face": "https://i2.hdslb.com/bfs/face/6762c39b424e6de5bf0292fd12a019201a501fb9.jpg" + }, + "origin_info": { + "name": "重生指令", + "face": "https://i2.hdslb.com/bfs/face/6762c39b424e6de5bf0292fd12a019201a501fb9.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "雪狐咕", + "level": 24, + "color_start": 12632256, + "color_end": 12632256, + "color_border": 12632256, + "color": 1725515, + "id": 0, + "typ": 0, + "is_light": 0, + "ruid": 477792, + "guard_level": 0, + "score": 50010220, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#919298CC", + "v2_medal_color_end": "#919298CC", + "v2_medal_color_border": "#919298CC", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C6C7299", + "user_receive_count": 0 + }, + "wealth": { + "level": 22, + "dm_icon_key": "" + }, + "title": null, + "guard": { + "level": 3, + "expired_str": "2025-06-29 23:59:59" + }, + "uhead_frame": null, + "guard_leader": null + } + }, + { + "userRank": 3, + "uid": 35007043, + "name": "_单推哈鹿halluの狐狸", + "face": "https://i1.hdslb.com/bfs/face/6373a98189480661fc725494ab5ab68253522b8f.jpg", + "score": 1543, + "medalInfo": { + "guardLevel": 2, + "medalColorStart": 2951253, + "medalColorEnd": 10329087, + "medalColorBorder": 16771156, + "medalName": "钢板鹿", + "level": 29, + "targetId": 3493118494116797, + "isLight": 1 + }, + "guard_level": 2, + "wealth_level": 40, + "is_mystery": false, + "uinfo": { + "uid": 35007043, + "base": { + "name": "_单推哈鹿halluの狐狸", + "face": "https://i1.hdslb.com/bfs/face/6373a98189480661fc725494ab5ab68253522b8f.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": { + "name": "_单推哈鹿halluの狐狸", + "face": "https://i1.hdslb.com/bfs/face/6373a98189480661fc725494ab5ab68253522b8f.jpg" + }, + "origin_info": { + "name": "_单推哈鹿halluの狐狸", + "face": "https://i1.hdslb.com/bfs/face/6373a98189480661fc725494ab5ab68253522b8f.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "钢板鹿", + "level": 29, + "color_start": 2951253, + "color_end": 10329087, + "color_border": 16771156, + "color": 2951253, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 3493118494116797, + "guard_level": 2, + "score": 50360413, + "guard_icon": "https://i0.hdslb.com/bfs/live/98a201c14a64e860a758f089144dcf3f42e7038c.png", + "honor_icon": "", + "v2_medal_color_start": "#9660E5CC", + "v2_medal_color_end": "#9660E5CC", + "v2_medal_color_border": "#D47AFFFF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#6C00A099", + "user_receive_count": 0 + }, + "wealth": { + "level": 40, + "dm_icon_key": "ChronosWealth_4.png" + }, + "title": null, + "guard": { + "level": 2, + "expired_str": "2025-07-30 23:59:59" + }, + "uhead_frame": null, + "guard_leader": null + } + }, + { + "userRank": 7, + "uid": 44152084, + "name": "_柚_子_hallu", + "face": "https://i1.hdslb.com/bfs/face/137498c2c6a3231e5b6047af12a64bbd19627dcb.jpg", + "score": 324, + "medalInfo": { + "guardLevel": 3, + "medalColorStart": 398668, + "medalColorEnd": 6850801, + "medalColorBorder": 6809855, + "medalName": "钢板鹿", + "level": 26, + "targetId": 3493118494116797, + "isLight": 1 + }, + "guard_level": 3, + "wealth_level": 32, + "is_mystery": false, + "uinfo": { + "uid": 44152084, + "base": { + "name": "_柚_子_hallu", + "face": "https://i1.hdslb.com/bfs/face/137498c2c6a3231e5b6047af12a64bbd19627dcb.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": { + "name": "_柚_子_hallu", + "face": "https://i1.hdslb.com/bfs/face/137498c2c6a3231e5b6047af12a64bbd19627dcb.jpg" + }, + "origin_info": { + "name": "_柚_子_hallu", + "face": "https://i1.hdslb.com/bfs/face/137498c2c6a3231e5b6047af12a64bbd19627dcb.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "钢板鹿", + "level": 26, + "color_start": 398668, + "color_end": 6850801, + "color_border": 6809855, + "color": 398668, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 3493118494116797, + "guard_level": 3, + "score": 50057285, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": { + "level": 32, + "dm_icon_key": "" + }, + "title": null, + "guard": { + "level": 3, + "expired_str": "2025-06-27 23:59:59" + }, + "uhead_frame": null, + "guard_leader": null + } + }, + { + "userRank": 8, + "uid": 8242366, + "name": "翟赧hallu", + "face": "https://i1.hdslb.com/bfs/face/9b312f4146ca2c8a1d2e5468e345ecfb60be3874.jpg", + "score": 276, + "medalInfo": { + "guardLevel": 3, + "medalColorStart": 398668, + "medalColorEnd": 6850801, + "medalColorBorder": 6809855, + "medalName": "钢板鹿", + "level": 28, + "targetId": 3493118494116797, + "isLight": 1 + }, + "guard_level": 3, + "wealth_level": 35, + "is_mystery": false, + "uinfo": { + "uid": 8242366, + "base": { + "name": "翟赧hallu", + "face": "https://i1.hdslb.com/bfs/face/9b312f4146ca2c8a1d2e5468e345ecfb60be3874.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": { + "name": "翟赧hallu", + "face": "https://i1.hdslb.com/bfs/face/9b312f4146ca2c8a1d2e5468e345ecfb60be3874.jpg" + }, + "origin_info": { + "name": "翟赧hallu", + "face": "https://i1.hdslb.com/bfs/face/9b312f4146ca2c8a1d2e5468e345ecfb60be3874.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "钢板鹿", + "level": 28, + "color_start": 398668, + "color_end": 6850801, + "color_border": 6809855, + "color": 398668, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 3493118494116797, + "guard_level": 3, + "score": 50208414, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": { + "level": 35, + "dm_icon_key": "" + }, + "title": null, + "guard": { + "level": 3, + "expired_str": "2025-08-05 23:59:59" + }, + "uhead_frame": null, + "guard_leader": null + } + }, + { + "userRank": 9, + "uid": 418232, + "name": "lug7", + "face": "http://i2.hdslb.com/bfs/face/5d2c92beb774a4bb30762538bb102d23670ae9c0.gif", + "score": 171, + "medalInfo": { + "guardLevel": 3, + "medalColorStart": 398668, + "medalColorEnd": 6850801, + "medalColorBorder": 6809855, + "medalName": "钢板鹿", + "level": 26, + "targetId": 3493118494116797, + "isLight": 1 + }, + "guard_level": 3, + "wealth_level": 28, + "is_mystery": false, + "uinfo": { + "uid": 418232, + "base": { + "name": "lug7", + "face": "http://i2.hdslb.com/bfs/face/5d2c92beb774a4bb30762538bb102d23670ae9c0.gif", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": { + "name": "lug7", + "face": "http://i2.hdslb.com/bfs/face/5d2c92beb774a4bb30762538bb102d23670ae9c0.gif" + }, + "origin_info": { + "name": "lug7", + "face": "http://i2.hdslb.com/bfs/face/5d2c92beb774a4bb30762538bb102d23670ae9c0.gif" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "钢板鹿", + "level": 26, + "color_start": 398668, + "color_end": 6850801, + "color_border": 6809855, + "color": 398668, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 3493118494116797, + "guard_level": 3, + "score": 50050050, + "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png", + "honor_icon": "", + "v2_medal_color_start": "#4775EFCC", + "v2_medal_color_end": "#4775EFCC", + "v2_medal_color_border": "#58A1F8FF", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": { + "level": 28, + "dm_icon_key": "" + }, + "title": null, + "guard": { + "level": 3, + "expired_str": "2025-06-15 23:59:59" + }, + "uhead_frame": null, + "guard_leader": null + } + }, + { + "userRank": 10, + "uid": 452228643, + "name": "很糊的小龔鬱hallu", + "face": "https://i0.hdslb.com/bfs/face/996fa85fe42d582dd013dcb435de3f3ff4d33f6c.jpg", + "score": 35, + "medalInfo": { + "guardLevel": 0, + "medalColorStart": 6126494, + "medalColorEnd": 6126494, + "medalColorBorder": 6126494, + "medalName": "牧斯", + "level": 6, + "targetId": 3493087074585126, + "isLight": 1 + }, + "guard_level": 3, + "wealth_level": 35, + "is_mystery": false, + "uinfo": { + "uid": 452228643, + "base": { + "name": "很糊的小龔鬱hallu", + "face": "https://i0.hdslb.com/bfs/face/996fa85fe42d582dd013dcb435de3f3ff4d33f6c.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": { + "name": "很糊的小龔鬱hallu", + "face": "https://i0.hdslb.com/bfs/face/996fa85fe42d582dd013dcb435de3f3ff4d33f6c.jpg" + }, + "origin_info": { + "name": "很糊的小龔鬱hallu", + "face": "https://i0.hdslb.com/bfs/face/996fa85fe42d582dd013dcb435de3f3ff4d33f6c.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": { + "name": "牧斯", + "level": 6, + "color_start": 6126494, + "color_end": 6126494, + "color_border": 6126494, + "color": 6126494, + "id": 0, + "typ": 0, + "is_light": 1, + "ruid": 3493087074585126, + "guard_level": 0, + "score": 3400, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5866C799", + "v2_medal_color_end": "#5866C799", + "v2_medal_color_border": "#5866C799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + }, + "wealth": { + "level": 35, + "dm_icon_key": "" + }, + "title": null, + "guard": { + "level": 3, + "expired_str": "2025-06-19 23:59:59" + }, + "uhead_frame": null, + "guard_leader": null + } + }, + { + "userRank": 11, + "uid": 164871173, + "name": "奶浴-bllss", + "face": "https://i2.hdslb.com/bfs/face/f48dd7c1e432eb91e5fd286757c4e2600930f4c5.jpg", + "score": 26, + "medalInfo": null, + "guard_level": 3, + "wealth_level": 36, + "is_mystery": false, + "uinfo": { + "uid": 164871173, + "base": { + "name": "奶浴-bllss", + "face": "https://i2.hdslb.com/bfs/face/f48dd7c1e432eb91e5fd286757c4e2600930f4c5.jpg", + "name_color": 0, + "is_mystery": false, + "risk_ctrl_info": { + "name": "奶浴-bllss", + "face": "https://i2.hdslb.com/bfs/face/f48dd7c1e432eb91e5fd286757c4e2600930f4c5.jpg" + }, + "origin_info": { + "name": "奶浴-bllss", + "face": "https://i2.hdslb.com/bfs/face/f48dd7c1e432eb91e5fd286757c4e2600930f4c5.jpg" + }, + "official_info": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "name_color_str": "" + }, + "medal": null, + "wealth": { + "level": 36, + "dm_icon_key": "" + }, + "title": null, + "guard": { + "level": 3, + "expired_str": "2025-07-20 23:59:59" + }, + "uhead_frame": null, + "guard_leader": null + } + }, + ], + "ownInfo": { + "uid": 0, + "name": "", + "face": "", + "rank": -1, + "needScore": 0, + "score": 0, + "guard_level": 0, + "wealth_level": 0, + "is_mystery": false, + "uinfo": null + }, + "tips_text": "投喂、点赞、发弹幕、持续观看均可上榜", + "value_text": "贡献值", + "ab": { + "guard_accompany_list": 1 + }, + "onlineNumText": "45" + } +} +``` +</details> + +## 查询自己在某直播间观看时长 + +> https://api.live.bilibili.com/xlive/general-interface/v1/guard/GuardActive + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------- | ------ | ---- | +| platform | str | android | 必要 | | +| ruid | num | 主播uid | 必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + + + + + +`data`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | ----------------------------- | +| ruid | num | 主播uid | | +| rusername | str | 主播用户名 | | +| rface | str | 主播头像 | | +| username | str | 自己的用户名 | | +| accomany | int | 大航海陪伴天数 | 似乎b站程序员把这个单词拼错了 | +| rusername | str | 主播用户名 | | +| watch_time | num | 观看时长 | 单位是秒 | +| up_medal | obj | 粉丝牌 | | +| guard_num_3 | num | 主播舰长数量 | +| guard_num_2 | num | 主播提督数量 | | +| guard_num_1 | num | 主播总督数量 | | +| is_live | num | 直播状态 | | + + + +## 查询用户在直播间的信息 + +> https://api.live.bilibili.com/xlive/app-ucenter/v2/card/user + +*请求方式:GET* + +认证方式:无 + +**url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| uid | num | 目标用户uid | 必要 | | +| ruid | num | 主播uid | 必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | + + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------ | ------------------------------ | +| uid | num | 目标用户id | | +| uname | str | 目标用户名 | | +| desc | str | 目标用户认证信息 | | +| face | str | 目标用户头像 | | +| follow_num | num | 目标用户粉丝数 | | +| attention_num | num | 目标用户关注数 | +| main_vip | num | 目标用户大会员状态 | 0:无 2:大会员 | +| is_block | num | 是否被拉黑? | 始终为0? | +| is_admin | num | 是否房管 | | +| is_black | num | 是否被关小黑屋 | | +| wealth_info | obj | 荣耀等级 | | +| fans_medal | obj | 粉丝牌 | 如果目标用户隐藏粉丝牌则为null | + +`wealth_info`对象: +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | -------------------------- | ---- | +| level | num | 荣耀等级 | | +| level_total_score | num | 下一等级的荣耀值 | | +| cur_score | num | 当前荣耀值 | | +| upgrade_need_score | num | 升到下一等级还差多少荣耀值 | | + +**示例:** + +```shell +curl 'https://api.live.bilibili.com/xlive/app-ucenter/v2/card/user?ruid=504140200&uid=504140200' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "uid": 504140200, + "uname": "软软riu", + "face": "https://i1.hdslb.com/bfs/face/2d083d686b704eb7010e3d94595d47f5a89c8aef.jpg", + "verify_type": 0, + "desc": "bilibili UP主认证:bilibili 知名虚拟UP主、直播高能主播", + "uname_color": 2171169, + "room_id": 23174842, + "pendant": "https://i1.hdslb.com/bfs/garb/open/8806f97581082d68edcf2207368290b3fb3491bb.png", + "pendant_from": 2, + "follow_num": 214882, + "attention_num": 202, + "relation_status": 1, + "privilege_type": 3, + "fans_medal": null, + "title_sum": 10, + "wearing_title": "", + "main_vip": 0, + "is_block": 0, + "is_admin": 0, + "fans_medal_list_url": "https://live.bilibili.com/p/html/live-fansmedal-wall/index.html?tId=504140200#/medal", + "wearing": {}, + "is_black": 0, + "admin_level": 0, + "head_picture": "http://i0.hdslb.com/bfs/live/3f536f59e337a731c5367f623bca79b32197ddd5.png", + "head_text": "大航海舰长", + "head_url": "", + "head_business": 1, + "head_skin_icon": "http://i0.hdslb.com/bfs/live/d44e103f424f5ae01ef3d0133ef812f8241d15b0.png", + "privilege_center": {}, + "is_nft": 0, + "nft_dmark": "https://i0.hdslb.com/bfs/live/9f176ff49d28c50e9c53ec1c3297bd1ee539b3d6.gif", + "is_real_fans": false, + "wealth_info": { + "uid": 504140200, + "level": 35, + "level_total_score": 6000000, + "cur_score": 5012900, + "upgrade_need_score": 987100, + "status": 1, + "dm_icon_key": "" + }, + "guard": { + "accompany": 0, + "accompany_slake": 0 + }, + "chat_url_android": "activity://im/conversation/?conversation_type=1&reciveid=504140200", + "chat_url_ios": "bilibili://link/chat?session_id=s504140200", + "gift_star": null, + "is_mystery": false, + "text_control": null, + "uinfo_medal": null, + "guard_attire": {}, + "flash_buy": 0, + "flash_buy_url": "" + } +} +``` +</details> \ No newline at end of file diff --git a/docs/login/cookie_refresh.md b/docs/login/cookie_refresh.md new file mode 100644 index 0000000..e1b22fa --- /dev/null +++ b/docs/login/cookie_refresh.md @@ -0,0 +1,574 @@ +# Web端Cookie刷新 + +自从 2023 以来,社区反馈似乎 Web 端的 Cookie 会随着一些敏感接口的访问逐渐失效,而在 Web 页面上会判断 Cookie 是否需要刷新,如需刷新则会以动态加载 iframe 方式实现,同时登录(二维码 / 密码 / 短信验证码等)接口也会返回`refresh_token`字段,需要持久化保存,是一种官方的风控机制实现 + +感谢 [#524](https://github.com/SocialSisterYi/bilibili-API-collect/issues/524) 提供相关研究报告以及逆向工程结果 + +> cookie 不会主动刷新的,只要他没有调用下面的刷新接口就不会刷新。也就是说,你只要不再打开浏览器,或者直接把 localStorage 的 ac_time_value 字段删除了。那么 cookie 在真的失效前(登录过期、账号风控等强制下线)都是不变化的。 + +## 刷新步骤(伪代码) + +```python +cookie, refresh_token = 进行登录操作() # can be 二维码 / 密码 / 短信验证码 + +while True: + if 每日第一次访问接口: + if 检查是否需要刷新(cookie): + CorrespondPath = 生成CorrespondPath(当前毫秒时间戳) + refresh_csrf = 获取refresh_csrf(CorrespondPath, cookie) + refresh_token_old = refresh_token # 这一步必须保存旧的 refresh_token 备用 + cookie, refresh_token = 刷新Cookie(refresh_token, refresh_csrf, cookie) + 确认更新(refresh_token_old, cookie) # 这一步需要新的 Cookie 以及旧的 refresh_token + SSO站点跨域登录(cookie) + do_somethings(cookie) # 其他业务逻辑处理 +``` + +## 检查是否需要刷新 + +> https://passport.bilibili.com/x/passport-login/web/cookie/info + +*请求方式:GET* + +鉴权方式:Cookie + +**url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------- | ------ | ---- | +| csrf | str | CSRF Token(位于 Cookie) | 非必要 | 位于 Cookie 中的bili_jct字段 | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功<br />-101:账号未登录 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------------- | ----------------------------------------------------- | +| refresh | bool | 是否应该刷新 Cookie | `true`:需要刷新 Cookie<br />`false`:无需刷新 Cookie | +| timestamp | num | 当前毫秒时间戳 | 用于获取 refresh_csrf | + +**示例:** + +```bash +curl -G 'https://passport.bilibili.com/x/passport-login/web/cookie/info' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +<details> +<summary>查看响应示例:</summary> + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "refresh": false, + "timestamp": 1684466082562 + } +} +``` + +</details> + +## 生成CorrespondPath算法 + +该算法逆向于以下 wasm 以及 JavaScript bind 接口,抓取于官方 Web 首页中,感谢 [#524](https://github.com/SocialSisterYi/bilibili-API-collect/issues/524) 提供 + +https://s1.hdslb.com/bfs/static/jinkela/long/wasm/wasm_rsa_encrypt_bg.wasm + +https://s1.hdslb.com/bfs/static/jinkela/long/wasm/wasm_ras_umd.js + +### 算法细节 + +将`refresh_${timestamp}`作为消息体(参数`timestamp`为当前毫秒时间戳),用下方 PubKey 进行 [RSA-OAEP](https://datatracker.ietf.org/doc/html/rfc3447#section-7.1) 算法加密,之后密文通过小写 Base16 编码为字符串 + +JWK 格式: + +> { +> "kty": "RSA", +> "n": "y4HdjgJHBlbaBN04VERG4qNBIFHP6a3GozCl75AihQloSWCXC5HDNgyinEnhaQ_4-gaMud_GF50elYXLlCToR9se9Z8z433U3KjM-3Yx7ptKkmQNAMggQwAVKgq3zYAoidNEWuxpkY_mAitTSRLnsJW-NCTa0bqBFF6Wm1MxgfE", +> "e": "AQAB" +> } + +PEM 格式: + +> -----BEGIN PUBLIC KEY----- +> MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg +> Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71 +> nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40 +> JNrRuoEUXpabUzGB8QIDAQAB +> -----END PUBLIC KEY----- + +### 相关Demo + +该 Demo 提供 [JavaScript](#javascript) [Python](#python) [Kotlin](#kotlin) [Java](#java) [Go](#go) 以及 [Vercel 云函数](#vercel云函数),感谢 [#524](https://github.com/SocialSisterYi/bilibili-API-collect/issues/524) 提供 + +#### JavaScript + +```javascript +const publicKey = await crypto.subtle.importKey( + "jwk", + { + kty: "RSA", + n: "y4HdjgJHBlbaBN04VERG4qNBIFHP6a3GozCl75AihQloSWCXC5HDNgyinEnhaQ_4-gaMud_GF50elYXLlCToR9se9Z8z433U3KjM-3Yx7ptKkmQNAMggQwAVKgq3zYAoidNEWuxpkY_mAitTSRLnsJW-NCTa0bqBFF6Wm1MxgfE", + e: "AQAB", + }, + { name: "RSA-OAEP", hash: "SHA-256" }, + true, + ["encrypt"], +) + +async function getCorrespondPath(timestamp) { + const data = new TextEncoder().encode(`refresh_${timestamp}`); + const encrypted = new Uint8Array(await crypto.subtle.encrypt({ name: "RSA-OAEP" }, publicKey, data)) + return encrypted.reduce((str, c) => str + c.toString(16).padStart(2, "0"), "") +} + +const ts = Date.now() +console.log(await getCorrespondPath(ts)) +``` + +```text +b77f21ab5b7ce7879c410b2311dd6e7ea1a2cd1cd941073db067f4c3279fdabca3a06dfa744168ee14ad050b9f4889bd4edb8e76eb597fdd18c16804d82566b55c6dba8e225d838aa93d8e5b31cf7c56720db8244d92373f4944e0561f6ca5bf721a36ac079786060fc853605ccd1ddcb33f54617de6aedd44e3b9850d13b45f +``` + +#### Python + +需要`pycryptodome`依赖 + +```python +from Crypto.Cipher import PKCS1_OAEP +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +import binascii +import time + +key = RSA.importKey('''\ +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg +Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71 +nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40 +JNrRuoEUXpabUzGB8QIDAQAB +-----END PUBLIC KEY-----''') + +def getCorrespondPath(ts): + cipher = PKCS1_OAEP.new(key, SHA256) + encrypted = cipher.encrypt(f'refresh_{ts}'.encode()) + return binascii.b2a_hex(encrypted).decode() + +ts = round(time.time() * 1000) +print(getCorrespondPath(ts)) +``` + +```text +47bbd615f333d6a2c597bbb46ad47a6e59752a305a2f545d3ba5d49ca055309347796f80d257613696d36170c57443a0e9dea2b47f83b0b4224d431e46124fadd9a24c8fa468147e8bf2d2501eaacae43310e19bf58fc4a728d80c90b9401afcfc1536ba9a2f6438ea53c0b2652f8b8d01c87355dd5a5da51de998b1a35d519a +``` + +### Kotlin + +```kotlin +import java.security.KeyFactory +import java.security.spec.MGF1ParameterSpec +import java.security.spec.X509EncodedKeySpec +import java.util.* +import javax.crypto.Cipher +import javax.crypto.spec.OAEPParameterSpec +import javax.crypto.spec.PSource + + +fun main() { + println(getCorrespondPath(System.currentTimeMillis())) +} + +fun getCorrespondPath(timestamp: Long): String { + val publicKeyPEM = """ + -----BEGIN PUBLIC KEY----- + MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg + Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71 + nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40 + JNrRuoEUXpabUzGB8QIDAQAB + -----END PUBLIC KEY----- + """.trimIndent() + + val publicKey = KeyFactory.getInstance("RSA").generatePublic( + X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyPEM + .replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replace("\n", "") + .trim())) + ) + + val cipher = Cipher.getInstance("RSA/ECB/OAEPPadding").apply { + init(Cipher.ENCRYPT_MODE, + publicKey, + OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT) + ) + } + + return cipher.doFinal("refresh_$timestamp".toByteArray()).joinToString("") { "%02x".format(it) } +} +``` + +```text +1428cbd14605ae42a0b42e22662cfe51d8e5034eeaffb36a46db46bd2f93216cbfd4d150cca2de44395add7c664b40acf44424ee8d634fc821b909423665a34d18bd7f4e77ea5388a2b612daf875e2fe8df62990e14b64a465898b0707bc1288586b68f9f4f2f20bea5cb1cada296beb8009e91bc8fb57a4b81b8923299b6eb7 +``` + +### Go + +```go +package main + +import ( + "crypto/rand" + "crypto/rsa" + "crypto/sha256" + "crypto/x509" + "encoding/hex" + "encoding/pem" + "fmt" + "time" +) + +func main() { + result, err := getCorrespondPath(time.Now().UnixMilli()) + if err != nil { + panic(err) + } + fmt.Println(result) +} + +func getCorrespondPath(ts int64) (string, error) { + const publicKeyPEM = ` +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg +Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71 +nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40 +JNrRuoEUXpabUzGB8QIDAQAB +-----END PUBLIC KEY----- +` + pubKeyBlock, _ := pem.Decode([]byte(publicKeyPEM)) + hash := sha256.New() + random := rand.Reader + msg := []byte(fmt.Sprintf("refresh_%d", ts)) + var pub *rsa.PublicKey + pubInterface, parseErr := x509.ParsePKIXPublicKey(pubKeyBlock.Bytes) + if parseErr != nil { + return "", parseErr + } + pub = pubInterface.(*rsa.PublicKey) + encryptedData, encryptErr := rsa.EncryptOAEP(hash, random, pub, msg, nil) + if encryptErr != nil { + return "", encryptErr + } + return hex.EncodeToString(encryptedData), nil +} +``` + +```text +97759947aa357ed5d88cf9bf1172737570b7bba2d6788d39006f082b2b25ddf53b581f1f0c61ed8573317485ef525d2789faa25a277b4602a4b9cbf837681093a03e96cb9773a11df4bb1e20f1587180b3e958194de922d7dd94d0a2f0b9b0ef74e426e8041f99b99e7c02407ef4ab38040e61be81e4fdfbdb73461e3a2ad810 +``` + +### Java + +```Java +import javax.crypto.Cipher; +import javax.crypto.spec.OAEPParameterSpec; +import javax.crypto.spec.PSource; +import java.math.BigInteger; +import java.security.KeyFactory; +import java.security.PublicKey; +import java.security.spec.MGF1ParameterSpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +public class CookieRefresh { + private static final String PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\n" + + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg\n" + + "Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71\n" + + "nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40\n" + + "JNrRuoEUXpabUzGB8QIDAQAB\n" + + "-----END PUBLIC KEY-----"; + + public static void main(String[] args) { + try { + String correspondPath = getCorrespondPath(String.format("refresh_%d", System.currentTimeMillis()), PUBLIC_KEY); + System.out.println(correspondPath); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static String getCorrespondPath(String plaintext, String publicKeyStr) throws Exception { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + publicKeyStr = publicKeyStr + .replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replace("\n", "") + .trim(); + byte[] publicBytes = Base64.getDecoder().decode(publicKeyStr); + X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicBytes); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); + + String algorithm = "RSA/ECB/OAEPPadding"; + Cipher cipher = Cipher.getInstance(algorithm); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + + // Encode the plaintext to bytes + byte[] plaintextBytes = plaintext.getBytes("UTF-8"); + + // Add OAEP padding to the plaintext bytes + OAEPParameterSpec oaepParams = new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT); + cipher.init(Cipher.ENCRYPT_MODE, publicKey, oaepParams); + // Encrypt the padded plaintext bytes + byte[] encryptedBytes = cipher.doFinal(plaintextBytes); + // Convert the encrypted bytes to a Base64-encoded string + return new BigInteger(1, encryptedBytes).toString(16); + } +} +``` + +```text +f87666152da692735123f4e49053e5a98c16854673b2e632f31a3ff0c029640772873661a9a8412db6be447a0bfa03a295d15548cbfd2bb35634e98ba5f25b1205519d6e6119b483f4c516c1e106d45b04ff98c73560949d379d3edaf3c0ecd10a1d46134fb9ca443122ab33c16d1dd48280496f949ed960a2fbcd65f10935e +``` + +#### vercel云函数 + +```bash +curl -G 'https://wasm-rsa.vercel.app/api/rsa' \ + --data-urlencode "t=$((`date '+%s'`*1000+`date '+%N'`/1000000))" +``` + +```json +{ + "timestamp": "1684468084078", + "hash": "a768efe5114ef8610f9ed9ebc28c00827375f4a3448ec4ab17958cacc4fde9898e5b7aa27f649426bba1acae4aa222aafaff7d528669b15249de0b2b60d86618557d8dc90684db4ec68e8d98e41d94f1c97d1d431c288e595ceb522d033822442a9e1ee150b32771a83fbf65c13329e9fda080fbe3bc85c49c1de7ab148d228f", + "code": 0 +} +``` + +## 获取refresh_csrf + +> https://www.bilibili.com/correspond/1/{correspondPath} + +*请求方式:GET* + +鉴权方式:Cookie + +**path 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------------- | ---- | ---------------------------- | ------ | ------------------------------------------------------------ | +| correspondPath | str | 使用当前毫秒时间戳生成的签名 | 必要 | 由 [生成CorrespondPath算法](#生成CorrespondPath算法) 加密获得 | + +将参数`correspondPath`拼接在 https://www.bilibili.com/correspond/1/ 后进行请求,例如 + +> https://www.bilibili.com/correspond/1/0248397e5139a8b878894cae46f8d6742ef7c728e46403706452b5dda90fe248e58e73bd6c2da0dba515c53af107dc1ecda757ce843579bcf197fcd7800586126e9b896b646cc94c23183a5a067642e96f7b6e803880e1d3cceabc9f1dc52a121b5e3ba5619e008f6b6dcb65a09d7864084ac114f4ec9ccf6218776fe4f2fa95 + +请求该 url 会返回一个 html 页面,通常由 iframe 方式加载,它通过 SSR 方式返回一个实时刷新口令`refresh_csrf`存放于 html 标签中,并在 Client 端通过 js 请求 RestAPI 完成一些列的提交刷新、确认、SSO 站点登录等操作 + +若参数`correspondPath`错误或过期,则返回一个 404 Page + +以下为返回的参数: + +| 标签 id | 内容 | xpath | 备注 | +| ------- | ------------ | ------------------------- | --------------------------------- | +| 1-name | refresh_csrf | //div[id='1-name']/text() | 实时刷新口令<br />用于更新 Cookie | + +**示例:** + +```bash +correspondPath='0248397e5139a8b878894cae46f8d6742ef7c728e46403706452b5dda90fe248e58e73bd6c2da0dba515c53af107dc1ecda757ce843579bcf197fcd7800586126e9b896b646cc94c23183a5a067642e96f7b6e803880e1d3cceabc9f1dc52a121b5e3ba5619e008f6b6dcb65a09d7864084ac114f4ec9ccf6218776fe4f2fa95' + +curl -G "https://www.bilibili.com/correspond/1/$correspondPath" \ + -b 'SESSDATA=xxx' +``` + +```html +<!DOCTYPE html> +<html lang="zh-Hans"> + +<head> + <meta name="spm_prefix" content="333.1193"> + <link + href="//s1.hdslb.com/bfs/static/jinkela/token-iframe/css/token-iframe.1.a035e81c3bee5fa1a05633ad534ad1f44b05e54d.css" + rel="stylesheet"> +</head> +<title>Correspond + + + +
b0cc8411ded2f9db2cff2edb3123acac
+
+ + + + + + +``` + +所以当前账号的实时刷新口令`refresh_csrf`为`b0cc8411ded2f9db2cff2edb3123acac` + +## 刷新Cookie + +> https://passport.bilibili.com/x/passport-login/web/cookie/refresh + +*请求方式:POST* + +鉴权方式:Cookie + +刷新成功后会设置以下 Cookie 项: + +`sid`、`DedeUserID`、`DedeUserID__ckMd5`、`SESSDATA`、`bili_jct` + +**正文参数 (application/x-www-form-urlencoded)或 url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | -------------- | ------ | ------------------------------------------------------------ | +| csrf | str | CSRF Token | 必要 | 位于 Cookie 中的`bili_jct`字段 | +| refresh_csrf | str | 实时刷新口令 | 必要 | 通过 [获取refresh_csrf](#获取refresh_csrf) 获得 | +| source | str | 访问来源? | 必要 | 一般为`main_web` | +| refresh_token | str | 持久化刷新口令 | 必要 | localStorage 中的`ac_time_value`字段,在登录成功后返回并保存 | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf 校验失败
86095:refresh_csrf 错误或 refresh_token 与 cookie 不匹配 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------ | ----------------------------------------------------------- | +| status | num | 0 | | +| message | str | 空 | | +| refresh_token | str | 新的持久化刷新口令 | 将存储于 localStorage 中的`ac_time_value`字段,以便下次使用 | + +**示例:** + +```bash +curl -i 'https://passport.bilibili.com/x/passport-login/web/cookie/refresh' \ + --data-urlencode 'csrf=f610640a37f51f6266f6b83cfc5eedbb' \ + --data-urlencode 'refresh_csrf=b0cc8411ded2f9db2cff2edb3123acac' \ + --data-urlencode 'source=main_web' \ + --data-urlencode 'refresh_token=45240a041836905fe953e3b98b83d751' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +http 响应(关键信息已做脱敏处理): + +```http +HTTP/2 200 +date: Fri, 19 May 2023 07:34:11 GMT +content-type: application/json; charset=utf-8 +content-length: 116 +bili-status-code: 0 +bili-trace-id: 17f4251365646726 +set-cookie: SESSDATA=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT; HttpOnly; Secure +set-cookie: bili_jct=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT +set-cookie: DedeUserID=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT +set-cookie: DedeUserID__ckMd5=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT +set-cookie: sid=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT +x-bili-trace-id: 3f6f6174aaa087b517f4251365646726 +expires: Fri, 19 May 2023 07:34:10 GMT +cache-control: no-cache +x-cache-webcdn: BYPASS from blzone03 + +{"code":0,"message":"0","ttl":1,"data":{"status":0,"message":"","refresh_token":"ae1bd1149b56af9743ffe7bbbeff3e51"}} +``` + +JSON Payload: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "status": 0, + "message": "", + "refresh_token": "ae1bd1149b56af9743ffe7bbbeff3e51" + } +} +``` + +
+ +## 确认更新 + +> https://passport.bilibili.com/x/passport-login/web/confirm/refresh + +*请求方式:POST* + +鉴权方式:Cookie + +该步操作将让旧的`refresh_token`对应的 Cookie 失效 + +**正文参数 (application/x-www-form-urlencoded)或 url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ------------------------- | ------ | ------------------------------------------------------------ | +| csrf | str | CSRF Token(位于 cookie) | 必要 | 从新的 cookie 中获取,位于 Cookie 中的`bili_jct`字段 | +| refresh_token | str | 旧的持久化刷新口令 | 必要 | 在刷新前 localStorage 中的`ac_time_value`获取,**并非刷新后返回的值** | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf 校验失败
-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | + +**示例:** + +```bash +curl 'https://passport.bilibili.com/x/passport-login/web/confirm/refresh' \ + --data-urlencode 'csrf=1e9658858e6da76be64bd92cdc0fa324' \ + --data-urlencode 'refresh_token=45240a041836905fe953e3b98b83d751' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/login/exit.md b/docs/login/exit.md new file mode 100644 index 0000000..8ba5e14 --- /dev/null +++ b/docs/login/exit.md @@ -0,0 +1,68 @@ +# 退出账号登录 + +## 退出登录(web端) + +> https://passport.bilibili.com/login/exit/v2 + +_请求方式:POST_ + +认证方式:Cookie + +验证登录成功后会使用`set-cookie`字段清空以下 cookie 项: + +`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct` + +并在服务器注销该登录 Token (SESSDATA),该 Token 即失效 + +请求必须包含以下cookie项:`DedeUserID` `bili_jct` `SESSDATA` + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------------------------------- | ------ | --------------------------------- | +| biliCSRF | str | CSRF Token (位于 cookie 中的 `bili_jct`) | 必要 | | +| gourl | str | 成功后跳转到的页面 | 非必要 | 默认为`javascript:history.go(-1)` | + +**json 回复:** + +如果 cookie 已经失效则输出登录页 html + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------- | -------- | --------------------------------- | +| code | num | 返回值 | 0:成功
2202:csrf 请求非法 | +| status | bool | 返回值 | `true`:成功 | +| ts | num | 时间戳 | | +| message | str | 错误信息 | 成功时不存在 | +| data | 有效时:obj | 信息本体 | 失败时不存在 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------- | ---- | +| redirectUrl | str | 重定向 url | | + +**示例:** + +```shell +curl -L -X POST 'https://passport.bilibili.com/login/exit/v2' \ +-H 'Cookie: DedeUserID=xxx; bili_jct=xxx; SESSDATA=xxx' \ +-H 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'biliCSRF=xxxxxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "status": true, + "ts": 1663034005, + "data": { + "redirectUrl": "https://passport.biligame.com/crossDomain?DedeUserID=&DedeUserID__ckMd5=&SESSDATA=&bili_jct=&gourl=javascript%3Ahistory.go%28-1%29" + } +} +``` +
\ No newline at end of file diff --git a/docs/login/login_action/QR.md b/docs/login/login_action/QR.md new file mode 100644 index 0000000..ecee7fd --- /dev/null +++ b/docs/login/login_action/QR.md @@ -0,0 +1,652 @@ +# 二维码登录 + + + +## 扫码登录流程(伪代码) + +```python +token, url = 申请二维码() +生成二维码(url) # 等待客户端扫码 +while True: + status, cookie = 扫码登录(token) + match status: + case 未扫描: + continue + case 二维码超时 | 二维码失效: + 提示('二维码失效或超时') # 需要用户重新操作 + break + case 已扫描未确认: + 提示('扫描成功') + case 登录成功: + 提示('扫描成功') + 存储cookie(cookie) + SSO登录页面跳转() + break +``` + +## web端扫码登录 + +### 申请二维码(web端) + +> https://passport.bilibili.com/x/passport-login/web/qrcode/generate + +*请求方式:GET* + +密钥超时为180秒 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------| +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------------|-----|------------------|--------| +| url | str | 二维码内容 (登录页面 url) | | +| qrcode_key | str | 扫码登录秘钥 | 恒为32字符 | + +**示例:** + +`url`中的值生成二维码,等待手机客户端扫描,并将`qrcode_key`保存备用 + +```shell +curl 'https://passport.bilibili.com/x/passport-login/web/qrcode/generate' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "url": "https://passport.bilibili.com/h5-app/passport/login/scan?navhide=1\u0026qrcode_key=8587cf8106a0b863c46d6bab913537f6\u0026from=", + "qrcode_key": "8587cf8106a0b863c46d6bab913537f6" + } +} +``` + +
+ +### 扫码登录(web端) + +> https://passport.bilibili.com/x/passport-login/web/qrcode/poll + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------------|-----|--------|-----|-----| +| qrcode_key | str | 扫码登录秘钥 | 必要 | | + + +密钥超时为180秒 + +验证登录成功后会进行设置以下cookie项: + +`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct` + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------| +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| data | obj | 信息本体 | | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------------|-----|----------------------------------------------------------------|------------------------| +| url | str | 游戏分站跨域登录 url | 未登录为空 | +| refresh_token | str | 刷新`refresh_token` | 未登录为空 | +| timestamp | num | 登录时间 | 未登录为`0`
时间戳 单位为毫秒 | +| code | num | 0:扫码登录成功
86038:二维码已失效
86090:二维码已扫码未确认
86101:未扫码 | | +| message | str | 扫码状态信息 | | + +**示例:** + +使用扫描秘钥`c3bd5286a2b40a822f5f60e9bf3f602e`登录 + +```shell +curl -G "https://passport.bilibili.com/x/passport-login/web/qrcode/poll"\ +--data-urlencode 'qrcode_key=c3bd5286a2b40a822f5f60e9bf3f602e' \ +-c 'cookie.txt' +``` + +当密钥正确时但未扫描时`code`为`86101` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "url": "", + "refresh_token": "", + "timestamp": 0, + "code": 86101, + "message": "未扫码" + } +} +``` + +
+ +扫描成功但手机端未确认时`code`为`86090` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "url": "", + "refresh_token": "", + "timestamp": 0, + "code": 86090, + "message": "二维码已扫码未确认" + } +} +``` + +
+ +扫描成功手机端确认登录后,`code`为`0`,并向浏览器写入cookie + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "url": "https://passport.biligame.com/crossDomain?DedeUserID=***\u0026DedeUserID__ckMd5=***\u0026Expires=***\u0026SESSDATA=***\u0026bili_jct=***\u0026gourl=https%3A%2F%2Fpassport.bilibili.com", + "refresh_token": "***", + "timestamp": 1662363009601, + "code": 0, + "message": "" + } +} +``` + +
+ +**响应头部抓包信息:** + +可明显看见设置了几个cookie + +
+查看响应示例: + +```http +HTTP/1.1 200 OK +Date: Mon, 05 Sep 2022 07:30:09 GMT +Expires: Mon, 05 Sep 2022 07:30:08 GMT +Cache-control: no-cache +Content-encoding: br +Content-type: application/json; charset=utf-8 +bili-status-code: 0 +bili-trace-id: 0d23fe044a6315a5 +set-cookie: SESSDATA=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT; HttpOnly; Secure +set-cookie: bili_jct=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT +set-cookie: DedeUserID=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT +set-cookie: DedeUserID__ckMd5=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT +set-cookie: sid=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT +x-bili-trace-id: 2fbd8abd97dbd4db0d23fe044a6315a5 +x-cache-webcdn: BYPASS from blzone02 +``` + +
+ +二维码失效时`code`为`86038` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "url": "", + "refresh_token": "", + "timestamp": 0, + "code": 86038, + "message": "二维码已失效" + } +} +``` + +
+ +## web端扫码登录-旧版 + +以下为旧版扫码登录 API,部分可正常访问 + +### 申请二维码(web端-旧版) + +> https://passport.bilibili.com/qrcode/getLoginUrl + +*请求方式:GET* + +密钥超时为180秒 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------|------|------|--------| +| code | num | 返回值 | 0:成功 | +| status | bool | true | 作用尚不明确 | +| ts | num | 请求时间 | 时间戳 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|------------------|--------| +| url | str | 二维码内容 (登录页面 url) | | +| oauthKey | str | 扫码登录秘钥 | 恒为32字符 | + +**示例:** + +`url`中的值生成二维码,等待手机客户端扫描,并将`oauthKey`保存备用 + +```shell +curl 'https://passport.bilibili.com/qrcode/getLoginUrl' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "status": true, + "ts": 1583314311, + "data": { + "url": "https://passport.bilibili.com/qrcode/h5/login?oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e", + "oauthKey": "c3bd5286a2b40a822f5f60e9bf3f602e" + } +} +``` + +
+ +### 扫码登录(web端-旧版) + +**接口已失效,请求结果始终为 `{ code: 20000, message: '该版本已不支持当前功能,请升级新版本!' }`** + +> ~~https://passport.bilibili.com/qrcode/getLoginInfo~~ + +*请求方式:POST* + +
+内容已过时: + +密钥超时为180秒 + +验证登录成功后会进行设置以下cookie项: + +`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct` + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|--------|-----|----------------------------| +| oauthKey | str | 扫码登录秘钥 | 必要 | | +| gourl | str | 跳转url | 非必要 | 默认为http://www.bilibili.com | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|----------------------|---------------------------|---------------------------------------------------------| +| code | num | 返回值 | 0:成功,
20000:该版本已不支持当前功能,请升级新版本! | +| message | str | | 正确无 | +| ts | num | 扫码时间 | 错误无 | +| status | bool | 扫码是否成功 | true:成功
false:未成功 | +| data | 正确时:obj
错误时:num | 正确时:游戏分站url
错误时:错误代码 | 未成功时:
-1:密钥错误
-2:密钥超时
-4:未扫描
-5:未确认 | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----|-----|--------------|-----| +| url | str | 游戏分站跨域登录 url | | + +**示例:** + +使用扫描秘钥`c3bd5286a2b40a822f5f60e9bf3f602e`登录 + +```shell +curl "https://passport.bilibili.com/qrcode/getLoginInfo"\ +--data-urlencode 'oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e' \ +-c 'cookie.txt' +``` + +当密钥正确时但未扫描时`status`为`false`,`data`为`-4` + +
+查看响应示例: + +```json +{ + "status":false, + "data":-4, + "message":"Can't scan~" +} +``` + +
+ +扫描成功但手机端未确认时`status`为`false`,`data`为`-5` + +
+查看响应示例: + +```json +{ + "status":false, + "data":-5, + "message":"Can't confirm~" +} +``` + +
+ +扫描成功手机端确认登录后,`status`为`true`,`data`为对象,并向浏览器写入cookie + +
+查看响应示例: + +```json +{ + "code": 0, + "status": true, + "ts": 1583315474, + "data": { + "url": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=***&SESSDATA=***&bili_jct=***&gourl=http%3A%2F%2Fwww.bilibili.com" + } +} +``` + +
+ +**响应头部抓包信息:** + +可明显看见设置了几个cookie + +
+查看响应示例: + +```http +HTTP/1.1 200 OK +Date: Wed, 04 Mar 2020 10:36:37 GMT +Content-Type: application/json;charset=UTF-8 +Transfer-Encoding: chunked +Connection: keep-alive +Server: Apache-Coyote/1.1 +Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Thu, 04-Mar-2021 10:36:37 GMT; Path=/ +Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/ +Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/ +Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/; HttpOnly +Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/ +Expires: Wed, 04 Mar 2020 10:36:36 GMT +Cache-Control: no-cache +X-Cache-Webcdn: BYPASS from ks-sxhz-dx-w-01 +``` + +
+ +
+ +## TV端扫码登录 + +### 申请二维码(TV端) + +> https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/auth_code +> +> https://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code + +*请求方式:POST* + +鉴权方式:appkey + +密钥超时为180秒 + +本接口可申请用于TV端APP方式登录的`access_key` + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------- | ------------ | -------------------------- | +| appkey | str | APP 密钥 | APP 方式必要 | [可用](#appkey-可用列表) | +| local_id | num | TV 端 id | TV 端必要 | 可为`0` | +| ts | num | 当前时间戳 | APP 方式必要 | | +| sign | str | APP 签名 | APP 方式必要 | | +| mobi_app | str | 平台标识 | 非必要 | 会被拼接到返回的 url query | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|---------------------------------------| +| code | num | 返回值 | 0:成功
-3:API校验密匙错误
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------------- | ------------ | +| url | str | 二维码内容 url | | +| auth_code | str | 扫码登录秘钥 | 恒为 32 字符 | + +**示例:** + +```shell +curl 'https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/auth_code' \ +--data-urlencode 'appkey=4409e2ce8ffd12b8' \ +--data-urlencode 'local_id=0' \ +--data-urlencode 'ts=0' \ +--data-urlencode 'sign=e134154ed6add881d28fbdf68653cd9c' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "url": "https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=0eeb635a64526709d70cb4c854a3b001", + "auth_code": "0eeb635a64526709d70cb4c854a3b001" + } +} +``` + +
+ +### 扫码登录(TV端) + +> https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/poll +> +> https://passport.bilibili.com/x/passport-tv-login/qrcode/poll + +*请求方式:POST* + +鉴权方式:appkey + +密钥超时为180秒 + +验证登录成功后会返回可用于APP方式登录的`access_key`以及`refresh_token` + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----------|-----|-------|---------|-----------------------| +| appkey | str | APP密钥 | APP方式必要 |[可用](#appkey-可用列表) | +| auth_code | str | 扫码秘钥 | 必要 | | +| local_id | num | TV端id | TV端必要 | 可为0 | +| ts | num | 当前时间戳 | APP方式必要 | | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----------------------|------|--------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-3:API校验密匙错误
-400:请求错误
-404:啥都木有
86038:二维码已失效
86039:二维码尚未确认
86090:二维码已扫码未确认 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:obj
无效时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------------|-----|------------|---------------------| +| mid | num | 登录用户mid | | +| access_token | str | APP登录Token | | +| refresh_token | str | APP刷新Token | | +| expires_in | num | 有效时间 | 默认:15552000秒,等于180天 | + +**示例:** + +使用扫描秘钥`6214464b3025541abf6f654cf7569a01`进行验证登录 + +```shell +curl 'https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/poll' \ +--data-urlencode 'appkey=4409e2ce8ffd12b8' \ +--data-urlencode 'auth_code=6214464b3025541abf6f654cf7569a01' \ +--data-urlencode 'local_id=0' \ +--data-urlencode 'ts=0' \ +--data-urlencode 'sign=87de3d0fee7c3f4facd244537238914e' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "is_new": false, + "mid": 10086, + "access_token": "********************************", + "refresh_token": "********************************", + "expires_in": 15552000, + "token_info": { + "mid": 10086, + "access_token": "********************************", + "refresh_token": "********************************", + "expires_in": 15552000 + }, + "cookie_info": { + "cookies": [ + { + "name": "SESSDATA", + "value": "********************************", + "http_only": 1, + "expires": 1679988973, + "secure": 0 + }, + { + "name": "bili_jct", + "value": "********************************", + "http_only": 0, + "expires": 1679988973, + "secure": 0 + }, + { + "name": "DedeUserID", + "value": "*******", + "http_only": 0, + "expires": 1679988973, + "secure": 0 + }, + { + "name": "DedeUserID__ckMd5", + "value": "****************", + "http_only": 0, + "expires": 1679988973, + "secure": 0 + }, + { + "name": "sid", + "value": "********", + "http_only": 0, + "expires": 1679988973, + "secure": 0 + } + ], + "domains": [ + ".bilibili.com", + ".biligame.com", + ".bigfun.cn", + ".bigfunapp.cn", + ".dreamcast.hk" + ] + }, + "sso": [ + "https://passport.bilibili.com/api/v2/sso", + "https://passport.biligame.com/api/v2/sso", + "https://passport.bigfunapp.cn/api/v2/sso" + ] + } +} +``` + +
+ +### appkey 可用列表 + +**仅覆盖 [docs/misc/sign/APPKey](../../misc/sign/APPKey.md) 中包含的 appkey** + +| APPKEY | APPSEC | platform | APP类型 | neuronAppId | mobi_app2 | 备注 | +| :--------------: | :------------------------------: | :------------------: | :----------------: | :---------------------: | :------------------: | :----------------------------------------: | +| 783bbb7264451d82 | 2653583c8873dea268ab9386918b1d65 | `android` | 粉版 | `1` | `android` | 仅获取用户信息时使用(7.X及更新版本) | +| 8d23902c1688a798 | 710f0212e62bd499b8d3ac6e1db9302a | `android` | AndroidBiliThings | ? | ? | | +| bca7e84c2d947ac6 | 60698ba2f68e01ce44738920a0ffe768 | ? | login | - | ? | | +| 27eb53fc9058f8c3 | c2ed53a74eeefe3cf99fbd01d8c9c375 | `web`/`ios`? | - | - | - | 第三方授权使用 | +| 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | `android` | 云视听小电视(TV版) | `9`? | `android_tv_yst`? | | +| dfca71928277209b | b5475a8825547a4fc26c7d518eaaa02e | `android` | HD 版 | `5` | `android_hd` | | + +**注意:** + +通过某一组 APPKEY/APPSEC 获取到的 access_token,当接口需要 `sign` 签名时也只能使用该组 APPKEY/APPSEC,否则出现 `{ code: -663, message: '鉴权失败,请联系账号组', ttl: 1 }` 错误。 + +**例外:** + +`783bbb7264451d82`/`2653583c8873dea268ab9386918b1d65` 获取到的 access_token 可配合 `1d8b6e7d45233436`/`560c52ccd288fed045859ed18bffd973` 使用。 diff --git a/docs/login/login_action/SMS.md b/docs/login/login_action/SMS.md new file mode 100644 index 0000000..bd8abe5 --- /dev/null +++ b/docs/login/login_action/SMS.md @@ -0,0 +1,453 @@ +# 短信登录 + +web端短信登录流程: + +1. [完成人机验证](readme.md) +2. 发送短信,使用国际地区代码`cid`+手机号码`tel`+登录密钥`token`+极验`challenge`+验证结果`validate`+验证结果`seccode` +3. 提交短信验证码以验证登录操作,使用国际地区代码`cid`+手机号码`tel`+短信验证码`code` + +## 获取国际冠字码_web端 + +> https://passport.bilibili.com/web/generic/country/list + +*请求方式:GET* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ------------- | ---- | +| common | array | 常用国家&地区 | | +| others | array | 其他国家&地区 | | + +`data`中的`common`和`others`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | obj | 国家&地区1 | | +| n | obj | 国家&地区(n+1) | | +| …… | obj | …… | …… | + +`common`和`others`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------- | ---- | +| id | num | 国际代码值 | | +| cname | str | 国家&地区名 | | +| country_id | str | 国家&地区区号 | | + +**示例:** + +```shell +curl 'https://passport.bilibili.com/web/generic/country/list' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "common": [ + { + "id": 1, + "cname": "中国大陆", + "country_id": "86" + }, + { + "id": 5, + "cname": "中国香港特别行政区", + "country_id": "852" + }, + ………… + ], + "others": [ + { + "id": 22, + "cname": "阿富汗", + "country_id": "93" + }, + { + "id": 20, + "cname": "阿尔巴尼亚", + "country_id": "355" + }, + ………… + ] + } +} +``` + +
+ + +## 发送短信验证码_app端 + +> https://passport.bilibili.com/x/passport-login/sms/send + +*请求方式:POST* + +同手机号短信发送 CD 时间为 60s + +短信验证码 timeout 为 5min + +验证内容由第一次返回进行处理,解析recaptcha_url的params传到极验进行验证后取到验证结果入参后再次调用即可 + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| cid | num | 国际冠字码 | 必要 | 可以从[获取国际冠字码](#获取国际冠字码-web端)获取 | +| tel | num | 手机号码 | 必要 | | +| login_session_id | str | 登录标识 | 必要 | uuid去掉'-'后得到 +| recaptcha_token | str | 登录 API token | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 | +| gee_challenge | str | 极验 challenge | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 | +| gee_validate | str | 极验 result | 必要 | 极验验证后得到 | +| gee_seccode | str | 极验 result +`\|jordan` | 必要 | 极验验证后得到 | +| channel | str | 通道? | 必要 | 一般固定值为"bili" | +| buvid | str | buvid | 必要 | 参考如下方法生成 | +| local_id | str | 同上 | 必要 | 同上 | +| statistics | str | ? | 必要 | 一般固定为{"appId":1,"platform":3,"version":"7.27.0","abtest":""},非key-value入参需要转URL编码 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | --------- | +| code | num | 返回值 | 0:成功
-400:请求错误
1002:手机号格式错误
86203:短信发送次数已达上限
1003:验证码已经发送
1025:该手机号在哔哩哔哩有过永久封禁记录,无法再次注册或绑定新账号
2400:登录秘钥错误
2406:验证极验服务出错 | +| message | str | 错误信息 | 成功为0 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | ------------------------ | +| captcha_key | str | 短信登录 token | 在下方传参时需要,请备用 | + +**示例:** + +例如手机号为`13888888888`,国际id为`1 (中国大陆)`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行发送短信验证码操作 + +```shell +curl 'https://passport.bilibili.com/x/passport-login/sms/send' \ +--data-urlencode 'tel=13888888888' \ +--data-urlencode 'cid=1' \ +--data-urlencode 'login_session_id=669900' \ +--data-urlencode 'recaptcha_token=aabbccdd' \ +--data-urlencode 'gee_challenge=2333' \ +--data-urlencode 'gee_validate=666666' \ +--data-urlencode 'gee_seccode=666666|jordan' \ +--data-urlencode 'channel=bili' \ +--data-urlencode 'buvid=999999' \ +--data-urlencode 'local_id=999999' \ +--data-urlencode 'statistics=%7B%22appId%22%3A1%2C%22platform%22%3A3%2C%22version%22%3A%227.27.0%22%2C%22abtest%22%3A%22%22%7D' +``` + +生成buvid方法 +``` javascript +static buvid() : string { + var mac = []; + for (let i = 0; i < 6; i++) { + var min = Math.min(0, 0xff) + var max = Math.max(0, 0xff) + var num = parseInt((Math.random() * (min - max + 1) + max).toString()).toString(16) + mac.push(num) + } + var md5 = this.md5(mac.join(':')); + var md5Arr = md5.split(''); + return "XY${md5Arr[2]}${md5Arr[12]}${md5Arr[22]}${md5}" +} +``` + +
+查看响应示例: + +```json +{"code":0, + "message":"0", + "ttl":1, + "data":{ + "captcha_key":"7542f109c3318d74847626495c68c321", + "recaptcha_url":"...." + } +} +``` + +
+ +## 发送短信验证码_web端 + +> https://passport.bilibili.com/x/passport-login/web/sms/send + +*请求方式:POST* + +同手机号短信发送 CD 时间为 60s + +短信验证码 timeout 为 5min + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| cid | num | 国际冠字码 | 必要 | 可以从[获取国际冠字码](#获取国际冠字码-web端)获取 | +| tel | num | 手机号码 | 必要 | | +| source | str | 登录来源 | 必要 | `main_web`:独立登录页
`main_mini`:小窗登录 | +| token | str | 登录 API token | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 | +| challenge | str | 极验 challenge | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 | +| validate | str | 极验 result | 必要 | 极验验证后得到 | +| seccode | str | 极验 result +`\|jordan` | 必要 | 极验验证后得到 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | --------- | +| code | num | 返回值 | 0:成功
-400:请求错误
1002:手机号格式错误
86203:短信发送次数已达上限
1003:验证码已经发送
1025:该手机号在哔哩哔哩有过永久封禁记录,无法再次注册或绑定新账号
2400:登录秘钥错误
2406:验证极验服务出错 | +| message | str | 错误信息 | 成功为0 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | ------------------------ | +| captcha_key | str | 短信登录 token | 在下方传参时需要,请备用 | + +**示例:** + +例如手机号为`13888888888`,国际id为`1 (中国大陆)`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行发送短信验证码操作 + +```shell +curl 'https://passport.bilibili.com/x/passport-login/web/sms/send' \ +--data-urlencode 'tel=13888888888' \ +--data-urlencode 'cid=1' \ +--data-urlencode 'source=main_web' \ +--data-urlencode 'token=aabbccdd' \ +--data-urlencode 'challenge=2333' \ +--data-urlencode 'validate=666666' \ +--data-urlencode 'seccode=666666|jordan' +``` + +
+查看响应示例: + +```json +{"code":0, + "message":"0", + "ttl":1, + "data":{ + "captcha_key":"7542f109c3318d74847626495c68c321" + } +} +``` + +
+ +## 使用短信验证码登录_app端 + +> https://passport.bilibili.com/x/passport-login/login/sms + +*请求方式:POST* + +验证登录成功后会返回实体内容: + + `mid` `expires_in` `access_token` `refresh_token` + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| cid | num | 国际冠字码 | 必要 | 可以从[获取国际冠字码](#获取国际冠字码-web端)获取 | +| tel | num | 手机号码 | 必要 | | +| login_session_id | str | 登录标识 | 必要 | 必须与上述login_session_id保持一致 +| code | num | 短信验证码 | 必要 | timeout 为 5min | +| captcha_key | str | 短信登录 token | 必要 | 从[上述API](#发送短信验证码-web端)请求成功后返回 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功
-400:请求错误
1006:请输入正确的短信验证码
1007:短信验证码已过期 | +| message | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| mid | str | 用户uid | | +| expires_in | str | 过时时间 | | +| access_token | str | 登录 token | | +| refresh_token | str | 刷新 token | | +| cookie_info | Array | cookie集合 | | + +**示例:** + +使用手机号`13888888888`,短信验证码为`123456`,进行验证登录操作 + +```shell +curl 'https://passport.bilibili.com/x/passport-login/login/sms' +--data-urlencode 'cid=1' \ +--data-urlencode 'tel=13888888888' \ +--data-urlencode 'code=123456' \ +--data-urlencode 'captcha_key=999999' \ +--data-urlencode 'login_session_id=669900' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "token_info": { + "mid": "...", + "expires_in": "114514", + "access_token": "", + "refresh_token": "" + //... + }, + "cookie_info":[ + //... + ], + "message": "0" + } +} +``` + +
+ +**响应头部抓包信息:** + +可明显看见设置了几个cookie(填入浏览器即可成功登录) + +
+查看响应示例: + +```http +HTTP/1.1 200 OK +Date: Mon, 13 Jul 2020 09:57:33 GMT +Content-Type: application/json;charset=UTF-8 +Content-Length: 78 +Connection: keep-alive +Server: Apache-Coyote/1.1 +Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/ +Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/ +Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/; HttpOnly +Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/ +Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/ +Expires: Mon, 13 Jul 2020 09:57:32 GMT +Cache-Control: no-cache +X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01 + +``` + +
+ + +## 使用短信验证码登录_web端 + +> https://passport.bilibili.com/x/passport-login/web/login/sms + +*请求方式:POST* + +验证登录成功后会进行设置以下cookie项: + + `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct` + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| cid | num | 国际冠字码 | 必要 | 可以从[获取国际冠字码](#获取国际冠字码-web端)获取 | +| tel | num | 手机号码 | 必要 | | +| code | num | 短信验证码 | 必要 | timeout 为 5min | +| source | str | 登录来源 | 必要 | `main_web`:独立登录页
`main_mini`:小窗登录 | +| captcha_key | str | 短信登录 token | 必要 | 从[上述API](#发送短信验证码-web端)请求成功后返回 | +| go_url | str | 跳转url | 非必要 | 默认为 https://www.bilibili.com | +| keep | bool | 是否记住登录 | 非必要 | `true`:记住登录
`false`:不记住登录 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功
-400:请求错误
1006:请输入正确的短信验证码
1007:短信验证码已过期 | +| message | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| is_new | bool | 是否为新注册用户 | false:非新注册用户
true:新注册用户 | +| status | num | 0 | 未知,可能0就是成功吧 | +| url | str | 跳转 url | 默认为 https://www.bilibili.com | + +**示例:** + +使用手机号`13888888888`,短信验证码为`123456`,进行验证登录操作 + +```shell +curl 'https://passport.bilibili.com/x/passport-login/web/login/sms' +--data-urlencode 'cid=1' \ +--data-urlencode 'tel=13888888888' \ +--data-urlencode 'code=123456' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "is_new": false, + "status": 0, + "url": "https://space.bilibili.com" + } +} +``` + +
+ +**响应头部抓包信息:** + +可明显看见设置了几个cookie(填入浏览器即可成功登录) + +
+查看响应示例: + +```http +HTTP/1.1 200 OK +Date: Mon, 13 Jul 2020 09:57:33 GMT +Content-Type: application/json;charset=UTF-8 +Content-Length: 78 +Connection: keep-alive +Server: Apache-Coyote/1.1 +Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/ +Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/ +Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/; HttpOnly +Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/ +Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/ +Expires: Mon, 13 Jul 2020 09:57:32 GMT +Cache-Control: no-cache +X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01 + +``` + +
diff --git a/docs/login/login_action/password.md b/docs/login/login_action/password.md new file mode 100644 index 0000000..ffc3d01 --- /dev/null +++ b/docs/login/login_action/password.md @@ -0,0 +1,788 @@ +# 密码登录 + +## 密码登录流程(伪代码) + +```python +账号 = '2333333' +密码字符串 = 'password' + +# 1.人机验证步骤 +token, gt, challenge = 获取验证码() +validate = 填写验证码(gt, challenge) # 这一步填写验证码 (访问极验API,得到validate) + +# 2.密码加密步骤 +pubkey, salt = 获取公钥和盐() +加密后的密码 = RSA公钥加密(pubkey, salt+密码字符串) # 盐需要加在密码字符串前 +base64编码后的密文 = base64编码(加密后的密码) + +# 3.开始登录 +cookie = 密码登录(账号, base64编码后的密文, token, challenge, validate) +存储cookie(cookie) +SSO登录页面跳转() +``` + +## web端密码登录 + +### 获取公钥&盐(web端) + +> https://passport.bilibili.com/x/passport-login/web/key + +*请求方式:GET* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------| +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|------------------------------------------| +| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | +| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | + +**示例:** + +```shell +curl 'https://passport.bilibili.com/x/passport-login/web/key' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "hash": "9333681c87fd8d6e", + "key": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n" + } +} +``` + +
+ +### 登录操作(web端) + +> https://passport.bilibili.com/x/passport-login/web/login + +*请求方式:POST* + +验证登录成功后会进行设置以下 cookie 项: + +`sid` `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct` + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ---------------------- | ------ | ------------------------------------------------------------ | +| username | str | 用户登录账号 | 必要 | 手机号或邮箱地址 | +| password | str | 加密后的带盐密码 | 必要 | base64 格式 | +| keep | num | 0 | 必要 | | +| token | str | 登录 token | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 | +| challenge | str | 极验 challenge | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 | +| validate | str | 极验 result | 必要 | 极验验证后得到 | +| seccode | str | 极验 result +`\|jordan` | 必要 | 极验验证后得到 | +| go_url | str | 跳转 url | 非必要 | 默认为 https://www.bilibili.com | +| source | str | 登录来源 | 非必要 | `main_web`:独立登录页
`main_mini`:小窗登录 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----------------------|------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-105:验证码错误
-400:请求错误
-629:账号或密码错误
-653:用户名或密码不能为空
-662:提交超时,请重新提交
-2001:缺少必要的的参数
-2100:需验证手机号或邮箱
2400:登录秘钥错误
2406:验证极验服务出错
86000:RSA解密失败 | +| message | str | 错误信息 | | +| data | 成功时:obj
失败时:null | 数据本体 | | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------------|-----|-------------------|------------------------| +| message | str | 扫码状态信息 | 若提示 `本次登录环境存在风险, 需使用手机号进行验证或绑定`, 参见 [手机号验证](#手机号验证) | +| refresh_token | str | 刷新`refresh_token` | | +| status | num | 0 | | +| timestamp | num | 登录时间 | 未登录为`0`
时间戳 单位为毫秒 | +| url | str | 游戏分站跨域登录 url | | + +**示例:** + +例如用户账号为`12345678900`,加密后的密码为`xxx`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行验证登录操作 + +```shell +curl 'https://passport.bilibili.com/x/passport-login/web/login' \ +--data-urlencode 'username=12345678900' \ +--data-urlencode 'password=xxx' \ +--data-urlencode 'keep=0' \ +--data-urlencode 'source=main_web' \ +--data-urlencode 'token=aabbccdd' \ +--data-urlencode 'challenge=2333' \ +--data-urlencode 'validate=666666' \ +--data-urlencode 'seccode=666666|jordan' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "status": 0, + "message": "", + "url": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=***&SESSDATA=***&bili_jct=***&gourl=https%3A%2F%2Fwww.bilibili.com%2F", + "refresh_token": "***", + "timestamp": 1662452570273 + } +} + +``` + +
+ +**响应头部抓包信息:** + +可明显看见设置了几个 cookie + +
+查看响应示例: + +```http +HTTP/1.1 200 OK +Date: Mon, 13 Jul 2020 06:56:00 GMT +Content-Type: application/json;charset=UTF-8 +Content-Length: 273 +Connection: keep-alive +Server: Apache-Coyote/1.1 +Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/ +Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/ +Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/; HttpOnly +Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/ +Content-Security-Policy-Report-Only: default-src 'self' data: *.bilibili.com *.hdslb.com; style-src 'self' 'unsafe-inline' *.hdslb.com static.geetest.com; img-src 'self' data: blob: *.bilibili.com *.hdslb.com http://*.hdslb.com static.geetest.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.bilibili.com *.hdslb.com api.geetest.com static.geetest.com; object-src 'self' *.hdslb.com; media-src 'self' *.acgvideo.com http://*.acgvideo.com *.ksyungslb.com; connect-src 'self' data: wss://*.bilibili.com:* *.bilibili.com *.hdslb.com *.biliapi.net *.biliapi.com; frame-ancestors 'self' *.bilibili.com *.biligame.com; report-uri https://security.bilibili.com/csp_report +Expires: Mon, 13 Jul 2020 06:55:59 GMT +Cache-Control: no-cache +X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01 +``` + +
+ +## web端密码登录-旧版 + +以下为密码扫码登录 API,尚可正常访问 + +### 获取公钥&盐(web端-旧版) + +> https://passport.bilibili.com/login?act=getkey + +*请求方式:GET* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|------------------------------------------| +| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | +| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | + +**示例:** + +```shell +curl 'https://passport.bilibili.com/login?act=getkey' +``` + +
+查看响应示例: + +```json +{ + "hash":"07c6501690c1af85", + "key":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n" +} +``` + +
+ +### 登录操作(web端-旧版) + + +> https://passport.bilibili.com/web/login/v2 + +*请求方式:POST* + +验证登录成功后会进行设置以下cookie项: + +`sid` `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct` + +**正文参数 (application/x-www-form-urlencoded):** + + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ---------------------- | ------ | ------------------------------------------------------------ | +| captchaType | num | 6 | 必要 | 必须为`6` | +| username | str | 用户登录账号 | 必要 | 手机号或邮箱地址 | +| password | str | 加密后的带盐密码 | 必要 | base64 格式 | +| keep | bool | 是否记住登录 | 必要 | `true`:记住登录
`false`:不记住登录 | +| key | str | 登录 token | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 | +| challenge | str | 极验 challenge | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 | +| validate | str | 极验 result | 必要 | 极验验证后得到 | +| seccode | str | 极验 result +`\|jordan` | 必要 | 极验验证后得到 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-629:账号或密码错误
-653:用户名或密码不能为空
-662:提交超时,请重新提交
-2001:缺少必要的的参数
-2100:需验证手机号或邮箱
2400:登录秘钥错误
2406:验证极验服务出错
86000:RSA解密失败 | +| ts | num | 当前时间戳 | 成功时无此项 | +| message | str | 错误信息 | 默认为0 | +| data | obj | 数据本体 | 成功时有此项 | + +`data`对象: + +**未登录时:** + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|--------------|-----| +| redirectUrl | str | 游戏分站跨域登录 url | | + +**已登录时:** + +| 字段 | 类型 | 内容 | 备注 | +|---------|------|--------------------------|-----| +| isLogin | bool | true | | +| goUrl | str | https://www.bilibili.com | | + +**需验证手机号或邮箱时** + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|--------------------------|------------| +| mid | num | 用户 mid | | +| tel | str | 绑定的手机号 | 星号隐藏部分信息 | +| email | str | 绑定的邮箱 | 星号隐藏部分信息 | +| sorce | num | 0 | **作用尚不明确** | +| keeptime | num | 1 | **作用尚不明确** | +| goUrl | str | https://www.bilibili.com | | + +**示例:** + +例如用户账号为`12345678900`,加密后的密码为`xxx`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行验证登录操作 + +```shell +curl 'https://passport.bilibili.com/web/login/v2' \ +--data-urlencode 'captchaType=6' \ +--data-urlencode 'username=12345678900' \ +--data-urlencode 'password=xxx' \ +--data-urlencode 'keep=true' \ +--data-urlencode 'token=aabbccdd' \ +--data-urlencode 'challenge=2333' \ +--data-urlencode 'validate=666666' \ +--data-urlencode 'seccode=666666|jordan' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "data": { + "redirectUrl": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=15551000&SESSDATA=***&bili_jct=***&gourl=https%3A%2F%2Fwww.bilibili.com" + } +} +``` + +
+ +**响应头部抓包信息:** + +可明显看见设置了几个 cookie + +
+查看响应示例: + +```http +HTTP/1.1 200 OK +Date: Mon, 13 Jul 2020 06:56:00 GMT +Content-Type: application/json;charset=UTF-8 +Content-Length: 273 +Connection: keep-alive +Server: Apache-Coyote/1.1 +Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/ +Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/ +Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/; HttpOnly +Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/ +Content-Security-Policy-Report-Only: default-src 'self' data: *.bilibili.com *.hdslb.com; style-src 'self' 'unsafe-inline' *.hdslb.com static.geetest.com; img-src 'self' data: blob: *.bilibili.com *.hdslb.com http://*.hdslb.com static.geetest.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.bilibili.com *.hdslb.com api.geetest.com static.geetest.com; object-src 'self' *.hdslb.com; media-src 'self' *.acgvideo.com http://*.acgvideo.com *.ksyungslb.com; connect-src 'self' data: wss://*.bilibili.com:* *.bilibili.com *.hdslb.com *.biliapi.net *.biliapi.com; frame-ancestors 'self' *.bilibili.com *.biligame.com; report-uri https://security.bilibili.com/csp_report +Expires: Mon, 13 Jul 2020 06:55:59 GMT +Cache-Control: no-cache +X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01 +``` + +
+ +## APP端密码登录 + +### 获取公钥&盐(APP端) + +> http://passport.bilibili.com/api/oauth2/getKey + +*请求方式:POST* + +鉴权方式:appkey + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-----|-------|---------|-----| +| appkey | str | APP密钥 | APP方式必要 | | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|------------------------------------------| +| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | +| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | + +**示例:** + +```shell +curl 'https://passport.bilibili.com/api/oauth2/getKey' \ +--data-urlencode 'appkey=1d8b6e7d45233436' \ +--data-urlencode 'sign=17004c193f688f0b5665c1068e733aff' +``` + +
+查看响应示例: + +```json +{ + "hash": "07c6501690c1af85", + "key": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n" +} +``` + +
+ +### 登录操作(APP端) + +TODO + +## 登录密码的加密实例 + +以下实例使用 Python 语言,在任何平台(web、APP)使用密码登录都需要如下加密步骤 + +首先在需拉取 RSA PubKey 和 salt 备用 + +```python +import requests + +resp = requests.get('https://passport.bilibili.com/x/passport-login/web/key').json()['data'] +print('salt =', resp['hash']) +print('PubKey =', resp['key']) +``` + +`hash`字段为 salt,长度固定为 16 字符,timeout 时间只有 20s + +`key`字段为 RSA PubKey,为 PEM 格式,加密需要使用 + +``` +salt = 9773d106a67e27d6 +PubKey = -----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n +6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx +/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+ +Xl69GV6klzgxW6d2xQIDAQAB +-----END PUBLIC KEY----- +``` + +例如登录密码为`BiShi22332323`,现在对它进行加盐并使用获取的 PubKey 加密 + +```python +import rsa +password = 'BiShi22332323' + +pubKey = rsa.PublicKey.load_pkcs1_openssl_pem(resp['key']) # 读取 PEM 密钥 +encryptedPassword = rsa.encrypt((resp['hash']+password).encode(), pubKey) # 盐需要加在明文密码之前,一并加密 +print(encryptedPassword) +``` + +下面将输出一段 bytes 数据: + +``` +b'}\x9c\xd4\xcd\x88\x92\xa7\xde\x85\xdb\xabm\xd7\xd3\x08\x02@xo\x85\xa4\xe1\x11\xd0o\x80\x03.$\xc8l\xbe\xba;\xfe\xee\xa7(\xf8S\x95\x1e\x9106\xa4\x1d\xcf\x8e\xbe\x8d\x94A\x86s\xf9"\x12\x0c\x135\xbb\xbc\xe1\xde\x1b\x90\t)P\xeb\xa9\x8fXY]\x83\x18\x81f\n:\xdb\xe1\xbe\xe8\x1e\xba\x1c D8d}B\x17\xf9\x8a\xf0i\'1\xa5\xc4\x05&\xaa;n\xf8{\xa02\xffY\xcelU\xd5\xaf\x8aJK\xdc\xf1@\xbc\x93' +``` + +接下来需要把加密后的结果进行 base64 编码 + +```python +import base64 +b64Password = base64.b64encode(encryptedPassword).decode() +print('result =', b64Password) +``` + +以下为最终加密结果,可直接向 API 请求体传参以登录: + +因为 RSA 公钥加密的**无法解密性**,故无法本地验证,仅可请求 API 验证(略... + +``` +result = fZzUzYiSp96F26tt19MIAkB4b4Wk4RHQb4ADLiTIbL66O/7upyj4U5UekTA2pB3Pjr6NlEGGc/kiEgwTNbu84d4bkAkpUOupj1hZXYMYgWYKOtvhvugeuhwgRDhkfUIX+YrwaScxpcQFJqo7bvh7oDL/Wc5sVdWvikpL3PFAvJM= +``` + +以下为密码加密的Java实现: + +```java +package com.ho.test; + +import cn.hutool.core.codec.Base64; + +import javax.crypto.Cipher; +import java.security.KeyFactory; +import java.security.PublicKey; +import java.security.spec.X509EncodedKeySpec; + +public class Test3 { + public static void main(String[] args) throws Exception { + //用户密码 + String password = "abcdef"; + //获取到的证书内容 + String key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"; + //获取到的盐值 + String hash = "bb73382121594c46"; + String[] split = key.strip().split("\n"); + String newKey = split[1] + split[2] + split[3] + split[4]; + //进行加密 + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(newKey)); + PublicKey publicKey = keyFactory.generatePublic(keySpec); + Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); + cipher.init(Cipher.PUBLIC_KEY, publicKey); + byte[] bytes = cipher.doFinal((hash + password).getBytes()); + String encode = Base64.encode(bytes); + System.out.println(encode); + } +} + +``` + +## 手机号验证 + +### 简述 + +有时使用密码登录时, 无论使用网页端还是手机端接口, 由于 请求头缺失/请求频率高/请求IP 等原因, 会返回如下内容, 此时需要进行手机号验证或绑定 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "is_new": false, + "status": 2, + "message": "本次登录环境存在风险, 需使用手机号进行验证或绑定", + "url": "https://passport.bilibili.com/h5-app/passport/risk/verify?tmp_token=imtmptk&request_id=imreqid&source=risk", + "refresh_token": "", + "timestamp": 0, + "hint": "", + "in_reg_audit": 0 + } +} +``` + +### 获取 captcha + +> https://passport.bilibili.com/x/safecenter/captcha/pre + +*请求方法: POST* + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | ---- | ---- | ---- | +| source | str | risk | 不必要 | | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| recaptcha_type | str | 验证码类型 | 目前仅 `geetest` | +| recaptcha_token | str | 验证码 token | | +| gee_challenge | str | 极验 challenge | | +| gee_gt | str | 极验 gt | | + +**示例:** + +```shell +curl -X POST 'https://passport.bilibili.com/x/safecenter/captcha/pre' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "recaptcha_type": "geetest", + "recaptcha_token": "8a418aa9eebe411599d759fc318d55e1", + "gee_challenge": "4e5353e7ab9f9aef0c97fa5a5b1ad101", + "gee_gt": "ac597a4506fee079629df5d8b66dd4fe" + } +} +``` + +
+ +### 发送验证码 + +> https://passport.bilibili.com/x/safecenter/common/sms/send + +*请求方法: POST* + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | - | ---- | ---- | ---- | +| tmp_code| str | url query 中的 tmp_code | 必要 | 参见 [简述](#简述) 中 JSON 示例中的 `url` | +| sms_type | str | `loginTelCheck` | 必要 | | +| recaptcha_token | str | 验证码 token | 必要 | 参见 [获取 captcha](#获取-captcha) | +| gee_challenge | str | 极验 challenge | 必要 | 参见 [获取 captcha](#获取-captcha) | +| gee_validate | str | 极验 validate | 必要 | 验证后获得 | +| gee_seccode | str | 极验 seccode | 必要 | 验证后获得 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | -- | - | +| captcha_key | str | 验证码 key | | + +**示例:** + +假设 `tmp_code` 为 `imtmptk`, +`recaptcha_token` 为 `kfc`, +`gee_challenge` 为 `crazythursday`, +`gee_validate` 为 `vivo50`, +`gee_seccode` 为 `vivo50|jordan` + +```shell +curl -X POST 'https://passport.bilibili.com/x/safecenter/common/sms/send' \ +--data-urlencode 'tmp_code=imtmptk' \ +--data-urlencode 'sms_type=loginTelCheck' \ +--data-urlencode 'recaptcha_token=kfc' \ +--data-urlencode 'gee_challenge=crazythursday' \ +--data-urlencode 'gee_validate=vivo50' \ +--data-urlencode 'gee_seccode=vivo50|jordan' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "captcha_key": "42403fb08ed2cd97afff14edefbae482" + } +} +``` + +
+ +### 验证手机验证码 + +> https://passport.bilibili.com/x/safecenter/login/tel/verify + +*请求方法: POST* + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | - | ---- | ---- | ---- | +| tmp_code | str | url query 中的 tmp_code | 必要 | 参见 [简述](#简述) 中 JSON 示例中的 `url` | +| captcha_key | str | 验证码 key | 必要 | 参见 [发送验证码](#发送验证码) | +| type | str | `loginTelCheck` | 必要 | | +| code | num | 接收到的验证码 | 必要 | | +| request_id | str | url query 中的 request_id | 必要 | 参见 [简述](#简述) 中 JSON 示例中的 `url` | +| source | str | risk | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | str | 交换代码 | 用于后面 [交换 Cookie](#交换-cookie) | + +**示例:** + +假设 `tmp_code` 为 `imtmptk`, +`captcha_key` 为 `42403fb08ed2cd97afff14edefbae482`, +`code` 为 `114514`, +`request_id` 为 `imreqid` + +```shell +curl -X POST 'https://passport.bilibili.com/x/safecenter/login/tel/verify' \ +--data-urlencode 'tmp_code=imtmptk' \ +--data-urlencode 'captcha_key=42403fb08ed2cd97afff14edefbae482' \ +--data-urlencode 'type=loginTelCheck' \ +--data-urlencode 'code=114514' \ +--data-urlencode'request_id=imreqid' \ +--data-urlencode'source=risk' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "code": "6eadf783c55a387b143773282b217682" + } +} +``` + +
+ +### 交换 Cookie + +> https://passport.bilibili.com/x/passport-login/web/exchange_cookie + +*请求方法: POST* + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | - | ---- | ---- | ---- | +| source | str | risk | 必要 | | +| code | str | 交换代码 | 必要 | 参见 [验证手机验证码](#验证手机验证码) | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | - | - | +| url | str | 游戏分站跨域登录 url | | +| refresh_token | str | 刷新 token | | + +**示例:** + +假设 `code` 为 `6eadf783c55a387b143773282b217682` + +```shell +curl -X POST 'https://passport.bilibili.com/x/passport-login/web/exchange_cookie' \ +--data-urlencode 'code=6eadf783c55a387b143773282b217682' \ +--data-urlencode'source=risk' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "url": "https://passport.biligame.com/x/passport-login/web/crossDomain?DedeUserID=645769214&DedeUserID__ckMd5=653409864bf9e200&Expires=1739265009&SESSDATA=11d97d2a,1739265009,928d7*82CjCKOhDRm5gROpSfgQ7B2axGVMWm5LuwNTkNDK2vjeGl7xvAsfsCINKmczXvO_Z45FsSVlJ1NHdlYlpSei1lYjdqUXRMaUpuRk9GbjVPS0psc3ZTcDFGRjhnNGhIbHRlZ0ZQRWQ1MUlUY2pnQ0lkTVRYNjlabmlUWGxHcVdkV3hrcElpa0ZEZEZRIIEC&bili_jct=3cdee5b84eb48d4f08bcfd57b58cf40b&gourl=https%3A%2F%2Fwww.bilibili.com%2F&first_domain=.bilibili.com", + "refresh_token": "43de156ad241864640f9d9721656a682" + } +} +``` + +
+ +
+查看响应头部示例: + +```http +HTTP/2 200 OK +date: Thu, 15 Aug 2024 09:10:09 GMT +content-type: application/json; charset=utf-8 +access-control-allow-credentials: true +access-control-allow-methods: GET,POST,PUT,DELETE +access-control-allow-origin: https://passport.bilibili.com +bili-status-code: 0 +bili-trace-id: 175262647666bdc5 +set-cookie: SESSDATA=xxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT; HttpOnly; Secure +set-cookie: bili_jct=xxxxxxxxxxxxxxxxxxxxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT +set-cookie: DedeUserID=114514191; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT +set-cookie: DedeUserID__ckMd5=0123456789abcdef; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT +set-cookie: sid=xxxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT +vary: Origin +x-bili-trace-id: 60f0305e2abc511d175262647666bdc5 +access-control-allow-headers: Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,Access-Control-Allow-Credentials,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Cache-Webcdn,x-bilibili-key-real-ip,x-backend-bili-real-ip,x-risk-header +cross-origin-resource-policy: cross-origin +access-control-expose-headers: X-Bili-Gaia-Vvoucher,X-Bili-Trace-Id +expires: Thu, 15 Aug 2024 09:10:08 GMT +cache-control: no-cache +x-cache-webcdn: BYPASS from blzone01 +content-encoding: br +X-Firefox-Spdy: h2 +``` + +
diff --git a/docs/login/login_action/readme.md b/docs/login/login_action/readme.md new file mode 100644 index 0000000..f891531 --- /dev/null +++ b/docs/login/login_action/readme.md @@ -0,0 +1,164 @@ +# 登录操作 + +人机验证方式登录包含**账号密码登录**与**手机短信验证码登录** + +**注:扫码登录**不需要进行**人机验证**,故**不使用**以下接口 + +## 扫码登录 + +- [扫码登录](QR.md) + +## 验证登录 + +人机验证流程: + +1. 请求验证码参数,得到登录密钥`key`与极验id`gt`和极验KEY`challenge` +2. 进行滑动or点击验证 +3. 返回验证结果`validate`与`seccode`,进行短信或密码登录 + +### 申请captcha验证码 + +> https://passport.bilibili.com/x/passport-login/captcha?source=main_web + +*请求方式:GET* + +注: 另外参见 [密码登录-手机号验证-获取 captcha](password.md#获取-captcha) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | --------- | +| code | num | 返回值 | 0:成功 | +| message | str | 返回信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | -------- | +| geetest | obj | 极验captcha数据 | | +| tencent | obj | (?) | **作用尚不明确** | +| token | str | 登录 API token | 与 captcha 无关,与登录接口有关 | +| type | str | 验证方式 | 用于判断使用哪一种验证方式,目前所见只有极验
geetest:极验 | + +`geetest`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | -------- | +| gt | str | 极验id | 一般为固定值 | +| challenge | str | 极验KEY | 由B站后端产生用于人机验证 | + +**示例:** + +```shell +curl 'https://passport.bilibili.com/x/passport-login/captcha?source=main_web' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "type": "geetest", + "token": "00fbe75cc2864ba0af969231f193a974", + "geetest": { + "challenge": "a57d9be17505d4a15ed84694c48fbf74", + "gt": "ac597a4506fee079629df5d8b66dd4fe" + }, + "tencent": { + "appid": "" + } + } +} +``` + +
+ +### 申请captcha验证码 (旧版) + +> http://passport.bilibili.com/web/captcha/combine + +*请求方式:GET* + +该接口曾从文档移除过, 经过测试仍可正常使用 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | ---- | +| plat | num | 平台类型 | 必要 | 默认为 6 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | --------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | -------- | +| result | obj | 套了个娃 | | +| type | num | 1 | **作用尚不明确** | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | -------- | +| success | num | 1 | **作用尚不明确** | +| gt | str | 极验id | 一般为固定值 | +| challenge | str | 极验KEY | 由B站后端产生用于人机验证 | +| key | str | 登录秘钥 | 与 captcha 无关, 与登录接口有关, 亦作 token | + +**示例:** + +```shell +curl 'https://passport.bilibili.com/web/captcha/combine?plat=6' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "result": { + "success": 1, + "gt": "bd111e81eda1cbb9f54425aafc0908ac", + "challenge": "2903a8eb967a1d990444cb23ea42f417", + "key": "76fb59fbd83a4d9d816162c5156fc964" + }, + "type": 1 + } +} +``` + +
+ +### 进行验证 + +本文档为 Bilibili 文档,验证码为 [geetest 极验](https://docs.geetest.com/sensebot/start/) 提供,故不提供相关 API + +附: [手动验证器](https://kuresaru.github.io/geetest-validator/) +[及其源码](https://github.com/kuresaru/geetest-validator) + +1. 打开手动验证器,在1、2分别填入上面API返回的`gt`和`challenge` +2. 点击按钮3,稍等加载验证码,点击按钮4进行验证 +3. 验证完成后,点击按钮5生成验证结果 +4. 使用最开始获得到的`key`、`challenge`和刚获得到的`validate`、`seccode`继续之后的登录操作 + +### 继续登录 + +- [短信登录](SMS.md) +- [密码登录](password.md) diff --git a/docs/login/login_info.md b/docs/login/login_info.md new file mode 100644 index 0000000..c87c4b5 --- /dev/null +++ b/docs/login/login_info.md @@ -0,0 +1,645 @@ +# 登录基本信息 + +## 导航栏用户信息 + +> ~~https://api.bilibili.com/nav(带有转义)~~ (已失效) +> +> https://api.bilibili.com/x/web-interface/nav(原始数据) + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ---------------- | ------------------------------------------------- | +| isLogin | bool | 是否已登录 | false:未登录
true:已登录 | +| email_verified | num | 是否验证邮箱地址 | 0:未验证
1:已验证 | +| face | str | 用户头像 url | | +| level_info | obj | 等级信息 | | +| mid | num | 用户 mid | | +| mobile_verified | num | 是否验证手机号 | 0:未验证
1:已验证 | +| money | num | 拥有硬币数 | | +| moral | num | 当前节操值 | 上限为70 | +| official | obj | 认证信息 | | +| officialVerify | obj | 认证信息 2 | | +| pendant | obj | 头像框信息 | | +| scores | num | (?) | | +| uname | str | 用户昵称 | | +| vipDueDate | num | 会员到期时间 | 毫秒 时间戳 | +| vipStatus | num | 会员开通状态 | 0:无
1:有 | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度及以上大会员 | +| vip_pay_type | num | 会员开通状态 | 0:无
1:有 | +| vip_theme_type | num | (?) | | +| vip_label | obj | 会员标签 | | +| vip_avatar_subscript | num | 是否显示会员图标 | 0:不显示
1:显示 | +| vip_nickname_color | str | 会员昵称颜色 | 颜色码 | +| wallet | obj | B币钱包信息 | | +| has_shop | bool | 是否拥有推广商品 | false:无
true:有 | +| shop_url | str | 商品推广页面 url | | +| allowance_count | num | (?) | | +| answer_status | num | (?) | | +| is_senior_member | num | 是否硬核会员 | 0:非硬核会员
1:硬核会员 | +| wbi_img | obj | Wbi 签名实时口令 | 该字段即使用户未登录也存在 | +| is_jury | bool | 是否风纪委员 | true:风纪委员
false:非风纪委员 | + +`data`中的`level_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------------ | ---- | +| current_level | num | 当前等级 | | +| current_min | num | 当前等级经验最低值 | | +| current_exp | num | 当前经验 | | +| next_exp | 小于6级时:num
6级时:str | 升级下一等级需达到的经验 |当用户等级为Lv6时,值为`--`,代表无穷大 | + +`data`中的`official`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ------------------------------------------------- | +| role | num | 认证类型 | 见[用户认证类型一览](../user/official_role.md) | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无
0:认证 | + +`data`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------------------- | +| type | num | 是否认证 | -1:无
0:认证 | +| desc | str | 认证信息 | 无为空 | + +`data`中的`pendant`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ----------- | ---- | +| pid | num | 挂件id | | +| name | str | 挂件名称 | | +| image | str | 挂件图片url | | +| expire | num | (?) | | + +`data`中的`vip_label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | ------------------------------------------------------------ | +| path | str | (?) | | +| text | str | 会员名称 | | +| label_theme | str | 会员标签 | vip:大会员
annual_vip:年度大会员
ten_annual_vip:十年大会员
hundred_annual_vip:百年大会员 | + +`data`中的`wallet`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------- | ---- | +| mid | num | 登录用户mid | | +| bcoin_balance | num | 拥有B币数 | | +| coupon_balance | num | 每月奖励B币数 | | +| coupon_due_time | num | (?) | | + +`data`中的`wbi_img`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------------------------- | ---------------------------------------- | +| img_url | str | Wbi 签名参数 `imgKey`的伪装 url | 详见文档 [Wbi 签名](../misc/sign/wbi.md) | +| sub_url | str | Wbi 签名参数 `subKey`的伪装 url | 详见文档 [Wbi 签名](../misc/sign/wbi.md) | + +**示例:** + +**登录状态:** + +```shell +curl 'https://api.bilibili.com/x/web-interface/nav' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "isLogin": true, + "email_verified": 1, + "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "face_nft": 0, + "face_nft_type": 0, + "level_info": { + "current_level": 6, + "current_min": 28800, + "current_exp": 52689, + "next_exp": "--" + }, + "mid": 293793435, + "mobile_verified": 1, + "money": 172.4, + "moral": 70, + "official": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "officialVerify": { + "type": -1, + "desc": "" + }, + "pendant": { + "pid": 2511, + "name": "初音未来13周年", + "image": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "expire": 0, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "https://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png" + }, + "scores": 0, + "uname": "社会易姐QwQ", + "vipDueDate": 1707494400000, + "vipStatus": 1, + "vipType": 2, + "vip_pay_type": 0, + "vip_theme_type": 0, + "vip_label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png" + }, + "vip_avatar_subscript": 1, + "vip_nickname_color": "#FB7299", + "vip": { + "type": 2, + "status": 1, + "due_date": 1707494400000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "", + "tv_vip_status": 0, + "tv_vip_pay_type": 0, + "tv_due_date": 1640793600 + }, + "wallet": { + "mid": 293793435, + "bcoin_balance": 5, + "coupon_balance": 5, + "coupon_due_time": 0 + }, + "has_shop": true, + "shop_url": "https://gf.bilibili.com?msource=main_station", + "allowance_count": 0, + "answer_status": 0, + "is_senior_member": 1, + "wbi_img": { + "img_url": "https://i0.hdslb.com/bfs/wbi/653657f524a547ac981ded72ea172057.png", + "sub_url": "https://i0.hdslb.com/bfs/wbi/6e4909c702f846728e64f6007736a338.png" + }, + "is_jury": false + } +} +``` + +
+ +**未登录状态:** + +```shell +curl 'https://api.bilibili.com/x/web-interface/nav' +``` + +
+查看响应示例: + +```json +{ + "code": -101, + "message": "账号未登录", + "ttl": 1, + "data": { + "isLogin": false, + "wbi_img": { + "img_url": "https://i0.hdslb.com/bfs/wbi/653657f524a547ac981ded72ea172057.png", + "sub_url": "https://i0.hdslb.com/bfs/wbi/6e4909c702f846728e64f6007736a338.png" + }, + } +} +``` + +
+ +## ~~登录用户信息仅部分(已弃用)~~ + +
+查看折叠内容 + +> https://account.bilibili.com/home/userInfo + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`存在且不为0 + +带有转义 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| status | bool | true | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ----------------- | ------------------------------- | +| level_info | obj | 等级信息 | | +| bCoins | num | 拥有B币数 | | +| coins | num | 拥有硬币数 | | +| face | str | 登录用户头像url | | +| nameplate_current | null | ??? | 作用尚不明确 | +| nameplate_current | str | 登录用户勋章url | | +| pendant_current | str | 登录用户头像框url | | +| uname | str | 登录用户昵称 | | +| userStatus | str | 登录用户状态 | | +| vipType | num | 大会员类型 | 0:无
1:月度
2:年度 | +| vipStatus | num | 会员开通状态 | 0:无
1:有 | +| official_verify | num | 是否认证 | -1:无
0:认证 | +| pointBalance | num | 0 | 作用尚不明确 | + +`data`中的`level_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------------ | ---- | +| current_level | num | 当前等级 | | +| current_min | num | 当前等级经验最低值 | | +| current_exp | num | 当前经验 | | +| next_exp | num | 升级下一等级需达到的经验 | | + +**示例:** + +```shell +curl 'https://account.bilibili.com/home/userInfo' \ +-b 'SESSDATA=xxx;DedeUserID=1;' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "status": true, + "data": { + "level_info": { + "current_level": 5, + "current_min": 10800, + "current_exp": 14270, + "next_exp": 28800 + }, + "bCoins": 10, + "coins": 2.5, + "face": "http:\/\/i2.hdslb.com\/bfs\/face\/480e2e98513aaeb65d2f2c76dbae750c4de722e9.jpg", + "nameplate_current": null, + "pendant_current": "http:\/\/i0.hdslb.com\/bfs\/face\/6550f53324c330f201a528e70ef305cb10ac2c01.png", + "uname": "\u793e\u4f1a\u6613\u59d0QwQ", + "userStatus": "\u6b63\u5f0f\u4f1a\u5458", + "vipType": 2, + "vipStatus": 1, + "official_verify": -1, + "pointBalance": 0 + } +} +``` + +
+ +
+ +## 登录用户信息(APP端) + +> https://app.bilibili.com/x/v2/account/myinfo + +*请求方式:GET* + +认证方式:仅可APP + +鉴权方式:appkey + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| ts | num | 当前时间戳 | APP方式必要 | | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-3:API校验密匙错误
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ---------------- | ----------------------------- | +| mid | num | 用户mid | | +| name | str | 用户昵称 | | +| sign | str | 用户签名 | | +| coins | num | 拥有硬币数 | | +| birthday | str | 用户生日 | YYYY-MM-DD | +| face | str | 用户头像url | | +| sex | num | 用户性别 | 0:私密
1:男
2:女 | +| level | num | 用户等级 | 0-6 | +| rank | num | 1000 | **作用尚不明确** | +| silence | num | 用户是否被封禁 | 0:正常
1:封禁 | +| vip | obj | 会员信息 | | +| email_status | num | 是否验证邮箱地址 | 0:未验证
1:已验证 | +| tel_status | num | 是否验证手机号 | 0:未验证
1:已验证 | +| official | obj | 认证信息 | | +| identification | num | 1 | **作用尚不明确** | +| invite | obj | | | +| is_tourist | num | 0 | **作用尚不明确** | +| pin_prompting | num | 0 | **作用尚不明确** | + +`data`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | ---------------- | ------------------------------- | +| type | num | 大会员类型 | 0:无
1:月度
2:年度 | +| status | num | 会员开通状态 | 0:无
1:有 | +| due_date | num | 大会员到期时间 | 毫秒 时间戳 | +| vip_pay_type | num | 会员开通状态 | 0:无
1:有 | +| theme_type | num | 会员开通状态 | 0:无
1:有 | +| label | obj | 大会员信息 | | +| avatar_subscript | num | 是否显示会员图标 | 0:不显示
1:显示 | +| nickname_color | str | 会员昵称颜色 | 颜色码 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ---------------- | +| path | str | 空 | **作用尚不明确** | +| text | str | 会员类型文字 | | +| label_theme | str | 会员类型 | | + +`data`中的`official`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ------------------------------------------------- | +| role | num | 认证类型 | 0:无
1 2 7:个人认证
3 4 5 6:机构认证 | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 认证备注 | 无为空 | + +`data`中的`invite`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ---- | ---------------- | +| invite_remind | num | 1 | **作用尚不明确** | +| display | bool | true | **作用尚不明确** | + +**示例:** + +```shell +curl -G 'https://app.bilibili.com/x/v2/account/myinfo' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'appkey=4409e2ce8ffd12b8' \ +--data-urlencode 'ts=0' \ +--data-urlencode 'sign=b8fb8480049c525994be6507a97ae0b6' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 293793435, + "name": "社会易姐QwQ", + "sign": "高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨,粉丝群:1136462265", + "coins": 33.4, + "birthday": "2002-03-05", + "face": "http://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "sex": 1, + "level": 5, + "rank": 10000, + "silence": 0, + "vip": { + "type": 2, + "status": 1, + "due_date": 1612454400000, + "vip_pay_type": 1, + "theme_type": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299" + }, + "email_status": 1, + "tel_status": 1, + "official": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "identification": 1, + "invite": { + "invite_remind": 1, + "display": true + }, + "is_tourist": 0, + "pin_prompting": 0 + } +} +``` + +
+ + +## 登录用户状态数(双端) + +> https://api.bilibili.com/x/web-interface/nav/stat + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ---------- | ---- | +| following | num | 关注数 | | +| follower | num | 粉丝数 | | +| dynamic_count | num | 发布动态数 | | + +**示例:** + +当前登录用户的状态数为粉丝596,关注754,发送的动态252 + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/x/web-interface/nav/stat' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "following": 754, + "follower": 596, + "dynamic_count": 252 + } +} +``` + +
+ +APP方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/nav/stat' \ +--data-urlencode 'access_key=d907f51122c59599d580ade2315af971' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "following": 754, + "follower": 596, + "dynamic_count": 252 + } +} +``` + +
+ +## 获取硬币数 + +> https://account.bilibili.com/site/getCoin + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +鉴权方式:Cookie中` DedeUserID `存在且不为0 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| status | bool | true | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | -------------------------------------- | ---------- | ---- | +| money | 硬币为正数时:num
硬币为0时:null | 当前硬币数 | | + +**示例:** + +```shell +curl 'https://account.bilibili.com/site/getCoin' \ +-b 'SESSDATA=xxx;DedeUserID=1;' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "status": true, + "data": { + "money": 42.4 + } +} +``` + +
diff --git a/docs/login/login_notice.md b/docs/login/login_notice.md new file mode 100644 index 0000000..720c0a2 --- /dev/null +++ b/docs/login/login_notice.md @@ -0,0 +1,269 @@ +# 登录记录 + +## 查询登录记录 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | ------------------------------------------------------------ | +| mid | num | 用户mid | 必要 | 必须为自己的mid | +| buvid | str | 设备虚拟id | 非必要 | web端为操作登录接口时Cookie中的`buvid3`
若登录设备无`buvid`则留空 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ----------- | -------------------------- | +| mid | num | 登录用户mid | | +| device_name | str | 登录设备 | 依靠操作登录接口时的UA决定 | +| login_type | str | 登录方式 | 根据登录接口决定 | +| login_time | str | 登录时间 | YYYY-MM-DD hh:mm:ss | +| location | str | 登录位置 | 依靠ip决定 | +| ip | str | 登录ip | 部分用`*`打码 | + +**示例:** + +查询用户`293793435`设备id为`fuck_chenrui`的登录记录 + +```shell +curl -G 'https://api.bilibili.com/x/safecenter/login_notice' \ + --data-urlencode 'mid=293793435' \ + --data-urlencode 'buvid=fuck_chenrui' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 293793435, + "device_name": "Chrome浏览器", + "login_type": "扫码登录", + "login_time": "2020-10-02 22:42:38", + "location": "中国陕西渭南", + "ip": "36.40.***.**" + } +} +``` + +
+ +## 最近一周的登录情况 + +> + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | -------- | +| jsonp | str | 回调函数名? | 非必要 | 默认 jsonp | +| web_location | str | 网页位置? | 非必要 | 默认 333.33 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | ----- | +| count | num | 记录总数 | | +| list | arr | 登录记录列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | obj | 登录记录1 | | +| …… | obj | …… | | +| n | obj | 登录记录(n+1) | | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------------- | ---- | +| ip | str | 登录 IP | IPv4:末 2 位以 `*` 打码
IPv6:末 5 位以 `*` 打码 | +| time | num | 登录时间 | UNIX 秒级时间戳 | +| time_at | str | 登录时间 | 格式为 `yyyy-MM-dd HH:mm:ss` | +| status | bool | 是否登录成功? | | +| type | num | 登录方式? | | +| geo | str | 登录地理位置 | | + +**示例:** + +查询本用户最近一周的登录情况 + +```shell +curl -G "https://api.bilibili.com/x/member/web/login/log" \ + -b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 15, + "list": [ + { + "ip": "240e:*:*:*:*:*:*:*", + "time": 1746038055, + "time_at": "2025-05-01 02:34:15", + "status": true, + "type": 0, + "geo": "中国广西梧州电信" + }, + { + "ip": "108.181.*.*", + "time": 1722036741, + "time_at": "2024-07-27 07:32:21", + "status": true, + "type": 0, + "geo": "美国加利福尼亚州洛杉矶telus.com" + }, + { + "ip": "104.28.*.*", + "time": 1722040653, + "time_at": "2024-07-27 08:37:33", + "status": true, + "type": 0, + "geo": "巴西" + }, + { + "ip": "104.28.*.*", + "time": 1721950332, + "time_at": "2024-07-26 07:32:12", + "status": true, + "type": 0, + "geo": "新加坡cloudflare.com" + }, + { + "ip": "104.28.*.*", + "time": 1721964627, + "time_at": "2024-07-26 11:30:27", + "status": true, + "type": 0, + "geo": "美国弗吉尼亚州雷斯顿cloudflare.com" + }, + { + "ip": "143.92.*.*", + "time": 1721861861, + "time_at": "2024-07-25 06:57:41", + "status": true, + "type": 0, + "geo": "中国香港特别行政区" + }, + { + "ip": "143.92.*.*", + "time": 1721861855, + "time_at": "2024-07-25 06:57:35", + "status": true, + "type": 0, + "geo": "中国香港特别行政区" + }, + { + "ip": "104.28.*.*", + "time": 1721709514, + "time_at": "2024-07-23 12:38:34", + "status": true, + "type": 0, + "geo": "日本千叶县成田市cloudflare.com" + }, + { + "ip": "104.28.*.*", + "time": 1721709618, + "time_at": "2024-07-23 12:40:18", + "status": true, + "type": 0, + "geo": "日本千叶县成田市cloudflare.com" + }, + { + "ip": "143.92.*.*", + "time": 1721636125, + "time_at": "2024-07-22 16:15:25", + "status": true, + "type": 0, + "geo": "中国香港特别行政区" + }, + { + "ip": "143.92.*.*", + "time": 1721636111, + "time_at": "2024-07-22 16:15:11", + "status": true, + "type": 0, + "geo": "中国香港特别行政区" + }, + { + "ip": "104.28.*.*", + "time": 1721539870, + "time_at": "2024-07-21 13:31:10", + "status": true, + "type": 0, + "geo": "美国加利福尼亚州东洛杉矶cloudflare.com" + }, + { + "ip": "104.28.*.*", + "time": 1721539965, + "time_at": "2024-07-21 13:32:45", + "status": true, + "type": 0, + "geo": "美国加利福尼亚州东洛杉矶cloudflare.com" + }, + { + "ip": "42.2.*.*", + "time": 1721477962, + "time_at": "2024-07-20 20:19:22", + "status": true, + "type": 0, + "geo": "中国香港特别行政区pccw.com" + }, + { + "ip": "42.2.*.*", + "time": 1721477960, + "time_at": "2024-07-20 20:19:20", + "status": true, + "type": 0, + "geo": "中国香港特别行政区pccw.com" + } + ] + } +} +``` + +
diff --git a/docs/login/member_center.md b/docs/login/member_center.md new file mode 100644 index 0000000..7763e5b --- /dev/null +++ b/docs/login/member_center.md @@ -0,0 +1,862 @@ +# 个人中心 + +## 获取我的信息 + +> https://api.bilibili.com/x/member/web/account + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------------- | --------------------------------------- | +| mid | num | 我的mid | | +| uname | str | 我的昵称 | | +| userid | str | 我的用户名 | | +| sign | str | 我的签名 | | +| birthday | str | 我的生日 | YYYY-MM-DD | +| sex | str | 我的性别 | 男 女 保密 | +| nick_free | bool | 是否未设置昵称 | false:设置过昵称
true:未设置昵称 | +| rank | str | 我的会员等级 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/member/web/account' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "mid":293793435, + "uname":"社会易姐QwQ", + "userid":"bili_84675323391", + "sign":"高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨,粉丝群:1136462265", + "birthday":"2002-03-05", + "sex":"男", + "nick_free":false, + "rank":"正式会员" + } +} +``` + +
+ +## 查询每日奖励状态 + +> https://api.bilibili.com/x/member/web/exp/reward + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------------------- | ------------------------------------------------------------ | +| login | bool | 每日登录 | false:未完成
true:已完成
完成奖励5经验 | +| watch | bool | 每日观看 | false:未完成
true:已完成
完成奖励5经验 | +| coins | num | 每日投币所奖励的经验 | 上限为50
注:该值更新存在延迟
[另外一个专门API](#查询每日投币获得经验数) | +| share | bool | 每日分享 | false:未完成
true:已完成
完成奖励5经验 | +| email | bool | 绑定邮箱 | false:未完成
true:已完成
首次完成奖励20经验 | +| tel | bool | 绑定手机号 | false:未完成
true:已完成
首次完成奖励100经验 | +| safe_question | bool | 设置密保问题 | false:未完成
true:已完成
首次完成奖励30经验 | +| identify_card | bool | 实名认证 | false:未完成
true:已完成
首次完成奖励50经验 | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/member/web/exp/reward' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "login": true, + "watch": true, + "coins": 30, + "share": true, + "email": true, + "tel": true, + "safe_question": true, + "identify_card": true + } +} +``` + +
+ +## 查询每日投币获得经验数 + +> ~~https://www.bilibili.com/plus/account/exp.php~~ (已失效) +> +> https://api.bilibili.com/x/web-interface/coin/today/exp + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +该接口实时更新,未发现延迟 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------------------- | ----------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| data | num | 每日投币所奖励的经验 | 上限为50 | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/web-interface/coin/today/exp' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": 20 +} +``` + +
+ +## 查询大会员状态 + +> https://api.bilibili.com/x/vip/web/user/info + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------------- | ------------------------------------------------------------ | +| mid | num | 我的mid | | +| vip_type | num | 大会员类型 | 0:无
1:月度
2:年度 | +| vip_status | num | 大会员状态 | 1:正常
2:由于IP地址更换过于频繁,服务被冻结
3:你的大会员账号风险过高,大会员功能已被锁定 | +| vip_due_date | num | 大会员到期时间 | 时间戳 毫秒 | +| vip_pay_type | num | 是否已购买大会员 | 0:未购买
1:已购买 | +| theme_type | num | 0 | 作用尚不明确 | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/vip/web/user/info' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 293793435, + "vip_type": 2, + "vip_status": 1, + "vip_due_date": 1612454400000, + "vip_pay_type": 1, + "theme_type": 0 + } +} +``` + +
+ +## 查询账号安全情况 + +> https://passport.bilibili.com/web/site/user/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +鉴权方式:如用Cookie方式认证时Cookie中`DedeUserID`存在且不为0 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ---------------- | ---- | +| account_info | obj | 账号绑定信息 | | +| account_safe | obj | 密码安全信息 | | +| account_sns | obj | 互联登录绑定信息 | | +| account_other | obj | | | + +`data`中的`account_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | -------------- | ------------------------------- | +| hide_tel | str | 绑定的手机号 | 星号隐藏部分信息 | +| hide_mail | str | 绑定的邮箱 | 星号隐藏部分信息 | +| bind_tel | bool | 是否绑定手机号 | false:未绑定
true:已绑定 | +| bind_mail | bool | 是否绑定邮箱 | false:未绑定
true:已绑定 | +| tel_verify | bool | 是否验证手机号 | false:未验证
true:已验证 | +| mail_verify | bool | 是否验证邮箱 | false:未验证
true:已验证 | +| unneeded_check | bool | 是否未设置密码 | false:已设置
true:未设置 | +| realname_certified | bool | 是否实名认证 | false:未认证
true:已认证 | + +`data`中的`account_safe`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------------- | ----------------------------- | +| Score | num | 账号安全等级 | 0-100
已弃用? | +| score_new | num | 新版账号安全等级 | 0-100 | +| pwd_level | num | 当前密码强度等级 | 1:弱
2:中
3:强 | +| security | bool | 当前密码是否安全 | false:不安全
true:安全 | + +`data`中的`account_sns`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ------------------------ | +| weibo_bind | num | 是否绑定微博 | 0:未绑定
1:已绑定 | +| qq_bind | num | 是否绑定qq | 0:未绑定
1:已绑定 | +| wechat_bind | num | 是否绑定微信 | 0:未绑定
1:已绑定 | + +`data`中的`account_other`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ----- | ------------ | +| skipVerify | bool | false | 作用尚不明确 | + +**示例:** + +```shell +curl 'https://passport.bilibili.com/web/site/user/info' \ +-b 'SESSDATA=xxx;DedeUserID=1;' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "account_info": { + "hide_tel": "153*****056", + "hide_mail": "144****@qq.com", + "bind_tel": true, + "bind_mail": true, + "tel_verify": true, + "mail_verify": true, + "unneeded_check": false, + "realname_certified": true + }, + "account_safe": { + "Score": 90, + "score_new": 100, + "pwd_level": 3, + "security": true + }, + "account_sns": { + "weibo_bind": 1, + "qq_bind": 1, + "wechat_bind": 1 + }, + "account_other": { + "skipVerify": false + } + } +} +``` + +
+ +## 查询账号实名认证状态 + +> https://api.bilibili.com/x/member/realname/status + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | ------------------------ | +| status | num | 实名认证状态 | 0:未认证
1:已认证 | + +**示例:** + +当前状态为已认证 + +```shell +curl 'https://api.bilibili.com/x/member/realname/status' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "status": 1 + } +} +``` + +
+ +## 查询实名认证详细信息 + +> https://api.bilibili.com/x/member/realname/apply/status + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ------------------------------------------------------------ | +| status | num | 认证状态 | 1:已认证
3:未认证 | +| remark | str | 驳回信息 | 默认为空 | +| realname | str | 实名姓名 | 星号隐藏完全信息 | +| card | str | 证件号码 | 星号隐藏部分信息 | +| card_type | num | 证件类型代码 | 0:身份证
2:港澳居民来往内地通行证
3:台湾居民来往大陆通行证
4:护照(中国签发)
5:外国人永久居留证
6:其他国家或地区身份证明 | + +```shell +curl 'https://api.bilibili.com/x/member/realname/apply/status' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "status": 1, + "remark": "", + "realname": "***", + "card": "6****************7", + "card_type": 0 + } +} +``` + +
+ +## 查询硬币变化情况 + +> https://api.bilibili.com/x/member/web/coin/log + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +仅能查询最近一周的情况 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ---------------- | ---- | +| list | array | 变化记录条目列表 | | +| count | num | 变化记录条目数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ---- | +| 0 | obj | 变化记录条目1 | | +| n | obj | 变化记录条目(n+1) | | +| …… | obj | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ---------------------- | +| time | str | 变化时间 | YYYY-MM-DD HH:MM:SS | +| delta | num | 变化量 | 正值为收入,负值为支出 | +| reason | str | 变化说明 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/member/web/coin/log' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "time": "2020-05-19 23:58:29", + "delta": -1, + "reason": "给视频 BV1j5411s7M8 打赏" + }, + { + "time": "2020-05-19 16:02:53", + "delta": -1, + "reason": "给视频 BV1Ht4y117A1 打赏" + }, + { + "time": "2020-05-19 15:38:42", + "delta": 0.1, + "reason": "给视频 BV1nb411C7aa 打赏" + }, + { + "time": "2020-05-19 02:19:20", + "delta": 1, + "reason": "登录奖励" + }, + { + "time": "2020-05-18 22:34:04", + "delta": -1, + "reason": "给视频 BV1Bp4y1Q7uw 打赏" + }, + { + "time": "2020-05-18 22:33:59", + "delta": -1, + "reason": "给视频 BV1j5411s7M8 打赏" + }, + { + "time": "2020-05-18 02:45:53", + "delta": 1, + "reason": "登录奖励" + }, + { + "time": "2020-05-17 03:02:38", + "delta": 1, + "reason": "登录奖励" + }, + { + "time": "2020-05-16 01:57:02", + "delta": 1, + "reason": "登录奖励" + }, + { + "time": "2020-05-15 11:10:35", + "delta": 0.2, + "reason": "给视频 BV1Yt41137T6 打赏" + }, + { + "time": "2020-05-15 00:34:27", + "delta": 1, + "reason": "登录奖励" + }, + { + "time": "2020-05-14 02:11:37", + "delta": 1, + "reason": "登录奖励" + }, + { + "time": "2020-05-13 02:12:28", + "delta": 1, + "reason": "登录奖励" + } + ], + "count": 13 + } +} +``` + +
+ +## 修改个人签名 + +> https://api.bilibili.com/x/member/web/sign/update + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +修改签名不会立即生效,会等待审核队列稍后生效 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | -------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| user_sign | str | 要设置的签名内容 | 非必要 | 删除签名留空或省去即可
最多支持70个字符 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
40015:签名包含敏感词
40021:签名不能包含表情图片
40022:签名过长 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +更新个人标签为`高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨,粉丝群:1136462265` + +```shell +curl 'https://api.bilibili.com/x/member/web/sign/update' \ +--data-urlencode 'user_sign=高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,粉丝群:1136462265' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +
+ +## 最近一周的经验记录 + +> https://api.bilibili.com/x/member/web/exp/log + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | -------- | +| jsonp | str | 回调函数名? | 非必要 | 默认 jsonp | +| web_location | str | 网页位置? | 非必要 | 默认 333.33 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0: 成功
-101: 账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ---------------- | ---- | +| list | array | 经验记录条目列表 | | +| count | num | 经验记录条目数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----- | ---- | +| 0 | obj | 记录1 | | +| …… | obj | …… | …… | +| n | obj | 记录(n+1) | | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ---- | +| delta | num | 经验值 | | +| time | str | 记录时间 | 格式为 yyyy-MM-dd HH:mm:ss | +| reason | str | 记录原因 | | + +**示例:** + +```shell +curl -G "https://api.bilibili.com/x/member/web/exp/log" \ +-b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "delta": 5, + "time": "2024-07-27 15:08:23", + "reason": "分享视频奖励" + }, + { + "delta": 5, + "time": "2024-07-27 08:28:21", + "reason": "登录奖励" + }, + { + "delta": 5, + "time": "2024-07-27 08:28:21", + "reason": "观看视频奖励" + }, + { + "delta": 5, + "time": "2024-07-26 12:44:19", + "reason": "登录奖励" + }, + { + "delta": 5, + "time": "2024-07-26 12:44:19", + "reason": "观看视频奖励" + }, + { + "delta": 20, + "time": "2024-07-25 06:58:49", + "reason": "视频投币奖励" + }, + { + "delta": 5, + "time": "2024-07-25 06:58:30", + "reason": "观看视频奖励" + }, + { + "delta": 5, + "time": "2024-07-25 06:58:30", + "reason": "登录奖励" + }, + { + "delta": 5, + "time": "2024-07-23 18:47:48", + "reason": "观看视频奖励" + }, + { + "delta": 5, + "time": "2024-07-23 18:47:48", + "reason": "登录奖励" + } + ], + "count": 10 + } +} +``` + +
+ +## 最近一周的节操记录 + +> https://api.bilibili.com/x/member/web/moral/log + +*请求方式: GET* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | -------- | +| jsonp | str | 回调函数名? | 非必要 | 默认 jsonp | +| web_location | str | 网页位置? | 非必要 | 默认 333.33 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| code | num | 返回值 | 0: 成功
-101: 账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ---------------- | ---- | +| moral | num | 节操值 | | +| list | array | 记录条目列表 | | +| count | num | 记录条目数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----- | ---- | +| 0 | obj | 记录1 | | +| …… | obj | …… | …… | +| n | obj | 记录(n+1) | | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ---------------- | ---- | +| time | string | 时间 | | +| delta | number | 变化 | | +| origin | string | 原因 | | +| reason | string | 说明 | | + +**示例:** + +```shell +curl -G "https://api.bilibili.com/x/member/web/moral/log" \ +-b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "moral": 70, + "list": [], + "count": 0 + } +} +``` + +
diff --git a/docs/manga/Activity.md b/docs/manga/Activity.md new file mode 100644 index 0000000..6a3d812 --- /dev/null +++ b/docs/manga/Activity.md @@ -0,0 +1,76 @@ +# 漫画任务操作 + +## 分享漫画 + +> https://manga.bilibili.com/twirp/activity.v1.Activity/ShareComic + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---- | ------ | ------- | +| platform | str | 平台 | 必要 | android | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | --------- | -------- | ------------------------------------------------------- | +| code | num / str | 返回值 | 见对应表格 | +| msg | str | 错误信息 | | +| meta | obj | 错误信息 | invalid_argument 时存在,例如 `{"argument":"platform"}` | +| data | obj | | `code` 为 0,`msg` 为空时存在 | + +`code` - `msg` 对应表: + +| code | code 类型 | msg | 备注 | +| ---------------- | --------- | ------------------ | --------------------------- | +| 0 | num | 空 | 分享成功,`data` 存在 | +| 0 | num | 今日已分享 | | +| invalid_argument | str | xxxx must be valid | xxxx 字段为必须,`meta`存在 | +| unauthenticated | str | must login | 必须登录才能分享 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---- | +| point | num | 获取积分 | | + +**示例:** + +```bash +curl -X POST https://manga.bilibili.com/twirp/activity.v1.Activity/ShareComic \ +-b "SESSDATA=xxxxx" \ +--data-urlencode 'platform=android' +``` + +
+分享成功: + +```json +{ + "code": 0, + "msg": "", + "data": { + "point": 5 + } +} +``` + +
+ +
+今日已分享: + +```json +{ + "code": 0, + "msg": "今日已分享" +} +``` + +
diff --git a/docs/manga/ClockIn.md b/docs/manga/ClockIn.md new file mode 100644 index 0000000..36681ed --- /dev/null +++ b/docs/manga/ClockIn.md @@ -0,0 +1,217 @@ +# 签到 + +> https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|----|-----|---------| +| platform | str | 平台 | 必要 | android | +| device | str | 平台 | 非必要 | h5 | + +**正文参数( application/json ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|-----|------|-----|-------| +| type | num | | 非必要 | 补签时使用 | +| date | str | 补签日期 | 必要 | 补签时使用 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----------|------|--------------------------------------------| +| code | num / str | 返回值 | 0:成功
invalid_argument:今日已签到 | +| msg | str | 错误信息 | 成功:空
已签到:clockin clockin is duplicate | +| meta | obj | 错误信息 | 今日已签到时存在 | +| data | obj | | | + +**示例:** + +普通签到: + +```bash +curl -L -X POST 'https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn' \ +-H 'Cookie: SESSDATA=xxx' \ +-H 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'platform=android' +``` + +
+签到成功: + +```json +{ + "code": 0, + "msg": "", + "data": {} +} +``` + +
+ +
+今日已签到: + +```json +{ + "code": "invalid_argument", + "msg": "clockin clockin is duplicate", + "meta": { + "argument": "clockin" + } +} +``` + +
+ +补签: + +```bash +curl -L 'https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn?platform=android' \ +-H 'Cookie: SESSDATA=xxx' \ +-H 'content-type: application/json;charset=UTF-8' \ +-d '{"type":0,"date":"2023-02-15"}' +``` + +
+补签成功: + +```json +{ + "code": 0, + "msg": "", + "data": {} +} +``` + +
+ +# 查询签到状态 + +> https://manga.bilibili.com/twirp/activity.v1.Activity/GetClockInInfo + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|------|------| +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 空 | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------|-------|------------------|------------------| +| day_count | num | 连续签到天数 | | +| status | num | 今日是否已签到 | 0:未签到
1:已签到 | +| credit_icon | str | | | +| sign_before_icon | str | | | +| sign_today_icon | str | | | +| breathe_icon | str | | | +| new_credit_x_icon | str | | | +| coupon_pic | str | | | +| points | array | 一次签到周期中每次签到可获得点数 | | +| point_infos | array | | | + +`point_infos`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|------|---------|----| +| point | num | 签到可获取积分 | | +| origin_point | num | | | +| is_activity | bool | | | +| title | str | 签到奖励描述 | | + +**示例:** + +```bash +curl -L -X POST 'https://manga.bilibili.com/twirp/activity.v1.Activity/GetClockInInfo' \ +-H 'Cookie: SESSDATA=xxx' +``` + +
+成功: + +```json +{ + "code": 0, + "msg": "", + "data": { + "day_count": 58, + "status": 1, + "points": [ + 10, + 20, + 20, + 10, + 10, + 10, + 30 + ], + "credit_icon": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/9da6QImiK_w192_h192.png", + "sign_before_icon": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/BuA6z3lhN_w192_h192.png", + "sign_today_icon": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/TWSLUHbbg_w192_h192.png", + "breathe_icon": "http://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/anime.breathe.svga", + "point_infos": [ + { + "point": 10, + "origin_point": 10, + "is_activity": false, + "title": "10积分" + }, + { + "point": 20, + "origin_point": 20, + "is_activity": false, + "title": "20积分" + }, + { + "point": 20, + "origin_point": 20, + "is_activity": false, + "title": "20积分" + }, + { + "point": 10, + "origin_point": 10, + "is_activity": false, + "title": "10积分" + }, + { + "point": 10, + "origin_point": 10, + "is_activity": false, + "title": "10积分" + }, + { + "point": 10, + "origin_point": 10, + "is_activity": false, + "title": "10积分" + }, + { + "point": 30, + "origin_point": 30, + "is_activity": false, + "title": "30积分+福利券" + } + ], + "new_credit_x_icon": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/QP5DsW2S_w192_h192.png", + "coupon_pic": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/Yalqqoiz_w402_h162.png" + } +} +``` + +
\ No newline at end of file diff --git a/docs/manga/Comic.md b/docs/manga/Comic.md new file mode 100644 index 0000000..af9d4bb --- /dev/null +++ b/docs/manga/Comic.md @@ -0,0 +1,4223 @@ +# 购买漫画章节 + +> https://manga.bilibili.com/twirp/comic.v1.Comic/BuyEpisode + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| access_key | str | APP登录凭证 | 必要 | 使用APP鉴权方式时必填 | +| appkey | str | cc8617fd6961e070 | 非必要 | | +| mobi_app | str | android_comic | 非必要 | | +| version | str | 4.13.0 | 非必要 | | +| build | str | 36413002 | 非必要 | | +| channel | str | bilicomic | 非必要 | | +| platform | str | android | 必要 | | +| device | str | android | 非必要 | | +| buvid | str | | 非必要 | | +| machine | str | samsung+SM-G9730 | 非必要 | | +| is_teenager | num | 0 | 非必要 | | +| no_recommend | num | 0 | 非必要 | | +| ts | num | 秒级时间戳 | 非必要 | | + +**正文参数( application/json ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- | +| epId | num | 章节id | 必要 | | +| buyMethod | num | 购买方式 | 必要 | 2:漫读券
4:新人等免
5:通用券 | +| couponId | num | 漫读券id | 必要 | | +| comicId | num | 漫画id | 可选 | buyMethod:4为必要| +| autoPayGoldStatus | num | 2 | 可选 | buyMethod:2,5 为必要
buyMethod:4为不必要 | +| isPresale | num | 0 | 可选 | buyMethod:2,5 为必要
buyMethod:4为不必要 | + +漫读券购买 + +``` +{ + "epId": 484366, + "buyMethod": 2, + "couponId": 7461430, + "autoPayGoldStatus": 2, + "isPresale": 0 +} +``` + +等就免费(新人等免) +``` +{ + "ep_id": 321913, + "comic_id": 26564, + "buy_method": 4 +} +``` + +通用券购买 + +``` +{ + "epId": 484366, + "buyMethod": 5, + "couponId": 0, + "autoPayGoldStatus": 2, + "payAmount": 1, + "isPresale": 0 +} +``` + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
0:本话无需购买
1:没有足够的卡券使用次数
| +| msg | str | 错误信息 | | + +**示例:** + +```bash +curl -L -X POST 'https://manga.bilibili.com/twirp/comic.v1.Comic/BuyEpisode?platform=android' \ +-H 'Cookie: SESSDATA=xxx;' \ +-H 'Content-Type: application/json' \ +--data-raw '{ + "epId": 484366, + "buyMethod": 2, + "couponId": 7461430, + "autoPayGoldStatus": 2, + "isPresale": 0 +}' +``` + +
+购买成功: + +```json +{ + "code": 0, + "msg": "", + "data": { + "auto_use_item": "" + } +} +``` + +
+ +# 获取漫画详情 + +> https://manga.bilibili.com/twirp/comic.v1.Comic/ComicDetail + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| access_key | str | APP登录凭证 | 非必要 | 可不登录访问 | +| appkey | str | cc8617fd6961e070 | 非必要 | | +| mobi_app | str | android_comic | 非必要 | | +| version | str | 4.13.0 | 非必要 | | +| build | str | 36413002 | 非必要 | | +| channel | str | bilicomic | 非必要 | | +| platform | str | android | 非必要 | 可选值:web/android | +| device | str | android | 必要 | 如不填则不会获取ep_list信息,可选值:pc/android | +| buvid | str | | 非必要 | | +| machine | str | samsung+SM-G9730 | 非必要 | | +| is_teenager | num | 0 | 非必要 | | +| no_recommend | num | 0 | 非必要 | | +| ts | num | 秒级时间戳 | 非必要 | | + +**正文参数( application/json ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- | +| comicId | num | 漫画id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| id | num | 漫画id | | +| title | str | 漫画名称 | | +| comic_type | num | 0,1 | | +| page_default | num | 0,1,2,4,8 | | +| page_allow | num | | | +| horizontal_cover | str | 横板封面 | | +| square_cover | str | 方形封面 | | +| vertical_cover | str | 竖版封面 | | +| author_name | array | 作者列表 | | +| styles | array | | | +| last_ord | num | 最新一话序号 | | +| is_finish | num | 完结状态
0:未完结 1:已完结 | | +| status | num | -1,0 | | +| fav | num | | | +| read_order | num | | | +| evaluate | num | 漫画简介 | | +| total | num | 总话数 | | +| ep_list | array | 章节信息 | | +| release_time | str | | | +| is_limit | num | | | +| read_epid | num | | | +| last_read_time | str | | | +| is_download | num | | | +| read_short_title | str | | | +| styles2 | array | | | +| renewal_time | str | | | +| last_short_title | str | 最新一话短标题 | | +| discount_type | num | | | +| discount | num | | | +| discount_end | str | | | +| no_reward | bool | | | +| batch_discount_type | num | | | +| ep_discount_type | num | | | +| has_fav_activity | bool | | | +| fav_free_amount | num | | | +| allow_wait_free | bool | 是否等就免费 | | +| wait_hour | num | 等待时间(小时) | | +| wait_free_at | num | 等待时间(小时) | | +| no_danmaku | num | | | +| auto_pay_status | num | | | +| no_month_ticket | bool | | | +| immersive | bool | | | +| no_discount | bool | | | +| show_type | num | | | +| pay_mode | num | | | +| chapters | array | | | +| classic_lines | str | 漫画简介 | | +| pay_for_new | num | | | +| fav_comic_info | obj | | | +| serial_status | num | | | +| series_info | obj | | | +| album_count | num | | | +| wiki_id | num | | | +| disable_coupon_amount | num | | | +| japan_comic | bool |是否为日本漫画 | | +| interact_value | num | | | +| temporary_finish_time | str | | | +| video | | | | +| introduction | str | 介绍| | +| comment_status | num | | | +| no_screenshot | bool | | | +| type | num | | | +| vomic_cvs | array | | | +| no_rank | bool | | | +| presale_eps | array | | | +| presale_text | str | | | +| presale_discount | num | | | +| no_leaderboard | bool | | | + +`ep_list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| id | num | 章节id | | +| ord | num | 章节序号,最新章节排在前面 | | +| read | num | 是否阅读过,0:没有 1:阅读过 | | +| pay_mode | num | | | +| is_locked | bool | 是否处于锁定状态 | | +| pay_gold | num | 解锁所需漫币 | | +| size | num | 文件大小(字节) | | +| short_title | str | 短标题 | | +| is_in_free | bool | | | +| title | str | 标题 | | +| cover | str | 封面 | | +| pub_time | str | 发布日期 | | +| comments | num | 评论数 | | +| unlock_expire_at | str | | | +| unlock_type | num | | | +| allow_wait_free | bool | | | +| progress | str | | | +| like_count | num | 点赞数 | | +| chapter_id | num | | | +| type | num | | | +| extra | num | | | + +`styles2`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| id | num | 漫画风格id | | +| name | str | 漫画风格名称 | | + +`fav_comic_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| has_fav_activity | bool | | | +| fav_free_amount | num | | | +| fav_coupon_type | num | | | + +`series_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| id | num | | | +| comics | array | | | + +**示例:** + +```bash +curl -L -X POST 'https://manga.bilibili.com/twirp/comic.v1.Comic/ComicDetail?device=pc' \ +-H 'Content-Type: application/json' \ +--data-raw '{ + "comicId": 28500 +}' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "data": { + "id": 28500, + "title": "夏日重现", + "comic_type": 1, + "page_default": 4, + "page_allow": 15, + "horizontal_cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "square_cover": "http://i0.hdslb.com/bfs/manga-static/35fa9fa6190aa528f26f6e1341d9ee80b66b535f.jpg", + "vertical_cover": "https://i0.hdslb.com/bfs/manga-static/965cdb5c83e0b2066b4b60973ba7f4242f592967.jpg", + "author_name": [ + "田中靖规", + "集英社" + ], + "styles": [ + "悬疑灵异" + ], + "last_ord": 152, + "is_finish": 1, + "status": 0, + "fav": 0, + "read_order": 0, + "evaluate": "【此漫画的翻译由版权方提供】青梅竹马的潮死了——。听闻这个悲报,慎平回到了阔别已久的故乡和歌山市·日都岛与家人再会并出席葬礼。但是岛上貌似陡生异变,充斥着不寻常的气息……?\n夏日孤岛上的悬疑剧!!\n\n", + "total": 167, + "ep_list": [ + { + "id": 779804, + "ord": 152, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17973126, + "short_title": "后篇(4)", + "is_in_free": false, + "title": "2026未然凶宅-后篇(4)", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 218, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 458, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 779788, + "ord": 151, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17654401, + "short_title": "后篇(3)", + "is_in_free": false, + "title": "2026未然凶宅-后篇(3)", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 31, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 171, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 779782, + "ord": 150, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18250988, + "short_title": "后篇(2)", + "is_in_free": false, + "title": "2026未然凶宅-后篇(2)", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 39, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 179, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 779752, + "ord": 149, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19374429, + "short_title": "后篇(1)", + "is_in_free": false, + "title": "2026未然凶宅-后篇(1)", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 41, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 174, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 779751, + "ord": 148, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20993207, + "short_title": "前篇(3)", + "is_in_free": false, + "title": "2026未然凶宅-前篇(3)", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 52, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 187, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 779749, + "ord": 147, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17048075, + "short_title": "前篇(2)", + "is_in_free": false, + "title": "2026未然凶宅-前篇(2)", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 60, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 191, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 779748, + "ord": 146, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21462932, + "short_title": "前篇(1)", + "is_in_free": false, + "title": "2026未然凶宅-前篇(1)", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 151, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 233, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 546499, + "ord": 145, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 26980054, + "short_title": "139", + "is_in_free": false, + "title": "第139话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2021-02-01 12:00:00", + "comments": 1314, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 3241, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 543783, + "ord": 144, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 33822142, + "short_title": "138", + "is_in_free": false, + "title": "第138话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2021-01-25 12:00:00", + "comments": 232, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 514, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 539917, + "ord": 143, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20551895, + "short_title": "137", + "is_in_free": false, + "title": "第137话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2021-01-11 12:00:00", + "comments": 124, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 461, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 529960, + "ord": 142, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18729857, + "short_title": "136", + "is_in_free": false, + "title": "第136话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-12-28 12:00:00", + "comments": 112, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 432, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 526882, + "ord": 141, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 9528871, + "short_title": "135", + "is_in_free": false, + "title": "第135话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-12-21 12:00:00", + "comments": 64, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 397, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 524737, + "ord": 140, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 4658617, + "short_title": "记录", + "is_in_free": false, + "title": "023", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-12-14 12:00:00", + "comments": 63, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 368, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 520819, + "ord": 139, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19569820, + "short_title": "134", + "is_in_free": false, + "title": "第134话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-12-07 12:00:00", + "comments": 234, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 411, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 518563, + "ord": 138, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "133", + "is_in_free": false, + "title": "第133话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-11-30 12:00:00", + "comments": 52, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 404, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 516460, + "ord": 137, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 16923412, + "short_title": "132", + "is_in_free": false, + "title": "第132话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-11-23 12:00:00", + "comments": 66, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 408, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 513494, + "ord": 136, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22397411, + "short_title": "131", + "is_in_free": false, + "title": "第131话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-11-16 00:00:00", + "comments": 73, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 385, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 509309, + "ord": 135, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 11417949, + "short_title": "130", + "is_in_free": false, + "title": "第130话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-11-02 12:00:00", + "comments": 121, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 415, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 507403, + "ord": 134, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 13421937, + "short_title": "129", + "is_in_free": false, + "title": "第129话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-26 00:00:00", + "comments": 108, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 382, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 505464, + "ord": 133, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "128", + "is_in_free": false, + "title": "第128话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 101, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 414, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 504084, + "ord": 132, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 714738, + "short_title": "记录", + "is_in_free": false, + "title": "022", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 38, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 327, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 503749, + "ord": 131, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 13733489, + "short_title": "127", + "is_in_free": false, + "title": "第127话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 87, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 383, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 498378, + "ord": 130, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "126", + "is_in_free": false, + "title": "第126话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 83, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 392, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 496100, + "ord": 129, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17044238, + "short_title": "125", + "is_in_free": false, + "title": "第125话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 59, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 378, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494999, + "ord": 128, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19000950, + "short_title": "124", + "is_in_free": false, + "title": "第124话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 53, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 369, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494997, + "ord": 127, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 757788, + "short_title": "记录", + "is_in_free": false, + "title": "021", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 73, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 295, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494996, + "ord": 126, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 25583325, + "short_title": "123", + "is_in_free": false, + "title": "第123话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 88, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 341, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494995, + "ord": 125, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22945986, + "short_title": "122", + "is_in_free": false, + "title": "第122话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 114, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 382, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494994, + "ord": 124, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22007815, + "short_title": "121", + "is_in_free": false, + "title": "第121话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 60, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 336, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494992, + "ord": 123, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 14200387, + "short_title": "120", + "is_in_free": false, + "title": "第120话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 98, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 349, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494990, + "ord": 122, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20253075, + "short_title": "119", + "is_in_free": false, + "title": "第119话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 153, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 352, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494986, + "ord": 121, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 34545559, + "short_title": "118", + "is_in_free": false, + "title": "第118话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 97, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 353, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494983, + "ord": 120, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 26875814, + "short_title": "117", + "is_in_free": false, + "title": "第117话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 38, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 326, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494982, + "ord": 119, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 24302773, + "short_title": "116", + "is_in_free": false, + "title": "第116话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 60, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 311, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494981, + "ord": 118, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22563845, + "short_title": "115", + "is_in_free": false, + "title": "第115话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 103, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 332, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494979, + "ord": 117, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 26357441, + "short_title": "114", + "is_in_free": false, + "title": "第114话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 190, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 325, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494978, + "ord": 116, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 3055913, + "short_title": "记录", + "is_in_free": false, + "title": "020", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 27, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 303, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494977, + "ord": 115, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 27213199, + "short_title": "113", + "is_in_free": false, + "title": "第113话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 131, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 344, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494876, + "ord": 114, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 27036215, + "short_title": "112", + "is_in_free": false, + "title": "第112话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 84, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 306, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494872, + "ord": 113, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18077367, + "short_title": "111", + "is_in_free": false, + "title": "第111话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 66, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 317, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494852, + "ord": 112, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 6547152, + "short_title": "记录", + "is_in_free": false, + "title": "019", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 20, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 286, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494849, + "ord": 111, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17709563, + "short_title": "110", + "is_in_free": false, + "title": "第110话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 42, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 326, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494848, + "ord": 110, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "109", + "is_in_free": false, + "title": "第109话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 42, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 325, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494847, + "ord": 109, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20356850, + "short_title": "108", + "is_in_free": false, + "title": "第108话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 52, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 322, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494846, + "ord": 108, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21075013, + "short_title": "107", + "is_in_free": false, + "title": "第107话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 29, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 314, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494698, + "ord": 107, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19078032, + "short_title": "106", + "is_in_free": false, + "title": "第106话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 81, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 320, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494696, + "ord": 106, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21291294, + "short_title": "105", + "is_in_free": false, + "title": "第105话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 56, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 350, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494691, + "ord": 105, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22030863, + "short_title": "104", + "is_in_free": false, + "title": "第104话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 56, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 305, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494690, + "ord": 104, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17400960, + "short_title": "103", + "is_in_free": false, + "title": "第103话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 33, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 304, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494688, + "ord": 103, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "102", + "is_in_free": false, + "title": "第102话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 53, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 329, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552061, + "ord": 102.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1922541, + "short_title": "记录", + "is_in_free": false, + "title": "018", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 8, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 30, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494682, + "ord": 102, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20268719, + "short_title": "101", + "is_in_free": false, + "title": "第101话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 92, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 317, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494666, + "ord": 101, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17542840, + "short_title": "100", + "is_in_free": false, + "title": "第100话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 48, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 323, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494665, + "ord": 100, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 27598387, + "short_title": "99", + "is_in_free": false, + "title": "第99话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 109, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 350, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494664, + "ord": 99, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 24852154, + "short_title": "98", + "is_in_free": false, + "title": "第98话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 64, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 326, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494663, + "ord": 98, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20721168, + "short_title": "97", + "is_in_free": false, + "title": "第97话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 57, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 309, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494656, + "ord": 97, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 15000137, + "short_title": "96", + "is_in_free": false, + "title": "第96话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 126, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 339, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552060, + "ord": 96.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 3910437, + "short_title": "记录", + "is_in_free": false, + "title": "017", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 5, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 30, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494650, + "ord": 96, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 25062481, + "short_title": "95", + "is_in_free": false, + "title": "第95话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 89, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 360, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494645, + "ord": 95, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19376143, + "short_title": "94", + "is_in_free": false, + "title": "第94话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 82, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 397, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494638, + "ord": 94, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 34661163, + "short_title": "93", + "is_in_free": false, + "title": "第93话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 64, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 352, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494637, + "ord": 93, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 33798923, + "short_title": "92", + "is_in_free": false, + "title": "第92话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 55, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 350, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494632, + "ord": 92, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19784232, + "short_title": "91", + "is_in_free": false, + "title": "第91话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 81, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 387, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494627, + "ord": 91, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18532096, + "short_title": "90", + "is_in_free": false, + "title": "第90话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 121, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 371, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 494009, + "ord": 90, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19527018, + "short_title": "89", + "is_in_free": false, + "title": "第89话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 57, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 330, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552059, + "ord": 89.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 2034891, + "short_title": "记录", + "is_in_free": false, + "title": "016", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 14, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 33, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 493979, + "ord": 89, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18494693, + "short_title": "88", + "is_in_free": false, + "title": "第88话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 87, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 351, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 493950, + "ord": 88, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17416462, + "short_title": "87", + "is_in_free": false, + "title": "第87话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 71, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 343, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 493944, + "ord": 87, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "86", + "is_in_free": false, + "title": "第86话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 88, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 357, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552058, + "ord": 86.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 4837743, + "short_title": "记录", + "is_in_free": false, + "title": "015", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-10 00:00:00", + "comments": 9, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 42, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491230, + "ord": 86, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21039936, + "short_title": "85", + "is_in_free": false, + "title": "第85话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 59, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 319, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491229, + "ord": 85, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 14463535, + "short_title": "84", + "is_in_free": false, + "title": "第84话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 87, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 344, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552057, + "ord": 84.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 11625156, + "short_title": "记录", + "is_in_free": false, + "title": "014", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-10 00:00:00", + "comments": 12, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 46, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491228, + "ord": 84, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 15900351, + "short_title": "83", + "is_in_free": false, + "title": "第83话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 71, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 347, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491227, + "ord": 83, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19182670, + "short_title": "82", + "is_in_free": false, + "title": "第82话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 67, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 355, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491226, + "ord": 82, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18627336, + "short_title": "81", + "is_in_free": false, + "title": "第81话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 45, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 347, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491225, + "ord": 81, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 15574642, + "short_title": "80", + "is_in_free": false, + "title": "第80话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 51, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 346, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491224, + "ord": 80, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 24885059, + "short_title": "79", + "is_in_free": false, + "title": "第79话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 79, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 350, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491223, + "ord": 79, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22427296, + "short_title": "78", + "is_in_free": false, + "title": "第78话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 80, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 356, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552056, + "ord": 78.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1551067, + "short_title": "记录", + "is_in_free": false, + "title": "013", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 5, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 38, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491222, + "ord": 78, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18725322, + "short_title": "77", + "is_in_free": false, + "title": "第77话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 100, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 354, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491221, + "ord": 77, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 16185606, + "short_title": "76", + "is_in_free": false, + "title": "第76话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 59, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 341, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491220, + "ord": 76, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18886387, + "short_title": "75", + "is_in_free": false, + "title": "第75话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 88, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 370, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491215, + "ord": 75, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19228812, + "short_title": "74", + "is_in_free": false, + "title": "第74话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 106, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 343, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552054, + "ord": 74.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1106084, + "short_title": "记录", + "is_in_free": false, + "title": "012", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 9, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 43, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491214, + "ord": 74, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17213820, + "short_title": "73", + "is_in_free": false, + "title": "第73话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 105, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 358, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552053, + "ord": 73.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1510250, + "short_title": "记录", + "is_in_free": false, + "title": "011", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-10 00:00:00", + "comments": 7, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 46, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491213, + "ord": 73, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 12514556, + "short_title": "72", + "is_in_free": false, + "title": "第72话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 38, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 356, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491212, + "ord": 72, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 24337518, + "short_title": "71", + "is_in_free": false, + "title": "第71话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 45, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 353, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491211, + "ord": 71, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22329539, + "short_title": "70", + "is_in_free": false, + "title": "第70话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 45, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 343, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491210, + "ord": 70, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 12721444, + "short_title": "69", + "is_in_free": false, + "title": "第69话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 59, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 363, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491209, + "ord": 69, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 14948018, + "short_title": "68", + "is_in_free": false, + "title": "第68话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 48, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 363, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491208, + "ord": 68, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19604576, + "short_title": "67", + "is_in_free": false, + "title": "第67话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 97, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 370, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491207, + "ord": 67, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18529368, + "short_title": "66", + "is_in_free": false, + "title": "第66话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 136, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 386, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491206, + "ord": 66, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19616688, + "short_title": "65", + "is_in_free": false, + "title": "第65话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 79, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 350, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 491205, + "ord": 65, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17889729, + "short_title": "64", + "is_in_free": false, + "title": "第64话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 77, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 369, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552052, + "ord": 64.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1729726, + "short_title": "记录", + "is_in_free": false, + "title": "010", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-10 00:00:00", + "comments": 47, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 47, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485887, + "ord": 64, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 24816564, + "short_title": "63", + "is_in_free": false, + "title": "第63话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 96, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 363, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485886, + "ord": 63, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21990493, + "short_title": "62", + "is_in_free": false, + "title": "第62话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 161, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 377, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485885, + "ord": 62, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 16121252, + "short_title": "61", + "is_in_free": false, + "title": "第61话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 35, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 338, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485884, + "ord": 61, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 23868117, + "short_title": "60", + "is_in_free": false, + "title": "第60话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 54, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 353, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485883, + "ord": 60, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 14907334, + "short_title": "59", + "is_in_free": false, + "title": "第59话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 57, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 360, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485882, + "ord": 59, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21003716, + "short_title": "58", + "is_in_free": false, + "title": "第58话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 49, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 362, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485881, + "ord": 58, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21336454, + "short_title": "57", + "is_in_free": false, + "title": "第57话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 43, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 335, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485880, + "ord": 57, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 15975510, + "short_title": "56", + "is_in_free": false, + "title": "第56话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 43, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 346, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485879, + "ord": 56, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 16073891, + "short_title": "55", + "is_in_free": false, + "title": "第55话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 48, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 352, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552051, + "ord": 55.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1380370, + "short_title": "记录", + "is_in_free": false, + "title": "009", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 8, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 49, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485878, + "ord": 55, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 13480749, + "short_title": "54", + "is_in_free": false, + "title": "第54话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 56, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 357, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485877, + "ord": 54, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21882584, + "short_title": "53", + "is_in_free": false, + "title": "第53话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 38, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 372, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485853, + "ord": 53, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 23862198, + "short_title": "52", + "is_in_free": false, + "title": "第52话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 56, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 388, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485852, + "ord": 52, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 23267613, + "short_title": "51", + "is_in_free": false, + "title": "第51话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 43, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 370, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485851, + "ord": 51, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17028529, + "short_title": "50", + "is_in_free": false, + "title": "第50话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 63, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 380, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485850, + "ord": 50, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21963399, + "short_title": "49", + "is_in_free": false, + "title": "第49话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 122, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 418, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552050, + "ord": 49.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1650224, + "short_title": "记录", + "is_in_free": false, + "title": "008", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 15, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 57, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485849, + "ord": 49, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "48", + "is_in_free": false, + "title": "第48话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 71, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 392, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485848, + "ord": 48, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18582327, + "short_title": "47", + "is_in_free": false, + "title": "第47话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 64, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 401, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485847, + "ord": 47, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 28025152, + "short_title": "46", + "is_in_free": false, + "title": "第46话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 78, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 444, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485846, + "ord": 46, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18644930, + "short_title": "45", + "is_in_free": false, + "title": "第45话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 27, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 402, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485845, + "ord": 45, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17555220, + "short_title": "44", + "is_in_free": false, + "title": "第44话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 71, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 418, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485844, + "ord": 44, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 23713922, + "short_title": "43", + "is_in_free": false, + "title": "第43话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 41, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 392, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485842, + "ord": 43, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22048242, + "short_title": "42", + "is_in_free": false, + "title": "第42话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 36, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 400, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485841, + "ord": 42, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17956496, + "short_title": "41", + "is_in_free": false, + "title": "第41话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 45, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 423, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485840, + "ord": 41, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20461324, + "short_title": "40", + "is_in_free": false, + "title": "第40话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 102, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 441, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485839, + "ord": 40, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 16463871, + "short_title": "39", + "is_in_free": false, + "title": "第39话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 38, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 404, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485836, + "ord": 39, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18664684, + "short_title": "38", + "is_in_free": false, + "title": "第38话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 42, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 403, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485835, + "ord": 38, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17811979, + "short_title": "37", + "is_in_free": false, + "title": "第37话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 46, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 422, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552049, + "ord": 37.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 4923840, + "short_title": "记录", + "is_in_free": false, + "title": "005~007", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 9, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 59, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485834, + "ord": 37, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22221360, + "short_title": "36", + "is_in_free": false, + "title": "第36话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 78, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 410, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485833, + "ord": 36, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19204738, + "short_title": "35", + "is_in_free": false, + "title": "第35话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 42, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 397, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485832, + "ord": 35, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17688181, + "short_title": "34", + "is_in_free": false, + "title": "第34话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 43, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 407, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485831, + "ord": 34, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 14314953, + "short_title": "33", + "is_in_free": false, + "title": "第33话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 138, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 430, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 485826, + "ord": 33, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 15190983, + "short_title": "32", + "is_in_free": false, + "title": "第32话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 80, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 409, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484535, + "ord": 32, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21701429, + "short_title": "31", + "is_in_free": false, + "title": "第31话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 81, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 408, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484534, + "ord": 31, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 15619952, + "short_title": "30", + "is_in_free": false, + "title": "第30话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 61, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 429, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484528, + "ord": 30, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18250579, + "short_title": "29", + "is_in_free": false, + "title": "第29话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 60, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 435, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484526, + "ord": 29, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 27051218, + "short_title": "28", + "is_in_free": false, + "title": "第28话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 59, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 406, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484514, + "ord": 28, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "27", + "is_in_free": false, + "title": "第27话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 63, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 420, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484507, + "ord": 27, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17113482, + "short_title": "26", + "is_in_free": false, + "title": "第26话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 98, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 447, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484500, + "ord": 26, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 14359689, + "short_title": "25", + "is_in_free": false, + "title": "第25话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 63, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 407, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484483, + "ord": 25, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 15182223, + "short_title": "24", + "is_in_free": false, + "title": "第24话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 55, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 421, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484478, + "ord": 24, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20914179, + "short_title": "23", + "is_in_free": false, + "title": "第23话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 75, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 447, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484474, + "ord": 23, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 17764811, + "short_title": "22", + "is_in_free": false, + "title": "第22话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 65, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 434, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484461, + "ord": 22, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 27296421, + "short_title": "21", + "is_in_free": false, + "title": "第21话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 51, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 441, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484443, + "ord": 21, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 15462050, + "short_title": "记录", + "is_in_free": false, + "title": "004", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 115, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 455, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484433, + "ord": 20, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20824911, + "short_title": "20", + "is_in_free": false, + "title": "第20话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 127, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 497, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484422, + "ord": 19, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 25714866, + "short_title": "19", + "is_in_free": false, + "title": "第19话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 106, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 537, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484395, + "ord": 18, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 24927577, + "short_title": "18", + "is_in_free": false, + "title": "第18话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 94, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 527, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484387, + "ord": 17, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 0, + "short_title": "17", + "is_in_free": false, + "title": "第17话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 48, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 493, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484377, + "ord": 16, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 19775909, + "short_title": "16", + "is_in_free": false, + "title": "第16话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 70, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 503, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552046, + "ord": 15.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 3261603, + "short_title": "记录", + "is_in_free": false, + "title": "003", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2021-02-18 13:17:06", + "comments": 39, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 385, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484376, + "ord": 15, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 23101595, + "short_title": "15", + "is_in_free": false, + "title": "第15话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 97, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 510, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484375, + "ord": 14, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 21456269, + "short_title": "14", + "is_in_free": false, + "title": "第14话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 130, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 510, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484373, + "ord": 13, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 22942430, + "short_title": "13", + "is_in_free": false, + "title": "第13话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 64, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 522, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484372, + "ord": 12, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20225389, + "short_title": "12", + "is_in_free": false, + "title": "第12话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 67, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 499, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552048, + "ord": 11.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1569935, + "short_title": "记录", + "is_in_free": false, + "title": "002", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 10, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 52, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484369, + "ord": 11, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18897621, + "short_title": "11", + "is_in_free": false, + "title": "第11话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 82, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 566, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484367, + "ord": 10, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 28021344, + "short_title": "10", + "is_in_free": false, + "title": "第10话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 65, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 519, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484366, + "ord": 9, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 14198049, + "short_title": "9", + "is_in_free": false, + "title": "第9话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 72, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 544, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484365, + "ord": 8, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 14137875, + "short_title": "8", + "is_in_free": false, + "title": "第8话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 92, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 575, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 552047, + "ord": 7.5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 1794952, + "short_title": "记录", + "is_in_free": false, + "title": "001", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2022-05-12 00:00:00", + "comments": 23, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 80, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484360, + "ord": 7, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 20283011, + "short_title": "7", + "is_in_free": false, + "title": "第7话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 83, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 589, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484351, + "ord": 6, + "read": 0, + "pay_mode": 1, + "is_locked": true, + "pay_gold": 49, + "size": 18898536, + "short_title": "6", + "is_in_free": false, + "title": "第6话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 43, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 626, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484350, + "ord": 5, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 18623472, + "short_title": "5", + "is_in_free": false, + "title": "第5话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 86, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 1017, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484347, + "ord": 4, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 15209423, + "short_title": "4", + "is_in_free": false, + "title": "第4话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 85, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 976, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484345, + "ord": 3, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 15210025, + "short_title": "3", + "is_in_free": false, + "title": "第3话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 72, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 972, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484344, + "ord": 2, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 26269998, + "short_title": "2", + "is_in_free": false, + "title": "第2话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 147, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 1001, + "chapter_id": 0, + "type": 0, + "extra": 0 + }, + { + "id": 484342, + "ord": 1, + "read": 0, + "pay_mode": 0, + "is_locked": false, + "pay_gold": 0, + "size": 81495763, + "short_title": "1", + "is_in_free": false, + "title": "第1话", + "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg", + "pub_time": "2020-10-21 00:00:00", + "comments": 407, + "unlock_expire_at": "0000-00-00 00:00:00", + "unlock_type": 0, + "allow_wait_free": false, + "progress": "", + "like_count": 1283, + "chapter_id": 0, + "type": 0, + "extra": 0 + } + ], + "release_time": "2020.10.21", + "is_limit": 0, + "read_epid": 0, + "last_read_time": "", + "is_download": 1, + "read_short_title": "", + "styles2": [ + { + "id": 1081, + "name": "悬疑灵异" + } + ], + "renewal_time": "", + "last_short_title": "后篇(4)", + "discount_type": 0, + "discount": 0, + "discount_end": "0001-01-01 00:00:00", + "no_reward": false, + "batch_discount_type": 0, + "ep_discount_type": 0, + "has_fav_activity": false, + "fav_free_amount": 0, + "allow_wait_free": false, + "wait_hour": 0, + "wait_free_at": "0000-00-00 00:00:00", + "no_danmaku": 0, + "auto_pay_status": 0, + "no_month_ticket": false, + "immersive": false, + "no_discount": false, + "show_type": 0, + "pay_mode": 1, + "chapters": [], + "classic_lines": "【此漫画的翻译由版权方提供】青梅竹马的潮死了——。听闻这个悲报,慎平回到了阔别已久的故乡和歌山市·日都岛与家人再会并出席葬礼。但是岛上貌似陡生异变,充斥着不寻常的气息……?\n夏日孤岛上的悬疑剧!!\n\n", + "pay_for_new": 0, + "fav_comic_info": { + "has_fav_activity": false, + "fav_free_amount": 0, + "fav_coupon_type": 0 + }, + "serial_status": 0, + "series_info": { + "id": 0, + "comics": [] + }, + "album_count": 0, + "wiki_id": 131075, + "disable_coupon_amount": 2, + "japan_comic": true, + "interact_value": "57514", + "temporary_finish_time": "", + "video": null, + "introduction": "最聪明的男主打最聪明的反派!", + "comment_status": 1, + "no_screenshot": true, + "type": 0, + "vomic_cvs": [], + "no_rank": true, + "presale_eps": [], + "presale_text": "", + "presale_discount": 0, + "no_leaderboard": true + } +} +``` + +
diff --git a/docs/manga/Download.md b/docs/manga/Download.md new file mode 100644 index 0000000..fea8a8f --- /dev/null +++ b/docs/manga/Download.md @@ -0,0 +1,256 @@ +# 获取当前话全部图片地址 + +> https://manga.bilibili.com/twirp/comic.v1.Comic/GetImageIndex + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| access_key | str | APP登录凭证 | 必要 | 使用APP鉴权方式时必填 | +| appkey | str | cc8617fd6961e070 | 非必要 | | +| mobi_app | str | android_comic | 非必要 | | +| version | str | 4.21.0 | 非必要 | | +| build | str | 36421000 | 非必要 | | +| channel | str | bilicomic | 非必要 | | +| platform | str | android | 非必要 | | +| device | str | android | 非必要 | | +| buvid | str | XY118701XXXXXXXXX104911DXXXXXCAEXXXXE | 非必要 | 长度为37 | +| machine | str | | 非必要 | 手机品牌+型号 | +| is_teenager | num | 0 | 非必要 | | +| no_recommend | num | 0 | 非必要 | | +| ts | num | 秒级时间戳 | 非必要 | + +**正文参数( application/json ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- | +| epId(ep_id) | num | 当前话的id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | | +| data | obj | | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| path | str | .index 文件路径 | | +| images | array | 本话图片信息 | | +| last_modified | str | 本话信息最后修改时间 | | +| host | str | `https://manga.hdslb.com` | | +| video | obj | | | + +`images` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| path | str | 图片的路径 | 不包含host | +| x | num | 图片宽度 | 单位:像素px | +| y | num | 图片高度 | 单位:像素px | +| video_path | str | | | +| video_size | str | | | + +`video` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| svid | str | | | +| filename | str | | | +| route | str | | | +| resource | array | | | +| raw_width | str | | | +| raw_height | str | | | +| raw_rotate | str | | | +| img_urls | array | | | +| bin_url | str | | | +| img_x_len | num | | | +| img_x_size | num | | | +| img_y_len | num | | | +| img_y_size | num | | | + + +**示例:** + +```bash +curl -L -X POST 'https://manga.bilibili.com/twirp/comic.v1.Comic/GetImageIndex' \ +-H 'Cookie: SESSDATA=xxx;' \ +-H 'Content-Type: application/json' \ +--data-raw '{ + "ep_id": 321912 +}' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "msg": "", + "data": { + "path": "/bfs/manga/26564/321912/data.index?token=80eab62fef85c1c134a6399f817a938f&ts=63404145", + "images": [ + { + "path": "/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg", + "x": 1600, + "y": 2268, + "video_path": "", + "video_size": "0" + }, + { + "path": "/bfs/manga/bf1c48540b68f473b429317d8f6fa8cdb6eed3a5.jpg", + "x": 1600, + "y": 2268, + "video_path": "", + "video_size": "0" + }, + { + "path": "/bfs/manga/a46cfe90cfb49c67a4dbfc0002e5bc3d87d02963.jpg", + "x": 1600, + "y": 2268, + "video_path": "", + "video_size": "0" + } + ], + "last_modified": "2019-05-13 21:15:53", + "host": "https://manga.hdslb.com", + "video": { + "svid": "", + "filename": "", + "route": "", + "resource": [], + "raw_width": "0", + "raw_height": "0", + "raw_rotate": "0", + "img_urls": [], + "bin_url": "", + "img_x_len": 10, + "img_x_size": 160, + "img_y_len": 10, + "img_y_size": 90 + } + } +} +``` + +
+ +# 获取某一图片的token + +> https://manga.bilibili.com/twirp/comic.v1.Comic/ImageToken + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------------------- | ------ | --------------------- | +| access_key | str | APP登录凭证 | 必要 | 使用APP鉴权方式时必填 | +| appkey | str | cc8617fd6961e070 | 非必要 | | +| mobi_app | str | android_comic | 非必要 | | +| version | str | 4.21.0 | 非必要 | | +| build | str | 36421000 | 非必要 | | +| channel | str | bilicomic | 非必要 | | +| platform | str | android | 非必要 | | +| device | str | android | 非必要 | | +| buvid | str | XY118701XXXXXXXXX104911DXXXXXCAEXXXXE | 非必要 | 长度为37 | +| machine | str | samsung+SM-G9730 | 非必要 | 手机品牌+型号 | +| is_teenager | num | 0 | 非必要 | | +| no_recommend | num | 0 | 非必要 | | +| ts | num | 秒级时间戳 | 非必要 | | + +**正文参数( application/json ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------- | ------ | ------------------------------------------------------------ | +| urls | str | 请求token的图片地址 | 必要 | `[\"https://i0.hdslb.com{path}\"]`
{path}代表图片的相对网站路径,支持jpg和webp | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | | +| data | array | | | + +`data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------------- | ------------------------------------ | +| url | str | 图片下载的地址 | 此时网址开头 https://manga.hdslb.com | +| token | str | 图片下载需要的token | | + +**示例:** + +```bash +curl -L -X POST 'https://manga.bilibili.com/twirp/comic.v1.Comic/ImageToken' \ +-H 'Cookie: SESSDATA=xxx;' \ +-H 'Content-Type: application/json' \ +--data-raw '{ + "urls": "[\"https://i0.hdslb.com/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg\"]" +}' +``` + +
+查看响应示例: + + + +```json +{ + "code": 0, + "msg": "", + "data": [ + { + "url": "https://manga.hdslb.com/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg", + "token": "36931815abb35857627a22c347dc1c86&ts=634045c2" + } + ] +} +``` + +
+ +# 下载图片 + +*请求方式:GET* + +在上一步获取token的基础上,构建如下的url + +例如获取到此token + +``` +{ + "code": 0, + "msg": "", + "data": [ + { + "url": "https://manga.hdslb.com/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg", + "token": "36931815abb35857627a22c347dc1c86&ts=634045c2" + } + ] +} +``` + +则访问以下网址即可,注意需要添加`?token=`。此网址有效期较短 + +``` +https://manga.hdslb.com/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg?token=36931815abb35857627a22c347dc1c86&ts=634045c2 +``` + +**注**:若不加取图 Token 直接访问 `https://(i0|i1).hdslb.com/bfs/(manga|new_dyn|archive)/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg`均无法获取 diff --git a/docs/manga/Season.md b/docs/manga/Season.md new file mode 100644 index 0000000..7f59df6 --- /dev/null +++ b/docs/manga/Season.md @@ -0,0 +1,435 @@ +# 漫画赛季 + +**注**:漫画赛季仅在 app 端可见,但可以使用 Cookie 鉴权 + +## 获取赛季信息 + +> https://manga.bilibili.com/twirp/user.v1.Season/GetSeasonInfo + +*请求方式:POST* + +**注**:接口不鉴权可查看基本信息,鉴权后可查看赛季个人信息和赛季规则。 + +认证方式:Cookie(SESSDATA)/ APP + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| code | num | 返回值 | | +| msg | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ----- | ------------------ | -------------------------- | +| current_time | str | 当前时间字符串 | ISO 8601 | +| start_time | str | 赛季开始 | ISO 8601 | +| end_time | str | 赛季结束 | ISO 8601 | +| remain_amount | num | 拥有积分 | 未登录为 `0` | +| season_id | str | 第几个赛季 | | +| tasks | array | 待领取奖励的任务 | 未登录/没有可领取时为 `[]` | +| welfare | array | 赛季奖励 | | +| next | obj | 未知 | 未登录为 `null` | +| cover | str | 版头图片 | | +| today_tasks | array | 今日的任务完成情况 | | +| text | obj | 赛季相关文案 | 未登录为 `null` | +| season_clock_in | obj | | | +| announcement | obj | 未知 | 未登录为 `null` | +| lottery | obj | | | +| mission_point_rate | str | | | +| season_title | str | 赛季标题 | | +| point_rate | obj | | | +| rank | obj | | | + +`data` 对象的 `rank`: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ----- | ---- | +| is_visible | bool | false | | + +`data` 对象的 `tasks`: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ---------- | ----------------------- | +| title | str | 任务描述 | | +| id | str | | | +| status | num | 任务状态 | 应该都是`1`:待领取奖励 | +| type | num | | 与 today_tasks 的一致 | +| amount | num | 可获取积分 | | +| ctime | str | 完成时间 | ISO 8601 | + +`data` 对象的 `next`: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---- | ---- | +| title | str | 空 | | +| amount | num | 0 | | +| gap_time | num | 0 | | +| current_time | num | 0 | | + +`data` 对象的 `text`: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | ---- | +| notice | str | 赛季公告 | | +| clonckInRule | str | 赛季签到规则 | | + +`data` 对象的 `announcement`: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----- | ---- | +| title | str | 空 | | +| jump_url | str | 空 | | +| enable | bool | false | | + +`data` 对象的 `point_rate`: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ---- | ---- | +| sign_in | num | 0 | | +| game | num | 0 | | +| daily_mission | num | 0 | | +| week_mission | num | 0 | | + +`data` 对象的 `lottery`: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------------- | ---- | ------------ | ---- | +| lottery_act_id | str | '0' | | +| enable_lottery | bool | 是否开启抽奖 | | +| lottery_id | str | '0' | | +| advance_lottery_act_id | str | '0' | | +| advance_pool_id | str | '0' | | + +`data` 对象的 `season_clock_in`: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ---------------- | ---- | +| is_super_luck | bool | | | +| draw_luck_time | str | | | +| prize_type | num | | | +| prize_title | str | | | +| add_up_sign | num | 赛季连续签到天数 | | +| title | str | 签到标题 | | +| sign_old_amount | num | | | +| preluck_amount | num | | | +| continuous_days | num | 连续签到天数 | | +| address_id | str | | | +| has_super_prize | bool | | | +| subtitle | str | 签到子标题 | | +| prize_image | str | | | +| prize_target_days | num | | | +| prize_amount | num | | | +| tomorrow_amount | num | 明日签到积分 | | +| entrance_tag | str | | | + +`data` 对象的 `today_tasks`: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---------- | ------------ | ------------------------------------------- | +| type | num | | | +| title | str | 任务标题 | 可能为空字符串 | +| amount | num | 可获得积分 | | +| status | num | 完成状态 | 0:未完成
1:待领取奖励
2:已完成 | +| duration | num | 耗时(分) | 直接完成的为 0 | +| comics | comic 数组 | 任务指定漫画 | 仅`type=22`时有内容,所有账号是一致的 | +| page_url | str | 空 | | +| progress | num | 已完成进度 | | +| sub_id | num | | `type` 一致时有效 | +| share_type | num | `0` | | + +`today_tasks`对象的 `comics`: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | -------- | -------- | ---- | +| comic_id | num | 漫画 id | | +| title | str | 漫画名称 | | +| vertical_cover | str | 漫画封面 | | +| styles | str 数组 | 漫画类型 | | + +`data` 对象的 `welfare`: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------ | --------------------------------------------------------- | +| type | num | 奖励类型 | 200-限免卡
202-漫读券
203-优惠券
205-最终宝箱 | +| success | num | 兑换状态 | 0-未兑换
2-已兑换 | +| exchange_amount | num | 积分消耗 | | +| boss_welfare | bool | 最终奖励 | | +| boss_remain | num | 最终奖励剩余 | | +| rank | num | 顺序 | | +| title | str | 空 | | +| url | str | 空 | | +| kind_address_id | str | '0' | | + +**示例:** + +```bash +curl -X POST https://manga.bilibili.com/twirp/user.v1.Season/GetSeasonInfo +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "data": { + "current_time": "2022-11-30T15:12:00+08:00", + "start_time": "2022-11-14T00:00:00+08:00", + "end_time": "2022-12-11T23:59:00+08:00", + "remain_amount": 0, + "season_id": "35", + "tasks": [], + "welfare": [ + { + "type": 200, + "success": 0, + "exchange_amount": 100, + "boss_welfare": false, + "boss_remain": 0, + "rank": 1, + "title": "", + "url": "", + "kind_address_id": "0" + }, + // 中间的省略 + { + "type": 205, + "success": 0, + "exchange_amount": 0, + "boss_welfare": true, + "boss_remain": 0, + "rank": 21, + "title": "", + "url": "", + "kind_address_id": "0" + } + ], + "next": null, + "cover": "https://i0.hdslb.com/bfs/manga-static/b81fcd291cff74965b71d67e7df261de5790c2cd.png", + "today_tasks": [ + { + "type": 18, + "title": "", + "amount": 20, + "status": 0, + "duration": 30, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 1, + "share_type": 0 + }, + { + "type": 20, + "title": "", + "amount": 20, + "status": 0, + "duration": 3, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 1, + "share_type": 0 + }, + { + "type": 22, + "title": "", + "amount": 50, + "status": 0, + "duration": 15, + "comics": [ + { + "comic_id": 32190, + "title": "我的成就有点多", + "vertical_cover": "https://i0.hdslb.com/bfs/manga-static/efc403e323656fad24335aef007af5f318879597.png", + "styles": ["都市"] + }, + { + "comic_id": 30538, + "title": "我知道你的秘密", + "vertical_cover": "https://i0.hdslb.com/bfs/manga-static/607f2c13afcf82ebba98f18213033d93bba7d58a.jpg", + "styles": ["悬疑"] + }, + { + "comic_id": 25874, + "title": "桃花宝典", + "vertical_cover": "http://i0.hdslb.com/bfs/manga-static/bb1d33004af7dfbf197572cb9ef1c5fdd19e17a8.jpg", + "styles": ["都市"] + } + ], + "page_url": "", + "progress": 0, + "sub_id": 1, + "share_type": 0 + }, + { + "type": 17, + "title": "阅读3分钟", + "amount": 10, + "status": 0, + "duration": 3, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 1, + "share_type": 0 + }, + { + "type": 17, + "title": "阅读5分钟", + "amount": 10, + "status": 0, + "duration": 5, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 2, + "share_type": 0 + }, + { + "type": 17, + "title": "阅读10分钟", + "amount": 20, + "status": 0, + "duration": 10, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 3, + "share_type": 0 + }, + { + "type": 17, + "title": "阅读20分钟", + "amount": 40, + "status": 0, + "duration": 20, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 4, + "share_type": 0 + }, + { + "type": 17, + "title": "阅读30分钟", + "amount": 60, + "status": 0, + "duration": 30, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 5, + "share_type": 0 + }, + { + "type": 19, + "title": "每日首次玩猜拳", + "amount": 5, + "status": 0, + "duration": 1, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 1, + "share_type": 0 + }, + { + "type": 1, + "title": "打开系统通知", + "amount": 5, + "status": 0, + "duration": 0, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 0, + "share_type": 0 + }, + { + "type": 2, + "title": "设置个人偏好", + "amount": 5, + "status": 0, + "duration": 0, + "comics": [], + "page_url": "", + "progress": 0, + "sub_id": 0, + "share_type": 0 + } + ], + "text": null, + "season_clock_in": { + "is_super_luck": false, + "draw_luck_time": "", + "prize_type": 0, + "prize_title": "", + "add_up_sign": 0, + "title": "", + "sign_old_amount": 0, + "preluck_amount": 0, + "continuous_days": 0, + "address_id": "0", + "has_super_prize": false, + "subtitle": "", + "prize_image": "", + "prize_target_days": 0, + "prize_amount": 0, + "tomorrow_amount": 0, + "entrance_tag": "" + }, + "announcement": null, + "lottery": { + "lottery_act_id": "0", + "enable_lottery": true, + "lottery_id": "0", + "advance_lottery_act_id": "0", + "advance_pool_id": "0" + }, + "mission_point_rate": 0, + "season_title": "初冬赛季", + "point_rate": { "sign_in": 0, "game": 0, "daily_mission": 0, "week_mission": 0 }, + "rank": { "is_visible": false } + } +} +``` + +
+ +## 赛季奖励领取 + +> https://manga.bilibili.com/twirp/user.v1.Season/TakeSeasonGifts + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ------- | ------ | --------------- | +| season_id | num | 赛季 id | 必要 | 必须为本赛季 id | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| code | num | 返回值 | | +| msg | str | 错误信息 | | + +`code` - `msg` 对照表: + +| code | msg | 备注 | +| ---- | ------------------------------------ | ---------------------------- | +| 0 | | 领取成功 | +| 2 | 当前没有正在进行的赛季,无法兑换奖励 | season_id 字段不正确 | +| 7 | 任务已领取或者未完成 | 没有已经完成的 `today_tasks` | diff --git a/docs/manga/User.md b/docs/manga/User.md new file mode 100644 index 0000000..7118a32 --- /dev/null +++ b/docs/manga/User.md @@ -0,0 +1,712 @@ +# 漫画用户信息 + +## 获取拥有的漫读券列表 + +> https://manga.bilibili.com/twirp/user.v1.User/GetCoupons + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| access_key | str | APP登录凭证 | 必要 | 使用APP鉴权方式时必填 | + +**正文参数 (application/json):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- | +| pageNum | num | 页数 | 必要 | | +| pageSize | num | 分页大小 | 必要 | 默认20,取值范围[1,100] | +| notExpired | bool | true | 非必要 | | +| tabType | num | 1 | 非必要 | | +| type | num | 0 | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | | +| data | obj | | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| total_remain_amount | num | | | +| user_coupons | array | | | +| coupon_info | obj | | | + +`user_coupons` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| ID | num | 漫读券id | | +| remain_amount | num | 漫读券剩余数 | | +| expire_time | num | 过期时间 | | +| reason | num | 获取方式 | | +| type | num | 类型 | | +| ctime | num | 获取时间 | | +| total_amount | num | 漫读券总数 | | +| limits | array | (?) | | +| type_num | num | 7:福利券 | | +| will_expire | num | 是否即将过期?
0:否
1:是 | | +| discount | num | 0 | | +| discount_limit | num | 0 | | +| is_from_card | num | 0 | | +| valid_time | str | 0001-01-01 | | +| discount_base | num | 0 | | + +`coupon_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| new_coupon_num | num | | | +| coupon_will_expire | num | | | +| rent_will_expire | num | | | +| new_rent_num | num | | | +| discount_will_expire | num | | | +| new_discount_num | num | | | +| month_ticket_will_expire | num | | | +| new_month_ticket_num | num | | | +| silver_will_expire | num | | | +| new_silver_num | num | | | +| remain_item | num | | | +| remain_discount | num | | | +| remain_coupon | num | 拥有的漫读券数量 | | +| remain_silver | num | 拥有的通用券数量 | | +| remain_shop_coupon | num | 拥有的商城优惠券数量 | | +| new_shop_num | num | | | +| shop_will_expire | num | | | +| new_suit_id | num | | | +| remain_suit_coupon | num | | | +| new_suit_num | num | | | +| suit_will_expire | num | | | +| vip_priv_coupon | bool | | | + + +**示例:** + +```bash +curl -L -X POST 'https://manga.bilibili.com/twirp/user.v1.User/GetCoupons' \ +-H 'Cookie: SESSDATA=xxx;' \ +-H 'Content-Type: application/json' \ +--data-raw '{ + "notExpired": true, + "pageNum": 1, + "pageSize": 20, + "tabType": 1, + "type": 0 +}' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "data": { + "total_remain_amount": 1, + "user_coupons": [ + { + "ID": 7473503, + "remain_amount": 1, + "expire_time": "2022-05-24 12:00:33", + "reason": "积分兑换", + "type": "福利券", + "ctime": "2022-05-17 12:00:33", + "total_amount": 1, + "limits": [], + "type_num": 7, + "will_expire": 0, + "discount": 0, + "discount_limit": 0, + "is_from_card": 0, + "valid_time": "0001-01-01", + "discount_base": 0 + } + ], + "coupon_info": { + "new_coupon_num": 0, + "coupon_will_expire": 0, + "rent_will_expire": 0, + "new_rent_num": 0, + "discount_will_expire": 0, + "new_discount_num": 0, + "month_ticket_will_expire": 0, + "new_month_ticket_num": 0, + "silver_will_expire": 0, + "new_silver_num": 0, + "remain_item": 0, + "remain_discount": 0, + "remain_coupon": 1, + "remain_silver": 8, + "remain_shop_coupon": 1, + "new_shop_num": 0, + "shop_will_expire": 0, + "new_suit_id": 60007, + "remain_suit_coupon": 0, + "new_suit_num": 0, + "suit_will_expire": 0, + "vip_priv_coupon": false + } + } +} +``` + +
+ +## 获取已购漫画 + +> https://manga.bilibili.com/twirp/user.v1.User/GetAutoBuyComics + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---- | ------ | ---- | +| device | str | 设备 | 非必要 | | +| platform | str | 平台 | 非必要 | | + +**正文参数 (application/json):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- | +| page_num | num | 页数 | 必要 | | +| page_size | num | 分页大小 | 必要 | 默认15 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---------- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | | +| data | obj(array) | | | + +`data`array中的对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | ---------------- | ---- | +| id | num | 内部id | | +| comic_id | str | 漫画id | | +| comic_title | str | 漫画标题 | | +| hcover | str | 横版头图 | | +| scover | str | 方形头图 | | +| vcover | str | 竖版封面图 | | +| bought_ep_count | num | 已购章节数 | | +| gold_status | num | | | +| coupon_status | num | | | +| comic_status | num | 漫画状态 | | +| last_ord | num | 最后一话 | | +| ctime | str | 获取时间 | | +| last_short_title | str | 最后一话的短标题 | | +| bug_type | num | 购买类型 | | +| ep_for_chapters | num | | | +| orders | obj | 自动扣费顺序 | | +| enable_auto_pay | bool | 是否开启自动付费 | | +| type | num | | | + +**示例:** + +```bash +curl -L -X POST 'https://manga.bilibili.com/twirp/user.v1.User/GetAutoBuyComics' \ +-H "Cookie: xxxxx" \ +-H 'Content-Type: application/json;charset=UTF-8' \ +-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' \ +-d '{"page_num": 1,"page_size": 15}' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "data": [ + { + "id": 20276887, + "comic_id": 26554, + "comic_title": "擅长捉弄的(原)高木同学", + "hcover": "http://i0.hdslb.com/bfs/manga-static/443b4a49be1e92cd204af1472e2a7f41c1df7336.png", + "scover": "http://i0.hdslb.com/bfs/manga-static/e29eb39aed0971851efe5998d3b9c156ba52bb4e.jpg", + "vcover": "http://i0.hdslb.com/bfs/manga-static/9536b3d6c6eaef5992986d6b06d35188c20f4366.jpg", + "bought_ep_count": 13, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 235, + "ctime": "2022-01-26 21:39:33", + "last_short_title": "235", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 15129353, + "comic_id": 29726, + "comic_title": "NEW GAME!", + "hcover": "https://i0.hdslb.com/bfs/manga-static/586df1c03978ef01eac9e6a670f26395f6495ead.jpg", + "scover": "https://i0.hdslb.com/bfs/manga-static/7110c8751fef26b082b5452bd515736a78bf0670.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/d3aa1477dcc9720f9bcee19c775849baad6b4e66.jpg", + "bought_ep_count": 4, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 180, + "ctime": "2021-06-21 16:29:27", + "last_short_title": "180", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 13525712, + "comic_id": 28080, + "comic_title": "终将成为你", + "hcover": "https://i0.hdslb.com/bfs/manga-static/bed69097d5fdc68bff87fce1e168b810448ee145.jpg", + "scover": "https://i0.hdslb.com/bfs/manga-static/855e851b58c805b05b347fddb80a46dcb260afac.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/10e8243b502bd19947cd49a6ac2ea0a9b8c5daa3.jpg", + "bought_ep_count": 5, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 45, + "ctime": "2021-04-09 08:26:41", + "last_short_title": "第45话", + "buy_type": 9, + "ep_for_chapters": 0, + "orders": [], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 13469083, + "comic_id": 28198, + "comic_title": "米诺斯的牛肉100%", + "hcover": "http://i0.hdslb.com/bfs/manga-static/75931d991ddd40bc49c655ff3fca770d45eac9aa.jpg", + "scover": "http://i0.hdslb.com/bfs/manga-static/ee37104f5d97bb486e69d660d9a93242a1c2817a.jpg", + "vcover": "http://i0.hdslb.com/bfs/manga-static/be5400d37c1428ecc98a8e2d1772175991a262ed.jpg", + "bought_ep_count": 1, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 6, + "ctime": "2021-04-06 12:21:20", + "last_short_title": "6", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 13436048, + "comic_id": 27545, + "comic_title": "宝石之国", + "hcover": "http://i0.hdslb.com/bfs/manga-static/94637fff52eca04a8f32e19ed0c2f676b9bee96e.png", + "scover": "http://i0.hdslb.com/bfs/manga-static/e538ce332a639809aea70c8e30a19645e9b2ae3e.jpg", + "vcover": "http://i0.hdslb.com/bfs/manga-static/91e03718b03b7d3a2dca53c461b4b84953ce8cb0.jpg", + "bought_ep_count": 11, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 96, + "ctime": "2021-04-05 00:09:17", + "last_short_title": "96", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 13237163, + "comic_id": 27877, + "comic_title": "极主夫道", + "hcover": "https://i0.hdslb.com/bfs/manga-static/5a8b7bd678e2ae135415af31493417ae77bc83dd.png", + "scover": "http://i0.hdslb.com/bfs/manga-static/aa36b8cff89e42c1820e43c483d483ed3eb8d938.png", + "vcover": "http://i0.hdslb.com/bfs/manga-static/96a6b07bcea58955efed4df876bc8f1b5df9d5cc.jpg", + "bought_ep_count": 6, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 96, + "ctime": "2021-03-27 12:28:27", + "last_short_title": "96", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 12913068, + "comic_id": 25519, + "comic_title": "四月是你的谎言", + "hcover": "http://i0.hdslb.com/bfs/manga-static/33cda8ed8e6c89691d5397dc47f8c7c7945a54c4.png", + "scover": "http://i0.hdslb.com/bfs/manga-static/a6ed17ddac9bb568cefeb4eda8f8f3298db6c8cd.jpg", + "vcover": "http://i0.hdslb.com/bfs/manga-static/6d82d75a9a2817a18e16e2b82f76312d0fd02d06.jpg", + "bought_ep_count": 36, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 44, + "ctime": "2021-03-11 23:58:50", + "last_short_title": "44", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 12793711, + "comic_id": 28537, + "comic_title": "前男友成为了那样的男子", + "hcover": "https://i0.hdslb.com/bfs/manga-static/33440f7675a424dcce35459e2392e23e9d345531.jpg", + "scover": "http://i0.hdslb.com/bfs/manga-static/3de961215ad2a96ccf5dbb45d85db88934b545cb.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/77feff2a5f1aab93060e8ce5105e5616cb7313a7.jpg", + "bought_ep_count": 3, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 54, + "ctime": "2021-03-06 19:20:03", + "last_short_title": "44", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 12751111, + "comic_id": 26009, + "comic_title": "辉夜大小姐想让我告白 ~天才们的恋爱头脑战~", + "hcover": "https://i0.hdslb.com/bfs/manga-static/7fe349fd5a3d9522546e1582ad03604e82b1ff41.png", + "scover": "http://i0.hdslb.com/bfs/manga-static/b0ac1e3379e940c47b31209edf016e32e8bcee37.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/6188cad7ec7ac2b0555c0a815f9d2afbe7c0c5cb.jpg", + "bought_ep_count": 2, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 259, + "ctime": "2021-03-05 00:16:13", + "last_short_title": "269", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 12479079, + "comic_id": 27867, + "comic_title": "邪神与厨二病少女", + "hcover": "https://i0.hdslb.com/bfs/manga-static/96594b34528640f51ef5062648b55c871f4d4b1b.jpg", + "scover": "https://i0.hdslb.com/bfs/manga-static/54a7f8d35024ef46dc270dc758d882bc98c4a1c5.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/1b07c3be74d65cbb707934de190af10ca81588f3.jpg", + "bought_ep_count": 194, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 216.5, + "ctime": "2021-02-23 00:18:06", + "last_short_title": "216.5", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 11749927, + "comic_id": 29119, + "comic_title": "足艺少女小村同学", + "hcover": "https://i0.hdslb.com/bfs/manga-static/30b7917fd7d8b0afe6d913f09bab31e5eafae8b6.jpg", + "scover": "https://i0.hdslb.com/bfs/manga-static/f4ec445bc209ad473cdf9127528c09e271535617.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/8f83793c06dc0f59cab3a6acf4b978dc3c0a01f9.jpg", + "bought_ep_count": 13, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 58, + "ctime": "2021-01-31 11:04:31", + "last_short_title": "最终话", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 11605399, + "comic_id": 29053, + "comic_title": "如果是理想中的女儿,就算是世界最强也能受到宠爱吗?", + "hcover": "https://i0.hdslb.com/bfs/manga-static/5a7886e2b94515ea75a3ea34d9c77db3f2487b59.jpg", + "scover": "https://i0.hdslb.com/bfs/manga-static/88f6d08fed2998aba96cedbfdffba555bef4d1c1.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/517a155372e7de966cca2f5f42edabd31a90b169.jpg", + "bought_ep_count": 5, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 28, + "ctime": "2021-01-25 19:40:15", + "last_short_title": "28", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 11386175, + "comic_id": 28656, + "comic_title": "就算这样,“步”还是靠了过来", + "hcover": "http://i0.hdslb.com/bfs/manga-static/c95456b2d00f84293bda62b12539d19172b45db1.jpg", + "scover": "http://i0.hdslb.com/bfs/manga-static/2601c1474cd214d28797381e70b2c19ac7d67869.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/3a556ed655ddf84c7930b3ce180fbdbf8f1d8112.jpg", + "bought_ep_count": 2, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 160, + "ctime": "2021-01-17 10:48:29", + "last_short_title": "160", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 11356706, + "comic_id": 26731, + "comic_title": "在魔王城说晚安", + "hcover": "https://i0.hdslb.com/bfs/manga-static/061f63826f1aa24a5b9346f79b915999004b13da.jpg", + "scover": "http://i0.hdslb.com/bfs/manga-static/94ae037dae4cc61d580c5c3c42702ccf10d977dc.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/2958043a10024ddebfafc4fd47d3566043689300.jpg", + "bought_ep_count": 148, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 292, + "ctime": "2021-01-16 11:25:47", + "last_short_title": "292", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + }, + { + "id": 11079049, + "comic_id": 27355, + "comic_title": "堀与宫村", + "hcover": "https://i0.hdslb.com/bfs/manga-static/b51b905707664415dab91cf81fb0373f970b54b5.jpg", + "scover": "https://i0.hdslb.com/bfs/manga-static/6ac604dfd0ad6c486a520519983212d74c340f28.jpg", + "vcover": "https://i0.hdslb.com/bfs/manga-static/c29ba3ce67613539666582d31d42b40fb48cc3c7.jpg", + "bought_ep_count": 119, + "gold_status": 2, + "coupon_status": 2, + "comic_status": 0, + "last_ord": 126, + "ctime": "2021-01-05 12:52:59", + "last_short_title": "page.122", + "buy_type": 0, + "ep_for_chapters": 0, + "orders": [ + { + "id": 2, + "title": "漫读券" + }, + { + "id": 3, + "title": "通用券" + }, + { + "id": 1, + "title": "漫币" + } + ], + "enable_auto_pay": false, + "type": 0 + } + ] +} +``` + +
\ No newline at end of file diff --git a/docs/manga/index_file.md b/docs/manga/index_file.md new file mode 100644 index 0000000..8e552f8 --- /dev/null +++ b/docs/manga/index_file.md @@ -0,0 +1,269 @@ +# data.index + +## data.index文件解析 + +本解密及数据解析例程以《在魔王城说晚安 第 1 话 不眠之城的公主》为例 + +本话链接:https://manga.bilibili.com/mc26731/329893 (mcid=`26731`, epid=`329893`) + +使用 Python 语言为例 + +### 获取data.index + +直接使用 GET 方法请求该话对应的 data.index 文件地址,就会得到一个二进制文件 + +```bash +curl -s 'https://manga.hdslb.com/bfs/manga/26731/329893/data.index?token=4b93ced19dc5ade671064804232ef4f5&ts=634e1943' | hexdump -C +``` + +data.index 文件内容的 HEX 如下 + +首部有 9 Byte 作为 File Magic 内容是 ASCII 编码的 `BILICOMIC` + +``` +00000000 42 49 4c 49 43 4f 4d 49 43 f5 43 06 04 7f 68 08 |BILICOMIC.C...h.| +00000010 00 ad 08 05 00 6b 68 00 00 a5 08 05 00 6b 68 00 |.....kh......kh.| +00000020 00 a5 08 0c 00 6b 68 69 6e c1 6d 7d 2e 0f 09 74 |.....khin.m}...t| +00000030 ec 33 c3 8f 5c 2c 64 86 df 40 a4 82 58 9c 42 f5 |.3..\,d..@..X.B.| +00000040 ab 21 51 4d aa f9 f1 e0 84 84 9b 40 12 58 87 1e |.!QM.......@.X..| +00000050 ba 28 29 7d ce 89 04 03 d9 91 8d fd 7e 31 1d be |.()}........~1..| +00000060 ba d8 35 ef cb a0 83 db 71 5e f1 ee f1 90 19 43 |..5.....q^.....C| +00000070 03 dd 32 f7 b8 7a b7 07 7f b9 3f 7d 3a d5 54 7e |..2..z....?}:.T~| +00000080 5f fa e2 bd c1 90 bb 0f 9c 7d 34 e4 f0 49 2f 17 |_........}4..I/.| +00000090 39 1b c0 cc 45 25 47 72 76 34 13 12 b9 12 f9 f3 |9...E%Grv4......| +000000a0 8b b9 56 13 72 be 60 5e 55 27 5f 98 e0 3e 41 78 |..V.r.`^U'_..>Ax| +000000b0 d5 af 56 d0 82 3c d5 e0 55 94 70 d0 0c 16 5f 33 |..V..<..U.p..._3| +000000c0 c5 bb 14 d7 e9 e5 4a 7c 7f db 04 ea 7b 9b 90 94 |......J|....{...| +000000d0 fd 53 e1 d2 f8 86 1b 7c ea 97 dd 0b 22 33 75 39 |.S.....|...."3u9| +000000e0 24 76 39 38 6d 58 a4 ed b4 14 8f 71 49 95 9c cb |$v98mX.....qI...| +000000f0 eb 42 eb ec df a2 22 ae 39 0c 3d 03 95 43 27 55 |.B....".9.=..C'U| +00000100 c1 c8 b2 37 2c 01 b0 f4 22 7c 51 1a 93 b5 ab 6d |...7,..."|Q....m| +00000110 72 95 0c 33 9a ed 2d d6 22 f0 08 b6 5c bb f6 b5 |r..3..-."...\...| +00000120 07 5f cf a1 3a 66 c8 30 41 29 31 dd 17 63 46 85 |._..:f.0A)1..cF.| +00000130 ea 53 20 a0 aa 89 65 91 78 37 ac 4b 06 e6 59 7a |.S ...e.x7.K..Yz| +00000140 c2 b7 10 56 cc a0 2e 85 94 09 01 89 83 43 82 a4 |...V.........C..| +00000150 db 60 91 89 15 83 aa 45 aa d6 5f fd 6a 64 f9 1c |.`.....E.._.jd..| +00000160 9d ef c3 6c 34 85 e7 49 8a a7 c3 bc 32 09 eb b8 |...l4..I....2...| +00000170 ef 70 ab d6 6a d2 7f f6 96 b1 9a 75 eb f8 47 34 |.p..j......u..G4| +00000180 db 1d 99 78 57 58 04 4e e0 c4 a4 58 d8 81 f5 02 |...xWX.N...X....| +00000190 3c 42 7e 1c 27 98 3c 70 df 04 13 33 fa ff 21 3b | +查看json内容: + +```json +{ + "clips": [ + {"r": 1600, "b": 2300, "t": 0, "l": 0, "pic": 0}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 1}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 2}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 3}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 4}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 5}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 6}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 7}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 8}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 9}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 10}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 11}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 12}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 13}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 14}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 15}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 16}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 17}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 18}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 19}, + {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 20}, + {"r": 846, "b": 1200, "t": 0, "l": 0, "pic": 21} + ], + "pics": [ + "/bfs/manga/fc655fa220dfab74bb91b9b6e308e92e1f74fc4b.jpg", + "/bfs/manga/cb3c882f5a72c45385541e65dba6ac7689c24ebc.jpg", + "/bfs/manga/9f79683a30a1f165a6abcd2550066bd0f9bce719.jpg", + "/bfs/manga/592702a6411a8739d041d50cff9ac52ccc3e0ab1.jpg", + "/bfs/manga/52fb305a77f80d4078469c67ca4c4d8031722acc.jpg", + "/bfs/manga/d3bb31ca1943c2558eca9df9a44b7fb52d927f1e.jpg", + "/bfs/manga/2ac06b8dbaae0499edf7fb6cd99c1fe4b424a96f.jpg", + "/bfs/manga/98f63f139ecf30e3b037635fc1f59fb40388e947.jpg", + "/bfs/manga/55099ea5e0e198482ea6d216a5e41b02835701b7.jpg", + "/bfs/manga/ee60daaf9ca659bb0df7d45402c86c79a1f64739.jpg", + "/bfs/manga/8620f9742fddc97d4179f18fd2b9f1b1420138dd.jpg", + "/bfs/manga/0490a9d8bdb6312ac56baa24ed0595a2465d98dc.jpg", + "/bfs/manga/bc3234cb0ba2be2b724b1a640a418f1db7b2ac43.jpg", + "/bfs/manga/0d16c5e9779f187916e4b173e7a6447b14707ece.jpg", + "/bfs/manga/58f3985afc3f2cf57052725dfea47af5634ac1c8.jpg", + "/bfs/manga/de09b30d952566c2c1308f5da59a2ffb3b2deb5c.jpg", + "/bfs/manga/36ecc5565340605883cb000f513b49bfc91e0d3e.jpg", + "/bfs/manga/120f3174def02b3dd908ee69b427d094506b884d.jpg", + "/bfs/manga/fdbe3bd0d446c0129557bd19037785456e55f12c.jpg", + "/bfs/manga/813a1bb68c3f89616583c8662fa81984d6a907db.jpg", + "/bfs/manga/fd3a53f04831e577707e4c873e2fc205e71d5cde.jpg", + "/bfs/manga/50e1c513336e0685ca01723d64c712294e534ca0.jpg" + ], + "sizes": [ + {"cx": 1600, "cy": 2300}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 1600, "cy": 2468}, + {"cx": 846, "cy": 1200} + ] +} +``` + + + +## data.index内容 + +以下内容为解密后的 JSON 数据定义 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | -------- | ---- | +| clips | array | 尺寸信息 | | +| pics | array | 图片路径 | | +| sizes | array | 尺寸信息 | | + +根对象中的`clips`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 第 1 页信息 | | +| n | obj | 第 (n+1) 页信息 | | +| …… | obj | …… | …… | + +`clips`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------- | +| r | num | 图片宽度 | | +| b | num | 图片高度 | | +| t | num | (?) | | +| l | num | (?) | | +| pic | num | 图片页码序号 | 从 0 开始递增 | + +根对象中的`pics`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ------------------------------ | +| 0 | str | 第 1 图片路径 | 图片不能直接访问,需要二次鉴权 | +| n | str | 第 (n+1) 图片路径 | | +| …… | str | …… | …… | + +根对象中的`sizes`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 第 1 页信息 | | +| n | obj | 第 (n+1) 页信息 | | +| …… | obj | …… | …… | + +`clips`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| cx | num | 图片宽度 | | +| cy | num | 图片高度 | | diff --git a/docs/manga/light_card.md b/docs/manga/light_card.md new file mode 100644 index 0000000..405daa4 --- /dev/null +++ b/docs/manga/light_card.md @@ -0,0 +1,200 @@ +# 获取轻享卡信息 + +> https://manga.bilibili.com/twirp/card.v1.Card/GetUserLightCard + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------------|-----|----------------|-----|-----------------| +| access_key | str | 登录`access_key` | | 与`SESSDATA`二选其一 | + +**json回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|------|------| +| code | num | 响应码 | 0:成功 | +| msg | str | | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段名 | 类型 | 内容 | 备注 | +|--------------------|-------|----------------|---------------------------------| +| state | num | 轻享卡开通状态 | 0:未开通
1:已开通 | +| show_state | num | | | +| expire_date | str | 轻享卡到期时间 | | +| receive_amount | num | 已领取数量 | | +| save_money | num | 已节省漫币 | | +| index | num | 默认选择签到周期 | | +| week | array | 一个领取周期内的领取状态信息 | | +| month_reward_state | num | 是否可选择全勤奖 | 0:不可领取
1:可领取
2:不可领取(灰色) | +| month_reward | num | | | +| cur_month_end | str | 全勤奖领取剩余时间 | | +| server_time | str | 当前服务器时间 | | + +`week`数组中的对象: + +| 字段名 | 类型 | 内容 | 备注 | +|-------------------|-----|-------------|------------------------------------------------| +| index | num | 第几领取周期 | 从`1`开始 | +| start_time | str | 本周期领取开始时间 | 1:待领取
2:已领取
3:明日可领
4:已失效
5:可领取 | +| end_time | str | 本周期领取结束时间 | `同上` | +| first | num | 本周期第1天的领取状态 | `同上` | +| second | num | 本周期第2天的领取状态 | `同上` | +| third | num | 本周期第3天的领取状态 | `同上` | +| fourth | num | 本周期第4天的领取状态 | `同上` | +| full_reward_state | num | 周期全勤奖领取状态 | 1:不可领取
2:可领取
3:已领取 | + +**示例:** + +`SESSDATA`方式: + +```shell +curl -L -X POST 'https://manga.bilibili.com/twirp/card.v1.Card/GetUserLightCard' \ +-H 'Cookie: SESSDATA=xxx' +``` + +`access_key`方式: + +```shell +curl -L -X POST 'https://manga.bilibili.com/twirp/card.v1.Card/GetUserLightCard?access_key=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "data": { + "state": 1, + "show_state": 1, + "expire_date": "2023-03-09T23:59:59+08:00", + "receive_amount": 18, + "save_money": 890, + "index": 1, + "week": [ + { + "index": 1, + "start_time": "2023-02-10T00:00:00+08:00", + "end_time": "2023-02-16T23:59:59+08:00", + "first": 5, + "second": 1, + "third": 1, + "fourth": 1, + "full_reward_state": 1 + }, + { + "index": 2, + "start_time": "2023-02-17T00:00:00+08:00", + "end_time": "2023-02-23T23:59:59+08:00", + "first": 1, + "second": 1, + "third": 1, + "fourth": 1, + "full_reward_state": 1 + }, + { + "index": 3, + "start_time": "2023-02-24T00:00:00+08:00", + "end_time": "2023-03-02T23:59:59+08:00", + "first": 1, + "second": 1, + "third": 1, + "fourth": 1, + "full_reward_state": 1 + }, + { + "index": 4, + "start_time": "2023-03-03T00:00:00+08:00", + "end_time": "2023-03-09T23:59:59+08:00", + "first": 1, + "second": 1, + "third": 1, + "fourth": 1, + "full_reward_state": 1 + } + ], + "month_reward_state": 0, + "month_reward": 0, + "cur_month_end": "2023-03-10T00:00:00+08:00", + "server_time": "2023-02-10T10:59:43+08:00" + } +} +``` + +
+ +# 领取轻享卡奖励 + +> https://manga.bilibili.com/twirp/card.v1.Card/GetLightCoupon + +*请求方式:POST* + +是否需要登录:`是` + +认证方式:Cookie(SESSDATA)/ APP + +Content-Type:`application/json` + +**URL参数:** + +| 参数名 | 类型 | 必填 | 内容 | 备注 | +|------------|-----|----|-----------------|----| +| access_key | str | | 与`SESSDATA`二选其一 | | + +**正文参数( application/json ):** + +| 参数名 | 类型 | 必填 | 内容 | 备注 | +|-----------|-----|----|------|----------------------| +| weekIndex | num | √ | 第几周 | 从`1`开始 | +| type | num | √ | 领取类型 | 1:领取漫读券
2:领取限免卡 | + +**json回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|-----|-------------------------------------------------------------------| +| code | num | 响应码 | 0:成功
3:今日已领取,请明日再来
3:还未满足领取条件
4:找不到数据~
6:你点击太快了哦~ | +| msg | str | | | +| data | obj | | | + +**示例:** + +`SESSDATA`方式: + +```shell +curl -L -X POST 'https://manga.bilibili.com/twirp/card.v1.Card/GetLightCoupon' \ +-H 'content-type: application/json; charset=utf-8' \ +-H 'Cookie: SESSDATA=xxx' \ +--data-raw '{"type":1,"weekIndex":1}' +``` + +`access_key`方式: + +```shell +curl -L -X POST 'https://manga.bilibili.com/twirp/card.v1.Card/GetLightCoupon?access_key=xxx' \ +-H 'content-type: application/json; charset=utf-8' \ +--data-raw '{"type":1,"weekIndex":1}' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "data": {} +} +``` + +
\ No newline at end of file diff --git a/docs/manga/point_shop.md b/docs/manga/point_shop.md new file mode 100644 index 0000000..97d628c --- /dev/null +++ b/docs/manga/point_shop.md @@ -0,0 +1,443 @@ +# 积分商城 + +**注**:积分商城由web页面提供功能,地址为 https://manga.bilibili.com/eden/credits-exchange.html + +## 获取当前持有点数 + +> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | | +| msg | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ------------ | +| point | str | 点数 | 不登录时为0 | + +**示例:** + +```bash +curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "msg": "", + "data": { + "point": "66666" + } +} +``` + +
+ +## 获取兑换奖品列表 + +> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct + +*请求方式:POST* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | | +| msg | str | 错误信息 | | +| data | array | 奖品列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 奖品1 | | +| n | obj | 奖品(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ------------ | +| id | num | 物品id | | +| type | num | 物品类型 | 0:商城相关
3:限免券
7:福利券 | +| title | str | 物品名 | | +| image | str | 显示的图像 | 福利券为空 | +| amount | num | 库存总量 | | +| cost | num | 兑换所需点数(原价) | | +| real_cost | num | 兑换所需点数(现价) | | +| remain_amount | num | 库存剩余数 | | +| comic_id | num | 相关漫画id | | +| limits | array | 限定使用范围(漫画) | 限免券所适用的漫画 | +| discount | num | (?) | 目前恒为0 | +| product_type | num | 物品类型 | 1:限免券、福利券
4:商城满99立减10元券、商城5元无门槛券
5:商城5魔晶 | +| pendant_url | str | (?) | | +| pendant_expire | num | (?) | 0:限免券、福利券
7:商城满99立减10元券、商城5元无门槛券、商城5魔晶 | +| exchange_limit | num | 兑换次数限制 | | +| address_deadline | str | (?) | | +| act_type | num | (?) | 目前恒为0 | +| has_exchanged | bool | 是否兑换过该物品 | | +| main_coupon_deadline | str | 兑换后使用截止时间 | | +| deadline | str | 兑换后使用截止时间 | | +| point | str | (?) | 目前恒为0 | + +**示例:** + +```bash +curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "msg": "", + "data": [ + { + "id": 195, + "type": 7, + "title": "积分兑换", + "image": "", + "amount": 15999, + "cost": 200, + "real_cost": 100, + "remain_amount": 0, + "comic_id": 0, + "limits": [], + "discount": 0, + "product_type": 1, + "pendant_url": "", + "pendant_expire": 7, + "exchange_limit": 0, + "address_deadline": "0001-01-01T00:00:00Z", + "act_type": 0, + "has_exchanged": false, + "main_coupon_deadline": "0001-01-01T00:00:00Z", + "deadline": "", + "point": "0" + }, + { + "id": 1009, + "type": 0, + "title": "商城5魔晶", + "image": "", + "amount": 500, + "cost": 260, + "real_cost": 30, + "remain_amount": 0, + "comic_id": 0, + "limits": [], + "discount": 0, + "product_type": 5, + "pendant_url": "", + "pendant_expire": 0, + "exchange_limit": 1, + "address_deadline": "0001-01-01T00:00:00Z", + "act_type": 0, + "has_exchanged": false, + "main_coupon_deadline": "2022-03-22T23:59:59+08:00", + "deadline": "2022-03-22T23:59:59+08:00", + "point": "0" + }, + { + "id": 1008, + "type": 0, + "title": "商城满99立减10元券", + "image": "", + "amount": 400, + "cost": 2000, + "real_cost": 400, + "remain_amount": 390, + "comic_id": 0, + "limits": [], + "discount": 0, + "product_type": 4, + "pendant_url": "", + "pendant_expire": 0, + "exchange_limit": 1, + "address_deadline": "0001-01-01T00:00:00Z", + "act_type": 0, + "has_exchanged": false, + "main_coupon_deadline": "2022-03-22T23:59:59+08:00", + "deadline": "2022-03-22T23:59:59+08:00", + "point": "0" + }, + { + "id": 1007, + "type": 0, + "title": "商城5元无门槛券", + "image": "", + "amount": 200, + "cost": 1000, + "real_cost": 200, + "remain_amount": 134, + "comic_id": 0, + "limits": [], + "discount": 0, + "product_type": 4, + "pendant_url": "", + "pendant_expire": 0, + "exchange_limit": 1, + "address_deadline": "0001-01-01T00:00:00Z", + "act_type": 0, + "has_exchanged": false, + "main_coupon_deadline": "2022-03-22T23:59:59+08:00", + "deadline": "2022-03-22T23:59:59+08:00", + "point": "0" + }, + { + "id": 1536, + "type": 3, + "title": "白兔糖", + "image": "http://i0.hdslb.com/bfs/manga-static/c3369754789a77b5d0b15cc31c75538ac035b3aa.jpg", + "amount": 4000, + "cost": 100, + "real_cost": 75, + "remain_amount": 3991, + "comic_id": 27164, + "limits": [ + { + "type": 1, + "id": 27164, + "title": "白兔糖" + } + ], + "discount": 0, + "product_type": 1, + "pendant_url": "", + "pendant_expire": 7, + "exchange_limit": 0, + "address_deadline": "0001-01-01T00:00:00Z", + "act_type": 0, + "has_exchanged": false, + "main_coupon_deadline": "0001-01-01T00:00:00Z", + "deadline": "", + "point": "0" + } + ] +} +``` + +
+ + +## 兑换物品 + +> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**正文参数( application/x-www-form-urlencoded 或 application/json):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| product_id | str | 物品id | 必要 | | +| product_num | num | 兑换个数 | 必要 | | +| point | num | 物品所需点数 | 必要 | 现价(real_cost) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:兑换成功
1:积分不足
1:您点的太快了~
2:库存不足
3:product point mismatch(point填写错误)
3:超过用户最大可兑换数量
4:现在抢票的人太多啦,再点一下有机会优先上车喔 ε=ε=(ノ≧∇≦)ノ | +| message | str | 错误信息 | | + +**示例:** + +```bash +curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange' \ +--data-urlencode 'product_id=195' \ +--data-urlencode 'product_num=1' \ +--data-urlencode 'point=real_cost' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "" +} +``` + +
+ +## 获取兑换历史记录 + +> https://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)/ APP + +**正文参数( application/x-www-form-urlencoded 或 application/json):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| act_id | num | 固定值:90018 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | | +| msg | str | 错误信息 | | | +| data | obj | 信息本体 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ---- | +| prizes | obj | 兑换记录 | | +| addr | obj | (?) | | + +`data`中的`prizes`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ------------ | +| user_prize_id | str | 兑换id? | | +| prize_id | num | 兑换的物品id | | +| ctime | str | 兑换时间 | | +| addr | null | (?) | | +| deadline | str | 过期时间 | | +| type | num | 类型 | 1:限免券、福利券
8:商城5魔晶 | +| name | str | 物品名 | | + +**示例:** + +```bash +curl 'https://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList' \ +--data-urlencode 'act_id=90018' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "data": { + "prizes": [ + { + "user_prize_id": "55117444", + "prize_id": 1009, + "ctime": "2022-03-21T12:22:53+08:00", + "addr": null, + "deadline": "0001-01-01T00:00:00Z", + "type": 8, + "name": "商城5魔晶" + }, + { + "user_prize_id": "2594073385420523088", + "prize_id": 1536, + "ctime": "2022-03-21T12:07:24+08:00", + "addr": null, + "deadline": "0001-01-01T00:00:00Z", + "type": 1, + "name": "白兔糖限免卡" + }, + { + "user_prize_id": "4899916394614914913", + "prize_id": 195, + "ctime": "2021-12-24T12:01:08+08:00", + "addr": null, + "deadline": "0001-01-01T00:00:00Z", + "type": 1, + "name": "积分兑换" + }, + { + "user_prize_id": "1152921504636496551", + "prize_id": 195, + "ctime": "2021-12-13T12:05:13+08:00", + "addr": null, + "deadline": "0001-01-01T00:00:00Z", + "type": 1, + "name": "积分兑换" + } + ], + "addr": { + "name": "", + "phone": "", + "address": "", + "id_card": "" + } + } +} +``` + +
+ +## 获取玩法说明 + +> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule + +*请求方式:POST* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| code | num | 返回值 | | +| msg | str | 错误信息 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| rule | str | 玩法说明 | | + +**示例:** + +```bash +curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "msg": "", + "data": { + "rule": "日常兑换说明:\n1、赛季积分达到一定数量可兑换积分商城内相应的商品;\n2、日常兑换奖品的刷新时间为每日中午12点,每天可兑换的奖品总数有限(具体可见商品页面展示),请尽快兑换。\n3、兑换的福利券&限免卡奖品有效期详见兑换框内显示或卡券包内详情说明哦,请及时在有效期内使用。\n4、赛季积分有效期为当前赛季时长(每期赛季时长详见福利中心页面倒计时显示),请及时在有效期内进行使用。\n5、赛季积分可在福利中心完成特定任务获取,具体详情可至福利中心查看(部分活动也可获取赛季积分,可随时关注活动信息哦)。" + } +} +``` + +
diff --git a/docs/message/msg.md b/docs/message/msg.md new file mode 100644 index 0000000..488b8cc --- /dev/null +++ b/docs/message/msg.md @@ -0,0 +1,258 @@ +# 通知消息 + +## 获取未读消息数 + +> + +> (新接口) + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +本接口不会返回未读的私信数,要获取未读的私信数请参阅[未读私信数](private_msg.md#未读私信数)相关说明 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | ------------------------- | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | -------------------- | --------------------------- | +| at | num | 未读at数(旧) | | +| chat | num | 0 | 仅旧接口,**作用尚不明确** | +| coin | num | 未读投币数 | | +| danmu | num | 未读弹幕数 | | +| favorite | num | 未读收藏数 | | +| like | num | 未读点赞数(旧) | | +| recv\_like | num | 未读收到喜欢数(新) | 同 `like` | +| recv\_reply | num | 未读回复与@数(新) | 即 `reply` 与 `at` 的值之和 | +| reply | num | 未读回复数(旧) | | +| sys\_msg | num | 未读系统通知数 | | +| sys\_msg\_style | num | 1 | 仅新接口, **作用尚不明确** | +| up | num | 未读UP主助手信息数 | | + +**示例:** + +以下信息代表了未读点赞数为10,未读回复数为4,未读at消息数为3,未读系统通知数为2,未读UP主助手信息数为1 + +```shell +curl 'https://api.vc.bilibili.com/x/im/web/msgfeed/unread' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "at": 3, + "chat": 0, + "coin": 0, + "danmu": 0, + "favorite": 0, + "like": 10, + "recv_like": 10, + "recv_reply": 4, + "reply": 4, + "sys_msg": 2, + "sys_msg_style": 1, + "up": 1 + } +} +``` + +
+ + +## 获取"回复我的"信息 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ---------------- | ------ | ------------- | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | +| id | num | 起始 id | 非必要 | 详情见返回 | +| reply_time | num | 起始时间 | 非必要 | 详情见返回 | +| platform | str | 平台标识 | 非必要 | 可为 `web` 等 | +| web_location | str | 暂时不知道是啥 | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ----- | ----------- | ------------------------------ | +| cursor | obj | 光标 | 下一次查询的指针 | +| items | array | 通知列表 | 数组,每个元素代表一条回复通知 | +| last_view_at | num | unix 时间戳 | 上次查看的时间 | + +`cursor` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ----------- | ---------------------------------------------- | +| is_end | bool | 是否结束 | `false` 表示还有更多数据 | +| id | num | 通知 id | 最后(旧)一条通知的 id,用作下次查询的起始 id | +| time | num | unix 时间戳 | 最后一条通知的时间 | + +`items` 数组中的对象(每条通知): + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------------------- | ---------------------------- | +| id | num | 通知 id | | +| user | obj | **回复者**的用户信息 | | +| item | obj | 通知详情 | | +| counts | num | 通知计数 | 固定为 `1`,可能表示单条通知 | +| is_multi | num | 是否多回复 | 固定为 `0`,可能表示单条回复 | +| reply_time | num | unix 时间戳 | 回复时间 | + +`user` 对象(回复者信息): + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------------- | ------------------------------ | +| mid | num | 用户 mid | | +| fans | num | 粉丝数 | 固定为 `0`,可能不返回实际数据 | +| nickname | str | 用户昵称 | | +| avatar | str | 头像 URL | | +| mid_link | str | 用户主页链接 | 固定为空字符串 | +| follow | bool | 是否关注该用户 | `false` 表示未关注 | + +`item` 对象(通知详情): + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ----- | ---------------- | ----------------------------- | +| subject_id | num | 主体 id | | +| root_id | num | 根评论 id | 最顶层的评论 ID | +| source_id | num | 源评论 id | 直接回复的评论 ID | +| target_id | num | 目标评论 id | 被回复的评论 ID | +| type | str | 通知类型 | 固定为 `"reply"`(回复类型) | +| business_id | num | 业务类型 id | `1`=视频评论,`11`=动态评论 | +| business | str | 业务名称 | `"评论"` 或 `"视频"` | +| title | str | 通知标题 | 摘要文本 | +| desc | str | 描述 | 固定为空字符串 | +| image | str | 图片 URL | 固定为空字符串 | +| uri | str | 跳转链接 | web 端跳转链接 | +| native_uri | str | 客户端跳转链接 | 客户端专用跳转链接 | +| detail_title | str | 详细标题 | 固定为空字符串 | +| root_reply_content | str | 根评论内容 | 最顶层评论的文本内容 | +| source_content | str | 源评论内容 | 直接回复的评论内容 | +| target_reply_content | str | 目标评论内容 | 被回复的评论内容 | +| at_details | array | @的用户列表 | 数组,每个元素是被@的用户对象 | +| topic_details | array | 话题详情 | 固定为空数组 | +| hide_reply_button | bool | 是否隐藏回复按钮 | | +| hide_like_button | bool | 是否隐藏点赞按钮 | | +| like_state | num | 点赞状态 | `0`=未点赞 | +| danmu | null | 弹幕信息 | 固定为 `null` | +| message | str | 消息内容 | 固定为空字符串 | + +`at_details` 数组中的对象(被@的用户): + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------------- | ------------------ | +| mid | num | 用户 mid | | +| fans | num | 粉丝数 | 固定为 `0` | +| nickname | str | 用户昵称 | | +| avatar | str | 头像 URL | | +| mid_link | str | 用户主页链接 | 固定为空字符串 | +| follow | bool | 是否关注该用户 | `false` 表示未关注 | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/msgfeed/reply' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "data": { + "cursor": { + "is_end": true, + "id": 823260581625886, + "time": 1749474709 + }, + "items": [{ + "id": 823260581625886, + "user": { + "mid": 3546910497441845, + "fans": 0, + "nickname": "佘总累了", + "avatar": "https://i2.hdslb.com/bfs/face/e45c62bd47729e07dd01a788988be865ed3d210e.jpg", + "mid_link": "", + "follow": false + }, + "item": { + "subject_id": 1073543151725051921, + "root_id": 0, + "source_id": 265141324256, + "target_id": 0, + "type": "dynamic", + "business_id": 17, + "business": "动态", + "title": "我已成为哔哩哔哩第245743680位转正会员,挑战转正答题考试获得60分。", + "desc": "", + "image": "", + "uri": "https://www.bilibili.com/opus/1073543151725051921#reply265141324256", + "native_uri": "bilibili://opus/detail/1073543151725051921?comment_root_id=265141324256&comment_on=1", + "detail_title": "", + "root_reply_content": "", + "source_content": "60", + "target_reply_content": "", + "at_details": [], + "topic_details": [], + "hide_reply_button": false, + "hide_like_button": false, + "like_state": 0, + "danmu": null, + "message": "" + }, + "counts": 1, + "is_multi": 0, + "reply_time": 1749474709 + }], + "last_view_at": 1749474724 + } +} +``` + +
diff --git a/docs/message/private_msg.md b/docs/message/private_msg.md new file mode 100644 index 0000000..0baf0b4 --- /dev/null +++ b/docs/message/private_msg.md @@ -0,0 +1,2077 @@ +# 私信 + +## 对象与常量说明 + +### 会话对象 + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | -------------------------------- | --------------------------------------------------- | +| talker_id | num | 聊天对象的id | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id | +| session_type | num | 聊天对象的类型 | 1:用户
2:粉丝团 | +| at_seqno | num | 最近一次未读at自己的消息的序列号 | 在粉丝团会话中有效,若没有未读的 at 自己的消息则为 `0` | +| top_ts | num | 置顶该会话的时间 | 微秒级时间戳;若未置顶该会话则为 `0`;用于判断是否置顶了会话 | +| group_name | str | 粉丝团名称 | 在粉丝团会话中有效,其他会话中为空字符串 | +| group_cover | str | 粉丝团头像 | 在粉丝团会话中有效,其他会话中为空字符串 | +| is_follow | num | 是否关注了对方 | 在用户会话中有效,系统会话中为 `1`, 其他会话中为 `0` | +| is_dnd | num | 是否对会话设置了免打扰 | | +| ack_seqno | num | 最近一次已读的消息序列号 | 用于快速跳转到首条未读的消息 | +| ack_ts | num | 最近一次已读时间 | 微秒级时间戳 | +| session_ts | num | 会话时间 | 微秒级时间戳 | +| unread_count | num | 未读消息数 | | +| last_msg | 有效时:obj
无效时:null | 最近的一条消息 | 详见[私信主体对象](#私信主体对象) | +| group_type | num | 粉丝团类型 | 在粉丝团时有效
0:应援团
2:官方群(如:ID 为 10 的粉丝团) | +| can_fold | num | 会话是否可被折叠入未关注人消息 | 在用户会话中有效 | +| status | num | 会话状态 | 详细信息有待补充 | +| max_seqno | num | 最近一条消息的序列号 | | +| new_push_msg | num | 是否有新推送的消息 | | +| setting | num | 推送设置 | 0:接收推送
1:不接收推送
2:(?) | +| is_guardian | num | 自己是否为对方的骑士(?) | 在用户会话中有效
0:否
2:是(?) | +| is_intercept | num | 会话是否被拦截 | | +| is_trust | num | 是否信任此会话 | 若为 `1`,则表示此会话之前被拦截过,但用户选择信任本会话 | +| system_msg_type | num | 系统会话类型 | 0:非系统会话
1:主播小助手
5:系统通知(?)
7:UP主小助手
8:客服消息
9:支付小助手 | +| account_info | obj | 会话信息 | 仅在系统会话中出现 | +| live_status | num | 用户是否正在直播 | 在用户会话中有效,其他会话中为 `0` | +| biz_msg_unread_count | num | 未读通知消息数 | | +| user_label | null | (?) | **作用尚不明确** | + +`account_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| name | str | 会话名称 | | +| pic_url | str | 会话头像 | | + +### 私信主体对象 + +注:私信主体对象≠[私信内容对象](private_msg_content.md) + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | -------------- | -------------------------------------------------------------- | +| sender_uid | num | 发送者mid | | +| receiver_type | num | 接收者类型 | 1:用户
2:粉丝团 | +| receiver_id | num | 接收者id | `receiver_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id | +| msg_type | num | 消息类型 | 详见[私信消息类型、内容说明](private_msg_content.md) | +| content | str | 消息内容 | [私信内容对象](private_msg_content.md)**经过 JSON 序列化后的文本** | +| msg_seqno | num | 消息序列号 | 按照时间顺序从小到大 | +| timestamp | num | 消息发送时间 | 秒级时间戳 | +| at_uids | 有效时:array
无效时:null | at的成员mid | 在粉丝团时有效;此项为 `null` 或 `[0]` 均表示没有 at 成员 | +| msg_key | num | 消息唯一id | 部分库在解析JSON对象中的大数时存在数值的精度丢失问题,因此在处理此字段时可能会出现问题,建议使用修复了这一问题的库(如将大数转换成文本) | +| msg_status | num | 消息状态 | 0:正常
1:被撤回(接口仍能返回被撤回的私信内容)
2:被系统撤回(如:消息被举报;私信将不会显示在前端,B站接口也不会返回被系统撤回的私信的信息)
50:图片已失效(私信内容为一张提示“图片出现问题”的图片) | +| sys_cancel | bool | 是否为系统撤回 | 仅当 `msg_type` 为 `5` 且此项值为 `true` 时有此项;若此项值为 `true`,表示目标消息是被系统撤回的,此时前端将不显示该私信且没有提示 | +| notify_code | str | 通知代码 | 发送通知时使用,以下划线 `_` 分割,第 1 项表示主业务 id,第 2 项表示子业务 id;若这条私信非通知则为空文本;详细信息有待补充 | +| new_face_version | num | 表情包版本 | 为 `0` 或无此项表示旧版表情包,此时 B 站会自动转换成新版表情包,例如 `[doge]` -> `[tv_doge]`;`1` 为新版 | +| msg_source | num | 消息来源 | 见[消息来源列表](#消息来源列表msg_source) | + +`私信主体对象`中的`at_uids`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ------- | +| 0 | num | 用户1 | 成员mid | +| n | num | 用户(n+1) | | +| …… | num | …… | …… | + +### 消息来源列表(`msg_source`) + +| 代码 | 含义 | 备注 | +| ---- | ------------------------- | ----------------------------------- | +| 0 | 未知来源 | 在以前发送的部分私信的来源代码 | +| 1 | iOS | | +| 2 | Android | | +| 3 | H5 | | +| 4 | PC客户端 | | +| 5 | 官方推送消息 | 包括:官方向大多数用户自动发送的私信(如:UP主小助手的推广)等 | +| 6 | 推送/通知消息 | 包括:特别关注时稿件的自动推送、因成为契约者而自动发送的私信、包月充电回馈私信、官方发送的特定于自己的消息(如:UP主小助手的稿件审核状态通知)等 | +| 7 | Web | | +| 8 | 自动回复 - 被关注回复 | B站前端会显示“此条消息为自动回复” | +| 9 | 自动回复 - 收到消息回复 | B站前端会显示“此条消息为自动回复” | +| 10 | 自动回复 - 关键词回复 | B站前端会显示“此条消息为自动回复” | +| 11 | 自动回复 - 大航海上船回复 | B站前端会显示“此条消息为自动回复” | +| 12 | 自动推送 - UP 主赠言 | 在以前稿件推送消息与其附带的 UP 主赠言是 2 条不同的私信(其中 UP 主赠言的消息来源代码为 12),现在 UP 主赠言已并入为[稿件自动推送消息](private_msg_content.md#视频推送消息msg_type11)的一部分(`attach_msg`) | +| 13 | 粉丝团系统提示 | 如:粉丝团中的提示信息“欢迎xxx入群” | +| 16 | 系统 | 目前仅在 `msg_type` 为 `51` 时使用该代码 | +| 17 | 互相关注 | 互相关注时自动发送的私信“我们已互相关注,开始聊天吧~” | +| 18 | 系统提示 | 目前仅在 `msg_type` 为 `18` 时使用该代码,如:“对方主动回复或关注你前,最多发送1条消息” | +| 19 | AI | 如:给[搜索AI助手测试版](https://space.bilibili.com/1400565964/)发送私信时对方的自动回复 | + +## 会话相关 + +### 获取未读私信数 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +注: 该接口默认每 2 分钟请求一次;该接口不会返回[未读粉丝团私信数](#获取未读粉丝团私信数) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------------ | ---- | -------------------------- | ------ | -------------------------------------------------------------------------- | +| unread_type | num | 未读类型 | 非必要 | 0:所有
1:仅已关注
2:仅未关注
3:仅被拦截 (须同时设置参数 `show_dustbin=1`)
默认为 `0` | +| show_unfollow_list | num | 是否返回未关注人推送消息数 | 非必要 | 0:否
1:是 | +| show_dustbin | num | 是否返回被拦截私信数 | 非必要 | 0:否
1:是 | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------------- | ---- | ------------------------ | ---------------- | +| unfollow_unread | num | 未读未关注用户私信数 | | +| follow_unread | num | 未读已关注用户私信数 | | +| unfollow_push_msg | num | 未读未关注用户推送消息数 | | +| dustbin_push_msg | num | 未读被拦截的推送消息数 | | +| dustbin_unread | num | 未读被拦截的私信数 | | +| biz_msg_unfollow_unread | num | 未读未关注用户通知数 | | +| biz_msg_follow_unread | num | 未读已关注用户通知数 | | +| custom_unread | num | 未读客服消息数 | | + +**示例:** + +以下信息代表未读未关注用户私信数为 `1` 条,未读已关注用户私信数为 `6` 条 + +```shell +curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread' \ + --data-urlencode 'unread_type=0' \ + --data-urlencode 'show_unfollow_list=1' \ + --data-urlencode 'show_dustbin=1' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "unfollow_unread": 1, + "follow_unread": 6, + "unfollow_push_msg": 0, + "dustbin_push_msg": 0, + "dustbin_unread": 0, + "biz_msg_unfollow_unread": 0, + "biz_msg_follow_unread": 0, + "custom_unread": 0 + } +} +``` + +
+ +### 获取未读粉丝团私信数 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | ------------- | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------------- | ---------------- | +| unread_count | num | 未读粉丝团私信数 | | + +**示例:** + +以下信息代表未读粉丝团私信数为 `497` 条 + +```shell +curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/my_group_unread' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "unread_count": 497 + } +} +``` + +
+ +### 获取指定类型会话列表 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | -------------------- | ------ | ------------------------- | +| session_type | num | 会话类型 | 必要 | 1:用户与系统
2:未关注人
3:粉丝团
4:所有
5:被拦截
6:花火商单
7:所有系统消息
8:陌生人(与 “未关注人” 不同,不包含官方消息)
9:关注的人与系统 | +| group_fold | num | 是否折叠粉丝团消息 | 非必要 | 0:否
1:是 | +| unfollow_fold | num | 是否折叠未关注人消息 | 非必要 | 0:否
1:是 | +| sort_rule | num | 排序方式 | 非必要 | 仅当 `session_type` 不为 `4`、`7` 时有效
1、2:按会话时间逆向排序
3:按已读时间逆向排序
其他:用户与系统按会话时间逆向排序,粉丝团按加入时间正向排序 | +| begin_ts | num | 起始时间 | 非必要 | 微秒级时间戳 | +| end_ts | num | 终止时间 | 非必要 | 微秒级时间戳 | +| size | num | 返回的会话数 | 非必要 | 默认为 `20`,最大为 `100` | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
2:非法参数 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------------- | ---- | ---------------------------- | ------------------------ | +| session_list | 有会话时:array
无会话时:null | 会话列表 | | +| has_more | num | 是否有更多会话 | | +| anti_distrub_cleaning | bool | 是否开启了“一键防骚扰”功能 | | +| is_address_list_empty | num | 0 | **作用尚不明确** | +| system_msg | obj | 系统会话列表 | 仅当存在系统会话时有此项 | +| show_level | bool | 是否在会话列表中显示用户等级 | 目前恒为 `true` | + +`data`对象中的`session_list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ------------------------- | +| 0 | obj | 会话1 | 详见[会话对象](#会话对象) | +| n | obj | 会话(n+1) | | +| …… | obj | …… | …… | + +`data`对象中的`system_msg`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | ---------- | ---------------------------------------------------------- | +| {系统会话类型代码} | num | 系统会话id | 详见[会话对象](#会话对象)中对 `system_msg_type` 字段的说明 | + +**示例:** + +获取所有类型的会话列表: + +```shell +curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/get_sessions' \ + --data-urlencode 'session_type=4' \ + --data-urlencode 'group_fold=0' \ + --data-urlencode 'unfollow_fold=0' \ + --data-urlencode 'sort_rule=2' \ + --data-urlencode 'size=3' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "session_list": [ + { + "talker_id": 844424930131966, + "session_type": 1, + "at_seqno": 0, + "top_ts": 0, + "group_name": "", + "group_cover": "", + "is_follow": 1, + "is_dnd": 0, + "ack_seqno": 1238729956474887, + "ack_ts": 1709536924979884, + "session_ts": 1712305278098351, + "unread_count": 4, + "last_msg": { + "sender_uid": 844424930131966, + "receiver_type": 1, + "receiver_id": 425503913, + "msg_type": 10, + "content": "{\"title\":\"流量奖励到账通知\",\"text\":\"恭喜您已获得2000流量曝光奖励,快来投稿使用吧。\",\"jump_text\":\"\",\"jump_uri\":\"\",\"modules\":null,\"jump_text_2\":\"\",\"jump_uri_2\":\"\",\"jump_text_3\":\"\",\"jump_uri_3\":\"\",\"notifier\":null,\"jump_uri_config\":{\"all_uri\":\"https://member.bilibili.com/york/flow-reward?navhide=1\\u0026from=msgrecall\",\"text\":\"\"},\"jump_uri_2_config\":{\"text\":\"\"},\"jump_uri_3_config\":{\"text\":\"\"},\"biz_content\":null}", + "msg_seqno": 1285290404823041, + "timestamp": 1712305278, + "at_uids": null, + "msg_key": 7354295169819585966, + "msg_status": 0, + "notify_code": "2091_253", + "new_face_version": 1, + "msg_source": 6 + }, + "group_type": 0, + "can_fold": 0, + "status": 0, + "max_seqno": 1285290404823041, + "new_push_msg": 1, + "setting": 0, + "is_guardian": 0, + "is_intercept": 0, + "is_trust": 0, + "system_msg_type": 7, + "account_info": { + "name": "UP主小助手", + "pic_url": "https://message.biliimg.com/bfs/im/489a63efadfb202366c2f88853d2217b5ddc7a13.png" + }, + "live_status": 0, + "biz_msg_unread_count": 0, + "user_label": null + }, + { + "talker_id": 293793435, + "session_type": 1, + "at_seqno": 0, + "top_ts": 0, + "group_name": "", + "group_cover": "", + "is_follow": 1, + "is_dnd": 0, + "ack_seqno": 1236306587877408, + "ack_ts": 1709536984481314, + "session_ts": 1709385615744065, + "unread_count": 0, + "last_msg": { + "sender_uid": 293793435, + "receiver_type": 1, + "receiver_id": 425503913, + "msg_type": 11, + "content": "{\"title\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"times\":14,\"cover\":\"http://i0.hdslb.com/bfs/archive/8821c03ab27a0bcf2bf32af814e758ab17a1e27e.png\",\"rid\":1951316064,\"type_\":8,\"desc\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"bvid\":\"BV1zC411p7JN\",\"view\":452,\"danmaku\":0,\"pub_date\":1709385603,\"attach_msg\":null}", + "msg_seqno": 1236306587877408, + "timestamp": 1709385615, + "at_uids": null, + "msg_key": 7341755312943193481, + "msg_status": 0, + "notify_code": "", + "new_face_version": 1, + "msg_source": 6 + }, + "group_type": 0, + "can_fold": 0, + "status": 0, + "max_seqno": 1236306587877408, + "new_push_msg": 0, + "setting": 0, + "is_guardian": 0, + "is_intercept": 0, + "is_trust": 0, + "system_msg_type": 0, + "live_status": 0, + "biz_msg_unread_count": 0, + "user_label": null + }, + { + "talker_id": 221082140, + "session_type": 2, + "at_seqno": 0, + "top_ts": 0, + "group_name": "社会易姐QwQ的应援团", + "group_cover": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "is_follow": 0, + "is_dnd": 0, + "ack_seqno": 20, + "ack_ts": 1695011620552332, + "session_ts": 1693626568439784, + "unread_count": 0, + "last_msg": { + "sender_uid": 0, + "receiver_type": 2, + "receiver_id": 221082140, + "msg_type": 306, + "content": "{\"group_id\":221082140,\"content\":\"欢迎罗板栗入群\"}", + "msg_seqno": 20, + "timestamp": 1693626568, + "at_uids": null, + "msg_key": 7274070721607234847, + "msg_status": 0, + "notify_code": "", + "msg_source": 13 + }, + "group_type": 0, + "can_fold": 0, + "status": 0, + "max_seqno": 20, + "new_push_msg": 0, + "setting": 0, + "is_guardian": 0, + "is_intercept": 0, + "is_trust": 0, + "system_msg_type": 0, + "live_status": 0, + "biz_msg_unread_count": 0, + "user_label": null + } + ], + "has_more": 1, + "anti_disturb_cleaning": false, + "is_address_list_empty": 0, + "system_msg": { + "1": 844424930131967, + "7": 844424930131966, + "9": 844424930131965 + }, + "show_level": true + } +} +``` + +
+ +### 获取新会话列表 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +获取指定时间之后的新会话列表 + +注:该接口默认每 20 秒请求一次 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | ------------------------- | +| begin_ts | num | 起始时间 | 非必要 | 微秒级时间戳 | +| size | num | 返回的会话数 | 非必要 | 默认为 `20`,最大为 `100` | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------------- | ---- | ---------------------------- | ---------------------- | +| session_list | 有会话时:array
无会话时:null | 会话列表 | 按发送时间顺序逆向排序 | +| has_more | num | 是否有更多会话 | | +| anti_distrub_cleaning | bool | 是否开启了“一键防骚扰”功能 | | +| is_address_list_empty | num | 0 | **作用尚不明确** | +| show_level | bool | 是否在会话列表中显示用户等级 | 目前恒为 `false` | + +`data`对象中的`session_list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ------------------------- | +| 0 | obj | 会话1 | 详见[会话对象](#会话对象) | +| n | obj | 会话(n+1) | | +| …… | obj | …… | …… | + +**示例:** + +获取`begin_ts=1712420213519391`之后的新会话列表: + +```shell +curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/new_sessions' \ + --data-urlencode 'begin_ts=1712420213519391' \ + --data-urlencode 'size=3' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "session_list": [ + { + "talker_id": 844424930131966, + "session_type": 1, + "at_seqno": 0, + "top_ts": 0, + "group_name": "", + "group_cover": "", + "is_follow": 1, + "is_dnd": 0, + "ack_seqno": 1238729956474887, + "ack_ts": 1709536924979884, + "session_ts": 1712305278098351, + "unread_count": 4, + "last_msg": { + "sender_uid": 844424930131966, + "receiver_type": 1, + "receiver_id": 425503913, + "msg_type": 10, + "content": "{\"title\":\"流量奖励到账通知\",\"text\":\"恭喜您已获得2000流量曝光奖励,快来投稿使用吧。\",\"jump_text\":\"\",\"jump_uri\":\"\",\"modules\":null,\"jump_text_2\":\"\",\"jump_uri_2\":\"\",\"jump_text_3\":\"\",\"jump_uri_3\":\"\",\"notifier\":null,\"jump_uri_config\":{\"all_uri\":\"https://member.bilibili.com/york/flow-reward?navhide=1\\u0026from=msgrecall\",\"text\":\"\"},\"jump_uri_2_config\":{\"text\":\"\"},\"jump_uri_3_config\":{\"text\":\"\"},\"biz_content\":null}", + "msg_seqno": 1285290404823041, + "timestamp": 1712305278, + "at_uids": null, + "msg_key": 7354295169819585966, + "msg_status": 0, + "notify_code": "2091_253", + "new_face_version": 1, + "msg_source": 6 + }, + "group_type": 0, + "can_fold": 0, + "status": 0, + "max_seqno": 1285290404823041, + "new_push_msg": 1, + "setting": 0, + "is_guardian": 0, + "is_intercept": 0, + "is_trust": 0, + "system_msg_type": 7, + "account_info": { + "name": "UP主小助手", + "pic_url": "https://message.biliimg.com/bfs/im/489a63efadfb202366c2f88853d2217b5ddc7a13.png" + }, + "live_status": 0, + "biz_msg_unread_count": 0, + "user_label": null + }, + { + "talker_id": 293793435, + "session_type": 1, + "at_seqno": 0, + "top_ts": 0, + "group_name": "", + "group_cover": "", + "is_follow": 1, + "is_dnd": 0, + "ack_seqno": 1236306587877408, + "ack_ts": 1709536984481314, + "session_ts": 1709385615744065, + "unread_count": 0, + "last_msg": { + "sender_uid": 293793435, + "receiver_type": 1, + "receiver_id": 425503913, + "msg_type": 11, + "content": "{\"title\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"times\":14,\"cover\":\"http://i0.hdslb.com/bfs/archive/8821c03ab27a0bcf2bf32af814e758ab17a1e27e.png\",\"rid\":1951316064,\"type_\":8,\"desc\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"bvid\":\"BV1zC411p7JN\",\"view\":452,\"danmaku\":0,\"pub_date\":1709385603,\"attach_msg\":null}", + "msg_seqno": 1236306587877408, + "timestamp": 1709385615, + "at_uids": null, + "msg_key": 7341755312943193481, + "msg_status": 0, + "notify_code": "", + "new_face_version": 1, + "msg_source": 6 + }, + "group_type": 0, + "can_fold": 0, + "status": 0, + "max_seqno": 1236306587877408, + "new_push_msg": 0, + "setting": 0, + "is_guardian": 0, + "is_intercept": 0, + "is_trust": 0, + "system_msg_type": 0, + "live_status": 0, + "biz_msg_unread_count": 0, + "user_label": null + }, + { + "talker_id": 221082140, + "session_type": 2, + "at_seqno": 0, + "top_ts": 0, + "group_name": "社会易姐QwQ的应援团", + "group_cover": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "is_follow": 0, + "is_dnd": 0, + "ack_seqno": 20, + "ack_ts": 1695011620552332, + "session_ts": 1693626568439784, + "unread_count": 0, + "last_msg": { + "sender_uid": 0, + "receiver_type": 2, + "receiver_id": 221082140, + "msg_type": 306, + "content": "{\"group_id\":221082140,\"content\":\"欢迎罗板栗入群\"}", + "msg_seqno": 20, + "timestamp": 1693626568, + "at_uids": null, + "msg_key": 7274070721607234847, + "msg_status": 0, + "notify_code": "", + "msg_source": 13 + }, + "group_type": 0, + "can_fold": 0, + "status": 0, + "max_seqno": 20, + "new_push_msg": 0, + "setting": 0, + "is_guardian": 0, + "is_intercept": 0, + "is_trust": 0, + "system_msg_type": 0, + "live_status": 0, + "biz_msg_unread_count": 0, + "user_label": null + } + ], + "has_more": 0, + "anti_disturb_cleaning": false, + "is_address_list_empty": 0, + "show_level": false + } +} +``` + +
+ +### 获取会话详细信息 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +若从未与该会话聊过天,则返回 1000004 `入口节点已存在` 错误 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ---------------- | ------ | ------------------------------------------------------ | +| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id | +| session_type | num | 聊天对象的类型 | 必要 | 1:用户
2:粉丝团 | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
1000004:入口节点已存在 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:obj
无效时:null | 数据本体 | 详见[会话对象](#会话对象) | + +**示例:** + +获取会话`talker_id=293793435&session_type=1`的详细信息: + +```shell +curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/session_detail' \ + --data-urlencode 'talker_id=293793435' \ + --data-urlencode 'session_type=1' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "talker_id": 293793435, + "session_type": 1, + "at_seqno": 0, + "top_ts": 0, + "group_name": "", + "group_cover": "", + "is_follow": 1, + "is_dnd": 0, + "ack_seqno": 1236306587877408, + "ack_ts": 1709536984481314, + "session_ts": 1709385615744065, + "unread_count": 0, + "last_msg": { + "sender_uid": 293793435, + "receiver_type": 1, + "receiver_id": 425503913, + "msg_type": 11, + "content": "{\"title\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"times\":14,\"cover\":\"http://i0.hdslb.com/bfs/archive/8821c03ab27a0bcf2bf32af814e758ab17a1e27e.png\",\"rid\":1951316064,\"type_\":8,\"desc\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"bvid\":\"BV1zC411p7JN\",\"view\":452,\"danmaku\":0,\"pub_date\":1709385603,\"attach_msg\":null}", + "msg_seqno": 1236306587877408, + "timestamp": 1709385615, + "at_uids": null, + "msg_key": 7341755312943193481, + "msg_status": 0, + "notify_code": "", + "new_face_version": 1, + "msg_source": 6 + }, + "group_type": 0, + "can_fold": 0, + "status": 0, + "max_seqno": 1236306587877408, + "new_push_msg": 0, + "setting": 0, + "is_guardian": 0, + "is_intercept": 0, + "is_trust": 0, + "system_msg_type": 0, + "live_status": 0, + "biz_msg_unread_count": 0, + "user_label": null + } +} +``` + +
+ +### 获取会话限制状态 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +仅支持用户会话 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| uid | num | 聊天对象mid | 必要 | | +| type | num | 1 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
2:非法参数
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------------------ | ---------------------------- | +| is_limit | num | 用户是否被封禁 | | +| report_limit | num | 自己是否被限制举报该会话 | 常见于自己被封禁时出现该情况 | + +**示例:** + +获取`uid=123`的限制状态: + +```shell +curl -G 'https://api.vc.bilibili.com/link_setting/v1/link_setting/is_limit' \ + --data-urlencode 'uid=123' \ + --data-urlencode 'type=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "is_limit": 0, + "report_limit": 0 + } +} +``` + +
+ +### 获取会话免打扰状态 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ---------------- | ------ | ----------------------- | +| own_uid | num | 自己的mid | 必要 | | +| uids | num | 用户mid | 非必要 | 仅支持填入 **1 个** mid | +| group_ids | num | 粉丝团id | 非必要 | 仅支持填入 **1 个** id | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
2:非法参数
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ----- | ---------------- | ------------------------------------- | +| uid_settings | array | 用户免打扰状态 | 仅当请求参数 `uids` 存在时有此项 | +| group_settings | array | 粉丝团免打扰状态 | 仅当请求参数 `group_ids` 存在时有此项 | + +`data`对象中的`uid_settings`、`group_settings`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | --------------------------------- | +| 0 | obj | 会话免打扰状态 | 仅有1项 | + +`uid_settings`、`group_settings`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ----------------- | -------------------------------- | +| id | num | 用户mid或粉丝团id | | +| setting | num | 免打扰状态 | 0:关闭免打扰
1:开启免打扰 | + +**示例:** + +获取会话`uids=2`与`group_ids=221082140`的免打扰状态: + +```shell +curl -G 'https://api.vc.bilibili.com/link_setting/v1/link_setting/get_msg_dnd' \ + --data-urlencode 'own_uid=425503913' \ + --data-urlencode 'uids=2' \ + --data-urlencode 'group_ids=221082140' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "uid_settings": [{ + "id": 2, + "setting": 0 + }], + "group_settings": [{ + "id": 221082140, + "setting": 0 + }] + } +} +``` + +
+ +### 获取会话推送设置 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +仅支持用户会话 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ---------------- | ------ | ------------- | +| talker_uid | num | 聊天对象mid | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
2:非法参数
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ---------------------- | ----------------------------------- | +| follow_status | num | 对方对于自己的关注属性 | 0:未关注
~~1:悄悄关注(现已下线)~~
2:已关注
6:已互粉
128:已拉黑 | +| special | num | 自己是否特别关注了对方 | | +| push_setting | num | 推送设置 | 0:接收推送
1:不接收推送 | +| show_push_setting | num | 是否显示推送设置 | | + +**示例:** + +获取`talker_uid=123`的推送设置: + +```shell +curl -G 'https://api.vc.bilibili.com/link_setting/v1/link_setting/get_session_ss' \ + --data-urlencode 'talker_uid=123' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "follow_status": 6, + "special": 1, + "push_setting": 0, + "show_push_setting": 1 + } +} +``` + +
+ +### 设置会话为已读 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +将指定会话中的指定消息及以前的消息设置为已读 + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------ | ------ | ---------------------------------------------------- | +| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id | +| session_type | num | 聊天对象的类型 | 必要 | 1:用户
2:粉丝团 | +| ack_seqno | num | 设置为已读的消息序列号 | 非必要 | 留空表示最新的消息 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 成功时为0 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:不存在该项 | 信息本体 | 空对象 | + +**示例:** + +将`talker_id=293793435`、`session_type=1`的`ack_seqno=1236306587877408`消息及之前的消息设置为已读 + +```shell +curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/update_ack' \ + --data-urlencode 'talker_id=293793435' \ + --data-urlencode 'session_type=1' \ + --data-urlencode 'ack_seqno=1236306587877408' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +### 移除指定会话 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +将指定会话从会话列表中移除,不会删除聊天记录 + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------ | ------ | ---------------------------------------------------- | +| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id | +| session_type | num | 聊天对象的类型 | 必要 | 1:用户
2:粉丝团 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 成功时为0 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:不存在该项 | 信息本体 | 空对象 | + +**示例:** + +移除会话`talker_id=2&session_type=1` + +```shell +curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/remove_session' \ + --data-urlencode 'talker_id=2' \ + --data-urlencode 'session_type=1' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +### 修改会话置顶状态 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------ | ------ | ---------------------------------------------------- | +| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id | +| session_type | num | 聊天对象的类型 | 必要 | 1:用户
2:粉丝团 | +| op_type | num | 操作类型 | 必要 | 0:置顶
1:取消置顶 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 成功时为0 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:不存在该项 | 信息本体 | 空对象 | + +**示例:** + +置顶会话`talker_id=293793435&session_type=1` + +```shell +curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/set_top' \ + --data-urlencode 'talker_id=293793435' \ + --data-urlencode 'session_type=1' \ + --data-urlencode 'op_type=0' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +### 修改会话免打扰状态 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------ | ------------ | -------------------------------- | +| uid | num | 自己的mid | 非必要 | | +| setting | num | 免打扰设置 | 必要 | 0:取消免打扰
1:开启免打扰 | +| dnd_uid | num | 用户mid | 必要(可选) | 当聊天对象为用户时有效 | +| dnd_group_id | num | 粉丝团id | 必要(可选) | 当聊天对象为粉丝团时有效 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 成功时为0 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:不存在该项 | 信息本体 | 空对象 | + +**示例:** + +对会话`dnd_uid=2`开启免打扰 + +```shell +curl 'https://api.vc.bilibili.com/link_setting/v1/link_setting/set_msg_dnd' \ + --data-urlencode 'uid=425503913' \ + --data-urlencode 'setting=1' \ + --data-urlencode 'dnd_uid=2' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +### 修改会话推送设置 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +仅支持用户会话 + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ------------------------------ | +| talker_uid | num | 聊天对象mid | 必要 | | +| setting | num | 推送设置 | 必要 | 0:接收推送
1:不接收推送 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 成功时为0 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:不存在该项 | 信息本体 | 空对象 | + +**示例:** + +修改`talker_uid=2`的推送设置为不接收推送 + +```shell +curl 'https://api.vc.bilibili.com/link_setting/v1/link_setting/set_push_ss' \ + --data-urlencode 'talker_uid=2' \ + --data-urlencode 'setting=1' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +### 修改会话拦截状态 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +仅支持用户会话 + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ---------------------------- | +| talker_id | num | 聊天对象mid | 必要 | | +| status | num | 拦截状态 | 必要 | 0:取消拦截
1:设置拦截 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 成功时为0 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:不存在该项 | 信息本体 | 空对象 | + +**示例:** + +对会话`talker_id=2`取消拦截状态 + +```shell +curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/update_intercept' \ + --data-urlencode 'talker_id=2' \ + --data-urlencode 'status=0' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +### 设置所有拦截会话为已读 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ------------- | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 成功时为0 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:不存在该项 | 信息本体 | 空对象 | + +**示例:** + +```shell +curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/batch_update_dustbin_ack' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +### 移除所有拦截会话 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ------------- | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 成功时为0 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:不存在该项 | 信息本体 | 空对象 | + +**示例:** + +```shell +curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/batch_rm_dustbin' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 私信消息相关 + +### 查询私信消息记录 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +仅调用该接口不会设置会话为已读,详见[设置会话为已读](#设置会话为已读) + +此接口有设计缺陷,可以获取已经撤回(`msg_status` 为 `1`)的私信内容 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------------- | ---- | ---------------- | ------ | ------------------------------------------------------ | +| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id | +| session_type | num | 聊天对象的类型 | 必要 | 1:用户
2:粉丝团 | +| size | num | 返回消息数量 | 非必要 | 默认为 0,最大为 2000
当本参数为 `0` 或不存在时,只返回系统提示 | +| begin_seqno | num | 开始的序列号 | 非必要 | 提供本参数时返回以本序列号开始(不包括本序列号)的消息 | +| end_seqno | num | 结束的序列号 | 非必要 | 提供本参数时返回以本序列号结束(不包括本序列号)的消息 | +| sender_device_id | num | 发送者设备 | 非必要 | 默认为 `1` | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等;**若本参数值为 `web`,则返回新版表情包** | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
2:非法参数
-101:账号未登录
-400:请求错误
700013:已解散QAQ,无法执行此操作
700014:你已不在此同萌中QAQ,无法执行此操作 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------------------------------ | ----------------------------------- | +| messages | 有私信时:array
无私信时:null | 私信列表 | 按发送时间顺序逆向排序 | +| has_more | num | 是否有更多私信 | | +| min_seqno | num | 所有消息中最小的序列号(最早) | 若无私信则为 `18446744073709551615` | +| max_seqno | num | 所有消息中最大的序列号(最晚) | 若无私信则为 `0` | +| e_infos | array | 聊天表情列表 | 若私信列表中无表情则无此项 | + +`data`对象中的`messages`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | --------------------------------- | +| 0 | obj | 私信1 | 详见[私信主体对象](#私信主体对象) | +| n | obj | 私信(n+1) | | +| …… | obj | …… | …… | + +`data`对象中的`e_infos`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 表情1 | | +| n | obj | 表情(n+1) | | +| …… | obj | …… | …… | + +`data`对象中的`e_infos`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ----------- | ----------------------------------- | +| text | str | 表情名称 | 包括左右两侧的中括号,如`[tv_doge]` | +| uri | str | 表情链接 | | +| size | num | 表情尺寸 | 1:小
2:大 | +| gif_url | str | 表情GIF链接 | 仅部分表情存在此项,如小电视表情 | + +**示例:** + +获取与目标用户`mid=123`的私信记录: + +```shell +curl -G 'https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs' \ + --data-urlencode 'talker_id=123' \ + --data-urlencode 'session_type=1' \ + --data-urlencode 'size=20' \ + --data-urlencode 'sender_device_id=1' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "messages": [ + { + "sender_uid": 2239814, + "receiver_type": 1, + "receiver_id": 123, + "msg_type": 1, + "content": "{\"content\":\"[口罩]\"}", + "msg_seqno": 309675413389322, + "timestamp": 1654154093, + "at_uids": [ + 0 + ], + "msg_key": 7104537732714964358, + "msg_status": 0, + "notify_code": "", + "new_face_version": 1, + "msg_source": 2 + }, + { + "sender_uid": 2239814, + "receiver_type": 1, + "receiver_id": 123, + "msg_type": 5, + "content": "{\"content\":\"1\"}", + "msg_seqno": 308302399586307, + "timestamp": 1654072255, + "at_uids": [ + 0 + ], + "msg_key": 7104186240789226795, + "msg_status": 0, + "notify_code": "", + "msg_source": 7 + + }, + ], + "has_more": 0, + "min_seqno": 308188515844097, + "max_seqno": 309675413389322, + "e_infos": [ + { + "text": "[口罩]", + "url": "http://i0.hdslb.com/bfs/emote/3ad2f66b151496d2a5fb0a8ea75f32265d778dd3.png", + "size": 1 + } + ] + } +} +``` + +
+ +### 获取多个视频、番剧、专栏的信息 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +可用于获取私信中分享或推送的多个视频、番剧、专栏的信息 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ---------------- | ----------- | --------------------------------------------------------------------------------------------- | +| aids | nums | 视频AV号列表 | 必要 (可选) | `aids`、`ep_ids` 与 `article_ids` 中须至少存在一个参数,每个成员间用 `,` 分隔,最多 50 个成员 | +| ep_ids | nums | 番剧epid列表 | 必要 (可选) | `aids`、`ep_ids` 与 `article_ids` 中须至少存在一个参数,每个成员间用 `,` 分隔,最多 50 个成员 | +| article_ids | nums | 专栏CV号列表 | 必要 (可选) | `aids`、`ep_ids` 与 `article_ids` 中须至少存在一个参数,每个成员间用 `,` 分隔,无成员限制 | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------------ | --------------------------------------- | +| archive | array | 视频信息列表 | 仅在指定了 `aids` 参数时存在此项 | +| article | array | 专栏信息列表 | 仅在指定了 `article_ids` 参数时存在此项 | +| pgc | array | 番剧信息列表 | 仅在指定了 `ep_ids` 参数时存在此项 | + +`archive`、`article`、`pgc`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 信息1 | | +| n | obj | 信息(n+1) | | +| …… | obj | …… | …… | + +`archive`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ------------------------------ | +| bvid | str | 视频BV号 | | +| aid | num | 视频AV号 | | +| title | str | 视频标题 | 若视频失效则为 `内容已失效` | +| pic | str | 视频封面 | 若视频失效则为空文本 | +| param | str | 提供的参数 | 即 AV 号的文本形式 | +| uri | str | 跳转url | `bilibili://video/{视频AV号}` | +| goto | str | `av` | | +| duration | num | 视频时长 | 以秒为单位,若视频失效则为 `0` | +| up_name | str | 视频UP主昵称 | | +| view | num | 视频播放量 | | +| danmaku | num | 视频弹幕数 | | +| status | num | 视频状态 | 0:正常
-1:已失效 | +| is_started | num | 1 | **作用尚不明确** | + +`article`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ------------ | --------------------------- | +| id | num | 专栏CV号 | | +| title | str | 专栏标题 | 若专栏失效则为 `内容已失效` | +| summary | str | 专栏内容概要 | 若专栏失效则为空文本 | +| template_id | num | (?) | **作用尚不明确** | +| up_name | str | 专栏UP主昵称 | 若专栏失效则为空文本 | +| image_urls | array | 专栏封面列表 | 若专栏失效则为空数组 | +| view_num | num | 专栏观看数 | 若专栏失效则为 `0` | +| like_num | num | 专栏点赞数 | 若专栏失效则为 `0` | +| reply_num | num | 专栏评论数 | 若专栏失效则为 `0` | +| status | num | 专栏状态 | 0:正常
-1:已失效 | + +`image_urls`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | str | 封面1 | | +| n | str | 封面(n+1) | | +| …… | str | …… | …… | + +`pgc`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | --------------------------- | +| ep_id | num | 番剧epid | | +| cover | str | 番剧封面url | | +| title | str | 番剧分享标题 | 如 `《{番剧名}》 第{n}话 {单集标题}`、`《{番剧名}》 {备注}` 等 | +| duration | num | 番剧时长 | 以秒为单位 | +| view | num | 番剧播放量 | | +| danmaku | num | 番剧弹幕数 | | +| url | str | 跳转url | `https://www.bilibili.com/bangumi/play/ep{番剧epid}` | + +**示例:** + +获取`aids=170001&ep_ids=780019&article_ids=1`的信息 + +```shell +curl -G 'https://api.vc.bilibili.com/x/im/feed/infoweb' \ + --data-urlencode 'aids=170001' \ + --data-urlencode 'ep_ids=780019' \ + --data-urlencode 'article_ids=1' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "archive": [ + { + "bvid": "BV17x411w7KC", + "aid": 170001, + "title": "【MV】保加利亚妖王AZIS视频合辑", + "pic": "http://i2.hdslb.com/bfs/archive/1ada8c32a9d168e4b2ee3e010f24789ba3353785.jpg", + "param": "170001", + "uri": "bilibili://video/170001?player_height=288&player_rotate=0&player_width=512", + "goto": "av", + "duration": 2412, + "up_name": "冰封.虾子", + "view": 44809333, + "danmaku": 913266, + "status": 0, + "is_started": 1 + } + ], + "article": [ + { + "id": 1, + "title": "未知的光", + "summary": "天空像是倾倒出的墨水,黑得静谧而深邃。黎明还远,光亮全无。夜不能寐。披衣,起床。茶香的弥漫,一盏灯的相伴。夜,你是我久别重逢的朋友,那一刹那的相见,带给了我久违的安思。如果不是梦魇的皮闹,我本不该投入", + "template_id": 4, + "up_name": "健行见远渐忘", + "image_urls": [ + "https://i0.hdslb.com/bfs/article/d2eedf1fd338bceca10099e2f7b33fa9017c859b.jpg" + ], + "view_num": 1608818, + "like_num": 32247, + "reply_num": 14143, + "status": 0 + } + ], + "pgc": [ + { + "ep_id": 780019, + "cover": "http://i0.hdslb.com/bfs/archive/ee28c04d15fb133a9c70c502fabfbdc7e5051ffe.png", + "title": "《铃芽之旅》 新海诚集大成之作", + "duration": 7283, + "view": 22088209, + "danmaku": 93069, + "url": "https://www.bilibili.com/bangumi/play/ep780019" + } + ] + } +} +``` + +
+ +### 发送私信(web端) + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +**仅支持发送 `msg[msg_type]` 为 `1`、`2` 或 `5` 的私信** + +调用该接口会将该会话设置为已读 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | --------------- | ------ | ------------------------------------ | +| w_sender_uid | num | 发送者mid | 非必要 | 同正文参数 `msg[sender_uid]` | +| w_receiver_id | num | 接收者id | 非必要 | 同正文参数 `msg[receiver_id]` | +| w_dev_id | str | 设备id | 非必要 | 同正文参数 `msg[dev_id]` | +| w_rid | str | Wbi 签名 | 非必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) | +| wts | str | UNIX 秒级时间戳 | 非必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) | + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------------------- | ---- | ------------------------ | ------ | ---------------------------------------------------- | +| msg\[sender_uid\] | num | 发送者mid | 必要 | 必须为自己的 mid | +| msg\[receiver_id\] | num | 接收者id | 必要 | `msg[receiver_type]` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id | +| msg\[receiver_type\] | num | 接收者类型 | 必要 | 1:用户
2:粉丝团 | +| msg\[msg_type\] | num | 消息类型 | 必要 | 详见[私信消息类型、内容说明](private_msg_content.md)
**此接口仅支持传入 `1`、`2` 或 `5`** | +| msg\[msg_status\] | num | 消息状态 | 非必要 | 恒为 `0` | +| msg\[dev_id\] | str | 设备id | 必要 | 实质上即 UUID(版本 4),**生成方式见下** | +| msg\[timestamp\] | num | 当前时间戳(秒) | 必要 | | +| msg\[new_face_version\] | num | 表情包版本 | 非必要 | 提供 `0` 或者未提供本参数表示旧版表情包,此时 B 站会自动转换成新版表情包,例如 `[doge]` -> `[tv_doge]`;`1` 为新版 | +| msg\[content\] | str | 消息内容 | 必要 | 详见[私信消息类型、内容说明](private_msg_content.md),接受最多2000字节的内容 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +--- + +**dev_id 的生成:** + +dev_id 实质上就是 UUID(版本 4) + +
+查看生成 UUID 的代码 + +#### Python + +```python +import uuid + +dev_id = str(uuid.uuid4()) +``` + +#### JavaScript + +以下代码适用于较新版的 JS 引擎(Chrome≥92,Firefox≥95,Safari≥15.4,Node.js≥19.0.0): + +```js +const dev_id = crypto.randomUUID(); +``` + +以下为通用代码(来自 [andywang425/BLTH](https://github.com/andywang425/BLTH/blob/45fe93e31754ca8bf07059d46266398e787dbf45/B%E7%AB%99%E7%9B%B4%E6%92%AD%E9%97%B4%E6%8C%82%E6%9C%BA%E5%8A%A9%E6%89%8B.js#L6618)): + +```js +const dev_id = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function (name) { + const randomInt = 16 * Math.random() | 0; + return ("x" === name ? randomInt : 3 & randomInt | 8).toString(16).toUpperCase(); +})); +``` + +#### Java + +```java +import java.util.UUID; + +public class Main { + private String getDevId() { + UUID uuid = UUID.randomUUID(); + return uuid.toString(); + } +} +``` + +
+ +--- + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-3:系统错误
-101:账号未登录
-400:请求错误
10005:msgkey不存在
21007:消息过长,无法发送
21015:为了维护社区的良好秩序,只有绑定手机号的账号才能发送消息
21020:你发送消息频率过快,请稍后再发~
21026:不能给自己发送消息哦~
21028:由于系统升级,暂无法发送,敬请谅解
21035:该类消息暂时无法发送
21037:图片格式不合法,不要调戏接口啦
21041:消息已超期,不能撤回了哦
21042:消息已经撤回了哦
21046:你发消息的频率太高了,请在24小时后再发吧~
21047:对方主动回复或关注你前,最多发送1条消息~
25003:因对方隐私设置,暂无法给他发送聊天消息
25005:你已拉黑了对方,请先将对方移出黑名单后才能聊天
700013:已解散QAQ,无法执行此操作
700014:你已不在此同萌中QAQ,无法执行此操作 | +| message | str | 错误信息 | 成功时为0 | +| ttl | num | | 默认为1 | +| data | 有效时:obj
无效时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ----- | ---------- | --------------------------------------------------------------------- | +| msg_key | num | 消息唯一id | | +| e_infos | array | 表情列表 | 仅当请求参数 `msg[msg_type]` 为 `1`,且私信内容中有表情时有此项 | +| msg_content | str | 发送的私信内容 | 一般同请求参数 `msg[content]` 的值,仅当请求参数 `msg[msg_type]` 为 `1` 时有此项 | +| key_hit_infos | obj | 触发的提示 | 仅当请求参数 `msg[msg_type]` 为 `1` 且 `msg[receiver_type]` 为 `1` 时有此项 | + +`e_infos`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 表情1 | | +| n | obj | 表情(n+1) | | +| …… | obj | …… | …… | + +`e_infos`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ----------- | ----------------------------------- | +| text | str | 表情名称 | 包括左右两侧的中括号,如 `[tv_doge]` | +| uri | str | 表情链接 | | +| size | num | 表情尺寸 | 1:小
2:大 | +| gif_url | str | 表情GIF链接 | 仅部分表情存在此项,如小电视表情 | + +`key_hit_infos`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------------ | -------------------------------------- | +| toast | str | 提示信息文字 | 当触发了提示时有此项 | +| rule_id | num | 触发的规则id | 当触发了提示时有此项,详细信息有待补充 | +| high_text | array | 高亮的文本 | 当触发了提示时有此项 | + +`high_text`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------- | +| 0 | obj | 高亮文本1 | 详细信息有待补充 | +| n | obj | 高亮文本(n+1) | | +| …… | obj | …… | …… | + +**示例:** + +给目标用户`mid=1`发一条文字私信: + +> up主你好,
催更\[doge\] + +```shell +curl 'https://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \ + --data-urlencode 'msg[sender_uid]=293793435' \ + --data-urlencode 'msg[receiver_id]=1' \ + --data-urlencode 'msg[receiver_type]=1' \ + --data-urlencode 'msg[msg_type]=1' \ + --data-urlencode 'msg[msg_status]=0' \ + --data-urlencode 'msg[dev_id]=372778FD-E359-461D-86A3-EA2BCC6FF52A' \ + --data-urlencode 'msg[timestamp]=1626181379' \ + --data-urlencode 'msg[new_face_version]=1' \ + --data-urlencode 'msg[content]={"content":"up主你好,\n催更[doge]"}' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "msg_key": 6984393491767669026, + "e_infos": [ + { + "text": "[doge]", + "url": "https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png", + "size": 1 + } + ], + "msg_content": "{\"content\":\"up主你好,\\n催更[doge]\"}", + "key_hit_infos": {} + } +} +``` + +
+ +给目标用户`mid=1`发一条图片私信: + +> + +```shell +curl 'https://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \ + --data-urlencode 'msg[sender_uid]=293793435' \ + --data-urlencode 'msg[receiver_id]=1' \ + --data-urlencode 'msg[receiver_type]=1' \ + --data-urlencode 'msg[msg_type]=2' \ + --data-urlencode 'msg[msg_status]=0' \ + --data-urlencode 'msg[dev_id]=372778FD-E359-461D-86A3-EA2BCC6FF52A' \ + --data-urlencode 'msg[timestamp]=1626181379' \ + --data-urlencode 'msg[content]={"url":"https://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg","height":300,"width":300,"imageType":"jpeg","original":1,"size":54.144}' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "data": { + "msg_key": 6852570013146024354 + } +} +``` + +
+ +给目标用户`mid=1`发送会触发提示的私信: + +> 支付宝 + +```shell +curl 'https://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \ + --data-urlencode 'msg[sender_uid]=293793435' \ + --data-urlencode 'msg[receiver_id]=1' \ + --data-urlencode 'msg[receiver_type]=1' \ + --data-urlencode 'msg[msg_type]=1' \ + --data-urlencode 'msg[msg_status]=0' \ + --data-urlencode 'msg[dev_id]=372778FD-E359-461D-86A3-EA2BCC6FF52A' \ + --data-urlencode 'msg[timestamp]=1626181379' \ + --data-urlencode 'msg[content]={"content":"支付宝"}' \ + --data-urlencode 'csrf=xxx' \ + --data-urlencode 'csrf_token=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "msg_key": 6984393491767669026, + "msg_content": "{\"content\":\"支付宝\"}", + "key_hit_infos": { + "toast": "【温馨提示】为保障消费者权益,根据平台规则,如创作者在与消费者沟通中进行发布要求非法转账、欺诈转账等违规行为,平台有权对此进行处罚,感谢您的理解。", + "rule_id": 2, + "high_text": [{}] + } + } +} +``` + +
diff --git a/docs/message/private_msg_content.md b/docs/message/private_msg_content.md new file mode 100644 index 0000000..21a5deb --- /dev/null +++ b/docs/message/private_msg_content.md @@ -0,0 +1,627 @@ +# 私信消息类型、内容说明 + +## 通用消息类型 + +以下消息类型适用于大多数会话 + +### 文字消息(`msg_type=1`) + +在发送私信时,请确保下面的对象合法且 `content` 项的值为非空文本,否则会提示 `请求错误` + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| content | str | 私信内容 | | + +**示例:** + +内容为 `Hello` 的文字消息 + +```json +{ + "content": "Hello" +} +``` + +### 图片消息(`msg_type=2`) + +在发送私信时,请确保下面的对象合法且 `url` 项的值为 B 站的图床 url,否则会报 21037 `图片格式不合法,不要调戏接口啦` 错误 + +建议设置 `height` 与 `width` 属性为图片的尺寸,否则可能会导致消息显示异常 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------- | ------------------------- | +| url | str | 图片url | 一般为 B 站图床 url | +| height | num | 图片高度 | 单位:像素(非必要) | +| width | num | 图片宽度 | 单位:像素(非必要) | +| imageType | str | 图片格式 | (非必要) | +| original | num | 是否为原图 | 当本参数值为 `1` 时,APP上会出现“下载原图”按钮(非必要) | +| size | num | 文件大小 | 单位:千字节(非必要) | + +**示例:** + +图片 `https://message.biliimg.com/bfs/im_new/c161fdf51d901c1607a15e30f10116dd425503913.jpg` + +```json +{ + "url": "https://message.biliimg.com/bfs/im_new/c161fdf51d901c1607a15e30f10116dd425503913.jpg", + "height": 300, + "width": 300, + "imageType": "jpeg", + "original": 1, + "size": 55.443 +} +``` + +### 撤回消息(`msg_type=5`) + +内容为目标私信的 `msg_key` + +请确保目标私信存在、在撤回有效期(120 秒)里,且与发送的私信在同一会话内,只能撤回自己发送的私信 + +成功发送此私信后,目标私信的 `msg_status` 会变成 `1`(在前端会显示目标私信被撤回) + +**示例:** + +假如存在 `msg_key` 为 `7345551441311046575` 的私信 A,用户发送了 `msg_type` 为 `5` 且 `content` 为以下内容的私信 B: + +```json +7345551441311046575 +``` + +若发送成功,则私信 A 会被撤回(在前端显示该消息被撤回),并且其 `msg_status` 也会变成 `1` + +### 自定义表情消息(`msg_type=6`) + +结构同[图片消息](#图片消息msg_type2) + +### 分享消息(`msg_type=7`) + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | -------------------------------------------------------------- | +| author | str | 分享内容作者 | 此项不实时更新,在发送私信时设置(非必要) | +| headline | str | 分享内容主标题 | 比 `title` 更突出;此项不实时更新,在发送私信时设置(非必要) | +| id | num | 分享内容id | | +| source | num | 分享内容类型 | ~~1:小视频~~(已弃用)
2:相簿
3:纯文字
4:直播(此类型不常用,见[分享其他内容消息](#分享其他内容消息msg_type14))
5:视频
6:专栏
7:番剧(`id` 为 season_id)
8:音乐
9:国产动画(`id` 为 AV 号)
10:图片
11:动态
16:番剧(`id` 为 epid)
17:番剧 | +| source_desc | str | 分享内容类型说明 | 仅当 `source` 值为 `16` 时有此项 | +| thumb | str | 分享内容封面 | 此项不实时更新,在发送私信时设置 | +| title | str | 分享内容标题 | 此项不实时更新,在发送私信时设置 | +| url | str | 分享内容url | (非必要) | +| bvid | str | 视频BV号 | 当 `source` 值为 `5` 时有效(非必要) | + +**示例:** + +分享 UP 主 “社会易姐QwQ” 的视频 av246551172/BV16v411e7CW + +```json +{ + "author": "社会易姐QwQ", + "headline": "", + "id": 246551172, + "source": 5, + "thumb": "http://i2.hdslb.com/bfs/archive/14ba78056f946ece8c954a10677ef6b073edb178.jpg", + "title": "合 成 大 東 瓜", + "bvid": "BV16v411e7CW" +} +``` + +### ~~系统撤回消息(`msg_type=8`)~~ + +~~此消息类型由于存在安全问题,已被弃用~~ + +
+查看此消息类型说明 + +此类型消息在接收时的 `msg_type` 的值为 `5`(而不是 `8`)且 `sys_cancel` 的值为 `true`,**仅在用户会话中有效;目前已不可直接发送** + +内容为目标私信的 `msg_key` + +请确保目标私信存在,且与发送的私信在同一会话内,只能撤回自己发送的私信;**不限制目标私信的发送时间** + +成功发送此私信后,目标私信的 `msg_status` 会变成 `2`(在前端会直接隐藏目标私信,且后端也不会返回目标私信的任何信息) + +
+ +### 小程序消息(`msg_type=9`) + +由于 B 站并没有对外公开小程序,此消息类型不常用 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ------------------------- | +| avatar | str | 小程序图标 | | +| cover | str | 小程序封面 | | +| id | str | 小程序id | | +| jump_uri | str | 小程序链接 | | +| label_cover | str | 标签图标 | | +| label_name | str | 标签文字内容 | 一般为 `小程序` | +| name | str | 小程序名称 | | +| title | str | 小程序标题 | | + +**示例:** + +分享 “主站测试专用小程序” + +```json +{ + "avatar": "http://i0.hdslb.com/bfs/mall/mall/7b/dd/7bdd072290de017593791b52e937ca29.png", + "cover": "http://i0.hdslb.com/bfs/mall/mall/7b/dd/7bdd072290de017593791b52e937ca29.png", + "id": "bili91e3e7e93af281f9", + "jump_uri": "https://mall.bilibili.com/miniapp/bili91e3e7e93af281f9/pages/main?___timestamp=1689526821040&_biliFrom=about_bili_message&share_medium=android&share_source=bili_message&bbid=XU8CE838022AF6625C64B2153A3EF1E571AFF&ts=1689526821048", + "label_cover": "https://i0.hdslb.com/bfs/mall/mall/ae/0e/ae0ee4a857df5e307e1d04b5d420cb5b.png", + "label_name": "小程序", + "name": "主站测试专用小程序", + "title": "主站测试专用小程序" +} +``` + +### 通知消息(`msg_type=10`) + +此类型消息仅可接收,**不可直接发送** + +**按钮显示逻辑说明:** + +- **按钮的url**:首先尝试读取 `jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config` 对象中表示当前设备类型的 url(如 `web_uri`、`android_uri` 等);若为空值,则尝试读取 `jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config` 对象中 `all_uri` 的值;若仍为空值,则读取根对象中 `jump_uri`、`jump_uri_2`、`jump_uri_3` 的值;若仍为空值,则不显示该按钮(无论提示文字是否为空) +- **按钮提示文字**:若按钮是可见的,则先尝试读取 `jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config` 对象中 `text` 的值;若为空值,则读取根对象中 `jump_text`、`jump_text_2`、`jump_text_3` 的值;若仍为空值,则提示文字为 `查看详情` + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ------------- | ------------------------- | +| title | str | 通知标题 | | +| text | str | 通知内容 | | +| jump_text | str | 按钮1提示文字 | 若按钮1不存在则为空;若按钮1存在,此项也可能为空,此时前端显示文字为 `查看详情` | +| jump_uri | str | 按钮1跳转链接 | 若按钮1不存在则为空 | +| modules | 有效时:array
无效时:null | 详细信息 | | +| jump_text_2 | str | 按钮2提示文字 | 若按钮2不存在则为空;若按钮2存在,此项也可能为空,此时前端显示文字为 `查看详情` | +| jump_uri_2 | str | 按钮2跳转链接 | 若按钮2不存在则为空 | +| jump_text_3 | str | 按钮3提示文字 | 若按钮3不存在则为空;若按钮3存在,此项也可能为空,此时前端显示文字为 `查看详情` | +| jump_uri_3 | str | 按钮3跳转链接 | 若按钮3不存在则为空 | +| notifier | 有效时:obj
无效时:null | 发送者信息 | | +| jump_uri_config | obj | 按钮1配置 | | +| jump_uri_2_config | obj | 按钮2配置 | | +| jump_uri_3_config | obj | 按钮3配置 | | +| biz_content | 有效时:obj
无效时:null | 扩展信息 | | + +`modules`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 详细信息1 | | +| n | obj | 详细信息(n+1) | | +| …… | obj | …… | …… | + +`modules`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ---- | ---- | +| title | str | 标题 | | +| detail | str | 内容 | | + +`notifier`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------- | ------ | +| avatar_url | str | 发送者头像 | | +| nickname | str | 发送者名称 | | +| jump_url | str | 发送者链接 | 可为空 | + +`jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ----------------------- | -------------------- | +| all_uri | str | 所有设备的跳转链接 | 若按钮不存在则无此项 | +| android_uri | str | Android客户端的跳转链接 | 若按钮不存在则无此项 | +| iphone_uri | str | iPhone客户端的跳转链接 | 若按钮不存在则无此项 | +| ipad_uri | str | iPad客户端的跳转链接 | 若按钮不存在则无此项 | +| web_uri | str | 网页上的跳转链接 | 若按钮不存在则无此项 | +| text | str | 按钮提示文字 | 若按钮不存在则为空 | + +`biz_content`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ----------- | ---------------- | +| cover | str | 封面url | | +| backup_cover | str | 备用封面url | | +| refresh_type | num | (?) | **作用尚不明确** | +| biz_type | num | (?) | **作用尚不明确** | +| biz_id1 | str | (?) | **作用尚不明确** | +| biz_id2 | str | (?) | **作用尚不明确** | +| biz_status | num | (?) | **作用尚不明确** | + +**示例:** + +直播开始提醒 + +```json +{ + "title": "直播开始提醒", + "text": "你预约的直播已开始,快来围观吧~", + "jump_text": "进入直播间", + "jump_uri": "https://live.bilibili.com/22747055?broadcast_type=0&is_room_feed=1&live_from=27040", + "modules": [{ + "title": "预约主题", + "detail": "2024哔哩哔哩拜年纪" + }, { + "title": "开播时间", + "detail": "2024-02-09 19:32" + }, { + "title": "UP主", + "detail": "哔哩哔哩拜年纪" + }], + "jump_text_2": "", + "jump_uri_2": "", + "jump_text_3": "", + "jump_uri_3": "", + "notifier": null, + "jump_uri_config": { + "all_uri": "https://live.bilibili.com/22747055?broadcast_type=0&is_room_feed=1&live_from=27040", + "text": "进入直播间" + }, + "jump_uri_2_config": { + "text": "" + }, + "jump_uri_3_config": { + "text": "" + }, + "biz_content": { + "cover": "", + "backup_cover": "http://i0.hdslb.com/bfs/live/new_room_cover/bdae2665883ec8aa4e79aca16f3c5ee2df1da64f.jpg", + "refresh_type": 1, + "biz_type": 2, + "biz_id1": "1868902080", + "biz_id2": "473923647994271663", + "biz_status": 0 + } +} +``` + +### 视频推送消息(`msg_type=11`) + +此类型消息仅可接收,**不可直接发送**;有小概率会出现即使视频存在,也只会出现 `rid`、`type`(值为 `11` 或 `8`,注意其名称后面没有下划线)和 `attach_msg` 三项的现象 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ------------------------------------------------------ | +| title | str | 视频标题 | 接收私信时实时更新此项,若视频失效则为空文本 | +| times | num | 视频时长 | 以秒为单位,接收私信时实时更新此项,若视频失效则为 `0` | +| cover | str | 视频封面 | 接收私信时实时更新此项,若视频失效则为空文本 | +| rid | num | 视频AV号 | | +| type_ | num | (?) | **作用尚不明确** | +| desc | str | 视频简介 | 接收私信时实时更新此项,若视频失效则为空文本 | +| bvid | str | 视频BV号 | | +| view | num | 视频播放量 | 接收私信时实时更新此项,若视频失效则为 `0` | +| danmaku | num | 视频弹幕数 | 接收私信时实时更新此项,若视频失效则为 `0` | +| pub_date | num | 视频发布时间 | 秒级时间戳,若视频失效则为 `0` | +| attach_msg | 有效时:obj
无效时:null | UP主赠言 | | + +`attach_msg`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------- | +| id | num | 赠言id | | +| content | str | 赠言内容 | 会自动加上 `UP主赠言:` 前缀,可能包含私信表情 | + +**示例:** + +推送视频 av740817783/BV1Dk4y1E7MZ + +```json +{ + "title": "【2023嵌入式大赛】浅浅测试一下龙芯开发板", + "times": 308, + "cover": "http://i2.hdslb.com/bfs/archive/880c937de9af758451aa94ee29771e0264c1903a.jpg", + "rid": 740817783, + "type_": 8, + "desc": "最近把龙芯开发板部分(任务一)程序完成了,时间非常紧迫,就不知道为啥突然给省赛加个(本来国赛的题\n从硬件焊接开始,到软件整完不过5天啊喂,肝疼,过几天比赛完发硬件制作过程\n硬件使用龙芯一号(LS1B010)SOC,软件使用 C 语言+FreeRTOS+VSCode 开发", + "bvid": "BV1Dk4y1E7MZ", + "view": 13492, + "danmaku": 5, + "pub_date": 1683381582, + "attach_msg": null +} +``` + +### 专栏推送消息(`msg_type=12`) + +此类型消息仅可接收,**不可直接发送**;有小概率会出现即使专栏存在,也只会出现 `rid`、`type`(值为 `12`)和 `attach_msg` 三项的现象 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ------------------------------------------------------ | +| rid | num | 专栏CV号 | | +| title | str | 专栏标题 | 接收私信时实时更新此项,若专栏失效则为 `内容已失效` | +| summary | str | 专栏内容概要 | 接收私信时实时更新此项,若专栏失效则为空文本 | +| author | str | 专栏UP主昵称 | 接收私信时实时更新此项,若专栏失效则为空文本 | +| view | num | 专栏观看数 | 接收私信时实时更新此项,若专栏失效则为 `0` | +| like | num | 专栏点赞数 | 接收私信时实时更新此项,若专栏失效则为 `0` | +| reply | num | 专栏评论数 | 接收私信时实时更新此项,若专栏失效则为 `0` | +| template_id | num | (?) | **作用尚不明确** | +| image_urls | 有效时:array
无效时:null | 专栏封面列表 | 接收私信时实时更新此项,若专栏失效则为 `null` | +| attach_msg | 有效时:obj
无效时:null | UP主赠言 | | +| pub_date | num | 专栏发布时间 | 秒级时间戳,若专栏失效则为 `0` | + +`image_urls`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | str | 封面1 | | +| n | str | 封面(n+1) | | +| …… | str | …… | …… | + +`attach_msg`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------- | +| id | num | 赠言id | | +| content | str | 赠言内容 | 会自动加上 `UP主赠言:` 前缀,可能包含私信表情 | + +**示例:** + +推送专栏 cv18275013 + +```json +{ + "rid": 18275013, + "title": "【单片机】遛弯捕捉到野生U盾,点亮它!", + "summary": "前一阵在学校那会,偶然的机会晚上饭后出去遛弯,在路边看到个被抛弃的 U盾,这么一想应该是附近拆迁搬东西时丢出去的,随即捕捉它。作为一个啥都折腾的捡垃圾技术宅肯定要去研究一波(笑是个建行的 U盾,按键部分还有点老灰,屏幕的尺寸盲猜 128x64,不可能再大了背面除了序列号没有别的东西,顶部有个盖子,像极了上古时期的 U盘插上充电宝可以正常点亮,至少屏没坏拆解&分析电路直接开拆,用刀片沿着四周缝隙插入并挑开卡扣内部结构挺简单,只有两颗较大的芯片,屏幕的 FPC 排线直接焊接在 PCB 上中间的这颗是", + "author": "社会易姐QwQ", + "view": 872, + "like": 38, + "reply": 7, + "template_id": 4, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/c7c60e018c43c5c3a6e1520239021ea2753b2880.jpg" + ], + "attach_msg": null, + "pub_date": 1661358081 +} +``` + +### 图片卡片消息(`msg_type=13`) + +此类型消息仅可接收,**不可直接发送** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------------- | -------------------- | +| pic_url | str | 图片url | | +| jump_url | str | 点击图片跳转到的url | | +| title | str | 文字说明 | 显示在聊天列表的文字 | + +**示例:** + +```json +{ + "pic_url": "http://i0.hdslb.com/bfs/location/9e57aff7245c226c05ba46ddd1e82667f74d5a06.png", + "jump_url": "https://www.bilibili.com/h5/mall/suit/detail?navhide=1&id=66359&from=Banner", + "title": "原神,启动!" +} +``` + +### 分享其他内容消息(`msg_type=14`) + +常见于分享直播 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ---------------- | -------------------------------- | +| author | str | 分享内容作者 | 此项不实时更新,在发送私信时设置 | +| cover | str | 分享内容封面 | 此项不实时更新,在发送私信时设置 | +| desc | str | 分享内容简介 | 此项不实时更新,在发送私信时设置 | +| source | str | 分享内容类型说明 | 常见的值为 `直播` | +| title | str | 分享内容标题 | 此项不实时更新,在发送私信时设置 | +| url | str | 分享内容url | | + +**示例:** + +分享直播 ID 21738461 + +```json +{ + "author": "哔哩哔哩晚会", + "cover": "https://i1.hdslb.com/bfs/face/1b593d28fcd0cf63837c3ea80ac96d01bb85ec3b.jpg", + "desc": "主播:哔哩哔哩晚会 https://live.bilibili.com/21738461", + "source": "直播", + "title": "2023最美的夜 bilibili晚会", + "url": "https://live.bilibili.com/21738461?broadcast_type=0&is_room_feed=1&live_from=41000&share_medium=android&share_source=bili_message&bbid=XU8CE838022AF6625C64B2153A3EF1E571AFF&ts=1704038936971" +} +``` + +### 被关注时的自动推送消息(`msg_type=16`) + +一般仅在开启了 B 站的 “被关注回复” 功能与勾选 “被关注后,向关注我的人推送我的往期作品” 选项(仅部分用户会显示此选项)时才会发送此类型消息,紧接在自动发送的文字消息后面 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ----- | ---------------- | -------------------------------------------- | +| main_title | str | 主标题 | 一般为 `更多宝藏内容` | +| reply_content | str | 自动回复文字内容 | 仅在聊天列表中的消息概要中显示此内容,在私信内容中不显示 | +| sub_cards | array | 推送的稿件列表 | 一般为3个 | + +`sub_cards`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 稿件1 | | +| n | obj | 稿件(n+1) | | +| …… | obj | …… | …… | + +`sub_cards`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | -------------------------------- | +| card_id | num | 稿件AV号 | | +| card_type | num | 稿件类型 | 一般为 `1` | +| jump_url | str | 稿件链接 | | +| cover_url | str | 稿件封面url | 此项不实时更新,在发送私信时设置 | +| field1 | str | 稿件标题 | 此项不实时更新,在发送私信时设置 | +| field2 | str | 稿件发布时间 | 格式:`YYYY-MM-DD` | +| field3 | str | 字段3 | 此项不实时更新,在发送私信时设置 | +| icon3 | num | 图标3类型 | 1:播放量
3:弹幕数
5:收藏量 | +| field4 | str | 字段4 | 此项不实时更新,在发送私信时设置 | +| icon4 | num | 图标4类型 | 1:播放量
3:弹幕数
5:收藏量 | + +**示例:** + +```json +{ + "main_title": "更多宝藏内容", + "reply_content": "感谢大佬关注哦~[doge][脱单doge][doge]\n这里是科技区底边小UP,日常瞎折腾,软硬件电路程序网络服务器都折腾,视频月更风格硬核略小众,咕咕咕.....\n老大二了,就不中二了\n有什么好的建议欢迎私信", + "sub_cards": [{ + "card_id": 379743801, + "card_type": 1, + "jump_url": "https://b23.tv/BV1hZ4y197Cz", + "cover_url": "http://i2.hdslb.com/bfs/archive/bfb87f033272926efe6ff4caee8e6c49c07ff6fe.jpg", + "field1": "【宿舍评测】性能与便携两全 华为matebook E 2022深度体验及伪开箱", + "field2": "2021-12-10", + "field3": "20万", + "icon3": 1, + "field4": "479", + "icon4": 3 + }, { + "card_id": 768716232, + "card_type": 1, + "jump_url": "https://b23.tv/BV13r4y187R8", + "cover_url": "http://i1.hdslb.com/bfs/archive/bb1d41ef0c17c2df25c8b6ef98f01466bdee0c1f.jpg", + "field1": "【BadApple】使用古董示波器Aron BS-601播放BadApple!!!", + "field2": "2022-05-03", + "field3": "15万", + "icon3": 1, + "field4": "297", + "icon4": 3 + }, { + "card_id": 524989935, + "card_type": 1, + "jump_url": "https://b23.tv/BV17M411E7Kq", + "cover_url": "http://i1.hdslb.com/bfs/archive/17335854dfad9d7990943d8cc6dc07c85912b103.jpg", + "field1": "【拆解】华为 Matebook E 更换固态硬盘:从未见过如此好拆的二合一", + "field2": "2023-02-24", + "field3": "5万", + "icon3": 1, + "field4": "102", + "icon4": 3 + }] +} +``` + +### 系统提示消息(`msg_type=18`) + +此类型消息仅可接收,**不可直接发送**;由系统自动发送,但仅自己可见 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------------------- | +| content | str | 提示列表 | **经过序列化后**的JSON数组 | + +`content`文本经JSON解析后的数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 提示1 | | +| n | obj | 提示(n+1) | | +| …… | obj | …… | …… | + +`content`文本经JSON解析后的数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------------------ | ----------- | +| text | str | 提示文字 | | +| color_day | str | 浅色模式下的提示文字颜色 | HEX颜色代码 | +| color_nig | str | 深色模式下的提示文字颜色 | HEX颜色代码 | +| jump_url | str | 点击提示跳转到的url | (非必要) | + +**示例:** + +若自己与对方从未聊过天,且对方未关注自己,则会有系统提示 + +```json +{ + "content": "[{\"text\":\"对方主动回复或关注你前,最多发送1条消息\",\"color_day\":\"#9499A0\",\"color_nig\":\"#9499A0\"}]" +} +``` + +### AI 消息(`msg_type=19`) + +此消息类型尚未得到广泛使用 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | -------------------- | ---------------- | +| content | obj | 富文本内容 | | +| show_like | bool | 是否显示点赞按钮 | | +| show_change | bool | 是否显示修改内容按钮 | | +| gpt_session_id | num | GPT 会话 id | | +| gpt_bind_query | str | (?) | **作用尚不明确** | +| session_closed_line | str | (?) | **作用尚不明确** | +| voice_url | str | 语音 url(?) | | +| sub_type | num | 子类型(?) | | +| voice_time | num | 语音时长(?) | | + +`content`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---------------- | +| paragraphs | array | 段落列表 | 详细信息有待补充 | + +**示例:** + +由于 B 站尚未公开此消息类型,暂无示例 + +## 粉丝团消息类型 + +以下消息类型仅常见于粉丝团中的系统消息(`receiver_type` 为 `2` 且 `sender_uid` 为 `0`) + +### 成员入群消息(`msg_type=301`) + +### 成员退群消息(`msg_type=302`) + +### 粉丝团冻结消息(`msg_type=303`) + +### 粉丝团解散消息(`msg_type=304`) + +### 粉丝团开通消息(`msg_type=305`) + +### 成员入群消息(`msg_type=306`) + +以上 6 种类型的消息均为以下数据类型结构 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ---------- | +| group_id | num | 粉丝团id | (非必要) | +| content | str | 提示文字 | | + +**示例:** + +`社会易姐QwQ的应援团` 开通的消息(`msg_type=305`) + +```json +{ + "group_id": 221082140, + "content": "社会易姐QwQ的应援团开通啦 (>▽<)" +} +``` + +成员 `wuziqian211` 进入 `社会易姐QwQ的应援团` 的消息(`msg_type=306`) + +```json +{ + "group_id": 221082140, + "content": "欢迎wuziqian211入群" +} +``` diff --git a/docs/message/settings.md b/docs/message/settings.md new file mode 100644 index 0000000..5bedfb3 --- /dev/null +++ b/docs/message/settings.md @@ -0,0 +1,830 @@ +# 消息设置 + +## 获取用户偏好设置 + +> + +*请求方式:GET 或 POST* + +认证方式:Cookie(SESSDATA) + +**url参数(GET)或 正文参数(application/x-www-form-urlencoded,POST):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------------- | ---- | -------------------------------- | ------------ | ------------------------- | +| msg_notify | num | 是否显示 “消息提醒” 设置 | 非必要 | 若此项为任意整数,则返回数据中有 `msg_notify` 项 | +| show_unfollowed_msg | num | 是否显示 “收起未关注人消息” 设置 | 非必要 | 若此项为任意整数,则返回数据中有 `show_unfollowed_msg` 项 | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | +| csrf_token | str | CSRF Token(位于cookie) | POST方式必要 | | +| csrf | str | CSRF Token(位于cookie) | POST方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------ | ---- | -------------------- | --------------------------------------------------------------------------- | +| show_unfollowed_msg | num | 收起未关注人消息 | 请求参数 `show_unfollowed_msg` 为整数时显示此项
0:不收起
1:收起 | +| msg_notify | num | 消息提醒 | 请求参数 `msg_notify` 为整数时显示此项
1:接收
3:不接收 | +| set_like | num | 收到的赞提醒(旧) | 0:接收
5:不接收 | +| set_comment | num | 回复我的提醒(旧) | 0:所有人
1:关注的人
2:不接受任何消息提醒 | +| set_at | num | @ 我的提醒 (旧) | 0:所有人
1:关注的人
2:不接受任何消息提醒 | +| is_group_fold | num | 收起应援团消息 | 0:不收起
1:收起 | +| should_receive_group | num | 接收应援团消息 | 0:不接收
1:接收 | +| receive_unfollow_msg | num | 接收未关注人消息 | 前端隐藏此开关
0:不接收
1:接收 | +| followed_reply | num | 被关注回复 | 0:关闭
1:开启 | +| keys_reply | num | 关键词回复 | 0:关闭
1:开启 | +| recv_reply | num | 收到消息回复 | 0:关闭
1:开启 | +| voyage_reply | num | 大航海上船回复 | 0:关闭
1:开启 | +| recommend_followed_reply | num | 被关注时自动推送作品 | 0:关闭
1:开启 | +| ai_intercept | num | 私信智能拦截 | 0:关闭
1:开启 | +| anti_harassment | null | 防骚扰和互动人群设置 | 此接口恒返回 `null` | +| set_recv_reply | num | 回复与@提醒(新) | 0:所有人
1:关注的人
2:不接受任何消息提醒 | +| set_recv_like | num | 收到喜欢提醒(新) | 0:接收
2:不接收 | +| set_new_follow | num | 新增粉丝提醒(新) | 0:接收
2:不接收 | + +**示例:** + +```shell +curl -G 'https://api.vc.bilibili.com/link_setting/v1/link_setting/get' \ + --data-urlencode 'msg_notify=1' \ + --data-urlencode 'show_unfollowed_msg=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "show_unfollowed_msg": 0, + "msg_notify": 1, + "set_like": 0, + "set_comment": 0, + "set_at": 0, + "is_group_fold": 0, + "should_receive_group": 1, + "receive_unfollow_msg": 1, + "followed_reply": 1, + "keys_reply": 0, + "recv_reply": 1, + "voyage_reply": 0, + "recommend_followed_reply": 1, + "ai_intercept": 1, + "anti_harassment": null, + "set_recv_reply": 0, + "set_recv_like": 0, + "set_new_follow": 0 + } +} +``` + +
+ +## 修改用户偏好设置 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +参数名称与值基本同「[获取用户偏好设置](#获取用户偏好设置)」中的 `data` 对象,修改设置时只需提供修改的设置对应的参数即可 + +开启自动回复功能需要 1000 粉丝及以上,否则会提示 700009 `权限不足` + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------------------ | ---- | ------------------------ | ------ | ----------------------------------------------------- | +| show_unfollowed_msg | num | 收起未关注人消息 | 非必要 | 0:不收起
1:收起 | +| msg_notify | num | 消息提醒 | 非必要 | 1:接收
3:不接收 | +| set_like | num | 收到的赞提醒 | 非必要 | 0:接收
5:不接收 | +| set_comment | num | 回复我的提醒 | 非必要 | 0:所有人
1:关注的人
2:不接受任何消息提醒 | +| set_at | num | @ 我的提醒 | 非必要 | 0:所有人
1:关注的人
2:不接受任何消息提醒 | +| is_group_fold | num | 收起应援团消息 | 非必要 | 0:不收起
1:收起 | +| should_receive_group | num | 接收应援团消息 | 非必要 | 0:不接收
1:接收 | +| receive_unfollow_msg | num | 接收未关注人消息 | 非必要 | 0:不接收
1:接收 | +| followed_reply | num | 被关注回复 | 非必要 | 需要有自动回复权限
0:关闭
1:开启 | +| keys_reply | num | 关键词回复 | 非必要 | 需要有自动回复权限
0:关闭
1:开启 | +| recv_reply | num | 收到消息回复 | 非必要 | 需要有自动回复权限
0:关闭
1:开启 | +| voyage_reply | num | 大航海上船回复 | 非必要 | 需要有自动回复权限
0:关闭
1:开启 | +| recommend_followed_reply | num | 被关注时自动推送作品 | 非必要 | 需要有自动回复权限
0:关闭
1:开启 | +| ai_intercept | num | 私信智能拦截 | 非必要 | 0:关闭
1:开启 | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
2:非法参数
700009:权限不足 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 空对象 | + +**示例:** + +开启接收消息提醒 + +```shell +curl 'https://api.vc.bilibili.com/link_setting/v1/link_setting/set' \ + --data-urlencode 'msg_notify=1' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + --data-urlencode 'csrf_token=xxx' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 获取消息屏蔽词 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | ------------- | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ------------------------------- | ------------------ | ---------------- | +| words | 有效时:array
无效时:null | 消息屏蔽词列表 | | +| message | str | (?) | **作用尚不明确** | +| max_word_length | num | 单个屏蔽词最大长度 | 目前为 `20` | +| max_words_size | num | 屏蔽词最大数量 | 目前为 `200` | + +`data` 中的 `words` 数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 屏蔽词1 | | +| n | obj | 屏蔽词(n+1) | | +| …… | obj | …… | …… | + +`words` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------------- | ---------- | +| content | str | 屏蔽词内容 | | +| ctime | num | 屏蔽词添加时间 | 秒级时间戳 | + +**示例:** + +```shell +curl -G 'https://api.vc.bilibili.com/x/im/link_setting/get_block_words' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "words": [ + { + "content": "屏蔽词", + "ctime": 1746422088 + } + ], + "message": "", + "max_word_length": 20, + "max_words_size": 200 + } +} +``` + +
+ +## 添加消息屏蔽词 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | -------------- | +| content | str | 屏蔽词内容 | 必要 | 最多 20 个字符 | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
1900004:添加失败,屏蔽词限制最多20个字
1900005:添加失败,最多可以添加200个屏蔽词
1900006:添加失败,屏蔽词重复
1900007:添加失败,屏蔽词不支持空格 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 空对象 | + +**示例:** + +```shell +curl 'https://api.vc.bilibili.com/x/im/link_setting/add_block_word' \ + --data-urlencode 'content=屏蔽词' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + --data-urlencode 'csrf_token=xxx' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 删除消息屏蔽词 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ------------- | +| content | str | 屏蔽词内容 | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 空对象 | + +**示例:** + +```shell +curl 'https://api.vc.bilibili.com/x/im/link_setting/del_block_word' \ + --data-urlencode 'content=屏蔽词' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + --data-urlencode 'csrf_token=xxx' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 获取自动回复文本/关键词回复规则 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | ---------------------------------------------------------------------------- | +| type\[\] | num | 自动回复类型 | 必要 | 1:被关注回复
2:关键词回复
3:收到消息回复
5:大航海上船回复 | +| uid | num | 自己的mid | 非必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
2:非法参数 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | ------------ | -------------------------------------- | +| texts | array | 自动回复文本 | 若未设置此类型自动回复文本,则没有此项 | + +`data` 中的 `texts` 数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | -------------------------------- | +| 0 | obj | 文本1 | | +| n | obj | 文本(n+1) | 当类型为 “关键词回复” 时可有多项 | +| …… | obj | …… | …… | + +`texts` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------------- | -------------------------------------------------------------------------- | +| id | num | 自动回复规则id | | +| uid | num | 自己的mid | | +| type | num | 自动回复类型 | 同请求参数 `type[]` | +| title | str | 规则名称 | 当类型为 “关键词回复” 时有效,否则为空文本 | +| key1 | str | 精确匹配关键词 | 当类型为 “关键词回复” 时有效,否则为空文本
以中文逗号分隔每一个关键词 | +| key2 | str | 模糊匹配关键词 | 当类型为 “关键词回复” 时有效,否则为空文本
以中文逗号分隔每一个关键词 | +| reply | str | 回复内容 | | + +**示例:** + +获取关键词回复规则 + +```shell +curl -G 'https://api.vc.bilibili.com/x/im/auto_reply/get_reply_text' \ + --data-urlencode 'type[]=2' \ + --data-urlencode 'uid=425503913' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "texts": [ + { + "id": 201321, + "uid": 425503913, + "type": 2, + "title": "谢谢", + "key1": "谢谢,Thank you", + "key2": "感谢", + "reply": "我也感谢您对我的支持 (=・ω・=)" + }, + { + "id": 201320, + "uid": 425503913, + "type": 2, + "title": "哭2", + "key1": "哭", + "key2": "", + "reply": "我是不会哭的 (=・ω・=)" + }, + { + "id": 201318, + "uid": 425503913, + "type": 2, + "title": "哭", + "key1": "", + "key2": "哭", + "reply": "别哭了[tv_微笑]摸摸您 (^・ω・^)" + } + ] + } +} +``` + +
+ +## 修改自动回复文本/关键词回复规则 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +仅调用本接口不会开启或关闭自动回复功能,请使用 “[修改用户偏好设置](#修改用户偏好设置)” 接口 + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ---------------------- | ---------------------------------------------------------------------------- | +| type | num | 自动回复类型 | 必要 | 1:被关注回复
2:关键词回复
3:收到消息回复
5:大航海上船回复 | +| reply | str | 回复内容 | 必要 | 最多 500 个字符 | +| id | str | 规则id | 非必要 | 当类型为 “关键词回复” 时有效
为 `0` 或为空时新增回复规则,否则修改 id 对应的回复规则 | +| title | str | 规则名称 | 关键词回复必要 | 当类型为 “关键词回复” 时有效,最多 30 个字符 | +| key1 | str | 精确匹配关键词 | 关键词回复必要(可选) | 当类型为 “关键词回复” 时有效,`key1` 与 `key2` 须至少填一个参数
以中文逗号分隔每一个关键词,最多 20 项 | +| key2 | str | 模糊匹配关键词 | 关键词回复必要(可选) | 当类型为 “关键词回复” 时有效,`key1` 与 `key2` 须至少填一个参数
以中文逗号分隔每一个关键词,最多 20 项 | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
27011:请求参数错误
1500001:自动回复内容太长
1500002:规则数量已达上限,请删除后新建
1500003:您保存的内容含敏感信息,请修改后重试 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 空对象 | + +**示例:** + +修改关键词回复规则 `id=201321`,规则名称为 `谢谢`,精确匹配关键词为 `谢谢,Thank you,感谢`,回复内容为 `嗯嗯,不用谢[tv_微笑]` + +```shell +curl 'https://api.vc.bilibili.com/x/im/auto_reply/set_reply_text' \ + --data-urlencode 'type=2' \ + --data-urlencode 'reply=嗯嗯,不用谢[tv_微笑]' \ + --data-urlencode 'id=201321' \ + --data-urlencode 'title=谢谢' \ + --data-urlencode 'key1=谢谢,Thank you,感谢' \ + --data-urlencode 'key2=' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + --data-urlencode 'csrf_token=xxx' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 删除关键词回复规则 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | ------------- | +| id | str | 规则id | 必要 | | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | +| csrf_token | str | CSRF Token(位于cookie) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-500:服务器错误
1003:不能删除别人的规则 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 空对象 | + +**示例:** + +删除关键词回复规则 `id=201321` + +```shell +curl 'https://api.vc.bilibili.com/x/im/auto_reply/del_reply_text' \ + --data-urlencode 'id=201321' \ + --data-urlencode 'build=0' \ + --data-urlencode 'mobi_app=web' \ + --data-urlencode 'csrf_token=xxx' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 获取系统设置 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +此接口中的设置一般不能由用户随意更改 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | ------------------------- | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------------------------- | ---- | ---------------------------------------------------------------------------------------- | -------------------------- | +| is_create_group_available | num | 是否可创建粉丝团 | 粉丝数达到 1000 后开启 | +| is_auto_reply_available | num | 是否可使用自动回复功能 | 粉丝数达到 1000 后开启 | +| vc_hint_title | str | 稿件自动推送小灰条内容 | `我为什么会收到此类消息` | +| vc_hint_title_button | str | 稿件自动推送小灰条旁的按钮内容 | `了解更多` | +| vc_hint_detail | str | 稿件自动推送详细信息小灰条内容 | `您【特别关注】的UP主更新视频或专栏后,会第一时间在私信推送给您。如有需要可点击右上角设置关闭推送。` | +| vc_hint_detail_button | str | 关闭稿件自动推送按钮内容 | `关闭推送` | +| auto_reply_html | str | 自动回复H5页面url | `https://message.bilibili.com/h5/app/auto-reply` | +| is_receive_unfollow_wl | num | 是否显示限制接收未关注人消息功能 | | +| is_voyage | num | 是否在自动回复页面显示 “大航海自动回复” 选项 | 仅部分用户开启 | +| is_auto_reply_recommend_available | num | 是否在自动回复中的 “被关注回复” 页面显示 “被关注后,向关注我的人推送我的往期作品” 复选框 | 仅部分用户开启 | +| is_discuss_style_im_page | num | (?) | **作用尚不明确** | +| discuss_unread_style_im_page | num | (?) | **作用尚不明确** | +| old_up_assistant_door | obj | 原 “UP主小助手” 入口相关信息 | | +| is_new_up_assistant_effective | num | 新 “UP主小助手” 是否启用 | | +| is_archive_gray | bool | 是否不显示 “私信存档” 按钮 | | +| session_cfg | obj | 特定私信会话配置信息 | | +| migrate_session_api | bool | (?) | **作用尚不明确** | +| game_msg | obj | (?) | **作用尚不明确**;仅当请求参数 `mobi_app` 不为 `web` 时有其中的项目 | +| auto_reply_msg_desc | str | 指示消息为自动回复消息的提示内容 | `此条消息为自动回复` | +| huahuo_group_icon_new | str | 浅色模式下的花火图标url | | +| huahuo_group_icon_dark_new | str | 深色模式下的花火图标url | | +| im_disabled_input_hint | str | 某UP主禁用私信功能时的提示内容 | `请到UP主空间发起咨询` | + +`data` 中的 `old_up_assistant_door` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | ---------------------------- | ------------ | +| show_old_up_door | num | 是否显示原 “UP主小助手” 入口 | 目前恒为 `0` | +| title | str | 原 “UP主小助手” 入口标题 | 目前为空文本 | +| sub_title | str | 原 “UP主小助手” 入口子标题 | 目前为空文本 | + +`data` 中的 `session_cfg` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------------- | ---- | +| {用户mid} | obj | 该会话的配置信息 | | + +`session_cfg` 中的 `{用户mid}` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | -------------------- | ------------------- | +| hidden_emote_btn | bool | 是否隐藏表情按钮 | | +| hidden_pic_btn | bool | 是否隐藏发送图片按钮 | | +| max_height | num | 最大高度(?) | **作用尚不明确** | +| hint_text | str | 私信输入框的提示内容 | `你想问什么问题呢?` | +| hidden_top_hint | bool | (?) | **作用尚不明确** | +| is_gpt_account | bool | 是否为AI会话 | | + +`data` 中的 `game_msg` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---- | ------------------------------------------------------------- | +| show_install | bool | true | **作用尚不明确**;仅当请求参数 `mobi_app` 不为 `web` 时有此项 | + +**示例:** + +```shell +curl 'https://api.vc.bilibili.com/link_setting/v1/link_setting/get_sys_setting' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "is_create_group_available": 1, + "is_auto_reply_available": 1, + "vc_hint_title": "我为什么会收到此类消息", + "vc_hint_title_button": "了解更多", + "vc_hint_detail": "您【特别关注】的UP主更新视频或专栏后,会第一时间在私信推送给您。如有需要可点击右上角设置关闭推送。", + "vc_hint_detail_button": "关闭推送", + "auto_reply_html": "https://message.bilibili.com/h5/app/auto-reply", + "is_receive_unfollow_wl": 0, + "is_voyage": 1, + "is_auto_reply_recommend_available": 0, + "is_discuss_style_im_page": 0, + "discuss_unread_style_im_page": 0, + "old_up_assistant_door": { + "show_old_up_door": 0, + "title": "", + "sub_title": "" + }, + "is_new_up_assistant_effective": 1, + "is_archive_gray": true, + "session_cfg": { + "100000000000001": { + "hidden_emote_btn": true, + "hidden_pic_btn": true, + "max_height": 62, + "hint_text": "你想问什么问题呢?", + "hidden_top_hint": true, + "is_gpt_account": true + }, + "100000000000002": { + "hidden_emote_btn": true, + "hidden_pic_btn": true, + "max_height": 62, + "hint_text": "你想问什么问题呢?", + "hidden_top_hint": true, + "is_gpt_account": true + }, + "1400565964": { + "hidden_emote_btn": true, + "hidden_pic_btn": true, + "max_height": 62, + "hint_text": "你想问什么问题呢?", + "hidden_top_hint": true, + "is_gpt_account": true + } + }, + "migrate_session_api": false, + "game_msg": { + "show_install": true + }, + "auto_reply_msg_desc": "此条消息为自动回复", + "huahuo_group_icon_new": "http://i0.hdslb.com/bfs/kfptfe/floor/e2e3829e514ebccab1705636b0354ec89446a4b5.png", + "huahuo_group_icon_dark_new": "http://i0.hdslb.com/bfs/kfptfe/floor/d09bc8c0716a15938ec427db5fa962733703f3ce.png", + "im_disabled_input_hint": "请到UP主空间发起咨询" + } +} +``` + +
+ +## 获取创建粉丝团按钮可见性 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | ------------------------- | +| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------------- | ---------------------- | +| show | num | 是否显示创建粉丝团按钮 | 粉丝数达到 1000 后显示 | + +**示例:** + +```shell +curl 'https://api.vc.bilibili.com/link_group/v1/member/show_create_group_icon' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": { + "show": 1 + } +} +``` + +
diff --git a/docs/misc/b23tv.md b/docs/misc/b23tv.md new file mode 100644 index 0000000..e395d7e --- /dev/null +++ b/docs/misc/b23tv.md @@ -0,0 +1,127 @@ +# b23.tv 短链 + +## 简述 + +b23.tv 是由 Bilibili 提供的短链服务, 主要用于站内长链接缩短便于分享, 目前仅在手机客户端生成 + +### 格式 + +目前已知的 b23.tv 短链格式有以下 3 种 + +- 任意短链, 路径由7位数字或大小写英文字母组成, 为防止滥用似乎有时效限制, 如 https://b23.tv/pigt3PQ + +- 视频短链(AV号), 路径由字符串 `av` 尾随 视频 aid 组成, 如 https://b23.tv/av80433022 + +- 视频短链(BV号), 路径由字符串 `BV` 尾随 视频 bvid 组成, 如 https://b23.tv/BV1GJ411x7h7 + +## 生成 + +### 视频短链 + +1. 直接手动拼接字符串即可 + +2. 参见[任意短链](#任意短链) + +### 任意短链 + +> https://api.bilibili.com/x/share/click +> https://api.biliapi.net/x/share/click + +*请求方式: POST* + +认证方式: 仅APP, 但实际上形同虚设 + +注: 该接口参数对照表基本失效, 基本无实用价值, 已被注释, 参见 [#979](https://github.com/SocialSisterYi/bilibili-API-collect/issues/979) [Nemo2011/bilibili-api#720](https://github.com/Nemo2011/bilibili-api/pull/720) + +**正文参数(application/x-www-form-urlencoded):** + +必要: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------- | ------ | ---- | +| buvid | str | 设备 BUVID | 必要 | 实际任意非空字符串即可 | +| build | num | 客户端版本号 | 必要 | 大于 `5520400` 的任意有效整数, 如 `7710300` | +| platform | str | 客户端平台 | 必要 | 实际任意非空字符串即可 | +| share_channel | str | 分享方式? | 必要 | COPY | +| share_mode | num | 分享模式? | 必要 | 任意有效正整数, 常见 `1`, `3`, `4` | +| share_id | str | 分享 ID | 必要 | 见下方对照表 | +| share_origin | str | 分享来源? | 部分必要 | 见下方对照表 | +| oid | num | 对象 ID | 必要 | 见下方对照表 | + +不必要: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ---- | ---- | +| object_extra_fields| obj | 额外字段? | 非必要 | 如 `{"jumpfrom_id":30104}` `{"epid":"409808","cid":"1398781253"}` `{"season_type":"1","season_id":"39481","epid":"425006","dubbing_support":false,"background_audio":false,"role_audio_list":false}` | +| panel_type | num | 面板类型? | 非必要 | 1 | +| share_title | str | 分享标题? | 非必要 | 分享标题 | +| share_content | str | 分享内容? | 非必要 | 分享内容, 当 oid 存在时无意义(可是 oid 不可能不存在啊) | +| share_pattern | num | 分享模式? | 非必要 | 0 | +| share_session_id | str | 分享会话 ID? | 非必要 | 各部分用 `-` 分隔的小写的一串 UUID | +| ts | num | UNIX 秒级时间戳 | 非必要 | | + +对照表: + +| 类型 | 分享 ID (share_id) | 对象 ID (oid) | 分享来源? (share_origin) | 备注 | +| --- | ------------------ | ------------- | ----------------------- | ---- | +| 视频 | `main.ugc-video-detail.0.0.pv` | 视频 aid | 非必要 | | +| 动态/图文 | `dt.dt-detail.0.0.pv` | 动态/图文 id | `dynamic` | | +| 专栏 | `read.column-detail.roof.8.click` | 文章 cvid | 非必要 | | +| 文集 | `read.column-readlist.share.0.click` | 文集 rlid | 非必要 | | +| 用户 | `main.space-total.more.0.click` | 用户 mid | 非必要 | | +| 课程 | `pugv.pugv-video-detail.0.0.pv` | 课程 id? | `vinfo_player` 或 `vinfo_share` | | +| 链接 | `public.webview.0.0.pv` | 任意站內链接 | 非必要 | 需填写完整链接,且域名必需为 `*.bilibili.com` | + + + + +**JSON回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ---- | +| code | num | 0 | 恒为 0 | +| message | str | 0 | 恒为 0 | +| ttl | num | 1 | 恒为 1 | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段名 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ---- | +| content | str | 短链内容 | 若失败则不存在 | +| count | num | 0 | 恒为 0 | + +**示例:** + +为 `av80433022` 生成 b23.tv 短链 + +```shell +curl -X POST "http://api.biliapi.net/x/share/click" \ +--data-urlencode "platform=unix" \ +--data-urlencode "share_channel=COPY" \ +--data-urlencode "share_id=main.ugc-video-detail.0.0.pv" \ +--data-urlencode "share_mode=4" \ +--data-urlencode "oid=80433022" \ +--data-urlencode "buvid=qwq" \ +--data-urlencode "build=6114514" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "content": "【【官方 MV】Never Gonna Give You Up - Rick Astley-哔哩哔哩】 https://b23.tv/5x4wy5f", + "count": 0 + } +} +``` + +
diff --git a/docs/misc/buvid3_4.md b/docs/misc/buvid3_4.md new file mode 100644 index 0000000..99dc3c1 --- /dev/null +++ b/docs/misc/buvid3_4.md @@ -0,0 +1,132 @@ +# 获取 buvid3 / buvid4 / b_nut + +## 仅获取 buvid3 + +> https://api.bilibili.com/x/web-frontend/getbuvid + +*请求方式: GET* + + + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ---- | +| buvid | str | buvid3 | 需手动存放至 cookie 中 | + +**示例:** + +注: 不要复制 + +```shell +curl -G 'https://api.bilibili.com/x/web-frontend/getbuvid' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "buvid": "54E5EFC1-3C8F-F690-2261-439E4F6A20A979439infoc" + } +} +``` + +
+ +## 接口获取 buvid3 / buvid4 + +> https://api.bilibili.com/x/frontend/finger/spi + +*请求方式: GET* + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| message | str | 信息 | ok: 成功 | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ---- | +| b_3 | str | buvid3 | 需手动存放至 cookie 中 | +| b_4 | str | buvid4 | 同上 | + +**示例:** + +注: 建议自行生成, 不要复制本处示例的 buvid3 / buvid4. + +```shell +curl -G 'https://api.bilibili.com/x/frontend/finger/spi' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "b_3": "D9656DA8-9BEF-F464-5B72-C4849AFD336379044infoc", + "b_4": "F6E0FD4B-520C-1902-4F7B-E461D8D1F5AB79044-024072309-666onEZSnlHVPjoRp4kDYg==" + }, + "message": "ok" +} +``` + +
+ +## 从响应头获取 buvid3 / b_nut + +使用 `GET` 或 `HEAD` 方法请求 `https://www.bilibili.com/`, 且请求头中 `User-Agent` 字段不包含 `curl` `python` `awa` 等敏感子字符串, 且相同 `User-Agent` 字段不得短时多次请求. 在响应头中的 `Set-Cookie` 字段中, 即可找到 `buvid3` 和 `b_nut`. + +若不带任何 Cookie 请求, 则 `b_nut` 为响应生成时刻的 UNIX 秒级时间戳. +若请求 Cookie 仅带有 `buvid3`, 则 `b_nut` 为 `100`. +若请求 Cookie 仅带有 `b_nut`, 则与不带任何 Cookie 的响应相同. +若请求 Cookie 仅带有 `buvid3` 和 `b_nut`, 则响应无 `Set-Cookie` 字段. +若请求 Cookie 带有其他字段, 无影响. + +**示例:** + +```shell +curl -I "https://www.bilibili.com/" -A "awa" +``` + +
+查看响应示例: + +```http +HTTP/2 200 +date: Fri, 26 Jul 2024 06:38:43 GMT +content-type: text/html; charset=utf-8 +support: nantianmen +set-cookie: buvid3=805E4894-96A2-0684-6F00-C6EA1FFB911023315infoc; path=/; expires=Sat, 26 Jul 2025 06:38:43 GMT; domain=.bilibili.com +set-cookie: b_nut=1721975923; path=/; expires=Sat, 26 Jul 2025 06:38:43 GMT; domain=.bilibili.com +vary: Origin,Accept-Encoding +idc: shjd +expires: Fri, 26 Jul 2024 06:38:42 GMT +cache-control: no-cache +x-cache-webcdn: MISS from blzone01 +x-cache-time: 0 +x-save-date: Fri, 26 Jul 2024 06:38:43 GMT +``` + +
diff --git a/docs/misc/bvid_desc.md b/docs/misc/bvid_desc.md new file mode 100644 index 0000000..d9e3346 --- /dev/null +++ b/docs/misc/bvid_desc.md @@ -0,0 +1,850 @@ + +# bvid说明 + +2020-03-23 B站推出了全新的稿件视频id`bvid`来接替之前的`avid`,其意义与之相同 + +详见: + +1. [【升级公告】AV号全面升级至BV号(专栏)](https://www.bilibili.com/read/cv5167957) +2. [【升级公告】AV号全面升级至BV号](https://www.bilibili.com/blackboard/activity-BV-PC.html) + +## 概述 + +### 格式 + +“bvid”恒为长度为 12 的字符串,前 3 个固定为“BV1”,后 9 个为 base58 计算结果(不包含数字 `0` 和大写字母 `I`、 `O` 以及小写字母 `l`) + +### 实质 + +“bvid"为“avid”的base58编码,可通过算法进行相互转化 + +### avid发号方式的变化 + +从 2009-09-09 09:09:09 [av2](https://www.bilibili.com/video/av2) 的发布到 2020-03-28 19:45:02 [av99999999](https://www.bilibili.com/video/av99999999) 的发布B站结束了以投稿时间为顺序的avid发放,改为随机发放avid + +~~暗示B站东方要完?泪目~~ + +## 算法概述 + +~~算法以及程序主要参考[知乎@mcfx的回答](https://www.zhihu.com/question/381784377/answer/1099438784)~~ +~~实际上该算法并不完整,新的算法参考自[【揭秘】av号转bv号的过程](https://www.bilibili.com/video/BV1N741127Tj)~~ +实际上上面的算法依然不完整,新的算法参考自 [SocialSisterYi#740](https://github.com/SocialSisterYi/bilibili-API-collect/issues/740)~~来自 B 站某个 JS 文件?~~ + +### av->bv算法 + +**说明** + +1. 目前的 BV 格式为 BV1XXXXXXXXX,以 BV1 开头,后面包含 9 位有效数据。 +2. AV 最大值为 2⁵¹。 + +**算法** + +- 定义一个包含初始值为 `['B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0']` 的长度为 12 的数组`bytes`,用于存储转换后的字符。 + - 定义变量 `bv_idx` 并初始化为数组 `bytes` 的最后一个索引。 + - 将输入的 `aid` 与 avid 最大值(2⁵¹)进行按位或运算,其结果与常量 `XOR_CODE`(23442827791579)进行异或运算,得到变量 `tmp`。 + - 当 `tmp` 大于0时,循环执行以下操作直到小于0: + - 将 `tmp` 除以 58(码表的长度) 的余数作为索引,从 `FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf` 码表中取出对应的字符,并将其赋值给 `bytes[bv_idx]`。 + - 将 `tmp` 与 58 求模赋值给 `tmp`。 + - 将 `bv_idx` 减1。 + - 将 `bytes` 数组中索引为 3 和 9 的元素进行交换。 + - 将 `bytes` 数组中索引为 4 和 7 的元素进行交换。 + - 将 `bytes` 数组转换为字符串,并返回结果。 + +### bv->av算法 + +是 #av->bv算法 的逆向 + +- 将 `bvid` 中索引为 3 和 9 的字符进行交换。 +- 将 `bvid` 中索引为 4 和 7 的字符进行交换。 +- 删除 `bvid` 前3个字符(固定为 BV1)。 +- 定义变量 `tmp` 并初始化为 0。 +- 遍历 `bvid` 的每个字符,执行以下操作: + - 获取当前字符在 `FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf` 码表中的索引,并将其赋值给变量 `idx`。 + - 将 `tmp` 乘以常量 58,并加上 `idx`,最后赋值给 `tmp`。 +- 将 `tmp` 与常量 2⁵¹ - 1 进行按位与运算,其结果与常量 `XOR_CODE`(23442827791579) 进行异或运算,得到最终结果。 + +## 编程实现 + +### JavaScript/TypeScript + + + + +```javascript +const XOR_CODE = 23442827791579n; +const MASK_CODE = 2251799813685247n; +const MAX_AID = 1n << 51n; +const BASE = 58n; + +const data = 'FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf'; + +function av2bv(aid) { + const bytes = ['B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0']; + let bvIndex = bytes.length - 1; + let tmp = (MAX_AID | BigInt(aid)) ^ XOR_CODE; + while (tmp > 0) { + bytes[bvIndex] = data[Number(tmp % BigInt(BASE))]; + tmp = tmp / BASE; + bvIndex -= 1; + } + [bytes[3], bytes[9]] = [bytes[9], bytes[3]]; + [bytes[4], bytes[7]] = [bytes[7], bytes[4]]; + return bytes.join(''); +} + +function bv2av(bvid) { + const bvidArr = Array.from(bvid); + [bvidArr[3], bvidArr[9]] = [bvidArr[9], bvidArr[3]]; + [bvidArr[4], bvidArr[7]] = [bvidArr[7], bvidArr[4]]; + bvidArr.splice(0, 3); + const tmp = bvidArr.reduce((pre, bvidChar) => pre * BASE + BigInt(data.indexOf(bvidChar)), 0n); + return Number((tmp & MASK_CODE) ^ XOR_CODE); +} + +console.log(av2bv(111298867365120)); +console.log(bv2av('BV1L9Uoa9EUx')); +``` + + + + + +```typescript +const XOR_CODE = 23442827791579n; +const MASK_CODE = 2251799813685247n; +const MAX_AID = 1n << 51n; +const BASE = 58n; + +const data = 'FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf'; + +function av2bv(aid: number) { + const bytes = ['B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0']; + let bvIndex = bytes.length - 1; + let tmp = (MAX_AID | BigInt(aid)) ^ XOR_CODE; + while (tmp > 0) { + bytes[bvIndex] = data[Number(tmp % BigInt(BASE))]; + tmp = tmp / BASE; + bvIndex -= 1; + } + [bytes[3], bytes[9]] = [bytes[9], bytes[3]]; + [bytes[4], bytes[7]] = [bytes[7], bytes[4]]; + return bytes.join('') as `BV1${string}`; +} + +function bv2av(bvid: `BV1${string}`) { + const bvidArr = Array.from(bvid); + [bvidArr[3], bvidArr[9]] = [bvidArr[9], bvidArr[3]]; + [bvidArr[4], bvidArr[7]] = [bvidArr[7], bvidArr[4]]; + bvidArr.splice(0, 3); + const tmp = bvidArr.reduce((pre, bvidChar) => pre * BASE + BigInt(data.indexOf(bvidChar)), 0n); + return Number((tmp & MASK_CODE) ^ XOR_CODE); +} + +console.log(av2bv(111298867365120)); +console.log(bv2av('BV1L9Uoa9EUx')); +``` + + + +### Python + +来自:[#847](https://github.com/SocialSisterYi/bilibili-API-collect/issues/847#issuecomment-1807020675) + +```python +XOR_CODE = 23442827791579 +MASK_CODE = 2251799813685247 +MAX_AID = 1 << 51 +ALPHABET = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf" +ENCODE_MAP = 8, 7, 0, 5, 1, 3, 2, 4, 6 +DECODE_MAP = tuple(reversed(ENCODE_MAP)) + +BASE = len(ALPHABET) +PREFIX = "BV1" +PREFIX_LEN = len(PREFIX) +CODE_LEN = len(ENCODE_MAP) + +def av2bv(aid: int) -> str: + bvid = [""] * 9 + tmp = (MAX_AID | aid) ^ XOR_CODE + for i in range(CODE_LEN): + bvid[ENCODE_MAP[i]] = ALPHABET[tmp % BASE] + tmp //= BASE + return PREFIX + "".join(bvid) + +def bv2av(bvid: str) -> int: + assert bvid[:3] == PREFIX + + bvid = bvid[3:] + tmp = 0 + for i in range(CODE_LEN): + idx = ALPHABET.index(bvid[DECODE_MAP[i]]) + tmp = tmp * BASE + idx + return (tmp & MASK_CODE) ^ XOR_CODE + +assert av2bv(111298867365120) == "BV1L9Uoa9EUx" +assert bv2av("BV1L9Uoa9EUx") == 111298867365120 +``` + +### Rust + +参考 + +### Swift + +```swift +fileprivate let XOR_CODE: UInt64 = 23442827791579 +fileprivate let MASK_CODE: UInt64 = 2251799813685247 +fileprivate let MAX_AID: UInt64 = 1 << 51 + +fileprivate let data: [UInt8] = [70, 99, 119, 65, 80, 78, 75, 84, 77, 117, 103, 51, 71, 86, 53, 76, 106, 55, 69, 74, 110, 72, 112, 87, 115, 120, 52, 116, 98, 56, 104, 97, 89, 101, 118, 105, 113, 66, 122, 54, 114, 107, 67, 121, 49, 50, 109, 85, 83, 68, 81, 88, 57, 82, 100, 111, 90, 102] + +fileprivate let BASE: UInt64 = 58 +fileprivate let BV_LEN: Int = 12 +fileprivate let PREFIX: String = "BV1" + +func av2bv(avid: UInt64) -> String { + var bytes: [UInt8] = [66, 86, 49, 48, 48, 48, 48, 48, 48, 48, 48, 48] + var bvIdx = BV_LEN - 1 + var tmp = (MAX_AID | avid) ^ XOR_CODE + + while tmp != 0 { + bytes[bvIdx] = data[Int(tmp % BASE)] + tmp /= BASE + bvIdx -= 1 + } + + bytes.swapAt(3, 9) + bytes.swapAt(4, 7) + + return String(decoding: bytes, as: UTF8.self) +} + +func bv2av(bvid: String) -> UInt64 { + let fixedBvid: String + if bvid.hasPrefix("BV") { + fixedBvid = bvid + } else { + fixedBvid = "BV" + bvid + } + var bvidArray = Array(fixedBvid.utf8) + + bvidArray.swapAt(3, 9) + bvidArray.swapAt(4, 7) + + let trimmedBvid = String(decoding: bvidArray[3...], as: UTF8.self) + + var tmp: UInt64 = 0 + + for char in trimmedBvid { + if let idx = data.firstIndex(of: char.utf8.first!) { + tmp = tmp * BASE + UInt64(idx) + } + } + + return (tmp & MASK_CODE) ^ XOR_CODE +} + +print(av2bv(avid: 111298867365120)) +print(bv2av(bvid: "BV1L9Uoa9EUx")) +``` + +### Java + +```java +import java.math.BigInteger; + +/** + * @author cctyl + */ +public class AVBVConverter { + + private static final BigInteger XOR_CODE = BigInteger.valueOf(23442827791579L); + private static final BigInteger MASK_CODE = BigInteger.valueOf(2251799813685247L); + private static final BigInteger MAX_AID = BigInteger.ONE.shiftLeft(51); + private static final int BASE = 58; + + private static final String DATA = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf"; + + public static String av2bv(long aidParam) { + BigInteger aid = BigInteger.valueOf(aidParam); + char[] bytes = {'B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0'}; + int bvIndex = bytes.length - 1; + BigInteger tmp = MAX_AID.or(aid).xor(XOR_CODE); + while (tmp.compareTo(BigInteger.ZERO) > 0) { + bytes[bvIndex] = DATA.charAt(tmp.mod(BigInteger.valueOf(BASE)).intValue()); + tmp = tmp.divide(BigInteger.valueOf(BASE)); + bvIndex--; + } + swap(bytes, 3, 9); + swap(bytes, 4, 7); + return new String(bytes); + } + + public static long bv2av(String bvid) { + char[] bvidArr = bvid.toCharArray(); + swap(bvidArr, 3, 9); + swap(bvidArr, 4, 7); + String adjustedBvid = new String(bvidArr, 3, bvidArr.length - 3); + BigInteger tmp = BigInteger.ZERO; + for (char c : adjustedBvid.toCharArray()) { + tmp = tmp.multiply(BigInteger.valueOf(BASE)).add(BigInteger.valueOf(DATA.indexOf(c))); + } + BigInteger xor = tmp.and(MASK_CODE).xor(XOR_CODE); + return xor.longValue(); + } + + + private static void swap(char[] array, int i, int j) { + char temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + public static void main(String[] args) { + + final int aid1 = 643755790; + final String bv1 = "BV1bY4y1j7RA"; + + final int aid2 = 305988942; + final String bv2 = "BV1aP411K7it"; + + //av ==> bv + assert av2bv(aid1).equals(bv1); + assert av2bv(aid2).equals(bv2); + + //bv ==>av + assert bv2av(bv1) == aid1; + assert bv2av(bv2) == aid2; + } +} +``` + +### Golang + +```go +package main + +import ( + "fmt" + "strings" +) + +var ( + XOR_CODE = int64(23442827791579) + MAX_CODE = int64(2251799813685247) + CHARTS = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf" + PAUL_NUM = int64(58) +) + +func swapString(s string, x, y int) string { + chars := []rune(s) + chars[x], chars[y] = chars[y], chars[x] + return string(chars) +} + +func Bvid2Avid(bvid string) (avid int64) { + s := swapString(swapString(bvid, 3, 9), 4, 7) + bv1 := string([]rune(s)[3:]) + temp := int64(0) + for _, c := range bv1 { + idx := strings.IndexRune(CHARTS, c) + temp = temp*PAUL_NUM + int64(idx) + } + avid = (temp & MAX_CODE) ^ XOR_CODE + return +} + +func Avid2Bvid(avid int64) (bvid string) { + arr := [12]string{"B", "V", "1"} + bvIdx := len(arr) - 1 + temp := (avid | (MAX_CODE + 1)) ^ XOR_CODE + for temp > 0 { + idx := temp % PAUL_NUM + arr[bvIdx] = string(CHARTS[idx]) + temp /= PAUL_NUM + bvIdx-- + } + raw := strings.Join(arr[:], "") + bvid = swapString(swapString(raw, 3, 9), 4, 7) + return +} + +func main() { + avid := int64(1054803170) + bvid := "BV1mH4y1u7UA" + resAvid := Bvid2Avid(bvid) + resBvid := Avid2Bvid(avid) + + fmt.Printf("convert bvid to avid: %v\tvalue:%v\n", avid == resAvid, resAvid) + fmt.Printf("convert avid to bvid: %v\tvalue:%v\n", bvid == resBvid, resBvid) + +} + +``` + + +### C++ +```cpp +#include +#include +#include +#include + +constexpr int64_t XOR_CODE = 0x1552356C4CDB; +constexpr int64_t MAX_AID = 0x8000000000000; +constexpr int64_t MASK_CODE = MAX_AID - 1; +constexpr int64_t BASE = 58; +constexpr char Table[BASE + 1] = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf"; +constexpr char ReverseTable[128] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2c, 0x2d, 0x0b, 0x1a, 0x0e, 0x27, 0x11, 0x1d, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x25, 0x2a, 0x31, 0x12, 0x00, 0x0c, 0x15, 0x00, 0x13, 0x06, 0x0f, 0x08, 0x05, 0x00, + 0x04, 0x32, 0x35, 0x30, 0x07, 0x2f, 0x0d, 0x17, 0x33, 0x20, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0x1c, 0x01, 0x36, 0x21, 0x39, 0x0a, 0x1e, 0x23, 0x10, 0x29, 0x00, 0x2e, 0x14, 0x37, + 0x16, 0x24, 0x28, 0x18, 0x1b, 0x09, 0x22, 0x02, 0x19, 0x2b, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +std::string Av2bv(const int64_t Avid) { + assert(Avid > 0 && "Avid must be greater than 0"); + std::string bv = "BV1"; + bv.resize(12, '\0'); + + int64_t tmp = (Avid | MAX_AID) ^ XOR_CODE; + for (size_t i = bv.size() - 1; tmp > 0 && i > 2; --i) { + bv[i] = Table[tmp % BASE]; + tmp /= BASE; + } + std::ranges::swap(bv.at(3), bv.at(9)); + std::ranges::swap(bv.at(4), bv.at(7)); + return bv; +} + +int64_t Bv2av(const std::string &Bvid) { + assert(Bvid.starts_with("BV1") && "Bvid must start with 'BV1'"); + + auto Bvid_ = Bvid; + std::ranges::swap(Bvid_.at(3), Bvid_.at(9)); + std::ranges::swap(Bvid_.at(4), Bvid_.at(7)); + + int64_t tmp = 0; + for (int i = 3; i < Bvid_.size(); ++i) { + tmp = ReverseTable[Bvid_.at(i)] + BASE * tmp; + } + return (tmp & MASK_CODE) ^ XOR_CODE; +} + +int main() { + assert(Av2bv(1004871019) == "BV16x4y1H7M1"); + assert(Bv2av("BV16x4y1H7M1") == 1004871019); +} +``` + + + +## 老版算法存档 + +**以下算法已失效**,编解码函数值域有限,不推荐使用,在此仅作为存档 + +
+查看折叠内容: + +算法参考自[【揭秘】av号转bv号的过程](https://www.bilibili.com/video/BV1N741127Tj) + +### av->bv算法 + +注:本算法及示例程序仅能编解码`avid < 29460791296`,且暂无法验证`avid >= 29460791296`的正确性 +再注:本人不清楚新算法能否编解码`avid >= 29460791296` + +1. a = (avid ⊕ 177451812) + 100618342136696320 +2. 以 i 为循环变量循环 6 次 b[i] = (a / 58 ^ i) % 58 +3. 将 b[i] 中各个数字转换为以下码表中的字符 + +码表: + +> fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF + +4. 初始化字符串 b[i]=` ` + +5. 按照以下字符顺序编码表编码并填充至 b[i] + +字符顺序编码表: + +> 0 -> 9 +> +> 1 -> 8 +> +> 2 -> 1 +> +> 3 -> 6 +> +> 4 -> 2 +> +> 5 -> 4 +> +> 6 -> 0 +> +> 7 -> 7 +> +> 8 -> 3 +> +> 9 -> 5 + +### bv->av算法 + +为以上算法的逆运算 + +### 编程实现 + +使用 Python C TypeScript Java Kotlin Golang Rust 等语言作为示例,欢迎社区提交更多例程 + +#### Python + +```python +XOR = 177451812 +ADD = 100618342136696320 +TABLE = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF" +MAP = 9, 8, 1, 6, 2, 4, 0, 7, 3, 5 + + +def av2bv(av: int) -> str: + av = (av ^ XOR) + ADD + bv = [""] * 10 + for i in range(10): + bv[MAP[i]] = TABLE[(av // 58**i) % 58] + return "".join(bv) + + +def bv2av(bv: int) -> int: + av = [""] * 10 + s = 0 + for i in range(10): + s += TABLE.find(bv[MAP[i]]) * 58**i + av = (s - ADD) ^ XOR + + return av + + +def main(): + while 1: + mode = input("1. AV to BV\n2. BV to AV\n3. Exit\n你的选择:") + if mode == "1": + print(f"BV号是:BV {av2bv(int(input('AV号是:')))}") + elif mode == "2": + print(f"AV号是:AV {bv2av(input('BV号是:'))}") + elif mode == "3": + break + else: + print("输入错误请重新输入") + + +if __name__ == "__main__": + main() +``` + +#### C + +```c +#include +#include +#include +#include + +const char table[] = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"; // 码表 +char tr[124]; // 反查码表 +const unsigned long long XOR = 177451812; // 固定异或值 +const unsigned long long ADD = 8728348608; // 固定加法值 +const int s[] = {11, 10, 3, 8, 4, 6}; // 位置编码表 + +// 初始化反查码表 +void tr_init() { + for (int i = 0; i < 58; i++) + tr[table[i]] = i; +} + +unsigned long long bv2av(char bv[]) { + unsigned long long r = 0; + unsigned long long av; + for (int i = 0; i < 6; i++) + r += tr[bv[s[i]]] * (unsigned long long)pow(58, i); + av = (r - ADD) ^ XOR; + return av; +} + +char *av2bv(unsigned long long av) { + char *result = (char*)malloc(13); + strcpy(result,"BV1 4 1 7 "); + av = (av ^ XOR) + ADD; + for (int i = 0; i < 6; i++) + result[s[i]] = table[(unsigned long long)(av / (unsigned long long)pow(58, i)) % 58]; + return result; +} + +int main() { + tr_init(); + printf("%s\n", av2bv(170001)); + printf("%u\n", bv2av("BV17x411w7KC")); + return 0; +} +``` + +输出为: + +``` +BV17x411w7KC +170001 +``` + +#### TypeScript + +感谢[#417](https://github.com/SocialSisterYi/bilibili-API-collect/issues/417#issuecomment-1186475063)提供 + +```typescript +export default class BvCode { + private TABEL = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'; // 码表 + private TR: Record = {}; // 反查码表 + private S = [11, 10, 3, 8, 4, 6]; // 位置编码表 + private XOR = 177451812; // 固定异或值 + private ADD = 8728348608; // 固定加法值 + constructor() { + // 初始化反查码表 + const len = this.TABEL.length; + for (let i = 0; i < len; i++) { + this.TR[this.TABEL[i]] = i; + } + } + av2bv(av: number): string { + const x_ = (av ^ this.XOR) + this.ADD; + const r = ['B', 'V', '1', , , '4', , '1', , '7']; + for (let i = 0; i < 6; i++) { + r[this.S[i]] = this.TABEL[Math.floor(x_ / 58 ** i) % 58]; + } + return r.join(''); + } + bv2av(bv: string): number { + let r = 0; + for (let i = 0; i < 6; i++) { + r += this.TR[bv[this.S[i]]] * 58 ** i; + } + return (r - this.ADD) ^ this.XOR; + } +} + +const bvcode = new BvCode(); + +console.log(bvcode.av2bv(170001)); +console.log(bvcode.bv2av('BV17x411w7KC')); +``` + +输出为: + +``` +BV17x411w7KC +170001 +``` + +#### Java + +```java +/** + * 算法来自:https://www.zhihu.com/question/381784377/answer/1099438784 + */ +public class Util { + private static final String TABLE = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"; + private static final int[] S = new int[]{11, 10, 3, 8, 4, 6}; + private static final int XOR = 177451812; + private static final long ADD = 8728348608L; + private static final Map MAP = new HashMap<>(); + + static { + for (int i = 0; i < 58; i++) { + MAP.put(TABLE.charAt(i), i); + } + } + + public static String aidToBvid(int aid) { + long x = (aid ^ XOR) + ADD; + char[] chars = new char[]{'B', 'V', '1', ' ', ' ', '4', ' ', '1', ' ', '7', ' ', ' '}; + for (int i = 0; i < 6; i++) { + int pow = (int) Math.pow(58, i); + long i1 = x / pow; + int index = (int) (i1 % 58); + chars[S[i]] = TABLE.charAt(index); + } + return String.valueOf(chars); + } + + public static int bvidToAid(String bvid) { + long r = 0; + for (int i = 0; i < 6; i++) { + r += MAP.get(bvid.charAt(S[i])) * Math.pow(58, i); + } + return (int) ((r - ADD) ^ XOR); + } +} +``` + +#### Kotlin + +```kotlin +/** + * 此程序非完全原创,改编自GH站内某大佬的Java程序,修改了部分代码,且转换为Kotlin + * 算法来源同上 + */ +object VideoUtils { + //这里是由知乎大佬不知道用什么方法得出的转换用数字 + var ss = intArrayOf(11, 10, 3, 8, 4, 6, 2, 9, 5, 7) + var xor: Long = 177451812 //二进制时加减数1 + + var add = 8728348608L //十进制时加减数2 + + //变量初始化工作,加载哈希表 + private const val table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF" + private val mp = HashMap() + private val mp2 = HashMap() + + //现在,定义av号和bv号互转的方法 +//定义一个power乘方方法,这是转换进制必要的 + fun power(a: Int, b: Int): Long { + var power: Long = 1 + for (c in 0 until b) power *= a.toLong() + return power + } + + //bv转av方法 + fun bv2av(s: String): String { + var r: Long = 0 + //58进制转换 + for (i in 0..57) { + val s1 = table.substring(i, i + 1) + mp[s1] = i + } + for (i in 0..5) { + r += mp[s.substring(ss[i], ss[i] + 1)]!! * power(58, i) + } + //转换完成后,需要处理,带上两个随机数 + return (r - add xor xor).toString() + } + + //av转bv方法 + fun av2bv(st: String): String { + try { + var s = java.lang.Long.valueOf(st.split("av".toRegex()).dropLastWhile { it.isEmpty() } + .toTypedArray()[1]) + val sb = StringBuffer("BV1 4 1 7 ") + //逆向思路,先将随机数还原 + s = (s xor xor) + add + //58进制转回 + for (i in 0..57) { + val s1 = table.substring(i, i + 1) + mp2[i] = s1 + } + for (i in 0..5) { + val r = mp2[(s / power(58, i) % 58).toInt()] + sb.replace(ss[i], ss[i] + 1, r!!) + } + return sb.toString() + } catch (e: ArrayIndexOutOfBoundsException) { + return "" + } + } + +} +``` + +#### Golang + +```go +package main + +import "math" + +const TABLE = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF" +var S = [11]uint{11, 10, 3, 8, 4, 6} +const XOR = 177451812 +const ADD = 8728348608 + +var TR = map[string]int64{} + +// 初始化 TR +func init() { + for i := 0; i < 58; i++ { + TR[TABLE[i:i+1]] = int64(i) + } +} + +func BV2AV(bv string) int64 { + r := int64(0) + for i := 0; i < 6; i++ { + r += TR[bv[S[i]:S[i]+1]] * int64(math.Pow(58, float64(i))) + } + return (r - ADD) ^ XOR +} + +func AV2BV(av int64) string { + x := (av ^ XOR) + ADD + r := []rune("BV1 4 1 7 ") + for i := 0; i < 6; i++ { + r[S[i]] = rune(TABLE[x/int64(math.Pow(58, float64(i)))%58]) + } + return string(r) +} + +func main() { + println(AV2BV(170001)) + println(BV2AV("BV17x411w7KC")) +} +``` + +输出为: + +``` +BV17x411w7KC +170001 +``` + +#### Rust + +crate: https://github.com/stackinspector/bvid + +```rust +// Copyright (c) 2023 stackinspector. MIT license. + +const XORN: u64 = 177451812; +const ADDN: u64 = 100618342136696320; +const TABLE: [u8; 58] = *b"fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"; +const MAP: [usize; 10] = [9, 8, 1, 6, 2, 4, 0, 7, 3, 5]; +const REV_TABLE: [u8; 74] = [ + 13, 12, 46, 31, 43, 18, 40, 28, 5, 0, 0, 0, 0, 0, 0, 0, 54, 20, 15, 8, + 39, 57, 45, 36, 0, 38, 51, 42, 49, 52, 0, 53, 7, 4, 9, 50, 10, 44, 34, 6, + 25, 1, 0, 0, 0, 0, 0, 0, 26, 29, 56, 3, 24, 0, 47, 27, 22, 41, 16, 0, + 11, 37, 2, 35, 21, 17, 33, 30, 48, 23, 55, 32, 14, 19, +]; +const POW58: [u64; 10] = [ + 1, 58, 3364, 195112, 11316496, 656356768, 38068692544, + 2207984167552, 128063081718016, 7427658739644928, +]; + +fn av2bv(avid: u64) -> [u8; 10] { + let a = (avid ^ XORN) + ADDN; + let mut bvid = [0; 10]; + for i in 0..10 { + bvid[MAP[i]] = TABLE[(a / POW58[i]) as usize % 58]; + } + bvid +} + +fn bv2av(bvid: [u8; 10]) -> u64 { + let mut a = 0; + for i in 0..10 { + a += REV_TABLE[bvid[MAP[i]] as usize - 49] as u64 * POW58[i]; + } + (a - ADDN) ^ XORN +} + +// assert_eq!(*b"17x411w7KC", av2bv(170001)); +// assert_eq!(170001, bv2av(*b"17x411w7KC")); +``` + +
diff --git a/docs/misc/device_identity.md b/docs/misc/device_identity.md new file mode 100644 index 0000000..0335848 --- /dev/null +++ b/docs/misc/device_identity.md @@ -0,0 +1,104 @@ +# 设备各类标识算法(APP 端) + +## 设备唯一标识 BUVID + +注意区分于 Web 端的 [buvid3, buvid4](buvid3_4.md). + +BUVID 在 APP 首次安装于某设备, 且首次启动时生成. + +APP 首次(即每次安装后)启动, 会向云端发送本机各类设备特征, 含 `AndroidId`, `DrmId` 等, 请求是否有匹配的 BUVID, 有就使用云端的, 否则使用本地生成的. + +APP 请求是否有匹配的 BUVID 发送的本机各类设备特征包括(但不限于): + ++ `AndroidID` ++ `DrmId` ++ `IMEI` ++ `OAID` ++ 手机网卡 `MAC` ++ 设备品牌 ++ 设备 Model ++ 本地生成的 BUVID + +### 生成方法 + +1. 选定设备特征码, 可以是 `AndroidID`, `DrmId`, 手机网卡 `MAC` 等. 记为 `ID`. 特别地, `MAC` 应当去掉 `:`, `GUID`(即 UUID) 应当去掉 `-`. + +2. 计算 `ID` 的 MD5. 记为 `ID_MD5`. + +3. 从 `ID_MD5` 抽取第 3, 13, 23 位, 失败就默认为 000, 记为 `ID_E`. + +4. 根据选定的设备特征码类型确定 BUVID Prefix, 见附录. 记为 `BUVID_Prefix`. + +5. 按 `{BUVID_Prefix}{ID_E}{ID_MD5}` 的顺序连接起来, 共37位(2+3+32). 结果应当为大写. + +### Demo + +#### Rust + +代码及测试样例见 [Rust Playground](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=40b5906cf3838a60efa83fa368b15147). + +## 设备指纹 fp (fp_local, fp_remote) + +用于请求账户相关 REST API, 及 gRPC Metadata 生成. + +在请求头中, `fp_local` 和 `fp_remote` 设置为同一值即可, 暂不清楚区别. + +### 生成方法 + +1. 获取 BUVID. 此处一般使用 XU Prefix 的 BUVID. + +2. 获取设备 Model(`Build.MODEL`), 如 `NOH-AN01`. + +3. 获取手机无线电固件版本号(`Build.getRadioVersion()`), 失败则留空. 如 `21C20B686S000C000,21C20B686S000C000`. + +4. 按前述顺序拼接字符串, 计算得 MD5. + +5. 获取年月日, 格式 `yyyyMMddhhmmss`, 拼接到 4 得到的字符串后. + +6. 生成 16 位随机字符串, CharSet 为 `0123456789abcdef`, 拼接到 5 得到的字符串后, 记为 `fp_raw`. + +7. 计算得到一个特殊字符串, 拼接到 `fp_raw` 后, 即得到最终的 `fp`, 特殊字符串算法见下: + +```rust +let mut veri_code = 0; +// 有点像 HEX 的操作 +let fp_raw_sub_str = fp_raw + .as_bytes() // 将字符串 fp_raw 转换为字节数组 + .chunks(2) // 按每两个字节一组进行切分 + .map(|s| unsafe { ::std::str::from_utf8_unchecked(s) }) // 对每一组解析作为 UTF-8 字符串 + .collect::>(); // 将结果收集到 Vec 中 +// 如果 fp_raw 的长度小于 62, 则向下取偶数减半作为循环终止条件, 否则终止条件为31 +for i in 0..({ + if fp_raw.len() < 62 { + fp_raw.len() - fp_raw.len() % 2 // 取偶数 + } else { + 62 + } +} / 2) +{ + // 将每组字符串转换为对应的 16 进制整数, 将转换得到的整数加到 veri_code 上. + veri_code += i32::from_str_radix(fp_raw_sub_str[i], 16).unwrap_or(0); +} +// 最后将 veri_code 对 256 取余, 格式化为两位的 16 进制字符串 +let veri_code = format!("{:0>2x}", veri_code % 256); +``` + +### Demo + +#### Rust + +代码及测试样例见 [Rust Playground](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=40b5906cf3838a60efa83fa368b15147). + +## 附录 + +### BUVID Prefix + +|设备特征码|BUVID Prefix|备注| +|:-:|:-:|:-:| +|`AndroidID`|`XX`|| +|`DrmId`|`XU`|| +|`IMEI`|`XZ`|已弃用| +|`GUID`|`XW`|已弃用| +|`MAC`|`XY`|| +|`GoogleId`|`XG`|东南亚版本| +|`FacebookId`|`XF`|东南亚版本| diff --git a/docs/misc/errcode.md b/docs/misc/errcode.md new file mode 100644 index 0000000..3fe8264 --- /dev/null +++ b/docs/misc/errcode.md @@ -0,0 +1,62 @@ +# 公共错误码 + +下表为大部分接口返回值中`code`字段值中公共的错误代码 + +## 权限类 + +| 代码 | 含义 | +| ---- | -------------------------- | +| -1 | 应用程序不存在或已被封禁 | +| -2 | Access Key 错误 | +| -3 | API 校验密匙错误 | +| -4 | 调用方对该 Method 没有权限 | +| -101 | 账号未登录 | +| -102 | 账号被封停 | +| -103 | 积分不足 | +| -104 | 硬币不足 | +| -105 | 验证码错误 | +| -106 | 账号非正式会员或在适应期 | +| -107 | 应用不存在或者被封禁 | +| -108 | 未绑定手机 | +| -110 | 未绑定手机 | +| -111 | csrf 校验失败 | +| -112 | 系统升级中 | +| -113 | 账号尚未实名认证 | +| -114 | 请先绑定手机 | +| -115 | 请先完成实名认证 | + +## 请求类 + +| 代码 | 含义 | +| ---- | --------------------- | +| -304 | 木有改动 | +| -307 | 撞车跳转 | +| -352 | 风控校验失败 (UA 或 wbi 参数不合法) | +| -400 | 请求错误 | +| -401 | 未认证 (或非法请求) | +| -403 | 访问权限不足 | +| -404 | 啥都木有 | +| -405 | 不支持该方法 | +| -409 | 冲突 | +| -412 | 请求被拦截 (客户端 ip 被服务端风控) | +| -500 | 服务器错误 | +| -503 | 过载保护,服务暂不可用 | +| -504 | 服务调用超时 | +| -509 | 超出限制 | +| -616 | 上传文件不存在 | +| -617 | 上传文件太大 | +| -625 | 登录失败次数太多 | +| -626 | 用户不存在 | +| -628 | 密码太弱 | +| -629 | 用户名或密码错误 | +| -632 | 操作对象数量限制 | +| -643 | 被锁定 | +| -650 | 用户等级太低 | +| -652 | 重复的用户 | +| -658 | Token 过期 | +| -662 | 密码时间戳过期 | +| -688 | 地理区域限制 | +| -689 | 版权限制 | +| -701 | 扣节操失败 | +| -799 | 请求过于频繁,请稍后再试 | +| -8888 | 对不起,服务器开小差了~ (ಥ﹏ಥ) | diff --git a/docs/misc/mathjax.md b/docs/misc/mathjax.md new file mode 100644 index 0000000..545f7c2 --- /dev/null +++ b/docs/misc/mathjax.md @@ -0,0 +1,54 @@ +# 表达式渲染 + +## LaTeX + +> https://api.bilibili.com/x/web-frontend/mathjax/tex + +*请求方法: GET* + +暂未发现对跨源使用 `` 标签使用该接口的限制 + + + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ------ | ---- | ------ | ----- | +| formula | string | 公式 | 非必要 | LaTeX | + +**SVG 回复:** + +一个完整的 SVG (image/svg+xml) 文件, 可直接用于 HTML `` 或 Markdown `![]()` + +**示例:** + +```markdown +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=\pi=3.14159265358979323846...) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=E=mc^2) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=\ce{Fe+%2B+CuSO4+=+Cu+%2B+FeSO4}) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=\ce{N2(g)+%2B+3H2(g)+<=>[\text{高温、高压、催化剂}]+2NH3(g)}) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=S=\frac{1}{3}Sh) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=y+=+\frac{1}{\dfrac{1}{x}+%2B+1} ) +``` + +
+查看渲染结果: + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=\pi=3.14159265358979323846...) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=E=mc^2) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=\ce{Fe+%2B+CuSO4+=+Cu+%2B+FeSO4}) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=\ce{N2(g)+%2B+3H2(g)+<=>[\text{高温、高压、催化剂}]+2NH3(g)}) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=S=\frac{1}{3}Sh) + +![](https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=y+=+\frac{1}{\dfrac{1}{x}+%2B+1} ) + +
diff --git a/docs/misc/picture.md b/docs/misc/picture.md new file mode 100644 index 0000000..646487d --- /dev/null +++ b/docs/misc/picture.md @@ -0,0 +1,97 @@ +# 图片格式化 + +已知 `*.hdslb.com` `*.biliimg.com` 等域名作用等效, 对于请求头 `Referer` 要求留空或在 `.bilibili.com` 等 B 站域名下 + +对于以上域名的 `/bfs/` 下的图片文件都可以使用以下可选格式化参数 + +使用 `@` 开始参数 (无论格式如何, 无论是否有参数, 通过计算 HASH 发现, 使用 `@` 均会导致返回图片不同), 多个参数以 `_` 分隔, 图片格式无需分隔且必须放在最后 + +参见: [#191](https://github.com/SocialSisterYi/bilibili-API-collect/issues/191) + +注: jpg 即 jpeg, 二者等效. 网页端常用 AVIF, WebP. + +| 参数 | 格式 | 含义 | 备注 | +| ---- | ------- | ---------------- | ---------------- | +| w | ${int}w | 图片最大限制宽度 | 范围 [1, 9223372036854775807] | +| h | ${int}h | 图片最大限制高度 | 范围 [1, 9223372036854775807] | +| s | ${int}s | 作用尚不明确 | 不影响输出结果, 范围 [1, 9223372036854775807] | +| e | ${int}e | 改变大小 | 0: 保留比例取其小, 1: 保留比例取其大, 2: 不保留原比例 | +| p | ${int}p | 缩放倍数 | 默认100, 范围 [1, 1000] | +| o | ${int}o | 作用尚不明确 | 不影响输出结果 范围 [0, 1] | +| q | ${int}q | 图片质量百分比 | 仅限webp/jpeg/avif | +| c | ${int}c | 裁切图片(如果宽高允许) | 0: 不裁切但会修改图片, 1: 上传时的预设规则(若无则右下), 2: 左上, 3: 右上 | +| f | ${int}f | 作用尚不明确 | [0, 1]: 不改变图片, 2: 会改变图片 | +| progressive | progressive | 图片编码方式 | 仅限 jpeg(无: baseline, 有: progressive)/png(无:non-interlaced, 有: interlaced) | +| ! | !${str} | 加载来源 | web-home-carousel-cover, header, web-dynamic, web-avatar-space-header, ... | +| . | .${str} | 图片格式 | 仅限 png/jpeg/webp/avif/[avg_color](#avg_color格式说明) | + +**示例:** + +
+查看示例: + +原始图片 + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg + + + +高度限制为100 + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100h + + + +宽度限制为100 + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100w + + + +转换格式为webp + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.webp + + + +转换为webp图片质量为1% + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q.webp + + +
+ +## avg_color格式说明 + +当图片格式化输出格式为`avg_color`时 + +> /bfs/\*/\*.*@\*.avg_color + +*请求方式:GET* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ----------- | ------ | +| RGB | str | 平均颜色值 | HEX | + +**示例:** + +获取 https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg 的平均颜色值 + +```shell +curl 'https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.avg_color' +``` + +
+查看响应示例: + +```json +{ + "RGB": "#7d6f6c" +} +``` + +
diff --git a/docs/misc/sign/APP.md b/docs/misc/sign/APP.md new file mode 100644 index 0000000..8b51c05 --- /dev/null +++ b/docs/misc/sign/APP.md @@ -0,0 +1,289 @@ +# APP API 签名与鉴权 + +## APP API 签名特性 + +部分客户端专用的 REST API 存在基于参数签名的鉴权,需要使用规定的`appkey`及其对应的`appsec`与原始请求参数进行签名计算,部分`AppKey`及与之对应的`AppSec`已经被公开:见该文档 [APPKey](APPKey.md) + +- 不同 `appkey` 对应不同的 app (如客户端、概念版、必剪、漫画、bililink等) + +- 不同平台同 app 也会存在不同的 `appkey` (如安卓端、ios端、TV端等) + +- 同平台同 app 下不同功能也会存在不同的 `appkey`(如登录专用、取流专用等) + +- 不同版本的客户端的 `appkey` 也可能不同 + +- **appkey与appsec一一对应** + +## APP API 签名算法 + +1. 首先为参数中添加`appkey`字段 +2. 然后按照参数的 Key 重新排序 +3. 再对这个 Key-Value 进行 url query 序列化,并拼接与之对应的`appsec` (盐) 进行 **md5 Hash 运算**(32-bit 字符小写),该 hash 便是 API 签名 +4. 最后在参数尾部增添`sign`字段,它的 Value 为上一步计算所得的 hash,一并作为表单或 Query 提交 + +## Demo + +该 Demo 提供 [Python](#python)、[Java](#java)、[TS/JS](#typescript-javascript)、[Swift](#swift)、[C++](#cplusplus) 语言例程 + +使用 appkey = `1d8b6e7d45233436`, appsec = `560c52ccd288fed045859ed18bffd973` 对如下 `params` 参数进行签名 + +上述示例`appkey`、`AppSec`均来自文档 [APPKey](APPKey.md) + +### Python + +```python +import hashlib +import urllib.parse + +def appsign(params, appkey, appsec): + '为请求参数进行 APP 签名' + params.update({'appkey': appkey}) + params = dict(sorted(params.items())) # 按照 key 重排参数 + query = urllib.parse.urlencode(params) # 序列化参数 + sign = hashlib.md5((query+appsec).encode()).hexdigest() # 计算 api 签名 + params.update({'sign':sign}) + return params + +appkey = '1d8b6e7d45233436' +appsec = '560c52ccd288fed045859ed18bffd973' +params = { + 'id':114514, + 'str':'1919810', + 'test':'いいよ,こいよ', +} +signed_params = appsign(params, appkey, appsec) +query = urllib.parse.urlencode(signed_params) +print(signed_params) +print(query) +``` + +输出内容分别是进行 APP 签名的后参数的 key-Value 以及 url query 形式 + +``` +{'appkey': '1d8b6e7d45233436', 'id': 114514, 'str': '1919810', 'test': 'いいよ,こいよ', 'sign': '01479cf20504d865519ac50f33ba3a7d'} +appkey=1d8b6e7d45233436&id=114514&str=1919810&test=%E3%81%84%E3%81%84%E3%82%88%EF%BC%8C%E3%81%93%E3%81%84%E3%82%88&sign=01479cf20504d865519ac50f33ba3a7d +``` + +### Java + + +```java +package io.github.cctyl; + +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.net.URLEncoder; +import java.util.TreeMap; + +/** + * @author cctyl + */ +public class AppSigner { + + private static final String APP_KEY = "1d8b6e7d45233436"; + private static final String APP_SEC = "560c52ccd288fed045859ed18bffd973"; + + public static String appSign(Map params) { + // 为请求参数进行 APP 签名 + params.put("appkey", APP_KEY); + // 按照 key 重排参数 + Map sortedParams = new TreeMap<>(params); + // 序列化参数 + StringBuilder queryBuilder = new StringBuilder(); + for (Map.Entry entry : sortedParams.entrySet()) { + if (queryBuilder.length() > 0) { + queryBuilder.append('&'); + } + queryBuilder + .append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8)) + .append('=') + .append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8)); + } + return generateMD5(queryBuilder .append(APP_SEC).toString()); + } + + private static String generateMD5(String input) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] digest = md.digest(input.getBytes()); + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) { + Map params = new HashMap<>(); + params.put("id", "114514"); + params.put("str", "1919810"); + params.put("test", "いいよ,こいよ"); + System.out.println(appSign(params)); + } +} +``` + +输出结果为:01479cf20504d865519ac50f33ba3a7d + +### TypeScript/JavaScript + +```typescript +import { createHash } from 'node:crypto' + +type Params = Record + +const md5 = (str: string) => createHash('md5').update(str).digest('hex') + +/** + * 为请求参数进行 APP 签名 + */ +export function appSign(params: Params, appkey: string, appsec: string) { + params.appkey = appkey + const searchParams = new URLSearchParams(params) + searchParams.sort() + return md5(searchParams.toString() + appsec) +} + +console.log( + appSign( + { + id: 114514, + str: '1919810', + test: 'いいよ,こいよ', + }, + '1d8b6e7d45233436', + '560c52ccd288fed045859ed18bffd973', + ), + '01479cf20504d865519ac50f33ba3a7d', +) +``` + +输出结果为:01479cf20504d865519ac50f33ba3a7d + +### Swift + +```swift +import Foundation +import CommonCrypto + +//Swift标准库没有MD5函数,所以我们要自己实现一个 +func MD5(string: String) -> String { + let length = Int(CC_MD5_DIGEST_LENGTH) + var digest = [UInt8](repeating: 0, count: length) + + if let d = string.data(using: .utf8) { + _ = d.withUnsafeBytes { body -> String in + CC_MD5(body.baseAddress, CC_LONG(d.count), &digest) + return "" + } + } + + return (0.. String { + var signedParams = params + signedParams["appkey"] = appKey + let sortedParams = signedParams.sorted { $0.key < $1.key } + //在制作成query时,需要显式addingPercentEncoding转换 + let query = sortedParams.map { "\($0.key)=\($0.value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)" }.joined(separator: "&") + let sign = MD5(string: query+appSec) + return sign +} + + +//testSign +let appKey = "1d8b6e7d45233436" +let appSec = "560c52ccd288fed045859ed18bffd973" +let signResult = appSign(params: [ + "id": "114514", + "str": "1919810", + "test": "いいよ,こいよ", +],appKey:appKey,appSec:appSec) +print(signResult) +``` + +输出结果为:01479cf20504d865519ac50f33ba3a7d + + + +### CplusPlus + +需要 c++ 23 标准库,[cpr](https://github.com/libcpr/cpr)、[cryptopp](https://github.com/weidai11/cryptopp)、[nlohmann/json](https://github.com/nlohmann/json) 等依赖 + +```c++ +#include // std::println + +/// thrid party libraries +#include // cpr::util::urlEncode() +#include +#include +#include + +/* + * 注意,假定不会发生错误! + */ + +/* 获取 md5 hex(lower) */ +std::string Get_md5_hex(const std::string &Input_str) { + CryptoPP::Weak1::MD5 hash; + std::string md5_hex; + + CryptoPP::StringSource ss(Input_str, true, + new CryptoPP::HashFilter(hash, + new CryptoPP::HexEncoder( + new CryptoPP::StringSink(md5_hex) + ) + ) + ); + + std::ranges::for_each(md5_hex, [](char &x) { x = std::tolower(x); }); + return md5_hex; +} + +/* 将 json 转换为 url 编码字符串 */ +std::string Json_to_url_encode_str(const nlohmann::json &Json) { + std::string encode_str; + for (const auto &[key, value]: Json.items()) { + encode_str.append(key).append("=").append(cpr::util::urlEncode(value.is_string() ? value.get() : to_string(value))).append("&"); + } + + // remove the last '&' + encode_str.resize(encode_str.size() - 1, '\0'); + return encode_str; +} + +std::string App_sign(nlohmann::json &Params, const std::string &App_key, const std::string &App_sec) { + Params["appkey"] = App_key; + Params["sign"] = Get_md5_hex(Json_to_url_encode_str(Params) + App_sec); + return Json_to_url_encode_str(Params); +} + +int main() { + nlohmann::json Params; + Params["id"] = 114514; + Params["str"] = "1919810"; + Params["test"] = "いいよ,こいよ"; + + constexpr auto App_key = "1d8b6e7d45233436"; + constexpr auto App_sec = "560c52ccd288fed045859ed18bffd973"; + std::string sign = App_sign(Params, App_key, App_sec); + std::println("{}", to_string(Params)); + std::println("{}", sign); +} +``` + +```text +{"appkey":"1d8b6e7d45233436","id":114514,"sign":"01479cf20504d865519ac50f33ba3a7d","str":"1919810","test":"いいよ,こいよ"} +appkey=1d8b6e7d45233436&id=114514&sign=01479cf20504d865519ac50f33ba3a7d&str=1919810&test=%E3%81%84%E3%81%84%E3%82%88%EF%BC%8C%E3%81%93%E3%81%84%E3%82%88 +``` + diff --git a/docs/misc/sign/APPKey.md b/docs/misc/sign/APPKey.md new file mode 100644 index 0000000..0203970 --- /dev/null +++ b/docs/misc/sign/APPKey.md @@ -0,0 +1,55 @@ +# APPKey + +以下为已知的 APPkey / APPSec,及部分使用场景参数信息,均来自抓包与逆向工程 + +| APPKEY | APPSEC | platform2 | APP类型 | neuronAppId1 | mobi_app2 | 备注 | +| :--------------: | :------------------------------: | :------------------: | :----------------: | :---------------------: | :------------------: | :----------------------------------------: | +| 9d5889cf67e615cd | 8fd9bb32efea8cef801fd895bef2713d | `android` | Ai4cCreatorAndroid | | | | +| 1d8b6e7d45233436 | 560c52ccd288fed045859ed18bffd973 | `android` | 粉版 | `1` | `android` | 获取资源通用 | +| 783bbb7264451d82 | 2653583c8873dea268ab9386918b1d65 | `android` | 粉版 | `1` | `android` | 仅获取用户信息时使用(7.X及更新版本) | +| 57263273bc6b67f6 | a0488e488d1567960d3a765e8d129f90 | `android` | 粉版 | `1` | `android` | 可能来自旧版 | +| 07da50c9a0bf829f | 25bdede4e1581c836cab73a48790ca6e | `android` | 概念版 | `3` | `android_b` | | +| 191c3b6b975af184 | 1673b15a09ef5e4427627f47b03a0578 | `android` | 概念版 | `3` | `android_b` | 仅获取用户信息时使用(7.X及更新版本) | +| 178cf125136ca8ea | 34381a26236dd1171185c0beb042e1c6 | `android` | 概念版 | `3` | `android_b` | 可能来自旧版 | +| 7d336ec01856996b | a1ce6983bc89e20a36c37f40c4f1a0dd | `android` | 概念版 | `3` | `android_b` | 可能来自旧版 | +| dfca71928277209b | b5475a8825547a4fc26c7d518eaaa02e | `android` | HD 版 | `5` | `android_hd` | | +| bb3101000e232e27 | 36efcfed79309338ced0380abd824ac1 | `android` | 白版 | `14` | `android_i` | | +| ae57252b0c09105d | c75875c596a69eb55bd119e74b07cfe3 | `android` | 白版 | `14` | `android_i` | 仅获取用户信息时使用(7.X及更新版本) | +| 8e16697a1b4f8121 | f5dd03b752426f2e623d7badb28d190a | `android` | 白版 | `14` | `android_i` | 可能来自旧版 | +| 7d089525d3611b1c | acd495b248ec528c2eed1e862d393126 | `android` | 蓝版 | `30` | `bstar_a` | | +| iVGUTjsxvpLeuDCf | aHRmhWMLkdeMuILqORnYZocwMBpMEOdt | `android` | - | - | - | 视频取流专用, 仅5.X旧版使用 | +| YvirImLGlLANCLvM | JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM | `ios` | - | - | - | 视频取流专用 | +| 27eb53fc9058f8c3 | c2ed53a74eeefe3cf99fbd01d8c9c375 | `web`/`ios`? | - | - | - | 第三方授权使用 | +| 84956560bc028eb7 | 94aba54af9065f71de72f5508f1cd42e | ? | UWP 版 | - | - | 部分API不接受此appkey, 返回-663错误 | +| 85eb6835b0a1034e | 2ad42749773c441109bdc0191257a664 | ? | UWP 版? | - | - | 部分API不接受此appkey, 返回-663错误 | +| 4ebafd7c4951b366 | 8cb98205e9b2ad3669aad0fce12a4c13 | `ios` | iPhone 客户端? | `iphone` | ? | | +| 8d23902c1688a798 | 710f0212e62bd499b8d3ac6e1db9302a | `android` | AndroidBiliThings | ? | ? | | +| 4c6e1021617d40d9 | e559a59044eb2701b7a8628c86aa12ae | `android` | AndroidMallTicket | ? | ? | | +| c034e8b74130a886 | e4e8966b1e71847dc4a3830f2d078523 | `android` | AndroidOttSdk | `7` | ? | | +| 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | `android` | 云视听小电视(TV版) | `9`? | `android_tv_yst`? | | +| 37207f2beaebf8d7 | e988e794d4d4b6dd43bc0e89d6e90c43 | `android` | BiliLink | ? | ? | | +| 9a75abf7de2d8947 | 35ca1c82be6c2c242ecc04d88c735f31 | `android` | BiliScan | ? | ? | | +| aae92bc66f3edfab | af125a0d5279fd576c1b4418a3e8276d | ? | PC 投稿工具&PC直播姬| - | ? | | +| bca7e84c2d947ac6 | 60698ba2f68e01ce44738920a0ffe768 | ? | login | - | ? | | +| h9Ejat5tFh81cq8V | BdiI92bjmZ9QRcjJBWv2EEssyjekAGKt | | | | | bilibili游戏 web端 游戏详情页API | + +注释: + +1 `neuronAppId`,产品编号,由数据平台分配,详情如下: + +- 粉(国内版)=1 +- 白(GooglePlay 版)=2 +- 蓝(东南亚版)=3 +- 直播姬=4 +- HD=5 +- 海外=6 +- OTT=7 +- 漫画=8 +- TV野版=9 +- 小视频=10 +- 网易漫画=11 +- 网易漫画lite=12 +- 网易漫画HD=13, +- 国际版=14 + +2 `platform`, `mobi_app` 仅供参考, 具体值需要抓包确定. diff --git a/docs/misc/sign/bili_ticket.md b/docs/misc/sign/bili_ticket.md new file mode 100644 index 0000000..c0ed0d8 --- /dev/null +++ b/docs/misc/sign/bili_ticket.md @@ -0,0 +1,304 @@ +# BiliTicket + +## 简述 + +`bili_ticket` 位于请求头 Cookie 中, 非必需, 但存在可降低风控概率 + +由 [@aynuarance](https://github.com/aynuarance) 于 [#903](https://github.com/SocialSisterYi/bilibili-API-collect/issues/903) 提供的思路,根据时间戳使用 `hmac_sha256` 算法计算 `hexsign`。 + +是 [JWT 令牌](https://jwt.io/),有效时长为 259260 秒,即 3 天。 +例如 `eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDI3NDI3NDYsImlhdCI6MTcwMjQ4MzQ4NiwicGx0IjotMX0.xQgtTAc41NA1gzvd9yKUPgucUy_DKcQj6OG1vj8V7ZA` + +```json +{ + "alg": "HS256", + "kid": "s03", + "typ": "JWT" +} +``` + +## 算法 + +1. 获取 UNIX 秒级时间戳存入变量如 `timestamp` +2. 计算变量 `hexsign` 值,使用 `hmac_sha256` 算法,密钥为 `XgwSnGZ1p`,消息为字符串 `"ts"` 与变量 `timestamp` 值拼接 +3. 构造请求参数,`key_id` 为 `ec02`,`hexsign` 为变量 `hexsign` 值,`context[ts]` 为变量 `timestamp` 值,`csrf` 为 cookie 中的 `bili_jct` 值也可为空 +4. 发送 `POST` 请求,获取 `data` 字段中的 `ticket` 字段的值即为所求 + +## 接口 + +> https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket + +*请求方式: POST* + +鉴权方式: 请求头 `Referer` 为空或 `.bilibili.com` 子域下任意页 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----- | ---- | ---- | ------ | ---- | +| key_id | str | ec02 | 必要 | | +| hexsign | str | 由 `hmac_sha256` 算法计算的 `hexsign` 值 | 必要 | | +| context[ts] | num | UNIX 秒级时间戳 | 必要 | | +| csrf | str | cookie 中的 `bili_jct` 值 | 非必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | num | 返回值 | 0: 成功
400: 参数错误 | +| message | str | 返回消息 | OK: 成功 | +| data | obj | 数据本体 | | +| ttl | num | 1 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| ticket | str | bili_ticket | | +| created_at | num | 创建时间 | UNIX 秒级时间戳 | +| ttl | num | 有效时长 | 259200 秒 (3 天) | +| context | obj | 空 | | +| nav | obj | wbi_img 相关 | 参见 [WBI 签名](./wbi.md) | + +`nav` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| img | str | img_key 值 | 参见 [WBI 签名](./wbi.md) | +| sub | str | sub_key 值 | 参见 [WBI 签名](./wbi.md) | + +**示例:** + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "OK", + "data": { + "ticket": "eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjM2OTMwODAsImlhdCI6MTcyMzQzMzgyMCwicGx0IjotMX0.efOwv7i4m0ykABrXEDHGAechU2AByMcP_-3EYpQrNKs", + "created_at": 1723433820, + "ttl": 259200, + "context": {}, + "nav": { + "img": "https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png", + "sub": "https://i0.hdslb.com/bfs/wbi/4932caff0ff746eab6f01bf08b70ac45.png" + } + }, + "ttl": 1 +} +``` + +
+ +## Demo + +此处提供 [Python](#python), [Java](#java), [JavaScript (Node.js)](#javascript-nodejs) 的示例代码 + +### Python + +需要 `requests` 依赖 + +```python +import hmac +import hashlib +import requests +import time + +def hmac_sha256(key, message): + """ + 使用HMAC-SHA256算法对给定的消息进行加密 + :param key: 密钥 + :param message: 要加密的消息 + :return: 加密后的哈希值 + """ + # 将密钥和消息转换为字节串 + key = key.encode('utf-8') + message = message.encode('utf-8') + + # 创建HMAC对象,使用SHA256哈希算法 + hmac_obj = hmac.new(key, message, hashlib.sha256) + + # 计算哈希值 + hash_value = hmac_obj.digest() + + # 将哈希值转换为十六进制字符串 + hash_hex = hash_value.hex() + + return hash_hex + + +if __name__ == '__main__': + o = hmac_sha256("XgwSnGZ1p",f"ts{int(time.time())}") + url = "https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket" + params = { + "key_id":"ec02", + "hexsign":o, + "context[ts]":f"{int(time.time())}", + "csrf": '' + } + + headers = { + 'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0" + } + resp = requests.post(url, params=params,headers=headers).json() + print(resp) +``` + +### Java + +无需第三方依赖 + +```java +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URI; +import java.nio.charset.StandardCharsets; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +public class BiliTicketDemo { + + /** + * Convert a byte array to a hex string. + * + * @param bytes The byte array to convert. + * @return The hex string representation of the given byte array. + */ + public static String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + sb.append('0'); + } + sb.append(hex); + } + return sb.toString(); + } + + /** + * Generate a HMAC-SHA256 hash of the given message string using the given key + * string. + * + * @param key The key string to use for the HMAC-SHA256 hash. + * @param message The message string to hash. + * @throws Exception If an error occurs during the HMAC-SHA256 hash generation. + * @return The HMAC-SHA256 hash of the given message string using the given key + * string. + */ + public static String hmacSha256(String key, String message) throws Exception { + Mac mac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + mac.init(secretKeySpec); + byte[] hash = mac.doFinal(message.getBytes(StandardCharsets.UTF_8)); + return bytesToHex(hash); + } + + /** + * Get a Bilibili web ticket for the given CSRF token. + * + * @param csrf The CSRF token to use for the web ticket, can be {@code null} or + * empty. + * @return The Bilibili web ticket raw response for the given CSRF token. + * @throws Exception If an error occurs during the web ticket generation. + * @see https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/misc/sign/bili_ticket.md + */ + public static String getBiliTicket(String csrf) throws Exception { + // params + long ts = System.currentTimeMillis() / 1000; + String hexSign = hmacSha256("XgwSnGZ1p", "ts" + ts); + StringBuilder url = new StringBuilder( + "https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket"); + url.append('?'); + url.append("key_id=ec02").append('&'); + url.append("hexsign=").append(hexSign).append('&'); + url.append("context[ts]=").append(ts).append('&'); + url.append("csrf=").append(csrf == null ? "" : csrf); + // request + HttpURLConnection conn = (HttpURLConnection) new URI(url.toString()).toURL().openConnection(); + conn.setRequestMethod("POST"); + conn.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0"); + InputStream in = conn.getInputStream(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int b; + while ((b = in.read()) != -1) { + out.write(b); + } + return new String(out.toByteArray(), StandardCharsets.UTF_8); + } + + /** + * Main method to test the BiliTicketDemo class. + * + * @param args The command line arguments (not used). + */ + public static void main(String[] args) { + try { + System.out.println(getBiliTicket("")); // use empty CSRF here + } catch (Exception e) { + e.printStackTrace(); + } + } + +} +``` + +### JavaScript (Node.js) + +```javascript +const crypto = require('crypto'); + +/** + * Generate HMAC-SHA256 signature + * @param {string} key The key string to use for the HMAC-SHA256 hash + * @param {string} message The message string to hash + * @returns {string} The HMAC-SHA256 signature as a hex string + */ +function hmacSha256(key, message) { + const hmac = crypto.createHmac('sha256', key); + hmac.update(message); + return hmac.digest('hex'); +} + +/** + * Get Bilibili web ticket + * @param {string} csrf CSRF token, can be empty or null + * @returns {Promise} Promise of the ticket response in JSON format + */ +async function getBiliTicket(csrf) { + const ts = Math.floor(Date.now() / 1000); + const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`); + const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket'; + const params = new URLSearchParams({ + key_id: 'ec02', + hexsign: hexSign, + 'context[ts]': ts, + csrf: csrf || '' + }); + const response = await fetch(`${url}?${params.toString()}`, { + method: 'POST', + headers: { + 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0' + } + }); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + return response.json(); +} + +(async () => { + try { + const ticketResponse = await getBiliTicket(''); // use empty CSRF here + console.log(ticketResponse); + } catch (e) { + console.error('Failed to get BiliTicket:', e); + } +})(); +``` diff --git a/docs/misc/sign/v_voucher.md b/docs/misc/sign/v_voucher.md new file mode 100644 index 0000000..3804c80 --- /dev/null +++ b/docs/misc/sign/v_voucher.md @@ -0,0 +1,179 @@ +# v_voucher 验证 + +## 简述 + +当同一接口在短时间内被同一用户/IP/UA多次请求或异常时, 会触发风控, 如接口返回 `code` 为 `-352` 即 `风控校验失败`, 同时 `data` 中出现 `v_voucher` 字段, 响应头出现 `x-bili-gaia-vvoucher` + +`v_voucher` 结构为字符串 `voucher_` 尾随一串以 `-` 为分隔符的小写 UUID + +`v_voucher` 可用于申请 captcha 验证码, 若无意外发生, 根据验证结果使用 `validate` 接口获取 `grisk_id` 作为被风控接口的 `gaia_vtoken` 与 Cookie 中的 `x-bili-gaia-vtoken`, 即可恢复正常访问 + +若该情况出现在使用 Wbi 签名的接口中, 建议先检查 Wbi 签名是否正确. 若已检查 Wbi 签名或无需签名, 检查请求头中 `User-Agent` `Referer` 是否正常, 以及 `Cookie` 中 [`bili_ticket`](bili_ticket.md) [`b_nut` `buvid3` `buvid4`](../buvid3_4.md) 等是否存在. 使用 captcha 是最后的选择, 因为 captcha 验证需要用户操作 + +参见 [#1067](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1067) + +**注意: 不是所有风控都可以使用本方式通过 captcha 解决** + +## 操作流程 + +1. 快速以不正确的姿势请求接口, 直到返回 `v_voucher` 字段如下. 若 `data` 中没有 `v_voucher` 字段, 则检查响应头 `x-bili-gaia-vvoucher` + + ```json + { + "code": -352, + "message": "风控校验失败", + "ttl": 1, + "data": { + "v_voucher": "voucher_84a8c3ce-33f5-4551-9552-9c6b13aa7938" + } + } + ``` + +2. [请求 `register` 接口](#从-v_voucher-申请-captcha), 请求体传入 `csrf` 及 `v_voucher`, 该接口返回与 [申请captcha验证码](../../login/login_action/readme.md#申请captcha验证码) 部分相同, 记录此处返回的 `token` `challenge` + +3. 按照 [验证captcha验证码](../../login/login_action/readme.md#验证captcha验证码) 进行验证, 记下验证结果的 `validate` 与 `seccode` + +4. [请求 `validate` 接口](#从验证结果获取-grisk_id), 请求体传入 `challenge` `token` `validate` `seccode` `csrf`, 该接口返回 `grisk_id` 即 `gaia_vtoken` 与 `x-bili-gaia-vtoken` + +5. 重新请求原接口, 原 URL 参数加入 `gaia_vtoken`, Cookie 加入 `x-bili-gaia-vtoken`, 即恢复正常 + +## 接口列表 + +### 从 v_voucher 申请 captcha + +> https://api.bilibili.com/x/gaia-vgate/v1/register + +注: 同一有效 `v_voucher` 只能请求一次, 请求完毕请立即 [进行验证](../../login/login_action/readme.md#进行验证) 防止过期失效 + +*请求方式: POST* + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------- | ------ | ---- | +| csrf | str | CSRF Token (位于 Cookie 的 bili_jct) | 非必要 | | +| v_voucher | str | v_voucher | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------ | ---- | +| code | num | 返回值 | 0:成功
100000: 验证码获取失败 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------ | ---- | +| type | str | 验证码类型 | 目前只有 `geetest` | +| token | str | 验证码 token | 用于验证 | +| geetest | obj | 极验信息 | 若为 null 则说明该风控无法通过 captcha 解除 | +| biliword | null | | | +| phone | null | | | +| sms | null | | | + +`geetest` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | -------- | +| gt | str | 极验id | 一般为固定值 | +| challenge | str | 极验KEY | 由B站后端产生用于人机验证 | + +**示例:** + +假设此处 `v_voucher` 为 `voucher_ecca35e6-36da-4f38-bd84-b3f420ea08c1` + +```shell +curl -X POST "https://api.bilibili.com/x/gaia-vgate/v1/register" \ +--data-urlencode "v_voucher=voucher_ecca35e6-36da-4f38-bd84-b3f420ea08c1" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "type": "geetest", + "token": "e7abdb050c3d4609979f1685137e3bc0", + "geetest": { + "challenge": "85118f8714875ca4c6d5641bb0ce9ddf", + "gt": "ac597a4506fee079629df5d8b66dd4fe" + }, + "biliword": null, + "phone": null, + "sms": null + } +} +``` + +
+ +## 从验证结果获取 grisk_id + +> https://api.bilibili.com/x/gaia-vgate/v1/validate + +*请求方式: POST* + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ---- | ---- | +| csrf | str | CSRF Token (位于 Cookie 的 bili_jct) | 非必要 | 若登陆则必要 | +| challenge | str | 验证码 challenge | 必要 | | +| token | str | 验证码 token | 必要 | | +| validate | str | 验证结果 validate | 必要 | | +| seccode | str | 验证结果 seccode | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------ | ---- | +| code | num | 返回值 | 0:成功
-111: csrf 校验失败
100003: 验证码过期 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------ | ---- | +| is_valid | num | 验证结果 | 1:验证成功 | +| grisk_id | str | gaia_vtoken | 用于恢复正常访问 | + +**示例:** + +```shell +curl -X POST "https://api.bilibili.com/x/gaia-vgate/v1/validate" \ +--data-urlencode "challenge=e4fcb337b8c0427b56320f97e1064210" \ +--data-urlencode "csrf=xxxxxxxxxxxxxxx" \ +--data-urlencode "seccode=360f7b9cf75c74c68fbb7475416d0e0d|jordan" \ +--data-urlencode "token=0e1e58bdff3d4b8aa298e346fed07eeb" \ +--data-urlencode "validate=360f7b9cf75c74c68fbb7475416d0e0d" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "is_valid": 1, + "grisk_id": "2e91cf2b67172ca8432fe7c9ab66a5c4" + } +} +``` + +
diff --git a/docs/misc/sign/wbi.md b/docs/misc/sign/wbi.md new file mode 100644 index 0000000..a28a204 --- /dev/null +++ b/docs/misc/sign/wbi.md @@ -0,0 +1,1481 @@ +# WBI 签名 + +自 2023 年 3 月起,Bilibili Web 端部分接口开始采用 WBI 签名鉴权,表现在 REST API 请求时在 Query param 中添加了 `w_rid` 和 `wts` 字段。WBI 签名鉴权独立于 [APP 鉴权](APP.md) 与其他 Cookie 鉴权,目前被认为是一种 Web 端风控手段。 + +经持续观察,大部分查询性接口都已经或准备采用 WBI 签名鉴权,请求 WBI 签名鉴权接口时,若签名参数 `w_rid` 与时间戳 `wts` 缺失、错误,会返回 [`v_voucher`](v_voucher.md),如: + +```json +{"code":0,"message":"0","ttl":1,"data":{"v_voucher":"voucher_******"}} +``` + +感谢 [#631](https://github.com/SocialSisterYi/bilibili-API-collect/issues/631) 的研究与逆向工程。 + +细节更新:[#885](https://github.com/SocialSisterYi/bilibili-API-collect/issues/885)。 + +最新进展: [#919](https://github.com/SocialSisterYi/bilibili-API-collect/issues/919) + +## WBI 签名算法 + +1. 获取实时口令 `img_key`、`sub_key` + + 从 [nav 接口](../../login/login_info.md#导航栏用户信息) 中获取 `img_url`、`sub_url` 两个字段的参数。 + 或从 [bili_ticket 接口](bili_ticket.md#接口) 中获取 `img` `sub` 两个字段的参数。 + + **注:`img_url`、`sub_url` 两个字段的值看似为存于 BFS 中的 png 图片 url,实则只是经过伪装的实时 Token,故无需且不能试图访问这两个 url** + + ```json + {"code":-101,"message":"账号未登录","ttl":1,"data":{"isLogin":false,"wbi_img":{"img_url":"https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png","sub_url":"https://i0.hdslb.com/bfs/wbi/4932caff0ff746eab6f01bf08b70ac45.png"}}} + ``` + + 截取其文件名,分别记为 `img_key`、`sub_key`,如上述例子中的 `7cd084941338484aae1ad9425b84077c` 和 `4932caff0ff746eab6f01bf08b70ac45`。 + + `img_key`、`sub_key` 全站统一使用,观测知应为**每日更替**,使用时建议做好**缓存和刷新**处理。 + + 特别地,发现部分接口将 `img_key`、`sub_key` 硬编码进 JavaScript 文件内,如搜索接口 `https://s1.hdslb.com/bfs/static/laputa-search/client/assets/index.1ea39bea.js`,暂不清楚原因及影响。 + 同时, 部分页面会在 SSR 的 `__INITIAL_STATE__` 包含 `wbiImgKey` 与 `wbiSubKey`, 具体可用性与区别尚不明确 + +2. 打乱重排实时口令获得 `mixin_key` + + 把上一步获取到的 `sub_key` 拼接在 `img_key` 后面(下例记为 `raw_wbi_key`),遍历重排映射表 `MIXIN_KEY_ENC_TAB`,取出 `raw_wbi_key` 中对应位置的字符拼接得到新的字符串,截取前 32 位,即为 `mixin_key`。 + + 重排映射表 `MIXIN_KEY_ENC_TAB` 长为 64,内容如下: + + ```rust + const MIXIN_KEY_ENC_TAB: [u8; 64] = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 + ] + ``` + + 重排操作如下例: + + ```rust + fn gen_mixin_key(raw_wbi_key: impl AsRef<[u8]>) -> String { + const MIXIN_KEY_ENC_TAB: [u8; 64] = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, + 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, + 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52, + ]; + let raw_wbi_key = raw_wbi_key.as_ref(); + let mut mixin_key = { + let binding = MIXIN_KEY_ENC_TAB + .iter() + // 此步操作即遍历 MIXIN_KEY_ENC_TAB,取出 raw_wbi_key 中对应位置的字符 + .map(|n| raw_wbi_key[*n as usize]) + // 并收集进数组内 + .collect::>(); + unsafe { String::from_utf8_unchecked(binding) } + }; + let _ = mixin_key.split_off(32); // 截取前 32 位字符 + mixin_key + } + ``` + + 如 `img_key` -> `7cd084941338484aae1ad9425b84077c`、`sub_key` -> `4932caff0ff746eab6f01bf08b70ac45` 经过上述操作后得到 `mixin_key` -> `ea1db124af3c7062474693fa704f4ff8`。 + +3. 计算签名(即 `w_rid`) + + 若下方内容为欲签名的**原始**请求参数(以 JavaScript Object 为例) + + ```javascript + { + foo: '114', + bar: '514', + zab: 1919810 + } + ``` + + `wts` 字段的值应为当前以秒为单位的 Unix 时间戳,如 `1702204169` + + 复制一份参数列表,添加 `wts` 参数,即: + + ```javascript + { + foo: '114', + bar: '514', + zab: 1919810, + wts: 1702204169 + } + ``` + + 随后按键名升序排序后百分号编码 URL Query,拼接前面得到的 `mixin_key`,如 `bar=514&foo=114&wts=1702204169&zab=1919810ea1db124af3c7062474693fa704f4ff8`,计算其 MD5 即为 `w_rid`。 + + 需要注意的是:如果参数值含中文或特殊字符等,编码字符字母应当**大写** (部分库会错误编码为小写字母),空格应当编码为 `%20`(部分库按 `application/x-www-form-urlencoded` 约定编码为 `+`), 具体正确行为可参考 [encodeURIComponent 函数](https://tc39.es/ecma262/multipage/global-object.html#sec-encodeuricomponent-uricomponent) + + 例如: + + ```javascript + { + foo: 'one one four', + bar: '五一四', + baz: 1919810 + } + ``` + + 应该被编码为 `bar=%E4%BA%94%E4%B8%80%E5%9B%9B&baz=1919810&foo=one%20one%20four`。 + +4. 向原始请求参数中添加 `w_rid`、`wts` 字段 + + 将上一步得到的 `w_rid` 以及前面的 `wts` 追加到**原始**请求参数编码得到的 URL Query 后即可,目前看来无需对原始请求参数排序。 + + 如前例最终得到 `bar=514&foo=114&zab=1919810&w_rid=8f6f2b5b3d485fe1886cec6a0be8c5d4&wts=1702204169`。 + +## Demo + +含 [Python](#python)、[JavaScript](#javascript)、[Golang](#golang)、[C#](#csharp)、[Java](#java)、[Kotlin](#kotlin)、[Swift](#swift)、[C++](#cplusplus)、[Rust](#rust)、[Haskell](#haskell) 语言编写的 Demo + +### Python + +需要`requests`依赖 + +```python +from functools import reduce +from hashlib import md5 +import urllib.parse +import time +import requests + +mixinKeyEncTab = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 +] + +def getMixinKey(orig: str): + '对 imgKey 和 subKey 进行字符顺序打乱编码' + return reduce(lambda s, i: s + orig[i], mixinKeyEncTab, '')[:32] + +def encWbi(params: dict, img_key: str, sub_key: str): + '为请求参数进行 wbi 签名' + mixin_key = getMixinKey(img_key + sub_key) + curr_time = round(time.time()) + params['wts'] = curr_time # 添加 wts 字段 + params = dict(sorted(params.items())) # 按照 key 重排参数 + # 过滤 value 中的 "!'()*" 字符 + params = { + k : ''.join(filter(lambda chr: chr not in "!'()*", str(v))) + for k, v + in params.items() + } + query = urllib.parse.urlencode(params) # 序列化参数 + wbi_sign = md5((query + mixin_key).encode()).hexdigest() # 计算 w_rid + params['w_rid'] = wbi_sign + return params + +def getWbiKeys() -> tuple[str, str]: + '获取最新的 img_key 和 sub_key' + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', + 'Referer': 'https://www.bilibili.com/' + } + resp = requests.get('https://api.bilibili.com/x/web-interface/nav', headers=headers) + resp.raise_for_status() + json_content = resp.json() + img_url: str = json_content['data']['wbi_img']['img_url'] + sub_url: str = json_content['data']['wbi_img']['sub_url'] + img_key = img_url.rsplit('/', 1)[1].split('.')[0] + sub_key = sub_url.rsplit('/', 1)[1].split('.')[0] + return img_key, sub_key + +img_key, sub_key = getWbiKeys() + +signed_params = encWbi( + params={ + 'foo': '114', + 'bar': '514', + 'baz': 1919810 + }, + img_key=img_key, + sub_key=sub_key +) +query = urllib.parse.urlencode(signed_params) +print(signed_params) +print(query) +``` + +输出内容分别是进行 Wbi 签名的后参数的 key-Value 以及 url query 形式 + +``` +{'bar': '514', 'baz': '1919810', 'foo': '114', 'wts': '1702204169', 'w_rid': 'd3cbd2a2316089117134038bf4caf442'} +bar=514&baz=1919810&foo=114&wts=1702204169&w_rid=d3cbd2a2316089117134038bf4caf442 +``` + +### JavaScript + +需要 `fetch`(浏览器、NodeJS等环境自带)、`md5` 依赖 + + + + +```javascript +import md5 from 'md5' + +const mixinKeyEncTab = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 +] + +// 对 imgKey 和 subKey 进行字符顺序打乱编码 +const getMixinKey = (orig) => mixinKeyEncTab.map(n => orig[n]).join('').slice(0, 32) + +// 为请求参数进行 wbi 签名 +function encWbi(params, img_key, sub_key) { + const mixin_key = getMixinKey(img_key + sub_key), + curr_time = Math.round(Date.now() / 1000), + chr_filter = /[!'()*]/g + + Object.assign(params, { wts: curr_time }) // 添加 wts 字段 + // 按照 key 重排参数 + const query = Object + .keys(params) + .sort() + .map(key => { + // 过滤 value 中的 "!'()*" 字符 + const value = params[key].toString().replace(chr_filter, '') + return `${encodeURIComponent(key)}=${encodeURIComponent(value)}` + }) + .join('&') + + const wbi_sign = md5(query + mixin_key) // 计算 w_rid + + return query + '&w_rid=' + wbi_sign +} + +// 获取最新的 img_key 和 sub_key +async function getWbiKeys() { + const res = await fetch('https://api.bilibili.com/x/web-interface/nav', { + headers: { + // SESSDATA 字段 + Cookie: 'SESSDATA=xxxxxx', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', + Referer: 'https://www.bilibili.com/'//对于直接浏览器调用可能不适用 + } + }) + const { data: { wbi_img: { img_url, sub_url } } } = await res.json() + + return { + img_key: img_url.slice( + img_url.lastIndexOf('/') + 1, + img_url.lastIndexOf('.') + ), + sub_key: sub_url.slice( + sub_url.lastIndexOf('/') + 1, + sub_url.lastIndexOf('.') + ) + } +} + +async function main() { + const web_keys = await getWbiKeys() + const params = { foo: '114', bar: '514', baz: 1919810 }, + img_key = web_keys.img_key, + sub_key = web_keys.sub_key + const query = encWbi(params, img_key, sub_key) + console.log(query) +} + +main() +``` + + + + + +```typescript +import md5 from 'md5' + +const mixinKeyEncTab = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 +] + +// 对 imgKey 和 subKey 进行字符顺序打乱编码 +const getMixinKey = (orig: string) => + mixinKeyEncTab + .map((n) => orig[n]) + .join("") + .slice(0, 32); + +// 为请求参数进行 wbi 签名 +function encWbi( + params: { [key: string]: string | number | object }, + img_key: string, + sub_key: string +) { + const mixin_key = getMixinKey(img_key + sub_key), + curr_time = Math.round(Date.now() / 1000), + chr_filter = /[!'()*]/g; + + Object.assign(params, { wts: curr_time }); // 添加 wts 字段 + // 按照 key 重排参数 + const query = Object.keys(params) + .sort() + .map((key) => { + // 过滤 value 中的 "!'()*" 字符 + const value = params[key].toString().replace(chr_filter, ""); + return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + }) + .join("&"); + + const wbi_sign = md5(query + mixin_key); // 计算 w_rid + + return query + "&w_rid=" + wbi_sign; +} +// 获取最新的 img_key 和 sub_key +async function getWbiKeys(SESSDATA: string) { + const res = await fetch('https://api.bilibili.com/x/web-interface/nav', { + headers: { + // SESSDATA 字段 + Cookie: `SESSDATA=${SESSDATA}`, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', + Referer: 'https://www.bilibili.com/'//对于直接浏览器调用可能不适用 + } + }) + const { + data: { + wbi_img: { img_url, sub_url }, + }, + } = (await res.json()) as { + data: { + wbi_img: { img_url: string; sub_url: string }; + }; + }; + + return { + img_key: img_url.slice( + img_url.lastIndexOf('/') + 1, + img_url.lastIndexOf('.') + ), + sub_key: sub_url.slice( + sub_url.lastIndexOf('/') + 1, + sub_url.lastIndexOf('.') + ) + } +} + +async function main() { + const web_keys = await getWbiKeys("SESSDATA的值") + const params = { foo: '114', bar: '514', baz: 1919810 }, + img_key = web_keys.img_key, + sub_key = web_keys.sub_key + const query = encWbi(params, img_key, sub_key) + console.log(query) +} + +main() +``` + + + + +输出内容为进行 Wbi 签名的后参数的 url query 形式 + +``` +bar=514&baz=1919810&foo=114&wts=1684805578&w_rid=bb97e15f28edf445a0e4420d36f0157e +``` + +### Golang + +无第三方库 + +```go +package main + +import ( + "bytes" + "crypto/md5" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" + "time" +) + +func main() { + u, err := url.Parse("https://api.bilibili.com/x/space/wbi/acc/info?mid=1850091") + if err != nil { + panic(err) + } + fmt.Printf("orig: %s\n", u.String()) + err = Sign(u) + if err != nil { + panic(err) + } + fmt.Printf("signed: %s\n", u.String()) + + // 获取 wbi 时未修改 header + // 但实际使用签名后的 url 时发现风控较为严重 +} + +// Sign 为链接签名 +func Sign(u *url.URL) error { + return wbiKeys.Sign(u) +} + +// Update 无视过期时间更新 +func Update() error { + return wbiKeys.Update() +} + +func Get() (wk WbiKeys, err error) { + if err = wk.update(false); err != nil { + return WbiKeys{}, err + } + return wbiKeys, nil +} + +var wbiKeys WbiKeys + +type WbiKeys struct { + Img string + Sub string + Mixin string + lastUpdateTime time.Time +} + +// Sign 为链接签名 +func (wk *WbiKeys) Sign(u *url.URL) (err error) { + if err = wk.update(false); err != nil { + return err + } + + values := u.Query() + + values = removeUnwantedChars(values, '!', '\'', '(', ')', '*') // 必要性存疑? + + values.Set("wts", strconv.FormatInt(time.Now().Unix(), 10)) + + // [url.Values.Encode] 内会对参数排序, + // 且遍历 map 时本身就是无序的 + hash := md5.Sum([]byte(values.Encode() + wk.Mixin)) // Calculate w_rid + values.Set("w_rid", hex.EncodeToString(hash[:])) + u.RawQuery = values.Encode() + return nil +} + +// Update 无视过期时间更新 +func (wk *WbiKeys) Update() (err error) { + return wk.update(true) +} + +// update 按需更新 +func (wk *WbiKeys) update(purge bool) error { + if !purge && time.Since(wk.lastUpdateTime) < time.Hour { + return nil + } + + // 测试下来不用修改 header 也能过 + resp, err := http.Get("https://api.bilibili.com/x/web-interface/nav") + if err != nil { + return err + } + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + + nav := Nav{} + err = json.Unmarshal(body, &nav) + if err != nil { + return err + } + + if nav.Code != 0 && nav.Code != -101 { // -101 未登录时也会返回两个 key + return fmt.Errorf("unexpected code: %d, message: %s", nav.Code, nav.Message) + } + img := nav.Data.WbiImg.ImgUrl + sub := nav.Data.WbiImg.SubUrl + if img == "" || sub == "" { + return fmt.Errorf("empty image or sub url: %s", body) + } + + // https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png + imgParts := strings.Split(img, "/") + subParts := strings.Split(sub, "/") + + // 7cd084941338484aae1ad9425b84077c.png + imgPng := imgParts[len(imgParts)-1] + subPng := subParts[len(subParts)-1] + + // 7cd084941338484aae1ad9425b84077c + wbiKeys.Img = strings.TrimSuffix(imgPng, ".png") + wbiKeys.Sub = strings.TrimSuffix(subPng, ".png") + + wbiKeys.mixin() + wbiKeys.lastUpdateTime = time.Now() + return nil +} + +func (wk *WbiKeys) mixin() { + var mixin [32]byte + wbi := wk.Img + wk.Sub + for i := range mixin { // for i := 0; i < len(mixin); i++ { + mixin[i] = wbi[mixinKeyEncTab[i]] + } + wk.Mixin = string(mixin[:]) +} + +var mixinKeyEncTab = [...]int{ + 46, 47, 18, 2, 53, 8, 23, 32, + 15, 50, 10, 31, 58, 3, 45, 35, + 27, 43, 5, 49, 33, 9, 42, 19, + 29, 28, 14, 39, 12, 38, 41, 13, + 37, 48, 7, 16, 24, 55, 40, 61, + 26, 17, 0, 1, 60, 51, 30, 4, + 22, 25, 54, 21, 56, 59, 6, 63, + 57, 62, 11, 36, 20, 34, 44, 52, +} + +func removeUnwantedChars(v url.Values, chars ...byte) url.Values { + b := []byte(v.Encode()) + for _, c := range chars { + b = bytes.ReplaceAll(b, []byte{c}, nil) + } + s, err := url.ParseQuery(string(b)) + if err != nil { + panic(err) + } + return s +} + +type Nav struct { + Code int `json:"code"` + Message string `json:"message"` + Ttl int `json:"ttl"` + Data struct { + WbiImg struct { + ImgUrl string `json:"img_url"` + SubUrl string `json:"sub_url"` + } `json:"wbi_img"` + + // ...... + } `json:"data"` +} +``` + +### CSharp + +无需依赖外部库 + +```cs +using System.Security.Cryptography; +using System.Text; +using System.Text.Json.Nodes; + +class Program +{ + private static HttpClient _httpClient = new(); + + private static readonly int[] MixinKeyEncTab = + { + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, + 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, + 57, 62, 11, 36, 20, 34, 44, 52 + }; + + //对 imgKey 和 subKey 进行字符顺序打乱编码 + private static string GetMixinKey(string orig) + { + return MixinKeyEncTab.Aggregate("", (s, i) => s + orig[i])[..32]; + } + + private static Dictionary EncWbi(Dictionary parameters, string imgKey, + string subKey) + { + string mixinKey = GetMixinKey(imgKey + subKey); + string currTime = DateTimeOffset.Now.ToUnixTimeSeconds().ToString(); + //添加 wts 字段 + parameters["wts"] = currTime; + // 按照 key 重排参数 + parameters = parameters.OrderBy(p => p.Key).ToDictionary(p => p.Key, p => p.Value); + //过滤 value 中的 "!'()*" 字符 + parameters = parameters.ToDictionary( + kvp => kvp.Key, + kvp => new string(kvp.Value.Where(chr => !"!'()*".Contains(chr)).ToArray()) + ); + // 序列化参数 + string query = new FormUrlEncodedContent(parameters).ReadAsStringAsync().Result; + //计算 w_rid + using MD5 md5 = MD5.Create(); + byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query + mixinKey)); + string wbiSign = BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); + parameters["w_rid"] = wbiSign; + + return parameters; + } + + // 获取最新的 img_key 和 sub_key + private static async Task<(string, string)> GetWbiKeys() + { + var httpClient = new HttpClient(); + httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + httpClient.DefaultRequestHeaders.Referrer = new Uri("https://www.bilibili.com/"); + + HttpResponseMessage responseMessage = await httpClient.SendAsync(new HttpRequestMessage + { + Method = HttpMethod.Get, + RequestUri = new Uri("https://api.bilibili.com/x/web-interface/nav"), + }); + + JsonNode response = JsonNode.Parse(await responseMessage.Content.ReadAsStringAsync())!; + + string imgUrl = (string)response["data"]!["wbi_img"]!["img_url"]!; + imgUrl = imgUrl.Split("/")[^1].Split(".")[0]; + + string subUrl = (string)response["data"]!["wbi_img"]!["sub_url"]!; + subUrl = subUrl.Split("/")[^1].Split(".")[0]; + return (imgUrl, subUrl); + } + + + public static async Task Main() + { + var (imgKey, subKey) = await GetWbiKeys(); + + Dictionary signedParams = EncWbi( + parameters: new Dictionary + { + { "foo", "114" }, + { "bar", "514" }, + { "baz", "1919810" } + }, + imgKey: imgKey, + subKey: subKey + ); + + string query = await new FormUrlEncodedContent(signedParams).ReadAsStringAsync(); + + Console.WriteLine(query); + } +} +``` +输出内容为进行 Wbi 签名的后参数的 url query 形式 + +``` +bar=514&baz=1919810&foo=114&wts=1687541921&w_rid=26e82b1b9b3a11dbb1807a9228a40d3b +``` + +### Java + +```java +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.*; +import java.util.stream.Collectors; + +public class WbiTest { + private static final int[] mixinKeyEncTab = new int[]{ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 + }; + + private static final char[] hexDigits = "0123456789abcdef".toCharArray(); + + public static String md5(String input) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] messageDigest = md.digest(input.getBytes(StandardCharsets.UTF_8)); + char[] result = new char[messageDigest.length * 2]; + for (int i = 0; i < messageDigest.length; i++) { + result[i * 2] = hexDigits[(messageDigest[i] >> 4) & 0xF]; + result[i * 2 + 1] = hexDigits[messageDigest[i] & 0xF]; + } + return new String(result); + } catch (NoSuchAlgorithmException e) { + return null; + } + } + + public static String getMixinKey(String imgKey, String subKey) { + String s = imgKey + subKey; + StringBuilder key = new StringBuilder(); + for (int i = 0; i < 32; i++) + key.append(s.charAt(mixinKeyEncTab[i])); + return key.toString(); + } + + public static String encodeURIComponent(Object o) { + return URLEncoder.encode(o.toString(), StandardCharsets.UTF_8).replace("+", "%20"); + } + + public static void main(String[] args) { + String imgKey = "653657f524a547ac981ded72ea172057"; + String subKey = "6e4909c702f846728e64f6007736a338"; + String mixinKey = getMixinKey(imgKey, subKey); + System.out.println(mixinKey); // 72136226c6a73669787ee4fd02a74c27 + + // 用TreeMap自动排序 + TreeMap map = new TreeMap<>(); + map.put("foo", "one one four"); + map.put("bar", "五一四"); + map.put("baz", 1919810); + map.put("wts", System.currentTimeMillis() / 1000); + String param = map.entrySet().stream() + .map(it -> String.format("%s=%s", it.getKey(), encodeURIComponent(it.getValue()))) + .collect(Collectors.joining("&")); + String s = param + mixinKey; + + String wbiSign = md5(s); + System.out.println(wbiSign); + String finalParam = param + "&w_rid=" + wbiSign; + System.out.println(finalParam); + } +} +``` + +### Kotlin + +说明: 为了便于使用和缓存, 重新编写为实体类形式, 并拆分了多个文件. 使用官方的JSON序列化. (可以根据需要换成其他的) + +WbiParams.kt + +```kotlin +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonPrimitive + +private fun JsonElement?.get(): String { + check(this != null) { "No contents found" } + return this.jsonPrimitive.content.split('/').last().removeSuffix(".png") +} + +private val mixinKeyEncTab = intArrayOf( + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 +) + +@Serializable +data class WbiParams( + val imgKey: String, + val subKey: String, +) { + // 此处整合了切分参数(直接传入{img_url:string, sub_url:string}即可), 不需要可以删掉 + constructor(wbiImg: JsonObject) : this(wbiImg["img_url"].get(), wbiImg["sub_url"].get()) + + private val mixinKey: String + get() = (imgKey + subKey).let { s -> + buildString { + repeat(32) { + append(s[mixinKeyEncTab[it]]) + } + } + } + + // 创建对象(GET获取或者读缓存, 比如Redis)之后, 直接调用此函数处理 + fun enc(params: Map): String { + val sorted = params.filterValues { it != null }.toSortedMap() + return buildString { + append(sorted.toQueryString()) + val wts = System.currentTimeMillis() / 1000 + sorted["wts"] = wts + append("&wts=") + append(wts) + append("&w_rid=") + append((sorted.toQueryString() + mixinKey).toMD5()) + } + } +} +``` + +Extensions.kt + +```kotlin +import java.security.MessageDigest + +private val hexDigits = "0123456789abcdef".toCharArray() + +fun ByteArray.toHexString() = buildString(this.size shl 1) { + this@toHexString.forEach { byte -> + append(hexDigits[byte.toInt() ushr 4 and 15]) + append(hexDigits[byte.toInt() and 15]) + } +} + +fun String.toMD5(): String { + val md = MessageDigest.getInstance("MD5") + val digest = md.digest(this.toByteArray()) + return digest.toHexString() +} + +fun Map.toQueryString() = this.filterValues { it != null }.entries.joinToString("&") { (k, v) -> + "${k.encodeURIComponent()}=${v!!.encodeURIComponent()}" +} +``` + +获取和使用案例略 + +### PHP + +来自[SocialSisterYi/bilibili-API-collect#813](https://github.com/SocialSisterYi/bilibili-API-collect/issues/813) + +```php +getWbiKeys(); + return $this->encWbi($query, $wbi_keys['img_key'], $wbi_keys['sub_key']); + } + + private function getMixinKey($orig) { + $t = ''; + foreach ($this->mixinKeyEncTab as $n) $t .= $orig[$n]; + return substr($t, 0, 32); + } + + private function encWbi($params, $img_key, $sub_key) { + $mixin_key = $this->getMixinKey($img_key . $sub_key); + $curr_time = time(); + $chr_filter = "/[!'()*]/"; + + $query = []; + $params['wts'] = $curr_time; + + ksort($params); + + foreach ($params as $key => $value) { + $value = preg_replace($chr_filter, '', $value); + $query[] = urlencode($key) . '=' . urlencode($value); + } + + $query = implode('&', $query); + $wbi_sign = md5($query . $mixin_key); + + return $query . '&w_rid=' . $wbi_sign; + } + + private function getWbiKeys() { + $resp = @json_decode( + $this->curl_get( + 'https://api.bilibili.com/x/web-interface/nav', + null, + 'https://www.bilibili.com/' + ), true + ); + + if (!$resp) throw new Exception('请求失败'); + + $img_url = $resp['data']['wbi_img']['img_url']; + $sub_url = $resp['data']['wbi_img']['sub_url']; + + return [ + 'img_key' => substr(basename($img_url), 0, strpos(basename($img_url), '.')), + 'sub_key' => substr(basename($sub_url), 0, strpos(basename($sub_url), '.')) + ]; + } + + private function curl_get($url, $cookies = null, $referer = 'https://www.bilibili.com/', $ua = null, $proxy = null, $header = []) { + $ch = curl_init(); + $header[] = "Accept: */*"; + $header[] = "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7"; + $header[] = "Connection: close"; + $header[]="Referer:https://www.bilibili.com/"; + $header[] = "Cache-Control: max-age=0"; + curl_setopt_array($ch, [ + CURLOPT_HTTPGET => 1, + CURLOPT_CUSTOMREQUEST => 'GET', + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_HTTPHEADER => $header, + CURLOPT_ENCODING => '', + CURLOPT_URL => $url, + CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.39', + CURLOPT_TIMEOUT => 15 + ]); + + if ($cookies) curl_setopt( + $ch, + CURLOPT_COOKIE, + $cookies + ); + + if ($referer) curl_setopt_array($ch, [ + CURLOPT_AUTOREFERER => $referer, + CURLOPT_REFERER => $referer + ]); + + $content = curl_exec($ch); + curl_close($ch); + return $content; + } +} + +$c = new Bilibili(); +echo $c->reQuery(['foo' => '114', 'bar' => '514', 'baz' => 1919810]); +// bar=514&baz=1919810&foo=114&wts=1700384803&w_rid=4614cb98d60a43e50c3a3033fe3d116b +``` + +### Rust + +需要 serde、serde_json、reqwest、tokio 以及 md5 + +```rust +use reqwest::header::USER_AGENT; +use serde::Deserialize; +use std::time::{SystemTime, UNIX_EPOCH}; + +const MIXIN_KEY_ENC_TAB: [usize; 64] = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, 19, 29, + 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, + 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52, +]; + +#[derive(Deserialize)] +struct WbiImg { + img_url: String, + sub_url: String, +} + +#[derive(Deserialize)] +struct Data { + wbi_img: WbiImg, +} + +#[derive(Deserialize)] +struct ResWbi { + data: Data, +} + +// 对 imgKey 和 subKey 进行字符顺序打乱编码 +fn get_mixin_key(orig: &[u8]) -> String { + MIXIN_KEY_ENC_TAB + .iter() + .take(32) + .map(|&i| orig[i] as char) + .collect::() +} + +fn get_url_encoded(s: &str) -> String { + s.chars() + .filter_map(|c| match c.is_ascii_alphanumeric() || "-_.~".contains(c) { + true => Some(c.to_string()), + false => { + // 过滤 value 中的 "!'()*" 字符 + if "!'()*".contains(c) { + return None; + } + let encoded = c + .encode_utf8(&mut [0; 4]) + .bytes() + .fold("".to_string(), |acc, b| acc + &format!("%{:02X}", b)); + Some(encoded) + } + }) + .collect::() +} + +// 为请求参数进行 wbi 签名 +fn encode_wbi(params: Vec<(&str, String)>, (img_key, sub_key): (String, String)) -> String { + let cur_time = match SystemTime::now().duration_since(UNIX_EPOCH) { + Ok(t) => t.as_secs(), + Err(_) => panic!("SystemTime before UNIX EPOCH!"), + }; + _encode_wbi(params, (img_key, sub_key), cur_time) +} + +fn _encode_wbi( + mut params: Vec<(&str, String)>, + (img_key, sub_key): (String, String), + timestamp: u64, +) -> String { + let mixin_key = get_mixin_key((img_key + &sub_key).as_bytes()); + // 添加当前时间戳 + params.push(("wts", timestamp.to_string())); + // 重新排序 + params.sort_by(|a, b| a.0.cmp(b.0)); + // 拼接参数 + let query = params + .iter() + .map(|(k, v)| format!("{}={}", get_url_encoded(k), get_url_encoded(v))) + .collect::>() + .join("&"); + // 计算签名 + let web_sign = format!("{:?}", md5::compute(query.clone() + &mixin_key)); + // 返回最终的 query + query + &format!("&w_rid={}", web_sign) +} + +async fn get_wbi_keys() -> Result<(String, String), reqwest::Error> { + let client = reqwest::Client::new(); + let ResWbi { data:Data{wbi_img} } = client + .get("https://api.bilibili.com/x/web-interface/nav") + .header(USER_AGENT,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36") + .header("Referer","https://www.bilibili.com/") + // SESSDATA=xxxxx + .header("Cookie", "SESSDATA=xxxxx") + .send() + .await? + .json::() + .await?; + Ok(( + take_filename(wbi_img.img_url).unwrap(), + take_filename(wbi_img.sub_url).unwrap(), + )) +} + +fn take_filename(url: String) -> Option { + url.rsplit_once('/') + .and_then(|(_, s)| s.rsplit_once('.')) + .map(|(s, _)| s.to_string()) +} + +#[tokio::main] +async fn main() { + let keys = get_wbi_keys().await.unwrap(); + let params = vec![ + ("foo", String::from("114")), + ("bar", String::from("514")), + ("baz", String::from("1919810")), + ]; + let query = encode_wbi(params, keys); + println!("{}", query); +} + +// 取自文档描述的测试用例 +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_get_filename() { + assert_eq!( + take_filename( + "https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png".to_string() + ), + Some("7cd084941338484aae1ad9425b84077c".to_string()) + ); + } + + #[test] + fn test_get_mixin_key() { + let concat_key = + "7cd084941338484aae1ad9425b84077c".to_string() + "4932caff0ff746eab6f01bf08b70ac45"; + assert_eq!( + get_mixin_key(concat_key.as_bytes()), + "ea1db124af3c7062474693fa704f4ff8" + ); + } + + #[test] + fn test_encode_wbi() { + let params = vec![ + ("foo", String::from("114")), + ("bar", String::from("514")), + ("zab", String::from("1919810")), + ]; + assert_eq!( + _encode_wbi( + params, + ( + "7cd084941338484aae1ad9425b84077c".to_string(), + "4932caff0ff746eab6f01bf08b70ac45".to_string() + ), + 1702204169 + ), + "bar=514&foo=114&wts=1702204169&zab=1919810&w_rid=8f6f2b5b3d485fe1886cec6a0be8c5d4" + .to_string() + ) + } +} +``` + +### Swift + +需要 [Alamofire](https://github.com/Alamofire/Alamofire) 和 [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON) 库 + +```swift +import Alamofire +import CommonCrypto +import Foundation +import SwiftyJSON + +func biliWbiSign(param: String, completion: @escaping (String?) -> Void) { + func getMixinKey(orig: String) -> String { + return String(mixinKeyEncTab.map { orig[orig.index(orig.startIndex, offsetBy: $0)] }.prefix(32)) + } + + func encWbi(params: [String: Any], imgKey: String, subKey: String) -> [String: Any] { + var params = params + let mixinKey = getMixinKey(orig: imgKey + subKey) + let currTime = Int(Date().timeIntervalSince1970) + params["wts"] = currTime + let query = params.sorted { + $0.key < $1.key + }.map { (key, value) -> String in + let stringValue: String + if let doubleValue = value as? Double, doubleValue.truncatingRemainder(dividingBy: 1) == 0 { + stringValue = String(Int(doubleValue)) + } else { + stringValue = String(describing: value) + } + let filteredValue = stringValue.filter { !"!'()*".contains($0) } + return "\(key)=\(filteredValue)" + }.joined(separator: "&") + let wbiSign = calculateMD5(string: query + mixinKey) + params["w_rid"] = wbiSign + return params + } + + func getWbiKeys(completion: @escaping (Result<(imgKey: String, subKey: String), Error>) -> Void) { + let headers: HTTPHeaders = [ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", + "Referer": "https://www.bilibili.com/" + ] + + AF.request("https://api.bilibili.com/x/web-interface/nav", headers: headers).responseJSON { response in + switch response.result { + case .success(let value): + let json = JSON(value) + let imgURL = json["data"]["wbi_img"]["img_url"].string ?? "" + let subURL = json["data"]["wbi_img"]["sub_url"].string ?? "" + let imgKey = imgURL.components(separatedBy: "/").last?.components(separatedBy: ".").first ?? "" + let subKey = subURL.components(separatedBy: "/").last?.components(separatedBy: ".").first ?? "" + completion(.success((imgKey, subKey))) + case .failure(let error): + completion(.failure(error)) + } + } + } + + func calculateMD5(string: String) -> String { + let data = Data(string.utf8) + var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) + _ = data.withUnsafeBytes { + CC_MD5($0.baseAddress, CC_LONG(data.count), &digest) + } + return digest.map { String(format: "%02hhx", $0) }.joined() + } + + let mixinKeyEncTab = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 + ] + + getWbiKeys { result in + switch result { + case .success(let keys): + let spdParam = param.components(separatedBy: "&") + var spdDicParam = [String: String]() + for pair in spdParam { + let components = pair.components(separatedBy: "=") + if components.count == 2 { + spdDicParam[components[0]] = components[1] + } + } + + let signedParams = encWbi(params: spdDicParam, imgKey: keys.imgKey, subKey: keys.subKey) + let query = signedParams.map { "\($0.key)=\($0.value)" }.joined(separator: "&") + completion(query) + case .failure(let error): + print("Error getting keys: \(error)") + completion(nil) + } + } +} + +// 使用示例 +biliWbiSign(param: "bar=514&foo=114&zab=1919810") { + signedQuery in + if let signedQuery = signedQuery { + print("签名后的参数: \(signedQuery)") + } else { + print("签名失败") + } +} + +RunLoop.main.run()//程序类型为命令行程序时需要添加这行代码 + +``` + +```text +签名后的参数: bar=514&wts=1741082093&foo=114&zab=1919810&w_rid=04775bb3debbb45bab86a93a1c08d12a +``` + + +### CPlusPlus + +需要 c++ 23 标准库,[cpr](https://github.com/libcpr/cpr)、[cryptopp](https://github.com/weidai11/cryptopp)、[nlohmann/json](https://github.com/nlohmann/json) 等依赖 + +```c++ +#include // std::array +#include // std::locale +#include // std::println + +/// thrid party libraries +#include +#include +#include +#include + +/* + * 注意,假定不会发生错误! + */ +class Wbi { + constexpr static std::array MIXIN_KEY_ENC_TAB_ = { + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, + 27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, + 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, + 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52 + }; + + /* 获取 md5 hex(lower) */ + static std::string Get_md5_hex(const std::string &Input_str) { + CryptoPP::Weak1::MD5 hash; + std::string md5_hex; + + CryptoPP::StringSource ss(Input_str, true, + new CryptoPP::HashFilter(hash, + new CryptoPP::HexEncoder( + new CryptoPP::StringSink(md5_hex) + ) + ) + ); + + std::ranges::for_each(md5_hex, [](char &x) { x = std::tolower(x); }); + return md5_hex; + } + +public: + /* 将 json 转换为 url 编码字符串 */ + static std::string Json_to_url_encode_str(const nlohmann::json &Json) { + std::string encode_str; + for (const auto &[key, value]: Json.items()) { + encode_str.append(key).append("=").append(cpr::util::urlEncode(value.is_string() ? value.get() : to_string(value))).append("&"); + } + + // remove the last '&' + encode_str.resize(encode_str.size() - 1, '\0'); + return encode_str; + } + + /* 获取 wbi key */ + static std::pair Get_wbi_key() { + const auto url = cpr::Url {"https://api.bilibili.com/x/web-interface/nav"}; + const auto cookie = cpr::Cookies { + {"SESSDATA", "xxxxxxxxxxxx"}, + }; + const auto header = cpr::Header { + {"User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}, + {"Referer", "https://www.bilibili.com/"}, + }; + const auto response = cpr::Get(url, cookie, header); + + nlohmann::json json = nlohmann::json::parse(response.text); + + const std::string img_url = json["data"]["wbi_img"]["img_url"]; + const std::string sub_url = json["data"]["wbi_img"]["sub_url"]; + + std::string img_key = img_url.substr(img_url.find("wbi/") + 4, img_url.find(".png") - img_url.find("wbi/") - 4); + std::string sub_key = sub_url.substr(sub_url.find("wbi/") + 4, sub_url.find(".png") - sub_url.find("wbi/") - 4); + return {img_key, sub_key}; + } + + /* 获取 mixin key */ + static std::string Get_mixin_key(const std::string &Img_key, const std::string &Sub_key) { + std::string raw_wbi_key_str = Img_key + Sub_key; + std::string result; + + std::ranges::for_each(MIXIN_KEY_ENC_TAB_, [&result, &raw_wbi_key_str](const uint8_t x) { + result.push_back(raw_wbi_key_str.at(x)); + }); + + return result.substr(0, 32); + } + + /* 计算签名(w_rid) */ + static std::string Calc_sign(nlohmann::json &Params, const std::string &Mixin_key) { + Params["wts"] = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); + + const std::string encode_str = Json_to_url_encode_str(Params).append(Mixin_key); + return Get_md5_hex(encode_str); + } +}; + + +int main() { + nlohmann::json Params; + // qn=32&fnver=0&fnval=4048&fourk=1&avid=1755630705&cid=1574294582 + Params["qn"] = 32; + Params["fnver"] = 0; + Params["fnval"] = 4048; + Params["fourk"] = 1; + Params["avid"] = 1755630705; + Params["cid"] = 1574294582; + + auto [img_key, sub_key] = Wbi::Get_wbi_key(); + const auto mixin_key = Wbi::Get_mixin_key(img_key, sub_key); + const auto w_rid = Wbi::Calc_sign(Params, mixin_key); + std::println("{}", Wbi::Json_to_url_encode_str(Params) + "&w_rid=" + w_rid); +} +``` + +```text +avid=1755630705&cid=1574294582&fnval=4048&fnver=0&fourk=1&qn=32&wts=1717922933&w_rid=43571b838a1611fa121189083cfc1784 +``` + +### Haskell + +无第三方依赖: `base`, `Cabal-syntax`, `bytestring`, `containers`
+注: 此处使用自写的 URI 编码模块, 实际可用别的第三方库替代 + +`Main.hs`: +```hs +module Main (wbi, main) where + +import Data.ByteString.Char8 (pack) +import qualified Data.Map.Strict as Map +import Distribution.Utils.MD5 (md5, showMD5) +import URIEncoder (encodeURIComponent) +import Data.Time.Clock.System (getSystemTime, systemSeconds) + +mixinKeyEncTab :: [Int] +mixinKeyEncTab = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 + ] + +getMixinKey :: String -> String -> String +getMixinKey imgKey subKey = + let s = imgKey ++ subKey + in map (\i -> s !! (mixinKeyEncTab !! i)) [0..31] + +join :: [String] -> String -> String +join arr ins = concatMap (++ ins) (init arr) ++ last arr + +wbi :: String -> String -> Integer -> Map.Map String String -> String +wbi imgKey subKey wts params = + let orig = join (map (\(k, v) -> encodeURIComponent k ++ "=" ++ encodeURIComponent v) (Map.toList $ Map.insert "wts" (show wts) params)) "&" + in orig ++ "&w_rid=" ++ showMD5 (md5 $ pack $ orig ++ getMixinKey imgKey subKey) + +main :: IO () +main = do -- hard encode for test + let params1 = Map.fromList [("aid", "2")] + params2 = Map.fromList [("foo", "114") + ,("bar", "514") + ,("hello", "世 界") + ] + imgKey = "7cd084941338484aae1ad9425b84077c" + subKey = "4932caff0ff746eab6f01bf08b70ac45" + wts1 <- getSystemTime + putStrLn $ wbi imgKey subKey (toInteger $ systemSeconds wts1) params1 + wts2 <- getSystemTime + putStrLn $ wbi imgKey subKey (toInteger $ systemSeconds wts2) params2 +``` + +`URIEncoder.hs`: +```hs +module URIEncoder (encodeURIComponent) where + +import Data.Char (ord, chr, intToDigit) +import Data.Bits (shiftL, shiftR, (.&.)) +import Data.List (isInfixOf) + +-- ES 19.2.6.4 encodeURIComponent ( uriComponent ) +encodeURIComponent :: String -> String +encodeURIComponent input = case encode input "" of + Right result -> result + Left err -> error err + +-- ES 19.2.6.5 Encode ( string, extraUnescaped ) +encode :: String -> String -> Either String String +encode string extraUnescaped = loop 0 string + where + alwaysUnescaped = ['A'..'Z'] ++ ['a'..'z'] ++ ['0'..'9'] ++ "-.!~*'()" + unescapedSet = alwaysUnescaped ++ extraUnescaped + + loop k str + | k >= length str = Right [] + | otherwise = case codePointAt str k of + (Nothing, _) -> Left "Unpaired surrogate" + (Just (cp, _), newK) -> + if [str !! k] `isInfixOf` unescapedSet + then (str !! k :) <$> loop (k + 1) str + else do + bytes <- utf8Encode cp + let escaped = concatMap percentEncode bytes + rest <- loop newK str + Right (escaped ++ rest) + +codePointAt :: String -> Int -> (Maybe (Int, Int), Int) +codePointAt s k + | k >= length s = (Nothing, k) + | otherwise = + let c1 = ord (s !! k) + in if 0xD800 <= c1 && c1 <= 0xDBFF && k+1 < length s + then let c2 = ord (s !! (k+1)) + in if 0xDC00 <= c2 && c2 <= 0xDFFF + then ( Just (0x10000 + ((c1 - 0xD800) `shiftL` 10) + (c2 - 0xDC00), 2) + , k + 2 ) + else (Just (c1, 1), k + 1) + else (Just (c1, 1), k + 1) + +utf8Encode :: Int -> Either String [Int] +utf8Encode cp + | cp < 0 = Left "Invalid code point" + | cp <= 0x007F = Right [cp] + | cp <= 0x07FF = Right + [ 0xC0 + (cp `shiftR` 6) + , 0x80 + (cp .&. 0x3F) ] + | cp <= 0xFFFF = Right + [ 0xE0 + (cp `shiftR` 12) + , 0x80 + ((cp `shiftR` 6) .&. 0x3F) + , 0x80 + (cp .&. 0x3F) ] + | cp <= 0x10FFFF = Right + [ 0xF0 + (cp `shiftR` 18) + , 0x80 + ((cp `shiftR` 12) .&. 0x3F) + , 0x80 + ((cp `shiftR` 6) .&. 0x3F) + , 0x80 + (cp .&. 0x3F) ] + | otherwise = Left "Code point out of range" + +percentEncode :: Int -> String +percentEncode byte = '%' : toHex byte + where + toHex n = [hexDigit (n `div` 16), hexDigit (n `mod` 16)] + hexDigit x + | x < 10 = intToDigit x + | otherwise = chr (x - 10 + ord 'A') +``` + +输出: +```text +aid=2&wts=1744823207&w_rid=a3cd246bd42c066932752b24694eaf0d +bar=514&foo=114&hello=%E4%B8%96%20%E7%95%8C&wts=1744823207&w_rid=93acf59d85f74453e40cea00056c3daf +``` diff --git a/docs/misc/time_stamp.md b/docs/misc/time_stamp.md new file mode 100644 index 0000000..58e0709 --- /dev/null +++ b/docs/misc/time_stamp.md @@ -0,0 +1,127 @@ +# 获取当前时间戳 + +## 获取当前时间戳 + +> https://api.bilibili.com/x/report/click/now +> https://api.bilibili.com/x/click-interface/click/now + +*请求方式:GET* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ---- | +| now | num | 当前的时间戳 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/report/click/now' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "now": 1592666471 + } +} +``` + +
+ +## 获取适用于 RTC 的时间戳 + +> https://api.live.bilibili.com/xlive/open-interface/v1/rtc/getTimestamp + +*请求方法: GET* + + + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | - | - | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | - | - | +| timestamp | num | 服务器端UTC时间戳 | | +| microtime | num | 服务器端UTC时间戳 (毫秒) | | + +**示例:** + +```shell +curl 'https://api.live.bilibili.com/xlive/open-interface/v1/rtc/getTimestamp' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "timestamp": 1723899823, + "microtime": 1723899823683 + } +} +``` + +
+ +## 获取服务器端UTC时间 + +> https://interface.bilibili.com/serverdate.js + +*请求方式:GET* + +**js回复:** + +```js +window.serverdate = Date.UTC(YYYY, M, D, h, m, s); +``` + +**示例:** + +```shell +curl 'https://interface.bilibili.com/serverdate.js' +``` + +
+查看响应示例: + +```js +window.serverdate = Date.UTC(2021, 4, 16, 17, 31, 8); +``` + +
diff --git a/docs/newbie_exam/action.md b/docs/newbie_exam/action.md new file mode 100644 index 0000000..d75967a --- /dev/null +++ b/docs/newbie_exam/action.md @@ -0,0 +1,445 @@ +# 操作 + +## 提交答题 + +### 提交基础题 + +> https://api.bilibili.com/x/answer/v4/base/check + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------------------------ | -------------- | ------------------------------------------ | +| question_id | num | 题目id | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 | +| ans_hash | str | 选项hash | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
41014:答题过快或错误太多
41012:用户答题提交题目id不合法
41020:用户基础题已通过
41023:用户答题记录不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | ----------------------------------- | +| passed | bool | 选项是否正确 | true:选项正确
false:选项错误 | + +**示例:** + +提交题目id为`104`的题,选项hash为`cb4c8cc9424fc771f7c1598e74de498f` + +```shell +curl 'https://api.bilibili.com/x/answer/v4/base/check' \ +--data-urlencode 'question_id=104' \ +--data-urlencode 'ans_hash=cb4c8cc9424fc771f7c1598e74de498f' \ +--data-urlencode 'csrf=xxxx' \ +-b 'SESSDATA=xxxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "passed": true + } +} +``` + +
+ +### 提交附加题 + +> https://api.bilibili.com/x/answer/v4/base/check + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------------------------ | -------------- | ------------------------------------------ | +| question_id | num | 题目id | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 | +| ans_hash | str | 选项hash | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
41014:答题过快或错误太多
41012:用户答题提交题目id不合法
41023:用户答题记录不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | ----------------------------------- | +| passed | bool | 选项是否正确 | true:选项正确
false:选项错误 | + +**示例:** + +提交题目id为`104`的题,选项hash为`cb4c8cc9424fc771f7c1598e74de498f` + +```shell +curl 'https://api.bilibili.com/x/answer/v4/base/check' \ +--data-urlencode 'question_id=104' \ +--data-urlencode 'ans_hash=cb4c8cc9424fc771f7c1598e74de498f' \ +--data-urlencode 'csrf=xxxx' \ +-b 'SESSDATA=xxxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "passed": true + } +} +``` + +
+ +### 提交自选题 + +> https://api.bilibili.com/x/answer/v4/pro/check + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------------------------ | -------------- | ------------------------------------------ | +| question_id | num | 题目id | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 | +| ans_hash | str | 选项hash | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
41014:答题过快或错误太多
41012:用户答题提交题目id不合法
41023:用户答题记录不存在
41026:获取用户DB题目信息异常 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ---- | ---------- | +| passed | bool | true | 恒为`true` | + +**示例:** + +提交题目id为`2935`的题,选项hash为`ffd55cbe0624f466bee2ea3eb576a4d0` + +```shell +curl -G 'https://api.bilibili.com/x/answer/v4/pro/check' \ +--data-urlencode 'question_id=2935' \ +--data-urlencode 'ans_hash=ffd55cbe0624f466bee2ea3eb576a4d0' \ +--data-urlencode 'csrf=xxxx' \ +-b 'SESSDATA=xxxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "passed": true + } +} +``` + +
+ +## 获取验证码 + +> https://api.bilibili.com/x/answer/v4/captcha + +*请求方式:GET* + +认证方式:APP或Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
41010:用户答题非法访问
41014:答题过快或错误太多
41020:用户基础题已通过
41021:用户基础题未通过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ----------- | ------------- | +| type | str | 验证码类型? | geetest:极验 | +| gt | str | 极验id | | +| challenge | str | 极验key | | +| token | str | (?) | | +| url | str | (?) | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/answer/v4/captcha' \ +-b 'SESSDATA=xxxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "type": "geetest", + "gt": "abc55d1fb914cb110cfb4c232a4b4c35", + "challenge": "90a6e03e626e13ee186ddae0107c3ae2", + "token": "", + "url": "" + } +} +``` + +
+ +## 提交验证码 + +> https://api.bilibili.com/x/answer/v4/captcha/check + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**注:** + +旧版`edition=0`同时提交自选题分类以及验证码 + +新版`edition=2`仅仅提交验证码 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------------- | ---- | ---------------------- | -------------- | ---------------- | +| types | nums | 自选题分类(旧版) | 非必要 | 新版不需要此字段 | +| type | str | 验证码类型 | 非必要 | | +| bilibili_token | str | | 非必要 | | +| bilibili_code | str | | 非必要 | | +| geetest_challenge | str | 极验key | 非必要 | | +| geetest_seccode | str | 极验结果+\|jordan | 非必要 | | +| geetest_validate | str | 极验结果 | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-105:验证码错误
-400:请求错误
41010:用户答题非法访问
41014:答题过快或错误太多
41021:用户基础题未通过
41031:自选题未通过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/answer/v4/captcha/check' \ +--data-urlencode 'types=' \ +--data-urlencode 'type=geetest' \ +--data-urlencode 'bilibili_token=' \ +--data-urlencode 'bilibili_code=' \ +--data-urlencode 'geetest_challenge=3f809a7a9c51edca751fd26c032c182d' \ +--data-urlencode 'geetest_seccode=513ec576a275a3eb250829202d4dce46|jordan' \ +--data-urlencode 'geetest_validate=513ec576a275a3eb250829202d4dce46' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 提交自选题分类 + +> https://api.bilibili.com/x/answer/v4/pro/type/check + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------------------- | -------------- | ---- | +| types | nums | 自选题分类(新版) | 必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
41010:用户答题非法访问
41014:答题过快或错误太多
41021:用户基础题未通过
41031:自选题未通过
41052:用户题目类型不合法
41055:基础附加题未通过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +选择`游戏` `影视` `科教/知识` `动画/动漫`分类 + +```shell +curl 'https://api.bilibili.com/x/answer/v4/pro/type/check' \ +--data-urlencode 'types=1,2,3,4' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 提前交卷 + +> https://api.bilibili.com/x/answer/v4/submit + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +当当前得分>=60时,可请求本接口提前完成答题 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------------------- | -------------- | ---- | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
41014:答题过快或错误太多
41023:用户答题记录不存在
41031:自选题未通过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------------- | -------------------------------------------- | +| hid | num | 答题会话id | | +| mid | num | 答题用户mid | | +| score | num | 得分 | | +| status | num | 0 | | +| number | num | 0 | | +| result | str | succeed | | +| stage | str | result | | +| version | str | 版本 | 目前为`v4` | +| start_time | num | 本次答题开始时间 | 时间戳 | +| first_answer | num | 0 | | +| progress | str | | | +| text | str | | | +| url | str | | | +| in_reg_audit | bool | | | +| edition | num | 答题版本 | 0:旧版(40+10+50)
2:新版(40+30+30) | +| rewards | null | | | +| captcha | num | 1 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/answer/v4/submit' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "hid": 1623207905520705, + "mid": 293793435, + "score": 63, + "status": 3, + "number": 0, + "result": "succeed", + "stage": "result", + "version": "v4", + "start_time": 1636889218, + "first_answer": 0, + "progress": "", + "text": "", + "url": "", + "in_reg_audit": false, + "edition": 0, + "rewards": null, + "captcha": 1 + } +} +``` + +
diff --git a/docs/newbie_exam/fetch.md b/docs/newbie_exam/fetch.md new file mode 100644 index 0000000..f5fbd74 --- /dev/null +++ b/docs/newbie_exam/fetch.md @@ -0,0 +1,257 @@ +# 拉取题目 + +## 拉取基础题 + +> https://api.bilibili.com/x/answer/v4/base + +*请求方式:GET* + +认证方式:Cookie或APP + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
41014:答题过快或错误太多
41020:用户基础题已通过
41023:用户答题记录不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ---- | +| question | obj | 题目内容 | | + +`data`中的`question`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ------------------ | ------------------------------------------------------------ | +| id | num | 问题id | **问题id不代表题图,因为选项是打乱的** | +| number | num | 当前题号 | | +| q_height | num | 问题部分总高度 | | +| q_coord_y | num | 问题部分Y裁剪起始 | 当然是0 | +| image | str | 题图url | 题目文字+所有的选项文字排版成一张图,存储在bfs中 | +| from | str | 问题来源页面url | 如:“xx弹幕是否违规”所在的视频页 | +| options | array | 选项列表 | | +| type_id | num | 题目父类型id | 见[查询自选题分类](info.md#查询自选题分类)
**注:36为基础题** | +| type_name | str | 分院小电视提示文案 | 如:xx小电视 | +| type_image | str | 分院小电视图标url | | + +`question`中的`options`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----- | ---------------------- | +| 0 | obj | 选项A | | +| 1 | obj | 选项B | 选项至少2个 | +| 2 | obj | 选项C | 数组长度取决于选项个数 | +| 3 | obj | 选项D | | + +`question`中的`options`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ----------------- | ------------------------ | +| number | num | 选项序号 | 如:1为A 2为B | +| high | num | 选项部分总高度 | | +| coord_y | num | 选项部分Y裁剪起始 | | +| hash | str | 选项hash | 作为提交对应选项时应传参 | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/answer/v4/base' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "question": { + "id": 6511, + "number": 1, + "q_height": 38.4, + "q_coord_y": 0, + "image": "https://i0.hdslb.com/bfs/member/9d7f1f1f0b7478a621d1b998a5a98982.png", + "from": "", + "options": [ + { + "number": 1, + "high": 42, + "coord_y": 38.4, + "hash": "f7619d6c2040d44f39dc87a7aa34fb9e" + }, + { + "number": 2, + "high": 42, + "coord_y": 80.4, + "hash": "dce5140040f40ca4030783585684369d" + } + ], + "type_id": 36, + "type_name": "小电视校长", + "type_image": "https://i0.hdslb.com/bfs/face/7b67c0c0da64a6ab059ff49bb0d4b92988b91806.png" + } + } +} +``` +
+ +## 拉取附加题 + +> https://api.bilibili.com/x/answer/v4/extra + +*请求方式:GET* + +认证方式:Cookie或APP + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
41014:答题过快或错误太多
41021:用户基础题未通过
41023:用户答题记录不存在
41054:用户附加题已通过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +同[拉取基础题](#拉取基础题)的`data`对象 + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/answer/v4/extra' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "question": { + "id": 11492, + "number": 44, + "q_height": 76.8, + "q_coord_y": 0, + "image": "https://i0.hdslb.com/bfs/member/b6c846613bd0b44cd7c8af1d83e3f0c2.png", + "from": "https://www.bilibili.com/video/av14659093", + "options": [ + { + "number": 1, + "high": 42, + "coord_y": 76.8, + "hash": "ca15e6009047cf82358c50ab90fd8d9e" + }, + { + "number": 2, + "high": 42, + "coord_y": 118.8, + "hash": "60e86a1c736c68da3462f66377e4e8ca" + } + ], + "type_id": 36, + "type_name": "小电视校长", + "type_image": "https://i0.hdslb.com/bfs/face/7b67c0c0da64a6ab059ff49bb0d4b92988b91806.png" + } + } +} +``` +
+ +## 拉取自选题 + +> https://api.bilibili.com/x/answer/v4/pro + +*请求方式:GET* + +认证方式:Cookie或APP + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
41014:答题过快或错误太多
41021:用户基础题未通过
41023:用户答题记录不存在
41051:用户答题验证码未通过
41055:基础附加题未通过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +同[拉取基础题](#拉取基础题)的`data`对象 + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/answer/v4/pro' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "question": { + "id": 824, + "number": 54, + "q_height": 38.4, + "q_coord_y": 0, + "image": "https://i0.hdslb.com/bfs/member/417e02be5652f79d0312fa2fcee28869.png", + "from": "", + "options": [ + { + "number": 1, + "high": 42, + "coord_y": 38.4, + "hash": "c4574c23cf728c19abeab3e7525258d4" + }, + { + "number": 2, + "high": 42, + "coord_y": 80.4, + "hash": "ffd48760758fbb8a2c183d1d04f692f8" + }, + { + "number": 3, + "high": 42, + "coord_y": 122.4, + "hash": "898d414dff49fe20c4a1da1e148fadb2" + }, + { + "number": 4, + "high": 42, + "coord_y": 164.4, + "hash": "09018443f09d8ef4f6fec5e96e082270" + } + ], + "type_id": 1, + "type_name": "游戏小电视", + "type_image": "https://i0.hdslb.com/bfs/face/6590bee26086fed66ee7cc5bac26a32d2f733037.png" + } + } +} +``` + +
+ diff --git a/docs/newbie_exam/info.md b/docs/newbie_exam/info.md new file mode 100644 index 0000000..b200aa4 --- /dev/null +++ b/docs/newbie_exam/info.md @@ -0,0 +1,550 @@ +# 查询信息 + +## 查询答题状态 + +> https://api.bilibili.com/x/answer/v4/status + +*请求方式:GET* + +认证方式:Cookie或APP + +**json回复:** + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
41014:答题过快或错误太多 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------------ | ------------------------------------------------------------ | +| hid | num | 答题会话id | | +| mid | num | 答题用户mid | | +| score | num | 当前得分 | | +| status | num | 答题状态 | 0:未答题
2:答题中
3:已通过 | +| number | num | 当前题号 | | +| result | str | 是否通过答题 | failed:未通过
succeed:已通过 | +| stage | str | 当前答题阶段 | base:基础题
extra:附加题
pro_type:等待选择自选题类型
pro:自选题
complete:已完成 | +| version | str | 答题版本 | 当前为`v4` | +| start_time | num | 本次答题开始时间 | 时间戳 | +| first_answer | num | (?) | | +| progress | str | 当前答题进度 | 百分比
60分为100% | +| text | str | 提示文案 | | +| url | str | 答题页面url | | +| in_reg_audit | bool | 是否为第一次答题 | | +| edition | num | 答题版本 | 0:旧版(40+10+50)
2:新版(40+30+30) | +| rewards | null | (?) | | +| captcha | num | 是否已经提交验证码 | 1:已提交
仅新版提交验证码后存在 | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/answer/v4/status' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "hid": 1623207905520705, + "mid": 293793435, + "score": 2, + "status": 2, + "number": 2, + "result": "failed", + "stage": "base", + "version": "v4", + "start_time": 1623207905, + "first_answer": 2, + "progress": "3", + "text": "继续答题", + "url": "https://www.bilibili.com/h5/newbie/entry?navhide=1", + "in_reg_audit": false, + "edition": 0, + "rewards": null + } +} +``` + +
+ +## 查询自选题分类 + +> https://api.bilibili.com/x/answer/v4/pro/type + +*请求方式:GET* + +认证方式:Cookie或APP + +当字段`edition`的值不同时,该接口返回的数据也不同 + +**json回复:** + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | ---------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
41014:答题过快或错误太多
41021:用户基础题未通过
41031:自选题未通过
41055:基础附加题未通过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 父分类列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 父分类1 | | +| n | obj | 父分类(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ---------- | ---- | +| id | num | 父分类id | | +| name | str | 父分类名 | | +| fields | array | 子分类列表 | | + +`data`数组中的对象中的`fields`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 子分类1 | | +| n | obj | 子分类(n+1) | | +| …… | obj | …… | …… | + +`fields`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| id | num | 子分类id | | +| name | str | 子分类名 | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/answer/v4/pro/type' \ +-b 'SESSDATA=xxx' +``` + +旧版`edition=0`返回: + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "id": 1, + "name": "游戏", + "fields": [ + { + "id": 8, + "name": "动作射击" + }, + { + "id": 9, + "name": "冒险格斗" + }, + { + "id": 12, + "name": "策略模拟 " + }, + { + "id": 13, + "name": "角色扮演 " + }, + { + "id": 14, + "name": "音乐体育 " + } + ] + }, + { + "id": 2, + "name": "影视", + "fields": [ + { + "id": 15, + "name": "纪录片 " + }, + { + "id": 16, + "name": "电影 " + }, + { + "id": 17, + "name": "电视剧 " + } + ] + }, + { + "id": 3, + "name": "科技", + "fields": [ + { + "id": 18, + "name": "军事 " + }, + { + "id": 19, + "name": "地理 " + }, + { + "id": 20, + "name": "历史 " + }, + { + "id": 21, + "name": "文学 " + }, + { + "id": 22, + "name": "数学 " + }, + { + "id": 23, + "name": "物理 " + }, + { + "id": 24, + "name": "化学 " + }, + { + "id": 25, + "name": "生物 " + }, + { + "id": 26, + "name": "数码科技 " + } + ] + }, + { + "id": 4, + "name": "动画", + "fields": [ + { + "id": 27, + "name": "动画声优 " + }, + { + "id": 28, + "name": "动漫内容 " + } + ] + }, + { + "id": 5, + "name": "艺术", + "fields": [ + { + "id": 29, + "name": "ACG音乐 " + }, + { + "id": 30, + "name": "三次元音乐 " + }, + { + "id": 31, + "name": "绘画 " + } + ] + }, + { + "id": 6, + "name": "流行前线", + "fields": [ + { + "id": 32, + "name": "娱乐 " + }, + { + "id": 33, + "name": "时尚 " + }, + { + "id": 34, + "name": "运动 " + } + ] + }, + { + "id": 7, + "name": "鬼畜", + "fields": [ + { + "id": 35, + "name": "鬼畜 " + } + ] + } + ] +} +``` + +
+ +新版`edition=2`返回: + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "id": 1, + "name": "游戏", + "fields": [ + { + "id": 1, + "name": "游戏" + } + ] + }, + { + "id": 2, + "name": "影视", + "fields": [ + { + "id": 2, + "name": "影视" + } + ] + }, + { + "id": 3, + "name": "科教/知识", + "fields": [ + { + "id": 3, + "name": "科教/知识" + } + ] + }, + { + "id": 4, + "name": "动画/动漫", + "fields": [ + { + "id": 4, + "name": "动画/动漫" + } + ] + }, + { + "id": 5, + "name": "音乐/舞蹈", + "fields": [ + { + "id": 5, + "name": "音乐/舞蹈" + } + ] + }, + { + "id": 32, + "name": "明星/娱乐", + "fields": [ + { + "id": 32, + "name": "明星/娱乐" + } + ] + }, + { + "id": 35, + "name": "鬼畜", + "fields": [ + { + "id": 35, + "name": "鬼畜" + } + ] + }, + { + "id": 42, + "name": "时尚/健身", + "fields": [ + { + "id": 42, + "name": "时尚/健身" + } + ] + } + ] +} +``` + +
+ + +## 查询答题结果 + +> https://api.bilibili.com/x/answer/v4/result + +*请求方式:GET* + +认证方式:无 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | ---- | +| hid | num | 答题会话id | 必要 | | + +**json回复:** + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
41023:用户答题记录不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ------------------------ | ----------------------------------- | +| hid | num | 答题会话id | | +| mid | num | 答题用户mid | | +| member | num | | | +| score | num | 得分 | | +| level | num | 用户等级 | | +| first_pass | num | | | +| uname | str | 用户昵称 | | +| face | str | 用户头像url | | +| status | str | 答题结果 | failed:未通过
succeed:已通过 | +| question_types | array | 已选择的自选题列表 | | +| power | array | 自选题分类得分情况 | | +| start_time | num | 开始答题时间 | 时间戳 | +| share | obj | | | +| can_show_rank_btn | bool | | | +| is_same_user | bool | | | +| view_more | str | | | +| video_info | obj | | | +| main_tids | array | | | +| sub_tids | array | | | +| power_result | null | | | +| score_rate | num | 分数超过平均用户的百分比 | | +| permission | obj | | | +| rewards | null | | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/answer/v4/result' \ +--data-urlencode 'hid=1615088061307609' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "hid": 1615088061307609, + "mid": 1386643599, + "member": 0, + "score": 70, + "level": 0, + "first_pass": 0, + "uname": "眉凭铱ひ前非", + "face": "http://i0.hdslb.com/bfs/face/cd83d4cdbfb521455c168eaa181915b40cb664d1.jpg", + "status": "succeed", + "question_types": [ + { + "id": 12, + "name": "策略模拟 " + }, + { + "id": 13, + "name": "角色扮演 " + }, + { + "id": 14, + "name": "音乐体育 " + }, + { + "id": 8, + "name": "动作射击" + }, + { + "id": 9, + "name": "冒险格斗" + } + ], + "power": [ + { + "score": 0, + "name": "动画" + }, + { + "score": 0, + "name": "艺术" + }, + { + "score": 5, + "name": "游戏" + }, + { + "score": 0, + "name": "科技" + }, + { + "score": 0, + "name": "影视" + }, + { + "score": 0, + "name": "鬼畜" + } + ], + "start_time": 1615088061, + "share": { + "content": "", + "short_content": "" + }, + "can_show_rank_btn": false, + "is_same_user": true, + "view_more": "", + "video_info": { + "url": "", + "name": "", + "img": "", + "watch_num": "", + "up_num": "" + }, + "main_tids": [], + "sub_tids": [], + "power_result": null, + "score_rate": 84, + "permission": { + "reply": true, + "color_dm": true + } + } +} +``` + +
\ No newline at end of file diff --git a/docs/note/action.md b/docs/note/action.md new file mode 100644 index 0000000..15c40e9 --- /dev/null +++ b/docs/note/action.md @@ -0,0 +1,131 @@ +# 笔记操作 + +## 保存视频笔记 + +> https://api.bilibili.com/x/note/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| oid | num | 目标id | 必要 | | +| oid_type | num | 目标id类型 | 必要 | `0`视频(oid=avid) | +| note_id | num | 笔记id | 非必要 | 创建时无需此项 | +| title | str | 笔记标题 | 必要 | | +| summary | str | 笔记预览文本 | 必要 | | +| content | str | 笔记正文json序列 | 必要 | 格式见[附表](readme.md#附表-笔记正文序列格式) | +| tags | str | 笔记跳转标签列表 | 非必要 | | +| cls | num | 1 | 非必要 | 作用尚不明确 | +| from | str | 提交类型 | 非必要 | `auto`自动提交
`save`手动提交
`close`关闭时自动提交 | +| cont_len | num | 正文字数 | 非必要 | | +| platform | str | 平台 | 非必要 | 可为`web` | +| publish | num | 是否公开笔记 | 非必要 | `0`不公开
`1`公开 | +| auto_comment | num | 是否添加到评论区 | 非必要 | `0`不添加
`1`添加 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | `0`成功
`-101`账号未登录
`-111`csrf校验失败
`-400`请求错误
`79508`该稿件已存在笔记,无法新增
`79513`笔记所属视频不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------ | ---- | +| note_id | num | 笔记id | | + +**示例:** + +保存内容为加粗的STRONG的笔记`3809605586518023`于`av970322090` + +```shell +curl 'https://api.bilibili.com/x/note/add' \ +--data-urlencode 'oid=970322090' \ +--data-urlencode 'oid_type=0' \ +--data-urlencode 'note_id=3809605586518023' +--data-urlencode 'title=周刊哔哩哔哩排行榜#543' +--data-urlencode 'summary=STRONG' +--data-urlencode 'content=[{"attributes":{"bold":true},"insert":"STRONG"},{"insert":"\n"}]' +--data-urlencode 'tags=' +--data-urlencode 'cls=1' +--data-urlencode 'from=save' +--data-urlencode 'csrf=xxx' +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "note_id": 3809605586518023 + } +} +``` + +
+ +## 删除视频笔记 + +> https://api.bilibili.com/x/note/del + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | ---- | +| oid | num | 目标稿件avid | 必要 | | +| note_id | num | 笔记id | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +删除稿件`av457253380`下的笔记`4075968478576647` + +```shell +curl 'https://api.bilibili.com/x/note/del' \ +--data-urlencode 'oid=457253380' \ +--data-urlencode 'note_id=4075968478576647' \ +--data-urlencode 'csrf=xxx' +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/note/info.md b/docs/note/info.md new file mode 100644 index 0000000..5793ee3 --- /dev/null +++ b/docs/note/info.md @@ -0,0 +1,309 @@ +# 笔记详细信息 + +## 查询该稿件是否禁止笔记 + +> https://api.bilibili.com/x/note/is_forbid + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| aid | num | 稿件avid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | `0`成功
`-400`请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ------------ | ----------------------------------- | +| forbid_note_entrance | bool | 是否禁止笔记 | `true`禁止笔记
`false`允许笔记 | + +**示例:** + +查询视频稿件`av338677252`是否禁止笔记 + +```shell +curl 'https://api.bilibili.com/x/note/info' \ +--data-urlencode 'aid=338677252' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "forbid_note_entrance": false + } +} +``` + +
+ +## 查询私有笔记内容 + +> https://api.bilibili.com/x/note/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ---------- | ----------- | -------- | +| oid | num | 目标id | 必要 | | +| oid_type | num | 目标id类型 | 必要 | `0`视频(oid=avid) | +| note_id | num | 笔记id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | `0`成功
`-400`请求错误
`-101`账号未登录
`79502`笔记详情未找到
`79503`笔记正文未找到 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ----- | ---------------- | -------------- | +| arc | obj | 对应视频稿件信息 | | +| audit_status | num | 0 | 作用暂不明确 | +| cid_count | num | 视频分P数 | | +| content | str | 笔记正文json序列 | 格式见[附表](readme.md#附表-笔记正文序列格式) | +| forbid_note_entrance | bool | | | +| pub_reason | str | 公开笔记相关原因 | | +| pub_status | num | 公开笔记状态 | `1`未公开
`2`已公开
`4`退回 | +| pub_version | num | | | +| summary | str | 笔记预览文本 | | +| tags | array | 笔记跳转标签列表 | | +| title | str | 笔记标题 | | + +`data`中的`arc`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ----------------- | +| oid | num | 目标id | | +| oid_type | num | 目标id类型 | `0`视频(oid=avid) | +| title | str | 视频标题 | | +| pic | str | 视频封面 | | +| status | num | | | +| desc | str | 视频简介 | | + +`data`中的`tags`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---------------- | +| 0 | obj | 标签1 | | +| n | obj | 标签(n+1) | 按照笔记中位置排列 | +| …… | obj | …… | …… | + +`tags`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------------- | ------------ | +| cid | num | 视频cid | | +| status | num | 0 | 作用尚不明确 | +| index | num | 在稿件中的分P索引 | | +| seconds | num | 视频进度 | | +| pos | num | 笔记中位置 | | + +**示例:** + +查询视频`av338677252`中笔记`24508729145690112`的内容 + +```shell +curl 'https://api.bilibili.com/x/note/info' \ +--data-urlencode 'oid=338677252' \ +--data-urlencode 'oid_type=0' \ +--data-urlencode 'note_id=24508729145690112' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "title": "2022哔哩哔哩拜年纪", + "summary": " ...", + "content": "[{"insert":"\n"}]", + "cid_count": 0, + "audit_status": 0, + "pub_status": 0, + "pub_reason": "", + "pub_version": 0, + "forbid_note_entrance": false, + "tags": [], + "arc": { + "oid": 338677252, + "title": "2022哔哩哔哩拜年纪", + "status": 0, + "oid_type": 0, + "pic": "http://i2.hdslb.com/bfs/archive/1e683a5363f35aa0a65419dbf145177099e38f90.jpg", + "desc": "" + } + } +} +``` + +
+ +## 查询公开笔记内容 + +> https://api.bilibili.com/x/note/publish/info + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------ | ------ | -------- | +| cvid | num | 笔记对应的专栏cvid | 必要 | 非笔记id | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------------- | +| code | num | 返回值 | `0`成功
`-400`请求错误
`79514`公开笔记详情未找到 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ----- | ---------------------- | --------------------------------------------- | +| cvid | num | 公开笔记对应的专栏cvid | | +| note_id | num | 笔记id | | +| title | str | 笔记标题 | | +| summary | str | 笔记预览 | | +| content | str | 笔记正文json序列 | 格式见[附表](readme.md#附表-笔记正文序列格式) | +| cid_count | num | (?) | | +| pub_status | num | 公开状态 | | +| tags | array | | | +| arc | obj | 稿件信息 | | +| author | obj | 作者信息 | | +| forbid_note_entrance | bool | | | + +`data`中的`arc`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ----------------- | +| oid | num | 目标id | | +| oid_type | num | 目标id类型 | `0`视频(oid=avid) | +| title | str | 标题 | | +| status | num | (?) | | +| pic | str | 封面url | | +| desc | str | 简介 | | + +`data`中的`author`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ---- | +| mid | num | 用户mid | | +| name | str | 昵称 | | +| face | str | 头像url | | +| level | num | 用户等级 | | +| vip_info | obj | 会员信息 | | +| pendant | obj | 头像框信息 | | + +**示例:** + +查看公开笔记`cv15160286`的信息 + +```shell +curl 'https://api.bilibili.com/x/note/publish/info' \ +--data-urlencode 'cvid=15160286' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "cvid": 15160286, + "note_id": 24114044116402190, + "title": "2022哔哩哔哩拜年纪", + "summary": "我决定再重新做一个系列,叫做影评系列 那么我们这一次是影系列的第n期 我也不知道是多少期,到时候回去统计一下 今天的影评是写,2022年哔哩哔哩拜年纪 【...", + "content": "[{"insert":"我决定再重新做一个系列,叫做影评系列\n那么我们这一次是影系列的第n期\n我也不知道是多少期,到时候回去统计一下\n今天的影评是写,2022年哔哩哔哩拜年纪\n【以及往年的拜年祭,会提一下】\n看完哔哩哔哩拜年纪之后,我的触动真的很大,那今天就先写哔哩哔哩拜年纪吧。\n字数同样有点长,希望看过2022哔哩哔哩拜年纪的人可以认真看完吧!也可以说说你的想法啊!\n\n首先先说一说它的时间,因为每次都在除夕夜播放而出现要和家人看春晚,又要去抢红包之类的,所以每次都看不了直播。这一点就很糟心了。\n所以说这次同往年一样,我也是看的回放。\n一\n一开始是2233跳舞,因为我不太关注这些二次元,所以说就不详细评述了\n但是这个和去年的不问天,应该是一个系列的。都是2233在一起出镜,然后配的是一首歌,但是我觉得这首歌确实没有不问天那么惊艳我了。\n【我觉得很大的可能是今年的作曲没有泡泡老师,去年,前年的泡泡老师作的曲都真的非常的好听,而且今年的拜年纪的预告片上也有一个三首他写的歌的串烧。真的很不错。】\n二\n然后就说一下\n今年以及往年的动画\n这个主体动画真的每年做的都很不错。就是既有意义,又有故事,还有深度,同时还介绍了风俗人情和乡土民俗,真的都是非常非常好的动画,并且动画制作也很精良。\n真的想知道这些动画的主创人员都是谁,可是每次都没有标注。\n【既然谈到动画,就来说一下去年预告的一个动画叫盒中之海。其实我本来是去年看拜年纪的时候是没有看到这个预告片的\n但是今年的评论区底下,几乎每一个评论区中都在催盒中之海,于是我便去看了一下。我发现这个真的变得更有意义和深度了。\n他讲的是一个游戏,还有海神等等\n虽然感觉到它的预告片很乱,但是总觉得其中有什么联系?就是很悬疑又很惊恐但一看就很有深度的动画了!\n所以我也期待着了!】\n今年讲的是哔哩楼的故事,我觉得他的那个创意真的很好,就是自助餐厅的创意\n可以让每一个人都尝到厨师的快乐,\n但又不是真正去做厨师,如果真的能有这样一家店就好了!\n然后拜年纪传统的视频串烧节目就不说了吧。\n三\n再后来就是新春小记,俗称的是拜年曲\n去年的拜年曲是吉祥话,我觉得两个都很好听,但是说去年的都是我认识并且比较喜欢的歌手,可以今年的歌手一个都不认识了[em]e107[/em]\n但是近两年的但连许都用了说话开篇,然后其中高潮的时候都是顶针的方式来演唱,可能这也是一个习俗吧,但真的还比较好听!\n四\n一些没有触动的作品就不说了\n所以接下来是灯火!\n我没有想到今年过年能再一次听到\n《灯火里的中国》!\n因为今年春晚没有周深还有些遗憾呢!\n但虽然这首歌不是周深唱的,但也温暖人心!\n这个应该与去年的《我的祖国》是一个系列的!\n五\n四迹老师的动画一如既往的有意思\n【但就是少了灵魂快板……】\n去年和前年的快板真的深入人心了!\n所以我还是最喜欢去年的\n“这个好诶!”\n六\n邪教老师好几年没有写燃曲了哈哈哈哈哈哈\n但这个风灵玉秀和拜年祭一起做的动画挺好的\n虽然我不知道风灵玉秀是什么动画\n但武侠版的这个动画的动作做的很细致\n又不是很快,看的舒服又清晰\n配上音乐……\n【我不在想再说还不错了哈哈哈哈哈哈哈】\n七\n终于到我最喜欢的一首人演唱的歌曲\n【哈哈哈哈哈为了不与卡农冲突】\n《快乐手帐》\n我要把纳兰寻风的词吹爆!!!!!!!!!\n“跟着我,哒哒哒哒,搭个舞台\n跟着我,哒哒哒哒,大步迈开”\n“生活就是平平淡淡,偶尔磕磕绊绊\n让脑筋多转转,往好处看看!”\n真的好温暖!积极向上!向前看!\n这个初音未来的声音也没有不适感了!\n这个真的好棒!\n八\n然后是沃玛!\n沃玛的脑回路真的很独特!\n他的这个系列是视频真的很独特又新奇!\n这个不好描述……自己去看吧!\n沃玛的声音也好听!哈哈哈哈哈哈哈\n九\n魔术跳过吧\n上面是这次拜年级我最喜欢的一个节目,第大调卡农。\n这个真的很温暖,还有小提琴和钢琴的两个二重奏,就是非常的震撼人心,很感动。\n再配上他的画面,从一个小孩儿到最后的老人,感觉这一生都可以用这首歌来概括。所以说真的很感动又很温暖,\n而且这个节目的副标题是:\n致敬一生中每一个重要时刻\n所以更感动了!\n十\n拜年祭燃曲《弈》\n意境真的很扩大,不看注释完全看不懂词啊\n但去还比较好听,但感觉没有去年的《万象霜天》惊艳\n那我在b站上面看到一个视频,把这八年的八个燃曲在一起放,然后《弈》真的听起来很明显,很明显。\n高潮很高,很好听!\n所以苍穹是sv还是v啊?\n十一\n这次cilicili的《另一个我》没有做好\n可能是因为去年是《时光盲盒》真的太棒了!!!!\n“一遍遍,我回来了!……辛苦了!”\n反而今年的歌没有触动\n这是我唯一一个跳过了大约一分钟的节目\n十二\n后面几个节目都具有讽刺意义\n但那个三年都放的那个讽刺动画系列\n我属实看不懂哈哈哈哈哈哈哈哈\n梗太多了哈哈哈哈哈哈真有些看不懂\n十三\n终于到《除夕》了\n音阙诗听第二次上拜年祭!\n第一次安安和镜子演唱《与梦盛开》\n第二次是音阙诗听团队创作《除夕》\n同样是音阙诗听味啊!\n这次的词写的还不错!\n所以,节日系列开更!\n【但A-SOUL究竟是什么组合,根本没听说过啊】\n十四\n最后一个节目。\n流年如歌,是前年的最后一个节目,但是我那时候还不习惯听V曲,所以说几乎完全就跳过了,那个节目没有听。\n但是这个纳兰寻风作的词,以及这个西门振作的曲,真的配合起来好好听。\n还是要再吹一下纳兰寻风老师的词真的好棒,然后同样和上一个说的一样,温暖,感动,就有积极向上的那种乐观。\n“你是冰雪消融唤醒万物第一缕花香……”\n“湖面上小船儿晃晃岁月长……”\n【但是纳兰寻风老师究竟是做什么的?\n好像经常调教也能看到他哈哈哈哈哈哈\n没有特别关注】\n然后我每次听一听的是泠鸢翻唱的版本,这一次是让刷牙老师来唱的,男声和女声唱有有别样的风味\n这真的就像《难忘今宵》一样,要待在每一场拜年纪嘛?\n新年的那一天晚上都随着流年如歌,进入梦乡!\n人生如梦,流年似水,岁月如歌,\n春夏秋冬,年复一年\n唯有自己不变\n去下一个十年找到属于自己的答案吧!\n哔哩哔哩乾杯!\n\n\n十五【正好是十五哈哈哈哈哈】\n《五十》这个节目是很晚的时候看的\n有些悬疑,甚至有些恐怖,但引起了许多思考\n写太多了,就不详说了……\n【再次期待艾导的《盒中之海》!】\n\n哔哩哔哩( ゜ -゜)つロ 乾杯~​\n——今日发布于Q,转到哔哩哔哩!\n"}]", + "cid_count": 0, + "pub_status": 2, + "tags": [], + "arc": { + "oid": 338677252, + "title": "2022哔哩哔哩拜年纪", + "status": 0, + "oid_type": 0, + "pic": "http://i2.hdslb.com/bfs/archive/1e683a5363f35aa0a65419dbf145177099e38f90.jpg", + "desc": "" + }, + "author": { + "mid": 523870870, + "name": "夜达星xxxxxxx", + "face": "http://i1.hdslb.com/bfs/face/2cdfd277e63b6bb1f400ed616b5caf0a04196f28.jpg", + "level": 3, + "vip_info": { + "type": 0, + "status": 0, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + } + }, + "forbid_note_entrance": false + } +} +``` + +
diff --git a/docs/note/list.md b/docs/note/list.md new file mode 100644 index 0000000..d0d3851 --- /dev/null +++ b/docs/note/list.md @@ -0,0 +1,653 @@ +# 笔记列表 + +## 查询稿件私有笔记 + +> https://api.bilibili.com/x/note/list/archive + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +该接口只能查询私有笔记,无法查询公开笔记 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ----------------- | +| oid | num | 目标id | 必要 | | +| oid_type | num | 目标id类型 | 必要 | `0`视频(oid=avid) | +| csrf | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | -------------------------------------------------- | +| noteIds | array | 笔记列表 | 无笔记则无此项
可能后续会允许视频添加多个笔记 | + +`data`中的`noteIds`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ---- | +| 0 | str | 笔记id | | + +**示例:** + +查询视频`av970322090`的笔记id + +```shell +curl 'https://api.bilibili.com/x/note/list/archive' \ +--data-urlencode 'oid=970322090' \ +--data-urlencode 'oid_type=0' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "noteIds":[ + "3809605586518023" + ] + } +} +``` + +
+ +## 查询用户私有笔记 + +> https://api.bilibili.com/x/note/list + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------ | ----------- | ------------------------------------------------------- | +| ps | num | 每页项数 | 必要 | | +| pn | num | 页码 | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ------------ | +| list | array | 明细列表 | | +| page | obj | 页面信息 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---------------- | +| 0 | obj | 笔记1 | | +| n | obj | 笔记(n+1) | 按照创建顺序排列 | +| …… | obj | …… | …… | + +`list`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ------------ | ------------------------- | +| title | str | 笔记标题 | | +| summary | str | 笔记预览文本 | | +| mtime | str | 提交时间 | YYYY-MM-DD hh:mm | +| arc | obj | 视频信息 | | +| note_id | num | 笔记id | | +| audit_status | num | 0 | 作用尚不明确 | +| web_url | str | 笔记h5页url | | +| note_id_str | str | 笔记id str | | +| message | str | 更新信息 | "更新于 YYYY-MM-DD hh:mm" | +| forbid_note_entrance | bool | (?) | | +| likes | num | 点赞数 | | +| has_like | bool | 是否点赞 | | + +`list`中的`arc`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | ---------------------- | +| oid | num | 目标id | | +| bvid | str | 稿件bvid | | +| pic | str | 稿件封面图片url | | +| desc | str | 视频简介 | | +| status | num | 0 | | +| oid_type | num | 目标id类型 | `0`视频(oid=avid) | +| aid | num | 稿件avid | | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | -------------------- | +| total | num | 笔记总数 | | +| size | num | 每页项数 | | +| num | num | 页码 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/note/list' \ +--data-urlencode 'ps=10' \ +--data-urlencode 'pn=1' +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "title": "2022哔哩哔哩拜年纪", + "summary": " ...", + "mtime": "2022-02-16 16:46", + "arc": { + "oid": 338677252, + "bvid": "BV1fR4y1T7aV", + "pic": "http://i2.hdslb.com/bfs/archive/1e683a5363f35aa0a65419dbf145177099e38f90.jpg", + "desc": "愿大家看的开心!新年快乐,虎年大吉,欧气十足,万事顺意!ヾ(≧▽≦*)o", + "status": 0, + "oid_type": 0, + "aid": 338677252 + }, + "note_id": 24508729145690110, + "audit_status": 0, + "web_url": "https://www.bilibili.com/h5/note-app?oid=338677252&oid_type=0&pagefrom=fullpage&navhide=1&-Bct.statusbar.mode=0", + "note_id_str": "24508729145690112", + "message": "更新于 2022-02-16 16:46", + "forbid_note_entrance": false, + "likes": 0, + "has_like": false + } + ], + "page": { + "total": 1, + "size": 10, + "num": 1 + } + } +} +``` + +
+ +## 查询稿件公开笔记 + +> https://api.bilibili.com/x/note/publish/list/archive + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------- | ------ | ----------------- | +| oid | num | 目标id | 必要 | | +| oid_type | num | 目标id类型 | 必要 | `0`视频(oid=avid) | +| ps | num | 每页项数 | 必要 | | +| pn | num | 页码 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ----- | ------------ | ---- | +| list | array | 公开笔记列表 | | +| page | obj | 页面信息 | | +| show_public_note | bool | | | +| message | str | | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---------------- | +| 0 | obj | 笔记1 | | +| n | obj | 笔记(n+1) | 按照创建顺序排列 | +| …… | obj | …… | …… | + +`list`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------------------- | ------------------------- | +| cvid | num | 公开笔记对应的专栏cvid | | +| title | str | 笔记标题 | | +| summary | str | 笔记预览 | | +| pubtime | str | 发布时间 | YYYY-MM-DD hh:mm | +| web_url | str | 笔记h5页url | | +| message | str | 更新信息 | "更新于 YYYY-MM-DD hh:mm" | +| author | obj | 作者信息 | | +| likes | num | 点赞数 | | +| has_like | bool | 是否点赞 | 需要登录(Cookie) | + +`list`中的对象中的`author`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ---- | +| mid | num | 用户mid | | +| name | str | 昵称 | | +| face | str | 头像url | | +| level | num | 用户等级 | | +| vip_info | obj | 会员信息 | | +| pendant | obj | 头像框信息 | | + +**示例:** + +查询视频`av338677252`的公开笔记列表 + +```shell +curl 'https://api.bilibili.com/x/note/publish/list/archive' \ +--data-urlencode 'oid=338677252' \ +--data-urlencode 'oid_type=0' \ +--data-urlencode 'ps=10' \ +--data-urlencode 'pn=1' +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "cvid": 15160286, + "title": "2022哔哩哔哩拜年纪", + "summary": "我决定再重新做一个系列,叫做影评系列 那么我们这一次是影系列的第n期 我也不知道是多少期,到时候回去统计一下 今天的影评是写,2022年哔哩哔哩拜年纪 【...", + "pubtime": "2022-02-07 23:44", + "web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15160286&pagefrom=ugcvideo", + "message": "更新于 2022-02-07 23:44", + "author": { + "mid": 523870870, + "name": "夜达星xxxxxxx", + "face": "http://i1.hdslb.com/bfs/face/2cdfd277e63b6bb1f400ed616b5caf0a04196f28.jpg", + "level": 3, + "vip_info": { + "type": 0, + "status": 0, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + } + }, + "likes": 7, + "has_like": false + }, + { + "cvid": 15086217, + "title": "2022哔哩哔哩拜年纪", + "summary": "节目表,多图预警,方便各位时间戳跳转…… 01:20 New Day [图片] 06:32 重返哔哩楼1 [图片] 11:06 嗨,...", + "pubtime": "2022-02-01 20:07", + "web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15086217&pagefrom=ugcvideo", + "message": "更新于 2022-02-01 20:07", + "author": { + "mid": 3810985, + "name": "Remレム22", + "face": "http://i1.hdslb.com/bfs/face/4cce970eb1b9fb8b322d49133a11caa630178728.jpg", + "level": 6, + "vip_info": { + "type": 2, + "status": 1, + "due_date": 1694880000000, + "vip_pay_type": 1, + "theme_type": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + } + }, + "likes": 22, + "has_like": false + }, + { + "cvid": 15080841, + "title": "2022哔哩哔哩拜年纪", + "summary": "2022哔哩哔哩拜年纪从厨师的角度开始了故事,而厨师象征着每个人,每一道菜都是每个厨师用汗水耕耘出来的,并且在主线故事中穿插这不同的小故事,代表了近几年生...", + "pubtime": "2022-02-01 10:10", + "web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15080841&pagefrom=ugcvideo", + "message": "更新于 2022-02-01 10:10", + "author": { + "mid": 482114483, + "name": "沐曦mornal", + "face": "http://i2.hdslb.com/bfs/face/cf1ef9c2045e317dfe6dbe8659b6f7a69c7572d5.jpg", + "level": 4, + "vip_info": { + "type": 1, + "status": 1, + "due_date": 1646755200000, + "vip_pay_type": 1, + "theme_type": 0, + "label": { + "path": "", + "text": "大会员", + "label_theme": "vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "", + "role": 1, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + } + }, + "likes": 7, + "has_like": false + }, + { + "cvid": 15080246, + "title": "2022哔哩哔哩拜年纪", + "summary": "niumniumnium~~~33是我的菜了! 这次的跨年纪呢确实不同于以往。我发现现代技术确实给类似的活动提供了平台与支持,但是不可否认的是bilibi...", + "pubtime": "2022-02-01 08:59", + "web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15080246&pagefrom=ugcvideo", + "message": "更新于 2022-02-01 08:59", + "author": { + "mid": 1049943541, + "name": "吃瓜的DINGBALL", + "face": "http://i1.hdslb.com/bfs/face/93e7a3826586338e15e5703f9d49bb3bbd0adfa5.jpg", + "level": 2, + "vip_info": { + "type": 1, + "status": 0, + "due_date": 1641744000000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + } + }, + "likes": 10, + "has_like": false + }, + { + "cvid": 15077197, + "title": "2022哔哩哔哩拜年纪", + "summary": "23333333333333333333333333333333333333333333333333333333333333333333333333333...", + "pubtime": "2022-01-31 22:53", + "web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15077197&pagefrom=ugcvideo", + "message": "更新于 2022-01-31 22:53", + "author": { + "mid": 433136442, + "name": "KiBi_3", + "face": "http://i0.hdslb.com/bfs/face/4c11d1419316f14b8b0f5c146d0cd34627955244.jpg", + "level": 2, + "vip_info": { + "type": 0, + "status": 0, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "" + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + } + }, + "likes": 2, + "has_like": false + }, + { + "cvid": 15077019, + "title": "2022哔哩哔哩拜年纪", + "summary": "2022加油吖!~~~~~~~~~~~~~~~~~~~~~2022加油吖!2022加油吖!2022加油吖!2022加油吖!2022加油吖!2022加油吖!...", + "pubtime": "2022-01-31 22:36", + "web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15077019&pagefrom=ugcvideo", + "message": "更新于 2022-01-31 22:36", + "author": { + "mid": 11283554, + "name": "zhen_____", + "face": "http://i0.hdslb.com/bfs/baselabs/381fcc3865daf85bd6a1ddc4b6dfbd11ba937dc9.jpg", + "level": 6, + "vip_info": { + "type": 2, + "status": 1, + "due_date": 1730736000000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 5459, + "name": "星座系列:巨蟹座", + "image": "http://i2.hdslb.com/bfs/garb/item/a6e5b6b36a4a6c00ca8881ecc837c2aa9ebcb53d.png", + "expire": 0, + "image_enhance": "http://i2.hdslb.com/bfs/garb/item/a6e5b6b36a4a6c00ca8881ecc837c2aa9ebcb53d.png", + "image_enhance_frame": "" + } + }, + "likes": 5, + "has_like": false + } + ], + "page": { + "total": 6, + "size": 10, + "num": 1 + }, + "show_public_note": true, + "message": "" + } +} +``` + +
+ +## 查询用户公开笔记 + +> https://api.bilibili.com/x/note/publish/list/user + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| ps | num | 每页项数 | 必要 | | +| pn | num | 页码 | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------- | ---- | +| list | array | 明细列表 | | +| page | obj | 页面信息 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---------------- | +| 0 | obj | 笔记1 | | +| n | obj | 笔记(n+1) | 按照创建顺序排列 | +| …… | obj | …… | …… | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---- | +| total | num | 笔记总数 | | +| size | num | 每页项数 | | +| num | num | 页码 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/note/publish/list/user' \ +--data-urlencode 'ps=10' \ +--data-urlencode 'pn=1' +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "page": { + "total": 0, + "size": 10, + "num": 1 + } + } +} +``` + +
diff --git a/docs/note/readme.md b/docs/note/readme.md new file mode 100644 index 0000000..dbf0223 --- /dev/null +++ b/docs/note/readme.md @@ -0,0 +1,159 @@ +# 视频笔记 + +2020-11-16 B站推出了测试版的功能——"视频笔记",与视频稿件关联,为富文本模式,可供记录观看视频时的感悟以及视频中的重要内容,目前只可在web端操作 + +笔记分为私有笔记和公开笔记,一个稿件只能添加一篇私有笔记,但可以公开多篇笔记 + +公开笔记与【专栏】性质相同,使用`cvid`寻址相应的公开笔记 + +--- + +**继续查看:** + +- [笔记列表](list.md) +- [笔记详细信息](info.md) +- [笔记操作](action.md) + +--- + +## 附表-笔记正文序列格式 + +根数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 第1个元素 | | +| n | obj | 第(n+1)个元素 | | +| …… | obj | …… | …… | + +根数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ------------------- | +| attributes | obj | 元素属性 | 无属性无此项 | +| insert | str | 元素内容 | 为跳转/图片时无此项 | +| insert | obj | 元素跳转信息 | 非跳转/图片时无此项 | + +对象中的`attributes`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------- | ------------------------------ | +| bold | bool | 是否加粗 | | +| strike | bool | 是否删除线 | | +| underline | bool | 是否下划线 | | +| background | str | 背景颜色 | | +| color | str | 文字颜色 | | +| list | str | 列表属性 | ordered有序列表/bullet无序列表 | +| size | str | 文字字号 | | + +对象中的`insert`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | ------ | +| tag | obj | 跳转标签 | 二选一 | +| imageUpload | obj | 笔记图片 | 二选一 | + +`insert`中的`tag`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------------- | ------------ | +| cid | num | 视频cid | | +| status | num | 0 | 作用尚不明确 | +| index | num | 在稿件中的分P索引 | | +| seconds | num | 视频进度 | | +| cidCount | num | 稿件总分P数 | | +| key | str | 标签创建时间戳 | | +| title | str | output | 作用尚不明确 | + +`insert`中的`imageUpload`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ---------- | ------------ | +| url | str | 图片链接 | | +| status | str | done | 作用尚不明确 | +| width | num | 图片宽度-2 | | + +示例: + +以下笔记正文序列包含`字号`、`加粗`、`高亮`、`普通文本`格式 + +```json +[ + { + "attributes": { + "size": "24px", + "bold": true + }, + "insert": "关掉" + }, + { + "attributes": { + "size": "24px" + }, + "insert": "," + }, + { + "attributes": { + "size": "24px", + "bold": true + }, + "insert": "关掉" + }, + { + "insert": "," + }, + { + "attributes": { + "background": "#fff359" + }, + "insert": "一定要" + }, + { + "attributes": { + "background": "#fff359", + "bold": true + }, + "insert": "关掉" + }, + { + "insert": "\n再不关掉那些" + }, + { + "attributes": { + "bold": true + }, + "insert": "网络游戏" + }, + { + "insert": ",小孩哪有" + }, + { + "attributes": { + "bold": true + }, + "insert": "美好的未来" + }, + { + "insert": ",哪有" + }, + { + "attributes": { + "bold": true + }, + "insert": "美好的前程" + }, + { + "insert": ",祖国哪有" + }, + { + "attributes": { + "bold": true + }, + "insert": "栋梁之才" + }, + { + "insert": "\n" + } +] +``` + diff --git a/docs/opus/detail.md b/docs/opus/detail.md new file mode 100644 index 0000000..6af3933 --- /dev/null +++ b/docs/opus/detail.md @@ -0,0 +1,2739 @@ +# 图文详细 + +## 获取图文详细信息 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/opus/detail + +*请求方法: GET* + +鉴权方式: `Cookie` 中 `buvid3` 存在且不为空 + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------------- | ------ | -------- | ------ | ---- | +| id | string | 动态 id | 必要 | 数字 | +| timezone_offset | number | 时区偏移 | 非必要 | 如 `-480` | +| features | string | 功能 | 非必要(部分专栏要求htmlNewStyle) | `onlyfansVote,onlyfansAssetsV2,decorationCard,htmlNewStyle,ugcDelete,editable,opusPrivateVisible,tribeeEdit,avatarAutoTheme,avatarTypeOpus` | + +**JSON 回复(旧版专栏未携带htmlNewStyle feature时)** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功
-352: 风控校验失败 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| fallback | object | 回退的内容信息 | | + +`fallback` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| id | number | 回退的内容ID | | +| type | number | 回退的内容类型 | 已知2为专栏 | + +**JSON 回复(正常返回情况):** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功
-352: 风控校验失败 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| item | object | 项 | 套了个娃 | + +`data.item` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| basic | object | 基本信息 | | +| id_str | string | 动态 id | | +| modules | object[] | 模块信息 | 参见 [功能模块](features.md) | +| type | number | 类型 | | +| fallback | number | 回滚信息 | 请检查请求参数 `features` | + +`data.item.basic` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| comment_id_str | string | 评论对象 id 字符串 | | +| comment_type | number | 评论区类型 | | +| like_icon | object | 点赞图标? | | +| rid_str | string | 关联 id 字符串 | | +| title | string | 图文标题 | | +| uid | number | 作者 mid (UID) | | + +`data.item.basic.like_icon` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| action_url | string | | | +| end_url | string | | | +| id | number | | | +| start_url | string | | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/opus/detail' \ +--url-query 'id=933099353259638816' \ +--url-query 'features=onlyfansVote,onlyfansAssetsV2,decorationCard,htmlNewStyle,ugcDelete,editable,opusPrivateVisible,tribeeEdit,avatarAutoTheme,avatarTypeOpus' \ +-b 'buvid3=awa' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "item": { + "basic": { + "comment_id_str": "34646640", + "comment_type": 12, + "like_icon": { + "action_url": "", + "end_url": "", + "id": 0, + "start_url": "" + }, + "rid_str": "34646640", + "title": "【服务搭建】零开销在线运行代码!glot.io服务私有化部署 - 哔哩哔哩", + "uid": 293793435 + }, + "id_str": "933099353259638816", + "modules": [ + { + "module_title": { + "text": "【服务搭建】零开销在线运行代码!glot.io服务私有化部署" + }, + "module_type": "MODULE_TYPE_TITLE" + }, + { + "module_author": { + "avatar": { + "container_size": { + "height": 1.375, + "width": 1.375 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + }, + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "var(--bg1)", + "border": "2px solid var(--bg1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "layers": [ + { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.787, + "width": 0.787 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.6875, + "axis_y": 0.6875, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1.375, + "width": 1.375 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": {} + } + }, + "resource": { + "res_animation": { + "webp_src": { + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp" + }, + "src_type": 1 + } + }, + "res_type": 4 + }, + "visible": true + } + ] + }, + { + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.7560000000000001, + "axis_y": 0.7726666666666667, + "coordinate_pos": 1 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 0.41666666666666663, + "width": 0.41666666666666663 + } + }, + "layer_config": { + "tags": { + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "background-color": "var(--bg1)", + "border": "2px solid var(--bg1)", + "borderRadius": "50%", + "boxSizing": "border-box" + } + } + }, + "ICON_LAYER": {} + } + }, + "resource": { + "res_image": { + "image_src": { + "local": 1, + "src_type": 2 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + } + ], + "mid": "293793435" + }, + "decorate_card": { + "big_card_url": "https://i0.hdslb.com/bfs/garb/item/c0cf2235089ed314d92f30efa855c9b5611fa2cd.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/garb/item/c0cf2235089ed314d92f30efa855c9b5611fa2cd.png", + "fan": { + "color": "#07b6d5", + "color_format": { + "colors": [ + "#07b6d5FF", + "#07b6d5FF" + ], + "end_point": "0,100", + "gradients": [ + 0, + 100 + ], + "start_point": "0,0" + }, + "is_fan": 1, + "name": "初音未来周年纪念", + "num_desc": "005638", + "number": 5638 + }, + "id": 2513, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/c0cf2235089ed314d92f30efa855c9b5611fa2cd.png", + "item_id": 2513, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=2513&isdiy=0&part=card&from=post&f_source=garb&vmid=293793435&native.theme=1&navhide=1", + "name": "初音未来粉丝专属" + }, + "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/293793435", + "label": "", + "mid": 293793435, + "more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "name": "社会易姐QwQ", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "https://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png", + "n_pid": 2511, + "name": "初音未来13周年", + "pid": 2511 + }, + "pub_location_text": "", + "pub_time": "编辑于 2024年05月19日 12:18", + "pub_ts": 1716092523, + "views_text": "", + "vip": { + "avatar_icon": { + "icon_resource": {}, + "icon_type": 1 + }, + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": 1770825600000, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png", + "label_theme": "annual_vip", + "path": "http://i0.hdslb.com/bfs/vip/label_annual.png", + "text": "年度大会员", + "text_color": "#FFFFFF", + "use_img_label": true + }, + "nickname_color": "#FB7299", + "role": 3, + "status": 1, + "theme_type": 0, + "tv_due_date": 1640793600, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 2, + "vip_pay_type": 0 + } + }, + "module_type": "MODULE_TYPE_AUTHOR" + }, + { + "module_content": { + "paragraphs": [ + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "感谢 " + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "color": "#ff968d", + "font_size": 17, + "style": {}, + "words": "来笙云 Laysense.cn" + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": " 提供算力" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "作为一个全栈工程师,开发、维护和测试一些软件系统时,必然会涉及到多种编程语言,有时还需要测试一些编程语言的安全特性,常常需要敏捷地了解它们并立即上手。在朋友的推荐和社区分享下,我了解到一个名叫 glot.io 的开源项目。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "它支持40多种编程语言,无论是热门的 Python、Go、Rust、Kotlin,还是冷门的 COBOL、Erlang、Haskell 只需在网页上选择对应的语言,即可开始编写。为使用者提供了一个 Sandbox(沙箱)和 Playground(游乐场)环境,既不需要配置它们的 Runtime(运行环境)和 IDE(集成开发环境),也不需要担心误操作对系统产生破坏性,还不会占用任何用户端的系统资源,实现真正的零开销运行代码。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": 1120, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/article/06582181a80a3f367ae0486aec34759f293793435.png", + "width": 1776 + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "在代码编写界面,可以创建多个源码文件,完成后点击Run就能执行它并得到输出,类似我们平时编程那样,将输出打在终端上。整个过程不会生成任何可执行文件,所以它的应用场景不是在线编译,而是在线运行代码片段。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/bb4e8fc35a33ba0b771478f4bc5aaca7293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "glot.io 这个网站提供了公开的代码片段执行和分享功能,任何人在注册后都可以分享自己的代码片段,并使用它的 API。但有时为了安全性和访问速度考量,需要自行搭建这个开源平台,这篇文章将介绍 Glot 的私有化部署。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 24, + "style": { + "bold": true + }, + "words": "Glot是什么" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "根据项目 README 上的一句介绍:" + } + } + ] + } + }, + { + "align": 0, + "para_type": 4, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "an open source pastebin with runnable snippets and API." + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "这是一个开源的共享剪切板和代码片段执行器,并提供 API。它使用 MIT 协议开源,代码托管于 github 之上。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "https://github.com/glotcode/glot" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "Glot 并不是一个独立的工程,它分为多个组件,这样设计底层架构有利于业务解耦,降低后期维护和升级开发的难度,它们之间的逻辑关系如下:" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/808dd5fa58016f392b15a36a0df27a29293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "由下面这些组件构成,也全部使用 MIT 协议开源,均托管于 Github:" + } + } + ] + } + }, + { + "align": 0, + "list": { + "items": [ + { + "level": 1, + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "color": "#ff968d", + "font_size": 17, + "style": {}, + "words": "glot-www" + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": ":提供 B/S 前端应用" + } + } + ], + "order": 1 + }, + { + "level": 1, + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "color": "#ff968d", + "font_size": 17, + "style": {}, + "words": "docker-run" + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": ":提供执行 glot-images 镜像能力的微服务" + } + } + ], + "order": 2 + }, + { + "level": 1, + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "color": "#ff968d", + "font_size": 17, + "style": {}, + "words": "glot-images" + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": ":按需构建的执行器镜像" + } + } + ], + "order": 3 + }, + { + "level": 1, + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "color": "#ff968d", + "font_size": 17, + "style": {}, + "words": "code-runner" + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": ":容器内的执行调度器" + } + } + ], + "order": 4 + } + ], + "style": 2 + }, + "para_type": 5 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "其中 glot-www 是一个 B/S 架构应用的服务器,用来提供一个面向用户的 WebUI(网站),它包含前后端的组件,后端使用 Haskell 语言编写。实现代码片段保存和共享、用户登录、以及共享剪切板所的功能,由 pgSQL 提供存储支持。与此同时,它与实际的代码执行业务互相解耦,使用 RestAPI 进行 RPC 调用,可做到前端服务器和后端代码执行服务器逻辑上隔离。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "Glot 的代码执行沙箱基于 Docker,在容器中编译和运行,不但与宿主机隔离,且容器之间也相互隔离,还能对运行资源进行限制,防止宿主机被不信任的代码破坏。当然,各编程语言的执行容器构成不尽相同,这样才能在节约存储空间的同时最大保持运行效率,比如 C 和 C++ 共用了glot/clang这个镜像,C" + } + }, + { + "rich": { + "jump_url": "//search.bilibili.com/all?keyword=%20%E5%92%8C%20F", + "orig_text": "# 和 F#", + "text": "# 和 F#", + "type": "RICH_TEXT_NODE_TYPE_TOPIC" + }, + "type": "TEXT_NODE_TYPE_RICH" + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": " 的镜像都有 mono 这个依赖……这些 Docker 镜像由 glot-images 项目进行生成,它并非使用传统的 Dockerfile,而是使用了 nix 进行构建,支持多种主流编程语言。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/8627bd181a4c0ef3f5985f2d80ed49a5293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "宿主机与沙箱的通讯,实际上就构建并将代码传入容器。这个传递方式不使用文件,而使用 stdi(基本输入)的方式传递 json,例如这样的形式:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "echo '{\n "language": "python",\n "files": [\n {\n "name": "main.py",\n "content": "print(42)"\n }\n ]\n}' | docker run --rm -i --read-only --tmpfs /tmp:rw,noexec,nosuid,size=65536k --tmpfs /home/glot:rw,exec,nosuid,uid=1000,gid=1000,size=131072k -u glot -w /home/glot glot/javascript:latest", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "执行完成之后以 stdo(基本输出)的方式输出 json,stdout、stderr 流、以及错误信息在序列化后拆分成各个字段:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "{\n "stdout": "42\\n",\n "stderr": "",\n "error": ""\n}", + "lang": "language-json" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "一般编程语言分为编译型、解释型和虚拟机型,其中解释型直接执行文本文件中的内容,编译型则需将其编译为可执行文件再执行,而虚拟机型在编译完之后,还需用 vm 执行字节码。glot-images 将各类编程语言生成的工作流统一归做 json 格式的文本流,这样标准化更利于开发和扩展,这种能力归功于 code-runner 这个组件。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "code-runner 作为 glot 的一个特殊组件,并不运行在宿主机中,它是一个 cli 工具,运行在执行容器中,使用 Rust 语言开发。在 glot-images 的每个镜像中,均以相同方式工作在底层。它支持多种编程语言从编译到运行的生命周期管理,同时接管运行时的 stdio(基本输入输出)" + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": { + "bold": true + }, + "words": "," + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "例如 C 语言,首先会将输入的文本反序列化,写入到文件,接着调用 clang 编译这个文件,最后再运行编译器生成的可执行文件,执行过程中也会将预定义的 stdi 发送给程序,程序的 stdo/stderr 流被它记录下来随后序列化为 json 文本返回。实际上在使用docker run这类命令执行 glot-images 镜像时,就是调用了之中的 code-runner,而不是调用了clang这种编译器。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "使用 stdi 传递 json 给它,就会调用相应的编译执行流程:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "echo '{\n "language": "python",\n "files": [\n {\n "name": "main.py",\n "content": "print(42)"\n }\n ]\n}' | code-runner", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "与 glot-images 的镜像相同,执行后也会使用 stdo 以 json 格式返回:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "{\n "stdout": "42\\n",\n "stderr": "",\n "error": ""\n}", + "lang": "language-json" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "要将这些跑在 Docker 上的执行器服务化、RPC(远程过程调用)化,必须有一个 daemon 在底层进行调度,一边开放 HTTP 服务,另一边通过 unix socket 操纵 DockerEngine,执行容器操作。提供这个能力的就是 docker-run 组件,它也使用 Rust 语言开发。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "例如这样访问 docker-run,和上文中的例子相同:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "curl 'http://localhost:8088/run' \\\n -H 'X-Access-Token: some-secret-token' \\\n -H 'Content-type: application/json' \\\n -d '{\n "image": "glot/python:latest",\n "payload": {\n "language": "python",\n "files": [\n {\n "name": "main.py",\n "content": "print(42)"\n }\n ]\n }\n}'", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "有了这些组件,就可以自行私有化搭建一个 glot 服务,因为各组件的标准化和解耦,可以随意进行裁剪和二次开发。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "接下来将介绍 docker-run 和 glot-images 这两个基本组件的搭建(不搭建前端 WebUI 和共享服务)。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 24, + "style": { + "bold": true + }, + "words": "Glot服务搭建" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "首先应该准备一台性能不错的服务器,要求 CPU 核心数和 RAM 不能太低。以下步骤使用 Debian 12 系统进行操作,整个过程需要有稳定的网络环境,并且已更新包管理器的索引。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 24, + "style": { + "bold": true + }, + "words": "安装Docker和运行环境" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "首先需要安装前置依赖,其中 git 和 gcc 安装 Rust 时需要,runsc 是 gVisor 运行环境" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "sudo apt-get install ca-certificates curl git gcc runsc", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "安装 Docker,这里参考了官方文档的安装方式,先进行软件源的添加,再安装各组件" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "https://docs.docker.com/engine/install/debian/" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "sudo install -m 0755 -d /etc/apt/keyrings\nsudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc\nsudo chmod a+r /etc/apt/keyrings/docker.asc\necho \\\n "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \\\n $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \\\n sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\nsudo apt update\n\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "gVisor 作为谷歌开源的一款轻量容器运行时沙箱,可作为 Docker 的运行时中间件,隔离容器内的 syscall,提升容器安全性,具体可以参考官网 https://gvisor.dev" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "对于 Docker,需要配置 gVisor 为 DockerEngine 插件,创建配置文件后写入以下内容:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "vi /etc/docker/daemon.json", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "{\n "default-runtime": "runsc",\n "runtimes": {\n "runsc": {\n "path": "/usr/bin/runsc"\n }\n }\n}", + "lang": "language-json" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "在修改配置文件后,应重启 DockerEngine" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "systemctl restart docker", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "可以使用以下命令检查检查 Docker 和 gVisor 安装状态" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "docker system info\ndocker system info | grep 'runsc'", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/f2a9046662ce5bdc93a5bbe7393dd2b4293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/888de2ab19dede7ec6880f407269519c293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "接者我们创建名为glot的用户,作为 daemon 的运行角色" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "useradd -m glot\nusermod -aG docker glot", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "安装 Rust,这里参考官方文档,使用脚本进行安装" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "https://rustup.rs/" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/2d7118b743cd2f10cd289e59969eeb01293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "安装完毕后,可以使用以下命令检查 Rust 的安装" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "cargo -V", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/0e40ab6cc26aa95bcaf7458159316d7c293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "因官方的 crates 源速度很慢,如果国内使用可以换为镜像源,这里使用了 SJTU 镜像" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "vi ~/.cargo/config.toml", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/4b8b4b8e7550009d6fd0c4439922564a293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 24, + "style": { + "bold": true + }, + "words": "编译docker-run" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "克隆 docker-run 项目,准备使用源码进行编译安装" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "git clone https://github.com/glotcode/docker-run glot-docker-run", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "进入仓库目录,使用 cargo 编译 Rust 工程" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "cd glot-docker-run\ncargo b -r", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/7c39ed2031e7932c1bc24926ea1c3025293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "检查编译结果,在工程目录的target/release中将会生成名为docker-run的可执行文件" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/51d7ad2ddf5dd75c531e267965c6ddb6293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "复制可执行文件和 systemd 服务模板" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "cp target/release/docker-run /home/glot/bin/\ncp systemd/docker-run.service /etc/systemd/system/", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "docker-run 服务使用 systemd 进行托管,作为 daemon 运行,它对外提供一个 http 服务,其他应用使用 RestAPI 与之对接\n编辑 systemd 服务配置文件" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "vi /etc/systemd/system/docker-run.service", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "docker-run 的配置文件全部为环境变量,一些重要的参数已经给出了注释" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "其中SERVER_LISTEN_ADDR和SERVER_LISTEN_PORT决定了 daemon 监听的 ip 和端口号,可以根据需求修改" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "SERVER_WORKER_THREADS为 worker 线程数,根据实际业务并发量修改,即越多可同时执行的任务越多" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "API_ACCESS_TOKEN是 RestAPI 的访问 Token,设定一个较复杂的值,可防止未授权访问,在调用中以 HTTP 请求 Header 的X-Access-Token字段进行传递" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "RUN_MAX_EXECUTION_TIME参数用来限制任务执行的超时时间,其单位为秒,如果一个任务大于这个时间没有执行完毕,docker-run 就会销毁这个容器,并会返回一个 400 错误" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "RUN_MAX_OUTPUT_SIZE参数是用来限制最大输出量的,它的单位是 Byte,如果输出的内容过大,同样会被丢弃并报错\n这些参数的详细配置也可以参考 docker-run 项目的 README: https://github.com/glotcode/docker-run?tab=readme-ov-file#environment-variables" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "[Unit]\nDescription=docker-run\n\n[Service]\nUser=glot\nGroup=glot\nRestart=always\nRestartSec=10\nExecStart=/home/glot/bin/docker-run\n# 服务绑定 ip\nEnvironment="SERVER_LISTEN_ADDR=0.0.0.0"\n# 服务监听端口\nEnvironment="SERVER_LISTEN_PORT=8088"\n# worker 线程数\nEnvironment="SERVER_WORKER_THREADS=10"\n# API Token\nEnvironment="API_ACCESS_TOKEN=some-secret-token"\n# Docker socket 路径\nEnvironment="DOCKER_UNIX_SOCKET_PATH=/var/run/docker.sock"\nEnvironment="DOCKER_UNIX_SOCKET_READ_TIMEOUT=3"\nEnvironment="DOCKER_UNIX_SOCKET_WRITE_TIMEOUT=3"\n# 容器主机名\nEnvironment="DOCKER_CONTAINER_HOSTNAME=glot"\n# 容器用户\nEnvironment="DOCKER_CONTAINER_USER=glot"\n# 容器最大内存限制\nEnvironment="DOCKER_CONTAINER_MEMORY=1000000000"\n# 容器内是否禁用网络支持\nEnvironment="DOCKER_CONTAINER_NETWORK_DISABLED=true"\nEnvironment="DOCKER_CONTAINER_ULIMIT_NOFILE_SOFT=90"\nEnvironment="DOCKER_CONTAINER_ULIMIT_NOFILE_HARD=100"\nEnvironment="DOCKER_CONTAINER_ULIMIT_NPROC_SOFT=90"\nEnvironment="DOCKER_CONTAINER_ULIMIT_NPROC_HARD=100"\nEnvironment="DOCKER_CONTAINER_CAP_DROP=MKNOD NET_RAW NET_BIND_SERVICE"\nEnvironment="DOCKER_CONTAINER_READONLY_ROOTFS=true"\nEnvironment="DOCKER_CONTAINER_TMP_DIR_PATH=/tmp"\nEnvironment="DOCKER_CONTAINER_TMP_DIR_OPTIONS=rw,noexec,nosuid,size=65536k"\n# 容器工作目录\nEnvironment="DOCKER_CONTAINER_WORK_DIR_PATH=/home/glot"\nEnvironment="DOCKER_CONTAINER_WORK_DIR_OPTIONS=rw,exec,nosuid,size=131072k"\n# 容器执行超时时间\nEnvironment="RUN_MAX_EXECUTION_TIME=15"\n# 最大允许输出\nEnvironment="RUN_MAX_OUTPUT_SIZE=100000"\n# 日志级别\nEnvironment="RUST_LOG=debug"\n\n[Install]\nWantedBy=multi-user.target", + "lang": "language-yaml" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "修改完配置文件就可启动服务了,并将它设为开机自启" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "systemctl daemon-reload\nsystemctl enable --now docker-run.service", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "GET 请求刚才配置的那个地址的根路径,测试服务运行状态正常,我这里是 http://localhost:8088/" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/7e0a6d73cdb1ba63bcfcbe94df9c7b39293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 24, + "style": { + "bold": true + }, + "words": "拉取Docker镜像" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "glot-images 构建了各编程语言的执行镜像,这些镜像使用 nix 构建,但因为 nix 的配置比较复杂,且占用存储空间巨大,这里直接使用上传在 DockerHub 的镜像了(弊端就是语言版本比较旧)" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "https://hub.docker.com/u/glot" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/e63013e3c15cd556ec7ce82048d43889293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "通过 docker pull命令拉取各个镜像,可以按照自己的需求拉取,比如你只需要执行某几个编程语言" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "docker pull glot/assembly\ndocker pull glot/ats\ndocker pull glot/bash\ndocker pull glot/clang\ndocker pull glot/clisp\ndocker pull glot/clojure\ndocker pull glot/cobol\ndocker pull glot/coffeescript\ndocker pull glot/crystal\ndocker pull glot/csharp\ndocker pull glot/dart\ndocker pull glot/elixir\ndocker pull glot/elm\ndocker pull glot/erlang\ndocker pull glot/fsharp\ndocker pull glot/golang\ndocker pull glot/groovy\ndocker pull glot/guile\ndocker pull glot/hare\ndocker pull glot/haskell\ndocker pull glot/idris\ndocker pull glot/java\ndocker pull glot/javascript\ndocker pull glot/julia\ndocker pull glot/kotlin\ndocker pull glot/lua\ndocker pull glot/mercury\ndocker pull glot/nim\ndocker pull glot/nix\ndocker pull glot/ocaml\ndocker pull glot/pascal\ndocker pull glot/perl\ndocker pull glot/php\ndocker pull glot/python\ndocker pull glot/raku\ndocker pull glot/ruby\ndocker pull glot/rust\ndocker pull glot/sac\ndocker pull glot/scala\ndocker pull glot/swift\ndocker pull glot/typescript\ndocker pull glot/zig", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "这些全部拉取下来大概需要38GB,可以使用docker images命令检查拉取情况" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/82a01995548eb266d59f7fd22f75e542293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "如果已经拉取了所有的镜像,可以执行单元测试脚本,来验证各编程语言执行容器的正确性,在 docker-run 的目录下的scripts目录内" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "cd glot-docker-run/scripts/\n./test_glot.sh 'http://localhost:8088' 'some-secret-token'", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/004e79df950a4bc93ff42fae8017d0aa293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 24, + "style": { + "bold": true + }, + "words": "使用Glot服务" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "docker-run 这个组件对外提供 RestAPI 接口,其他进程或者其他主机可以直接调用,它共有三个功能对应其路径:" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/a28b283d2075bbd78c12e1d2859fd40d293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "查询服务状态" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "curl http://localhost:8088/", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "返回 daemon 的服务名、版本等" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "{\n "name": "docker-run",\n "version": "1.4.0",\n "description": "Api for running code in transient docker containers"\n}", + "lang": "language-json" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "查询宿主机 DockerEngine 信息,访问这个接口需要在请求 Header 的X-Access-Token字段中携带 Token" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "curl http://localhost:8088/version \\\n -H 'X-Access-Token: some-secret-token'", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "执行成功将会返回 DockerEngine 的版本信息" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "{\n "docker": {\n "version": "26.1.2",\n "apiVersion": "1.45",\n "gitCommit": "ef1912d",\n "goVersion": "go1.21.10",\n "os": "linux",\n "arch": "amd64",\n "kernelVersion": "6.2.16-3-pve",\n "buildTime": "2024-05-08T13:59:59.000000000+00:00",\n "platform": {\n "name": "Docker Engine - Community"\n },\n "components": [\n {\n "name": "Engine",\n "version": "26.1.2"\n },\n {\n "name": "containerd",\n "version": "1.6.31"\n },\n {\n "name": "runsc",\n "version": "0.0~20221219.0"\n },\n {\n "name": "docker-init",\n "version": "0.19.0"\n }\n ]\n }\n}", + "lang": "language-json" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "执行响应的代码前,需要构建一个 json 请求体,用来描述创建的执行任务的行为,下表是它的定义:" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/752ce6ef76a448158eb97222befa7c92293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "payload 结构:" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/752ce6ef76a448158eb97222befa7c92293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "文件对象的结构:" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/752ce6ef76a448158eb97222befa7c92293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "eg:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "{\n "image": "glot/python:latest",\n "payload": {\n "language": "python",\n "files": [\n {\n "name": "main.py",\n "content": "print(42)"\n }\n ]\n }\n}", + "lang": "language-json" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "访问这个接口也需要在请求 Header 中携带 Token:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "curl 'http://localhost:8088/run' \\\n -H 'X-Access-Token: some-secret-token' \\\n -H 'Content-type: application/json' \\\n -d '{\n "image": "glot/python:latest",\n "payload": {\n "language": "python",\n "files": [\n {\n "name": "main.py",\n "content": "print(42)"\n }\n ]\n }\n}'", + "lang": "language-bash" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "我们可以直接将它与自己熟悉的编程语言对接,实现给应用或者平台提供运行任意代码的能力。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "这里使用 Python 通过 RestAPI 调用 glot(docker-run),实现运行一段 rust 代码并取回输出为字符串:" + } + } + ] + } + }, + { + "align": 0, + "code": { + "content": "import requests\n\ndef run_code(image, lang, file_name, code):\n resp = requests.post(\n url="http://localhost:8088/run",\n headers={\n "X-Access-Token": "some-secret-token",\n },\n json={\n "image": image,\n "payload": {\n "language": lang,\n "files": [\n {\n "name": file_name,\n "content": code,\n },\n ],\n },\n },\n )\n json_content = resp.json()\n return json_content\n\n\nimage = "glot/rust:latest"\nlang = "rust"\nfile_name = "main.rs"\ncode = """\nfn main() {\n for i in 1..=9 {\n for j in 1..=i {\n print!("{}x{}={:2} ", j, i, j * i);\n }\n println!();\n }\n}\n"""\n\nresult = run_code(image, lang, file_name, code)\nprint(result["stdout"])", + "lang": "language-python" + }, + "para_type": 7 + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "测试可以正确输出执行内容" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": null, + "live_url": null, + "size": null, + "url": "https://i0.hdslb.com/bfs/new_dyn/21e396261fb607d4823f7ec4327908b1293793435.png", + "width": null + } + ], + "style": 2 + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "有了通用接口的能力,我们就有了将其集成进自己平台的可能,只要发挥创造力,就可以围绕在线执行代码提供相关的业务,或者作为微服务连接上游的业务,比如搭建 OJ(在线判题)平台等。以及 glot 项目以 MIT 协议开源,这意味着我们可以随意修改底层代码,比如增加网络和共享路径支持、增加第三方库等。总之,这是一个完成度很高、十分推荐的开源项目。" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "由 " + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "color": "#ff968d", + "font_size": 17, + "style": {}, + "words": "来笙云 Laysense.cn" + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": " 强力支持" + } + } + ] + } + }, + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "原文链接:https://shakaianee.top/archives/1002/" + } + } + ] + } + } + ] + }, + "module_type": "MODULE_TYPE_CONTENT" + }, + { + "module_extend": { + "items": [ + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=%E8%BF%90%E7%BB%B4", + "text": "运维" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA", + "text": "服务搭建" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=glot.io", + "text": "glot.io" + } + ] + }, + "module_type": "MODULE_TYPE_EXTEND" + }, + { + "module_bottom": { + "share_info": { + "pic": "https://static.hdslb.com/mobile/img/app_logo.png", + "summary": "感谢 来笙云 Laysense.cn 提供算力 作为一个全栈工程师,开发、维护和测试一些软件系统时,必然会涉及到多种编程语言,有时还需要测试一些编程语言的安全特性,常常需要敏捷地了解它们并立即上手。在朋友的推荐和社区分享下,我了解到一个名叫 glot.io 的开源项目。 它支持40多种编程语言,无论是热门的 Python、Go、Rust、Kotlin,还是冷门的 COBOL、Erlang、Haskell 只需在网页上选择对应的语言,即可开始编写。为使用者提供了一个 Sandbox(沙箱)和 Playground(游乐场)环境,既不需要配置它们的 Runtime(运行环境)和 IDE(集成开发环境),也不需要担心误操作对系统产生破坏性,还不会占用任何用户端的系统资源,实现真正的零开销运行代码。 [图片] 在代码编写界面,可以创建多个源码文件,完成后点击Run就能执行它并得到输出,类似我们平时编程那样,将输出打在终端上。整个过程不会生成任何可执行文件,所以它的应用场景不是在线编译,而是在线运行代码片段。 [图片] glot.io 这个网站提供了公开的代码片段执行和分享功能,任何人在注册后都可以分享自", + "title": "【服务搭建】零开销在线运行代码!glot.io服务私有化部署" + } + }, + "module_type": "MODULE_TYPE_BOTTOM" + }, + { + "module_stat": { + "coin": { + "count": 1, + "forbidden": false, + "status": false + }, + "comment": { + "count": 3, + "forbidden": false + }, + "favorite": { + "count": 4, + "forbidden": false, + "status": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 17, + "forbidden": false, + "status": false + } + }, + "module_type": "MODULE_TYPE_STAT" + } + ], + "type": 1 + } + }, + "message": "0", + "ttl": 1 +} +``` +
+ + diff --git a/docs/opus/features.md b/docs/opus/features.md new file mode 100644 index 0000000..b54e961 --- /dev/null +++ b/docs/opus/features.md @@ -0,0 +1,1295 @@ +# 功能模块 + +部分动态相关接口请求存在 `features` 参数, 意为功能
+主要用于控制返回结果中的 `modules` 中的内容, 意为模块
+此两者在一定程度上为对应关系, 但也存在大量例外
+本页文档整理了大部分常见的已知功能与模块以供参考 + +## features + +请求 URL 参数, 用 `,` 分隔 + +| 名称 | 含义 | 备注 | 示例 | +| ---- | ---- | ---- | ---- | +| htmlNewStyle | 是否显示专栏正文 | 对于纯动态类型接口无效 | 1056353752004427792 | +| itemOpusStyle | 是否以图文风格显示动态 | 部分动态强制需要, 对于图文类型接口无效 | 1060771233257226247, 1065507757569867779 | +| listOnlyfans | | | | +| opusBigCover | 是否在返回结果中区分大封面与九宫格 | 对于图文接口似乎无效, 前置条件 `itemOpusStyle` | 1052711525276450824 | +| onlyfansVote | 是否在投票信息中增加参与按钮等 | | 1060771233257226247 | +| onlyfansAssetsV2 | | | | +| forwardListHidden | | | | +| ugcDelete | | | | +| onlyfansQaCard | 是否展示更详细的展示充电专属问答 | | 1087983622038749191 | +| commentsNewVersion | | | | +| decorationCard | 是否以卡片形式显示装扮 | | 566950981753221664 | +| editable | 是否在右上角三点菜单中显示 `编辑` | 必须是自己发送的动态才有效果 | 1065142062572109830 | +| opusPrivateVisible | | | | +| tribeeEdit | | | | +| avatarAutoTheme | 头像颜色使用 CSS 变量 | 对于纯动态类型接口无效 | 933099353259638816 | +| avatarTypeOpus | | | | + +## modules + +内容以 [获取图文详细信息](detail.md) 为基础 + +### MODULE_TYPE_TITLE + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_title | object | 标题模块 | | +| module_type | string | 模块类型 | `MODULE_TYPE_TITLE` | + +`module_title` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| text | string | 标题内容 | | + +
+查看示例: + +```json +{ + "module_title": { + "text": "欢迎加入粉丝交流群~" + }, + "module_type": "MODULE_TYPE_TITLE" +} +``` +
+ + + +### MODULE_TYPE_AUTHOR + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_author | object | 作者模块 | | +| module_type | string | 模块类型 | `MODULE_TYPE_AUTHOR` | + +`module_author` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| avater | object | 头像信息 | 主要用于网页渲染, 若感兴趣可参考 [图片格式化](../misc/picture.md) | +| decorate | object | 装扮 | 仅当动态接口且无 `decorationCard` 时存在 | +| decorate_card | object | 装扮 | 仅当图文接口时存在 | +| decoration_card | object | 装扮 | 仅当动态接口且有 `decorationCard` 时存在, 同 `decorate_card` | +| face | string | 头像 URL | | +| face_nft | boolean | 是否为 NFT 头像 | | +| following | boolean | 是否关注此 UP 主 | 自己的动态为 `null` | +| jump_url | string | 跳转链接 | | +| label | string | 名称前标签 | `合集`
`电视剧`
`番剧` | +| mid | number | UP 主 UID
剧集 SeasonId | | +| more | object | 三点按钮中的项目 | 参见 [module_more](#module_more), 仅图文接口 | +| name | string | UP 主名称
剧集名称
合集名称 | | +| official | object | UP 主认证信息 | 仅图文接口 | +| official_verify | object | UP主认证信息 | 仅动态接口 | +| pendant | object | UP 主头像框 | | +| pub_action | string | 更新动作描述 | 仅动态接口
`投稿了视频`
`直播了`
`投稿了文章`
`更新了合集`
`与他人联合创作`
`发布了动态视频`
`投稿了直播回放` | +| pub_location_text | string | 空 | | +| pub_time | string | 更新时间 | `x分钟前`
`x小时前`
`昨天`
等 | +| pub_ts | number | 更新时间戳 | UNIX 秒级时间戳 | +| views_text | string | | | +| vip | object | UP 主大会员信息 | | +| type | string | 作者类型 | 仅动态接口, [作者类型](../dynamic/dynamic_enum.md#作者类型) | +| nft_info | object | NFT 头像信息 | 可能不存在 | + +`module_author.avatar` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| container_size | object | | | +| fallback_layers | object | | | +| mid | string | | | + +`module_author.avatar.container_size` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| height | number | | | +| width | number | | | + +`module_author.avatar.fallback_layers` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| is_critical_group | boolean | | | +| layers | object[] | | | + +`module_author.avatar.fallback_layers.layers[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| general_spec | object | | | +| layer_config | object | | | +| resource | object | | | +| visible | boolean | | | + +`module_author.avatar.fallback_layers.layers[].general_spec` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| pos_spec | object | | | +| render_spec | object | | | +| size_spec | object | | | + +`module_author.avatar.fallback_layers.layers[].general_spec.pos_spec` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| axis_x | number | | | +| axis_y | number | | | +| coordinate_pos | number | | | + +`module_author.avatar.fallback_layers.layers[].general_spec.render_spec` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| opacity | number | | | + +`module_author.avatar.fallback_layers.layers[].general_spec.size_spec` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| height | number | | | +| width | number | | | + +`module_author.avatar.fallback_layers.layers[].layer_config` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| is_critical | boolean | | | +| tags | object | | | + +`module_author.avatar.fallback_layers.layers[].layer_config.tags` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| AVATAR_LAYER | object | | | +| GENERAL_CFG | object | | | + +`module_author.avatar.fallback_layers.layers[].layer_config.tags.AVATAR_LAYER` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | + +`module_author.avatar.fallback_layers.layers[].layer_config.tags.GENERAL_CFG` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| config_type | number | | | +| general_config | object | | | + +`module_author.avatar.fallback_layers.layers[].layer_config.tags.GENERAL_CFG.general_config` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| web_css_style | object | | | + +`module_author.avatar.fallback_layers.layers[].layer_config.tags.GENERAL_CFG.general_config.web_css_style` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| borderRadius | string | | | + +`module_author.avatar.fallback_layers.layers[].resource` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| res_image | object | | | +| res_type | number | | | + +`module_author.avatar.fallback_layers.layers[].resource.res_image` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| image_src | object | | | + +`module_author.avatar.fallback_layers.layers[].resource.res_image.image_src` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| placeholder | number | | | +| remote | object | | | +| src_type | number | | | + +`module_author.avatar.fallback_layers.layers[].resource.res_image.image_src.remote` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| bfs_style | string | | | +| url | string | | | + +`module_author.decorate` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| card_url | string | 动态卡片小图标图片URL | | +| fan | object | 粉丝装扮信息 | | +| id | number | 装扮 ID | | +| jump_url | string | 跳转 URL | | +| name | string | 装扮名称 | | +| type | number | `1` `2` `3` | | + +`module_author.decorate.fan` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| color | string | 编号颜色 | | +| color_format | object | 颜色格式 | | +| is_fan | boolean | 是否是粉丝装扮 | | +| num_str | string | 装扮编号前缀 | 如 `NO.` | +| number | number | 装扮编号 | | + + +`module_author.decorate.fan.color_format` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| colors | string[] | 颜色 | 带 `#` 前缀的 16 进制颜色代码 | +| end_point | string| 端点 | `0,100` | +| gradients | number[] | 渐变 | 内容 [0, 100] | +| start_point | string | 起点 | `0,0` | + +`module_author.decorate_card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| big_card_url | string | 大装扮卡片 URL | | +| card_type | number | 装扮卡片类型 | | +| card_type_name | string | 装扮卡片类型名称 | | +| card_url | string | 装扮卡片 URL | | +| fan | object | 粉丝装扮信息 | 同 `module_author.decorate.fan` | +| id | number | 装扮 ID | | +| image_enhance | string | 同 `card_url`? | | +| item_id | number | 项目 ID? | | +| item_type | number? | 项目类型? | 图文接口当 `decorationCard` 时才有此项 | +| jump_url | string | 跳转 URL | | +| name | string | 装扮名称 | | + + + +`module_author.official` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| desc | string | 认证说明 | | +| role | number | | | +| title | string | | | +| type | number | 认证类型 | | + +`module_author.pendant` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| expire | number | 过期时间 | 此接口返回恒为`0` | +| image | string | 头像框图片 URL | | +| image_enhance | string | 头像框图片 URL | | +| image_enhance_frame | string | 头像框图片逐帧序列 URL | | +| n_pid | number | 同 `pid` | | +| name | string | 头像框名称 | | +| pid | number | 头像框id | | + +`module_author.vip` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| avatar_icon | object | | 仅图文接口 | +| avatar_subscript | number | 是否显示角标 | 0:不显示
1:显示 | +| avatar_subscript_url | string | 空 | | +| due_date | number | 大会员过期时间戳 | UNIX 毫秒时间戳 | +| label | object | 大会员标签 | | +| nickname_color | string | 名字显示颜色 | 大会员:`#FB7299` | +| role | number | | 仅图文接口 | +| status | number | 大会员状态 | 0:无
1:有
2:封禁? | +| theme_type | number | 主题类型? | 仅图文接口 | +| tv_due_date | number | TV 端过期时间? | 仅图文接口 | +| tv_vip_pay_type | number | TV 端付费状态? | 仅图文接口| +| tv_vip_status | number | TV 端会员状态? | | +| type | number | 大会员类型? | | +| vip_pay_type | number | 大会员付费类型? | + +`module_author.vip.avatar_icon` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| icon_resource | object | | | + +`module_author.vip.avatar_icon.icon_resource` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | + +`module_author.vip.label` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| bg_color | string | 会员标签背景颜色 | `#FB7299` | +| bg_style | number | `0` `1` | | +| border_color | string | 空 | | +| img_label_uri_hans | string | 大会员牌子图片 | 动态版 简体版 | +| img_label_uri_hans_static | string | 大会员牌子图片 | 静态版 简体版 | +| img_label_uri_hant | string | 大会员牌子图片 | 动态版 繁体版 | +| img_label_uri_hant_static | string | 大会员牌子图片 | 静态版 繁体版 | +| label_theme | string | 会员标签 | vip:大会员
annual_vip:年度大会员
ten_annual_vip:十年大会员
hundred_annual_vip:百年大会员
fools_day_hundred_annual_vip:最强绿鲤鱼 | +| path | string | 空 | | +| text | string | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` | +| text_color | string | 用户名文字颜色 | | +| use_img_label | boolean | `true` | | + +`module_author.nft_info`: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| region_icon | string | NFT头像角标URL | 类型1:https://i0.hdslb.com/bfs/activity-plat/static/20220506/334553dd7c506a92b88eaf4d59ac8b4d/j8AeXAkEul.gif
类型2:https://i0.hdslb.com/bfs/activity-plat/static/20220506/334553dd7c506a92b88eaf4d59ac8b4d/IOHoVs1ebP.gif | +| region_type | number | NFT头像角标类型 | 1,2 | +| show_status | number | `1` | | + +
+查看示例: + +```json +{ + "module_author": { + "avatar": { + "container_size": { + "height": 1.35, + "width": 1.35 + }, + "fallback_layers": { + "is_critical_group": true, + "layers": [ + { + "general_spec": { + "pos_spec": { + "axis_x": 0.675, + "axis_y": 0.675, + "coordinate_pos": 2 + }, + "render_spec": { + "opacity": 1 + }, + "size_spec": { + "height": 1, + "width": 1 + } + }, + "layer_config": { + "is_critical": true, + "tags": { + "AVATAR_LAYER": {}, + "GENERAL_CFG": { + "config_type": 1, + "general_config": { + "web_css_style": { + "borderRadius": "50%" + } + } + } + } + }, + "resource": { + "res_image": { + "image_src": { + "placeholder": 6, + "remote": { + "bfs_style": "widget-layer-avatar", + "url": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg" + }, + "src_type": 1 + } + }, + "res_type": 3 + }, + "visible": true + } + ] + }, + "mid": "645769214" + }, + "decorate_card": { + "big_card_url": "https://i0.hdslb.com/bfs/vip/e2ffa1d1d491fe0464338ed3921327ef5e4b42c5.png", + "card_type": 2, + "card_type_name": "免费", + "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "fan": {}, + "id": 28, + "image_enhance": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png", + "item_id": 28, + "item_type": 1, + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28&isdiy=0&part=card&from=post&f_source=garb&vmid=645769214&native.theme=1&navhide=1", + "name": "2233娘" + }, + "face": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg", + "face_nft": false, + "following": true, + "jump_url": "//space.bilibili.com/645769214", + "label": "", + "mid": 645769214, + "more": { + "three_point_items": [ + { + "label": "举报", + "type": "THREE_POINT_REPORT" + } + ] + }, + "name": "Session小胡", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "pendant": { + "expire": 0, + "image": "", + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0, + "name": "", + "pid": 0 + }, + "pub_location_text": "", + "pub_time": "2025年04月06日 20:18", + "pub_ts": 1743941902, + "views_text": "", + "vip": { + "avatar_icon": { + "icon_resource": {} + }, + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": 1665158400000, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + }, + "nickname_color": "", + "role": 0, + "status": 0, + "theme_type": 0, + "tv_due_date": 0, + "tv_vip_pay_type": 0, + "tv_vip_status": 0, + "type": 1, + "vip_pay_type": 0 + } + }, + "module_type": "MODULE_TYPE_AUTHOR" +} +``` +
+ + + +### module_more + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_more | object | 三点更多模块 | | + +`module_more` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| three_point_items | object[] | 右上角三点菜单 | 套了个娃 | + +`module_more.three_point_items[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| label | string | 显示文本 | | +| modal | object? | 弹出框文本 | | +| params | object? | 参数信息 | | +| type | string | 三点操作类型 | 参见 [右上角三点菜单](../dynamic/dynamic_enum.md#右上角三点菜单) | + +`module_more.three_point_items[].modal` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| cancel | string | 取消文本 | | +| confirm | string | 确认文本 | | +| content | string | 内容文本 | | +| title | string | 标题文本 | | + +`module_more.three_point_items[].params` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| dyn_id_str | string | 动态 id 字符串 | | +| dyn_type | number | 动态类型 | | +| rid_str | string | 动态 id 字符串 | | + + + +
+查看示例: + +```json +{ + "three_point_items": [ + { + "label": "编辑", + "type": "THREE_POINT_EDIT" + }, + { + "label": "可见范围", + "params": { + "dynamic_id": "1067779202512584729", + "status": 0, + "type": 1 + }, + "type": "THREE_POINT_PRIVATE" + }, + { + "label": "删除", + "modal": { + "cancel": "取消", + "confirm": "确认删除", + "content": "动态删除后将无法恢复,请谨慎操作", + "title": "要删除动态吗?" + }, + "params": { + "dyn_id_str": "1067779202512584729", + "dyn_type": 1, + "rid_str": "1067779202512584729" + }, + "type": "THREE_POINT_DELETE" + } + ] +} +``` + +
+ +### MODULE_TYPE_STAT + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_stat | object | 统计模块 | | +| module_type | string | 模块类型 | `MODULE_TYPE_STAT` | + +`module_stat` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| coin | object | 硬币数据 | 仅图文接口 | +| comment | object | 评论数据 | | +| favorite | object | 收藏数据 | 仅图文接口 | +| forward | object | 转发数据 | | +| like | object | 点赞数据 | | + +`module_stat` 中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| count | number | 数量 | | +| forbidden | boolean | 是否屏蔽 | | +| hidden | boolean | 是否隐藏 | | +| status | boolean | 当前状态 | 是否已进行该操作 | + +
+查看示例: + +```json +{ + "module_stat": { + "coin": { + "count": 0, + "forbidden": false, + "hidden": true + }, + "comment": { + "count": 42, + "forbidden": false + }, + "favorite": { + "count": 0, + "forbidden": false, + "status": false + }, + "forward": { + "count": 0, + "forbidden": false + }, + "like": { + "count": 56, + "forbidden": false, + "status": true + } + }, + "module_type": "MODULE_TYPE_STAT" +} +``` +
+ + + +### MODULE_TYPE_CONTENT + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_content | object | 内容模块 | | +| module_type | string | 模块类型 | `MODULE_TYPE_CONTENT` | + +`module_content` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| paragraphs | object[] | 段落 | | + +`module_content.paragraphs[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| align | number | 对齐方式 | 0: 左对齐 (默认)
1: 居中
2: 右对齐 | +| para_type | number | 段落类型 | 1: 文本
2: 图片
3: 分割线
4: 块引用
5: 列表
6: 链接卡片
7: 代码 | +| text | object | 文本 | `para_type=1` 或 `para_type=4` | +| pics | object | 图片 | `para_type=2` | +| line | object | 分割线 | `para_type=3` | +| list | object | 列表 | `para_type=5` | +| link_card | object | 链接卡片 | `para_type=6` | +| code | object | 代码 | `para_type=7` | + +`module_content.paragraphs[].text` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| nodes | object[] | 文本节点 | | + +`module_content.paragraphs[].text.nodes[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| type | string | 文本节点类型 | 纯文本: `TEXT_NODE_TYPE_WORD`
富文本: `TEXT_NODE_TYPE_RICH` | +| word | object | 纯文本 | 仅 `type='TEXT_NODE_TYPE_WORD'` | +| rich | object | 富文本 | 仅 `type='TEXT_NODE_TYPE_RICH'`, 详细参见 [富文本节点](rich_text_nodes.md) | +| formula | object | 公式 | 仅 `type='TEXT_NODE_TYPE_FORMULA' | + +`module_content.paragraphs[].text.nodes[].word` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| font_size | number | 字体大小 | 用于控制文本所用标签名 (如 `h1` `h2` `p`) 及行高 | +| style | object | 补充样式 | | +| words | string | 文本内容 | | + +`module_content.paragraphs[].text.nodes[].formula` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| latex_content | string | 公式内容 | LaTeX | + +`module_content.paragraphs[].line` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| pic | object | 图片 | | + +`module_content.paragraphs[].line.pic` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| height | number | 高度 | | +| url | string | 图片 URL | | + +`module_content.paragraphs[].list` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| style | number | 样式 | 1: 有序列表
2: 无序列表 | +| items | object[] | 列表项 | | + +`module_content.paragraphs[].list.items[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| level | number | 级别 | | +| nodes | object[] | 文本节点 | 同 `module_content.paragraphs[].text.nodes[]` 对象 | +| order | number | 序号 | | + +`module_content.paragraphs[].pic` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| pics | object[] | 图片 | 套了个娃 | +| style | number | 样式 | 1: isAlbum | + +`module_content.paragraphs[].pic.pics[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| height | number | 高度 | | +| live_url | unknown | 动图 URL? | | +| size | number \| null | 大小 | 单位: ki | +| url | string | 图片 URL | | +| width | number | 宽度 | | + +`module_content.paragraphs[].link_card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| card | object | 卡片内容 | | + +`module_content.paragraphs[].link_card.card` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| oid | string | 关联 id | 可能为 `"undefined"` | +| type | string | 卡片类型 | | +| common | object | 一般信息 | 仅 `type='LINK_CARD_TYPE_COMMON', 参见 [获取全部动态列表](../dynamic/all.md#获取全部动态列表) 的 `data.items[].modules.module_dynamic.additional.common` | +| goods | object | 商品信息 | 仅 `type='LINK_CARD_TYPE_GOODS'`, 参见 [获取全部动态列表](../dynamic/all.md#获取全部动态列表) 的 `data.items[].modules.module_dynamic.additional.goods` | +| match | object | 比赛信息? | 仅 `type='LINK_CARD_TYPE_MATCH'` | +| vote | object | 投票信息 | 仅 `type='LINK_CARD_TYPE_VOTE'`, 参见 [获取全部动态列表](../dynamic/all.md#获取全部动态列表) 的 `data.items[].modules.module_dynamic.additional.vote` | +| ugc | object | 视频信息 | 仅 `type='LINK_CARD_TYPE_UGC'`, 参见 [获取全部动态列表](../dynamic/all.md#获取全部动态列表) 的 `data.items[].modules.module_dynamic.additional.ugc` | +| reserve | object | 预约信息 | 仅 `type='LINK_CARD_TYPE_RESERVE'`, 参见 [获取全部动态列表](../dynamic/all.md#获取全部动态列表) 的 `data.items[].modules.module_dynamic.additional.reserve` | +| upower_lottery | object | 充电专属抽奖信息 | 仅 `type='LINK_CARD_TYPE_UPOWER_LOTTERY'` | +| opus | object | 图文信息 | 仅 `type='LINK_CARD_TYPE_OPUS'` | +| music | object | 音乐信息 | 仅 `type='LINK_CARD_TYPE_MUSIC'`, 参见 [获取全部动态列表](../dynamic/all.md#获取全部动态列表) 的 `data.items[].modules.module_dynamic.major.music` | +| live | object | 直播信息 | 仅 `type='LINK_CARD_TYPE_LIVE'`, 参见 [获取全部动态列表](../dynamic/all.md#获取全部动态列表) 的 `data.items[].modules.module_dynamic.major.live` | +| item_null | object | 提示信息 | 仅 `type='LINK_CARD_TYPE_ITEM_NULL'` | + +`module_content.paragraphs[].link_card.card.match` 对象: + +*注: 该对象结构由 AI 根据前端代码推断得出未经验证仅供参考* + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| id_str | string | 动态 ID | | +| jump_url | string | 跳转 URL | | +| match_info | object | 比赛信息 | 套了个娃 | + +`module_content.paragraphs[].link_card.card.match.match_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| center_bottom | string | 中间区域底部的信息 | | +| center_top | string[] | 中间区域顶部的信息 | 会循环显示出来, 可能用来显示比分或者比赛时间 | +| left_team | object | 右边队伍的信息 | | +| right_team | object | 左边队伍的信息 | | +| status | number | 比赛状态 | 2: 进行中 (文字会高亮)
其他: 正常状态 | +| sub_title | string | 副标题 | | +| title | string | 标题 | | + +`module_content.paragraphs[].link_card.card.match.match_info.left_team` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| name | string | 队伍名字 | | +| pic | string | 图片 | | + +`module_content.paragraphs[].link_card.card.match.match_info.right_team` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| name | string | 队伍名字 | | +| pic | string | 图片 | | + + + +`module_content.paragraphs[].link_card.card.upower_lottery` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| button | object | 按钮 | | +| desc | object | 描述 | | +| hint | object | 提示 | | +| jump_url | string | 跳转 URL | | +| rid | number | 关联 id | | +| state | number | 状态 | | +| title | string | 标题 | | +| up_mid | number | UP 主 mid (UID) | | +| upower_action_state | number | 充电操作状态 | | +| upower_level | number | 充电级别 | | + +`module_content.paragraphs[].link_card.card.upower_lottery.button` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| check | object | 选中状态 | | +| status | number | 状态 | | +| type | number | 类型 | 0 1 2 | + +`module_content.paragraphs[].link_card.card.upower_lottery.button.check` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| disable | number | 是否禁用 | 1: 禁用 | +| icon_url | string | 图标 URL | | +| text | string | 文字 | | +| toast | string | 提示 | | + +`module_content.paragraphs[].link_card.card.upower_lottery.desc` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| jump_url | string | 跳转 URL | | +| style | number | 样式 | | +| text | string | 文字 | | + +`module_content.paragraphs[].link_card.card.upower_lottery.hint` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| style | number | 样式 | | +| text | string | 文字 | | + + + +`module_content.paragraphs[].link_card.card.opus` 对象: + +*注: 该对象结构根据前端代码推断得出未经验证仅供参考* + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| author | object | 作者信息 | | +| cover | string | 封面 URL | | +| jump_url | string | 跳转 URL | | +| stat | object | 状态信息 | | +| title | string | 标题 | | + +`module_content.paragraphs[].link_card.card.opus.author` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| name | string | 作者名 | | + +`module_content.paragraphs[].link_card.card.opus.stat` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| view | number | 阅读数 | | + +`module_content.paragraphs[].link_card.card.item_null` 对象: + +注: 该对象结构根据前端代码推断得出未经验证仅供参考 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| text | string | 文字 | | + +`module_content.paragraphs[].code` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| content | string | 内容 | | +| lang | string | 语言 | 如 `language-html` `language-bash` | + +**示例:** + +
+查看示例: + +```json +{ + "module_content": { + "paragraphs": [ + { + "link_card": { + "card": { + "opus": { + "author": { + "name": "作者的名字" + }, + "cover": "https://example.com/path/to/cover.jpg", + "jump_url": "https://www.bilibili.com/read/cvxxxxxxxx", + "stat": { + "view": 12345 + }, + "title": "这里是作品的标题" + } + } + } + } + ] + } +} +``` +
+ + + +**示例:** + +
+查看示例: + +```json +{ + "module_content": { + "paragraphs": [ + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "洛天依2025「无限共鸣·流光协奏」全息巡回演唱会·成都站\n部分演出歌曲歌单抢先看~" + } + }, + { + "rich": { + "emoji": { + "gif_url": "https://i0.hdslb.com/bfs/garb/3ed01457a5a2c7c2ec304a1aa0565033f4b7fde4.gif", + "icon_url": "https://i0.hdslb.com/bfs/garb/d6a4aeb51134e1ddf0024a8c1fa48a91700207e2.png", + "size": 2, + "text": "[洛天依·天星问动态_萌]", + "type": 3, + "webp_url": "https://i0.hdslb.com/bfs/garb/1c017fee22994ff261b90c9790a2cfc553ef1845.webp" + }, + "orig_text": "[洛天依·天星问动态_萌]", + "text": "[洛天依·天星问动态_萌]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + "type": "TEXT_NODE_TYPE_RICH" + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n《Dramatic》\n《蝴蝶》\n\n✨成都站城市限定演出歌曲\n《又见月光光》\n\n有没有你期待的歌曲呀?" + } + }, + { + "rich": { + "emoji": { + "gif_url": "https://i0.hdslb.com/bfs/emote/55bbe7e1c69fb5382764cd467a6ef43c97e8fb81.gif", + "icon_url": "https://i0.hdslb.com/bfs/emote/e55207be553ac505ac80892a3f325be383139aa2.png", + "size": 2, + "text": "[心律共鸣动态表情包_啾啾]", + "type": 3, + "webp_url": "https://i0.hdslb.com/bfs/emote/fc0c8ef4ba8271521d934b9b6ee1a7c60ab27e4c.webp" + }, + "orig_text": "[心律共鸣动态表情包_啾啾]", + "text": "[心律共鸣动态表情包_啾啾]", + "type": "RICH_TEXT_NODE_TYPE_EMOJI" + }, + "type": "TEXT_NODE_TYPE_RICH" + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "\n天依已经迫不及待在演唱会的舞台上和大家相见啦!" + } + } + ] + } + }, + { + "align": 0, + "para_type": 2, + "pic": { + "pics": [ + { + "height": 5755, + "live_url": null, + "size": 4180.7216796875, + "url": "http://i0.hdslb.com/bfs/new_dyn/bda8c1b1e9c98e09994742a26c1f62c636081646.jpg", + "width": 1080 + } + ], + "style": 1 + } + }, + { + "link_card": { + "card": { + "goods": { + "head_icon": "", + "head_text": "UP主的推荐", + "items": [ + { + "brief": "", + "cover": "https://i0.hdslb.com/bfs/openplatform/202506/aNnr4PFN1749449633226.jpeg", + "id": 102803, + "jump_desc": "去看看", + "jump_url": "https://mall.bilibili.com/neul-next/ticket/detail.html?noTitleBar=1&id=102803&track_id=__BGMT__&contentId=&from=&msource=cps_Mdynamic_36081646_cont-2-1077137468098084900", + "name": "成都·2025洛天依「无限共鸣•流光协奏」全息演唱会-成都站", + "price": "¥480" + } + ], + "jump_url": "" + }, + "oid": "undefined", + "type": "LINK_CARD_TYPE_GOODS" + } + }, + "para_type": 6 + } + ] + }, + "module_type": "MODULE_TYPE_CONTENT" +} +``` + +```json +{ + "module_content": { + "paragraphs": [ + { + "align": 0, + "para_type": 1, + "text": { + "nodes": [ + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "欢迎使用咱开发的 TG 机器人, 自由开源, 目前支持很多功能, 如 天气查询, IP 查询, 甚至可以执行 Shell 命令\nSINO Is Not Object! " + } + }, + { + "type": "TEXT_NODE_TYPE_WORD", + "word": { + "font_size": 17, + "style": {}, + "words": "https://t.me/SessX6cfBot" + } + } + ] + } + } + ] + }, + "module_type": "MODULE_TYPE_CONTENT" +} +``` +
+ + + +### MODULE_TYPE_TOPIC + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_topic | object | 话题模块 | | +| module_type | string | 模块类型 | `MODULE_TYPE_TOPIC` | + +`module_topic` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| id | number | 话题 id | | +| jump_url | string | 跳转 URL | | +| name | string | 话题名称 | | + +**示例:** + +
+查看示例: + +```json +{ + "module_topic": { + "id": 1310025, + "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1310025&topic_name=%E6%B4%9B%E5%A4%A9%E4%BE%9D%E5%96%8A%E4%BD%A0%E6%9D%A5%E7%9C%8B%E5%85%A8%E6%81%AF%E5%B7%A1%E6%BC%94", + "name": "洛天依喊你来看全息巡演" + }, + "module_type": "MODULE_TYPE_TOPIC" +} +``` +
+ + + +### MODULE_TYPE_COLLECTION + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_collection | object | 文集模块 | | +| module_type | string | 模块类型 | `MODULE_TYPE_COLLECTION` | + +`module_collection` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| count | string | 文章数 | | +| id | number | 文集 id | | +| name | string | 文集名 | | +| title | string | 标题 | `收录于文集` | + +**示例:** + +
+查看示例: + +```json +{ + "module_collection": { + "count": "4篇", + "id": 326286, + "name": "电脑", + "title": "收录于文集" + }, + "module_type": "MODULE_TYPE_COLLECTION" +} +``` +
+ + + + +### MODULE_TYPE_EXTEND + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_extend | object | 扩展模块 | | +| module_type | string | 模块类型 | `MODULE_TYPE_EXTEND` | + +`module_extend` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| items | object[] | 项 | 套了个娃 | + +`module_extend.items[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| icon | string \| null | 图标 | | +| icon_svg | unknown | SVG 图版 | | +| jump_url | string | 跳转 URL | | +| text | string | 文本 | | + +**示例:** + +
+查看示例: + +```json +{ + "module_extend": { + "items": [ + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=HTML", + "text": "HTML" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=API", + "text": "API" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=BAC", + "text": "BAC" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=JavaScript", + "text": "JavaScript" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=Bilibili", + "text": "Bilibili" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=GitHub", + "text": "GitHub" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=Web", + "text": "Web" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=Chromium", + "text": "Chromium" + }, + { + "icon": null, + "jump_url": "//search.bilibili.com/all?keyword=DevTools", + "text": "DevTools" + } + ] + }, + "module_type": "MODULE_TYPE_EXTEND" +} +``` +
+ + + +### MODULE_TYPE_BOTTOM + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| module_bottom | object | 底部模块 | | +| module_type | string | 模块类型 | | + +`module_bottom` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| share_info | object | 分享信息 | | + +`module_bottom.share_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| pic | string | 图片 URL | | +| summary | string | 总结 | | +| title | string | 标题 | | + +**示例:** + +
+查看示例: + +```json +{ + "module_bottom": { + "share_info": { + "pic": "https://static.hdslb.com/mobile/img/app_logo.png", + "summary": "背景", + "title": "通过 DevTools 绕过 SSR 抓包某站专栏正文接口" + } + }, + "module_type": "MODULE_TYPE_BOTTOM" +} +``` +
+ + diff --git a/docs/opus/rich_text_nodes.md b/docs/opus/rich_text_nodes.md new file mode 100644 index 0000000..d3e36ed --- /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) diff --git a/docs/opus/space.md b/docs/opus/space.md new file mode 100644 index 0000000..56efa15 --- /dev/null +++ b/docs/opus/space.md @@ -0,0 +1,356 @@ +## 空间图文 + +## 获取用户空间图文 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/opus/feed/space + +*请求方法: GET* + +注: 该接口**只能**获取图文信息, 无法获取如转发动态一类的内容, 如需获取参见 [获取用户空间动态](docs/dynamic/space.md) + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ------ | ---- | ------ | ---- | +| host_mid | number | 被获取用户的 mid (UID) | 必要 | | +| page | number | 假装自己是分页信息 | 不必要 | 以 `1` 开始 | +| offset | number | 偏移信息 | 不必要 | 上一次返回的 `offset` (同时也是最后一条的 opus id), 默认为空 | +| type | string | 类型 | 不必要 | all: 全部 (默认)
article: 专栏
dynamic: 动态 | +| web_location | string | `333.1387` | 不必要 | | +| w_rid | string | WBI 签名 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | +| wts | number | UNIX 秒级时间戳 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| has_more | boolean | 是否还有更多 | | +| items | object[] | 信息本体 | | +| offset | string | 偏移信息 | 下次翻页请求时传入的 `offest` (同时也是最后一条的 opus id) | +| update_num | number | 更新数? | 0 | + +`data.items[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| content | string | 文本内容 | | +| cover | object? | 封面信息 | | +| jump_url | string | 跳转 URL | | +| opus_id | string | opus id | | +| stat | object | 统计信息 | | + +`data.items[].cover` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| height | number | 高度 | | +| url | string | 图片 URL | | +| width | number | 宽度 | | + +`data.items[].stat` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| like | string | 点赞数 | 是个字符串 | +| view | string | 浏览数 | 仅当获取登录状态下获取自己的时才存在, 也是个字符串 | + +**示例:** + +获取 `645769214` 空间的最近几条全部图文 + +```shell +curl 'https://api.bilibili.com/x/polymer/web-dynamic/v1/opus/feed/space' \ +--url-query 'host_mid=645769214' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "has_more": true, + "items": [ + { + "content": "我在 Google I/O 2025 的 puzzle 取得了获胜的优异成绩, 你也来试试吧", + "cover": { + "height": 1640, + "url": "http://i0.hdslb.com/bfs/new_dyn/a48c47c07bf19f07c01b489eb6b42e63645769214.jpg", + "width": 720 + }, + "jump_url": "//www.bilibili.com/opus/1057955152016703512", + "opus_id": "1057955152016703512", + "stat": { + "like": "1" + } + }, + { + "content": "通过 DevTools 绕过 SSR 抓包某站专栏正文接口", + "cover": { + "height": 430, + "url": "http://i0.hdslb.com/bfs/article/9071997152b6fec0ae465fe2a86b580e645769214.jpg", + "width": 768 + }, + "jump_url": "//www.bilibili.com/opus/1056353752004427792", + "opus_id": "1056353752004427792", + "stat": { + "like": "3" + } + }, + { + "content": "今天也是看上 Minecraft 大电影 了, 看的人几乎没有, 虽然看的是中配, 总体上感觉剧情有趣甚至有点小感动, 音乐也感觉不错, 价格也实惠", + "cover": { + "height": 4080, + "url": "http://i0.hdslb.com/bfs/new_dyn/408d4e2b2ad8df6873c303cf26f571db645769214.jpg", + "width": 3060 + }, + "jump_url": "//www.bilibili.com/opus/1052711525276450824", + "opus_id": "1052711525276450824", + "stat": { + "like": "3" + } + }, + { + "content": "糟了没注意, 自己成小丑了", + "cover": { + "height": 1640, + "url": "http://i0.hdslb.com/bfs/new_dyn/6ebb3894cfab53966d6e440e4f5a905d645769214.jpg", + "width": 720 + }, + "jump_url": "//www.bilibili.com/opus/1051313732437671938", + "opus_id": "1051313732437671938", + "stat": { + "like": "3" + } + }, + { + "content": "好消息, 我免费了, 想玩的随时联系\nhttps://t.me/c/2148747379/77", + "cover": { + "height": 720, + "url": "http://i0.hdslb.com/bfs/new_dyn/fbc2b38406099df0bdaea47d08daa6f1645769214.jpg", + "width": 1640 + }, + "jump_url": "//www.bilibili.com/opus/1050579658107518984", + "opus_id": "1050579658107518984", + "stat": { + "like": "2" + } + }, + { + "content": "认真的, 我的 Linux 发行版是 Android", + "cover": { + "height": 1080, + "url": "http://i0.hdslb.com/bfs/new_dyn/3e512d84361323c319f79061d2f078d1645769214.jpg", + "width": 1440 + }, + "jump_url": "//www.bilibili.com/opus/1032607998809210903", + "opus_id": "1032607998809210903", + "stat": { + "like": "8" + } + }, + { + "content": "于学校机房启动 QEMU 珍贵影像", + "cover": { + "height": 1080, + "url": "http://i0.hdslb.com/bfs/new_dyn/2fdc7524449b029f8baf241d94663256645769214.jpg", + "width": 1440 + }, + "jump_url": "//www.bilibili.com/opus/993403941079220225", + "opus_id": "993403941079220225", + "stat": { + "like": "3" + } + }, + { + "content": "BAC 正处于历史以来最困难的时期 - 中秋考古有感", + "cover": { + "height": 188, + "url": "https://i0.hdslb.com/bfs/article/0c9b5e20356e07f89a8bb7769fef8eeb645769214.jpg", + "width": 640 + }, + "jump_url": "//www.bilibili.com/opus/985444108243828741", + "opus_id": "985444108243828741", + "stat": { + "like": "7" + } + }, + { + "content": "发送文件到手机的 N 种正确姿势", + "cover": { + "height": 420, + "url": "http://i0.hdslb.com/bfs/article/56a4024abebf7ed1166a1d247bb5cf64645769214.jpg", + "width": 750 + }, + "jump_url": "//www.bilibili.com/opus/971804623539011587", + "opus_id": "971804623539011587", + "stat": { + "like": "8" + } + }, + { + "content": "我在朝鲜?", + "cover": { + "height": 468, + "url": "http://i0.hdslb.com/bfs/new_dyn/ea12cca6abd75fe3fb5ad1abd1f347d3645769214.png", + "width": 474 + }, + "jump_url": "//www.bilibili.com/opus/971255284349534210", + "opus_id": "971255284349534210", + "stat": { + "like": "5" + } + }, + { + "content": "一周没上 B 站就 99+ 了?", + "cover": { + "height": 284, + "url": "http://i0.hdslb.com/bfs/new_dyn/9e3b889fd2dc75e9bae38a13e55fee26645769214.png", + "width": 165 + }, + "jump_url": "//www.bilibili.com/opus/970197833343827970", + "opus_id": "970197833343827970", + "stat": { + "like": "6" + } + }, + { + "content": "今天因为Linux被骂, 决定放弃支持 Windows. 而且明天要开始军训了, 将停更若干时间, 遂发此动态, 望不知.", + "cover": { + "height": 1080, + "url": "http://i0.hdslb.com/bfs/new_dyn/0f6f939334104ddc347566514fa4bfa7645769214.jpg", + "width": 1440 + }, + "jump_url": "//www.bilibili.com/opus/967717348014293017", + "opus_id": "967717348014293017", + "stat": { + "like": "73" + } + }, + { + "content": "我的萌ICP备案通过了!", + "cover": { + "height": 2712, + "url": "http://i0.hdslb.com/bfs/new_dyn/0a9bb3e82bbefe499b10b7fd02f2a4f4645769214.jpg", + "width": 1220 + }, + "jump_url": "//www.bilibili.com/opus/956241611959828547", + "opus_id": "956241611959828547", + "stat": { + "like": "1" + } + }, + { + "content": "新年第一个AP", + "cover": { + "height": 1220, + "url": "https://album.biliimg.com/bfs/new_dyn/ea5a39d37a4a1f20f32b25bfed466004645769214.jpg", + "width": 2712 + }, + "jump_url": "//www.bilibili.com/opus/896448108088524805", + "opus_id": "896448108088524805", + "stat": { + "like": "1" + } + }, + { + "content": "新年快乐?", + "cover": { + "height": 605, + "url": "https://album.biliimg.com/bfs/new_dyn/dab5d3e2ff03027215e5bfd4933abe45645769214.jpg", + "width": 1220 + }, + "jump_url": "//www.bilibili.com/opus/896342627995090966", + "opus_id": "896342627995090966", + "stat": { + "like": "1" + } + }, + { + "content": "我回苏州了", + "cover": { + "height": 1280, + "url": "https://album.biliimg.com/bfs/new_dyn/65c880f64997fab0c79527649d7fbe1b645769214.png", + "width": 720 + }, + "jump_url": "//www.bilibili.com/opus/831507996405137432", + "opus_id": "831507996405137432", + "stat": { + "like": "1" + } + }, + { + "content": "Phigros RKS 12 纪念", + "cover": { + "height": 720, + "url": "https://album.biliimg.com/bfs/new_dyn/dab03003aee2166987428857acbf4ffb645769214.png", + "width": 1280 + }, + "jump_url": "//www.bilibili.com/opus/830690195959447605", + "opus_id": "830690195959447605", + "stat": { + "like": "0" + } + }, + { + "content": "现在知道B站推荐机制有多烂了吧", + "cover": { + "height": 1280, + "url": "https://album.biliimg.com/bfs/new_dyn/05a5f769bed2705d2c8c3c69f60441df645769214.png", + "width": 720 + }, + "jump_url": "//www.bilibili.com/opus/829284474633060387", + "opus_id": "829284474633060387", + "stat": { + "like": "0" + } + }, + { + "content": "求证: B站创始人们的成分\n证: [图片]", + "cover": { + "height": 1600, + "url": "https://album.biliimg.com/bfs/new_dyn/830a9bbc3d5179a6d33af97e5baac7c8645769214.jpg", + "width": 720 + }, + "jump_url": "//www.bilibili.com/opus/828071498582327315", + "opus_id": "828071498582327315", + "stat": { + "like": "1" + } + }, + { + "content": "如果排除掉可能的误差, 14=12.", + "cover": { + "height": 720, + "url": "https://album.biliimg.com/bfs/new_dyn/79823dd0b617af6fc71126d6e042de3f645769214.png", + "width": 1280 + }, + "jump_url": "//www.bilibili.com/opus/827727935543705620", + "opus_id": "827727935543705620", + "stat": { + "like": "1" + } + } + ], + "offset": "827727935543705620", + "update_num": 0 + }, + "message": "0", + "ttl": 1 +} +``` +
+ + diff --git a/docs/search/hot.md b/docs/search/hot.md new file mode 100644 index 0000000..6c7cdb9 --- /dev/null +++ b/docs/search/hot.md @@ -0,0 +1,693 @@ +# 默认搜索&热搜 + +## 获取默认搜索内容(web端) + +> https://api.bilibili.com/x/web-interface/wbi/search/default + +> ~~https://api.bilibili.com/x/web-interface/search/default~~ (旧链接) + +*请求方式:GET* + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +默认搜索为搜索框中默认填充内容,用于官方推荐内容,若不输入点击搜索按钮跳转为`url`中的链接 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | --------------- | -------------- | +| seid | str | 搜索seid | | +| id | num | 默认搜索id | | +| type | num | 0 | | +| show_name | str | 显示文字 | | +| name | str | 空 | | +| goto_type | num | 跳转类型 | 1:视频 | +| goto_value | str | 搜索目标id | 视频:稿件avid | +| url | str | 搜索目标跳转url | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/web-interface/search/default' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "seid": "17607543598496143098", + "id": 3296036255232726331, + "type": 0, + "show_name": "歪果仁在中国做模特能赚多少钱?", + "name": "", + "goto_type": 1, + "goto_value": "243920322", + "url": "https://www.bilibili.com/video/BV1Tv411q7gx" + } +} +``` + +
+ +## 获取热搜列表 + +> https://api.bilibili.com/x/web-interface/wbi/search/square +> ~~https://api.bilibili.com/x/web-interface/search/square~~ + +*请求方式: GET* + +**URL参数:** + +|参数名|类型|内容|必要性|备注| +|-|-|-|-|-| +|limit|num|结果限制|必要|范围 [1, 50]| +|platform|str|平台标识|不必要|web: web 端| + +**JSON回复:** + +根对象: + +|字段|类型|内容|备注| +|-|-|-|-| +|code|num|返回值|0: 成功
-400: 请求错误| +|message|str|错误信息|默认为空| +|ttl|num|1|| +|data|obj|数据本体|| + +`data`对象: + +|字段|类型|内容|备注| +|-|-|-|-| +|trending|obj|热搜榜单|套了个娃| + +`data`中的`trending`对象: + +|字段|类型|内容|备注| +|-|-|-|-| +|title|str|标题|| +|trackid|str|跟踪 ID?|| +|list|array|热搜列表|| +|top_list|array|空|| + +`trending`中的`list`数组: + +|项|类型|内容|备注| +|-|-|-|-| +|0|obj|热搜 1|| +|1|obj|热搜 2|| +|……|obj|……|| +|n|obj|热搜 (n+1)|| + +`list`数组中的对象: + +|字段|类型|内容|备注| +|-|-|-|-| +|keyword|str|关键词|| +|show_name|str|显示文字|| +|icon|str|图标 URL|| +|uri|str|空|| +|goto|str|空|| + +**示例:** + +获取热搜列表, 数量限制 4 + +```shell +curl -G --url 'https://api.bilibili.com/x/web-interface/search/square' \ +--url-query 'limit=4' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "trending": { + "title": "bilibili热搜", + "trackid": "8079760748892487175", + "list": [ + { + "keyword": "马克龙祝贺中国世界前两名", + "show_name": "马克龙祝贺中国世界前两名", + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png", + "uri": "", + "goto": "" + }, + { + "keyword": "小孩电竞世界杯夺冠", + "show_name": "小孩电竞世界杯夺冠", + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png", + "uri": "", + "goto": "" + }, + { + "keyword": "孙颖莎说我全勤下班了", + "show_name": "孙颖莎说我全勤下班了", + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png", + "uri": "", + "goto": "" + }, + { + "keyword": "7月广东新冠新增一万余例", + "show_name": "7月广东新冠新增一万余例", + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png", + "uri": "", + "goto": "" + } + ], + "top_list": [] + } + } +} +``` + +
+ +## 获取热搜列表(web端) + +> https://s.search.bilibili.com/main/hotword + +*请求方式:GET* + +榜单每隔固定时间统计一次,请求后返回搜索前10的关键词 + +带有转义 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------------ | ------------- | +| exp_str | str | ??? | | +| code | num | 返回值 | 0:成功 | +| cost | obj | 详细搜索用时 | 大概是吧? | +| seid | str | 搜索seid | | +| timestamp | num | 榜单统计时间 | 时间戳 | +| message | str | 错误信息 | 默认为success | +| list | array | 热搜列表 | | + +`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------ | +| 0 | obj | 榜单第1名 | | +| n | obj | 榜单第(n+1)名 | 按照名次顺序 | +| 10 | obj | 榜单第10名 | 最后一项 | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ------- | +| status | str | 空 | | +| hot_id | num | 热词id | 大概是吧? | +| keyword | str | 关键词 | | +| resource_id| num | 资源id | | +| goto_type | num | 0 | | +| res | array| null | | +| show_name | str | 完整关键词| | +| pos | num | 名次 | 1-10 | +| word_type | num | 条目属性 | 4: 新
5: 热
6: [雾,咒,小丑(愚人节)] 具体看icon7: 直播中
8: 默认(无标签)
9: 梗
11: 话题
12: 独家 | +| id | num | 名次 | 1-10 | +| goto_value | str | 空 | | +| live_id | array| null | | +| name_type | str | 空 | | +| icon | str | 图标url | | + +**示例:** + +```shell +curl 'https://s.search.bilibili.com/main/hotword' +``` + +
+查看响应示例: + +```json +{ + "exp_str": "8104#8200#8300#8401#8500#5502#6699", + "code": 0, + "cost": { + "reas_request": "0.001895", + "params_check": "0.000127", + "reas_response_format": "0.000098", + "deserialize_response": "0.000080", + "reas_request_format": "0.000076", + "total": "0.002479", + "main_handler": "0.002252" + }, + "seid": "9318821020548476185", + "timestamp": 1596034742, + "message": "success", + "list": [{ + "status": "", + "hot_id": 11003, + "keyword": "流浪地球2刘德华", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "流浪地球2刘德华造型", + "pos": 1, + "word_type": 8, + "id": 1, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png" + }, + { + "status": "", + "hot_id": 11012, + "keyword": "QQ飞车手游飞跃黄河", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "QQ飞车手游飞跃黄河", + "pos": 2, + "word_type": 8, + "id": 2, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png" + }, + { + "status": "", + "hot_id": 10996, + "keyword": "西工大遭网络攻击最新调查", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "西工大遭网络攻击最新调查", + "pos": 3, + "word_type": 8, + "id": 3, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png" + }, + { + "status": "", + "hot_id": 11004, + "keyword": "EDG 起诉", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "EDGJieJie已起诉多家企业", + "pos": 4, + "word_type": 8, + "id": 4, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png" + }, + { + "status": "", + "hot_id": 10992, + "keyword": "隐入尘烟", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "隐入尘烟全平台下架", + "pos": 5, + "word_type": 8, + "id": 5, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png" + }, + { + "status": "", + "hot_id": 10987, + "keyword": "原神半年内最良心封神池", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "原神半年内最良心封神池", + "pos": 6, + "word_type": 8, + "id": 6, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "" + }, + { + "status": "", + "hot_id": 10988, + "keyword": "高校回应设国内首个元宇宙院系", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "高校回应设国内首个元宇宙院系", + "pos": 7, + "word_type": 8, + "id": 7, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "" + }, + { + "status": "", + "hot_id": 10994, + "keyword": "美宇宙飞船成功撞击小行星", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "美宇宙飞船成功撞击小行星", + "pos": 8, + "word_type": 8, + "id": 8, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "" + }, + { + "status": "", + "hot_id": 10991, + "keyword": "你薅的羊毛可能已违法", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "你薅的羊毛可能已违法", + "pos": 9, + "word_type": 8, + "id": 9, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "" + }, + { + "status": "", + "hot_id": 11013, + "keyword": "辛普森一家", + "resource_id": 0, + "goto_type": 0, + "res": [ + + ], + "show_name": "辛普森一家", + "pos": 10, + "word_type": 8, + "id": 10, + "goto_value": "", + "live_id": [ + + ], + "name_type": "", + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png" + } + ] +} +``` + +
+ +## 获取热搜列表(手机端) + +> https://app.bilibili.com/x/v2/search/trending/ranking + +*请求方式:GET* + +榜单每隔固定时间统计一次 + +带有转义 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ---------------- | ------ | ---- | +| limit | num | 热搜数量 | 非必要 | 留空为20, 最大为100 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------------ | ------------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 返回值 | 默认为1 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------ | +| trackid | num | | 不知用途 | +| list | array | 热搜列表 | | + +`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------ | +| 0 | obj | 榜单第1名 | | +| n | obj | 榜单第(n+1)名 | 按照名次顺序 | +| 20/limit | obj | 榜单第20名 | 最后一项 | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ------- | +| position | num | 名次 | 1-20/limit | +| keyword | str | 关键词 | | +| show_name | str | 完整关键词| | +| word_type | num | 条目属性 | 同 web 端 | +| icon | str | 图标url | | +| hot_id | num | 热词id | 大概是吧? | + +**示例:** + +```shell +curl 'https://app.bilibili.com/x/v2/search/trending/ranking' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "trackid": "2578006123492681222", + "list": [{ + "position": 1, + "keyword": "列车延误乘务员哽咽安抚乘客", + "show_name": "列车延误乘务员哽咽安抚乘客", + "word_type": 5, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png", + "hot_id": 107814, + "is_commercial": "0" + }, { + "position": 2, + "keyword": "黑神话悟空首次线下试玩", + "show_name": "黑神话悟空首次线下试玩", + "word_type": 5, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png", + "hot_id": 107781, + "is_commercial": "0" + }, { + "position": 3, + "keyword": "22万人打出9.9分的动画", + "show_name": "22万人打出9.9分的动画", + "word_type": 6, + "icon": "https://i0.hdslb.com/bfs/legacy/463fa23613670218608e68247a137dd071c0e9c8.png", + "hot_id": 107818, + "is_commercial": "0" + }, { + "position": 4, + "keyword": "冰冻近五万年线虫被复活", + "show_name": "冰冻近五万年线虫被复活", + "word_type": 5, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png", + "hot_id": 107774, + "is_commercial": "0" + }, { + "position": 5, + "keyword": "LNG前任和现任的较量", + "show_name": "LNG前任和现任的较量", + "word_type": 4, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png", + "hot_id": 107853, + "is_commercial": "0" + }, { + "position": 6, + "keyword": "LOL手游剑姬女警新皮", + "show_name": "LOL手游剑姬女警新皮", + "word_type": 8, + "hot_id": 107841, + "is_commercial": "0" + }, { + "position": 7, + "keyword": "抽奖中金条却因过号被取消", + "show_name": "抽奖中金条却因过号被取消", + "word_type": 8, + "hot_id": 107817, + "is_commercial": "0" + }, { + "position": 8, + "keyword": "雪王到长城开蜜雪冰城", + "show_name": "雪王到长城开蜜雪冰城", + "word_type": 4, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png", + "hot_id": 107849, + "is_commercial": "0" + }, { + "position": 9, + "keyword": "堡垒之夜联动终结者", + "show_name": "堡垒之夜联动终结者", + "word_type": 8, + "hot_id": 107846, + "is_commercial": "0" + }, { + "position": 10, + "keyword": "王者新英雄海诺动画", + "show_name": "王者新英雄海诺动画", + "word_type": 4, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png", + "hot_id": 107870, + "is_commercial": "0" + }, { + "position": 11, + "keyword": "周星驰功夫10万字拆解", + "show_name": "周星驰功夫10万字拆解", + "word_type": 4, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png", + "hot_id": 107848, + "is_commercial": "0" + }, { + "position": 12, + "keyword": "张杰铁粉彭奶奶去世", + "show_name": "张杰铁粉彭奶奶去世", + "word_type": 4, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png", + "hot_id": 107840, + "is_commercial": "0" + }, { + "position": 13, + "keyword": "李玟二姐回应礼服争议", + "show_name": "李玟二姐回应礼服争议", + "word_type": 8, + "hot_id": 107833, + "is_commercial": "0" + }, { + "position": 14, + "keyword": "洪水中飘来冰箱市民取走饮料", + "show_name": "洪水中飘来冰箱市民取走饮料", + "word_type": 8, + "hot_id": 107802, + "is_commercial": "0" + }, { + "position": 15, + "keyword": "LOL斗魂觉醒佛耶戈语音", + "show_name": "LOL斗魂觉醒佛耶戈语音", + "word_type": 8, + "hot_id": 107790, + "is_commercial": "0" + }, { + "position": 16, + "keyword": "全面落实带薪休假制度", + "show_name": "全面落实带薪休假制度", + "word_type": 4, + "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png", + "hot_id": 107839, + "is_commercial": "0" + }, { + "position": 17, + "keyword": "花少北 把病娇治好了", + "show_name": "花少北 把病娇治好了", + "word_type": 8, + "hot_id": 107782, + "is_commercial": "0" + }, { + "position": 18, + "keyword": "2.28米高的村超娃", + "show_name": "2.28米高的村超娃", + "word_type": 8, + "hot_id": 107805, + "is_commercial": "0" + }, { + "position": 19, + "keyword": "当在动漫中不小心撞到", + "show_name": "当在动漫中不小心撞到", + "word_type": 8, + "hot_id": 107832, + "is_commercial": "0" + }, { + "position": 20, + "keyword": "台风卡努路径趋向日本", + "show_name": "台风卡努路径趋向日本", + "word_type": 8, + "hot_id": 107800, + "is_commercial": "0" + }], + "exp_str": "8000#5508#6604#7703", + "hotword_egg_info": "0" + } +} +``` + +
diff --git a/docs/search/search_request.md b/docs/search/search_request.md new file mode 100644 index 0000000..038c8f7 --- /dev/null +++ b/docs/search/search_request.md @@ -0,0 +1,1440 @@ +# 搜索 + +> **B站于2022年8月24日更新了搜索api,增加了一大堆Cookies的校验,如果Cookies不足会返回-412搜索被拦截。如果没有cookies的话,请在搜索之前先GET一遍 https://bilibili.com 以获取cookies** + +## 综合搜索(web端) + +> https://api.bilibili.com/x/web-interface/wbi/search/all/v2 + +> ~~https://api.bilibili.com/x/web-interface/search/all/v2~~ (旧链接) + +*方式:GET* + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md), Cookie 中含有 [`buvid3`](../misc/buvid3_4.md) 字段 + +返回和关键字相关的20条信息 + +综合搜索为默认搜索方式,主要用于优先搜索用户、影视、番剧、游戏、话题等,并加载第一页的20项相关视频,还用于展示各个类型的结果数目,便于进一步分类搜索 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ---------------- | ------ | ---- | +| keyword | str | 需要搜索的关键词 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-412:请求被拦截 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ----- | ---------------- | ---------------- | +| seid | str | 搜索id | | +| page | num | 页数 | 固定为1 | +| page_size | num | 每页条数 | 固定为20 | +| numResults | num | 总条数 | 最大值为1000 | +| numPages | num | 分页数 | 最大值为50 | +| suggest_keyword | str | 空 | **作用尚不明确** | +| rqt_type | str | search | **作用尚不明确** | +| cost_time | obj | 详细搜索用时 | 大概是吧? | +| exp_list | obj | ??? | **作用尚不明确** | +| egg_hit | num | 0 | **作用尚不明确** | +| pageinfo | obj | 分类页数信息 | | +| top_tlist | obj | 分类结果数目信息 | | +| show_column | num | 0 | **作用尚不明确** | +| show_module_list | array | 返回结果类型列表 | | +| result | array | 结果列表 | | + +`data`中的`cost_time`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ---- | ---- | +| params_check | str | | | +| illegal_handler | str | | | +| as_response_format | str | | | +| as_request | str | | | +| save_cache | str | | | +| deserialize_response | str | | | +| as_request_format | str | | | +| total | str | | | +| main_handler | str | | | + +`data`中的`pageinfo`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | -------- | ---- | +| pgc | obj | - | | +| live_room | obj | 直播数 | | +| photo | obj | 相簿数 | | +| topic | obj | 话题数 | | +| video | obj | 视频数 | | +| user | obj | - | | +| bili_user | obj | 用户数 | | +| media_ft | obj | 电影数 | | +| article | obj | 专栏数 | | +| media_bangumi | obj | 番剧数 | | +| special | obj | - | | +| operation_card | obj | - | | +| upuser | obj | - | | +| movie | obj | - | | +| live_all | obj | - | | +| tv | obj | - | | +| live | obj | 直播间数 | | +| bangumi | obj | - | | +| activity | obj | 活动数 | | +| live_master | obj | - | | +| live_user | obj | 主播数 | | + +`pageinfo`中的所有对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ---- | +| numResults | num | 总计数量 | | +| total | num | 总计数量 | | +| pages | num | 分页数量 | | + +`data`中的`top_tlist`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | -------- | ---- | +| pgc | num | - | | +| live_room | num | 直播数 | | +| photo | num | 相簿数 | | +| topic | num | 话题数 | | +| video | num | 视频数 | | +| user | num | - | | +| bili_user | num | 用户数 | | +| media_ft | num | 电影数 | | +| article | num | 专栏数 | | +| media_bangumi | num | 番剧数 | | +| card | num | - | | +| operation_card | num | - | | +| upuser | num | - | | +| movie | num | - | | +| live_all | num | - | | +| tv | num | - | | +| live | num | 直播间数 | | +| special | num | - | | +| bangumi | num | - | | +| activity | num | 活动数 | | +| live_master | num | - | | +| live_user | num | 主播数 | | + +`data`中的`show_module_list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | str | activity | | +| 1 | str | web_game | 游戏 | +| 2 | str | card | | +| 3 | str | media_bangumi | 番剧 | +| 4 | str | media_ft | 电影 | +| 5 | str | bili_user | 用户 | +| 6 | str | user | | +| 7 | str | star | | +| 8 | str | video | 视频 | + +`data`中的`result`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| 0 | obj | - | | +| 1 | obj | 游戏结果 | | +| 2 | obj | - | | +| 3 | obj | 番剧结果 | | +| 4 | obj | 电影结果 | | +| 5 | obj | 用户结果 | | +| 6 | obj | - | | +| 7 | obj | - | | +| 8 | obj | 视频结果 | | + +`result`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | -------- | ------------------------------ | +| result_type | str | 结果类型 | 与`result`数组对应的项相同 | +| data | array | 搜索结果 | 结果为该项所对应的对象条目格式 | + +`result`数组中的对象中的`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---------------------------------------- | +| 0 | obj | 搜索结果1 | 对象详情见[搜索结果](search_response.md) | +| n | obj | 搜索结果(n+1) | 按照参数指定的顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +使用综合搜索进行搜索关键字`洛天依` + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/search/all/v2' \ +--data-urlencode 'keyword=洛天依' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "seid": "8850295244740510044", + "page": 1, + "pagesize": 20, + "numResults": 1000, + "numPages": 50, + "suggest_keyword": "", + "rqt_type": "search", + "cost_time": { + "params_check": "0.000496", + "get upuser live status": "0.002325", + "illegal_handler": "0.000118", + "as_response_format": "0.007020", + "mysql_request": "0.000054", + "as_request": "0.099139", + "as_request_format": "0.002199", + "deserialize_response": "0.000342", + "total": "0.109753", + "main_handler": "0.109041" + }, + "exp_list": { + "5520": true + }, + "egg_hit": 0, + "pageinfo": { + "pgc": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "live_room": { + "numResults": 1, + "total": 1, + "pages": 1 + }, + "photo": { + "numResults": 1000, + "total": 1000, + "pages": 50 + }, + "bili_user": { + "numResults": 548, + "total": 548, + "pages": 28 + }, + "topic": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "video": { + "numResults": 1000, + "total": 1000, + "pages": 50 + }, + "user": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "article": { + "numResults": 1000, + "total": 1000, + "pages": 50 + }, + "media_ft": { + "numResults": 1, + "total": 1, + "pages": 1 + }, + "media_bangumi": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "special": { + "numResults": 14, + "total": 14, + "pages": 1 + }, + "operation_card": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "upuser": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "movie": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "live_all": { + "numResults": 2, + "total": 2, + "pages": 1 + }, + "tv": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "live": { + "numResults": 773, + "total": 773, + "pages": 39 + }, + "bangumi": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "activity": { + "numResults": 0, + "total": 0, + "pages": 0 + }, + "live_master": { + "numResults": 1, + "total": 1, + "pages": 1 + }, + "live_user": { + "numResults": 772, + "total": 772, + "pages": 39 + } + }, + "top_tlist": { + "pgc": 0, + "live_room": 1, + "photo": 1000, + "bili_user": 548, + "topic": 0, + "video": 1000, + "user": 0, + "article": 1000, + "media_ft": 1, + "media_bangumi": 0, + "card": 0, + "operation_card": 0, + "upuser": 0, + "movie": 0, + "tv": 0, + "live": 2, + "special": 14, + "bangumi": 0, + "activity": 0, + "live_master": 1, + "live_user": 772 + }, + "show_column": 0, + "show_module_list": [ + "bili_user", + "user", + "activity", + "web_game", + "card", + "media_bangumi", + "media_ft", + "star", + "video" + ], + "result": [ + { + "result_type": "bili_user", + "data": [ + { + "type": "bili_user", + "mid": 36081646, + "uname": "洛天依", + "usign": "上海禾念Vsinger旗下歌手,世界第一位VOCALOID中文虚拟歌姬。投食请戳:luotianyi@sh-henian.com", + "fans": 1982688, + "videos": 45, + "upic": "//i2.hdslb.com/bfs/face/cc96d1d6bf76f8198263f9083921997ab3a80d8b.jpg", + "verify_info": "", + "level": 6, + "gender": 2, + "is_upuser": 1, + "is_live": 0, + "room_id": 1546736, + "res": [ + { + "aid": 753839250, + "bvid": "BV1Hk4y1B7Cx", + "title": "【洛天依】2020.7.12洛天依生日会", + "pubdate": 1594559234, + "arcurl": "http://www.bilibili.com/video/av753839250", + "pic": "//i2.hdslb.com/bfs/archive/5347eafb5a65ad9a9ffc39063d686772ea1298c4.jpg", + "play": "269428", + "dm": 30648, + "coin": 33838, + "fav": 24066, + "desc": "从2012年一路走至2020年,8年间刻画下的无数回忆,都在生日会上娓娓道来。\n大家的每一次应援,每一条弹幕都无可替代,都凝结着无可比拟的珍贵回忆。\n希望天依的歌声能鼓起每个人心中的勇气,跨过悲伤、无力,去迎接希望。\n愿我们一同携手成长~相扶相伴。\n天依的首张官方数字专辑也已经上线,等你来听。\n试听: BV1Tp4y1S7cu\n购买:https://y.music.163.com/m/album?id=92206376", + "duration": "58:6", + "is_pay": 0, + "is_union_video": 0 + }, + { + "aid": 968772260, + "bvid": "BV1Tp4y1S7cu", + "title": "【洛天依原创曲】万分之一的光", + "pubdate": 1594557008, + "arcurl": "http://www.bilibili.com/video/av968772260", + "pic": "//i1.hdslb.com/bfs/archive/67c6118e4f94bee89b984525ca665fc88c969cac.jpg", + "play": "333322", + "dm": 9323, + "coin": 39961, + "fav": 29818, + "desc": "8年间我们一起经历了许多,有欢乐也有悲伤,有相遇自然也有别离,但曾相处的日子永远那么辉光闪耀。\n感谢你成为我的光芒,而我也会是你万分之一的光。\n\n音乐:ChiliChill\n贝斯:山口進也\n鼓手:口口口口口\n调校:动点P\n弦乐编配:胡静成 / ChiliChill\n小提琴:庞阔 / 张浩\n中提琴:毕芳\n大提琴:郎莹\n监制:人形兎\n出品:Vsinger", + "duration": "4:12", + "is_pay": 0, + "is_union_video": 1 + }, + { + "aid": 883803983, + "bvid": "BV1kK4y1s7Dd", + "title": "洛天依2020官方专辑《Moments》试听PV", + "pubdate": 1594526467, + "arcurl": "http://www.bilibili.com/video/av883803983", + "pic": "//i1.hdslb.com/bfs/archive/2ff004df9d98e2a78531c6400ee8e823fb30e6f4.jpg", + "play": "205340", + "dm": 7748, + "coin": 18792, + "fav": 14222, + "desc": "8是数字也是象征;\n∞是循环也是无限;\n \n音乐给予了我诞生和成长的力量,让我不断汲取养分,直至冲破险阻向阳生长;\n音乐让我更加幸运,在曾经未知的道路上遇见属于我们彼此的蓝色星光;\n那些一路上的美好,我都想和你们一起收集,瞬间即永恒。\n\n--------Staff--------\n作曲:Chilichill / COP / 人形兎 / 纯白P / 花之祭P / 希望索任合资 / 银临 / JUSF周存\n作词: Chilichill / COP / 人形兎 / 果汁凉菜 / 沈病娇 / 南岐 / 冥凰 / ", + "duration": "3:44", + "is_pay": 0, + "is_union_video": 0 + } + ], + "official_verify": { + "type": 0, + "desc": "洛天依官方账号" + }, + "hit_columns": [ + "uname" + ] + } + ] + }, + { + "result_type": "user", + "data": [] + }, + { + "result_type": "activity", + "data": [] + }, + { + "result_type": "web_game", + "data": [] + }, + { + "result_type": "card", + "data": [] + }, + { + "result_type": "media_bangumi", + "data": [] + }, + { + "result_type": "media_ft", + "data": [] + }, + { + "result_type": "star", + "data": [] + }, + { + "result_type": "video", + "data": [ + { + "type": "video", + "id": 753839250, + "author": "洛天依", + "mid": 36081646, + "typeid": "30", + "typename": "VOCALOID·UTAU", + "arcurl": "http://www.bilibili.com/video/av753839250", + "aid": 753839250, + "bvid": "BV1Hk4y1B7Cx", + "title": "【洛天依】2020.7.12洛天依生日会", + "description": "从2012年一路走至2020年,8年间刻画下的无数回忆,都在生日会上娓娓道来。\n大家的每一次应援,每一条弹幕都无可替代,都凝结着无可比拟的珍贵回忆。\n希望天依的歌声能鼓起每个人心中的勇气,跨过悲伤、无力,去迎接希望。\n愿我们一同携手成长~相扶相伴。\n天依的首张官方数字专辑也已经上线,等你来听。\n试听: BV1Tp4y1S7cu\n购买:https://y.music.163.com/m/album?id=92206376", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/5347eafb5a65ad9a9ffc39063d686772ea1298c4.jpg", + "play": 269428, + "video_review": 30648, + "favorites": 24066, + "tag": "VSINGER,洛天依生日快乐,2020洛天依生日会,洛天依生日会,VOCALOID,洛天依", + "review": 4391, + "pubdate": 1594559234, + "senddate": 1594559234, + "duration": "58:6", + "badgepay": false, + "hit_columns": [ + "title", + "author", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 102616359 + }, + { + "type": "video", + "id": 753460703, + "author": "低调的黑叔", + "mid": 22065421, + "typeid": "25", + "typename": "MMD·3D", + "arcurl": "http://www.bilibili.com/video/av753460703", + "aid": 753460703, + "bvid": "BV1Zk4y1B7bn", + "title": "【4K/布料/水手服】洛天依 - GimmexGimme", + "description": "喜欢本期4K请点个关注并长按视频下方大拇指一键三连拜托啦这对我真的很重要\n\nModel:\niRon0129/夏夜/Tda様/やまもと/Samsink(机动战士牛肉)\n\nMotion:\nシガー\n\nSailor Suit:\n星音\n\nStage:\nG_Wuuuuu\n\nRenderer:\nToolbag 3\n\nMusic:\n【初音ミク×鏡音リン】Gimme×Gimme【八王子P×Giga】", + "arcrank": "0", + "pic": "//i1.hdslb.com/bfs/archive/d1bd3d4d12b1e115ce82463853ff791a45472f1f.jpg", + "play": 809854, + "video_review": 1189, + "favorites": 47632, + "tag": "自制,3D,TDA,动画,百万剪辑师挑战,洛天依,美腿,舞蹈MMD,4K", + "review": 798, + "pubdate": 1591367468, + "senddate": 1591404973, + "duration": "1:11", + "badgepay": false, + "hit_columns": [ + "title", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 102465557 + }, + { + "type": "video", + "id": 10131337, + "author": "赛亚♂sya", + "mid": 157056, + "typeid": "30", + "typename": "VOCALOID·UTAU", + "arcurl": "http://www.bilibili.com/video/av10131337", + "aid": 10131337, + "bvid": "BV1fx411U7Kg", + "title": "【洛天依原创】自言自语", + "description": "词曲编调绘:Sya;混音:JUSF周存;简介你随便拿个之前的复制粘贴就行", + "arcrank": "0", + "pic": "//i0.hdslb.com/bfs/archive/e5aab7ddab3e060854e420edae6c5282cbe09324.jpg", + "play": 746480, + "video_review": 4665, + "favorites": 49097, + "tag": "黑洛,诚信代投,自言自语,洛天依,VOCALOID中文曲,原创,高级一图流,自x自x,自A自B系列,赛亚♂sya,JUSF周存", + "review": 7310, + "pubdate": 1493282828, + "senddate": 1542308981, + "duration": "4:14", + "badgepay": false, + "hit_columns": [ + "title", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 102432728 + }, + ………… + ] + } + ] + } +} +``` + +
+ +## 分类搜索(web端) + +> https://api.bilibili.com/x/web-interface/wbi/search/type + +> ~~https://api.bilibili.com/x/web-interface/search/type~~ (旧链接) + +*请求方式:GET* + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md), Cookie 中含有 [`buvid3`](../misc/buvid3_4.md) 字段, Referer 在 `.bilibili.com` 下, User-Agent 不含敏感子串 + +根据关键词进行搜索,返回结果每页20项 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| search_type | str | 搜索目标类型 | 必要 | 视频:video
番剧:media_bangumi
影视:media_ft
直播间及主播:live
直播间:live_room
主播:live_user
专栏:article
话题:topic
用户:bili_user
相簿:photo | +| keyword | str | 需要搜索的关键词 | 必要 | | +| order | str | 结果排序方式 | 非必要 | 搜索类型为视频、专栏及相簿时:
默认为totalrank
综合排序:totalrank
最多点击:click
最新发布:pubdate
最多弹幕:dm
最多收藏:stow
最多评论:scores
最多喜欢:attention(仅用于专栏)
----------------------------
搜索结果为直播间时:
默认为online
人气直播:online
最新开播:live_time
----------------------------
搜索结果为用户时:
默认为0
默认排序:0
粉丝数:fans
用户等级:level | +| order_sort | num | 用户粉丝数及等级排序顺序 | 非必要 | 仅用于搜索用户
默认为0
由高到低:0
由低到高:1 | +| user_type | num | 用户分类筛选 | 非必要 | 仅用于搜索用户
默认为0
全部用户:0
up主:1
普通用户:2
认证用户:3 | +| duration | num | 视频时长筛选 | 非必要 | 仅用于搜索视频
默认为0
全部时长:0
10分钟以下:1
10-30分钟:2
30-60分钟:3
60分钟以上:4 | +| tids | num | 视频分区筛选 | 非必要 | 仅用于搜索视频
默认为0
全部分区:0
筛选分区:目标分区tid | +| category_id | num | 专栏及相簿分区筛选 | 非必要 | 搜索结果为专栏时:
默认为0
全部分区:0
动画:2
游戏:1
影视:28
生活:3
兴趣:29
轻小说:16
科技:17
--------
搜索结果为相簿时:
默认为0
全部分区:0
画友:1
摄影:2 | +| page | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0: 成功
-400: 请求错误
-412: 请求被拦截
-1200: 被降级过滤的请求(搜索目标类型不存在) | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---------------------------------------------------------- | ------------ | ------------------------------ | +| seid | num | 搜索seid | | +| page | num | 当前页码 | | +| pagesize | num | 每页条数 | 固定20 | +| numResults | num | 总条数 | 最大值为1000 | +| numPages | num | 总计分页数 | 最大值为50 | +| suggest_keyword | str | 空 | **作用尚不明确** | +| rqt_type | str | search | **作用尚不明确** | +| cost_time | obj | 详细搜索用时 | 大概 | +| exp_list | obj | ??? | **作用尚不明确** | +| egg_hit | num | 0 | **作用尚不明确** | +| pageinfo | obj | 副分页信息 | 只在搜索类型为直播间及主播有效 | +| result | 搜索类型为直播间及主播时:obj
搜索类型为其他时:array | 结果列表 | | +| show_column | num | 0 | **作用尚不明确** | + +`data`中的`cost_time`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ---- | ---- | +| params_check | str | | | +| illegal_handler | str | | | +| as_response_format | str | | | +| as_request | str | | | +| save_cache | str | | | +| deserialize_response | str | | | +| as_request_format | str | | | +| total | str | | | +| main_handler | str | | | + +`data`中的`pageinfo`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------- | ---- | +| live_room | obj | 直播间信息 | | +| live_user | obj | 主播信息 | | + +`pageinfo`中的`live_room`及`live_user`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ---- | +| numPages | num | 总计页数 | | +| numResults | num | 总计项数 | | +| total | num | 总计项数 | | +| pages | num | 总计页数 | | + +**搜索类型为直播间及主播时:** + +`data`中的`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ---------- | ---- | +| live_room | array | 直播间信息 | | +| live_user | array | 主播信息 | | + +`result`中的`live_room`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | ---------------------------------------- | +| 0 | obj | 直播间搜索结果1 | 对象详情见[搜索结果](search_response.md) | +| n | obj | 直播间搜索结果(n+1) | 按照参数指定的顺序排列 | +| …… | obj | …… | …… | + +`result`中的`live_user`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---------------------------------------- | +| 0 | obj | 主播搜索结果1 | 对象详情见[搜索结果](search_response.md) | +| n | obj | 主播搜索结果(n+1) | 按照参数指定的顺序排列 | +| …… | obj | …… | …… | + +**搜索类型为其他时:** + +`data`中的`result`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---------------------------------------- | +| 0 | obj | 搜索结果1 | 对象详情见[搜索结果](search_response.md) | +| n | obj | 搜索结果(n+1) | 按照参数指定的顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +按照关键词` 少年 `搜索视频,默认排序,全部时长,全部分区,第1页 + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/search/type' \ +--data-urlencode 'search_type=video' \ +--data-urlencode 'keyword=少年' \ +--data-urlencode 'order=totalrank' \ +--data-urlencode 'duration=0' \ +--data-urlencode 'tids=0' \ +--data-urlencode 'page=1' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "seid": "9339963973663795027", + "page": 1, + "pagesize": 20, + "numResults": 1000, + "numPages": 50, + "suggest_keyword": "", + "rqt_type": "search", + "cost_time": { + "params_check": "0.000300", + "illegal_handler": "0.000077", + "as_response_format": "0.003071", + "as_request": "0.072525", + "save_cache": "0.001115", + "deserialize_response": "0.000310", + "as_request_format": "0.000319", + "total": "0.077996", + "main_handler": "0.076419" + }, + "exp_list": { + "5520": true + }, + "egg_hit": 0, + "result": [ + { + "type": "video", + "id": 243082173, + "author": "大橘爱吃猫", + "mid": 178932626, + "typeid": "193", + "typename": "MV", + "arcurl": "http://www.bilibili.com/video/av243082173", + "aid": 243082173, + "bvid": "BV1De411p77r", + "title": "梦然-《少年》官方版", + "description": "https://www.ixigua.com/i6822128361129640462/?logTag=EBTB5DTpBmxcfK1GYOOea\n梦然老师《少年》MV官方版,原版:西瓜视频搜索“抖音梦然-《少年》” 抖音搜索 “《少年》MV梦然。", + "arcrank": "0", + "pic": "//i0.hdslb.com/bfs/archive/e25120857a6298d1d4b9e64a805c023b5143c8ff.jpg", + "play": 1037655, + "video_review": 2616, + "favorites": 27341, + "tag": "华语MV,国语MV,梦然,少年,梦想,成长,循环,热歌", + "review": 1265, + "pubdate": 1588407050, + "senddate": 1588407051, + "duration": "4:18", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 105415949 + }, + { + "type": "video", + "id": 97387124, + "author": "小石头和孩子们", + "mid": 324914635, + "typeid": "31", + "typename": "翻唱", + "arcurl": "http://www.bilibili.com/video/av97387124", + "aid": 97387124, + "bvid": "BV1B7411R7a8", + "title": "你还是从前的那个少年吗?来自元气少女超甜的《少年》", + "description": "", + "arcrank": "0", + "pic": "//i1.hdslb.com/bfs/archive/8502088a888aeb37df7c4bd1b77d57aabae4f4d3.jpg", + "play": 1953494, + "video_review": 5934, + "favorites": 50883, + "tag": "全民音乐UP主,小石头和孩子们,少年,MV,翻唱,音乐推荐", + "review": 2963, + "pubdate": 1584581433, + "senddate": 1584581434, + "duration": "4:1", + "badgepay": false, + "hit_columns": [ + "title", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 101083208 + }, + { + "type": "video", + "id": 200115746, + "author": "似乎一脸懵逼", + "mid": 110939266, + "typeid": "22", + "typename": "鬼畜调教", + "arcurl": "http://www.bilibili.com/video/av200115746", + "aid": 200115746, + "bvid": "BV1Yz411b7A3", + "title": "【马化腾】我还是充钱那个少年,没有一丝丝改变~", + "description": "临时做的小作品\n音源:-提问-", + "arcrank": "0", + "pic": "//i1.hdslb.com/bfs/archive/078a9b50b4df8d25c2f586668741b30348604173.jpg", + "play": 1069066, + "video_review": 3198, + "favorites": 16321, + "tag": "黄绿合战5th-绿队应援,马化腾,鬼畜调教,腾讯,腾讯游戏,QQ,氪金,少年,我还是从前那个少年", + "review": 1438, + "pubdate": 1585650825, + "senddate": 1586310556, + "duration": "1:26", + "badgepay": false, + "hit_columns": [ + "title", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100482941 + }, + { + "type": "video", + "id": 96440301, + "author": "Da圣音乐", + "mid": 353230307, + "typeid": "130", + "typename": "音乐综合", + "arcurl": "http://www.bilibili.com/video/av96440301", + "aid": 96440301, + "bvid": "BV1LE411G7F4", + "title": "最近突然火的《少年》太好听了,单曲循环了很多遍!", + "description": "Hello,大家好,我是阿光\n本期节目为大家盘点三首最近特别火的中文歌曲\n我保证每一首歌都能撩动你的心弦\n来喽,正如:恰同学少年,风华正茂!\n第一首就是歌手梦然发行于2019年的《少年》\n第二首《后会无期》\n第三首《平凡天使》", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/bcde6fb455902b367138b7a4026419de0a50a42d.jpg", + "play": 2440158, + "video_review": 2314, + "favorites": 7163, + "tag": "乐评盘点,音乐,少年,后会无期,平凡天使,邓紫棋,热门歌曲,感动,高考,疫情", + "review": 1072, + "pubdate": 1584334818, + "senddate": 1584339026, + "duration": "3:2", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100455675 + }, + { + "type": "video", + "id": 370000842, + "author": "猫耳半圆", + "mid": 485450109, + "typeid": "24", + "typename": "MAD·AMV", + "arcurl": "http://www.bilibili.com/video/av370000842", + "aid": 370000842, + "bvid": "BV1AZ4y1j7t6", + "title": "最近火爆全网的《少年》,你喜欢吗?", + "description": "BGM:少年——梦然\n花了好多心思的作品,求个三连呀φ(>ω<*)", + "arcrank": "0", + "pic": "//i0.hdslb.com/bfs/archive/7437b6f66856b0d87437afd8827939954716cb2f.jpg", + "play": 2257050, + "video_review": 16225, + "favorites": 95864, + "tag": "bilibili新星计划,AMV,MAD,新人向,论BGM的重要性,青春,少年,治愈向,催泪向,多素材", + "review": 3548, + "pubdate": 1585459066, + "senddate": 1585459067, + "duration": "1:37", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100409086 + }, + { + "type": "video", + "id": 837972700, + "author": "Da圣音乐", + "mid": 353230307, + "typeid": "130", + "typename": "音乐综合", + "arcurl": "http://www.bilibili.com/video/av837972700", + "aid": 837972700, + "bvid": "BV1Ug4y1z7oN", + "title": "终于找到日语版《少年》了!开口就是恋爱的味道,岛国也要被洗脑", + "description": "终于找到日语版《少年》了!开口就是恋爱的味道,岛国也要被洗脑", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/413b5417418c0e1107b3f79a284d20040b8bb4e9.jpg", + "play": 1390981, + "video_review": 2344, + "favorites": 11330, + "tag": "乐评盘点,梦然,少年,下山,日语,斋藤飞鸟,告白气球,花泽香菜,火影忍者,海贼王", + "review": 988, + "pubdate": 1588239130, + "senddate": 1588241127, + "duration": "3:12", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100407822 + }, + { + "type": "video", + "id": 285145715, + "author": "潮汕好男人", + "mid": 19071708, + "typeid": "22", + "typename": "鬼畜调教", + "arcurl": "http://www.bilibili.com/video/av285145715", + "aid": 285145715, + "bvid": "BV1ac411h7BC", + "title": "【全明星】少年", + "description": "我还是充钱那个少年,又大又圆的少年\nBGM:少年\n制作:MC传奇(潮汕好男人/永远的MG)\n\n黄绿合战Day.3 对阵作品:BV1qQ4y1K7Gs, 投票传送门:https://www.bilibili.com/blackboard/activity-yellowVSgreen5th.html", + "arcrank": "0", + "pic": "//i1.hdslb.com/bfs/archive/911faee003fc828c46497cbd58fab0e22c7554f8.jpg", + "play": 3689254, + "video_review": 38262, + "favorites": 115408, + "tag": "鬼畜调教,鬼畜,黄绿合战,少年,黄绿合战5th,全明星", + "review": 4560, + "pubdate": 1586404524, + "senddate": 1592816392, + "duration": "3:1", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100254286 + }, + { + "type": "video", + "id": 51475845, + "author": "吃你的馒头", + "mid": 25770774, + "typeid": "137", + "typename": "明星", + "arcurl": "http://www.bilibili.com/video/av51475845", + "aid": 51475845, + "bvid": "BV1K4411i7mw", + "title": "【日本少年混剪】氧气/心动瞬间/薄荷味的夏天要来了", + "description": "个人喜欢的霓虹国少年们混剪\n\n喜欢的少年会让我想起夏天,淡淡的薄荷味在校服衬衫晕开,笑容在空气里变成汽水,砰的一声打开砸向心脏。\n\nBGM:米津玄师/菅田将晖《灰色与青》\n\n道枝骏佑/新田真剑佑/菅田将晖\n坂口健太郎/古川雄辉/山崎贤人\n山田凉介/片寄凉太/贺来贤人\n龙星凉/佐藤健/吉沢亮\n柏原崇/锦户亮\n\n不按出场顺序(剪得昏天黑地完全记不住)\n\n禁二改转载出站,微博非本人发布皆为盗取视频,请随手举报或@吃你的馒头。\n\n原创作品不易,谢谢喜欢和理解。", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/93ae9d66eaf62161f1f12d0102b6c2d66ebe05a9.jpg", + "play": 1842547, + "video_review": 10738, + "favorites": 136384, + "tag": "明星,龙星凉,新田真剑佑,菅田将晖,古川雄辉,片寄凉太,柏原崇,山崎贤人,道枝骏佑,贺来贤人,山田凉介,锦户亮", + "review": 2385, + "pubdate": 1556992133, + "senddate": 1559716273, + "duration": "3:5", + "badgepay": false, + "hit_columns": [ + "title", + "description" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100239604 + }, + { + "type": "video", + "id": 967814999, + "author": "沙拉酱merry", + "mid": 492472, + "typeid": "31", + "typename": "翻唱", + "arcurl": "http://www.bilibili.com/video/av967814999", + "aid": 967814999, + "bvid": "BV1Hp4y1y7iQ", + "title": "真的不是原唱?!《少年》超A御姐音翻唱", + "description": "少年\n词/曲/原唱/Rap:梦然\n和声编写:海青/梦然\n和声演唱:海青/梦然\n翻唱:沙拉酱merry\n后期:小敏\n这首歌真好听!\nPs:由于这首歌的难度和换气问题,音频和视频是分开录的所以会有口型差异,敬请谅解!!!大家听歌愉快~", + "arcrank": "0", + "pic": "//i0.hdslb.com/bfs/archive/565e8cdc98dab13dfa547cb13744410964f2fc00.jpg", + "play": 959598, + "video_review": 2447, + "favorites": 15166, + "tag": "被才华封印的颜值,少年,翻唱,女声,沙拉酱merry,御姐音", + "review": 1371, + "pubdate": 1587114006, + "senddate": 1587114030, + "duration": "7:58", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100235329 + }, + { + "type": "video", + "id": 455021866, + "author": "鲨然鲨然", + "mid": 435476320, + "typeid": "126", + "typename": "人力VOCALOID", + "arcurl": "http://www.bilibili.com/video/av455021866", + "aid": 455021866, + "bvid": "BV195411673y", + "title": "【川普】我还是曾经那个少年", + "description": "鬼畜娱乐,请勿当真哦\n希望大家能开怀一笑\n笑了的话别忘了点赞哦", + "arcrank": "0", + "pic": "//i0.hdslb.com/bfs/archive/7cee31977deb39f297d2d2598e736d26ed337568.jpg", + "play": 3845319, + "video_review": 34660, + "favorites": 74705, + "tag": "黄绿合战5th-黄队应援,鬼畜调教,人力VOCALOID,自制,UTAU,川普,搞笑,少年,恶搞,青春", + "review": 4469, + "pubdate": 1585651085, + "senddate": 1586266006, + "duration": "2:56", + "badgepay": false, + "hit_columns": [ + "title", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100163091 + }, + { + "type": "video", + "id": 753055295, + "author": "大门E", + "mid": 735734, + "typeid": "31", + "typename": "翻唱", + "arcurl": "http://www.bilibili.com/video/av753055295", + "aid": 753055295, + "bvid": "BV1xk4y1k7aw", + "title": "【完整版日语版《少年》本尊来了】竟是国人元老唱见~", + "description": "词:lolo2513&梦然\n曲:梦然\n编曲:张亮\n混音:顾潇予\nPV:大门E\n之前唱了一个片段不料被许多人误以为《少年》原版是日本歌曲改编。因为没有版权一直没full,如今终于得到梦然老师(版权方)的认可及改编授权,终于出来了,再次感谢~!以我的key重新编曲,好哥们儿@lolo2513 老师的完整版日文填词,满满的少年jump既视感,唱的时候满脑子鸣人路飞,作为一个十五年的国人老唱见能被大家认可一首ACG歌曲简直泪流满面,希望大家能够喜欢~", + "arcrank": "0", + "pic": "//i1.hdslb.com/bfs/archive/363ece7b0fd61d1eb48a4bc3c2e804446b46ca1d.jpg", + "play": 676181, + "video_review": 1209, + "favorites": 31147, + "tag": "bilibili新星计划,少年,日语歌,翻唱", + "review": 1964, + "pubdate": 1588932007, + "senddate": 1588957659, + "duration": "4:1", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100152701 + }, + { + "type": "video", + "id": 328601322, + "author": "萌宠教主", + "mid": 23976014, + "typeid": "24", + "typename": "MAD·AMV", + "arcurl": "http://www.bilibili.com/video/av328601322", + "aid": 328601322, + "bvid": "BV1EA411i7MD", + "title": "用三十部动漫唱一首《少年》——你长大了,你还在追番吗?", + "description": "BGM:少年\n【剪辑,填词】萌宠教主\n【演唱】浅若_natsu", + "arcrank": "0", + "pic": "//i0.hdslb.com/bfs/archive/eb7c1be356fd3bc6a947bb6398b6f02fc961bec2.jpg", + "play": 381018, + "video_review": 2881, + "favorites": 28530, + "tag": "少年,AMV,多素材,MAD,综漫,混剪,梦然,催泪", + "review": 922, + "pubdate": 1592020805, + "senddate": 1592020836, + "duration": "4:5", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100129139 + }, + { + "type": "video", + "id": 838737756, + "author": "bili_148834382", + "mid": 148834382, + "typeid": "138", + "typename": "搞笑", + "arcurl": "http://www.bilibili.com/video/av838737756", + "aid": 838737756, + "bvid": "BV1Ug4y1v7mU", + "title": "大爷:我还是从前那个少年,没有一丝丝改变!", + "description": "大爷:我还是从前那个少年,没有一丝丝改变!", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/912cb238879558119d2f129438d7c71bb4372f9e.jpg", + "play": 7052, + "video_review": 18, + "favorites": 17, + "tag": "逗比,挑战,卧槽,沙雕,搞笑,大爷,厉害了,不一样呀,秀", + "review": 8, + "pubdate": 1593489906, + "senddate": 1593489906, + "duration": "1:34", + "badgepay": false, + "hit_columns": [ + "title", + "description" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100123108 + }, + { + "type": "video", + "id": 541162396, + "author": "鬼兄奇谈", + "mid": 94641579, + "typeid": "124", + "typename": "社科人文", + "arcurl": "http://www.bilibili.com/video/av541162396", + "aid": 541162396, + "bvid": "BV1Bi4y1G7mo", + "title": "少年黑帮“新龙会”覆灭记!史上最“中二”的黑社会,作案后竟留下错别字?", + "description": "少年黑帮“新龙会”覆灭记!史上最“中二”的黑社会,作案后竟留下错别字?\n视频内容及素材均来源于网络", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/4c0c8d8f720119e3087b6b02025c3d957d642781.jpg", + "play": 150747, + "video_review": 627, + "favorites": 487, + "tag": "犯罪,案件,奇闻,全能打卡挑战,学生,法制,黑社会,中二,违法", + "review": 438, + "pubdate": 1593596709, + "senddate": 1593596710, + "duration": "8:42", + "badgepay": false, + "hit_columns": [ + "title", + "description" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100120066 + }, + { + "type": "video", + "id": 413715309, + "author": "wkkm13", + "mid": 4056950, + "typeid": "76", + "typename": "美食圈", + "arcurl": "http://www.bilibili.com/video/av413715309", + "aid": 413715309, + "bvid": "BV1gV41167WS", + "title": "梦开始的地方,一年前那个不会剪辑的少年阿强。", + "description": "转自强哥第一个视频,那时候他还叫“浮华d假象”。\n梦开始的地方,那个不会剪辑的少年。", + "arcrank": "0", + "pic": "//i0.hdslb.com/bfs/archive/73772867e6a4ebaf66a12c73f1bc0d7a1f0fa085.jpg", + "play": 149332, + "video_review": 332, + "favorites": 86, + "tag": "cram阿强,泪目,美食,吃播,梦想,剪辑", + "review": 437, + "pubdate": 1593604848, + "senddate": 1593604848, + "duration": "5:31", + "badgepay": false, + "hit_columns": [ + "title", + "description" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100102196 + }, + { + "type": "video", + "id": 838507935, + "author": "木子山上起酥酥", + "mid": 185924591, + "typeid": "75", + "typename": "动物圈", + "arcurl": "http://www.bilibili.com/video/av838507935", + "aid": 838507935, + "bvid": "BV1Jg4y1q77h", + "title": "少年人,这是修行。", + "description": "微博", + "arcrank": "0", + "pic": "//i1.hdslb.com/bfs/archive/8eae881830a5fc2be1434781e086f7191082cec8.jpg", + "play": 120068, + "video_review": 43, + "favorites": 312, + "tag": "逗比,正能量,水豚,动物", + "review": 155, + "pubdate": 1592366769, + "senddate": 1592366769, + "duration": "0:15", + "badgepay": false, + "hit_columns": [ + "title" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100101593 + }, + { + "type": "video", + "id": 47749359, + "author": "Da圣音乐", + "mid": 353230307, + "typeid": "130", + "typename": "音乐综合", + "arcurl": "http://www.bilibili.com/video/av47749359", + "aid": 47749359, + "bvid": "BV12b411W7nF", + "title": "16岁中国少年韩国综艺上怒怼:老子来自中国!现场一片哗然", + "description": "16岁中国少年韩国综艺上怒怼:老子来自中国!现场一片哗然", + "arcrank": "0", + "pic": "//i1.hdslb.com/bfs/archive/171d9b27a0b9823b71894008117501014dd561ba.jpg", + "play": 5042589, + "video_review": 3949, + "favorites": 26065, + "tag": "说唱,韩国,中国,音乐选集,Rap,瞧不起,DISS,迪亚克,D.ark,综艺节目", + "review": 2793, + "pubdate": 1553926233, + "senddate": 1553926233, + "duration": "2:38", + "badgepay": false, + "hit_columns": [ + "title", + "description" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100101064 + }, + { + "type": "video", + "id": 82363754, + "author": "在下甘柒辣", + "mid": 374835894, + "typeid": "24", + "typename": "MAD·AMV", + "arcurl": "http://www.bilibili.com/video/av82363754", + "aid": 82363754, + "bvid": "BV1qJ411V7QH", + "title": "我已不再是少年,但你们终究活在我心里", + "description": "国动会越来越好的,它由我们一同注目它的成长。\nBGM: start\n可否给个币,给这个肝疼的up点鼓励( ̄y▽ ̄)~*", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/2c7afbc835dbce9f554eb1b21b583ef6bed34cce.jpg", + "play": 1588667, + "video_review": 6782, + "favorites": 37909, + "tag": "国产动画,国漫良心,国漫,国漫王者归来,星游记,镇魂街,灵笼,刺客伍六七,大圣归来,哪吒", + "review": 1190, + "pubdate": 1578320753, + "senddate": 1582999612, + "duration": "3:44", + "badgepay": false, + "hit_columns": [ + "title" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100099970 + }, + { + "type": "video", + "id": 413742409, + "author": "音乐Fans小琼", + "mid": 342943435, + "typeid": "130", + "typename": "音乐综合", + "arcurl": "http://www.bilibili.com/video/av413742409", + "aid": 413742409, + "bvid": "BV1bV41167Un", + "title": "《少年》霸占7周热歌第一,如今终于被新的神曲打破!网友:听吐了!", + "description": "bgm 纸砚zyan《画皮》\n《惊雷》MC六道\n《素颜》许嵩\n《麻雀》李荣浩\n《点歌的人》海来阿木\n《桥边姑娘》海伦 \n《旧梦一场》阿悠悠\n《世界这么大还是遇见你》程响(翻唱)\n《后来遇见他》胡66\n《处处吻》杨千嬅\n《少年》梦然", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/f004565df82a9ac3a8a168b4c12e244861f1d812.jpg", + "play": 12363, + "video_review": 137, + "favorites": 100, + "tag": "乐评盘点,全能打卡挑战,翻唱,许嵩,杨千嬅,李荣浩,喊麦,民谣,热歌,神曲", + "review": 71, + "pubdate": 1593523679, + "senddate": 1593576757, + "duration": "3:37", + "badgepay": false, + "hit_columns": [ + "title", + "description" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100097483 + }, + { + "type": "video", + "id": 625380628, + "author": "涩廊", + "mid": 178366933, + "typeid": "137", + "typename": "明星", + "arcurl": "http://www.bilibili.com/video/av625380628", + "aid": 625380628, + "bvid": "BV1Xt4y127bX", + "title": "这TM才叫日系美少年!", + "description": "道枝骏佑,02年霓虹国弟弟!杰尼斯美少年!没长残的童星代表!身高现在180+了!绰号米七(谐音)\n出演过电视剧《成为母亲》《我的裙子去哪了》\n\n米七是一个超级帅气可爱的男孩子!一直都在努力提升自己,请敬请期待他未来的作品!\n米七米七!未来可期!\n跪求三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连", + "arcrank": "0", + "pic": "//i2.hdslb.com/bfs/archive/9d727949eed2d82eb0561d08cbb3e28ac6603532.jpg", + "play": 768179, + "video_review": 1595, + "favorites": 29494, + "tag": "全能打卡挑战,杰尼斯,美少年,道枝骏佑,日系,米七", + "review": 1545, + "pubdate": 1588381204, + "senddate": 1590253109, + "duration": "1:22", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 100094816 + } + ], + "show_column": 0 + } +} +``` + +
diff --git a/docs/search/search_response.md b/docs/search/search_response.md new file mode 100644 index 0000000..fb97747 --- /dev/null +++ b/docs/search/search_response.md @@ -0,0 +1,765 @@ +# 搜索响应条目 + +本页为搜索结果数组`result`中的对象的说明 + +## 对象类型1-结果为视频 + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ----- | -------------- | ----------------------------------------- | +| type | str | 结果类型 | 固定为video | +| id | num | 结果 | 为稿件avid | +| author | str | UP主昵称 | | +| mid | num | UP主mid | | +| typeid | str | 视频分区tid | | +| typename | str | 视频子分区名 | | +| arcurl | str | 视频重定向url | | +| aid | num | 稿件avid | | +| bvid | str | 稿件bvid | | +| title | str | 视频标题 | 关键字用xml标签``标注 | +| description | str | 视频简介 | | +| arcrank | str | 0 | **作用尚不明确** | +| pic | str | 视频封面url | | +| play | num | 视频播放量 | | +| video_review | num | 视频弹幕量 | | +| favorites | num | 视频收藏数 | | +| tag | str | 视频TAG | 每项TAG用`,`分隔 | +| review | num | 视频评论数 | | +| pubdate | num | 视频投稿时间 | 时间戳 | +| senddate | num | 视频发布时间 | 时间戳 | +| duration | str | 视频时长 | HH:MM | +| badgepay | bool | false | **作用尚不明确** | +| hit_columns | array | 关键字匹配类型 | | +| view_type | str | 空 | **作用尚不明确** | +| is_pay | num | 0 | **作用尚不明确** | +| is_union_video | num | 是否为合作视频 | 0:否
1:是 | +| rec_tags | null | - | **作用尚不明确** | +| new_rec_tags | array | 空 | **作用尚不明确** | +| rank_score | num | 结果排序量化值 | | + +`视频条目`中的`hit_columns`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------------------------------------------------------ | +| 0 | str | 匹配类型1 | title:标题匹配
description:简介匹配
author:UP主昵称匹配
tag:视频TAG匹配 | +| n | str | 匹配类型(n+1) | 项数为同时匹配到的类型数 | +| …… | str | …… | …… | + +**示例:** + +
+查看响应示例: + +```json +{ + "type": "video", + "id": 78977417, + "author": "MitchieM", + "mid": 5669526, + "typeid": "30", + "typename": "VOCALOID·UTAU", + "arcurl": "http://www.bilibili.com/video/av78977417", + "aid": 78977417, + "bvid": "BV1KJ411C7Un", + "title": "【Mitchie M】初音未来《买买买》【2020拜年祭单品】", + "description": "bilibili拜年祭のために、ダンスミュージックと中国の伝統楽器を組み合わせた曲を作りました。歌詞に「买买买」を使ったユニークな曲が出来上がったので、最高のクオリティーのMVと共に楽しんでもらえたら嬉しいです!\n为哔哩哔哩拜年祭制作了一首电子舞曲与中国传统乐器相结合的音乐,歌词是描写【买买买】的独特作品,和最棒的PV一起享受吧!\n\n▶︎ 舞蹈视频 [BV1pA411i7J6]", + "arcrank": "0", + "pic": "//i1.hdslb.com/bfs/archive/f0403bbd1ff3bad1df79aaa159d9e1cfb52c92de.jpg", + "play": 2915520, + "video_review": 14572, + "favorites": 114102, + "tag": "2020拜年祭单品,买买买,初音未来", + "review": 6124, + "pubdate": 1579877678, + "senddate": 1593099008, + "duration": "4:2", + "badgepay": false, + "hit_columns": [ + "title", + "description", + "tag" + ], + "view_type": "", + "is_pay": 0, + "is_union_video": 0, + "rec_tags": null, + "new_rec_tags": [], + "rank_score": 109020056 +} +``` + +
+ +## 对象类型2-结果为番剧&影视 + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ------------------------------- | ---------------------------- | ------------------------------------------------------------ | +| type | str | 结果类型 | media_bangumi:番剧
media_ft:影视 | +| media_id | num | 剧集mdid | | +| season_id | num | 剧集ssid | | +| title | str | 剧集标题 | 关键字用xml标签``标注 | +| org_title | str | 剧集原名 | 关键字用xml标签``标注
可为空 | +| cover | str | 剧集封面url | | +| media_type | num | 剧集类型 | 1:番剧
2:电影
3:纪录片
4:国创
5:电视剧
7:综艺 | +| areas | str | 地区 | | +| styles | str | 风格 | | +| cv | str | 声优 | | +| staff | str | 制作组 | | +| play_state | num | 0 | **作用尚不明确** | +| goto_url | str | 剧集重定向url | | +| desc | str | 简介 | | +| corner | num | 角标有无 | 2:无
13:有 | +| pubtime | num | 开播时间 | 时间戳 | +| media_mode | num | 2 | **作用尚不明确** | +| is_avid | bool | false | **作用尚不明确** | +| fix_pubtime_str | str | 开播时间重写信息 | 优先级高于`pubtime`
可为空 | +| media_score | 有效时:obj
无效时:null | 评分信息 | | +| hit_columns | 有效时:array
无效时:null | 关键字匹配类型 | | +| all_net_name | str | 空 | **作用尚不明确** | +| all_net_icon | str | 空 | **作用尚不明确** | +| all_net_url | str | 空 | **作用尚不明确** | +| angle_title | str | 角标内容 | | +| angle_color | num | 角标颜色 | 0:红色
2:橙色 | +| display_info | array | 剧集标志信息 | | +| hit_epids | str | 关键字匹配分集标题的分集epid | 多个用`,`分隔 | +| pgc_season_id | num | 剧集ssid | | +| season_type | num | 剧集类型 | 1:番剧
2:电影
3:纪录片
4:国创
5:电视剧
7:综艺 | +| season_type_name | str | 剧集类型文字 | | +| selection_style | str | 分集选择按钮风格 | horizontal:横排式
grid:按钮式 | +| ep_size | num | 结果匹配的分集数 | | +| url | str | 剧集重定向url | | +| button_text | str | 观看按钮文字 | | +| is_follow | num | 是否追番 | 需要登录(SESSDATA)
未登录则恒为0
0:否
1:是 | +| is_selection | num | 1 | **作用尚不明确** | +| eps | array | 结果匹配的分集信息 | | +| badges | array | 剧集标志信息 | | + +`番剧条目`中的`media_score`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ---- | +| user_count | num | 总计评分人数 | | +| score | num | 评分 | | + +`番剧条目`中的`hit_columns`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | -------------------------------------- | +| 0 | str | 匹配类型1 | title:标题匹配
org_title:原标题 | +| n | str | 匹配类型(n+1) | 项数为同时匹配到的类型数 | +| …… | str | …… | …… | + +`番剧条目`中的`display_info`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ---- | +| 0 | obj | 剧集标志信息 | | + +`display_info`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | ------------ | ------ | +| bg_color_night | str | 夜间背景颜色 | 颜色码 | +| text | str | 剧集标志 | 颜色码 | +| border_color | str | 背景颜色 | 颜色码 | +| bg_style | num | 1 | | +| text_color | str | 文字颜色 | 颜色码 | +| bg_color | str | 背景颜色 | 颜色码 | +| text_color_night | str | 夜间文字颜色 | 颜色码 | +| border_color_night | str | 夜间背景颜色 | 颜色码 | + +`番剧条目`中的`eps`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------------------ | +| 0 | obj | 分集信息1 | | +| n | obj | 分集信息(n+1) | 项数为同时匹配到的分集数 | +| …… | obj | …… | …… | + +`eps`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ----- | ------------- | ---- | +| id | num | 分集epid | | +| cover | str | 分集封面url | | +| title | str | 完整标题 | | +| url | str | 分集重定向url | | +| release_date | str | 空 | | +| badges | array | 分集标志 | | +| index_title | str | 短标题 | | +| long_title | str | 单集标题 | | + +`番剧条目`中的`badges`数组(同`eps`数组中的对象中的`badges`数组): + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ---- | +| 0 | obj | 剧集标志信息 | | + +`badges`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | ------------ | ------ | +| text | str | 剧集标志 | 颜色码 | +| text_color | str | 文字颜色 | 颜色码 | +| text_color_night | str | 夜间文字颜色 | 颜色码 | +| bg_color | str | 背景颜色 | 颜色码 | +| bg_color_night | str | 夜间背景颜色 | 颜色码 | +| border_color | str | 空 | | +| border_color_night | str | 空 | | +| bg_style | num | 1 | | + +**示例:** + +
+查看响应示例: + +```json +{ + "media_id": 28224080, + "season_id": 29310, + "type": "media_bangumi", + "title": "异度侵入 ID:INVADED", + "org_title": "イド:インヴェイデッド", + "cover": "//i0.hdslb.com/bfs/bangumi/image/9bf9e66968f85b33ec3769a16c86b36dc984abbc.png", + "media_type": 1, + "areas": "日本", + "styles": "原创/科幻/推理", + "cv": "酒井户:津田健次郎\n百贵:细谷佳正\n富久田:竹内良太\n本堂町:M・A・O\n东乡:布里德卡特·塞拉·惠美\n早濑浦:村治学\n白岳:近藤隆\n羽二重:岩濑周平\n若鹿:榎木淳弥\n国府:加藤涉\n西村:落合福嗣\n松冈:西凛太朗 ", + "staff": "监督:青木英\n脚本:舞城王太郎\n角色原案:小玉有起\n角色设计:碇谷敦\n美术:曽野由大\n作画监督:又贺大介\n副监督:久保田雄大\n色彩设计:千叶絵美\n动画制作:NAZ", + "play_state": 0, + "goto_url": "https://www.bilibili.com/bangumi/play/ss29310/", + "desc": "本片讲述利用能检测出人们杀意的装置以及利用思想粒子做出的“井”,来探知事件真相的科幻故事。", + "corner": 13, + "pubtime": 1578240000, + "media_mode": 2, + "is_avid": false, + "fix_pubtime_str": "", + "media_score": { + "user_count": 275391, + "score": 9.8 + }, + "hit_columns": [ + "title" + ], + "all_net_name": "", + "all_net_icon": "", + "all_net_url": "", + "angle_title": "会员专享", + "angle_color": 0, + "display_info": [ + { + "bg_color_night": "#BB5B76", + "text": "会员专享", + "border_color": "#FB7299", + "bg_style": 1, + "text_color": "#FFFFFF", + "bg_color": "#FB7299", + "text_color_night": "#E5E5E5", + "border_color_night": "#BB5B76" + } + ], + "hit_epids": "", + "pgc_season_id": 29310, + "season_type": 1, + "season_type_name": "番剧", + "selection_style": "grid", + "ep_size": 13, + "url": "https://www.bilibili.com/bangumi/play/ss29310", + "button_text": "立即观看", + "is_follow": 1, + "is_selection": 1, + "eps": [ + { + "id": 307446, + "cover": "http://i0.hdslb.com/bfs/archive/4a1895e5b675209b6948dc321c3cc4991a6262bc.jpg", + "title": "1", + "url": "https://www.bilibili.com/bangumi/play/ep307446", + "release_date": "", + "badges": [], + "index_title": "1", + "long_title": "JIGSAWED 碎片世界" + }, + { + "id": 307447, + "cover": "http://i0.hdslb.com/bfs/archive/c66175203fdb6f54a9fb3accd793da0341b3140a.jpg", + "title": "2", + "url": "https://www.bilibili.com/bangumi/play/ep307447", + "release_date": "", + "badges": [ + { + "text": "会员", + "text_color": "#FFFFFF", + "text_color_night": "#E5E5E5", + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "border_color": "", + "border_color_night": "", + "bg_style": 1 + } + ], + "index_title": "2", + "long_title": "JIGSAWED Ⅱ 碎片世界" + }, + ………… + ], + "badges": [ + { + "text": "会员专享", + "text_color": "#FFFFFF", + "text_color_night": "#E5E5E5", + "bg_color": "#FB7299", + "bg_color_night": "#BB5B76", + "border_color": "", + "border_color_night": "", + "bg_style": 1 + } + ] +}, +``` + +
+ +## 对象类型3-结果为直播间 + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | -------------- | ----------------------------------------- | +| type | str | 结果类型 | 固定为live_room | +| rank_offset | num | 搜索结果排名值 | | +| uid | num | 主播mid | | +| tas | str | 直播间TAG | 多个用`,`分隔 | +| hit_columns | array | 关键字匹配类型 | | +| live_time | str | 开播时间 | YYYY-MM-DD HH:MM:SS | +| cate_name | str | 子分区名 | | +| live_status | num | 1 | | +| uname | str | 主播昵称 | | +| uface | str | 主播头像url | | +| user_cover | str | 直播间封面url | | +| short_id | num | 0 | **作用尚不明确** | +| area | num | 1 | **作用尚不明确** | +| title | str | 直播间标题 | 关键字用xml标签``标注 | +| cover | str | 关键帧截图url | | +| online | num | 在线人数 | | +| rank_index | num | 0 | **作用尚不明确** | +| rank_score | num | 结果排序量化值 | | +| roomid | num | 直播间id | | +| attentions | num | 主播粉丝数 | | + +`直播间条目`中的`hit_columns`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------------------------------------------------------ | +| 0 | str | 匹配类型1 | title:直播间标题匹配
cate_name:子分区名匹配
uname:主播昵称匹配 | +| n | str | 匹配类型(n+1) | 项数为同时匹配到的类型数 | +| …… | str | …… | …… | + +**示例:** + +
+查看响应示例: + +```json +{ + "rank_offset": 1, + "uid": 682508, + "tags": "minecraft,声控,我的世界,虚拟主播,助眠", + "hit_columns": [ + "title", + "cate_name" + ], + "live_time": "2020-07-03 19:08:46", + "cate_name": "我的世界", + "live_status": 1, + "uname": "超心塞的十六", + "uface": "//i0.hdslb.com/bfs/face/dc33ad47b5e299c08bea9cfe565373213012599c.jpg", + "user_cover": "//i0.hdslb.com/bfs/live/new_room_cover/cbc7b1d0ba181df2c714c2e45ab00937129d3c5c.jpg", + "short_id": 148, + "area": 1, + "type": "live_room", + "title": "MC 1.16 极限服", + "cover": "//i0.hdslb.com/bfs/live/keyframe07031915000000010313u3z18a.jpg", + "online": 34702, + "rank_index": 0, + "rank_score": 34702, + "roomid": 10313, + "attentions": 317864 +} +``` + +
+ +## 对象类型4-结果为主播 + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | -------------- | ------------------------------------------------------ | +| type | str | 结果类型 | 固定为live_user | +| rank_offset | num | 搜索结果排名值 | | +| uid | num | 主播mid | | +| tas | str | 直播间TAG | 多个用`,`分隔 | +| live_time | str | 开播时间 | YYYY-MM-DD HH:MM:SS
如未开播为0000-00-00 00:00:00 | +| hit_columns | array | 关键字匹配类型 | | +| live_status | num | 是否开播 | 0:未开播
1:已开播 | +| area | num | 1 | **作用尚不明确** | +| is_live | bool | 是否开播 | false:未开播
true:已开播 | +| uname | str | 主播昵称 | 关键字用xml标签``标注 | +| uface | str | 主播头像url | | +| rank_index | num | 0 | **作用尚不明确** | +| rank_score | num | 结果排序量化值 | | +| attentions | num | 主播粉丝数 | | + +`主播条目`中的`hit_columns`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------------------ | +| 0 | str | 匹配类型1 | uname:主播昵称匹配 | +| n | str | 匹配类型(n+1) | 项数为同时匹配到的类型数 | +| …… | str | …… | …… | + +**示例:** + +
+查看响应示例: + +```json +{ + "rank_offset": 1, + "uid": 322892, + "tags": "鬼畜,游戏,瞎扯淡,轰炸挂", + "type": "live_user", + "live_time": "2020-07-03 17:57:30", + "hit_columns": [ + "uname" + ], + "live_status": 1, + "area": 1, + "is_live": true, + "uname": "痒局长", + "uface": "//i2.hdslb.com/bfs/face/bcdf640faa16ebaacea1d4c930baabaec9087a80.jpg", + "rank_index": 0, + "rank_score": 2620790, + "roomid": 5441, + "attentions": 2570790 +} +``` + +
+ +## 对象类型5-结果为专栏 + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ----- | -------------- | ---------------- | +| type | str | 结果类型 | 固定为article | +| rank_offset | num | 搜索结果排名值 | | +| pub_time | num | 投稿时间 | 时间戳 | +| like | num | 获赞数 | | +| title | str | 标题 | | +| mid | num | UP主mid | | +| image_urls | array | 封面图组 | | +| template_id | num | ??? | **作用尚不明确** | +| category_id | num | 专栏分区 | | +| view | num | 阅读数 | | +| reply | num | 评论数 | | +| rank_index | num | 0 | **作用尚不明确** | +| desc | str | 文章预览 | | +| rank_score | num | 结果排序量化值 | | +| id | num | 专栏cvid | | +| category_name | str | 子分区名 | | + +`专栏条目`中的`covers`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | str | 封面图片1 | | +| n | str | 封面图片(n+1) | | +| …… | str | …… | | + +**示例:** + +
+查看响应示例: + +```json +{ + "pub_time": 1582123245, + "like": 113, + "title": "【洛水闲谈】《普通DISCO》神话达成后的个人感想", + "rank_offset": 1, + "mid": 295535204, + "image_urls": [ + "//i0.hdslb.com/bfs/article/0c2e7e3cc14f7e097482688600be713a9e9a7029.png" + ], + "template_id": 4, + "category_id": 4, + "view": 843, + "reply": 58, + "rank_index": 0, + "desc": "今天,2020年2月19日,随着bilibili弹幕网上《普通DISCO》的播放量突破1000W,中文VOCALOID的第一首神话级歌曲诞生了。笔者昨夜盯着《普通DISCO》的播放量的增长速率熬到很晚,今早又起了个大早盯着那最后一万的播放量差距,直到播放量突破1000W才放松紧绷的神经,敲打键盘时肢体困倦神疲乏力,故长话短说,若有表达不妥之处还望各位海涵。ilem教主,其拥有近二十首百万传说曲,占bilibili弹幕网中文VOCALOID百万传说曲的三分之一,中文VOCALOID第一首传说曲与第", + "rank_score": 19, + "type": "article", + "id": 4743576, + "category_name": "动漫杂谈" +} +``` + +
+ +## 对象类型6-结果为话题 + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ----------------- | ---------------- | +| type | str | 结果类型 | 固定为topic | +| description | str | 简介 | | +| pubdate | nm | 发布时间 | 时间戳 | +| title | str | 标题 | | +| favourite | num | 0 | **作用尚不明确** | +| hit_columns | array | 关键字匹配类型 | | +| review | num | 0 | **作用尚不明确** | +| rank_offset | num | 搜索结果排名值 | | +| cover | str | 话题封面url | | +| update | num | 上传时间 | 时间戳 | +| mid | nm | 0 | **作用尚不明确** | +| click | num | ??? | **作用尚不明确** | +| tp_type | num | ??? | **作用尚不明确** | +| keyword | str | 空 | **作用尚不明确** | +| tp_id | num | 话题tp | | +| rank_index | num | 0 | **作用尚不明确** | +| author | str | UP主昵称 | | +| arcurl | str | 话题页面重定向url | | +| rank_score | num | 结果排序量化值 | | + +`话题条目`中的`hit_columns`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------------------ | +| 0 | str | 匹配类型1 | title:话题标题匹配 | +| n | str | 匹配类型(n+1) | 项数为同时匹配到的类型数 | +| …… | str | …… | …… | + +**示例:** + +
+查看响应示例: + +```json +{ + "description": "「Bad Apple」的各式各样的PV有很多很多,小编在这里给大家推荐一些比较特别且高人气的特别PV......", + "pubdate": 1479380676, + "title": "「Bad Apple」 的N种特别PV", + "favourite": 0, + "hit_columns": [ + "title" + ], + "review": 0, + "rank_offset": 1, + "cover": "//i0.hdslb.com/bfs/active/3005a94d446db3873d97b483323156b491d850ac.jpg", + "update": 31507200, + "mid": 0, + "click": 211843, + "tp_type": 0, + "keyword": "", + "tp_id": 2215, + "rank_index": 0, + "author": "Nuuu", + "type": "topic", + "arcurl": "http://www.bilibili.com/topic/50.html", + "rank_score": 1851888 +} +``` + +
+ +## 对象类型7-结果为用户 + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | -------------- | ----------------------------- | +| type | str | 结果类型 | 固定为bili_user | +| mid | num | 用户mid | | +| uname | str | 用户昵称 | | +| usign | str | 用户签名 | | +| fans | num | 用户粉丝数 | | +| videos | num | 用户稿件数 | | +| upic | str | 用户头像url | | +| verify_info | str | 空 | **作用尚不明确** | +| level | num | 用户等级 | | +| gender | num | 用户性别 | 1:男
2:女
3:私密 | +| is_upuser | num | 是否为UP主 | 0:否
1:是 | +| is_live | num | 是否正在直播 | 0:否
1:是 | +| room_id | num | 用户直播间id | | +| res | array | 用户投稿内容 | | +| official_verify | obj | 用户认证信息 | | +| hit_columns | array | 关键字匹配类型 | | + +`用户条目`中的`res`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ------------------------- | +| 0 | obj | 用户投稿视频1 | | +| n | obj | 用户投稿视频(n+1) | 项数为用户投稿的3个视频数 | +| …… | obj | …… | …… | + +`res`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ----------------- | ---------------- | +| aid | num | 稿件avid | | +| bvid | str | 稿件bvid | | +| title | str | 视频标题 | | +| pubdate | num | 视频投稿时间 | 时间戳 | +| arcurl | str | 视频页面重定向url | | +| pic | str | 视频封面图片url | | +| play | str | 播放量 | | +| dm | str | 弹幕量 | | +| coin | num | 投币数 | | +| fav | num | 收藏数 | | +| desc | str | 视频简介 | | +| duration | str | 视频时长 | MM:SS | +| is_pay | num | 0 | **作用尚不明确** | +| is_union_video | num | 是否为合作视频 | 0:否
1:是 | + +`用户条目`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ----------------------------------------- | +| type | num | 是否认证 | 127:无
0:个人认证
1:组织认证 | +| desc | str | 认证名称 | | + +`用户条目`中的`hit_columns`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------------------ | +| 0 | str | 匹配类型1 | uname:用户昵称匹配 | +| n | str | 匹配类型(n+1) | 项数为同时匹配到的类型数 | +| …… | str | …… | …… | + +**示例:** + +
+查看响应示例: + +```json +{ + "type": "bili_user", + "mid": 208259, + "uname": "陈睿", + "usign": "喜欢的话就坚持吧", + "fans": 1561640, + "videos": 5, + "upic": "//i1.hdslb.com/bfs/app/8920e6741fc2808cce5b81bc27abdbda291655d3.png", + "verify_info": "", + "level": 6, + "gender": 1, + "is_upuser": 1, + "is_live": 0, + "room_id": 3394945, + "res": [ + { + "aid": 883660923, + "bvid": "BV1SK4y1477d", + "title": "BILIBILI 11周年演讲", + "pubdate": 1593176427, + "arcurl": "http://www.bilibili.com/video/av883660923", + "pic": "//i0.hdslb.com/bfs/archive/b28021df9c67ee2821cb9c1142b9d5e594e3b951.jpg", + "play": "6144081", + "dm": 185789, + "coin": 167803, + "fav": 147421, + "desc": "BILIBILI 11周年演讲,邀请数位嘉宾分享他们与B站的故事。\n陈睿《bilibili 11周年主题演讲》\n机智的党妹 《在B站,表达自我》\n腾格尔《在B站,做全新的腾格尔》\n周深《在B站,做一个歌手》《起风了》\n罗翔《在B站,授业与解惑》\nCarly李旎《在B站,一起成长》\nBILIBILI 11周年特映片《喜相逢》", + "duration": "217:7", + "is_pay": 0, + "is_union_video": 1 + }, + { + "aid": 838688095, + "bvid": "BV1Wg4y1v77h", + "title": "我们的五年——B站五年员工纪念视频 2020版", + "pubdate": 1593004830, + "arcurl": "http://www.bilibili.com/video/av838688095", + "pic": "//i1.hdslb.com/bfs/archive/701da662dfe00fb180eb4a47f1c38403838570a7.jpg", + "play": "957960", + "dm": 10830, + "coin": 44030, + "fav": 23108, + "desc": "每年626前夕,我们都会给本年度满五年工龄的员工颁发金LOGO(金质的小电视胸章),感谢他们对公司的陪伴和付出。“五年守护,感恩有你”", + "duration": "4:51", + "is_pay": 0, + "is_union_video": 0 + }, + { + "aid": 327892668, + "bvid": "BV1fA411b7zo", + "title": "【推荐一本喜欢的书】上帝掷骰子吗?", + "pubdate": 1587632267, + "arcurl": "http://www.bilibili.com/video/av327892668", + "pic": "//i0.hdslb.com/bfs/archive/c3ec25e2e4425303d7f4915692e3a9f0ec027669.jpg", + "play": "2131624", + "dm": 13570, + "coin": 37432, + "fav": 35498, + "desc": "#推荐一本喜欢的书# 423世界读书日,推荐我看过的最好看的量子物理科普书籍《上帝掷骰子吗》#读书等身#\n欢迎参与B站读书日活动:https://www.bilibili.com/blackboard/activity-gNeFPygv0.html 你每投一个读书视频,B站都会为你捐出一本书。", + "duration": "4:46", + "is_pay": 0, + "is_union_video": 0 + } + ], + "official_verify": { + "type": 0, + "desc": "bilibili董事长兼CEO" + }, + "hit_columns": [ + "uname" + ] +} +``` + +
+ +## 对象类型8-结果为相簿 + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | -------------- | ---------------- | +| type | str | 结果类型 | 固定为photo | +| count | num | 图片数 | | +| like | num | 收藏数 | | +| title | str | 相簿标题 | | +| hit_columns | array | 关键字匹配类型 | | +| rank_offset | num | 搜索结果排名值 | | +| cover | str | 相簿封面url | | +| mid | num | UP主mid | | +| uname | str | UP主昵称 | | +| rank_index | num | 0 | **作用尚不明确** | +| view | num | 观看次数 | | +| id | num | 相簿id | | +| rank_score | num | 结果排序量化值 | | + +`相簿条目`中的`hit_columns`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------------------------------------------------------ | +| 0 | str | 匹配类型1 | title:相簿标贴匹配
description:相簿简介匹配
source_tag:相簿TAG匹配 | +| n | str | 匹配类型(n+1) | 项数为同时匹配到的类型数 | +| …… | str | …… | …… | + +**示例:** + +
+查看响应示例: + +```json +{ + "count": 4, + "like": 42, + "title": "EVA Q 绫波丽", + "hit_columns": [ + "title" + ], + "rank_offset": 1, + "cover": "http://i0.hdslb.com/bfs/album/1043ee70b677c9aab406142c6aa00d097be07c1e.jpg", + "mid": 3306217, + "uname": "迷失人形LLS", + "rank_index": 0, + "view": 100924, + "type": "photo", + "id": 8952802, + "rank_score": 25315 +} +``` + +
\ No newline at end of file diff --git a/docs/search/suggest.md b/docs/search/suggest.md new file mode 100644 index 0000000..276b0d0 --- /dev/null +++ b/docs/search/suggest.md @@ -0,0 +1,175 @@ +# 搜索建议 + +## 获取搜索建议关键词(web端) + +> https://s.search.bilibili.com/main/suggest + +*请求方式:GET* + +搜索建议最多提供10个候选关键词 + +搜索建议内容可为任意语言(中 英 日等....),中文拼音支持全拼联想词 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------------- | ---- | ---------------------- | ------ | ------------------------ | +| term | str | 需要获得建议的输入内容 | 必要 | | +| main_ver | str | v1 | 非必要 | 默认为 `v1` | +| highlight | str | 任意, 无明显作用 | 非必要 | 默认为空 | +| func | str | 函数? | 非必要 | 默认为 `suggest` | +| suggest_type | str | 建议类型? | 非必要 | 默认为 `accurate` | +| sub_type | str | 子类型? | 非必要 | 默认为 `tag` | +| userid | num | 本用户 mid | 非必要 | 可能用于个性化推荐 | +| bangumi_acc_num | num | 番剧累积数? | 非必要 | 默认为 `1` | +| special_acc_num | num | 特殊累积数? | 非必要 | 默认为 `1` | +| topic_acc_num | num | 话题累积数? | 非必要 | 默认为 `1` | +| upuser_acc_num | num | UP主累积数? | 非必要 | 默认为 `1` | +| tag_num | num | Tag 数? | 非必要 | 默认为 `10` | +| special_num | num | 特殊推荐数? | 非必要 | 默认为 `10` | +| bangumi_num | num | 番剧推荐数? | 非必要 | 默认为 `10` | +| upuser_num | num | UP主推荐数? | 非必要 | 默认为 `3` | +| rnd | num | 一个随机浮点数 | 非必要 | 由 `Math.random()` 生成? | +| buvid | str | 同 Cookie 中 buvid3 | 非必要 | | +| spmid | str | 333.1007 | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ------------ | +| exp_str | str | 实验字符串? | 作用尚不明确 | +| code | num | 返回值 | 0:成功 | +| result | obj | 搜索建议结果 | | +| stoken | str | ??? | 作用尚不明确 | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------- | ---- | +| tag | array | 套了个娃 | | + +`result`中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---------------------- | +| 0 | obj | 第1建议关键词 | | +| n | obj | 第(n+1)建议关键词 | 按照相关程度与热度顺序 | +| 9 | obj | 第10建议关键词 | 最后一项 | + +`tag`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | -------------------------------------------------- | +| value | str | 关键词内容 | | +| ref | num | 0 | 作用尚不明确 | +| name | str | 显示内容 | 带有 `` 的 XML 标签 | +| spid | num | 5 | 作用尚不明确 | +| type | str | 空 | | + +**示例:** + +获取关于 `洛天依` 的搜索建议 + +```shell +curl -G 'https://s.search.bilibili.com/main/suggest' \ +--data-urlencode 'term=洛天依' +``` + +
+查看响应示例: + +```json +{ + "exp_str": "106301_106700", + "code": 0, + "result": { + "tag": [ + { + "value": "洛天依", + "term": "洛天依", + "ref": 0, + "name": "洛天依", + "spid": 5, + "type": "" + }, + { + "value": "洛天依十二周年", + "term": "洛天依十二周年", + "ref": 0, + "name": "洛天依十二周年", + "spid": 5, + "type": "" + }, + { + "value": "洛天依演唱会", + "term": "洛天依演唱会", + "ref": 0, + "name": "洛天依演唱会", + "spid": 5, + "type": "" + }, + { + "value": "洛天依手办", + "term": "洛天依手办", + "ref": 0, + "name": "洛天依手办", + "spid": 5, + "type": "" + }, + { + "value": "洛天依歌曲", + "term": "洛天依歌曲", + "ref": 0, + "name": "洛天依歌曲", + "spid": 5, + "type": "" + }, + { + "value": "洛天依童话镇", + "term": "洛天依童话镇", + "ref": 0, + "name": "洛天依童话镇", + "spid": 5, + "type": "" + }, + { + "value": "洛天依东京不太热", + "term": "洛天依东京不太热", + "ref": 0, + "name": "洛天依东京不太热", + "spid": 5, + "type": "" + }, + { + "value": "洛天依霜雪千年", + "term": "洛天依霜雪千年", + "ref": 0, + "name": "洛天依霜雪千年", + "spid": 5, + "type": "" + }, + { + "value": "洛天依生日会", + "term": "洛天依生日会", + "ref": 0, + "name": "洛天依生日会", + "spid": 5, + "type": "" + }, + { + "value": "洛天依生日", + "term": "洛天依生日", + "ref": 0, + "name": "洛天依生日", + "spid": 5, + "type": "" + } + ] + }, + "stoken": "4020133863501304726" +} +``` + +
diff --git a/docs/teenager/teenager_mode.md b/docs/teenager/teenager_mode.md new file mode 100644 index 0000000..e7f5a1b --- /dev/null +++ b/docs/teenager/teenager_mode.md @@ -0,0 +1,84 @@ +# 青少年模式 +## 开启/关闭 +> https://app.bilibili.com/x/v2/account/teenagers/update + +*请求方式:POST* + +认证方式:APP(详见[设备各类标识算法](../misc/device_identity.md)) + +**POST参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-----|-------|---------|-----| +| appkey | str | APP密钥 | APP必要 | | +| ts | num | 当前时间戳 | APP必要 | | +| sign | str | APP签名 | APP必要 | | +| access_key | str | APP登录Token | APP必要 | | +| device_model | str | 设备 Model | APP必要 | | +| channel | str | APP下载渠道 | APP必要 | 比如yingyongbao | +| mobi_app | str |APP 包类型 | APP必要 | | +| platform | str |平台类型| APP必要 | android | +| c_locale | str |语言| 非必要 | zh_CN | +| s_locale | str |语言| 非必要 | zh_CN | +| statistics | str | ? | 必要 | 一般固定为{"appId":1,"platform":3,"version":"7.27.0","abtest":""},非key-value入参需要转URL编码 | +| pwd | num |密码| 必要 | 开启时为4位,关闭时必须为空 | +| teenagers_mode | num |开启/关闭模式| 必要 | 0为开启,1为关闭 | +| teenagers_status | num |当前模式状态| 必要 | 0为已经开启,1为目前关闭 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ---------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** +关闭本账号的青少年模式(pwd=&teenagers_mode=1&teenagers_status=0) +```shell +curl --location 'https://app.bilibili.com/x/v2/account/teenagers/update' \ +--header 'Device-Id: 你的设备id' \ +--header 'Fp_local: 你的本地设备指纹' \ +--header 'Fp_remote: 你的远程设备指纹' \ +--header 'Session_id: 会话id' \ +--header 'App-Key: android' \ +--header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \ +--data-urlencode 'access_key=你的access_key' \ +--data-urlencode 'appkey=1d8b6e7d45233436' \ +--data-urlencode 'build=6270200' \ +--data-urlencode 'c_locale=zh_CN' \ +--data-urlencode 'channel=yingyongbao' \ +--data-urlencode 'device_model=samsung%257CSM-G955N' \ +--data-urlencode 'mobi_app=android' \ +--data-urlencode 'platform=android' \ +--data-urlencode 's_locale=zh_CN' \ +--data-urlencode 'statistics=%257B%2522appId%2522%253A1%252C%2522platform%2522%253A3%252C%2522version%2522%253A%25226.27.0%2522%252C%2522abtest%2522%253A%2522%2522%257D' \ +--data-urlencode 'pwd=' \ +--data-urlencode 'teenagers_mode=1' \ +--data-urlencode 'teenagers_status=0' \ +--data-urlencode 'ts=1699301298' \ +--data-urlencode 'sign=0666c38cb79691c4a0d9570a0669ec96' \ +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` +pwd有数值时 +```json +{ + "code": -400, + "message": "关闭时密码必须为空", + "ttl": 1 +} +``` + +
diff --git a/docs/user/batch.md b/docs/user/batch.md new file mode 100644 index 0000000..98953e9 --- /dev/null +++ b/docs/user/batch.md @@ -0,0 +1,85 @@ +# 批量查询 + +## 用户名查 mid + +### 动态 + +> https://api.bilibili.com/x/polymer/web-dynamic/v1/name-to-uid + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + + + +**URL 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------ | ------ | ------ | ---- | +| names | string | 用户名 | 必要 | 多个用户名以 `,` 分隔 | + +**JSON 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| code | number | 返回值 | 0: 成功
-101: 账号未登录
-400: 请求错误 | +| data | object | 数据本体 | | +| message | string | 错误信息 | 成功时为 `0` | +| ttl | number | `1` | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| uid_list | object[] | UID 列表 | 套了个娃 | + +`data.uid_list[]` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| name | string | 用户名 | | +| uid | string | mid (UID) | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/name-to-uid' \ +--url-query 'names=社会易姐qwq,session小胡,陈睿,洛天依' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "uid_list": [ + { + "name": "社会易姐QwQ", + "uid": "293793435" + }, + { + "name": "陈睿", + "uid": "208259" + }, + { + "name": "Session小胡", + "uid": "645769214" + }, + { + "name": "洛天依", + "uid": "36081646" + } + ] + }, + "message": "0", + "ttl": 1 +} +``` +
+ + diff --git a/docs/user/check_nickname.md b/docs/user/check_nickname.md new file mode 100644 index 0000000..b006dbc --- /dev/null +++ b/docs/user/check_nickname.md @@ -0,0 +1,145 @@ +# 检查昵称是否可注册 + +## ~~检查昵称(已失效)~~ + +
+查看折叠内容 + +> https://passport.bilibili.com/web/generic/check/nickname + +*请求方式:GET* + +也可用于判断指定昵称的用户是否存在 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ----------- | ------ | ---- | +| nickName | str | 目标昵称 | 必要 | 最长为16字符 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 状态码 | -400:请求错误
-500:服务器端异常
**详细说明见下一表格** | +| message | str | 错误详情 | 若昵称可用,则不返回message | + +`code`状态码: + +| 值 | 含义 | +| ----- | --------------------------------- | +| 0 | 昵称未被注册 | +| 2001 | 该昵称已被他人使用 | +| 40002 | 昵称包含敏感信息 | +| 40004 | 昵称不可包含除\-和_以外的特殊字符 | +| 40005 | 昵称过长(超过16字符) | +| 40006 | 昵称过短(少于2字符) | +| 40014 | 昵称已存在 | + +**示例:** + +查询昵称 `xijinping` 是否被使用: + +```shell +curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \ +--data-urlencode 'nickName=xijinping' +``` + +
+查看响应示例: + +```json +{ + "code":40002, + "message":"昵称包含敏感信息" +} +``` + +
+ +查询昵称 `//` 是否被使用: + +```shell +curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \ +--data-urlencode 'nickName=//' +``` + +
+查看响应示例: + +```json +{ + "code": 40004, + "message": "昵称不可包含除-和_以外的特殊字符" +} +``` + +
+ +查询昵称 `test0000000000000 ` 是否被使用: + +```shell +curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \ +--data-urlencode 'nickName=test0000000000000 ' +``` + +
+查看响应示例: + +```json +{ + "code": 40005, + "message": "昵称过长" +} +``` + +
+ +查询昵称 `0` 是否被使用: + +```shell +curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \ +--data-urlencode 'nickName=0' +``` + +
+查看响应示例: + +```json +{ + "code": 40006, + "message": "昵称过短" +} +``` + +
+ +查询昵称 `test` 是否被使用: + +```shell +curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \ +--data-urlencode 'nickName=test' +``` + +
+查看响应示例: + +```json +{ + "code":40014, + "message":"昵称已存在" +} +``` + +
+ +
+ +目前该接口无论参数,稳定返回: +```json +{ + "code": 0 +} +``` diff --git a/docs/user/contract.md b/docs/user/contract.md new file mode 100644 index 0000000..ec4d110 --- /dev/null +++ b/docs/user/contract.md @@ -0,0 +1,131 @@ +# 加入老粉计划 + +> https://api.bilibili.com/x/v1/contract/add_contract + +*请求方式:POST* + +是否需要登录:`是` + +认证方式:Cookie(SESSDATA) + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|--------|-----|-----| +| aid | str | `空串` | | | +| up_mid | str | UP主UID | 必要 | | +| source | str | `4` | | | +| scene | str | `105` | | | +| platform | str | `web` | | | +| mobi_app | str | `pc` | | | +| csrf | str | 用户csrf | 必要 | | + +**json回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +|---------|-----|------|-------------------------| +| code | num | 响应码 | 0:成功
158001:`不满足条件` | +| message | str | 0 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------------|------|-----------------------------------|-----| +| allow_message | bool | `true` | | +| input_text | str | `UP主加油!看好你噢~` | | +| input_title | str | `感谢你对UP主的特别支持,“老粉”可期!私信留言鼓励下TA吧~ ` | | + +**示例:** + +```shell +curl --location --request POST 'https://api.bilibili.com/x/v1/contract/add_contract' \ +--header 'Cookie: SESSDATA=xxx' \ +--header 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'up_mid=2' \ +--data-urlencode 'csrf=xxx' +``` + +
+点击查看 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "allow_message": true, + "input_text": "UP主加油!看好你噢~", + "input_title": "感谢你对UP主的特别支持,“老粉”可期!私信留言鼓励下TA吧~" + } +} +``` + +
+ +# 老粉计划发送留言 + +> https://api.bilibili.com/x/v1/contract/add_message + +*请求方式:POST* + +认证方式:Cookie (SESSDATA) + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------|-----|--------|-----|-----| +| aid | str | `空串` | | | +| up_mid | str | UP主UID | 必要 | | +| source | str | `4` | | | +| scene | str | `105` | | | +| content | str | 留言内容 | 必要 | | +| csrf | str | 用户csrf | 必要 | | + +**json回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------------| +| code | num | 响应码 | 0:成功
158005:您跟up主还不是契约关系 | +| message | str | 0 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------------|-----|------------------|-----| +| success_toast | str | `提交成功,UP主已收到留言~` | | + +**示例:** + +```shell +curl --location --request POST 'https://api.bilibili.com/x/v1/contract/add_message' \ +--header 'Cookie: SESSDATA=xxx' \ +--header 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'up_mid=2' \ +--data-urlencode 'content=..' \ +--data-urlencode 'csrf=xxx' +``` + +
+点击查看 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "success_toast": "提交成功,UP主已收到留言~" + } +} +``` + +
diff --git a/docs/user/info.md b/docs/user/info.md new file mode 100644 index 0000000..ead40b3 --- /dev/null +++ b/docs/user/info.md @@ -0,0 +1,1777 @@ +# 用户基本信息 + + + +## 用户空间详细信息 + +> https://api.bilibili.com/x/space/wbi/acc/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md), Cookie (包含 SESSDATA 与空值的总项数大于等于 3) + +~~该接口的旧版 API :~~(已废弃,不建议使用) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ------------------------------------ | +| mid | num | 目标用户mid | 必要 | | +| w_rid | str | Wbi 签名 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | +| wts | num | 当前时间戳 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-403:访问权限不足
-404:用户不存在(如注销账号) | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| mid | num | mid | | +| name | str | 昵称 | | +| sex | str | 性别 | 男/女/保密 | +| face | str | 头像链接 | | +| face_nft | num | 是否为 NFT 头像 | 0:不是 NFT 头像
1:是 NFT 头像 | +| face_nft_type | num | NFT 头像类型? | | +| sign | str | 签名 | | +| rank | num | 用户权限等级 | 目前应该无任何作用
5000:0级未答题
10000:普通会员
20000:字幕君
25000:VIP
30000:真·职人
32000:管理员 | +| level | num | 当前等级 | 0-6 级 | +| jointime | num | 注册时间 | 此接口返回恒为`0` | +| moral | num | 节操值 | 此接口返回恒为`0` | +| silence | num | 封禁状态 | 0:正常
1:被封 | +| coins | num | 硬币数 | 需要登录(Cookie)
只能查看自己的
默认为`0` | +| fans_badge | bool | 是否具有粉丝勋章 | false:无
true:有 | +| fans_medal | obj | 粉丝勋章信息 | | +| official | obj | 认证信息 | | +| vip | obj | 会员信息 | | +| pendant | obj | 头像框信息 | | +| nameplate | obj | 勋章信息 | | +| user_honour_info | obj | (?) | | +| is_followed | bool | 是否关注此用户 | true:已关注
false:未关注
需要登录(Cookie)
未登录恒为`false` | +| top_photo | str | 主页头图链接 | | +| theme | obj | (?) | | +| sys_notice | obj | 系统通知 | 无内容则为空对象
主要用于展示如用户争议、纪念账号等等的小黄条 | +| live_room | obj | 直播间信息 | | +| birthday | str | 生日 | MM-DD
如设置隐私为空 | +| school | obj | 学校 | | +| profession | obj | 专业资质信息 | | +| tags | 有效时:array
无效时:null | 个人标签 | | +| series | obj | (?) | | +| is_senior_member | num | 是否为硬核会员 | 0:否
1:是 | +| mcn_info | null | (?) | | +| gaia_res_type | num | (?) | | +| gaia_data | null | (?) | | +| is_risk | bool | (?) | | +| elec | obj | 充电信息 | | +| contract | obj | 是否显示老粉计划 | | +| certificate_show | bool | (?) | | +| name_render | 有效时:obj
无效时:null | 昵称渲染信息 | | + +`rank`示例 + +| UID | rank | +| --------- | ----- | +| 2 | 20000 | +| 16765 | 20000 | +| 15773384 | 20000 | +| 124416 | 20000 | +| 429736362 | 25000 | +| 424261768 | 25000 | +| 41273726 | 25000 | +| 15080107 | 25000 | +| 9847497 | 25000 | +| 4856007 | 25000 | +| 928123 | 25000 | +| 132704 | 25000 | +| 70093 | 25000 | +| 47291 | 25000 | +| 27380 | 25000 | +| 22445 | 25000 | +| 3351 | 25000 | +| 1101 | 25000 | +| 93066 | 30000 | +| 2443068 | 30000 | +| 46368 | 30000 | +| 11167 | 30000 | + +`profession`示例 + +| UID | +| ------- | +| 654391 | +| 1440295 | +| 1785155 | +| 2990100 | +| 3875803 | + +`data`中的`official`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---------------------------------------- | +| role | num | 认证类型 | 见 [用户认证类型一览](official_role.md) | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无
0:个人认证
1:机构认证 | + +`data`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | ------------------ | -------------------------------------------------------------------- | +| type | num | 会员类型 | 0:无
1:月大会员
2:年度及以上大会员 | +| status | num | 会员状态 | 0:无
1:有 | +| due_date | num | 会员过期时间 | 毫秒时间戳 | +| vip_pay_type | num | 支付类型 | 0:未开启自动续费
1:已开启自动续费 | +| theme_type | num | 0 | 作用尚不明确 | +| label | obj | 会员标签 | | +| avatar_subscript | num | 是否显示会员图标 | 0:不显示
1:显示 | +| nickname_color | str | 会员昵称颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 | +| role | num | 大角色类型 | 1:月度大会员
3:年度大会员
7:十年大会员
15:百年大会员 | +| avatar_subscript_url | str | 大会员角标地址 | | +| tv_vip_status | num | 电视大会员状态 | 0:未开通 | +| tv_vip_pay_type | num | 电视大会员支付类型 | | +| tv_due_date | num | 电视大会员过期时间 | 秒级时间戳 | +| avatar_icon | obj | 大会员角标信息 | | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------- | ---- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| path | str | 空 | 作用尚不明确 | +| text | str | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` | +| label_theme | str | 会员标签 | vip:大会员
annual_vip:年度大会员
ten_annual_vip:十年大会员
hundred_annual_vip:百年大会员
fools_day_hundred_annual_vip:最强绿鲤鱼 | +| text_color | str | 会员标签 | | +| bg_style | num | 1 | | +| bg_color | str | 会员标签背景颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 | +| border_color | str | 会员标签边框颜色 | 未使用 | +| use_img_label | bool | `true` | | +| img_label_uri_hans | str | `空串` | | +| img_label_uri_hant | str | `空串` | | +| img_label_uri_hans_static | str | 大会员牌子图片 | 简体版 | +| img_label_uri_hant_static | str | 大会员牌子图片 | 繁体版 | + +`vip`中的`avatar_icon`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------ | ------------ | +| icon_type | num | (?) | 作用尚不明确 | +| icon_resource | obj | (?) | 作用尚不明确 | + +`data`中的`pendant`对象: + +**普通头像框的`image`与`image_enhance`内容相同** + +**动态头像框的`image`为png静态图片,`image_enhance`为webp动态图片,`image_enhance_frame`为png逐帧序列** + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | --------------------- | ----------------- | +| pid | num | 头像框id | | +| name | str | 头像框名称 | | +| image | str | 头像框图片url | | +| expire | num | 过期时间 | 此接口返回恒为`0` | +| image_enhance | str | 头像框图片url | | +| image_enhance_frame | str | 头像框图片逐帧序列url | | +| n_pid | num | 新版头像框id | | + +`data`中的`nameplate`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | ---- | +| nid | num | 勋章id | | +| name | str | 勋章名称 | | +| image | str | 勋章图标 | | +| image_small | str | 勋章图标(小) | | +| level | str | 勋章等级 | | +| condition | str | 获取条件 | | + +`data`中的`fans_medal`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------------ | ---- | +| show | bool | | | +| wear | bool | 是否佩戴了粉丝勋章 | | +| medal | obj | 粉丝勋章信息 | | + +`fans_medal`中的`medal`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | ------------------- | -------------------------------- | +| uid | num | 此用户mid | | +| target_id | num | 粉丝勋章所属UP的mid | | +| medal_id | num | 粉丝勋章id | | +| level | num | 粉丝勋章等级 | | +| medal_name | str | 粉丝勋章名称 | | +| medal_color | num | 颜色 | | +| intimacy | num | 当前亲密度 | | +| next_intimacy | num | 下一等级所需亲密度 | | +| day_limit | num | 每日亲密度获取上限 | | +| today_feed | num | 今日已获得亲密度 | | +| medal_color_start | num | 粉丝勋章颜色 | 十进制数,可转为十六进制颜色代码 | +| medal_color_end | num | 粉丝勋章颜色 | 十进制数,可转为十六进制颜色代码 | +| medal_color_border | num | 粉丝勋章边框颜色 | 十进制数,可转为十六进制颜色代码 | +| is_lighted | num | | | +| light_status | num | | | +| wearing_status | num | 当前是否佩戴 | 0:未佩戴
1:已佩戴 | +| score | num | | | + +`data`中的`sys_notice`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | ---- | +| id | num | id | | +| content | str | 显示文案 | | +| url | str | 跳转地址 | | +| notice_type | num | 提示类型 | 1,2 | +| icon | str | 前缀图标 | | +| text_color | str | 文字颜色 | | +| bg_color | str | 背景颜色 | | + +`sys_notice`示例 + +| id | content | notice_type | 示例用户 | +| --- | ---------------------------------------------------------------------------------------------- | ----------- | --------------------------------------------------- | +| 5 | 该用户存在争议行为,已冻结其帐号功能的使用 | 1 | | +| 8 | 该用户存在较大争议,请谨慎甄别其内容 | 1 | [28062215](https://space.bilibili.com/28062215) | +| 11 | 该账号涉及合约争议,暂冻结其账号功能使用。详见公告-> | 1 | | +| 16 | 该UP主内容存在争议,请注意甄别视频内信息 | 1 | [382534165](https://space.bilibili.com/382534165) | +| 20 | 请允许我们在此献上最后的告别,以此纪念其在哔哩哔哩留下的回忆与足迹。请点此查看纪念账号相关说明 | 2 | [212535360](https://space.bilibili.com/212535360) | +| 22 | 该账号涉及合约诉讼,封禁其账号使用 | | | +| 24 | 该账号涉及合约争议,暂冻结其账号功能使用 | 1 | [291229008](https://space.bilibili.com/291229008) | +| 25 | 该用户涉及严重指控,暂冻结其账号功能使用 | 1 | [81447581](https://space.bilibili.com/81447581) | +| 31 | 该用户涉及严重指控,暂冻结其账号功能使用 | 1 | [22439273](https://space.bilibili.com/22439273) | +| 34 | 该用户涉及严重指控,暂冻结其账号功能使用 | 1 | [1640486775](https://space.bilibili.com/1640486775) | +| 36 | 该账户存在争议,请谨慎甄别 | 1 | | + +`data`中的`live_room`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | -------------- | ------------------------ | +| roomStatus | num | 直播间状态 | 0:无房间
1:有房间 | +| liveStatus | num | 直播状态 | 0:未开播
1:直播中 | +| url | str | 直播间网页 url | | +| title | str | 直播间标题 | | +| cover | str | 直播间封面 url | | +| watched_show | obj | | | +| roomid | num | 直播间 id | | +| roundStatus | num | 轮播状态 | 0:未轮播
1:轮播 | +| broadcast_type | num | 0 | | + +`live_room`中的`watched_show`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------- | ---- | +| switch | bool | ? | | +| num | num | total watched users | | +| text_small | str | | | +| text_large | str | | | +| icon | str | watched icon url | | +| icon_location | str | ? | | +| icon_web | str | watched icon url | | + +`data`中的`school`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ---------- | +| name | str | 就读大学名称 | 没有则为空 | + +`data`中的`profession`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | --------------------- | +| name | str | 资质名称 | | +| department | str | 职位 | | +| title | str | 所属机构 | | +| is_show | num | 是否显示 | 0:不显示
1:显示 | + +`data`中的`user_honour_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ---- | ---- | +| mid | num | 0 | | +| colour | str | null | | +| tags | array | null | | + +`data`中的`series`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | ---- | ---- | +| user_upgrade_status | num | (?) | | +| show_upgrade_window | bool | (?) | | + +`data`中的`elec`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------------- | ---- | +| show_info | obj | 显示的充电信息 | | + +`elec`中的`show_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------------- | ------------------------------------------------------------------------------------------------------------- | +| show | bool | 是否显示充电按钮 | | +| state | num | 充电功能开启状态 | -1:未开通充电功能
1:已开通自定义充电
2:已开通包月、自定义充电
3:已开通包月高档、自定义充电 | +| title | str | 充电按钮显示文字 | 空字符串或 `充电` 或 `充电中` | +| icon | str | 充电图标 | | +| jump_url | str | 跳转url | | + +`data`中的`contract`对象: + +| 字段名 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ------------------ | ----------------------------------- | +| is_display | bool | | true/false
在页面中未使用此字段 | +| is_follow_display | bool | 是否在显示老粉计划 | true:显示
false:不显示 | + +**示例:** + +查询用户`mid=2`的详细信息,Wbi 签名的 `wts`、`w_rid`生成方式详见 [Wbi 签名](../misc/sign/wbi.md) 文档 + +```shell +curl -G 'https://api.bilibili.com/x/space/wbi/acc/info' \ + --data-urlencode 'mid=2' \ + --data-urlencode 'wts=1685070149' \ + --data-urlencode 'w_rid=f7b376124782ae8cb42c56fdd69144ed' \ + -b 'SESSDATA=xxx ;a= ; b=' \ + -A 'Mozilla/9.0 (X11; qwq)' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 2, + "name": "碧诗", + "sex": "男", + "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "face_nft": 0, + "face_nft_type": 0, + "sign": "https://kami.im 直男过气网红 # We Are Star Dust", + "rank": 20000, + "level": 6, + "jointime": 0, + "moral": 0, + "silence": 0, + "coins": 0, + "fans_badge": true, + "fans_medal": { + "show": true, + "wear": true, + "medal": { + "uid": 2, + "target_id": 548076, + "medal_id": 32525, + "level": 28, + "medal_name": "桜樱怪", + "medal_color": 398668, + "intimacy": 25364, + "next_intimacy": 160000, + "day_limit": 250000, + "today_feed": 2382, + "medal_color_start": 398668, + "medal_color_end": 6850801, + "medal_color_border": 6809855, + "is_lighted": 1, + "guard_level": 3, + "light_status": 1, + "wearing_status": 1, + "score": 50185364 + } + }, + "official": { + "role": 2, + "title": "bilibili创始人(站长)", + "desc": "", + "type": 0 + }, + "vip": { + "type": 2, + "status": 1, + "due_date": 3979555200000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "十年大会员", + "label_theme": "ten_annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 7, + "avatar_subscript_url": "", + "tv_vip_status": 1, + "tv_vip_pay_type": 1, + "tv_due_date": 2003500800, + "avatar_icon": { + "icon_type": 1, + "icon_resource": {} + } + }, + "pendant": { + "pid": 32257, + "name": "EveOneCat2", + "image": "https://i2.hdslb.com/bfs/garb/item/488870931b1bba66da36d22848f0720480d3d79a.png", + "expire": 0, + "image_enhance": "https://i2.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp", + "image_enhance_frame": "https://i2.hdslb.com/bfs/garb/item/4316a3910bb0bd6f2f1c267a3e9187f0b9fe5bd0.png", + "n_pid": 32257 + }, + "nameplate": { + "nid": 10, + "name": "见习偶像", + "image": "https://i2.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png", + "image_small": "https://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png", + "level": "普通勋章", + "condition": "所有自制视频总播放数>=10万" + }, + "user_honour_info": { + "mid": 0, + "colour": null, + "tags": [], + "is_latest_100honour": 0 + }, + "is_followed": false, + "top_photo": "http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png", + "theme": {}, + "sys_notice": {}, + "live_room": { + "roomStatus": 1, + "liveStatus": 0, + "url": "https://live.bilibili.com/1024?broadcast_type=0&is_room_feed=0", + "title": "试图恰鸡", + "cover": "http://i0.hdslb.com/bfs/live/new_room_cover/96ee5bfd0279a0f18b190340334f43f473038288.jpg", + "roomid": 1024, + "roundStatus": 0, + "broadcast_type": 0, + "watched_show": { + "switch": true, + "num": 3, + "text_small": "3", + "text_large": "3人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": "", + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + } + }, + "birthday": "09-19", + "school": { + "name": "" + }, + "profession": { + "name": "", + "department": "", + "title": "", + "is_show": 0 + }, + "tags": null, + "series": { + "user_upgrade_status": 3, + "show_upgrade_window": false + }, + "is_senior_member": 0, + "mcn_info": null, + "gaia_res_type": 0, + "gaia_data": null, + "is_risk": false, + "elec": { + "show_info": { + "show": true, + "state": 1, + "title": "", + "icon": "", + "jump_url": "?oid=2" + } + }, + "contract": { + "is_display": false, + "is_follow_display": false + }, + "certificate_show": false, + "name_render": null + } +} +``` + +
+ +## 用户名片信息 + +> https://api.bilibili.com/x/web-interface/card + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------------------- | ------ | ----------------------- | +| mid | num | 目标用户mid | 必要 | | +| photo | bool | 是否请求用户主页头图 | 非必要 | true:是
false:否 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------------- | ------------------------------------------------------------------------ | +| card | obj | 卡片信息 | | +| following | bool | 是否关注此用户 | true:已关注
false:未关注
需要登录(Cookie)
未登录为false | +| archive_count | num | 用户稿件数 | | +| article_count | num | 0 | **作用尚不明确** | +| follower | num | 粉丝数 | | +| like_num | num | 点赞数 | | + +`data`中的`card`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | ------------ | ----------------------- | +| mid | str | 用户mid | | +| approve | bool | false | **作用尚不明确** | +| name | str | 用户昵称 | | +| sex | str | 用户性别 | 男 女 保密 | +| face | str | 用户头像链接 | | +| DisplayRank | str | 0 | **作用尚不明确** | +| regtime | num | 0 | **作用尚不明确** | +| spacesta | num | 用户状态 | 0:正常
-2:被封禁 | +| birthday | str | 空 | **作用尚不明确** | +| place | str | 空 | **作用尚不明确** | +| description | str | 空 | **作用尚不明确** | +| article | num | 0 | **作用尚不明确** | +| attentions | array | 空 | **作用尚不明确** | +| fans | num | 粉丝数 | | +| friend | num | 关注数 | | +| attention | num | 关注数 | | +| sign | str | 签名 | | +| level_info | obj | 等级 | | +| pendant | obj | 挂件 | | +| nameplate | obj | 勋章 | | +| Official | obj | 认证信息 | | +| official_verify | obj | 认证信息2 | | +| vip | obj | 大会员状态 | | +| space | obj | 主页头图 | | + +`card`中的`level_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------- | ---------------- | +| current_level | num | 当前等级 | 0-6级 | +| current_min | num | 0 | **作用尚不明确** | +| current_exp | num | 0 | **作用尚不明确** | +| next_exp | num | 0 | **作用尚不明确** | + +`card`中的`pendant`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ----------- | ---------------- | +| pid | num | 挂件id | | +| name | str | 挂件名称 | | +| image | str | 挂件图片url | | +| expire | num | 0 | **作用尚不明确** | + +`card`中的`nameplate`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | -------------------- | +| nid | num | 勋章id | **详细说明有待补充** | +| name | str | 勋章名称 | | +| image | str | 挂件图片url 正常 | | +| image_small | str | 勋章图片url 小 | | +| level | str | 勋章等级 | | +| condition | str | 勋章条件 | | + +`card`中的`Official`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---------------------------------------- | +| role | num | 认证类型 | 见[用户认证类型一览](official_role.md) | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无
0:UP主认证
1:机构认证 | + +`card`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---------------------------------------- | +| type | num | 是否认证 | -1:无
0:UP主认证
1:机构认证 | +| desc | str | 认证信息 | 无为空 | + +`card`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ---------- | ------------------------------------------------- | +| vipType | num | 大会员类型 | 0:无
1:月度大会员
2:年度及以上大会员 | +| dueRemark | str | 空 | **作用尚不明确** | +| accessStatus | num | 0 | **作用尚不明确** | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | **作用尚不明确** | +| theme_type | num | 0 | **作用尚不明确** | + +`card`中的`space`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------------- | ---- | +| s_img | str | 主页头图url 小图 | | +| l_img | str | 主页头图url 正常 | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/card' \ +--data-urlencode 'mid=2' \ +--data-urlencode 'photo=true' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "card": { + "mid": "2", + "name": "碧诗", + "approve": false, + "sex": "男", + "rank": "20000", + "face": "http://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "DisplayRank": "0", + "regtime": 0, + "spacesta": 0, + "birthday": "", + "place": "", + "description": "", + "article": 0, + "attentions": [], + "fans": 969999, + "friend": 234, + "attention": 234, + "sign": "kami.im 直男过气网红 # av362830 “We Are Star Dust”", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 10, + "name": "见习偶像", + "image": "http://i2.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png", + "image_small": "http://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png", + "level": "普通勋章", + "condition": "所有自制视频总播放数\u003e=10万" + }, + "Official": { + "role": 2, + "title": "bilibili创始人(站长)", + "desc": "", + "type": 0 + }, + "official_verify": { + "type": 0, + "desc": "bilibili创始人(站长)" + }, + "vip": { + "type": 2, + "status": 1, + "due_date": 3896524800000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "十年大会员", + "label_theme": "ten_annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 7, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", + "vipType": 2, + "vipStatus": 1 + } + }, + "space": { + "s_img": "http://i1.hdslb.com/bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png", + "l_img": "http://i1.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png" + }, + "following": true, + "archive_count": 37, + "article_count": 0, + "follower": 969999, + "like_num": 3547978 + } +} +``` + +
+ +## 登录用户空间详细信息 + +> https://api.bilibili.com/x/space/myinfo + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------- | +| code | num | 返回值 | 0:成功
-101:未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------ | ------------------------ | +| mid | num | mid | | +| name | str | 昵称 | | +| sex | str | 性别 | 男 女 保密 | +| face | str | 头像图片url | | +| sign | str | 签名 | | +| rank | num | 10000 | **作用尚不明确** | +| level | num | 当前等级 | 0-6级 | +| jointime | num | 0 | **作用尚不明确** | +| moral | num | 节操 | 默认70 | +| silence | num | 封禁状态 | 0:正常
1:被封 | +| email_status | num | 已验证邮箱 | 0:未验证
1:已验证 | +| tel_status | num | 已验证手机号 | 0:未验证
1:已验证 | +| identification | num | 1 | **作用尚不明确** | +| vip | obj | 大会员状态 | | +| birthday | num | 生日 | 时间戳 | +| is_tourist | num | 0 | **作用尚不明确** | +| is_fake_account | num | 0 | **作用尚不明确** | +| pin_prompting | num | 0 | **作用尚不明确** | +| is_deleted | num | 0 | **作用尚不明确** | +| coins | num | 硬币数 | | +| following | num | 粉丝数 | | +| follower | num | 粉丝数 | | + +`data`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | ---------------- | ----------------------------------------------- | +| type | num | 会员类型 | 0:无
1:月大会员
2:年度及以上大会员 | +| status | num | 会员状态 | 0:无
1:有 | +| due_date | num | 会员过期时间 | Unix时间戳(毫秒) | +| theme_type | num | 0 | 作用尚不明确 | +| label | obj | 会员标签 | | +| avatar_subscript | num | 是否显示会员图标 | 0:不显示
1:显示 | +| nickname_color | str | 会员昵称颜色 | 颜色码 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | ----------------------------------------------------------------------------------------------------------- | +| path | str | 空 | 作用尚不明确 | +| text | str | 会员名称 | | +| label_theme | str | 会员标签 | vip:大会员
annual_vip:年度大会员
ten_annual_vip:十年大会员
hundred_annual_vip:百年大会员 | + +`data`中的`pendant`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ----------- | -------------------- | +| pid | num | 挂件id | **详细说明有待补充** | +| name | str | 挂件名称 | | +| image | str | 挂件图片url | | +| expire | num | 0 | **作用尚不明确** | + +`data`中的`nameplate`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | -------------------- | +| nid | num | 勋章id | **详细说明有待补充** | +| name | str | 勋章名称 | | +| image | str | 挂件图片url 正常 | | +| image_small | str | 勋章图片url 小 | | +| level | str | 勋章等级 | | +| condition | str | 勋章条件 | | + +`data`中的`Official`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | -------------------------------------- | +| role | num | 认证类型 | 见[用户认证类型一览](official_role.md) | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无
0:认证 | + +`data`中的`level_exp`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------- | ------------------------------------------ | +| current_level | num | 当前等级 | 0-6级 | +| current_min | num | 0 | 指当前等级从多少经验值开始 | +| current_exp | num | 0 | 当前账户的经验值 | +| next_exp | num | 0 | 下一个等级所需的经验值**(不是还需要多少)** | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/space/myinfo' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 293793435, + "name": "社会易姐QwQ", + "sex": "男", + "face": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "sign": "高考刚结束的普通技术宅一枚,喜欢MC和编程以及电子,是车车人也是术术人,粉丝群:1136462265", + "rank": 10000, + "level": 5, + "jointime": 0, + "moral": 70, + "silence": 0, + "email_status": 1, + "tel_status": 1, + "identification": 1, + "vip": { + "type": 2, + "status": 1, + "due_date": 1644163200000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 2511, + "name": "初音未来13周年", + "image": "http://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "expire": 0, + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png" + }, + "nameplate": { + "nid": 4, + "name": "青铜殿堂", + "image": "http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", + "image_small": "http://i0.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", + "level": "普通勋章", + "condition": "单个自制视频总播放数\u003e=1万" + }, + "official": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "birthday": 1015257600, + "is_tourist": 0, + "is_fake_account": 0, + "pin_prompting": 0, + "is_deleted": 0, + "in_reg_audit": 0, + "is_rip_user": false, + "profession": { + "id": 0, + "name": "", + "show_name": "" + }, + "level_exp": { + "current_level": 5, + "current_min": 10800, + "current_exp": 27125, + "next_exp": 28800 + }, + "coins": 9, + "following": 1122, + "follower": 1122 + } +} +``` + +
+ +## 多用户详细信息 + +> https://api.bilibili.com/x/polymer/pc-electron/v1/user/cards + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------------- | ------ | --------------------------------- | +| uids | nums | 目标用户的mid列表 | 必要 | 每个成员间用`,`分隔,最多50个成员 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
40143:批量大小超过限制 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 用户信息随机排序 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------------- | ---- | +| {用户mid} | obj | 该mid对应的用户信息 | | +| …… | obj | …… | …… | + +`data`中的`{用户mid}`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------- | +| mid | str | mid | | +| face | str | 头像链接 | | +| name | str | 昵称 | | +| official | obj | 认证信息 | 基本同「[用户空间详细信息](#用户空间详细信息)」中的 `data.official` 对象 | +| vip | obj | 会员信息 | 基本同「[用户空间详细信息](#用户空间详细信息)」中的 `data.vip` 对象,其中有些类型为 `num` 的字段在本接口中类型为 `str` | +| name_render | 有效时:obj
无效时:null | 昵称渲染信息 | | + +`{用户mid}`中的`name_render`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | --------------------------- | ---------------- | +| colors_info | obj | 昵称颜色信息(?) | **作用尚不明确** | +| render_scheme | str | `"Default"` 或 `"Colorful"` | **作用尚不明确** | + +`name_render`中的`colors_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------------- | ---------------- | +| color | array | 昵称颜色(?) | **作用尚不明确** | +| color_ids | array | `["6"]` | **作用尚不明确** | + +`color`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------- | ---- | +| 0 | obj | 颜色1 | | +| n | obj | 颜色(n+1) | | +| …… | obj | …… | …… | + +`color`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | ----------- | +| color_day | str | 浅色模式昵称颜色 | HEX颜色代码 | +| color_night | str | 深色模式昵称颜色 | HEX颜色代码 | + +**示例:** + +查询用户`uids=1,2,3`的详细信息 + +```shell +curl -G 'https://api.bilibili.com/x/polymer/pc-electron/v1/user/cards' \ +--data-urlencode 'uids=1,2,3' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "1": { + "mid": "1", + "face": "http://i1.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif", + "name": "bishi", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": "1912521600000", + "nickname_color": "#FB7299", + "role": "7", + "status": 1, + "theme_type": 0, + "type": 2, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png", + "label_theme": "ten_annual_vip", + "path": "", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + } + }, + "name_render": null + }, + "2": { + "mid": "2", + "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "name": "碧诗", + "official": { + "desc": "", + "role": 2, + "title": "bilibili创始人(站长)", + "type": 0 + }, + "vip": { + "avatar_subscript": 1, + "avatar_subscript_url": "", + "due_date": "3995625600000", + "nickname_color": "#FB7299", + "role": "7", + "status": 1, + "theme_type": 0, + "type": 2, + "label": { + "bg_color": "#FB7299", + "bg_style": 1, + "border_color": "", + "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png", + "label_theme": "ten_annual_vip", + "path": "", + "text": "十年大会员", + "text_color": "#FFFFFF", + "use_img_label": true + } + }, + "name_render": null + }, + "3": { + "mid": "3", + "face": "http://i0.hdslb.com/bfs/face/d4de6a84557eea8f18510a3f61115d96832aa071.jpg", + "name": "囧囧倉", + "official": { + "desc": "", + "role": 0, + "title": "", + "type": -1 + }, + "vip": { + "avatar_subscript": 0, + "avatar_subscript_url": "", + "due_date": "0", + "nickname_color": "", + "role": "0", + "status": 0, + "theme_type": 0, + "type": 0, + "label": { + "bg_color": "", + "bg_style": 0, + "border_color": "", + "img_label_uri_hans": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant": "", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png", + "label_theme": "", + "path": "", + "text": "", + "text_color": "", + "use_img_label": true + } + }, + "name_render": null + } + } +} +``` + +
+ +## 多用户详细信息2 + +> https://api.vc.bilibili.com/account/v1/user/cards + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +本接口较其他接口相比,只会返回非常有限的信息 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------------- | ------ | --------------------------------------------------------------------- | +| uids | nums | 目标用户的mid列表 | 必要 | 每个成员间用`,`分隔,最多50个成员,若超过此限制则返回的`data`数组为空 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 信息本体 | 用户信息随机排序 | + + +**示例:** + +查询用户`uids=1,2,3`的详细信息 + +```shell +curl -G 'https://api.vc.bilibili.com/account/v1/user/cards' \ +--data-urlencode 'uids=1,2,3' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "mid": 3, + "name": "囧囧倉", + "face": "http://i0.hdslb.com/bfs/face/d4de6a84557eea8f18510a3f61115d96832aa071.jpg", + "sign": "富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善。", + "rank": 10000, + "level": 6, + "silence": 0 + }, + { + "mid": 2, + "name": "碧诗", + "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "sign": "https://kami.im 直男过气网红 # We Are Star Dust", + "rank": 20000, + "level": 6, + "silence": 0 + }, + { + "mid": 1, + "name": "bishi", + "face": "http://i1.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif", + "sign": "", + "rank": 10000, + "level": 6, + "silence": 0 + } + ] +} +``` + +
+ +## 多用户详细信息3 + +> https://api.vc.bilibili.com/x/im/user_infos + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------------- | ------ | ------------------- | +| uids | nums | 目标用户的mid列表 | 必要 | 每个成员间用`,`分隔 | + + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------- | ---- | +| 0 | obj | 用户1 | | +| n | obj | 用户(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------ | -------------------- | +| mid | num | mid | | +| name | str | 昵称 | | +| face | str | 头像链接 | | +| sign | str | 签名 | | +| rank | num | 用户权限等级 | | +| level | num | 当前等级 | 0-6 级 | +| silence | num | 封禁状态 | 0:正常
1:被封 | +| vip | obj | 大会员信息 | | +| offical | obj | 认证信息 | | +| is_fake_account | bool | | | +| expert_info | obj | 专业信息? | | + +**示例:** + +查询用户`uids=1,2,3`的详细信息 + +```shell +curl -G 'https://api.vc.bilibili.com/x/im/user_infos' \ +--data-urlencode 'uids=2,114514' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "message": "0", + "ttl": 1, + "data": [ + { + "mid": 2, + "name": "碧诗", + "sex": "男", + "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "sign": "https://kami.im 直男过气网红 # We Are Star Dust", + "rank": 20000, + "level": 6, + "silence": 0, + "vip": { + "type": 2, + "status": 1, + "due_date": 4000982400000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "十年大会员", + "label_theme": "ten_annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 7, + "avatar_subscript_url": "", + "tv_vip_status": 1, + "tv_vip_pay_type": 1, + "tv_due_date": 2003500800, + "avatar_icon": { + "icon_type": 1, + "icon_resource": { + + } + } + }, + "pendant": { + "pid": -338454175, + "name": "箱庭少女之梦头像", + "image": "https://i2.hdslb.com/bfs/garb/open/efe5e579cbb95a404c2ba289f37c5965dee7a3a2.png", + "expire": 0, + "image_enhance": "https://i2.hdslb.com/bfs/garb/open/efe5e579cbb95a404c2ba289f37c5965dee7a3a2.png", + "image_enhance_frame": "", + "n_pid": 1743418268001 + }, + "nameplate": { + "nid": 10, + "name": "见习偶像", + "image": "https://i2.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png", + "image_small": "https://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png", + "level": "普通勋章", + "condition": "所有自制视频总播放数\u003E=10万" + }, + "official": { + "role": 2, + "title": "bilibili创始人(站长)", + "desc": "", + "type": 0 + }, + "birthday": 622137600, + "is_fake_account": 0, + "is_deleted": 0, + "in_reg_audit": 0, + "face_nft": 0, + "face_nft_new": 0, + "is_senior_member": 0, + "digital_id": "", + "digital_type": -2, + "attestation": { + "type": 2, + "common_info": { + "title": "bilibili创始人(站长)", + "prefix": "bilibili UP主认证", + "prefix_title": "bilibili UP主认证:bilibili创始人(站长)" + }, + "splice_info": { + "title": "bilibili创始人(站长)" + }, + "icon": "https://i0.hdslb.com/bfs/activity-plat/static/20230828/e3b8ebec8e86f060b930a2c0536bb88b/72wejSxl9Z.png", + "desc": "" + }, + "expert_info": { + "title": "", + "state": 0, + "type": 0, + "desc": "" + }, + "honours": { + "mid": 2, + "colour": { + "dark": "#CE8620", + "normal": "#F0900B" + }, + "tags": null, + "is_latest_100honour": 0 + }, + "name_render": null, + "json_ava": { + "container_size": { + "width": 1.375, + "height": 1.375 + }, + "fallback_layers": { + "layers": [ + { + "visible": true, + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.6875, + "axis_y": 0.6875 + }, + "size_spec": { + "width": 0.787, + "height": 0.787 + }, + "render_spec": { + "opacity": 1 + } + }, + "layer_config": { + "tags": { + "AVATAR_LAYER": { + + } + }, + "is_critical": true, + "layer_mask": { + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.6875, + "axis_y": 0.6875 + }, + "size_spec": { + "width": 0.787, + "height": 0.787 + }, + "render_spec": { + "opacity": 1 + } + }, + "mask_src": { + "src_type": 3, + "draw": { + "draw_type": 1, + "fill_mode": 1, + "color_config": { + "day": { + "argb": "#FF000000" + } + } + } + } + } + }, + "resource": { + "res_type": 3, + "res_image": { + "image_src": { + "src_type": 1, + "placeholder": 6, + "remote": { + "url": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "bfs_style": "widget-layer-avatar" + } + } + } + } + }, + { + "visible": true, + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.6875, + "axis_y": 0.6875 + }, + "size_spec": { + "width": 1.375, + "height": 1.375 + }, + "render_spec": { + "opacity": 1 + } + }, + "layer_config": { + "tags": { + "PENDENT_LAYER": { + + } + } + }, + "resource": { + "res_type": 3, + "res_image": { + "image_src": { + "src_type": 1, + "remote": { + "url": "https://i2.hdslb.com/bfs/garb/open/efe5e579cbb95a404c2ba289f37c5965dee7a3a2.png", + "bfs_style": "widget-layer-avatar" + } + } + } + } + }, + { + "visible": true, + "general_spec": { + "pos_spec": { + "coordinate_pos": 1, + "axis_x": 0.806, + "axis_y": 0.822666666666667 + }, + "size_spec": { + "width": 0.35, + "height": 0.35 + }, + "render_spec": { + "opacity": 1 + } + }, + "layer_config": { + "tags": { + "ICON_LAYER": { + + } + } + }, + "resource": { + "res_type": 5, + "res_native_draw": { + "draw_src": { + "src_type": 3, + "draw": { + "draw_type": 1, + "fill_mode": 1, + "color_config": { + "is_dark_mode_aware": true, + "day": { + "argb": "#FFFFFFFF" + }, + "night": { + "argb": "#FF17181A" + } + } + } + } + } + } + }, + { + "visible": true, + "general_spec": { + "pos_spec": { + "coordinate_pos": 1, + "axis_x": 0.831, + "axis_y": 0.847666666666667 + }, + "size_spec": { + "width": 0.3, + "height": 0.3 + }, + "render_spec": { + "opacity": 1 + } + }, + "layer_config": { + "tags": { + "ICON_LAYER": { + + } + } + }, + "resource": { + "res_type": 3, + "res_image": { + "image_src": { + "src_type": 2, + "local": 3 + } + } + } + } + ], + "is_critical_group": true + }, + "mid": "2" + } + }, + { + "mid": 114514, + "name": "田所こうじ", + "sex": "保密", + "face": "http://i1.hdslb.com/bfs/face/875eb66bb952f16afa9634081a820dea8e3fac96.jpg", + "sign": "?!", + "rank": 10000, + "level": 6, + "silence": 0, + "vip": { + "type": 1, + "status": 0, + "due_date": 1683043200000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "", + "tv_vip_status": 0, + "tv_vip_pay_type": 0, + "tv_due_date": 0, + "avatar_icon": { + "icon_resource": { + + } + } + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0 + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "birthday": -1590393600, + "is_fake_account": 0, + "is_deleted": 0, + "in_reg_audit": 0, + "face_nft": 0, + "face_nft_new": 0, + "is_senior_member": 0, + "digital_id": "", + "digital_type": -2, + "attestation": { + "type": 0, + "common_info": { + "title": "", + "prefix": "", + "prefix_title": "" + }, + "splice_info": { + "title": "" + }, + "icon": "", + "desc": "" + }, + "expert_info": { + "title": "", + "state": 0, + "type": 0, + "desc": "" + }, + "honours": { + "mid": 114514, + "colour": { + "dark": "#CE8620", + "normal": "#F0900B" + }, + "tags": null, + "is_latest_100honour": 0 + }, + "name_render": null, + "json_ava": { + "container_size": { + "width": 1.35, + "height": 1.35 + }, + "fallback_layers": { + "layers": [ + { + "visible": true, + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.675, + "axis_y": 0.675 + }, + "size_spec": { + "width": 1, + "height": 1 + }, + "render_spec": { + "opacity": 1 + } + }, + "layer_config": { + "tags": { + "AVATAR_LAYER": { + + } + }, + "is_critical": true, + "layer_mask": { + "general_spec": { + "pos_spec": { + "coordinate_pos": 2, + "axis_x": 0.675, + "axis_y": 0.675 + }, + "size_spec": { + "width": 1, + "height": 1 + }, + "render_spec": { + "opacity": 1 + } + }, + "mask_src": { + "src_type": 3, + "draw": { + "draw_type": 1, + "fill_mode": 1, + "color_config": { + "day": { + "argb": "#FF000000" + } + } + } + } + } + }, + "resource": { + "res_type": 3, + "res_image": { + "image_src": { + "src_type": 1, + "placeholder": 6, + "remote": { + "url": "http://i1.hdslb.com/bfs/face/875eb66bb952f16afa9634081a820dea8e3fac96.jpg", + "bfs_style": "widget-layer-avatar" + } + } + } + } + } + ], + "is_critical_group": true + }, + "mid": "114514" + } + } + ] +} +``` +
diff --git a/docs/user/medals.md b/docs/user/medals.md new file mode 100644 index 0000000..d2374bc --- /dev/null +++ b/docs/user/medals.md @@ -0,0 +1,822 @@ +# 所有粉丝勋章 + +## 指定用户的所有粉丝勋章信息 + +> https://api.live.bilibili.com/xlive/web-ucenter/user/MedalWall + +*请求方法: GET* + +认证方式: Cookie (SESSDATA) + + + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | ---- | +| target_id | num | 目标 mid | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0: 成功
-101: 账号未登录 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | 失败时不存在 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | --------------------- | ----- | +| list | array | 勋章列表 | | +| count | num | 勋章数 | | +| close_space_medal | num | 关闭空间粉丝勋章显示? | 0: 否 | +| only_show_wearing | num | 只显示当前佩戴的? | 0: 否 | +| name | str | 目标用户名 | | +| icon | str | 目标用户头像 URL | | +| uid | num | 目标用户 mid | | +| level | num | 目标用户等级 | | + +`data` 对象中 `list` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ---- | +| medal_info | obj | 勋章信息 | | +| target_name | str | 主播名称 | | +| target_icon | str | 主播头像 URL | | +| link | str | 主播主页 URL | | +| live_status | num | 直播状态 | 0: 未直播
1: 正在直播
2: 轮播中 | +| offical | num | 主播认证类型 | 参见 [用户认证类型一览](official_role.md) | +| uinfo_medal | str | 用户勋章信息 | | + +`list` 数组中的对象中的 `medal_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | -------- | ---- | +| target_id | num | 主播 mid | | +| level | num | 勋章等级 | | +| medal_name | str | 勋章名称 | | +| medal_color_start | num | 勋章开始颜色 | 十进制(自行转换为16进制) | +| medal_color_end | num | 勋章结束颜色 | 同上 | +| medal_color_border | num | 勋章边框颜色 | 同上 | +| guard_level | num | 守护等级? | 1: 总督
2: 提督
3: 舰长 | +| wearing_status | num | 佩戴状态 | 0: 未佩戴
1: 佩戴中 | +| medal_id | num | 勋章 ID | | +| intimacy | num | 当前亲密度 | | +| next_intimacy | num | 下一等级所需亲密度 | | +| today_feed | num | 今日已获得亲密度 | | +| day_limit | num | 亲密度每日上限? | | +| guard_icon | str | 守护徽章图标 URL? | | +| honor_icon | str | 荣誉徽章图标 URL? | | + +`list` 数组中的对象中的 `uinfo_medal` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| name | str | 勋章名称 | | +| level | num | 勋章等级 | | +| color_start | num | 勋章渐变开始颜色 | 十进制(自行转换为16进制) | +| color_end | num | 勋章渐变结束颜色 | 同上 | +| color_border | num | 勋章边框颜色 | 同上 | +| color | num | 勋章颜色 | 同上 | +| id | num | 勋章 ID | | +| typ | num | 勋章类型? | | +| is_light | num | 是否点亮? | | +| ruid | num | 主播 mid | | +| guard_level | num | 大航海等级 | 1: 总督
2: 提督
3: 舰长 | +| score | num | 勋章分数? | | +| guard_icon | str | 大航海图标 URL? | 粉丝牌左边的图标 | +| honor_icon | str | 荣誉徽章图标 URL? | | +| v2_medal_color_start | str | 勋章开始颜色 | 16进制 | +| v2_medal_color_end | str | 勋章结束颜色 | 同上 | +| v2_medal_color_border | str | 勋章边框颜色 | 同上 | +| v2_medal_color_text | str | 勋章文本色 | 同上 | +| v2_medal_color_level | str | 勋章等级颜色 | 同上 | +| user_receive_count | num | 勋章已获得数量? | | + +**示例:** + +```shell +curl -G 'https://api.live.bilibili.com/xlive/web-ucenter/user/MedalWall' \ +--url-query 'target_id=293793435' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "medal_info": { + "target_id": 178429408, + "level": 3, + "medal_name": "滑稽果", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 1, + "medal_id": 113190, + "intimacy": 248, + "next_intimacy": 500, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "老弟一号", + "target_icon": "https://i1.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg", + "link": "https://space.bilibili.com/178429408", + "live_status": 2, + "official": 1, + "uinfo_medal": { + "name": "滑稽果", + "level": 3, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 113190, + "typ": 0, + "is_light": 1, + "ruid": 178429408, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 15858903, + "level": 9, + "medal_name": "二技猿", + "medal_color_start": 9272486, + "medal_color_end": 9272486, + "medal_color_border": 9272486, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 159670, + "intimacy": 168, + "next_intimacy": 1900, + "today_feed": 0, + "day_limit": 3000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "暮光小猿wzt", + "target_icon": "https://i0.hdslb.com/bfs/face/4113913241f83b03301c316fec6e4c3923bef64e.jpg", + "link": "https://space.bilibili.com/15858903", + "live_status": 0, + "official": 0, + "uinfo_medal": { + "name": "二技猿", + "level": 9, + "color_start": 9272486, + "color_end": 9272486, + "color_border": 9272486, + "color": 0, + "id": 159670, + "typ": 0, + "is_light": 1, + "ruid": 15858903, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#596FE099", + "v2_medal_color_end": "#596FE099", + "v2_medal_color_border": "#596FE099", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 24022863, + "level": 7, + "medal_name": "粉丝团", + "medal_color_start": 6126494, + "medal_color_end": 6126494, + "medal_color_border": 6126494, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 233401, + "intimacy": 1499, + "next_intimacy": 1600, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "黄禄轩电脑专用账号", + "target_icon": "https://i0.hdslb.com/bfs/face/a70ec7d2a3822980a915ef4b30371af0cbc79132.jpg", + "link": "https://space.bilibili.com/24022863", + "live_status": 2, + "official": 0, + "uinfo_medal": { + "name": "粉丝团", + "level": 7, + "color_start": 6126494, + "color_end": 6126494, + "color_border": 6126494, + "color": 0, + "id": 233401, + "typ": 0, + "is_light": 1, + "ruid": 24022863, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5866C799", + "v2_medal_color_end": "#5866C799", + "v2_medal_color_border": "#5866C799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 1347373376, + "level": 6, + "medal_name": "Geek范", + "medal_color_start": 6126494, + "medal_color_end": 6126494, + "medal_color_border": 6126494, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 658512, + "intimacy": 999, + "next_intimacy": 1500, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "GeekLogic", + "target_icon": "https://i2.hdslb.com/bfs/face/fc4ba4087efa80dce11dfdd1c2bc07d84fb603b9.jpg", + "link": "https://space.bilibili.com/1347373376", + "live_status": 0, + "official": 1, + "uinfo_medal": { + "name": "Geek范", + "level": 6, + "color_start": 6126494, + "color_end": 6126494, + "color_border": 6126494, + "color": 0, + "id": 658512, + "typ": 0, + "is_light": 1, + "ruid": 1347373376, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5866C799", + "v2_medal_color_end": "#5866C799", + "v2_medal_color_border": "#5866C799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 451664, + "level": 5, + "medal_name": "粉丝团", + "medal_color_start": 6126494, + "medal_color_end": 6126494, + "medal_color_border": 6126494, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 408689, + "intimacy": 799, + "next_intimacy": 1000, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "刘师兄_liujun", + "target_icon": "https://i2.hdslb.com/bfs/face/90665d1613cc5501a3f7bbc79b5dc83bcc30667d.jpg", + "link": "https://space.bilibili.com/451664", + "live_status": 0, + "official": 0, + "uinfo_medal": { + "name": "粉丝团", + "level": 5, + "color_start": 6126494, + "color_end": 6126494, + "color_border": 6126494, + "color": 0, + "id": 408689, + "typ": 0, + "is_light": 1, + "ruid": 451664, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5866C799", + "v2_medal_color_end": "#5866C799", + "v2_medal_color_border": "#5866C799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 89240844, + "level": 5, + "medal_name": "六零", + "medal_color_start": 6126494, + "medal_color_end": 6126494, + "medal_color_border": 6126494, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 306526, + "intimacy": 799, + "next_intimacy": 1000, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "A60_OnE", + "target_icon": "https://i0.hdslb.com/bfs/face/483513f7b0533d666fdf7eff96a70b69992056fd.jpg", + "link": "https://space.bilibili.com/89240844", + "live_status": 0, + "official": 0, + "uinfo_medal": { + "name": "六零", + "level": 5, + "color_start": 6126494, + "color_end": 6126494, + "color_border": 6126494, + "color": 0, + "id": 306526, + "typ": 0, + "is_light": 1, + "ruid": 89240844, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5866C799", + "v2_medal_color_end": "#5866C799", + "v2_medal_color_border": "#5866C799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 1850091, + "level": 5, + "medal_name": "観測者", + "medal_color_start": 6126494, + "medal_color_end": 6126494, + "medal_color_border": 6126494, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 118910, + "intimacy": 98, + "next_intimacy": 1000, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "Jannchie见齐", + "target_icon": "https://i0.hdslb.com/bfs/face/983034448f81f45f05956d0455a86fe0639d6a36.jpg", + "link": "https://space.bilibili.com/1850091", + "live_status": 2, + "official": 1, + "uinfo_medal": { + "name": "観測者", + "level": 5, + "color_start": 6126494, + "color_end": 6126494, + "color_border": 6126494, + "color": 0, + "id": 118910, + "typ": 0, + "is_light": 1, + "ruid": 1850091, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5866C799", + "v2_medal_color_end": "#5866C799", + "v2_medal_color_border": "#5866C799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 4911405, + "level": 4, + "medal_name": "毛狐狸", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 18887, + "intimacy": 658, + "next_intimacy": 700, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "粉毛变态老狐狸", + "target_icon": "https://i0.hdslb.com/bfs/face/5924e9201ac87066e76534472303b636a9961647.jpg", + "link": "https://space.bilibili.com/4911405", + "live_status": 0, + "official": 0, + "uinfo_medal": { + "name": "毛狐狸", + "level": 4, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 18887, + "typ": 0, + "is_light": 1, + "ruid": 4911405, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 130914376, + "level": 3, + "medal_name": "江草", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 166326, + "intimacy": 463, + "next_intimacy": 500, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "江灵夏草", + "target_icon": "https://i1.hdslb.com/bfs/face/63eb615514fddbc6024a34ddcacfb0bc6103d019.jpg", + "link": "https://space.bilibili.com/130914376", + "live_status": 0, + "official": 1, + "uinfo_medal": { + "name": "江草", + "level": 3, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 166326, + "typ": 0, + "is_light": 1, + "ruid": 130914376, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 316568752, + "level": 3, + "medal_name": "SEAL", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 312420, + "intimacy": 428, + "next_intimacy": 500, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "马督工", + "target_icon": "https://i1.hdslb.com/bfs/face/1c56737dfc0deffffc31c78e0cefb0c3ecf7e000.jpg", + "link": "https://space.bilibili.com/316568752", + "live_status": 0, + "official": 1, + "uinfo_medal": { + "name": "SEAL", + "level": 3, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 312420, + "typ": 0, + "is_light": 1, + "ruid": 316568752, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 633003, + "level": 3, + "medal_name": "器材党", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 57027, + "intimacy": 198, + "next_intimacy": 500, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "和光Channel", + "target_icon": "https://i0.hdslb.com/bfs/face/c34413202f3f4ab6c7955a2c9ca5a9ac8e86d8c2.jpg", + "link": "https://space.bilibili.com/633003", + "live_status": 0, + "official": 0, + "uinfo_medal": { + "name": "器材党", + "level": 3, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 57027, + "typ": 0, + "is_light": 1, + "ruid": 633003, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 5760446, + "level": 2, + "medal_name": "花泪", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 32283, + "intimacy": 298, + "next_intimacy": 300, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "花儿不哭", + "target_icon": "https://i2.hdslb.com/bfs/face/4f220d57ca877167f3efdc60e40d0cb53ca58b72.jpg", + "link": "https://space.bilibili.com/5760446", + "live_status": 0, + "official": 1, + "uinfo_medal": { + "name": "花泪", + "level": 2, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 32283, + "typ": 0, + "is_light": 1, + "ruid": 5760446, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 3644545, + "level": 2, + "medal_name": "东方狗", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 249059, + "intimacy": 98, + "next_intimacy": 300, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "白倉カナ", + "target_icon": "https://i1.hdslb.com/bfs/face/ae839f221a5812683fe0a3967f4a612dd65a05d2.jpg", + "link": "https://space.bilibili.com/3644545", + "live_status": 0, + "official": 0, + "uinfo_medal": { + "name": "东方狗", + "level": 2, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 249059, + "typ": 0, + "is_light": 1, + "ruid": 3644545, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 614801, + "level": 1, + "medal_name": "神油", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 627, + "intimacy": 119, + "next_intimacy": 201, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "神游八方", + "target_icon": "https://i2.hdslb.com/bfs/face/98f8e0f609ff2403cc086f7254f388336b6f5366.jpg", + "link": "https://space.bilibili.com/614801", + "live_status": 0, + "official": 1, + "uinfo_medal": { + "name": "神油", + "level": 1, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 627, + "typ": 0, + "is_light": 1, + "ruid": 614801, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + }, + { + "medal_info": { + "target_id": 12246, + "level": 1, + "medal_name": "纯色派", + "medal_color_start": 6067854, + "medal_color_end": 6067854, + "medal_color_border": 6067854, + "guard_level": 0, + "wearing_status": 0, + "medal_id": 5171, + "intimacy": 99, + "next_intimacy": 201, + "today_feed": 0, + "day_limit": 2000, + "guard_icon": "", + "honor_icon": "" + }, + "target_name": "囧仙", + "target_icon": "https://i0.hdslb.com/bfs/face/b7ee967282a33a59908218df5b240b45f51afda8.jpg", + "link": "https://space.bilibili.com/12246", + "live_status": 0, + "official": 1, + "uinfo_medal": { + "name": "纯色派", + "level": 1, + "color_start": 6067854, + "color_end": 6067854, + "color_border": 6067854, + "color": 0, + "id": 5171, + "typ": 0, + "is_light": 1, + "ruid": 12246, + "guard_level": 0, + "score": 0, + "guard_icon": "", + "honor_icon": "", + "v2_medal_color_start": "#5762A799", + "v2_medal_color_end": "#5762A799", + "v2_medal_color_border": "#5762A799", + "v2_medal_color_text": "#FFFFFFFF", + "v2_medal_color_level": "#000B7099", + "user_receive_count": 0 + } + } + ], + "count": 15, + "close_space_medal": 0, + "only_show_wearing": 0, + "name": "社会易姐QwQ", + "icon": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "uid": 645769214, + "level": 6 + } +} +``` + +
diff --git a/docs/user/official_role.md b/docs/user/official_role.md new file mode 100644 index 0000000..fb70aac --- /dev/null +++ b/docs/user/official_role.md @@ -0,0 +1,12 @@ +# 用户认证类型一览 +| ID | 认证类型 | 详细类型 | +| -- | ------- | ------- | +| 0 | 无 | | +| 1 | 个人认证 | 知名UP主 | +| 2 | 个人认证 | 大V达人 | +| 3 | 机构认证 | 企业 | +| 4 | 机构认证 | 组织 | +| 5 | 机构认证 | 媒体 | +| 6 | 机构认证 | 政府 | +| 7 | 个人认证 | 高能主播 | +| 9 | 个人认证 | 社会知名人士 | \ No newline at end of file diff --git a/docs/user/register.md b/docs/user/register.md new file mode 100644 index 0000000..21be1d6 --- /dev/null +++ b/docs/user/register.md @@ -0,0 +1,100 @@ +# 用户注册 + +## 人机验证 + +[完成人机验证(参考验证登录)](../login/login_action/readme.md#验证登录) + +完成后得到`key`, `challenge`, `validate`, `seccode`四个参数 + +## 发送短信验证码 + +[发送短信验证码(参考短信登录)](../login/login_action/SMS.md#发送短信验证码(web端)) + +**注意不同的是这里type=1而非21**,推测此参数决定短信内容 + +```bash +curl 'https://passport.bilibili.com/web/sms/general/v2/send' \ + --data-urlencode 'key=6eeb28e7bbd64b389da2be3a2778c7e3' \ + --data-urlencode 'captchaType=6' \ + --data-urlencode 'type=1' \ + --data-urlencode 'cid=1' \ + --data-urlencode 'tel=13888888888' \ + --data-urlencode 'challenge=c52148f88a28b6011db52bb213483ee8' \ + --data-urlencode 'validate=a98841cd6ea58e1b1f5783fca73cddb6' \ + --data-urlencode 'seccode=a98841cd6ea58e1b1f5783fca73cddb6|jordan' +``` + +
+查看示例 + +```json +{ + "code": 0, + "message": "验证码短信已下发" +} +``` + +
+ +## 提交注册请求 + +> https://passport.bilibili.com/web/reg/tel + +*请求方式:POST* + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | ------------------------------------------------------------ | +| cid | num | 国际冠字码 | 必要 | 可以从 [获取国际冠字码](../login/login_action/SMS.md#获取国际冠字码_web端) 接口中获取 | +| tel | num | 手机号码 | 必要 | | +| code | num | 短信验证码 | 必要 | | +| nickName | str | 昵称 | 必要 | | +| pwd | str | 密码 | 必要 | 密码为明文 | +| plat | num | 0 | 必要 | 平台? | +| gourl | str | 注册成功跳转地址 | 非必要 | 默认为主页`https://www.bilibili.com/` | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------- | +| code | num | 返回值 | 0:成功
1005:验证码错误
1007:验证码过期 | +| message | str | 错误信息 | 成功时无此字段 | +| data | obj | 信息本体 | 只在成功时存在 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---------- | ----------------------------- | +| redirectUrl | str | 跳转链接 | | +| hint | str | "注册成功" | 成功后不提示成功还能提示什么? | +| in_reg_audit | num | (?) | | + +```bash +curl 'https://passport.bilibili.com/web/reg/tel' \ + --data-urlencode 'plat=0' \ + --data-urlencode 'cid=1' \ + --data-urlencode 'tel=13888888888' \ + --data-urlencode 'code=121314' \ + --data-urlencode 'nickName=萌系小妹纸わ' + --data-urlencode 'pwd=Password1234' \ + --data-urlencode 'gourl=https://www.bilibili.com' +``` + +
+查看示例 + +```json +{ + "code": 0, + "data": { + "redirectUrl": "https://www.bilibili.com", + "hint": "注册成功", + "in_reg_audit": 0 + } +} +``` + +
\ No newline at end of file diff --git a/docs/user/relation.md b/docs/user/relation.md new file mode 100644 index 0000000..b8d4fa0 --- /dev/null +++ b/docs/user/relation.md @@ -0,0 +1,2724 @@ +# 用户关系相关 + +## 查询关系列表 + + + +### 关系列表对象 + +以下说明中的 “目标用户” 指被查询的用户,“对方” 指返回的关系列表中的用户。 + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------- | +| mid | num | 用户 mid | | +| attribute | num | 对方对于**自己**的关系属性 | 0:未关注
~~1:悄悄关注(现已下线)~~
2:已关注
6:已互粉
128:已拉黑 | +| mtime | num | 对方关注目标用户时间 | 秒级时间戳
互关后刷新 | +| tag | 默认分组:null
存在至少一个分组:array | 目标用户将对方分组到的 id | | +| special | num | 目标用户特别关注对方标识 | 0:否
1:是 | +| contract_info | obj | 契约计划相关信息 | | +| uname | str | 用户昵称 | | +| face | str | 用户头像url | | +| sign | str | 用户签名 | | +| face_nft | num | 是否为 NFT 头像 | 0:非 NFT 头像
1:NFT 头像 | +| official_verify | obj | 认证信息 | | +| vip | obj | 会员信息 | | +| name_render | 有效时:obj
无效时:null | 昵称渲染信息 | | +| nft_icon | str | (?) | | +| rec_reason | str | 推荐该用户的原因 | 大多数情况下为空;如:`xxx关注了TA`、`xx粉丝 xx视频` | +| track_id | str | 内部记录id | 大多数情况下为空;如:`up_rec_0.router-main-2021485-5f84c987cf-dv8fg.1746380060327.607` | +| follow_time | str | (?) | | + +`list`中的对象中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ------------------------ | ---- | +| 0 | num | 位于分组 1 的分组 id | | +| n | num | 位于分组(n+1)的分组 id | | +| …… | num | …… | …… | + +`list`中的对象中的`contract_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------------------ | ----------------------------------------------------------- | +| is_contract | bool | 目标用户是否为对方的契约者 | 仅当为 `true` 时才有此项 | +| is_contractor | bool | 对方是否为目标用户的契约者 | 仅当为 `true` 时才有此项 | +| ts | num | 对方成为目标用户的契约者的时间 | 秒级时间戳,仅当 `is_contractor` 项的值为 `true` 时才有此项 | +| user_attr | num | 对方作为目标用户的契约者的属性 | 1:老粉
否则为原始粉丝
仅当有特殊属性时才有此项 | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ----------------------------------------- | +| type | num | 用户认证类型 | -1:无
0:UP 主认证
1:机构认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | (?) | | +| accessStatus | num | (?) | | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | (?) | | +| themeType | num | (?) | | +| label | obj | (?) | | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ---- | +| path | str | (?) | | + +### 查询用户粉丝明细(新) + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +本接口只有登录、标头 `referer` 为 `bilibili.com` 下的子域名、UA 不含 `python` 时才会返回列表 + +- 当请求参数 `from=main` 且目标用户为自己时,返回列表按照**智能推荐算法**排序,**仅返回前 1000 名粉丝**,且返回的列表中不含 `mtime` 字段 +- 否则,返回列表按关注时间排序,此时**当前用户仅返回前 1000 名粉丝,其他用户仅返回前 100 名粉丝**,若继续往后查询则返回空列表 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------------- | ---- | ---------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| vmid | num | 目标用户 mid | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为 50 | +| pn | num | 页码 | 非必要 | 默认为 1 | +| offset | str | 偏移量 | 非必要 | 从上次请求的响应数据中的 `data.offset` 获取
此项有效且不为 `rcmd` 时会从此偏移量开始返回粉丝列表,忽略参数 `pn` | +| last_access_ts | num | 上次访问粉丝列表的时间 | 非必要 | 秒级时间戳,从[获取自己粉丝列表的未读状态](#获取自己粉丝列表的未读状态)接口获取
当按照**智能推荐算法**排序时,会优先展示此时间后关注的粉丝 | +| from | str | 请求来源 | 非必要 | 当为 `main` 且目标用户为自己时,粉丝列表按照**智能推荐算法**排序,此时响应数据中的 `data.list` 的成员中的 `rec_reason` 与 `track_id` 为非空 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-352:请求被拦截
-400:请求错误
22118:由于该用户隐私设置,粉丝列表不可见 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ----------------------------------------------------------------------------------------------------- | +| list | array | 明细列表 | | +| offset | str | 偏移量 | 供下次请求使用
普通:`{列表最后的粉丝的 mtime}:{列表最后的粉丝的 mid}`
智能推荐算法:`rcmd` | +| re_version | num | (?) | | +| total | num | 粉丝总数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ------------ | ---------------------------------- | +| 0 | obj | 粉丝 1 | 详见 [关系列表对象](#关系列表对象) | +| n | obj | 粉丝 (n+1) | | +| …… | obj | …… | …… | + +**示例:** + +获取用户`mid=293793435`的粉丝明细 + +```shell +curl -G 'https://api.bilibili.com/x/relation/fans' \ + --data-urlencode 'vmid=293793435' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "mid": 289796932, + "attribute": 0, + "mtime": 1746199088, + "tag": null, + "special": 0, + "contract_info": {}, + "uname": "Astlinga_星灵", + "face": "https://i1.hdslb.com/bfs/face/005264524d05c0b8c132acc3ee88bb839351025b.jpg", + "sign": "", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1734278400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "avatar_subscript_url": "" + }, + "name_render": {}, + "nft_icon": "", + "rec_reason": "", + "track_id": "", + "follow_time": "" + }, + { + "mid": 3494375621396821, + "attribute": 0, + "mtime": 1746098997, + "tag": null, + "special": 0, + "contract_info": {}, + "uname": "JSRCode", + "face": "https://i1.hdslb.com/bfs/face/f6c74700c72d27ae224c5311634b4a3770e3cdcf.jpg", + "sign": "一个喜欢码代码的高中牲", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "avatar_subscript_url": "" + }, + "name_render": {}, + "nft_icon": "", + "rec_reason": "", + "track_id": "", + "follow_time": "" + } + ], + "offset": "1746098997:3494375621396821", + "re_version": 0, + "total": 3776 + } +} +``` + +
+ +### 查询用户粉丝明细(旧) + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +本接口只有登录、标头 `referer` 为 `bilibili.com` 下的子域名、UA 不含 `python` 时才会返回列表 + +**本接口仅可返回前 1000 名粉丝**,若继续往后查询则返回空列表 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ------------------------------------ | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| vmid | num | 目标用户 mid | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为 50 | +| pn | num | 页码 | 非必要 | 默认为 1
仅可查看前 1000 名粉丝 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-352:请求被拦截
-400:请求错误
22118:由于该用户隐私设置,粉丝列表不可见 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---- | +| list | array | 明细列表 | | +| re_version | num | (?) | | +| total | num | 粉丝总数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ------------ | ---------------------------------- | +| 0 | obj | 粉丝 1 | 详见 [关系列表对象](#关系列表对象) | +| n | obj | 粉丝 (n+1) | 按照添加顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +获取用户`mid=293793435`的粉丝明细 + +```shell +curl -G 'https://api.bilibili.com/x/relation/followers' \ + --data-urlencode 'vmid=293793435' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "mid": 289796932, + "attribute": 0, + "mtime": 1746199088, + "tag": null, + "special": 0, + "contract_info": {}, + "uname": "Astlinga_星灵", + "face": "https://i1.hdslb.com/bfs/face/005264524d05c0b8c132acc3ee88bb839351025b.jpg", + "sign": "", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1734278400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "avatar_subscript_url": "" + }, + "name_render": {}, + "nft_icon": "", + "rec_reason": "", + "track_id": "", + "follow_time": "" + }, + { + "mid": 3494375621396821, + "attribute": 0, + "mtime": 1746098997, + "tag": null, + "special": 0, + "contract_info": {}, + "uname": "JSRCode", + "face": "https://i1.hdslb.com/bfs/face/f6c74700c72d27ae224c5311634b4a3770e3cdcf.jpg", + "sign": "一个喜欢码代码的高中牲", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "avatar_subscript_url": "" + }, + "name_render": {}, + "nft_icon": "", + "rec_reason": "", + "track_id": "", + "follow_time": "" + } + ], + "re_version": 0, + "total": 3776 + } +} +``` + +
+ +### 查询用户粉丝明细 + +> + +*请求方式:GET* + +认证方式:无 + +返回目标用户前100个粉丝 + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | --------- | +| vmid | num | 目标用户 mid | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为 20 | +| pn | num | 页码 | 非必要 | 默认为 1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | +| ts | num | 时间戳 | | + +`data.list`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------- | ---- | +| mid | num | 用户mid | | +| uname | str | 用户名 | | +| face | str | 头像 | | +| attribute | num | | | + + +**示例:** + +```shell +curl 'https://line3-h5-mobile-api.biligame.com/game/center/h5/user/relationship/follower_list?vmid=504140200&pn=5&ps=21' +``` +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "list": [ + { + "mid": "3493078644034173", + "attribute": 0, + "uname": "雨天下小雪啦", + "face": "//i0.hdslb.com/bfs/face/28ad110baa58db9265eca657fcba501589981555.jpg", + "attestation_display": { + "type": 0, + "desc": "" + } + }, + { + "mid": "1356049904", + "attribute": 0, + "uname": "一埋子", + "face": "//i2.hdslb.com/bfs/face/84356fd3b183284bc11b011b676432badb4096bf.jpg", + "attestation_display": { + "type": 0, + "desc": "" + } + }, + ] + }, + "ts": 1748829553371, + "request_id": "0684785391344bdc85e4e701bed41b1c" +} +``` +
+ +### 获取自己粉丝列表的未读状态 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +调用此接口后会重置未读状态 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------------------------- | ---------------------------------- | +| count | num | 自上次访问后新增的粉丝个数 | | +| time | num | 上次访问粉丝列表时间 | 秒级时间戳;当没有新增粉丝时为 `0` | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/relation/followers/unread/count' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 55, + "time": 1743677191 + } +} +``` + +
+ +### 查询用户关注明细 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +本接口只有登录、标头 `referer` 为 `bilibili.com` 下的子域名、UA 不含 `python` 时才会返回列表 + +登录可看当前用户全部,其他用户仅可查看前 100 个,访问超过 100 个时返回空列表(但 `code` 值为 `0`) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ----------------------------------------------------------------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| vmid | num | 目标用户 mid | 必要 | | +| order_type | str | 排序方式 | 非必要 | 当目标用户为自己时有效
按照关注顺序排列:留空
按照最常访问排列:attention | +| ps | num | 每页项数 | 非必要 | 默认为 50 | +| pn | num | 页码 | 非必要 | 默认为 1
其他用户仅可查看前 100 个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-352:请求被拦截
-400:请求错误
22115:用户已设置隐私,无法查看 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---- | +| list | array | 明细列表 | | +| re_version | num | (?) | | +| total | num | 关注总数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ----------- | -------------------------------- | +| 0 | obj | 关注1 | 见 [关系列表对象](#关系列表对象) | +| n | obj | 关注(n+1) | 按照添加顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +获取用户`mid=293793435`的关注明细,按照关注顺序 + +```shell +curl -G 'https://api.bilibili.com/x/relation/followings' \ + --data-urlencode 'vmid=293793435' \ + --data-urlencode 'order_type=' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [{ + "mid": 14082, + "attribute": 2, + "mtime": 1584271945, + "tag": null, + "special": 0, + "contract_info": {}, + "uname": "山新", + "face": "https://i0.hdslb.com/bfs/face/74c82caee6d9eb623e56161ea8ed6d68afabfeae.jpg", + "sign": "都说了是天依爹地,不是妈咪。\r私信有点多回复不过来~商业合作啥的请移步Weibo私信@山新 哦哦哦~", + "official_verify": { + "type": 0, + "desc": "配音演员、声优。洛天依声源提供者。" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1601654400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "avatar_subscript_url": "" + }, + "name_render": {}, + "nft_icon": "", + "rec_reason": "", + "track_id": "", + "follow_time": "" + }, { + "mid": 420831218, + "attribute": 2, + "mtime": 1584208169, + "tag": [207542], + "special": 0, + "contract_info": {}, + "uname": "支付宝Alipay", + "face": "https://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg", + "sign": "阿支来了,关注点赞转发投币四连走起!", + "official_verify": { + "type": 1, + "desc": "支付宝官方账号" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1585065600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "avatar_subscript_url": "" + }, + "name_render": {}, + "nft_icon": "", + "rec_reason": "", + "track_id": "", + "follow_time": "" + }], + "re_version": 0, + "total": 1028 + } +} +``` + +
+ +### 查询用户关注明细2 + +> + +*请求方式:GET* + +仅可查看前 5 页,对于已设置可见性隐私关注列表的用户,响应数据中的 `data.list` 为 null,且 `data.total` 为0 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | ----------------------------------------------------------- | +| vmid | num | 目标用户 mid | 必要 | | +| order | str | 排序方式 | 非必要 | 按照降序排列:desc
按照升序排列:asc
默认降序排列 | +| ps | num | 每页项数 | 非必要 | 默认为 50 | +| pn | num | 页码 | 非必要 | 默认为 1
仅可查看前 5 页 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
22007:访问超过 5 页 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---- | +| list | array | 明细列表 | | +| re_version | num | (?) | | +| total | num | 关注总数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ----------- | ------------------------------------------------- | +| 0 | obj | 关注 1 | 与 [关系列表对象](#关系列表对象) 数据结构**不同** | +| n | obj | 关注(n+1) | 按照添加顺序排列 | +| …… | obj | …… | …… | + +数组`list`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ------------------------------------------- | ------------ | --------------------------------------- | +| mid | num | 用户 mid | | +| attribute | num | 关注属性 | 0:未关注
2:已关注
6:已互粉 | +| mtime | num | 关注对方时间 | 时间戳
互关后刷新 | +| tag | 默认分组:null
存在至少一个分组:array | 分组 id | | +| special | num | 特别关注标志 | 0:否
1:是 | +| uname | str | 用户昵称 | | +| face | str | 用户头像 url | | +| sign | str | 用户签名 | | +| official_verify | obj | 认证信息 | | +| vip | obj | 会员信息 | | +| live | num | 是否直播 | 0:未直播
1:直播中 | + +数组`list`中的对象中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ------------------------ | ---- | +| 0 | num | 位于分组 1 的分组 id | | +| n | num | 位于分组(n+1)的分组 id | | +| …… | num | …… | …… | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ---------------------------------------- | +| type | num | 用户认证类型 | -1:无
0:UP主认证
1:机构认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | (?) | | +| accessStatus | num | (?) | | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | (?) | | +| themeType | num | (?) | | +| label | obj | (?) | | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ---- | +| path | str | (?) | | + +**示例:** + +获取用户`mid=293793435`的关注明细,按照关注顺序 + +```shell +curl -G 'https://app.biliapi.net/x/v2/relation/followings' \ + --data-urlencode 'vmid=293793435' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [{ + "mid": 14082, + "attribute": 2, + "mtime": 1584271945, + "tag": null, + "special": 0, + "uname": "山新", + "face": "https://i0.hdslb.com/bfs/face/74c82caee6d9eb623e56161ea8ed6d68afabfeae.jpg", + "sign": "都说了是天依爹地,不是妈咪。\r私信有点多回复不过来~商业合作啥的请移步Weibo私信@山新 哦哦哦~", + "official_verify": { + "type": 0, + "desc": "配音演员、声优。洛天依声源提供者。" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1601654400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "live": 0 + }, { + "mid": 420831218, + "attribute": 2, + "mtime": 1584208169, + "tag": [207542], + "special": 0, + "uname": "支付宝Alipay", + "face": "https://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg", + "sign": "阿支来了,关注点赞转发投币四连走起!", + "official_verify": { + "type": 1, + "desc": "支付宝官方账号" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1585065600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + }, + "live": 0 + }], + "re_version": 3228575555, + "total": 699 + } +} +``` + +
+ +### 查询用户关注明细3 + +> + +*请求方式:GET* + +对于设置了可见性隐私关注列表的用户会返回空列表 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | -------- | +| vmid | num | 目标用户mid | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为20 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 成功时无此项 | +| data | obj | 信息本体 | 失败时无此项 | +| ts | num | 当前时间戳 | 单位为毫秒 | +| request_id | str | 请求id | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------- | ---- | +| list | array | 明细列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------- | ---------------- | +| 0 | obj | 关注1 | | +| n | obj | 关注(n+1) | 按照关注顺序排列 | +| …… | obj | …… | …… | + +数组`list`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ------------------------------ | --------------------------------------- | +| mid | str | 用户mid | | +| attribute | num | 对方对于**目标用户**的关注属性 | 0:未关注
2:已关注
6:已互粉 | +| uname | str | 用户昵称 | | +| face | str | 用户头像url | | +| attention_display | obj | 用户认证信息 | | + +`attention_display`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------------------------------------------------------------ | +| type | num | 是否认证 | 0:无
1:UP主专业认证
2:UP主认证
3:机构认证 | +| desc | str | 认证信息 | | + +**示例:** + +获取用户`mid=293793435`的关注明细 + +```shell +curl -G 'https://line3-h5-mobile-api.biligame.com/game/center/h5/user/relationship/following_list' \ + --data-urlencode 'vmid=293793435' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "list": [{ + "mid": "14082", + "attribute": 2, + "uname": "山新", + "face": "https://i0.hdslb.com/bfs/face/74c82caee6d9eb623e56161ea8ed6d68afabfeae.jpg", + "attestation_display": { "type": 0, "desc": "" } + }, { + "mid": "420831218", + "attribute": 2, + "uname": "支付宝Alipay", + "face": "https://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg", + "attestation_display": { "type": 3, "desc": "bilibili机构认证:支付宝官方账号" } + }] + }, + "ts": 1677410818395, + "request_id": "d9d541b9f2d24e21821e2d6d2d16c17d" +} +``` + +
+ +### 搜索关注明细 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | --------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| vmid | str | 目标用户 mid | 必要 | | +| name | str | 搜索关键词 | 非必要 | | +| ps | num | 每页项数 | 非必要 | 默认为 50 | +| pn | num | 页码 | 非必要 | 默认为 1 | + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
22007:访问超过 5 页 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---- | +| list | array | 明细列表 | | +| re_version | num | (?) | | +| total | num | 关注总数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------------- | -------------------------------- | +| 0 | obj | 匹配项目 1 | 见 [关系列表对象](#关系列表对象) | +| n | obj | 匹配项目(n+1) | 按照添加顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +搜索我的关注列表中关键词`warma` + +```shell +curl -G 'https://api.bilibili.com/x/relation/followings/search' \ + --data-urlencode 'vmid=293793435' \ + --data-urlencode 'name=warma' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "mid": 53456, + "attribute": 2, + "mtime": 1586415053, + "tag": [-10], + "special": 1, + "uname": "Warma", + "face": "https://i2.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg", + "sign": "我是沃玛,做点傻开心的视频。日常发在微博:@_warma_ ", + "official_verify": { + "type": 0, + "desc": "bilibili 知名UP主" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1637424000000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + } + ], + "total": 1 + } +} +``` + +
+ +### 查询共同关注明细 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | --------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| vmid | num | 目标用户 mid | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为 50 | +| pn | num | 页码 | 非必要 | 默认为 1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---- | +| list | array | 明细列表 | | +| re_version | num | (?) | | +| total | num | 关注总数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------------- | -------------------------------- | +| 0 | obj | 共同关注 1 | 见 [关系列表对象](#关系列表对象) | +| n | obj | 共同关注(n+1) | 按照添加顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +获取自己与用户`mid=2`的共同关注明细 + +```shell +curl -G 'https://api.bilibili.com/x/relation/same/followings' \ + --data-urlencode 'vmid=2' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "mid": 116683, + "attribute": 2, + "mtime": 1564627532, + "tag": null, + "special": 0, + "uname": "=咬人猫=", + "face": "https://i0.hdslb.com/bfs/face/8fad84a4470f3d894d8f0dc95555ab8f2cb10a83.jpg", + "sign": "面瘫女仆酱~小粗腿~事业线什么的!!吐槽你就输了!喵~", + "official_verify": { + "type": 0, + "desc": "bilibili 2019百大UP主、高能联盟成员" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1618934400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + }, + { + "mid": 517717593, + "attribute": 2, + "mtime": 1592126052, + "tag": [207542], + "special": 0, + "uname": "上海爱丽丝幻乐团", + "face": "https://i0.hdslb.com/bfs/face/851a9191cbe93e66304d7577c0f6f83834e52109.jpg", + "sign": "日本同人社团 上海爱丽丝幻乐团", + "official_verify": { + "type": 0, + "desc": "上海爱丽丝幻乐团官方账号" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1593792000000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + } + ], + "re_version": 2498273968, + "total": 38 + } +} +``` + +
+ +### 查询悄悄关注明细 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---- | +| list | array | 明细列表 | | +| re_version | num | (?) | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------------- | -------------------------------- | +| 0 | obj | 悄悄关注 1 | 见 [关系列表对象](#关系列表对象) | +| n | obj | 悄悄关注(n+1) | 按照操作顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/relation/whispers' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "mid": 178429408, + "attribute": 1, + "mtime": 1605972105, + "tag": null, + "special": 0, + "uname": "老弟一号", + "face": "https://i2.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg", + "sign": "萌新硬件玩家,前垃圾佬~(◦˙▽˙◦某宝店 老弟一号 粉丝群679540094商务合作V13869651328", + "official_verify": { + "type": 0, + "desc": "知识领域优质UP主" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1632499200000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + } + ], + "re_version": 2137574562 + } +} +``` + +
+ +### 查询互相关注明细 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +查询与自己互关的用户明细,可看全部 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---- | +| list | array | 明细列表 | | +| re_version | num | (?) | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ----------- | -------------------------------- | +| 0 | obj | 互关 1 | 见 [关系列表对象](#关系列表对象) | +| n | obj | 互关(n+1) | 按照添加顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/relation/friends' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "mid": 596000, + "attribute": 6, + "mtime": 1685110154, + "tag": null, + "special": 0, + "uname": "椛椛在睡觉", + "face": "https://i2.hdslb.com/bfs/face/365c1ef3b2a3afe21d6832796338fad5119b2592.jpg", + "sign": "欢迎来找椛椛玩~ https://blogs.momiji-jin.com/", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1702742400000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "avatar_subscript_url": "" + }, + "nft_icon": "", + "rec_reason": "", + "track_id": "" + }, + { + "mid": 24022863, + "attribute": 6, + "mtime": 1685026230, + "tag": [-10], + "special": 1, + "uname": "黄禄轩电脑专用账号", + "face": "https://i0.hdslb.com/bfs/face/a70ec7d2a3822980a915ef4b30371af0cbc79132.jpg", + "sign": "若要私信,请私信「黄禄轩手机专用账号」http://space.bilibili.com/17640193/,群:410311648", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1686412800000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "avatar_subscript_url": "" + }, + "nft_icon": "", + "rec_reason": "", + "track_id": "" + }, + { + "mid": 85438718, + "attribute": 6, + "mtime": 1684759843, + "tag": [194110], + "special": 0, + "uname": "忘忧北萱草Official", + "face": "https://i2.hdslb.com/bfs/face/68d8cba01aab907dbb2cf2e17074f20947156237.jpg", + "sign": "现已加入 OrangeFire 豪华套餐!", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1691683200000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "avatar_subscript_url": "" + }, + "nft_icon": "", + "rec_reason": "", + "track_id": "" + }, + { + "mid": 41620134, + "attribute": 6, + "mtime": 1684759649, + "tag": null, + "special": 0, + "uname": "Tiggy_Chan", + "face": "https://i0.hdslb.com/bfs/face/8c8d9f43eda207f8cb8503bfdf6cc3802a1cd6c1.jpg", + "sign": "此号只发科技类视频,娱乐类转至:虎子酱233", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1669219200000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "avatar_subscript_url": "" + }, + "nft_icon": "", + "rec_reason": "", + "track_id": "" + }, + // …… + ], + "re_version": 0 + } +} +``` + +
+ +### 查询黑名单明细 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | --------------------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| ps | num | 每页项数 | 非必要 | 默认为 50,且最多为50,大于50则按50输出 | +| pn | num | 页码 | 非必要 | 默认为 1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ------------ | ---- | +| list | array | 明细列表 | | +| re_version | num | (?) | | +| total | num | 黑名单总计数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | -------------- | -------------------------------- | +| 0 | obj | 黑名单 1 | 见 [关系列表对象](#关系列表对象) | +| n | obj | 黑名单 (n+1) | 按照添加顺序排列 | +| …… | obj | …… | …… | + +**示例:** + +获取黑名单明细 + +```shell +curl -G 'https://api.bilibili.com/x/relation/blacks' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "mid": 22179720, + "attribute": 128, + "mtime": 1603032789, + "tag": null, + "special": 0, + "uname": "咩2016", + "face": "https://i0.hdslb.com/bfs/face/41fe435a7e62eae605a5908652f32f3afff2ae74.jpg", + "sign": "", + "official_verify": { + "type": 0, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + }, + { + "mid": 16174624, + "attribute": 128, + "mtime": 1603026420, + "tag": null, + "special": 0, + "uname": "其实死亡没有那么痛", + "face": "https://i2.hdslb.com/bfs/face/79257f5a2e7194a71337ccca5927afba7706d316.jpg", + "sign": "等我,我马上就来", + "official_verify": { + "type": 0, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + } + ], + "re_version": 897205356, + "total": 2 + } +} +``` + +
+ +## 操作关系 + + + +### 操作用户关系 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或 APP + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| fid | num | 目标用户mid | 必要 | | +| act | num | 操作代码 | 必要 | **操作代码见下表** | +| re_src | num | 关注来源代码 | 非必要 | 包月充电:1
个人空间:11
视频:14
评论区:15
视频播放器结束页面:17
H5推荐关注:58
H5关注列表:106
H5粉丝列表:107
专栏:115
私信:118
搜索:120
视频播放器左上角关注按钮:164
H5共同关注:167
创作激励计划:192
活动页面:222
联合投稿视频:229
消息中心点赞详情:235
视频播放器关注弹幕:245 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +操作代码`act`: + +| 代码 | 含义 | 备注 | +| ---- | ------------ | ---------------------------------------------------- | +| 1 | 关注 | 无法对已注销或不存在的用户进行此操作 | +| 2 | 取关 | | +| 3 | 悄悄关注 | **现已下线**,使用本操作代码请求接口会提示“请求错误” | +| 4 | 取消悄悄关注 | | +| 5 | 拉黑 | 无法对已注销或不存在的用户进行此操作 | +| 6 | 取消拉黑 | | +| 7 | 踢出粉丝 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
22001:不能对自己进行此操作
22002:因对方隐私设置,你还不能关注
22003:关注失败,请将该用户移除黑名单之后再试
22008:黑名单达到上限
22009:关注失败,已达关注上限
22013:账号已注销,无法完成操作
22014:已经关注用户,无法重复关注
22120:重复加入黑名单
40061:用户不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +关注`mid=14082`的用户 + +```shell +curl 'https://api.bilibili.com/x/relation/modify' \ + --data-urlencode 'fid=14082' \ + --data-urlencode 'act=1' \ + --data-urlencode 're_src=11' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 批量操作用户关系 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或 APP + +此接口只支持关注和拉黑操作 + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------- | --------------- | ----------------------------------------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| fids | nums | 目标用户 mid 列表 | 必要 | 每个成员之间用 `,` 间隔,最多 50 个成员,不能包含自己的 mid | +| act | num | 操作代码 | 必要 | 同上
仅可为 1 或 5,故只能进行批量关注和拉黑 | +| re_src | num | 关注来源代码 | 非必要 | 同上 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
22003:用户位于黑名单 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ------------------- | ---- | +| failed_fids | array | 操作失败的 mid 列表 | | + +`data`中的`failed_fids`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------------------- | ---- | +| 0 | num | 操作失败的 mid 1 | | +| n | num | 操作失败的 mid(n+1) | | +| …… | num | …… | …… | + +**示例:** + +批量关注`mid=1,2,3,4,5`的用户 + +```shell +curl 'https://api.bilibili.com/x/relation/batch/modify' \ + --data-urlencode 'fid=1,2,3,4,5' \ + --data-urlencode 'act=1' \ + --data-urlencode 're_src=11' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "failed_fids": [] + } +} +``` + +
+ +## 查询关系属性 + +### 关系属性对象 + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------------------------------------------- | ------------ | --------------------------------------------------------------------------------------- | +| mid | num | 目标用户 mid | | +| attribute | num | 关系属性 | 0:未关注
~~1:悄悄关注(已弃用)~~
2:已关注
6:已互粉
128:已拉黑 | +| mtime | num | 关注对方时间 | 时间戳
未关注为 0 | +| tag | 默认分组:null
存在至少一个分组:array | 分组 id | | +| special | num | 特别关注标志 | 0:否
1:是 | + +`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------------------- | ---- | +| 0 | num | 位于分组 1 的分组 | | +| n | num | 位于分组(n+1)的分组 | | +| …… | num | …… | …… | + +### 查询用户与自己关系(仅关注) + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| fid | num | 目标用户 mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 详见 [关系属性对象](#关系属性对象) | + +**示例:** + +可得对于`mid=258150656`的用户,在`2018/10/28 0:51:41`时关注,且设为特别关注,并位于为`-10`分组中 + +```shell +curl -G 'https://api.bilibili.com/x/relation' \ + --data-urlencode 'fid=258150656' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 258150656, + "attribute": 2, + "mtime": 1540659101, + "tag": [-10], + "special": 1 + } +} +``` + +
+ +### 查询用户与自己关系(互相关系) + +> 接口1: + +> 接口2: + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +鉴权方式(仅接口1):[Wbi 签名](../misc/sign/wbi.md) + +~~该接口的旧版 API :~~(已废弃,不建议使用) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ------------------------------------ | +| access_key | str | APP登录Token | APP方式必要 | | +| mid | num | 目标用户mid | 必要 | | +| w_rid | str | Wbi 签名 | 仅接口1必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | +| wts | num | 当前时间戳 | 仅接口1必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------------------- | ---------------------------------- | +| relation | obj | 目标用户对于当前用户的关系 | 详见 [关系属性对象](#关系属性对象) | +| be_relation | obj | 当前用户对于目标用户的关系 | 详见 [关系属性对象](#关系属性对象) | + +**示例:** + +可得对于`mid=15858903`的用户,在`2019/1/24 14:24:19`时关注了对方,且互相关注,自己将对方特别关注,并同时位于为`-10`和`194110`的分组中,对方也将自己设为特别关注,并同时位于为`-10`和`56502`的分组中(虽然我看不到) + +Wbi 签名的 `wts`、`w_rid`生成方式详见 [Wbi 签名](../misc/sign/wbi.md) 文档 + +```shell +curl -G 'https://api.bilibili.com/x/space/acc/relation' \ + --data-urlencode 'mid=15858903' \ + --data-urlencode 'wts=1686015899' \ + --data-urlencode 'w_rid=e10a3c566c9be80a7cebe7bcdf262588' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "relation": { + "mid": 15858903, + "attribute": 6, + "mtime": 1548311059, + "tag": [-10, 194110, 248468], + "special": 1 + }, + "be_relation": { + "mid": 293793435, + "attribute": 6, + "mtime": 1548311059, + "tag": [56502, -10], + "special": 1 + } + } +} +``` + +
+ +### 批量查询用户与自己关系 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ----------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| fids | nums | 目标用户 mid | 必要 | 每个之间用`,`间隔,无成员限制 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------- | ---------------------------------- | +| {用户mid} | obj | 关注的用户 | 详见 [关系属性对象](#关系属性对象) | +| …… | obj | …… | 下同 | + +**示例:** + +批量查询`mid=1,2,3,4,5`的关系 + +```shell +curl -G 'https://api.bilibili.com/x/relation/relations' \ + --data-urlencode 'fid=258150656' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "1": { + "mid": 1, + "attribute": 2, + "mtime": 1601654227, + "tag": null, + "special": 0 + }, + "2": { + "mid": 2, + "attribute": 2, + "mtime": 1601654225, + "tag": null, + "special": 0 + } + } +} +``` + +
+ +## 关注分组相关 + +分组 id 特殊值: + +| id | 含义 | +| --- | -------- | +| 0 | 默认分组 | +| -10 | 特别关心 | + +### 查询关注分组列表 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | array | 分组列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ----------- | ---- | +| 0 | obj | 分组 1 | | +| n | obj | 分组(n+1) | | +| …… | num | …… | …… | + +数组`data`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ------------------------------ | +| tagid | num | 分组 id | -10:特别关注
0:默认分组 | +| name | str | 分组名称 | | +| count | num | 分组成员数 | | +| tip | str | 提示信息 | | + +**示例:** + +查询所有的分组的名字以及id + +```shell +curl 'https://api.bilibili.com/x/relation/tags' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "tagid": -10, + "name": "特别关注", + "count": 19, + "tip": "第一时间收到该分组下用户更新稿件的通知" + }, + { + "tagid": 0, + "name": "默认分组", + "count": 340, + "tip": "" + }, + { + "tagid": 194110, + "name": "基友们", + "count": 127, + "tip": "" + }, + { + "tagid": 194111, + "name": "我的同学", + "count": 22, + "tip": "" + }, + // …… + ] +} +``` + +
+ +### 查询关注分组明细 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +只可查询属于自己的分组 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ------------------------------------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| tagid | num | 分组 id | 必要 | 0:默认分组
-10:特别关注
-20:所有 | +| order_type | str | 排序方式 | 非必要 | 按照关注顺序排列:留空
按照最常访问排列:attention | +| ps | num | 每页项数 | 非必要 | 默认为 20 | +| pn | num | 页数 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | -------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
22104:该分组不存在 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | array | 成员列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------------- | --------------------------------------- | +| 0 | obj | 成员信息 1 | 与[关系列表对象](#关系列表对象)**不同** | +| n | obj | 成员信息(n+1) | 按照添加顺序排序 | +| …… | obj | …… | …… | + +`data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | --------------- | ----------- | +| mid | num | 用户mid | | +| attribute | num | 关系属性 | 恒为 `0` | +| tag | null | 关注分组id | 恒为 `null` | +| special | num | 是否特别关注 | 恒为 `0` | +| contract_info | obj | 契约计划信息 | | +| uname | str | 用户昵称 | | +| face | str | 用户头像url | | +| sign | str | 用户签名 | | +| face_nft | num | 是否为 NFT 头像 | | +| official_verify | obj | 认证信息 | 具体见下 | +| vip | obj | 会员信息 | | +| live | obj | 直播状态 | 具体见下 | +| nft_icon | str | (?) | | +| rec_reason | str | (?) | | +| track_id | str | (?) | | +| follow_time | str | (?) | | + +`data`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ----------------------------------------- | +| type | num | 用户认证类型 | -1:无
0:UP 主认证
1:机构认证 | +| desc | str | 用户认证信息 | 无为空 | + +`data`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | (?) | | +| accessStatus | num | (?) | | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | (?) | | +| themeType | num | (?) | | +| label | obj | (?) | | + +`data`数组中的对象中的`live`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | ------------------------ | +| live_status | num | 直播状态 | 0:未开播
1:已直播 | +| jump_url | str | 直播链接 | | + +`data`数组中的对象中的`contract_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------------------ | ----------------------------------------------------------- | +| is_contract | bool | 目标用户是否为对方的契约者 | 仅当为 `true` 时才有此项 | +| is_contractor | bool | 对方是否为目标用户的契约者 | 仅当为 `true` 时才有此项 | +| ts | num | 对方成为目标用户的契约者的时间 | 秒级时间戳,仅当 `is_contractor` 项的值为 `true` 时才有此项 | +| user_attr | num | 对方作为目标用户的契约者的属性 | 1:老粉
否则为原始粉丝
仅当有特殊属性时才有此项 | + +**示例:** + +以每页2项的方式获取了id为`207542`分组的第1页的粉丝明细,按照关注顺序 + +```shell +curl -G 'https://api.bilibili.com/x/relation/tag' \ + --data-urlencode 'tagid=207542' \ + --data-urlencode 'order_type=' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [{ + "mid": 420831218, + "uname": "支付宝Alipay", + "face": "https://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg", + "sign": "阿支来了,关注点赞转发投币四连走起!", + "official_verify": { + "type": 1, + "desc": "支付宝官方账号" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1585065600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + }, { + "mid": 125086406, + "uname": "MSI微星科技", + "face": "https://i1.hdslb.com/bfs/face/a844760e4e491677615b39399bc761e74c579bb4.jpg", + "sign": "你好,这里是微星显卡官方!专注显卡三十年,欢迎私信咨询或提问MSI", + "official_verify": { + "type": 1, + "desc": "微星科技官方账号" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1540656000000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + }] +} +``` + +
+ +### 查询目标用户所在的分组 + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| fid | num | 目标用户 mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | -------- | ---------------------------------- | +| {加入的分组 id} | str | 分组名称 | 若目标用户存在默认分组中,则不显示 | +| …… | str | …… | 下同 | + +**示例:** + +查询用户`mid=319214221`存在的所有分组和名称 + +```shell +curl -G 'https://api.bilibili.com/x/relation/tag/user' \ + --data-urlencode 'fid=319214221' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "-10": "特别关注", + "194111": "我的同学" + } +} +``` + +
+ +### 查询所有特别关注 mid + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或 APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | array | 成员列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | -------------- | ---- | +| 0 | num | 成员 1 mid | | +| n | num | 成员(n+1)mid | | +| …… | num | …… | …… | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/relation/tag/special' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + 500716647, + 32832243, + 53456, + 25944552, + 301839556, + 427494870, + 319214221, + 31949159, + 382666849, + 258318451, + 15858903, + 54992199, + 3379951, + 392279807, + 23215368, + 258150656, + 20165629, + 22179720 + ] +} +``` + +
+ +### 创建分组 + + + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或 APP + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------- | --------------- | ------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| tag | str | 分组名 | 必要 | 最长 16 字符 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-111:csrf校验失败
-101:账号未登录
-400:请求错误
22101:分组名称存在不允许的字符
22102:分组数量超过限制
22103:分组名过长
22106:该分组已经存在 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | --------------- | ---- | +| tagid | num | 创建的分组的 id | | + +**示例:** + +创建了名为`测试`的分组,得到id为`216677` + +```shell +curl 'https://api.bilibili.com/x/relation/tag/create' \ + --data-urlencode 'tag=测试' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "tagid": 216677 + } +} +``` + +
+ +### 重命名分组 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或 APP + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------- | --------------- | ------------ | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| tagid | num | 分组 id | 必要 | | +| name | str | 新名称 | 必要 | 最长 16 字符 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-111:csrf校验失败
-101:账号未登录
-400:请求错误
22101:分组名称存在不允许的字符
22103:分组名过长
22104:该分组不存在 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | + +**示例:** + +把id为`194112`的分组更名为`膜法师` + +```shell +curl 'https://api.bilibili.com/x/relation/tag/update' \ + --data-urlencode 'tagid=194112' \ + --data-urlencode 'name=膜法师' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 删除分组 + + + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或 APP + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------- | --------------- | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| tagid | num | 分组 id | 必要 | | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-111:csrf校验失败
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | + +示例: + +删除分组id为`216699`的分组 + +```shell +curl 'https://api.bilibili.com/x/relation/tag/del' \ + --data-urlencode 'tagid=216699' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 修改分组成员 + + + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或 APP + +如需删除分组中的成员,请将`tagids`设为 0,即移动至默认分组,而不是取关 + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------- | --------------- | ----------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| fids | nums | 目标用户 mid 列表 | 必要 | 每个之间用`,`间隔 | +| tagids | nums | 分组 id 列表 | 必要 | 每个之间用`,`间隔 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-111:csrf校验失败
-101:账号未登录
-400:请求错误
22104:分组不存在
22105:未关注 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | + +**示例:** + +把关注用户`mid=205631797`同时添加分组关系到id为`-10`和`207542`的分组中 + +```shell +curl 'https://api.bilibili.com/x/relation/tags/addUsers' \ + --data-urlencode 'fids=205631797' \ + --data-urlencode 'tagids=-10,207542' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 复制关注到分组 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或 APP + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------- | --------------- | ----------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| fids | nums | 待复制的用户 mid 列表 | 必要 | 每个之间用`,`间隔 | +| tagids | nums | 目标分组 id 列表 | 必要 | 每个之间用`,`间隔 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-111:csrf校验失败
-101:账号未登录
-400:请求错误
22104:分组不存在
22105:未关注 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | + +**示例:** + +把关注用户`mid=4856007`和`mid=326499679`同时复制到为`231305`的分组id中 + +```shell +curl 'https://api.bilibili.com/x/relation/tags/copyUsers' \ + --data-urlencode 'fids=4856007,326499679' \ + --data-urlencode 'tagids=231305' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 移动关注到分组 + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或 APP + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ------------------------- | --------------- | ----------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| beforeTagids | nums | 原分组 id 列表 | 必要 | 每个之间用`,`间隔 | +| afterTagids | nums | 新分组 id 列表 | 必要 | 每个之间用`,`间隔 | +| fids | nums | 待移动的用户 mid 列表 | 必要 | 每个之间用`,`间隔 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-111:csrf校验失败
-101:账号未登录
-400:请求错误
22104:分组不存在
22105:未关注 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | + +**示例:** + +把关注用户`mid=321173469`和`mid=327086920`同时从id为`207542`的分组移动到为`231305`的分组中 + +```shell +curl 'https://api.bilibili.com/x/relation/tags/moveUsers' \ + --data-urlencode 'beforeTagids=207542' \ + --data-urlencode 'afterTagids=23130' \ + --data-urlencode 'fids=321173469,327086920' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/user/space.md b/docs/user/space.md new file mode 100644 index 0000000..24dd9cb --- /dev/null +++ b/docs/user/space.md @@ -0,0 +1,4981 @@ +# 用户空间相关 + +## 主页 + + + +### 置顶视频 + +#### 查询用户置顶视频 + +>https://api.bilibili.com/x/space/top/arc + +*请求方式:GET* + +粉丝在其主页上可见 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| vmid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
53016:没有置顶视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------------------------ | ------------------------------------------------------------ | +| aid | num | 稿件avid | | +| videos | num | 视频分P总数 | 默认为1 | +| tid | num | 分区tid | | +| tname | str | 子分区名称 | | +| copyright | num | 是否转载 | 1:原创
2:转载
3:未填写 | +| pic | str | 视频封面图片url | | +| title | str | 稿件标题 | | +| pubdate | num | 稿件发布时间 | 时间戳 | +| ctime | num | 用户提交稿件的时间 | 时间戳 | +| desc | str | 视频简介 | | +| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`state`备注 | +| attribute | num | 稿件属性位配置 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`attribute`备注 | +| duration | num | 视频总计持续时长(所有分P) | 单位为秒 | +| rights | obj | 视频属性标志 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`rights`对象 | +| owner | obj | 视频UP主信息 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`owner`对象 | +| stat | obj | 视频状态数 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`stat`对象 | +| dynamic | str | 视频同步发布的的动态的文字内容 | 无为空 | +| cid | num | 视频1P cid | | +| dimension | obj | 视频1P分辨率 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`dimension`对象 | +| bvid | str | 稿件bvid | | +| reason | str | 置顶视频备注 | | +| inter_video | bool | 是否为合作视频 | false:否
true:是 | + +**示例:** + +查询用户`mid=23215368`的置顶视频 + +```shell +curl -G 'https://api.bilibili.com/x/space/top/arc' \ +--data-urlencode 'vmid=23215368' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aid": 37896701, + "videos": 1, + "tid": 28, + "tname": "原创音乐", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/cc9e72822d68fffdd0406144f1b5348a13c89652.jpg", + "title": "燃烧吧!铃声!把主流手机铃声编成一首曲子", + "pubdate": 1544469671, + "ctime": 1544469671, + "desc": "各品牌的手机铃声大合奏,毫无违和感~", + "state": 0, + "attribute": 16768, + "duration": 208, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 23215368, + "name": "Wayjon冰冰酱", + "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg" + }, + "stat": { + "aid": 37896701, + "view": 1058237, + "danmaku": 16821, + "reply": 3725, + "favorite": 76888, + "coin": 100694, + "share": 17091, + "now_rank": 0, + "his_rank": 0, + "like": 90521, + "dislike": 0 + }, + "dynamic": "#编曲##FL##纯音乐#", + "cid": 66621209, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV18t411q7zz", + "reason": "", + "inter_video": false + } +} +``` + +
+ +#### 设置置顶视频 + +> https://api.bilibili.com/x/space/top/arc/set + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------------ | -------------------------------- | +| aid | num | 置顶目标稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 置顶目标稿件bvid | 必要(可选) | avid与bvid任选一个 | +| reason | str | 置顶视频备注 | 非必要 | 置顶备注最大40字符
默认为空 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-304:未修改
-400:请求错误
53014:稿件已失效
53015:备注过长
53017:置顶非自己的稿件 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +置顶视频`av98948772`/`BV1n741127LD` + +avid方式: + +```shell +curl 'https://api.bilibili.com/x/space/top/arc/set' \ +--data-urlencode 'aid=98948772' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl 'https://api.bilibili.com/x/space/top/arc/set' \ +--data-urlencode 'bvid=BV1n741127LD' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +#### 取消置顶视频 + +> https://api.bilibili.com/x/space/top/arc/cancel + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误(重复取消) | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/space/top/arc/cancel' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 代表作视频 + +#### 查询用户代表作视频列表 + +> https://api.bilibili.com/x/space/masterpiece + +*请求方式:GET* + +新访客在其主页上可见 + +最多可以设置3个 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| vmid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | ---------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 代表作列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------- | ------------------------- | +| 0 | obj | 代表作1 | 无则为空 | +| 1 | obj | 代表作2 | 无则为空 | +| 2 | obj | 代表作3 | 无则为空
最多设置3个 | + +`data`数组中的对象: + +同[查询用户置顶视频](#查询用户置顶视频)中的`data`对象 + +**示例:** + +查询用户`mid=23215368`的代表作视频列表 + +```shell +curl -G 'https://api.bilibili.com/x/space/masterpiece' \ +--data-urlencode 'vmid=23215368' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [{ + "aid": 37896701, + "videos": 1, + "tid": 28, + "tname": "原创音乐", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/cc9e72822d68fffdd0406144f1b5348a13c89652.jpg", + "title": "燃烧吧!铃声!把主流手机铃声编成一首曲子", + "pubdate": 1544469671, + "ctime": 1544469671, + "desc": "各品牌的手机铃声大合奏,毫无违和感~", + "state": 0, + "attribute": 16768, + "duration": 208, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 23215368, + "name": "Wayjon冰冰酱", + "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg" + }, + "stat": { + "aid": 37896701, + "view": 1058241, + "danmaku": 16821, + "reply": 3725, + "favorite": 76888, + "coin": 100694, + "share": 17091, + "now_rank": 0, + "his_rank": 0, + "like": 90521, + "dislike": 0 + }, + "dynamic": "#编曲##FL##纯音乐#", + "cid": 66621209, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV18t411q7zz", + "reason": "", + "inter_video": false + }, { + "aid": 39596658, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/431e51d0e40e3461e1c1b0f59c755ae8843b1adb.jpg", + "title": "MY2018 - 纪念我的2018年", + "pubdate": 1546328392, + "ctime": 1546328392, + "desc": "", + "state": 0, + "attribute": 16768, + "duration": 239, + "mission_id": 10996, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 23215368, + "name": "Wayjon冰冰酱", + "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg" + }, + "stat": { + "aid": 39596658, + "view": 1518, + "danmaku": 16, + "reply": 40, + "favorite": 22, + "coin": 60, + "share": 9, + "now_rank": 0, + "his_rank": 0, + "like": 112, + "dislike": 0 + }, + "dynamic": "#vlog##记录##生活记录#", + "cid": 69561078, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV1Jt411B7La", + "reason": "", + "inter_video": false + }, { + "aid": 44721369, + "videos": 1, + "tid": 28, + "tname": "原创音乐", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/9887797402599c42f74a7624f3db4a92a0ebf465.jpg", + "title": "【铃声串烧系列】华米两开花;中华有为,国之荣耀!把主流手机铃声编成一首曲子", + "pubdate": 1551128445, + "ctime": 1551128445, + "desc": "把主流手机铃声编成一首曲子,这一版用华为的铃声作为主旋律,毫无违和感~伴随着2019mwc的开幕,希望国产厂商能获得全世界的目光,并且将属于中国人的科技自信传递到全世界!", + "state": 0, + "attribute": 16768, + "duration": 174, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 23215368, + "name": "Wayjon冰冰酱", + "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg" + }, + "stat": { + "aid": 44721369, + "view": 306757, + "danmaku": 7713, + "reply": 1520, + "favorite": 17216, + "coin": 16489, + "share": 2917, + "now_rank": 0, + "his_rank": 0, + "like": 21439, + "dislike": 0 + }, + "dynamic": "#铃声##纯音乐##音乐#【铃声串烧】Mix Ringtones!船新的版本来啦!这一版用华为的铃声作为主旋律,毫无违和感~伴随着2019mwc的开幕,希望国产厂商能获得全世界的目光,并且将属于中国人的科技自信传递到全世界!", + "cid": 78290138, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV1vb411879C", + "reason": "", + "inter_video": false + }] +} +``` + +
+ +#### 添加代表作视频 + +> https://api.bilibili.com/x/space/masterpiece/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +代表作上限为3个稿件 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------------ | -------------------------------- | +| aid | num | 置顶目标稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 置顶目标稿件bvid | 必要(可选) | avid与bvid任选一个 | +| reason | str | 代表作备注 | 非必要 | 置顶备注最大40字符
默认为空 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
53014:稿件已失效
53015:备注过长
53017:置顶非自己的稿件
53019:达到上限
53020:已经存在该稿件 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +添加视频`av94916552`/`BV1ZE411K7ux`到代表作列表 + +avid方式: + +```shell +curl 'https://api.bilibili.com/x/space/masterpiece/add' \ +--data-urlencode 'aid=94916552' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl 'https://api.bilibili.com/x/space/masterpiece/add' \ +--data-urlencode 'bvid=BV1ZE411K7ux' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +#### 删除代表作视频 + +> https://api.bilibili.com/x/space/masterpiece/cancel + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------------ | ------------------ | +| aid | num | 要删除的目标稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 要删除的目标稿件bvid | 必要(可选) | avid与bvid任选一个 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
53021:置顶列表中没有该视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | + +**示例:** + +删除置顶视频`av59765630`/`BV1Yt41137T6` + +avid方式: + +```shell +curl 'https://api.bilibili.com/x/space/masterpiece/cancel' \ +--data-urlencode 'aid=59765630' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl 'https://api.bilibili.com/x/space/masterpiece/cancel' \ +--data-urlencode 'bvid=BV1Yt41137T6' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +### 个人TAG + +#### 查看用户个人TAG + +> https://api.bilibili.com/x/space/acc/tags + +*请求方式:GET* + +上限5条,且内容由用户自定义 + +带有转义 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 信息本体 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------------- | +| 0 | obj | 套了个娃 | 只有1项??? | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | ----------- | ---- | +| mid | num | 目标用户mid | | +| tags | array | TAG名称 | | + +`data`数组中的对象中的`tags`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------- | +| 0 | str | TAG1 | | +| n | str | TAG(n+1) | | +| …… | str | …… | | +| 4 | str | TAG5 | 上限5条 | + +**示例:** + +查看用户`mid=53456`的个人TAG + +```shell +curl -G 'https://api.bilibili.com/x/space/acc/tags' \ +--data-urlencode 'mid=53456' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "mid": 53456, + "tags": [ + "游戏", + "音乐", + "warma", + "搞笑", + "动画" + ] + } + ] +} +``` + +
+ +#### 修改个人TAG + +> https://api.bilibili.com/x/space/acc/tags/set + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`存在且不为0 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| tags | strs | 要设置的TAG内容 | 非必要 | 删除公告留空或省去即可
各TAG长度小于10字符
最多5个TAG
各TAG之间用","(%2C)分隔
重复TAG无效 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误(超出长度限制) | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +修改个人TAG为`minecraft,技术宅,大佬,小哥哥,可爱` + +```shell +curl 'https://api.bilibili.com/x/space/acc/tags/set' \ +--data-urlencode 'tags=minecraft,技术宅,大佬,小哥哥,可爱' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx;DedeUserID=1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 空间公告 + +#### 查看用户空间公告 + +> https://api.bilibili.com/x/space/notice + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | str | 公告信息 | 无则为空 | + +**示例:** + +查看用户`mid=53456`的空间公告 + +```shell +curl -G 'https://api.bilibili.com/x/space/notice' \ +--data-urlencode 'mid=53456' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":"我的微博 @_warma_\n直播录像上传到:warma养鸽场\n头像画师是:微博@Dr-H_喵_\n横幅画师:@薬屋" +} +``` + +
+ +#### 修改空间公告 + +> https://api.bilibili.com/x/space/notice/set + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | --------------------------------------- | +| notice | str | 要设置的公告内容 | 非必要 | 删除公告留空或省去即可
少于150字符 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-304:未修改
-400:请求错误(超出长度限制) | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | + +**示例:** + +修改个人空间公告为`鸽子` + +```shell +curl 'https://api.bilibili.com/x/space/notice/set' \ +--data-urlencode 'notice=鸽子' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 主页板块布局与权限 + +#### 查询空间设置 + +> http://space.bilibili.com/ajax/settings/getSettings + +*请求方式:GET* + +注:带有转义 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ------------------- | -------- | ---- | +| status | bool | 用户是否存在 | true:存在
false:不存在 | +| data | 用户存在时:obj
用户不存在时:str| 用户存在时:信息本体
用户不存在时:错误信息 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------------- | ----- | ---------------- | ------------ | +| privacy | obj | 空间隐私权限 | | +| index_order | array | 空间板块布局 | | +| theme | str | default主题? | 作用尚不明确 | +| theme_preview_img_path | str | 主题预览图路径? | 作用尚不明确 | +| toutu | obj | 空间头图 | | + +`privacy`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | ------------------------------ | +| bangumi | num | 追番及追剧 | 0:隐藏
1:公开
**下同** | +| bbq | num | 轻视频 | | +| channel | num | 频道 | | +| coins_video | num | 最近投币的视频 | | +| comic | num | 追漫 | | +| dress_up | num | 装扮 | | +| fav_video | num | 收藏夹 | | +| groups | num | 圈子? | 作用尚不明确 | +| likes_video | num | 最近点赞的视频 | | +| played_game | num | 最近玩过的游戏 | | +| tags | num | 订阅标签 | | +| user_info | num | 个人资料 | | + +`index_order`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | -------------------------------------------- | +| 0 | obj | 板块1 | 根据板块布局顺序排序
先左侧布局后右侧布局 | +| n | obj | 板块(n+1) | | +| …… | obj | …… | …… | + +`index_order`数组内对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| id | num | 板块编号 | | +| name | str | 板块名称 | | + +`toutu`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------------------- | -------------------------------------------------- | +| sid | num | 空间头图ID | | +| expire | num | 到期时间? | 时间戳?
作用尚不明确 | +| s_img | str | 空间头图小图相对路径 | 完整url为`http://i0.hdslb.com/`+相对路径 | +| l_img | str | 空间头图相对路径 | **同上** | +| android_img | str | 空 | 注:**手机端头图与web端不同,需要用另一个api获取** | +| iphone_img | str | 空 | | +| ipad_img | str | 空 | | +| thumbnail_img | str | 缩略图 | | +| platform | num | 0 | 作用尚不明确 | + +**示例:** + +查看`mid=2`的空间设置 + +```shell +curl -G 'http://space.bilibili.com/ajax/settings/getSettings' \ +--data-urlencode 'mid=2' +``` + +
+查看响应示例: + +```json +{ + "status":true, + "data":{ + "privacy":{ + "bangumi":1, + "bbq":1, + "channel":1, + "coins_video":0, + "comic":1, + "dress_up":1, + "fav_video":0, + "groups":0, + "likes_video":0, + "played_game":1, + "tags":1, + "user_info":1 + }, + "index_order":[ + { + "id":1, + "name":"我的稿件" + }, + { + "id":8, + "name":"我的专栏" + }, + { + "id":7, + "name":"我的频道" + }, + { + "id":2, + "name":"我的收藏夹" + }, + { + "id":3, + "name":"订阅番剧" + }, + { + "id":4, + "name":"订阅标签" + }, + { + "id":5, + "name":"最近投币的视频" + }, + { + "id":6, + "name":"我的圈子" + }, + { + "id":9, + "name":"我的相簿" + }, + { + "id":21, + "name":"公告" + }, + { + "id":22, + "name":"直播间" + }, + { + "id":23, + "name":"个人资料" + }, + { + "id":24, + "name":"官方活动" + }, + { + "id":25, + "name":"最近玩过的游戏" + } + ], + "theme":"default", + "theme_preview_img_path":"", + "toutu":{ + "sid":1, + "expire":2861874560, + "s_img":"bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png", + "l_img":"bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png", + "android_img":"", + "iphone_img":"", + "ipad_img":"", + "thumbnail_img":"", + "platform":0 + } + } +} +``` + +
+ +#### 查询可用头图列表 (Web端) + +> https://space.bilibili.com/ajax/topphoto/getlist + +*请求方式: GET* + +注: 带有转义 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | -------------------------- | +| mid | num | 目标用户mid | 必要 | 非负数, 即使该用户并不存在 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ------------------------- | -------------------------------------- | ---- | +| status | bool | 成功: true
失败: false | | +| data | 成功: array
失败: str | 成功: 信息本体
失败: "用户id错误" | | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ----------- | ------------------------------------ | +| id | num | 空间头图 ID | | +| product_name | str | 显示名称 | | +| price | num | 价格 | | +| coin_type | num | 支付类型? | | +| vip_free | num | 大会员免费 | | +| s_img | str | 小图 URI | 需要自行与 `i0.hdslb.com` 拼接成 URL | +| l_img | str | 大图 URI | 同 s_img | +| thumbnail_img | str | 空 | 并不存在的缩略图? | +| sort_num | num | 排序编号 | | +| is_disable | num | 已禁用 | 0: 未禁用 | +| expire | num | 过期时间? | UNIX 时间戳, 或 0 为永不过期 | +| had | num | 是否拥有? | 当 expire 不为 0 时 为 1, 否则为 0 | + +**示例:** + +查询`mid=1145141919810000000`的可用空间头图 + +```shell +curl -G "https://space.bilibili.com/ajax/topphoto/getlist" \ +--data-urlencode "mid=1145141919810000000" +``` + +
+查看响应示例: + +```json +{ + "status": true, + "data": [ + { + "id": 1, + "product_name": "bilibili春", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png", + "l_img": "bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png", + "thumbnail_img": "", + "sort_num": 19, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 2, + "product_name": "两人单车", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/d60a4be11f1bca6168a60a53c64bca18eddd6443.jpg", + "l_img": "bfs/space/44873d3568bdcb3d850d234e02a19602972450f1.png", + "thumbnail_img": "", + "sort_num": 16, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 5, + "product_name": "成为偶像", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/5fe2632486a5a91a234f0e7cb368ab6397477da4.jpg", + "l_img": "bfs/space/87277d30cd19edcec9db466a9a3e556aeb0bc0ed.png", + "thumbnail_img": "", + "sort_num": 15, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 11, + "product_name": "星际勘探", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/6849abc6e67000ad807b35a970aba31dd1e400dd.jpg", + "l_img": "bfs/space/c919a9818172a8297f8b0597722f96504a1e1d88.png", + "thumbnail_img": "", + "sort_num": 14, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 10, + "product_name": "星O大战", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/ff3b0882e55c1099738e59616e5956ad357d9948.jpg", + "l_img": "bfs/space/e22f5b8e06ea3ee4de9e4da702ce8ef9a2958f5a.png", + "thumbnail_img": "", + "sort_num": 13, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 12, + "product_name": "王牌特工", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/f5d38e2af44fd12fa65423aff55933fcf9071419.jpg", + "l_img": "bfs/space/8cd85a382756ab938df23a856017abccd187188e.png", + "thumbnail_img": "", + "sort_num": 12, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 3, + "product_name": "仰望星空", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/c9dae917e24b4fc17c4d544caf6b6c0b17f8692b.jpg", + "l_img": "bfs/space/9ccc0447aebf0656809b339b41aa5b3705f27c47.png", + "thumbnail_img": "", + "sort_num": 11, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 14, + "product_name": "雨过天晴", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/1115b2fdabd128337f892feada4ce32e51f3a5ad.jpg", + "l_img": "bfs/space/6a1198e25f8764bd30d53411dac9fdf840bc3265.png", + "thumbnail_img": "", + "sort_num": 10, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 6, + "product_name": "绿荫秘境", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/dc02d22a718c1c436f1a355b3cd726b04098ef7d.jpg", + "l_img": "bfs/space/265ecddc52d74e624dc38cf0cff13317085aedf7.png", + "thumbnail_img": "", + "sort_num": 9, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 13, + "product_name": "漫游仙境", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/184abe52a5ea9390b506c064cfba4f8f20ae9cca.jpg", + "l_img": "bfs/space/24d0815514951bb108fbb360b04a969441079315.png", + "thumbnail_img": "", + "sort_num": 7, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 15, + "product_name": "放课后time", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/aea2dd7b8894ce31d578d4fad6a7188c7b49cb2f.jpg", + "l_img": "bfs/space/6e799ff2de2de55d27796707a283068d66cdf3f4.png", + "thumbnail_img": "", + "sort_num": 6, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 4, + "product_name": "昴宿星团", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/1f4eaf70d1bb981f6057b3e440249d7a1f65774f.jpg", + "l_img": "bfs/space/3ab888c1d149e864ab44802dea8c1443e940fa0d.png", + "thumbnail_img": "", + "sort_num": 5, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 7, + "product_name": "蔷薇洛丽塔", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/718eac8c71e29b8a80431c46110805c3a40e30a6.jpg", + "l_img": "bfs/space/70ce28bcbcb4b7d0b4f644b6f082d63a702653c1.png", + "thumbnail_img": "", + "sort_num": 4, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 9, + "product_name": "黑暗之门", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/ef1b08e62fdc35b06e39795bc6de8e510935bf97.jpg", + "l_img": "bfs/space/cd52d4ac1d336c940cc4958120170f7928d9e606.png", + "thumbnail_img": "", + "sort_num": 3, + "is_disable": 0, + "expire": 0, + "had": 0 + }, + { + "id": 19, + "product_name": "你的名字", + "price": 0, + "coin_type": 0, + "vip_free": 0, + "s_img": "bfs/space/373e127e8784d3e4c1b5e6db0c27702ba077643f.jpg", + "l_img": "bfs/space/f49642b3683a08e3190f29d5a095386451f8952c.jpg", + "thumbnail_img": "", + "sort_num": 2, + "is_disable": 0, + "expire": 0, + "had": 0 + } + ] +} +``` + +
+ +### 设置空间头图 (Web端) + +> https://space.bilibili.com/ajax/settings/setToutu + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +鉴权方式: referer为 `.bilibili.com` 域名下 + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------------------------------- | ------ | ---- | +| id | num | 头图 ID | 必要 | | +| csrf | str | CSRF Token (即 Cookie bili_jct 值) | 不必要 | | + +**JSON回复:** + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | --------------------------- | +| status | bool | 状态 | true: 成功
false: 失败 | +| data | str | 错误信息 | 正确时无此项 (带有转义) | + +**示例:** + +设置空间头图为为`王牌特工(id=12)` + +```shell +curl -X POST "https://space.bilibili.com/ajax/settings/setToutu" \ +--referer "https://space.bilibili.com/" \ +--data-urlencode "id=12" \ +--data-urlencode "csrf=xxx" \ +-b "SESSDATA=xxx; bili_jct=xxx" +``` + +
+查看响应示例: + +```json +{ + "status": true +} +``` + +
+ +#### 调整空间板块布局 + +> http://space.bilibili.com/ajax/settings/setIndexOrder + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`及`DedeUserID__ckMd5`存在且不为0,referer为 `.bilibili.com`域名下 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| index_order | nums | 布局列表 | 必要 | 每个值之间用","(%2C)分隔
先左侧布局再右侧布局
值的意义见下表 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +布局参数`index_order`: + +| 值 | 含义 | +| ---- | ------------------------------------ | +| 1 | (左侧)我的稿件 | +| 2 | (左侧)我的收藏夹 | +| 3 | (左侧)订阅番剧 | +| 4 | (左侧)订阅标签 | +| 5 | (左侧)最近投币的视频 | +| 6 | (左侧)我的圈子 **(此板块被隐藏)** | +| 7 | (左侧)我的频道 | +| 8 | (左侧)我的专栏 | +| 9 | (左侧)我的相簿 | +| 21 | (右侧)公告 | +| 22 | (右侧)直播间 | +| 23 | (右侧)个人资料 | +| 24 | (右侧)官方活动 | +| 25 | (右侧)最近玩的游戏 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ----------------------------------- | +| status | bool | 操作结果 | true:操作成功
false:操作失败 | +| data | str | 错误信息 | 正确时无此项 | + +**示例:** + +调整空间布局为: + +```text +我的稿件 直播间 +我的专栏 个人资料 +订阅番剧 公告 +我的收藏夹 官方活动 +我的相簿 最近玩的游戏 +最近投币的视频 +订阅标签 +我的频道 +``` + +```shell +curl 'https://space.bilibili.com/ajax/settings/setIndexOrder' \ +--data-urlencode 'index_order=1,8,3,2,9,5,4,7,22,23,21,24,25,6' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' \ +-e 'https://www.bilibili.com' +``` + +
+查看响应示例: + +```json +{ + "status": true +} +``` + +
+ +#### 修改空间隐私权限 + +> http://space.bilibili.com/ajax/settings/setPrivacy + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`及`DedeUserID__ckMd5`存在且不为0,referer为 `.bilibili.com`域名下 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------------------------ | ------ | ---------------------------------- | +| fav_video | num | 收藏视频 | 非必要 | 0:隐藏
1:公开
**下同** | +| bangumi | num | 追番及追剧 | 非必要 | | +| tags | num | 关注的TAG | 非必要 | | +| coins_video | num | 投币的视频 | 非必要 | | +| user_info | num | 个人信息 | 非必要 | | +| played_game | num | 玩过的游戏 | 非必要 | | +| csrf | nstr | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------- | ----------------------------------- | +| status | bool | 操作结果 | true:操作成功
false:操作失败 | +| data | str | 错误信息 | 正确时无此项 | + +**示例:** + +设置`关注的TAG`为隐藏 + +```shell +curl 'https://space.bilibili.com/ajax/settings/setPrivacy' \ +--data-urlencode 'tags=0' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' \ +-e 'https://www.bilibili.com' +``` + +
+查看响应示例: + +```json +{ + "status": true +} +``` + +
+ +### 查询用户最近访问内容 + +#### 查询用户最近玩过的游戏 + +> https://api.bilibili.com/x/space/lastplaygame + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------------------------------- | -------- | ---------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
53013:用户隐私设置未公开 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 隐藏时:null
公开时:array | 信息本体 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---------------- | +| 0 | obj | 游戏1 | | +| n | obj | 游戏(n+1) | 项数为总计游戏数 | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------- | ---- | +| website | str | 游戏主页 url | | +| image | str | 游戏图标 url | | +| name | str | 游戏名 | | + +**示例:** + +查询`mid=2`的最近玩过的游戏 + +```shell +curl -G 'https://api.bilibili.com/x/space/lastplaygame' \ + --data-urlencode 'mid=2' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "website": "https://game.bilibili.com/fgo/event_meihosou", + "image": "http://i0.hdslb.com/bfs/game/f7d4ee0877089e4079b8f0b4f5c95dd4ceba512a.png", + "name": "命运-冠位指定(Fate/GO)" + }, + { + "website": "https://game.bilibili.com/pcr/xxtix", + "image": "http://i0.hdslb.com/bfs/game/7922ecea5cc76fe3c8c177e1d4a6c8cf1c36a700.jpg", + "name": "公主连结Re:Dive" + }, + { + "website": "https://game.bilibili.com/dwbgx/", + "image": "http://i0.hdslb.com/bfs/game/6d5b2df70dfa987408d8d09110cdc327949885e3.png", + "name": "大王不高兴" + }, + { + "website": "https://game.bilibili.com/bangdream/1stanniversary-yxzx/", + "image": "http://i0.hdslb.com/bfs/game/4a7d0b7272dffe5a489ee935b6bd2d4f7d5f1257.png", + "name": "BanG Dream!" + }, + { + "website": "http://www.biligame.com/detail/?id=101772", + "image": "http://i0.hdslb.com/bfs/game/8e8b04e7bd2170c2ba2c9f563a62c72bac2eba2c.jpg", + "name": "明日方舟" + } + ] +} +``` + +
+ +#### 查询用户最近玩过的游戏V2 + +> https://api.bilibili.com/x/space/lastplaygame/v2 + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------------------------------- | -------- | ---------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
53013:用户隐私设置未公开 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 隐藏时:null
公开时:obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ------ | --- | +| page_num | num | 当前页码 | | +| page_size | num | 每页项数 | | +| total_count | num | 游戏总数 | | +| list | array | 游戏列表 | | + +`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---------------- | +| 0 | obj | 游戏1 | | +| n | obj | 游戏(n+1) | 项数为总计游戏数 | +| …… | obj | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ----- | ----------- | ----------------- | +| game_base_id | num | 游戏 id | biligame 的游戏 id | +| game_name | str | 游戏名 | | +| game_icon | str | 游戏图标 url | | +| grade | num | 游戏评分 | 如`8.2`、`6.8` | +| detail_url | str | 游戏主页 url | | +| game_tags | array | 游戏标签 | | +| notice | str | 游戏简介文案 | | +| gift_title | str | 游戏礼物文案 | | +| game_status_v2 | num | (?) | | + +`game_tags`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | --------------------------- | +| 0 | obj | 游戏标签1 | 如`角色扮演`、`音乐节奏`、`休闲` | +| n | obj | 游戏标签(n+1) | | +| …… | obj | …… | …… | + +**示例:** + +查询`mid=2`的最近玩过的游戏 + +```shell +curl -G 'https://api.bilibili.com/x/space/lastplaygame/v2' \ + --data-urlencode 'mid=2' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "page_num": 0, + "page_size": 15, + "total_count": 8, + "list": [ + { + "game_base_id": 102567, + "game_name": "坎特伯雷公主与骑士唤醒冠军之剑的奇幻冒险", + "game_icon": "https://i0.hdslb.com/bfs/game/fc2f4fd3a347eeb9b8b6ab59d961269bdd05d4e0.png", + "grade": 8.2, + "detail_url": "https://www.biligame.com/detail/?id=102567", + "game_tags": [ + "角色扮演", + "像素风" + ], + "notice": "像素风欢脱冒险RPG", + "gift_title": "", + "game_status_v2": 0 + }, + { + "game_base_id": 101661, + "game_name": "光·遇", + "game_icon": "https://i0.hdslb.com/bfs/game/9a1be39915f057597f9328afe503a2bbd0de7754.png", + "grade": 6.8, + "detail_url": "https://www.biligame.com/detail/?id=101661", + "game_tags": [ + "休闲", + "治愈", + "唯美" + ], + "notice": "九色鹿季开启,探索本真之旅", + "gift_title": "光·遇九色鹿季回归礼包", + "game_status_v2": 0 + }, + { + "game_base_id": 103496, + "game_name": "原神", + "game_icon": "https://i0.hdslb.com/bfs/game/2b29383536b3d1a2517bfcb73767f78c242f0458.png", + "grade": 6.5, + "detail_url": "https://www.biligame.com/detail/?id=103496", + "game_tags": [ + "角色扮演", + "二次元", + "冒险" + ], + "notice": "跨越尘世的探索之旅", + "gift_title": "bilibili-原神4.4版本独家礼包", + "game_status_v2": 0 + }, + { + "game_base_id": 49, + "game_name": "命运-冠位指定(Fate/GO)", + "game_icon": "https://i0.hdslb.com/bfs/game/ca5d8d4b3a042beddf7cabca20ae0c946527d1bf.png", + "grade": 6, + "detail_url": "https://www.biligame.com/detail/?id=49", + "game_tags": [ + "卡牌", + "fate", + "厨向" + ], + "notice": "第2部现已开启!", + "gift_title": "", + "game_status_v2": 0 + }, + { + "game_base_id": 102216, + "game_name": "公主连结Re:Dive", + "game_icon": "https://i0.hdslb.com/bfs/game/3bb819e010fe6d594d8f4d417ee380f40e8b5b06.png", + "grade": 8.4, + "detail_url": "https://www.biligame.com/detail/?id=102216", + "game_tags": [ + "角色扮演" + ], + "notice": "新角色「璃乃(圣诞节)」登场!", + "gift_title": "", + "game_status_v2": 0 + }, + { + "game_base_id": 168, + "game_name": "BanG Dream!", + "game_icon": "https://i0.hdslb.com/bfs/game/d196365d9f112a5adede7eedea1e4154e98c5e53.png", + "grade": 9.2, + "detail_url": "https://www.biligame.com/detail/?id=168", + "game_tags": [ + "音乐节奏", + "BanG Dream" + ], + "notice": "「迎风展翅的我们」活动开启!", + "gift_title": "", + "game_status_v2": 0 + }, + { + "game_base_id": 101772, + "game_name": "明日方舟", + "game_icon": "https://i0.hdslb.com/bfs/game/faa556b00d29fffc88281c1ee038b1b7f23aa5c2.jpg", + "grade": 7.4, + "detail_url": "https://www.biligame.com/detail/?id=101772", + "game_tags": [ + "策略", + "架空文明", + "末世" + ], + "notice": "2023感谢庆典正式开启", + "gift_title": "", + "game_status_v2": 0 + }, + { + "game_base_id": 97, + "game_name": "碧蓝航线", + "game_icon": "https://i0.hdslb.com/bfs/game/b141a7690c226a0eae66518c713d3af62613b21d.png", + "grade": 8.7, + "detail_url": "https://www.biligame.com/detail/?id=97", + "game_tags": [ + "养成" + ], + "notice": "指挥官,欢迎回港", + "gift_title": "", + "game_status_v2": 0 + } + ] + } +} +``` + +
+ +#### 查询用户最近投币视频(Web) + +> https://api.bilibili.com/x/space/coin/video + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------- | ------ | ---- | +| vmid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------------------------------- | -------- | ---------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
53013:用户隐私设置未公开 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 隐藏时:null
公开时:array | 信息本体 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 投币视频1 | | +| n | obj | 投币视频(n+1) | | +| …… | obj | …… | | + +`data`数组中的对象: + +基本与[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中`data`对象字段一致 + +**示例:** + +查看用户`mid=15858903`的最近投币视频 + +```shell +curl -G 'http://space.bilibili.com/x/space/coin/video' \ + --data-urlencode 'vmid=15858903' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "aid": 669644066, + "videos": 1, + "tid": 75, + "tname": "动物圈", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/0f73a68b8f449cc72e9ef109685bd295dc0c0c9d.jpg", + "title": "在人类幼崽身上用尽了温柔", + "pubdate": 1600608261, + "ctime": 1600608261, + "desc": "https://weibo.com/tv/show/1034:4551253766897703?from=old_pc_videoshow", + "state": 0, + "attribute": 16384, + "duration": 29, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 258457966, + "name": "卧龙寺", + "face": "http://i2.hdslb.com/bfs/face/f868d1f522733fdcf72a6267e0237157dd0e9948.jpg" + }, + "stat": { + "aid": 669644066, + "view": 3412898, + "danmaku": 719, + "reply": 1481, + "favorite": 21909, + "coin": 2864, + "share": 13702, + "now_rank": 0, + "his_rank": 0, + "like": 86970, + "dislike": 0 + }, + "dynamic": "", + "cid": 237319289, + "dimension": { + "width": 576, + "height": 1024, + "rotate": 0 + }, + "bvid": "BV1sa4y1j7jk", + "coins": 1, + "time": 1601802763, + "ip": "", + "inter_video": false + }, + { + "aid": 202267998, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/ca7746f2207114513f1a421d7f744523275ee679.jpg", + "title": "充 电 器 の 痛", + "pubdate": 1601750952, + "ctime": 1601750952, + "desc": "这个简介吓到我了!", + "state": 0, + "attribute": 16512, + "duration": 50, + "mission_id": 14725, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 129922746, + "name": "-白糖洒一地-", + "face": "http://i0.hdslb.com/bfs/face/1f581f3b20a380c2fd13ecb8bbe409f8b49c6418.jpg" + }, + "stat": { + "aid": 202267998, + "view": 109, + "danmaku": 2, + "reply": 11, + "favorite": 5, + "coin": 9, + "share": 0, + "now_rank": 0, + "his_rank": 0, + "like": 20, + "dislike": 0 + }, + "dynamic": "", + "cid": 241861687, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV1oh411X7iA", + "coins": 2, + "time": 1601773750, + "ip": "", + "inter_video": false + }, + { + "aid": 839722373, + "videos": 1, + "tid": 208, + "tname": "校园学习", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/11ed53241ceab314c919adba9f85582d24d9313c.jpg", + "title": "“白piáo”用日语到底怎么说?油管人气日语老师来教你!", + "pubdate": 1601026026, + "ctime": 1601026026, + "desc": "志方老师的B站用语日语课又来了~\n欢迎大家来看哦,\n如果喜欢我们的作品的话,欢迎大家用2~3连+转发来支持我们~\n如果拒绝的话,也可以用日语在评论和弹幕里刷上一波~即可以锻炼日语又可以拒绝我们,岂不美哉~~", + "state": 0, + "attribute": 16768, + "duration": 310, + "mission_id": 14655, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 677926489, + "name": "日语志方老师", + "face": "http://i2.hdslb.com/bfs/face/d465e5cd42e3523a52b3bef38dce7b23627b7723.jpg" + }, + "stat": { + "aid": 839722373, + "view": 130688, + "danmaku": 1320, + "reply": 799, + "favorite": 3722, + "coin": 5883, + "share": 339, + "now_rank": 0, + "his_rank": 0, + "like": 17585, + "dislike": 0 + }, + "dynamic": "志方老师的B站用语日语课又来了~\n欢迎大家来看哦,\n如果喜欢我们的作品的话,欢迎大家用2~3连+转发来支持我们~\n如果拒绝的话,也可以用日语在评论和弹幕里刷上一波~即可以锻炼日语又可以拒绝我们,岂不美哉~~", + "cid": 238876133, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV1n54y117kq", + "coins": 2, + "time": 1601036198, + "ip": "", + "inter_video": false + } + ] +} +``` + +
+ +#### 查询用户最近投币视频(APP) + +> https://app.bilibili.com/x/v2/space/coinarc + +*请求方式:GET* + +认证方式:APP + +如设置隐私查看自己的需要认证 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ----------- | ------ | -------- | +| access_key | str | APP登录Token | APP方式必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| vmid | num | 目标用户mid | 必要 | | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | 默认为20 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------ | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ---------- | ---- | +| count | num | 投币的视频数 | | +| item | array | 投币视频列表 | | + +`item`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------ | ---- | +| 0 | obj | 投币的视频信息1 | | +| n | obj | 投币的视频信息(n+1) | | +| …… | obj | …… | | + +`item`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ------------ | ---------------------- | +| title | str | 稿件标题 | | +| subtitle | str | 空 | | +| tname | str | 空 | | +| cover | str | 封面图片 url | | +| cover_icon | str | 空 | | +| uri | str | APP 跳转 uri | 如`bilibili://video/2` | +| param | str | 稿件 avid | | +| goto | str | av | | +| length | num | 空 | | +| duration | num | 稿件视频长度 | 单位为秒 | +| is_popular | bool | (?) | | +| is_steins | bool | (?) | | +| is_ugcpay | bool | (?) | | +| is_cooperation | str | (?) | | +| is_pgc | str | (?) | | +| is_live_playback | str | (?) | | +| is_pugv | str | (?) | | +| is_fold | num | (?) | | +| play | num | 播放量 | | +| danmaku | num | 弹幕量 | | +| ctime | num | 发布时间 | 时间戳 | +| ugc_pay | num | 0 | | +| author | str | UP主昵称 | | +| state | bool | true | | +| videos | num | 0 | | +| view_content | str | 稿件播放量文案 | | +| icon_type | num | 0 | | +| publish_time_text | str | 空 | | + +**示例:** + +用户`mid=2`的投币列表 + +```shell +curl -G 'https://app.bilibili.com/x/v2/space/coinarc' \ + --data-urlencode 'appkey=1d8b6e7d45233436' \ + --data-urlencode 'access_key=xxx' \ + --data-urlencode 'vmid=2' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 2, + "item": [ + { + "title": "请打开麦克风交流", + "subtitle": "", + "tname": "", + "cover": "http://i1.hdslb.com/bfs/archive/cf9aea43b72354ee8c9486e4bf8e07cb38920a65.jpg", + "cover_icon": "", + "uri": "bilibili://video/496832459?player_width=1080\u0026player_height=1920\u0026player_rotate=0", + "param": "496832459", + "goto": "av", + "length": "", + "duration": 134, + "is_popular": false, + "is_steins": false, + "is_ugcpay": false, + "is_cooperation": false, + "is_pgc": false, + "is_live_playback": false, + "is_pugv": false, + "is_fold": false, + "play": 706480, + "danmaku": 167, + "ctime": 1706431476, + "ugc_pay": 0, + "author": "三个猪鼓励", + "state": true, + "videos": 0, + "view_content": "70.6万", + "icon_type": 0, + "publish_time_text": "" + }, + { + "title": "【裏命】地球的内部【いよわ】【中文CC字幕】", + "subtitle": "", + "tname": "", + "cover": "http://i0.hdslb.com/bfs/archive/e087224ae4a5ff9ef3f2f6b7644d635276b8f5c6.jpg", + "cover_icon": "", + "uri": "bilibili://video/860645391?player_width=1920\u0026player_height=1080\u0026player_rotate=0", + "param": "860645391", + "goto": "av", + "length": "", + "duration": 264, + "is_popular": false, + "is_steins": false, + "is_ugcpay": false, + "is_cooperation": false, + "is_pgc": false, + "is_live_playback": false, + "is_pugv": false, + "is_fold": false, + "play": 194375, + "danmaku": 173, + "ctime": 1669713070, + "ugc_pay": 0, + "author": "精神安定剤", + "state": true, + "videos": 0, + "view_content": "19.4万", + "icon_type": 0, + "publish_time_text": "" + } + ] + } +} +``` + +
+ +#### 查询用户最近点赞视频(Web) + +> https://api.bilibili.com/x/space/like/video + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------- | ------ | ---- | +| vmid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------------------------------- | -------- | ---------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
53013:用户隐私设置未公开 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 隐藏时:null
公开时:array | 信息本体 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 点赞视频1 | | +| n | obj | 点赞视频(n+1) | | +| …… | obj | …… | | + +`data`数组中的对象: + +基本与[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中`data`对象字段一致 + +**示例:** + +查看用户`mid=15858903`的最近点赞视频 + +```shell +curl -G 'http://space.bilibili.com/x/space/like/video' \ + --data-urlencode 'vmid=15858903' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "aid": 1700085880, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/7fad4ca408c66eb7ea72188f56bcf952306d5807.jpg", + "title": "你是从什么时候,意识到自己缺爱的呢?", + "pubdate": 1706706000, + "ctime": 1706602115, + "desc": "关于个人情感问题,私信发“2024”我来帮你~", + "state": 0, + "duration": 91, + "mission_id": 4009559, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 2104592226, + "name": "鲸落艳红尘", + "face": "https://i0.hdslb.com/bfs/face/80160fbcf71958e6f5ad3a4fdfa39a55cc0699a5.jpg" + }, + "stat": { + "aid": 1700085880, + "view": 930, + "danmaku": 1, + "reply": 5, + "favorite": 18, + "coin": 0, + "share": 4, + "now_rank": 0, + "his_rank": 0, + "like": 27, + "dislike": 0, + "vt": 0, + "vv": 930 + }, + "dynamic": "", + "cid": 1424231007, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1XK421y7ZL", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n240130sa1k9birz4lwlsm21ya1w3p2c_firsti.jpg", + "pub_location": "湖北", + "bvid": "BV1XK421y7ZL", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "", + "enable_vt": 0 + }, + { + "aid": 836926413, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/dceaf79d1cc4f74ab8cd862f454a8ec4b4a44343.jpg", + "title": "内心的创伤,是建立深度亲密关系的桥梁!", + "pubdate": 1706594400, + "ctime": 1706515438, + "desc": "关于个人情感问题,私信发“2024”我来帮你~", + "state": 0, + "duration": 297, + "mission_id": 4009559, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 2104592226, + "name": "鲸落艳红尘", + "face": "https://i0.hdslb.com/bfs/face/80160fbcf71958e6f5ad3a4fdfa39a55cc0699a5.jpg" + }, + "stat": { + "aid": 836926413, + "view": 1903, + "danmaku": 0, + "reply": 7, + "favorite": 142, + "coin": 34, + "share": 30, + "now_rank": 0, + "his_rank": 0, + "like": 118, + "dislike": 0, + "vt": 0, + "vv": 1903 + }, + "dynamic": "", + "cid": 1423127570, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1xg4y1e7kY", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n240129qn55at7dr1775k12hp34tw284_firsti.jpg", + "pub_location": "湖北", + "bvid": "BV1xg4y1e7kY", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "", + "enable_vt": 0 + }, + …… + ] + } +} +``` + +
+ +#### 查询用户最近点赞视频(APP) + +> https://app.bilibili.com/x/v2/space/likearc + +*请求方式:GET* + +认证方式:APP + +如设置隐私查看自己的需要认证 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ----------- | ------ | -------- | +| access_key | str | APP登录Token | APP方式必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| vmid | num | 目标用户mid | 必要 | | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | 默认为20 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ---------- | ---- | +| count | num | 点赞的视频数 | | +| item | array | 点赞视频列表 | | + +`item`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------ | ---- | +| 0 | obj | 点赞的视频信息1 | | +| n | obj | 点赞的视频信息(n+1) | | +| …… | obj | …… | | + +`item`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | ------------ | ---------------------- | +| title | str | 稿件标题 | | +| subtitle | str | 空 | | +| tname | str | 空 | | +| cover | str | 封面图片 url | | +| cover_icon | str | 空 | | +| uri | str | APP 跳转 uri | 如`bilibili://video/2` | +| param | str | 稿件 avid | | +| goto | str | av | | +| length | num | 空 | | +| duration | num | 稿件视频长度 | 单位为秒 | +| is_popular | bool | (?) | | +| is_steins | bool | (?) | | +| is_ugcpay | bool | (?) | | +| is_cooperation | str | (?) | | +| is_pgc | str | (?) | | +| is_live_playback | str | (?) | | +| is_pugv | str | (?) | | +| is_fold | num | (?) | | +| play | num | 播放量 | | +| danmaku | num | 弹幕量 | | +| ctime | num | 发布时间 | 时间戳 | +| ugc_pay | num | 0 | | +| author | str | UP主昵称 | | +| state | bool | true | | +| videos | num | 0 | | +| view_content | str | 稿件播放量文案 | | +| icon_type | num | 0 | | +| publish_time_text | str | 空 | | + +**示例:** + +用户`mid=2`的点赞列表 + +```shell +curl -G 'https://app.bilibili.com/x/v2/space/likearc' \ + --data-urlencode 'appkey=1d8b6e7d45233436' \ + --data-urlencode 'access_key=xxx' \ + --data-urlencode 'vmid=2' \ + --data-urlencode 'ps=2' \ + --data-urlencode 'pn=1' \ +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 2, + "item": [ + { + "title": "兄弟难舍也难分", + "subtitle": "", + "tname": "", + "cover": "http://i1.hdslb.com/bfs/archive/58f031a52eab6d5faec5a39dfaab5728f65672d5.jpg", + "cover_icon": "", + "uri": "bilibili://video/624351941?player_width=1080\u0026player_height=1920\u0026player_rotate=0", + "param": "624351941", + "goto": "av", + "length": "", + "duration": 216, + "is_popular": false, + "is_steins": false, + "is_ugcpay": false, + "is_cooperation": false, + "is_pgc": false, + "is_live_playback": false, + "is_pugv": false, + "is_fold": false, + "play": 423652, + "danmaku": 362, + "ctime": 1706320200, + "ugc_pay": 0, + "author": "甜蜜老张", + "state": true, + "videos": 0, + "view_content": "42.4万", + "icon_type": 0, + "publish_time_text": "" + }, + { + "title": "技能搭配不累,共赴热血团战!", + "subtitle": "", + "tname": "", + "cover": "http://i2.hdslb.com/bfs/archive/2094b8e0be819222d320e2841ee1c39f5f2e4357.jpg", + "cover_icon": "", + "uri": "bilibili://video/793597196?player_width=1280\u0026player_height=720\u0026player_rotate=0", + "param": "793597196", + "goto": "av", + "length": "", + "duration": 41, + "is_popular": false, + "is_steins": false, + "is_ugcpay": false, + "is_cooperation": false, + "is_pgc": false, + "is_live_playback": false, + "is_pugv": false, + "is_fold": false, + "play": 1237, + "danmaku": 2, + "ctime": 1704855559, + "ugc_pay": 0, + "author": "38047aa1-cb8a-4", + "state": true, + "videos": 0, + "view_content": "1237", + "icon_type": 0, + "publish_time_text": "" + } + ] + } +} +``` + +
+ +## 投稿 + + + +### 查询用户投稿视频明细 + +> https://api.bilibili.com/x/space/wbi/arc/search + +> ~~https://api.bilibili.com/x/space/arc/search~~ (已废弃,保留是方便遇到问题的人搜索到此处) + +*请求方式:GET* + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +另见 [根据关键词查找视频](../video/collection.md#根据关键词查找视频), 功能基本相同, 暂未发现风控校验 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------ | ------ | ----------------------------------------------------------------------------- | +| mid | num | 目标用户mid | 必要 | | +| order | str | 排序方式 | 非必要 | 默认为pubdate
最新发布:pubdate
最多播放:click
最多收藏:stow | +| tid | num | 筛选目标分区 | 非必要 | 默认为0
0:不进行分区筛选
分区tid为所筛选的分区 | +| keyword | str | 关键词筛选 | 非必要 | 用于使用关键词搜索该UP主视频稿件 | +| pn | num | 页码 | 非必要 | 默认为 `1` | +| ps | num | 每页项数 | 非必要 | 默认为 `30` | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-412:请求被拦截 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | -------------- | ---- | +| list | obj | 列表信息 | | +| page | obj | 页面信息 | | +| episodic_button | obj | “播放全部“按钮 | | +| is_risk | bool | | | +| gaia_res_type | num | | | +| gaia_data | obj | | | + +`data`中的`list`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ---------------- | ---- | +| slist | array | 空数组 | | +| tlist | obj | 投稿视频分区索引 | | +| vlist | array | 投稿视频列表 | | + +`list`中的`tlist`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | --------------------- | +| {tid} | obj | 该分区的详情 | 字段名为存在的分区tid | +| …… | obj | …… | 向下扩展 | + +`tlist`中的`{tid}`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------------------- | ---- | +| count | num | 投稿至该分区的视频数 | | +| name | str | 该分区名称 | | +| tid | num | 该分区tid | | + +`list`中的`vlist`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 投稿视频1 | | +| n | obj | 投稿视频(n+1) | | +| …… | obj | …… | …… | + +`list`中的`vlist`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ---- | -------------- | ---------------------------- | +| aid | num | 稿件avid | | +| attribute | num | | | +| author | str | 视频UP主 | 不一定为目标用户(合作视频) | +| bvid | str | 稿件bvid | | +| comment | num | 视频评论数 | | +| copyright | str | 视频版权类型 | | +| created | num | 投稿时间 | 时间戳 | +| description | str | 视频简介 | | +| elec_arc_type | num | 充电为1,否则0 | 可能还有其他情况 | +| enable_vt | num | 0 | 作用尚不明确 | +| hide_click | bool | false | 作用尚不明确 | +| is_avoided | num | 0 | 作用尚不明确 | +| is_charging_arc | bool | 是否为充电视频 | | +| is_lesson_video | num | 是否为课堂视频 | 0:否
1:是 | +| is_lesson_finished | num | 课堂是否已完结 | 0:否
1:是 | +| is_live_playback | num | 是否为直播回放 | 0:否
1:是 | +| is_pay | num | 0 | 作用尚不明确 | +| is_self_view | bool | 是否仅自己可见 | | +| is_steins_gate | num | 是否为互动视频 | 0:否
1:是 | +| is_union_video | num | 是否为合作视频 | 0:否
1:是 | +| jump_url | str | 跳转链接 | 跳转到课堂的链接,否则为"" | +| length | str | 视频长度 | MM:SS | +| mid | num | 视频UP主mid | 不一定为目标用户(合作视频) | +| meta | obj | 所属合集或课堂 | 无数据时为 null | +| pic | str | 视频封面 | | +| play | num | 视频播放次数 | | +| playback_position | num | 百分比播放进度 | 封面下方显示的粉色条 | +| review | num | 0 | 作用尚不明确 | +| season_id | num | 合集或课堂编号 | 都不属于时为0 | +| subtitle | str | 空 | 作用尚不明确 | +| title | str | 视频标题 | | +| typeid | num | 视频分区tid | | +| video_review | num | 视频弹幕数 | | +| vt | num | 0 | 作用尚不明确 | +| vt_display | str | 空 | 作用尚不明确 | + +`list`中的`vlist`数组中的对象中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ---------------- | +| attribute | num | 0 | 作用尚不明确 | +| cover | str | 合集封面URL | | +| ep_count | num | 合集视频数量 | | +| ep_num | num | 合集视频数量 | | +| first_aid | num | 首个视频av号 | | +| id | num | 合集id | | +| intro | str | 合集介绍 | | +| mid | num | UP主uid | 若为课堂,则为0 | +| ptime | num | unix时间(s) | 最后更新时间 | +| sign_state | num | 0 | 作用尚不明确 | +| stat | obj | 合集统计数据 | | +| title | str | 合集名称 | | + +`list`中的`vlist`数组中的对象中的`meta`对象中的`stat`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | -------------------- | +| coin | num | 合集总投币数 | | +| danmaku | num | 合集总弹幕数 | | +| favorite | num | 合集总收藏数 | | +| like | num | 合集总点赞数 | | +| mtime | num | unix时间(s) | 其他统计数据更新时间 | +| reply | num | 合集总评论数 | | +| season_id | num | 合集id | | +| share | num | 合集总分享数 | | +| view | num | 合集总播放量 | | +| vt | num | 0 | 作用尚不明确 | +| vv | num | 0 | 作用尚不明确 | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ---- | +| count | num | 总计稿件数 | | +| pn | num | 当前页码 | | +| ps | num | 每页项数 | | + +`data`中的`episodic_button`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| text | str | 按钮文字 | | +| uri | str | 全部播放页url | | + +**示例:** + +`pn`(页码)和`ps`(每页项数)只改变`vlist`中成员的多少与内容 + +以每页2项查询用户`mid=53456`的第1页投稿视频明细 + +```shell +curl -G 'https://api.bilibili.com/x/space/arc/search' \ +--data-urlencode 'mid=53456' \ +--data-urlencode 'ps=2' \ +--data-urlencode 'pn=1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": { + "slist": [], + "tlist": { + "1": { + "tid": 1, + "count": 3, + "name": "动画" + }, + "129": { + "tid": 129, + "count": 1, + "name": "舞蹈" + }, + "160": { + "tid": 160, + "count": 96, + "name": "生活" + }, + "177": { + "tid": 177, + "count": 4, + "name": "纪录片" + }, + "181": { + "tid": 181, + "count": 50, + "name": "影视" + }, + "188": { + "tid": 188, + "count": 444, + "name": "科技" + }, + "196": { + "tid": 196, + "count": 2, + "name": "课堂" + } + }, + "vlist": [{ + "comment": 985, + "typeid": 250, + "play": 224185, + "pic": "http://i0.hdslb.com/bfs/archive/5e56c10a9bd67f2fcac46fdd0fc2caa8769700c8.jpg", + "subtitle": "", + "description": "这一次,我们的样片日记首次来到了西藏,在桃花季开启了藏东样片之旅!这趟“开荒”之旅我们跋山涉水,一路硬刚,多亏有路虎卫士这样的神队友撑全场!这次的素材我们也上传到了官网(ysjf.com/material),欢迎大家去看看~如果你喜欢这期视频,请多多支持我们,并把视频分享给你的朋友们一起看看!", + "copyright": "1", + "title": "和朋友去西藏拍样片日记……", + "review": 0, + "author": "影视飓风", + "mid": 946974, + "created": 1745290800, + "length": "22:11", + "video_review": 2365, + "aid": 114375683741573, + "bvid": "BV1ac5yzhE94", + "hide_click": false, + "is_pay": 0, + "is_union_video": 1, + "is_steins_gate": 0, + "is_live_playback": 0, + "is_lesson_video": 0, + "is_lesson_finished": 0, + "lesson_update_info": "", + "jump_url": "", + "meta": { + "id": 2046621, + "title": "样片日记", + "cover": "https://archive.biliimg.com/bfs/archive/e2ca3e5a6672cf35c9e61ac02e8d739cc0aafa8b.jpg", + "mid": 946974, + "intro": "", + "sign_state": 0, + "attribute": 140, + "stat": { + "season_id": 2046621, + "view": 31755096, + "danmaku": 171253, + "reply": 33685, + "favorite": 409505, + "coin": 935105, + "share": 199467, + "like": 1791607, + "mtime": 1745309513, + "vt": 0, + "vv": 0 + }, + "ep_count": 13, + "first_aid": 238588630, + "ptime": 1745290800, + "ep_num": 13 + }, + "is_avoided": 0, + "season_id": 2046621, + "attribute": 16793984, + "is_charging_arc": false, + "elec_arc_type": 0, + "vt": 0, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0, + "is_self_view": false + }, { + "comment": 0, + "typeid": 197, + "play": 8506, + "pic": "https://archive.biliimg.com/bfs/archive/489f3df26a190a152ad479bfe50a73f1cd4c43c5.jpg", + "subtitle": "", + "description": "8节课,Tim和青青带你用iPhone拍出电影感", + "copyright": "1", + "title": "【影视飓风】只看8节课,用iPhone拍出电影感", + "review": 0, + "author": "影视飓风", + "mid": 946974, + "created": 1744865737, + "length": "00:00", + "video_review": 9, + "aid": 114351440726681, + "bvid": "BV1WB5ezxEnz", + "hide_click": false, + "is_pay": 0, + "is_union_video": 0, + "is_steins_gate": 0, + "is_live_playback": 0, + "is_lesson_video": 1, + "is_lesson_finished": 1, + "lesson_update_info": "8", + "jump_url": "https://www.bilibili.com/cheese/play/ss190402215", + "meta": { + "id": 190402215, + "title": "【影视飓风】只看8节课,用iPhone拍出电影感", + "cover": "https://archive.biliimg.com/bfs/archive/489f3df26a190a152ad479bfe50a73f1cd4c43c5.jpg", + "mid": 0, + "intro": "", + "sign_state": 0, + "attribute": 0, + "stat": { + "season_id": 190402215, + "view": 1111222, + "danmaku": 1853, + "reply": 0, + "favorite": 0, + "coin": 0, + "share": 0, + "like": 0, + "mtime": 0, + "vt": 0, + "vv": 0 + }, + "ep_count": 0, + "ptime": 1744865737, + "ep_num": 0 + }, + "is_avoided": 0, + "season_id": 190402215, + "attribute": 1073758592, + "is_charging_arc": false, + "elec_arc_type": 0, + "vt": 0, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0, + "is_self_view": false + }] + }, + "page": { + "pn": 1, + "ps": 42, + "count": 786 + }, + "episodic_button": { + "text": "播放全部", + "uri": "//www.bilibili.com/medialist/play/946974?from=space" + }, + "is_risk": false, + "gaia_res_type": 0, + "gaia_data": null + } +} +``` + +
+ + +### 查询用户投稿明细(APP、无需wbi鉴权) + +> https://app.biliapi.com/x/v2/space/archive/cursor + +*请求方式:GET* + +可以获取APP端可获得的用户空间投稿所有信息 + +APP端请求对web端包容度最高,无需Cookie以外的任何认证,只需填写vmid即可查询 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ----------------------- | -------------- | ------------- | +| vmid | num | 目标用户mid | 必要 | | +| aid | num | 请求返回起始视频 | 首次请求不需要 | 填写上次请求返回最后视频的aid | +| order | str | 排序方式 | 非必要 | `click`代表最多播放,`pubdate`代表最新发布 | +| sort | str | 确有影响,但这是什么呢? | 非必要 | 创建时间: asc
修改时间: desc | +| access_key | str | APP登录Token | APP方式必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| build | num | 版本 | APP方式必要 | 可为`8130300` | +| c_locale | str | 语言 | 非必要 | zh_CN | +| channel | num | 频道 | 非必要 | | +| fnval | num | 视频流类型 | 非必要 | | +| fnver | num | 请求时提供的fnver | 非必要 | 可为 0 | +| force_host | num | 源url类型 | 非必要 | 0:无限制 1:使用http 2:使用https | +| fourk | num | 是否允许 4K 视频 | 非必要 | 画质最高 1080P:0(默认)
画质最高 4K:1 | +| include_cursor| bool | 未知 | 非必要 | 可为false | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web`、`android` 等 | +| platform | str | 平台 | 非必要 | 可为`web` | +| ps | int | 每页条数 | 非必要 | 默认为 `20` | +| pn | int | 似乎不是页码 | 非必要 | 默认为 `32` | +| pn_policy | int | 未知 | 非必要 | 可为 `1` | +| s_locale | str | 语言 | 非必要 | zh_CN | +| statistics | str | 位置 | 非必要 | 可为{"appId":1,"platform":3,"version":"8.13.0","abtest":""} | +| ts | num | 秒级时间戳 | 非必要 | | +| voice_balance | num | 未知 | 非必要 | 默认为 `1` | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 视频信息 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------------- | ------ | ------------- | ----------------------------- | +| count | num | 总数 | 0:成功
-400:请求错误 | +| episodic_button | obj | 播放按钮 | 播放按钮的显示文字与跳转链接 | +| has_next | bool | 有无后续 | true:有;false:没有 | +| has_prev | bool | 有无前置 | true:有;false:没有 | +| item | array | 视频列表 | 注意是item没有复数 | +| last_watched_locator | obj | 上次播放定位 | 上次播放定位的一些信息 | +| order | array | 排列方式 | 排列方式的显示与值 | + +`episodic_button`对象 + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ----------------- | ------ | +| text | str | 四个大字“播放全部” | | +| uri | str | 跳转链接 | | + +`item`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ---- | +| 0 | obj | 视频信息1 | | +| n | obj | 视频信息(n+1) | | +| …… | obj | …… | …… | + +`item`数组元素: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ----------------------- | ------------------------ | +| author | str | 作者昵称 | | +| bvid | str | 视频bv号 | | +| cover | str | 封面url | | +| cover_icon | str | 封面icon?未知 | | +| ctime | num | 应该是发布时间秒级时间戳 | | +| cursor_attr | obj | 上次观看标记 | | +| danmaku | num | 弹幕数 | | +| duration | num | 视频时长 | | +| first_cid | num | 首个频道cid | | +| goto | str | 应该是跳转去向类型 | 已知av为视频 | +| icon_type | num | icon类型?未知 | | +| is_cooperation | bool | 是否为合作视频 | 如果true会有粉色合作视频标签 | +| is_fold | bool | 是否折叠?未知 | | +| is_live_playback | bool | 是否为直播回放 | 如果true会有粉色直播回放标签 | +| is_onself | bool | 是否自己?未知 | | +| is_pgc | bool | 是否开pgc | | +| is_popular | bool | 是否上热门 | 如果true会有热门标签 | +| is_pugv | bool | 未知 | | +| is_steins | bool | 未知 | | +| is_ugcpay | bool | 未知 | | +| length | num | 长度?未知 | | +| param | str | 参数,实际为视频aid | | +| play | num | 播放量 | | +| publish_time_text | str | 发布时间汉字字符串版 | | +| state | bool | 状态?未知 | | +| subtitle | str | 子标题 | | +| three_points | array | 三点按钮内容 | 关于稍后再看和分享的显示内容 | +| title | str | 标题 | | +| tname | str | tag的name | | +| ugc_pay | num | ugc支付?未知 | | +| uri | str | APP 跳转 uri | | +| video | num | 未知 | | +| view_content | str | 播放量字符串版 | | + +`item`元素中的`cursor_attr`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | ----------------------- | -------------------------------------- | +| is_last_watched_arc | bool | 是否为上次播放 | 如果ture则封面笼罩一层写有“上次播放”的灰幕 | +| rank | num | 视频所处该列表排名 | | + +`last_watched_locator`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ----- | ----------------- | ------ | +| display_threshold | num | 显示阈值 | | +| insert_ranking | num | 嵌入排名 | | +| text | str | 定位上次观看字样 | | + +`order`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ----------------- | +| 0 | obj | 最新发布的内容 | 内包括文字和值 | +| 1 | obj | 最多播放的内容 | 内包括文字和值 | + +**示例:** + +查询用户mid=1240283469的稿件 +以播放量排序,显示3个稿件,但假设aid=1301087872及以前稿件已经加载过 + +> https://app.biliapi.com/x/v2/space/archive/cursor?vmid=1240283469&order=click&ps=3&aid=1301087872 + +输入浏览器 + +
+查看响应示例: + +```json + +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "episodic_button": { + "text": "播放全部", + "uri": "bilibili://music/playlist/spacepage/1240283469?desc=1\u0026offset=0\u0026oid=0\u0026order=time\u0026page_type=1\u0026playlist_intro=UP%E4%B8%BB%E7%9A%84%E5%85%A8%E9%83%A8%E8%A7%86%E9%A2%91\u0026ps=20\u0026sort_field=2\u0026sort_hidden=1\u0026total_count=33\u0026user_name=%E7%A5%9E%E5%9D%A1%E5%86%9C%E8%8E%AB" + }, + "order": [ + { + "title": "最新发布", + "value": "pubdate" + }, + { + "title": "最多播放", + "value": "click" + } + ], + "count": 33, + "item": [ + { + "title": "【神坡农二】后半段更是天籁!汉堡仙人神坡农二吃完快餐深情演唱《樱花树下的约定》", + "subtitle": "", + "tname": "搞笑", + "cover": "http://i2.hdslb.com/bfs/archive/3e5d02f50b2e0a756cc5e3dd7f705abc58c3a439.jpg", + "cover_icon": "", + "uri": "bilibili://video/1351875564?history_progress=0\u0026player_height=1920\u0026player_rotate=0\u0026player_width=1080", + "param": "1351875564", + "goto": "av", + "length": "", + "duration": 45, + "is_popular": false, + "is_steins": false, + "is_ugcpay": false, + "is_cooperation": false, + "is_pgc": false, + "is_live_playback": false, + "is_pugv": false, + "is_fold": false, + "is_oneself": false, + "play": 1248, + "danmaku": 1, + "ctime": 1710518403, + "ugc_pay": 0, + "author": "神坡农莫", + "state": false, + "bvid": "BV1H6421w7Gy", + "videos": 1, + "three_point": [ + { + "type": "addtoview", + "icon": "https://i0.hdslb.com/bfs/app/25cc01346574a601dafd45c94226d92a67eed79a.png", + "text": "添加至稍后再看" + }, + { + "type": "share", + "icon": "https://i0.hdslb.com/bfs/app/a5787f586c72f2d6f6ade4b33c64908938c4a01f.png", + "text": "分享", + "share_succ_toast": "分享成功", + "share_fail_toast": "分享失败", + "share_path": "pages/video/video?avid=1351875564", + "short_link": "https://b23.tv/BV1H6421w7Gy" + } + ], + "first_cid": 1471110689, + "cursor_attr": { + "is_last_watched_arc": false, + "rank": 1 + }, + "view_content": "1248", + "icon_type": 0, + "publish_time_text": "3月16日" + }, + { + "title": "【迪迦奥特曼】亲自配音?迪迦超战神联合网络新星神坡农二!共同打造奥特曼大电影!", + "subtitle": "", + "tname": "搞笑", + "cover": "http://i0.hdslb.com/bfs/archive/c6c94d16aeeefca148c1694e45fd352b22cac3fb.jpg", + "cover_icon": "", + "uri": "bilibili://video/1950389780?history_progress=0\u0026player_height=1080\u0026player_rotate=0\u0026player_width=1920", + "param": "1950389780", + "goto": "av", + "length": "", + "duration": 101, + "is_popular": false, + "is_steins": false, + "is_ugcpay": false, + "is_cooperation": false, + "is_pgc": false, + "is_live_playback": false, + "is_pugv": false, + "is_fold": false, + "is_oneself": false, + "play": 1184, + "danmaku": 0, + "ctime": 1707431804, + "ugc_pay": 0, + "author": "神坡农莫", + "state": false, + "bvid": "BV1fC411x7uf", + "videos": 1, + "three_point": [ + { + "type": "addtoview", + "icon": "https://i0.hdslb.com/bfs/app/25cc01346574a601dafd45c94226d92a67eed79a.png", + "text": "添加至稍后再看" + }, + { + "type": "share", + "icon": "https://i0.hdslb.com/bfs/app/a5787f586c72f2d6f6ade4b33c64908938c4a01f.png", + "text": "分享", + "share_succ_toast": "分享成功", + "share_fail_toast": "分享失败", + "share_path": "pages/video/video?avid=1950389780", + "short_link": "https://b23.tv/BV1fC411x7uf" + } + ], + "first_cid": 1434820367, + "cursor_attr": { + "is_last_watched_arc": false, + "rank": 2 + }, + "view_content": "1184", + "icon_type": 0, + "publish_time_text": "2月9日" + } + ], + "last_watched_locator": { + "display_threshold": 10, + "insert_ranking": 6, + "text": "定位至上次观看" + }, + "has_next": true, + "has_prev": true + } +} + +``` + +
+ + +### 查询用户投稿相簿预览 + +
+相簿功能已下线, 以下接口失效, 参见 +#801 + + +> https://api.bilibili.com/x/space/album/index + +*请求方式:GET* + +所有类型的相簿 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | ------- | +| mid | num | 目标用户mid | 必要 | | +| ps | num | 获取的相簿量 | 非必要 | 默认为8 定义域 1-大于1700 (注意滥用风险) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 相簿列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 相簿内容1 | | +| n | obj | 相簿内容(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ------ | ----------- | -------------- | +| count | num | 总计图片数 | | +| ctime | num | 发布时间 | 时间戳 | +| description | str | 简介 | | +| doc_id | num | 相簿id | 非动态!!! | +| like | num | 点赞数 | | +| pictures | array | 图片内容 | | +| poster_uid | num | 上传用户mid | | +| title | str | 标题 | 动态内容无 | +| view | num | 浏览数 | | + +`data`数组中的对象中的`pictures`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | --------------------- | +| 0 | obj | 内容图片1 | | +| n | obj | 内容图片(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | …… | + +`pictures`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ----------- | +| img_height | num | 图片高度 | | +| img_size | num | 图片大小 | 单位为KByte | +| img_src | str | 图片url | | +| img_width | num | 图片宽度 | | + +**示例:** + +查询用户`mid=53456`的投稿相簿预览 + +```shell +curl -G 'https://api.bilibili.com/x/space/album/index' \ +--data-urlencode 'mid=53456' \ +--data-urlencode 'ps=2' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [{ + "doc_id": 60470424, + "poster_uid": 53456, + "title": "", + "description": "你醒啦![tv_大佬]\n之前说到过的百万粉纪念的视频已经定时在了今天下午七点,欢迎来看呀!", + "pictures": [{ + "img_src": "https://i0.hdslb.com/bfs/album/2840366e30bf7c0aba9da5adde1a771255a57bc7.jpg", + "img_width": 625, + "img_height": 134, + "img_size": 14 + }], + "count": 1, + "ctime": 1583444859, + "view": 1677521, + "like": 29974 + }, { + "doc_id": 58962388, + "poster_uid": 53456, + "title": "", + "description": "上次的那些写实儿童画发出来啦!可以打印下来辟邪[tv_大佬]", + "pictures": [{ + "img_src": "https://i0.hdslb.com/bfs/album/8acaf7c7897cb858cccab36c33a5e875adfef177.jpg", + "img_width": 2172, + "img_height": 3258, + "img_size": 2831 + }, { + "img_src": "https://i0.hdslb.com/bfs/album/1611b6b56d3d4328889a62b9f9bdc92e9d065532.jpg", + "img_width": 3456, + "img_height": 5184, + "img_size": 3024 + }, { + "img_src": "https://i0.hdslb.com/bfs/album/f3a30a2ef5b39711af8b945d54d85ffd1e932b8a.jpg", + "img_width": 1200, + "img_height": 757, + "img_size": 313 + }], + "count": 3, + "ctime": 1582881332, + "view": 1176646, + "like": 25734 + }] +} +``` + +
+ +
+ +### 查询用户投稿相簿明细 + +
+ +相簿功能已下线, 以下接口失效 + + +> https://api.vc.bilibili.com/link_draw/v1/doc/doc_list +> https://api.bilibili.com/x/dynamic/feed/draw/doc_list + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ----------- | ------ | ------------------------------------------------------------ | +| uid | num | 目标用户mid | 必要 | | +| page_num | num | 页码 | 必要 | 默认为0 | +| page_size | num | 每页项数 | 必要 | 默认为30 | +| biz | str | 查询类型 | 非必要 | 全部:all
绘画:draw
摄影:photo
日常:daily
默认为all | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | -------- | ---- | +| items | array | 相簿列表 | | + +`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 相簿内容1 | | +| n | obj | 相簿内容(n+1) | | +| …… | obj | …… | …… | + +`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ------ | ----------- | -------------- | +| count | num | 总计图片数 | | +| ctime | num | 发布时间 | 时间戳 | +| description | str | 简介 | | +| doc_id | num | 相簿id | 非动态!!! | +| like | num | 点赞数 | | +| pictures | array | 图片内容 | | +| poster_uid | num | 上传用户mid | | +| title | str | 标题 | 动态内容无 | +| view | num | 浏览数 | | + +`items`数组中的对象中的`pictures`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | --------------------- | +| 0 | obj | 内容图片1 | | +| n | obj | 内容图片(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | …… | + +`pictures`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ----------- | +| img_height | num | 图片高度 | | +| img_size | num | 图片大小 | 单位为KByte | +| img_src | str | 图片url | | +| img_width | num | 图片宽度 | | + +**示例:** + +查询用户`mid=53456`的投稿明细中的全部类型 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/doc_list' \ +--data-urlencode 'uid=2' \ +--data-urlencode 'page_num=1' \ +--data-urlencode 'page_size=2' \ +--data-urlencode 'biz=all' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "items": [{ + "doc_id": 59015720, + "poster_uid": 2, + "title": "", + "description": "6影是真的无脑,2个宝石都护不住(设计师:这真是太酷了)", + "pictures": [{ + "img_src": "http://i0.hdslb.com/bfs/album/8456f050ec8639c6e0cef36aba27bfdedc550590.jpg", + "img_width": 1824, + "img_height": 840, + "img_size": 1024 + }], + "count": 1, + "ctime": 1582894607, + "view": 707073, + "like": 7055 + }, { + "doc_id": 46853140, + "poster_uid": 2, + "title": "", + "description": "#年度报告# #新年Flag# https://www.bilibili.com/blackboard/timemachine2019.html\n决定了,这就是我的新年Flag!今年我一定要…", + "pictures": [{ + "img_src": "http://i0.hdslb.com/bfs/album/5b3ae76f79d7cf2501afc3ca7c7da509dcf0e38a.jpg", + "img_width": 1125, + "img_height": 2184, + "img_size": 465 + }, { + "img_src": "http://i0.hdslb.com/bfs/album/87789fe9644337a1f7e6a0655a32584705af8bda.jpg", + "img_width": 1125, + "img_height": 2184, + "img_size": 421 + }, { + "img_src": "http://i0.hdslb.com/bfs/album/f752d7f3bb7952f6c0013b3f48ddcb07060b4721.jpg", + "img_width": 1125, + "img_height": 2184, + "img_size": 524 + }, { + "img_src": "http://i0.hdslb.com/bfs/active/7a52a411bccb716c8e67fe70e6c330d5209346de.jpg", + "img_width": 1125, + "img_height": 2184, + "img_size": 534 + }], + "count": 4, + "ctime": 1577966163, + "view": 833193, + "like": 5667 + }] + } +} +``` + +
+ +
+ +### 查询用户投稿专栏明细 + +> https://api.bilibili.com/x/space/wbi/article + +> ~~https://api.bilibili.com/x/space/article~~(旧链接) + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|-----|-------|--------------------------------------------------------------------------|-----| +| mid | num | 用户uid | | √ | +| pn | num | | 默认:1 | | +| ps | num | | 默认:30
范围:\[1,30\] | | +| sort | str | | `publish_time`:最新发布
`view`:最多阅读
`fav`:最多收藏
默认:`publish_time` | | + +**json回复:** + +根对象 + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|--------------------| +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------|-------|----------|-----| +| articles | array | 专栏文章信息列表 | | +| pn | num | 本次请求分页页数 | | +| ps | num | 本次请求分页大小 | | +| count | num | 专栏文章总数 | | + +`data`对象 -> `articles`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------------------|-------|----------|------| +| id | num | 专栏文章id | | +| category | obj | 分类 | | +| categories | array | 分类 | | +| title | str | 标题 | | +| summary | str | 摘要 | | +| banner_url | str | 封面图 | | +| template_id | num | | | +| state | num | | | +| author | obj | UP主信息 | | +| reprint | num | | | +| image_urls | array | | | +| publish_time | num | 发布时间戳 | 单位:秒 | +| ctime | num | 提交时间戳 | 单位:秒 | +| stats | obj | 专栏文章数据统计 | | +| tags | array | 标签 | | +| words | num | | | +| dynamic | str | 粉丝动态文案 | | +| origin_image_urls | array | | | +| list | | `null` | | +| is_like | bool | | | +| media | obj | | | +| apply_time | str | `空串` | | +| check_time | str | `空串` | | +| original | num | | | +| act_id | num | | | +| dispute | | `null` | | +| authenMark | | `null` | | +| cover_avid | num | | | +| top_video_info | | `null` | | +| type | num | | | + +`data`对象 -> `articles`数组中的对象 -> `category`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|-----|--------|-----| +| id | num | 分类id | | +| parent_id | num | 父级分类id | | +| name | str | 分类名称 | | + +`data`对象 -> `articles`数组中的对象 -> `categories`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|-----|--------|-----| +| id | num | 分类id | | +| parent_id | num | 父级分类id | | +| name | str | 分类名称 | | + +`data`对象 -> `articles`数组中的对象 -> `author`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------------|-----|--------|-----| +| mid | num | 用户uid | | +| name | str | 用户名 | | +| face | str | 头像 | | +| pendant | obj | 头像框信息 | | +| official_verify | obj | 账号认证信息 | | +| nameplate | obj | 成就勋章信息 | | +| vip | obj | 大会员信息 | | + +`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `pendant`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|--------|-----|----------|-----| +| pid | num | 头像框id | | +| name | str | 头像框名称 | | +| image | str | 头像框图片url | | +| expire | num | 过期时间 | | + +`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `official_verify`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|------|------------------------------| +| type | num | 是否认证 | -1:无
0:个人认证
1:机构认证 | +| desc | str | 认证备注 | | + +`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `nameplate`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------------|-----|---------|-----| +| nid | num | 勋章id | | +| name | str | 勋章名称 | | +| image | str | 勋章图标 | | +| image_small | str | 勋章图标(小) | | +| level | str | 勋章等级 | | +| condition | str | 获取条件 | | + +`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `vip`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------------------|-----|------------|---------------------------------| +| type | num | 大会员类型 | 0:无
1:月大会员
2:年度及以上大会员 | +| status | num | 大会员状态 | 0:无
1:有 | +| due_date | num | 大会员过期时间时间戳 | 单位:毫秒 | +| vip_pay_type | num | 支付类型 | | +| theme_type | num | `0` | | +| label | obj | 大会员标签 | | +| avatar_subscript | num | 是否显示大会员图标 | 0:不显示
1:显示 | +| nickname_color | str | 大会员昵称颜色 | | + +`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `vip`对象 -> `label`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------------|-----|--------|------------------------------------------------------------------------------------------------------------------------------| +| path | str | `空串` | | +| text | str | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` | +| label_theme | str | 会员标签 | vip:大会员
annual_vip:年度大会员
ten_annual_vip:十年大会员
hundred_annual_vip:百年大会员
fools_day_hundred_annual_vip:最强绿鲤鱼 | + +`data`对象 -> `articles`数组中的对象 -> `stats`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------|-----|-----|-------| +| view | num | 浏览数 | | +| favorite | num | 收藏数 | | +| like | num | 点赞数 | | +| dislike | num | 点踩数 | 恒为`0` | +| reply | num | 回复数 | | +| share | num | 转发数 | | +| coin | num | 投币数 | | +| dynamic | num | | | + +`data`对象 -> `articles`数组中的对象 -> `tags`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|------|-----| +| tid | num | 标签id | | +| name | str | 标签名称 | | + +`data`对象 -> `articles`数组中的对象 -> `media`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-----------|-----|------|-----| +| score | num | `0` | | +| media_id | num | `0` | | +| title | str | `空串` | | +| cover | str | `空串` | | +| area | str | `空串` | | +| type_id | num | `0` | | +| type_name | str | `空串` | | +| spoiler | num | `0` | | + +**示例:** + +```shell +curl -L -X GET 'https://api.bilibili.com/x/space/article?mid=300021061&pn=1&ps=2&sort=publish_time' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "articles": [ + { + "id": 18989884, + "category": { + "id": 15, + "parent_id": 3, + "name": "日常" + }, + "categories": [ + { + "id": 3, + "parent_id": 0, + "name": "生活" + }, + { + "id": 15, + "parent_id": 3, + "name": "日常" + } + ], + "title": "B站UP主日报2022年10月08日23点(v1.1)", + "summary": "冠:罗翔说刑法(2485.45万粉,+7204) 涨:肯德基(+18.37万粉) 掉:Overidea_China(-186850粉) 播:开心锤锤(+927.56万) 赞:荒草音乐(+31.02万) 赞:飞翔的丘丘人(+22.08万) 充:冰糖IO(+210)", + "banner_url": "https://i0.hdslb.com/bfs/article/5e53260f58f77fff0b8ba6b20179db85b8741b76.jpg", + "template_id": 4, + "state": 0, + "author": { + "mid": 300021061, + "name": "狸工智能", + "face": "https://i1.hdslb.com/bfs/face/4cba9bc9d6cf6935a37ec156dedb8f8d26c1df95.jpg", + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0 + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "nameplate": { + "nid": 3, + "name": "白银殿堂", + "image": "https://i2.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png", + "image_small": "https://i2.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png", + "level": "高级勋章", + "condition": "单个自制视频总播放数>=10万" + }, + "vip": { + "type": 0, + "status": 0, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + } + }, + "reprint": 0, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/8e5497f7854e7df3468fbc29b0dd10fcf17d1223.png" + ], + "publish_time": 1665278884, + "ctime": 1665278884, + "stats": { + "view": 689, + "favorite": 2, + "like": 61, + "dislike": 0, + "reply": 18, + "share": 0, + "coin": 1, + "dynamic": 0 + }, + "words": 0, + "dynamic": "狸子的UP主日报📰v1.1,每天稳定更新~(如果咕咕咕了,请艾特狸子LePtC检查狐务器 [tv_微笑] #排行榜##大数据##狸工智能#", + "origin_image_urls": [ + "https://i0.hdslb.com/bfs/article/5e53260f58f77fff0b8ba6b20179db85b8741b76.jpg" + ], + "list": null, + "is_like": false, + "media": { + "score": 0, + "media_id": 0, + "title": "", + "cover": "", + "area": "", + "type_id": 0, + "type_name": "", + "spoiler": 0 + }, + "apply_time": "", + "check_time": "", + "original": 1, + "act_id": 0, + "dispute": null, + "authenMark": null, + "cover_avid": 0, + "top_video_info": null, + "type": 0 + }, + { + "id": 18972446, + "category": { + "id": 15, + "parent_id": 3, + "name": "日常" + }, + "categories": [ + { + "id": 3, + "parent_id": 0, + "name": "生活" + }, + { + "id": 15, + "parent_id": 3, + "name": "日常" + } + ], + "title": "B站UP主日报2022年10月07日23点(v1.1)", + "summary": "冠:罗翔说刑法(2484.73万粉,+8020) 涨:靖菌命(+3.61万粉) 掉:Overidea_China(-8593粉) 播:开心锤锤(+971.44万) 赞:荒草音乐(+53.14万) 赞:南方都市报(+18.05万) 充:内德维德(+190)", + "banner_url": "https://i0.hdslb.com/bfs/article/5e53260f58f77fff0b8ba6b20179db85b8741b76.jpg", + "template_id": 4, + "state": 0, + "author": { + "mid": 300021061, + "name": "狸工智能", + "face": "https://i1.hdslb.com/bfs/face/4cba9bc9d6cf6935a37ec156dedb8f8d26c1df95.jpg", + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0 + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "nameplate": { + "nid": 3, + "name": "白银殿堂", + "image": "https://i2.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png", + "image_small": "https://i2.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png", + "level": "高级勋章", + "condition": "单个自制视频总播放数>=10万" + }, + "vip": { + "type": 0, + "status": 0, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "" + }, + "avatar_subscript": 0, + "nickname_color": "" + } + }, + "reprint": 0, + "image_urls": [ + "https://i0.hdslb.com/bfs/article/8e5497f7854e7df3468fbc29b0dd10fcf17d1223.png" + ], + "publish_time": 1665189149, + "ctime": 1665189149, + "stats": { + "view": 1021, + "favorite": 1, + "like": 66, + "dislike": 0, + "reply": 21, + "share": 2, + "coin": 2, + "dynamic": 0 + }, + "tags": [ + { + "tid": 1598, + "name": "粉丝" + }, + { + "tid": 422982, + "name": "狸子" + }, + { + "tid": 526616, + "name": "大数据" + }, + { + "tid": 14082112, + "name": "狸工智能" + }, + { + "tid": 438, + "name": "排行榜" + } + ], + "words": 0, + "dynamic": "狸子的UP主日报📰v1.1,每天稳定更新~(如果咕咕咕了,请艾特狸子LePtC检查狐务器 [tv_微笑] #排行榜##大数据##狸工智能#", + "origin_image_urls": [ + "https://i0.hdslb.com/bfs/article/5e53260f58f77fff0b8ba6b20179db85b8741b76.jpg" + ], + "list": null, + "is_like": false, + "media": { + "score": 0, + "media_id": 0, + "title": "", + "cover": "", + "area": "", + "type_id": 0, + "type_name": "", + "spoiler": 0 + }, + "apply_time": "", + "check_time": "", + "original": 1, + "act_id": 0, + "dispute": null, + "authenMark": null, + "cover_avid": 0, + "top_video_info": null, + "type": 0 + } + ], + "pn": 1, + "ps": 2, + "count": 1563 + } +} +``` + +
+ +### 查询用户专栏文集明细 + +> https://api.bilibili.com/x/article/up/lists + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|-------|-----|-------------------| +| mid | num | 用户uid | √ | | +| sort | num | 排序方式 | | 0:最近更新
1:最多阅读 | +| jsonp | str | | | | +| callback | str | | | | + +**json回复:** + +根对象 + +| 字段名 | 类型 | 内容 | 备注 | +|---------|-----|------|--------------------| +| code | num | 响应码 | 0:成功
-400:请求错误 | +| message | str | 0 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象 + +| 字段名 | 类型 | 内容 | 备注 | +|-------|-------|--------|-----| +| lists | array | 文集信息列表 | | +| total | num | 文集总数 | | + +`data`对象 -> `lists`数组中的对象 + +| 字段名 | 类型 | 内容 | 备注 | +|----------------|-----|---------|------| +| id | num | 文集id | | +| mid | num | 作者uid | | +| name | str | 文集名称 | | +| image_url | str | 封面 | | +| update_time | num | 最后更新时间戳 | 单位:秒 | +| ctime | num | 创建时间戳 | 单位:秒 | +| publish_time | num | | 单位:秒 | +| summary | str | `空串` | | +| words | num | 总字数 | | +| read | num | 阅读量 | | +| articles_count | num | 包含文章数 | | +| state | num | `1` | | +| reason | str | `空串` | | +| apply_time | str | `空串` | | +| check_time | str | `空串` | | + +**示例:** + +```shell +curl -X GET 'https://api.bilibili.com/x/article/up/lists' \ + --data-urlencode 'mid=2859372' \ + --data-urlencode 'sort=0' +``` + +
+点击查看 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "lists": [ + { + "id": 77163, + "mid": 2859372, + "name": "碟报", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1664854854, + "ctime": 1554785697, + "publish_time": 1664863200, + "summary": "", + "words": 71532, + "read": 478726, + "articles_count": 113, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + { + "id": 26407, + "mid": 2859372, + "name": "周榜", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1664721205, + "ctime": 1537942450, + "publish_time": 1664721307, + "summary": "", + "words": 102099, + "read": 1366280, + "articles_count": 206, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + { + "id": 107952, + "mid": 2859372, + "name": "制作委员会", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1646663919, + "ctime": 1563107348, + "publish_time": 1646910000, + "summary": "", + "words": 47564, + "read": 72911, + "articles_count": 10, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + { + "id": 26457, + "mid": 2859372, + "name": "实时榜", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1603115712, + "ctime": 1537955117, + "publish_time": 1603115719, + "summary": "", + "words": 206741, + "read": 1136352, + "articles_count": 76, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + { + "id": 49769, + "mid": 2859372, + "name": "预测", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1593933314, + "ctime": 1546153226, + "publish_time": 1593933314, + "summary": "", + "words": 2518, + "read": 55123, + "articles_count": 6, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + { + "id": 96916, + "mid": 2859372, + "name": "书籍周榜", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1559815260, + "ctime": 1559815159, + "publish_time": 1559815577, + "summary": "", + "words": 272, + "read": 2955, + "articles_count": 1, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + { + "id": 96610, + "mid": 2859372, + "name": "原始周榜存档", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1559721231, + "ctime": 1559720762, + "publish_time": 1559721271, + "summary": "", + "words": 290, + "read": 1498, + "articles_count": 1, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + { + "id": 26453, + "mid": 2859372, + "name": "杂谈", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1557303117, + "ctime": 1537954625, + "publish_time": 1557303168, + "summary": "", + "words": 10673, + "read": 38363, + "articles_count": 4, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + }, + { + "id": 59028, + "mid": 2859372, + "name": "新春访谈", + "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png", + "update_time": 1549878596, + "ctime": 1549343048, + "publish_time": 1549884125, + "summary": "", + "words": 33472, + "read": 34597, + "articles_count": 13, + "state": 1, + "reason": "", + "apply_time": "", + "check_time": "" + } + ], + "total": 9 + } +} +``` + +
+ +### 查询用户投稿音频明细 + +> https://api.bilibili.com/audio/music-service/web/song/upper + +*请求方法: GET* + + + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| mid | num | 用户 mid | 必要 | | +| pn | num | 页码 | 必要 | 默认为 1 | +| ps | num | 每页项数 | 必要 | 默认为 30 | +| order | str | 排序方式 | 必要 | 1: 最新发布
2: 最多播放
3: 最多收藏 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0: 成功
72000000: 缺少参数 | +| msg | str | 返回信息 | 成功为 `success` | +| data | str | 数据本体 | 失败时不存在 | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| curPage | num | 当前页码 | | +| pageCount | num | 总页数 | | +| totalSize | num | 总计数 | | +| pageSize | num | 每页项数 | | +| data | array | 音频列表 | | + +`data` 对象中的 `data` 数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| id | num | 音频 AU 号 | | +| uid | num | 用户 mid | | +| uname | str | 用户名 | | +| author | null | | | +| title | str | 音频标题 | | +| cover | str | 音频封面图片 URL | | +| intro | null | | | +| lyric | str | 音频歌词 URL | | +| crtype | num | 1 | | +| duration | num | 音频时长 | 单位为 秒 | +| passtime | num | 发布时间 | UNIX 秒级时间戳 | +| curtime | num | 0 | | +| aid | null | | | +| cid | null | | | +| msid | null | | | +| attr | null | | | +| limit | null | | | +| activityId | null | | | +| limitdesc | null | | | +| ctime | num | 发布时间 | UNIX 毫秒时间戳 | +| statistic | obj | 统计数 | | +| coin_num | num | 硬币数量 | | +| is_cooper | null | | | + +`data` 数组中的对象中的 `statistic` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| sid | num | 音频 AU 号 | | +| play | num | 播放数 | | +| collect | num | 收藏数 | | +| comment | num | 评论数 | | +| share | num | 分享数 | | + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/audio/music-service/web/song/upper' \ +--url-query 'uid=8047632' \ +--url-query 'pn=1' \ +--url-query 'ps=30' \ +--url-query 'order=2' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "success", + "data": { + "curPage": 1, + "pageCount": 1, + "totalSize": 2, + "pageSize": 30, + "data": [ + { + "id": 257709, + "uid": 8047632, + "uname": "哔哩哔哩弹幕网", + "author": null, + "title": "【2018拜年祭单品】与你同行~B With U~", + "cover": "http://i0.hdslb.com/bfs/music/0f890889c8e1101f37317def0c4c555068054c88.jpg", + "intro": null, + "lyric": "http://i0.hdslb.com/bfs/music/1519959250257709.lrc", + "crtype": 1, + "duration": 301, + "passtime": 1519878405, + "curtime": 0, + "aid": null, + "cid": null, + "msid": null, + "attr": null, + "limit": null, + "activityId": null, + "limitdesc": null, + "ctime": 1519875632000, + "statistic": { + "sid": 257709, + "play": 845264, + "collect": 21978, + "comment": 1983, + "share": 1685 + }, + "coin_num": 13368, + "is_cooper": null + }, + { + "id": 378521, + "uid": 8047632, + "uname": "哔哩哔哩弹幕网", + "author": null, + "title": "《B TOGETHER》-bilibili九周年主题曲", + "cover": "http://i0.hdslb.com/bfs/music/109136c63e16d83fbad5ec9282a6fb96498d8144.jpg", + "intro": null, + "lyric": "http://i0.hdslb.com/bfs/music/1529979007378521.lrc", + "crtype": 1, + "duration": 261, + "passtime": 1529928347, + "curtime": 0, + "aid": null, + "cid": null, + "msid": null, + "attr": null, + "limit": null, + "activityId": null, + "limitdesc": null, + "ctime": 1529928235000, + "statistic": { + "sid": 378521, + "play": 123264, + "collect": 5501, + "comment": 1591, + "share": 535 + }, + "coin_num": 3640, + "is_cooper": null + } + ] + } +} +``` + +
+ +## 频道 + + + +[所有旧接口](https://github.com/SocialSisterYi/bilibili-API-collect/blob/7d89ece2ac46425810647c4ac92acf5f3721cb68/docs/user/space.md#%E9%A2%91%E9%81%93) 已弃用, 现可用接口参见 [合集和视频列表信息](../video/collection.md) + +## 课程 + + + +### 查询用户发布的课程列表 + +> https://api.bilibili.com/pugv/app/web/season/page + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | -------- | +| mid | num | 目标用户mid | 必要 | | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | 默认为20 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
53013:用户隐私设置未公开 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------- | ---- | +| list | array | 课程列表 | | +| page | obj | 页面信息 | | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------------- | ------------------------------------- | +| next | bool | 是否存在下一页 | false:最后一页
true:存在下一页 | +| num | num | 当前页码 | | +| size | num | 每页项数 | | +| total | num | 总计项数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | -------------------------- | +| 0 | obj | 课程1 | | +| n | obj | 课程(n+1) | 按照目标用户的发布顺序排列 | +| …… | obj | …… | | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ------------- | +| cover | str | 课程封面url | | +| ep_count | num | 课程集数 | | +| link | str | 课程页面url | 手机版页面url | +| page | num | 1 | 作用尚不明确 | +| play | num | 课程播放数 | | +| season_id | num | 课程ssid | | +| status | str | 更新状态说明 | | +| subtitle | str | 课程副标题 | | +| title | str | 课程标题 | | + +**示例:** + +查询用户`mid=33683045`的课程发布列表 + +```shell +curl -G 'https://api.bilibili.com/pugv/app/web/season/page' \ +--data-urlencode 'mid=33683045' \ +--data-urlencode 'ps=5' \ +--data-urlencode 'pn=1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "items": [ + { + "cover": "http://i0.hdslb.com/bfs/archive/596575057885fff7f0ceff047437186cba459358.jpg", + "ep_count": 10, + "link": "https://m.bilibili.com/cheese/play/ss80", + "page": 1, + "play": 174467, + "season_id": 80, + "status": "共10期", + "subtitle": "百科全书式军事科普短视频系列", + "title": "《战忽知道》第一季" + }, + { + "cover": "http://i0.hdslb.com/bfs/archive/322aa94d27cece62d2a859caf71ac2426f29eee2.jpg", + "ep_count": 1, + "link": "https://m.bilibili.com/cheese/play/ss145", + "page": 1, + "play": 22155, + "season_id": 145, + "status": "更新至第1期", + "subtitle": "此课程为《局座:第四次工业革命来了》部分集数,请谨慎购买", + "title": "【体验课】局座讲5G:5G如何改变我们的生活?" + }, + { + "cover": "http://i0.hdslb.com/bfs/archive/b9794ac4507f8764e219df413b661b5faf499a19.jpg", + "ep_count": 10, + "link": "https://m.bilibili.com/cheese/play/ss113", + "page": 1, + "play": 49833, + "season_id": 113, + "status": "更新至第10期", + "subtitle": "百科全书式军事科普短视频系列", + "title": "《战忽知道》第二季" + }, + { + "cover": "http://i0.hdslb.com/bfs/archive/7351fcb33592a4bc7aac9f71d421b4b5ce0177d3.jpg", + "ep_count": 10, + "link": "https://m.bilibili.com/cheese/play/ss51", + "page": 1, + "play": 4981037, + "season_id": 51, + "status": "共10期", + "subtitle": "洞悉国际局势,学习战略思维", + "title": "局座的国际战略课" + }, + { + "cover": "http://i0.hdslb.com/bfs/archive/31e2a170b5a815e34f0537a2727b28f1b87dca18.jpg", + "ep_count": 10, + "link": "https://m.bilibili.com/cheese/play/ss121", + "page": 1, + "play": 30754, + "season_id": 121, + "status": "更新至第10期", + "subtitle": "百科全书式军事科普短视频系列", + "title": "《战忽知道》第三季" + } + ], + "page": { + "next": true, + "num": 1, + "size": 5, + "total": 8 + } + }, + "message": "success" +} +``` + +
+ +## 订阅 + + + +### 查询用户追番预览列表 + +> http://space.bilibili.com/ajax/Bangumi/getList + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 + +带有转义,且只能获取最多15条 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ------------------------ | ---------------------------------- | --------------------------- | +| status | bool | 状态 | false:失败
true:成功 | +| data | 失败:str
成功:obj | 失败:错误信息
成功:信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ------------ | ------------ | +| count | num | 总计追番数 | | +| pages | num | 0 | 作用尚不明确 | +| result | array | 追番预览列表 | | + +`data`中的`result`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | -------------------------- | +| 0 | obj | 追番1 | | +| n | obj | 追番(n+1) | 按照目标用户的关注顺序排列 | +| …… | obj | …… | | +| 14 | obj | 追番15 | 最后一项 | + +`data`中的`result`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | --------------- | --------------------------------- | +| brief | str | 简介 | | +| cover | str | 封面图片url | | +| evaluate | str | 空 | | +| favorites | num | 追番数 | | +| is_finish | num | 是否已完结 | 0:未完结
1:已完结 | +| last_ep_index | num | 0 | 作用尚不明确 | +| newest_ep_index | num | 最新一话 | 可能为0 | +| season_id | str | 番剧ssid | | +| share_url | str | 播放页面链接url | | +| title | str | 标题 | | +| total_count | num | 总计集数 | 未完结:-1
已完结:非0正整数 | + +**示例:** + +查看用户`mid=14082`的追番预览列表 + +```shell +curl -G 'http://space.bilibili.com/ajax/Bangumi/getList' \ +--data-urlencode 'mid=14082' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "status": true, + "data": { + "count": 25, + "pages": 0, + "result": [{ + "season_id": "29310", + "share_url": "http:\/\/bangumi.bilibili.com\/anime\/29310\/", + "title": "异度侵入 ID:INVADED", + "is_finish": 1, + "favorites": 3479220, + "newest_ep_index": 13, + "last_ep_index": 0, + "total_count": 13, + "cover": "http:\/\/i0.hdslb.com\/bfs\/bangumi\/image\/9bf9e66968f85b33ec3769a16c86b36dc984abbc.png", + "evaluate": "", + "brief": "本片讲述利用能检测出人们杀意的装置以及利用思想粒子做出的“井”,来探知事件真相的科幻故事。" + }, { + "season_id": "25739", + "share_url": "http:\/\/bangumi.bilibili.com\/anime\/25739\/", + "title": "关于我转生变成史莱姆这档事", + "is_finish": 1, + "favorites": 5518829, + "newest_ep_index": 0, + "last_ep_index": 0, + "total_count": 27, + "cover": "http:\/\/i0.hdslb.com\/bfs\/bangumi\/a4c0e0ccc44fe3949a734f546cf5bb07da925bad.png", + "evaluate": "", + "brief": "史莱姆生活,开始了。\n上班族的三上悟在道路上被歹徒给刺杀身亡后,回过神来发现自己转生到了异世界。\n不..." + }, + ………… + ] + } +} +``` + +
+ +### 查询用户追番(追剧)明细 + +> https://api.bilibili.com/x/space/bangumi/follow/list + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | -------------------- | +| vmid | num | 目标用户mid | 必要 | | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | 默认为15 定义域1-30 | +| type | num | 查询类型 | 必要 | 1:追番
2:追剧 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
53013:用户隐私设置未公开 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | ---------- | ---- | +| list | array | 追番列表 | | +| pn | num | 当前页码 | | +| ps | num | 每页项数 | | +| total | num | 总计追番数 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | -------------------------- | +| 0 | obj | 追番1 | | +| n | obj | 追番(n+1) | 按照目标用户的关注顺序排列 | +| …… | obj | …… | | + +`data`中的`list`数组中的对象: + +基本同「番剧详细信息」中的result对象(未完工) + +**示例:** + +查看用户`mid=14082`的追番明细 + +```shell +curl -G 'https://api.bilibili.com/x/space/bangumi/follow/list' \ +--data-urlencode 'vmid=14082' \ +--data-urlencode 'type=1' \ +--data-urlencode 'ps=2' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [{ + "season_id": 29310, + "media_id": 28224080, + "season_type": 1, + "season_type_name": "番剧", + "title": "异度侵入 ID:INVADED", + "cover": "http://i0.hdslb.com/bfs/bangumi/image/9bf9e66968f85b33ec3769a16c86b36dc984abbc.png", + "total_count": 13, + "is_finish": 1, + "is_started": 1, + "is_play": 1, + "badge": "会员专享", + "badge_type": 0, + "rights": { + "allow_review": 1, + "is_selection": 1, + "selection_style": 1 + }, + "stat": { + "follow": 3475768, + "view": 87500861, + "danmaku": 1334654, + "reply": 316632, + "coin": 835150, + "series_follow": 3475242, + "series_view": 87500861 + }, + "new_ep": { + "id": 307774, + "index_show": "全13话", + "cover": "http://i0.hdslb.com/bfs/archive/3dce2b856a7b0ea667aa288b51b7c0478fa56c4d.jpg", + "title": "13", + "long_title": "CHANNELEDⅡ", + "pub_time": "2020-03-23 00:30:00", + "duration": 1481000 + }, + "rating": { + "score": 9.8, + "count": 262589 + }, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/664dbf039ec2da8dd982b697a108e28e87b9897e.jpg", + "season_status": 13, + "season_title": "TV", + "badge_ep": "会员", + "media_attr": 196608, + "season_attr": 0, + "evaluate": "本片讲述利用能检测出人们杀意的装置以及利用思想粒子做出的“井”,来探知事件真相的科幻故事。...", + "areas": [{ + "id": 2, + "name": "日本" + }], + "subtitle": "", + "first_ep": 307446, + "can_watch": 1, + "series": { + "series_id": 4760, + "title": "ID:INVADED", + "season_count": 1, + "new_season_id": 29310 + }, + "publish": { + "pub_time": "2020-01-06 00:30:00", + "pub_time_show": "敬请期待", + "release_date": "2020-01-06", + "release_date_show": "2020年1月6日" + }, + "mode": 2, + "section": [{ + "section_id": 39327, + "season_id": 29310, + "limit_group": 328, + "watch_platform": 15, + "copyright": "dujia", + "ban_area_show": 1 + }, { + "section_id": 39633, + "season_id": 29310, + "limit_group": 328, + "watch_platform": 15, + "type": 1, + "copyright": "dujia", + "title": "其他", + "ban_area_show": 1 + }, { + "section_id": 44101, + "season_id": 29310, + "limit_group": 316, + "watch_platform": 15, + "type": 4, + "copyright": "ugc", + "ban_area_show": 1 + }], + "url": "https://www.bilibili.com/bangumi/play/ss29310", + "follow_status": 2, + "is_new": 0, + "progress": "", + "both_follow": true + }, { + "season_id": 25739, + "media_id": 139252, + "season_type": 1, + "season_type_name": "番剧", + "title": "关于我转生变成史莱姆这档事", + "cover": "http://i0.hdslb.com/bfs/bangumi/a4c0e0ccc44fe3949a734f546cf5bb07da925bad.png", + "total_count": 27, + "is_finish": 1, + "is_started": 1, + "is_play": 1, + "badge": "会员专享", + "badge_type": 0, + "rights": { + "allow_review": 1, + "is_selection": 1, + "selection_style": 1 + }, + "stat": { + "follow": 5516519, + "view": 246739631, + "danmaku": 3802465, + "reply": 460225, + "coin": 1338958, + "series_follow": 5516535, + "series_view": 246739631 + }, + "new_ep": { + "id": 316957, + "index_show": "全27话", + "cover": "http://i0.hdslb.com/bfs/archive/81d07d1a478ce3a6209b557e14df9b9c78c42abb.jpg", + "title": "OAD03", + "long_title": "外传:利姆鲁的华丽教师生活 其一", + "pub_time": "2020-03-27 00:00:03", + "duration": 1493000 + }, + "rating": { + "score": 9.4, + "count": 83354 + }, + "square_cover": "http://i0.hdslb.com/bfs/bangumi/8d9f5b4a566d0547bc2e3f6f733b732a09c0d3d4.jpg", + "season_status": 13, + "season_title": "TV", + "badge_ep": "会员", + "media_attr": 0, + "season_attr": 0, + "evaluate": "史莱姆生活,开始了。\n上班族的三上悟在道路上被歹徒给刺杀身亡后,回过神来发现自己转生到了异世界。\n不过,自己居然是“史莱姆”!\n他在得到利姆鲁这个名字后开始了自己的史莱姆人生,随着与各个种族相处交流的...", + "areas": [{ + "id": 2, + "name": "日本" + }], + "subtitle": "", + "first_ep": 250460, + "can_watch": 1, + "series": { + "series_id": 4188, + "title": "关于我转生变成史莱姆这档事", + "season_count": 1, + "new_season_id": 25739 + }, + "publish": { + "pub_time": "2018-10-02 00:30:00", + "pub_time_show": "2018年10月02日00:30", + "release_date": "2018-10-02", + "release_date_show": "2018年10月2日" + }, + "mode": 2, + "section": [{ + "section_id": 34988, + "season_id": 25739, + "limit_group": 328, + "watch_platform": 15, + "copyright": "bilibili", + "ban_area_show": 1 + }], + "url": "https://www.bilibili.com/bangumi/play/ss25739", + "follow_status": 2, + "is_new": 0, + "progress": "", + "both_follow": true + }], + "pn": 1, + "ps": 2, + "total": 25 + } +} +``` + +
+ +### 查询用户关注的TAG(话题) + +> http://space.bilibili.com/ajax/tags/getSubList + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 + +带有转义 + +只显示前100个 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---------------------------- | -------------------------------------- | --------------------------- | +| status | bool | 返回值 | false:错误
true:正确 | +| data | 错误时:str
正确时:obj | 错误时:错误信息
正确时:数据本体 | 正确时不返回错误信息 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | ----------- | ---- | +| tags | array | 关注TAG列表 | | +| count | num | 关注TAG的数 | | + +`data`中的`tags`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | -------- | +| 0 | obj | 关注TAG1 | | +| n | obj | 关注TAG(n+1) | | +| …… | obj | …… | …… | +| 99 | obj | 关注TAG100 | 最后一项 | + +`data`中的`tags`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------- | ------------ | +| archive_count | num | 0 | 作用尚不明确 | +| cover | str | TAG图片url | 无则为空 | +| name | str | TAG名 | | +| notify | num | 1 | 作用尚不明确 | +| tag_id | num | tag_id | | +| updated_ts | str | 1970-01-01 08:00:00 | 作用尚不明确 | + +**示例:** + +查询用户`mid=2`的关注TAG + +```shell +curl -G 'http://space.bilibili.com/ajax/tags/getSubList' \ +--data-urlencode 'mid=2' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "status": true, + "data": { + "tags": [{ + "name": "豪宅", + "cover": "", + "tag_id": 47637, + "notify": 1, + "archive_count": 0, + "updated_ts": "1970-01-01 08:00:00" + }, { + "name": "死亡搁浅", + "cover": "", + "tag_id": 1737239, + "notify": 1, + "archive_count": 0, + "updated_ts": "1970-01-01 08:00:00" + }, + ………… + ], + "count": 58 + } +} +``` + +
diff --git a/docs/user/status_number.md b/docs/user/status_number.md new file mode 100644 index 0000000..e33ac45 --- /dev/null +++ b/docs/user/status_number.md @@ -0,0 +1,305 @@ +# 用户状态数 + +## 关系状态数 +> https://api.bilibili.com/x/relation/stat + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| vmid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ----------- | ----------------------------------------------- | +| mid | num | 目标用户mid | | +| following | num | 关注数 | | +| whisper | num | 悄悄关注数 | 需要登录(Cookie或APP)
未登录或非自己恒为0 | +| black | num | 黑名单数 | 需要登录(Cookie或APP)
未登录或非自己恒为0 | +| follower | num | 粉丝数 | | + +**示例:** + +查询用户`mid=332704117`的关系状态数 + +```shell +curl -G 'https://api.bilibili.com/x/relation/stat' \ +--data-urlencode 'vmid=332704117' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 332704117, + "following": 32, + "whisper": 0, + "black": 0, + "follower": 919515 + } +} +``` + +
+ +## UP主状态数 + +> https://api.bilibili.com/x/space/upstat + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +注:该接口需要**任意用户**登录,否则**不会返回任何数据** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | ---------- | ----- | +| archive | obj | 视频播放量 | | +| article | obj | 专栏阅读量 | | +| likes | num | 获赞次数 | | + +`data`中的`archive`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | ---------- | ----- | +| view | num | 视频播放量 | | + +`data`中的`article`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | ---------- | ----- | +| view | num | 专栏阅读量 | | + +**示例:** + +查询用户`mid=456664753`的UP主状态数 + +```shell +curl -G 'https://api.bilibili.com/x/space/upstat' \ +--data-urlencode 'mid=456664753' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "archive": { + "view": 213567370 + }, + "article": { + "view": 3230808 + }, + "likes": 20295095 + } +} +``` + +
+ +## 用户导航栏状态数 + +> https://api.bilibili.com/x/space/navnum + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | +| web_location | str | 333.999 | 不必要 || + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ---------- | ------------ | +| video | num | 投稿视频数 | | +| bangumi | num | 追番数 | 无视隐私设置 | +| cinema | num | 追剧数 | 无视隐私设置 | +| channel | obj | 视频列表数 | | +| favourite | obj | 收藏夹数 | | +| tag | num | 关注TAG数 | 无视隐私设置 | +| article | num | 投稿专栏数 | | +| playlist | num | 0 | 作用尚不明确 | +| album | num | 投稿图文数 | | +| audio | num | 投稿音频数 | | +| pugv | num | 投稿课程数 | | +| upos | num | 动态数 | | +| season_num | num | 视频合集数 | | + +`data`中的`channel`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | ---------- | ------------ | +| master | num | 视频列表数 | | +| guest | num | 视频列表数 | | + +`data`中的`favourite`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | --------------------------------------- | +| master | num | 全部收藏夹数 | 需要登录(SESSDATA)
只能查看自己的 | +| guest | num | 公开收藏夹数 | | + +**示例:** + +查询用户`mid=645769214`的订阅&投稿状态数 + +```shell +curl -G 'https://api.bilibili.com/x/space/navnum' \ +--data-urlencode 'mid=645769214' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "video": 34, + "bangumi": 1, + "cinema": 0, + "channel": { + "master": 5, + "guest": 5 + }, + "favourite": { + "master": 0, + "guest": 0 + }, + "tag": 0, + "article": 1, + "playlist": 0, + "album": 59, + "audio": 0, + "pugv": 0, + "season_num": 1, + "opus": 59 + } +} +``` + +
+ +## 相簿投稿数 + +> https://api.vc.bilibili.com/link_draw/v1/doc/upload_count + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| uid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------- | +| code | num | 返回值 | 0:成功 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------------- | ------------------ | +| all_count | num | 相簿总数 | 总数为以下三者之和 | +| draw_count | num | 发布绘画数 | | +| photo_count | num | 发布摄影数 | | +| daily_count | num | 发布日常(图片动态)数 | | + +**示例:** + + 查询用户`mid=53456`的投稿相簿数 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/upload_count' \ +--data-urlencode 'uid=53456' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "msg":"success", + "message":"success", + "data":{ + "all_count":92, + "draw_count":5, + "photo_count":0, + "daily_count":87 + } +} +``` + +
diff --git a/docs/video/action.md b/docs/video/action.md new file mode 100644 index 0000000..c6ecb1a --- /dev/null +++ b/docs/video/action.md @@ -0,0 +1,893 @@ +# 稿件观众操作 + +## 点赞 + + + +### 点赞视频(web端) + +> https://api.bilibili.com/x/web-interface/archive/like + +*请求方式:POST* + +认证方式:仅可Cookie(SESSDATA) + +需验证 Cookie 中`buvid3`字段存在且正常, 否则将导致触发风控 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------- | ------------ | ---------------------- | +| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 | +| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 | +| like | num | 操作方式 | 必要 | 1:点赞
2:取消赞 | +| csrf | str | CSRF Token(位于 Cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-403: 账号异常
10003:不存在该稿件
65004:取消点赞失败
65006:重复点赞 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +点赞视频`av79677524`/`BV1uJ411r7hL` + +avid方式: + +```shell +curl 'https://api.bilibili.com/x/web-interface/archive/like' \ +--data-urlencode 'aid=79677524' \ +--data-urlencode 'like=1' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl 'https://api.bilibili.com/x/web-interface/archive/like' \ +--data-urlencode 'bvid=BV1uJ411r7hL' \ +--data-urlencode 'like=1' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 点赞视频(APP端) + +> https://app.bilibili.com/x/v2/view/like + +*请求方式:POST* + +认证方式:仅可APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| aid | num | 稿件 avid | 必要 | | +| like | num | 操作方式 | 必要 | 0:点赞
1:取消赞 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
-403: 账号异常
10003:不存在该稿件 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | ---- | +| toast | str | 提示信息内容 | | + +**示例:** + +点赞视频`av79677524` + +```shell +curl 'https://app.bilibili.com/x/v2/view/like' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'aid=79677524' \ +--data-urlencode 'like=0' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "toast": "点赞收到!视频可能推荐哦" + } +} +``` + +
+ +### 判断视频近期是否被点赞(双端) + +> https://api.bilibili.com/x/web-interface/archive/has/like + +*请求方式:GET* + +认证方式:APP或Cookie(SESSDATA) + +注: 这一 API 实际上只能判断出视频**在近期内**是否被点赞, 并不能判断出视频是否被点赞. +「近期」的定义不明, 但至少半年前点赞过的视频, 用这一接口获取到的结果就已经是 `0` 了. 参见 [#380](https://github.com/SocialSisterYi/bilibili-API-collect/issues/380). + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | --------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 | +| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | num | 被点赞标志 | 0:未点赞
1:已点赞 | + +**示例:** + +视频`av39330059`/`BV1Bt411z799`的状态为已点赞 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/has/like' \ +--data-urlencode 'aid=39330059' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/has/like' \ +--data-urlencode 'bvid=BV1Bt411z799' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": 1 +} +``` + +
+ +## 点踩 + +### 点踩视频(App端) + +> https://app.biliapi.net/x/v2/view/dislike + +*请求方式:POST* + +认证方式:仅可App + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------ | ----------------------- | +| access_key | str | APP 登录 Token | 必要 | | +| aid | num | 视频 aid | 必要 | | +| dislike | num | 操作类型 | 必要 | 0:点踩
1:取消点踩 | + +**json回复:** + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
-404:啥都木有
65005:取消踩失败 未点踩过
65007:已踩过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +点踩视频 + +```shell +curl -L -X POST 'https://app.biliapi.net/x/v2/view/dislike' \ +-H 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'aid=xxx' \ +--data-urlencode 'dislike=0' +``` + +取消点踩 + +```shell +curl -L -X POST 'https://app.biliapi.net/x/v2/view/dislike' \ +-H 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'aid=xxx' \ +--data-urlencode 'dislike=1' +``` + +## 投币 + + + + +### 投币视频(web端) + +> https://api.bilibili.com/x/web-interface/coin/add + +*请求方式:POST* + +认证方式:仅可Cookie(SESSDATA) + +需验证 Cookie 中`buvid3`字段存在且正常, 否则将导致触发风控 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------------------------- | ------------ | --------------------------------------- | +| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 | +| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 | +| multiply | num | 投币数量 | 必要 | 上限为2 | +| select_like | num | 是否附加点赞 | 非必要 | 0:不点赞
1:同时点赞
默认为0 | +| csrf | str | CSRF Token(位于 Cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-104:硬币不足
-111:csrf校验失败
-400:请求错误
-403: 账号异常
10003:不存在该稿件
34002:不能给自己投币
34003:非法的投币数量
34004:投币间隔太短
34005:超过投币上限 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ----------------------------------------------------- | +| like | bool | 是否点赞成功 | true:成功
false:失败
已赞过则附加点赞失败 | + +**示例:** + +为视频`av90671873`/`BV1N7411A7wC`投币2枚 + +avid方式: + +```shell +curl 'https://api.bilibili.com/x/web-interface/coin/add' \ +--data-urlencode 'aid=90671873' \ +--data-urlencode 'select_like=1' \ +--data-urlencode 'multiply=2' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl 'https://api.bilibili.com/x/web-interface/coin/add' \ +--data-urlencode 'bvid=BV1N7411A7wC' \ +--data-urlencode 'select_like=1' \ +--data-urlencode 'multiply=2' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "like": true + } +} +``` + +
+ +### 投币视频(APP端) + +> https://app.bilibili.com/x/v2/view/coin/add + +*请求方式:POST* + +认证方式:仅可APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | -------------- | ------------ | --------------------------------------- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| aid | num | 稿件 avid | 必要 | | +| multiply | num | 投币数量 | 必要 | 上限为2 | +| select_like | num | 附加点赞 | 非必要 | 0:不点赞
1:同时点赞
默认为0 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-104:硬币不足
-400:请求错误
10003:不存在该稿件
34002:不能给自己投币
34003:非法的投币数量
34004:投币间隔太短
34005:超过投币上限 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ----------------------------------------------------- | +| like | bool | 是否点赞成功 | true:成功
false:失败
已赞过则附加点赞失败 | + +为视频`av90671873`投币2枚 + +```shell +curl 'https://app.bilibili.com/x/v2/view/coin/add' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'aid=90671873' \ +--data-urlencode 'select_like=1' \ +--data-urlencode 'multiply=2' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "like": true + } +} +``` + +
+ +### 判断视频是否被投币(双端) + +> https://api.bilibili.com/x/web-interface/archive/coins + +*请求方式:GET* + +认证方式:APP或Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | --------------------- | +| access_key | str | APP 登录 Token | APP方式必要 | | +| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 | +| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | --------- | +| multiply | num | 投币枚数 | 未投币为0 | + +**示例:** + +视频`av37896701`/`BV18t411q7zz`的投币数为2枚 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/coins' \ +--data-urlencode 'aid=37896701' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/coins' \ +--data-urlencode 'bvid=BV18t411q7zz' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "multiply": 2 + } +} +``` + +
+ +## 收藏 + + + +### 收藏视频(双端) + +> https://api.bilibili.com/medialist/gateway/coll/resource/deal + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +鉴权方式:Cookie方式时需要验证referer为 `.bilibili.com`域名下 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ------------------------ | -------------- | ------------------------------ | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| rid | num | 稿件 avid | 必要 | | +| type | num | 必须为2 | 必要 | | +| add_media_ids | nums | 需要加入的收藏夹 mlid | 必要(可选) | 同时添加多个,用`,`(%2C)分隔 | +| del_media_ids | nums | 需要取消的收藏夹 mlid | 必要(可选) | 同时取消多个,用`,`(%2C)分隔 | +| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-403:访问权限不足
10003:不存在该稿件
11010: 您访问的内容不存在
11201:已经收藏过了
11202:已经取消收藏了
11203:达到收藏上限
72010017:参数错误 | +| message | str | 错误信息 | 正确为success | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------------------- | ----------------------- | +| prompt | bool | 是否为未关注用户收藏 | false:否
true:是 | + +**示例:** + +将视频`av49166435`添加到收藏夹`49166435`中 + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/medialist/gateway/coll/resource/deal' \ +--data-urlencode 'rid=90671873' \ +--data-urlencode 'type=2' \ +--data-urlencode 'add_media_ids=49166435' \ +--data-urlencode 'del_media_ids=' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' \ +-e 'https://www.bilibili.com' +``` + +APP方式: + +```shell +curl 'https://api.bilibili.com/medialist/gateway/coll/resource/deal' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'rid=90671873' \ +--data-urlencode 'type=2' \ +--data-urlencode 'add_media_ids=49166435' \ +--data-urlencode 'del_media_ids=' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "prompt": false + }, + "message": "success" +} +``` + +
+ +### 收藏视频(Web端) + +> https://api.bilibili.com/x/v3/fav/resource/deal + +*请求方式: POST* + +认证方式: Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ---------------------------------- | ------------ | ------------------------------ | +| rid | num | 稿件 avid | 必要 | | +| type | num | 必须为2 | 必要 | | +| add_media_ids | nums | 需要加入的收藏夹 mlid | 必要(可选) | 同时添加多个,用`,`(%2C)分隔 | +| del_media_ids | nums | 需要取消的收藏夹 mlid | 必要(可选) | 同时取消多个,用`,`(%2C)分隔 | +| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 必要 | | +| platform | str | 平台标识? | 非必要 | web端: web | +| eab_x | num | 1 | 非必要 | 作用尚不明确 | +| ramval | num | 正整数 | 非必要 | 可能与在该页面的停留时间相关? | +| ga | num | 1 | 非必要 | 作用尚不明确 | +| gaia_source | str | ??? | 非必要 | web端: web_normal | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0: 成功
-101: 账号未登录
-111: csrf 校验失败
2001000: 参数错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 错误时为 null 或不存在 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | --------------------- | ----------------------- | +| prompt | bool | 是否为未关注用户收藏? | false:否
true:是 | +| ga_data | null | | 作用尚不明确 | +| toast_msg | str | 空 | 作用尚不明确 | +| success_num | num | 0 | 作用尚不明确 | + +**示例:** + +将视频 `av2` 添加到收藏夹 `645769214` 中 + +```shell +curl -X POST "https://api.bilibili.com/x/v3/fav/resource/deal" \ +--data-urlencode "rid=2" \ +--data-urlencode "type=2" \ +--data-urlencode "csrf=xxx" \ +--data-urlencode "add_media_ids=1428261914" \ +-b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "prompt": false, + "ga_data": null, + "toast_msg": "", + "success_num": 0 + } +} +``` + +
+ +### 判断视频是否被收藏(双端) + +> https://api.bilibili.com/x/v2/fav/video/favoured + +*请求方式:GET* + +认证方式:APP或Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---------- | --------------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| aid | num 或 str | 稿件 avid 或稿件 bvid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ------------------------------- | +| count | num | 1 | 作用尚不明确 | +| favoured | bool | 是否收藏 | true:已收藏
false:未收藏 | + +**示例:** + +视频`av46281123`/`BV1Bb411H7Dv`的状态为已收藏 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/v2/fav/video/favoured' \ +--data-urlencode 'aid=46281123' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/v2/fav/video/favoured' \ +--data-urlencode 'aid=BV1Bb411H7Dv' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 1, + "favoured": true + } +} +``` + +
+ +## 一键三连 + + + +### 一键三连视频(web端) + +> https://api.bilibili.com/x/web-interface/archive/like/triple + +*请求方式:POST* + +认证方式:仅可Cookie(SESSDATA) + +同时点赞投币收藏视频,收藏于默认收藏夹中 + +需验证 Cookie 中`buvid3`字段存在且正常, 否则将导致触发风控 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------- | ------------ | --------------------- | +| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 | +| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 | +| csrf | str | CSRF Token(位于 Cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- |------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
10003:不存在该稿件
-403: 账号异常 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | --------------------------- | +| like | bool | 是否点赞成功 | true:成功
false:失败 | +| coin | bool | 是否投币成功 | true:成功
false:失败 | +| fav | bool | 是否收藏成功 | true:成功
false:失败 | +| multiply | num | 投币枚数 | 默认为2 | + +**示例:** + +将视频`av91003840`/`BV1Wj411f79U`一键三连 + +avid方式: + +```shell +curl 'https://api.bilibili.com/x/web-interface/archive/like/triple' \ +--data-urlencode 'aid=91003840' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl 'https://api.bilibili.com/x/web-interface/archive/like/triple' \ +--data-urlencode 'bvid=BV1Wj411f79U' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "like": true, + "coin": true, + "fav": true, + "multiply": 2 + } +} +``` + +
+ +### 一键三连视频(APP端) + +> https://app.bilibili.com/x/v2/view/like/triple + +*请求方式:POST* + +认证方式:仅可APP + +同时点赞投币收藏视频,收藏于默认收藏夹中 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| aid | num | 稿件 avid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
10003:不存在该稿件 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | --------------------------- | +| like | bool | 是否点赞成功 | true:成功
false:失败 | +| coin | bool | 是否投币成功 | true:成功
false:失败 | +| fav | bool | 是否收藏成功 | true:成功
false:失败 | +| multiply | num | 投币枚数 | 默认为2 | + +**示例:** + +将视频`av91003840`一键三连 + +```shell +curl 'https://app.bilibili.com/x/v2/view/like/triple' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'aid=91003840' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "like": true, + "coin": true, + "fav": true, + "multiply": 2 + } +} +``` + +
+ +## 分享 + +### 分享视频 (Web端) + +> https://api.bilibili.com/x/web-interface/share/add + +*请求方式:POST* + +鉴权方式: Cookie (buvid3) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------- | ------------ | --------------------- | +| aid | num | 稿件 aid | 必要 (可选) | aid 与 bvid 任选一个 | +| bvid | str | 稿件 bvid | 必要 (可选) | aid 与 bvid 任选一个 | +| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 不必要 | | +| eab_x | num | 2 | 不必要 | 作用尚不明确 | +| ramval | num | 0 | 不必要 | 作用尚不明确 | +| source | str | web_normal | 不必要 | | +| ga | num | 1 | 不必要 | 可能与风控有关? | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------- | ------------------------------------------------------------------------- | +| code | num | 返回值 | 0: 成功
-101: 账号未登录
-111: csrf校验失败
-400: 请求错误
403: 账号异常,操作失败
71000: 重复分享 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | num | 当前分享数 | | + +**示例:** + +分享视频`BV1oA411776z` + +```shell +curl 'https://api.bilibili.com/x/web-interface/share/add' \ +--data-urlencode 'csrf=xxx' \ +--data-urlencode 'bvid=BV1oA411776z' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":19 +} +``` + +
diff --git a/docs/video/appeal.md b/docs/video/appeal.md new file mode 100644 index 0000000..2324e45 --- /dev/null +++ b/docs/video/appeal.md @@ -0,0 +1,425 @@ +# 稿件投诉 + +## 附件上传 + +> 附件上传与视频封面上传共用一个api。 + +## 获取投诉类型 + +> https://api.bilibili.com/x/web-interface/archive/appeal/tags + +*请求类型:GET* + +**json回复:** + +| 参数名 | 类型 | 内容 | 备注 | +| ------- | ------------- | ---- | ------- | +| code | num | | 成功为0 | +| message | str | | 成功为0 | +| ttl | num | 1 | | +| data | array | | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ------------------ | +| 0 | obj | 类型条目 1 | | +| n | obj | 类型条目 (n+1) | 按照指定的顺序排列 | +| …… | obj | …… | …… | + +`data`数组中的对象 + +| 项 | 类型 | 内容 | 备注 | +| -------- | ------------------------------ | ---------------- | -------- | +| tid | num | 类型tid | | +| business | num | | 意义不明 | +| weight | num | 权重 | | +| round | num | | 意义不明 | +| state | num | | 意义不明 | +| name | str | 类型名称 | | +| remark | str | 类型备注 | | +| ctime | str | | 意义不明 | +| mtime | str | | 意义不明 | +| controls | 拥有时:array
没有时:null | 详细信息填写提示 | | + +`controls`数组中的对象: + +| 项 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | -------- | +| tid | num | 同上 | | +| bid | num | | 意义不明 | +| name | str | 提示名称 | | +| title | str | 提示标题 | | +| component | str | 需要填入的类型 | | +| placeholder | str | 文本框占位符 | | +| required | num | 是否为必填 | | + +**示例:** + +```bash +curl --location --request GET 'https://api.bilibili.com/x/web-interface/archive/appeal/tags' +``` + +
+查看响应示例 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "tid": 1, + "business": 1, + "weight": 1, + "round": 2, + "state": 1, + "name": "其他", + "remark": "为帮助审核人员更快处理,请补充问题类型和出现位置等详细信息", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2023-09-21T18:40:20+08:00", + "controls": null + }, + { + "tid": 8, + "business": 1, + "weight": 40, + "round": 2, + "state": 1, + "name": "与站内其他视频撞车", + "remark": "为帮助审核人员更快处理, 请描述撞车信息", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2023-03-06T16:36:02+08:00", + "controls": [ + { + "tid": 8, + "bid": 1, + "name": "撞车对象", + "title": "撞车对象", + "component": "input", + "placeholder": "BVID", + "required": 1 + } + ] + }, + { + "tid": 9, + "business": 1, + "weight": 30, + "round": 2, + "state": 1, + "name": "引战", + "remark": "为帮助审核人员更快处理, 请补充引战的话题和出现位置", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-13T15:41:20+08:00", + "controls": null + }, + { + "tid": 10, + "business": 1, + "weight": 20, + "round": 2, + "state": 1, + "name": "不能参加充电", + "remark": "为帮助审核人员更快处理, 请补充问题类型和出现位置等详细信息", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-23T11:35:28+08:00", + "controls": null + }, + { + "tid": 52, + "business": 1, + "weight": 35, + "round": 2, + "state": 1, + "name": "转载/自制错误", + "remark": "为帮助审核人员更快处理, 请补充原创作品出处", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2023-09-20T16:23:39+08:00", + "controls": [ + { + "tid": 52, + "bid": 1, + "name": "出处", + "title": "原创视频出处", + "component": "link", + "placeholder": "请填写链接", + "required": 1 + } + ] + }, + { + "tid": 10018, + "business": 1, + "weight": 36, + "round": 2, + "state": 1, + "name": "违规推广", + "remark": "", + "ctime": "2023-09-21T17:56:21+08:00", + "mtime": "2023-09-22T14:36:41+08:00", + "controls": null + }, + { + "tid": 10019, + "business": 1, + "weight": 34, + "round": 2, + "state": 1, + "name": "其他不规范行为", + "remark": "", + "ctime": "2023-09-21T18:05:33+08:00", + "mtime": "2023-09-22T14:37:03+08:00", + "controls": null + }, + { + "tid": 10020, + "business": 1, + "weight": 89, + "round": 2, + "state": 1, + "name": "危险行为", + "remark": "", + "ctime": "2023-09-21T18:05:51+08:00", + "mtime": "2023-09-22T14:38:08+08:00", + "controls": null + }, + { + "tid": 10022, + "business": 1, + "weight": 1, + "round": 2, + "state": 1, + "name": "其他", + "remark": "", + "ctime": "2023-09-21T19:07:01+08:00", + "mtime": "2023-09-22T14:38:59+08:00", + "controls": null + }, + { + "tid": 10023, + "business": 1, + "weight": 59, + "round": 2, + "state": 1, + "name": "企业商誉侵权", + "remark": "", + "ctime": "2023-12-01T14:06:58+08:00", + "mtime": "2023-12-01T15:33:26+08:00", + "controls": null + }, + { + "tid": 10024, + "business": 1, + "weight": 58, + "round": 2, + "state": 1, + "name": "侵权申诉", + "remark": "", + "ctime": "2023-12-01T14:07:18+08:00", + "mtime": "2023-12-01T15:33:37+08:00", + "controls": null + }, + { + "tid": 2, + "business": 1, + "weight": 100, + "round": 1, + "state": 1, + "name": "违法违禁", + "remark": "为帮助审核人员更快处理,补充违规内容出现位置", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-13T15:41:20+08:00", + "controls": null + }, + { + "tid": 3, + "business": 1, + "weight": 90, + "round": 1, + "state": 1, + "name": "色情低俗", + "remark": "为帮助审核人员更快处理,补充违规内容出现位置", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2023-09-21T19:07:10+08:00", + "controls": null + }, + { + "tid": 4, + "business": 1, + "weight": 80, + "round": 1, + "state": 1, + "name": "低俗", + "remark": "为帮助审核人员更快处理,补充违规内容出现位置", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-13T15:41:20+08:00", + "controls": null + }, + { + "tid": 5, + "business": 1, + "weight": 70, + "round": 1, + "state": 1, + "name": "赌博诈骗", + "remark": "为帮助审核人员更快处理,补充违规内容出现位置", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-13T15:41:20+08:00", + "controls": null + }, + { + "tid": 6, + "business": 1, + "weight": 60, + "round": 1, + "state": 1, + "name": "血腥暴力", + "remark": "为帮助审核人员更快处理,补充违规内容出现位置", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-13T15:41:20+08:00", + "controls": null + }, + { + "tid": 7, + "business": 1, + "weight": 50, + "round": 1, + "state": 1, + "name": "人身攻击", + "remark": "为帮助审核人员更快处理,补充违规内容出现位置", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-13T15:41:20+08:00", + "controls": null + }, + { + "tid": 10000, + "business": 1, + "weight": 10, + "round": 1, + "state": 1, + "name": "青少年不良信息", + "remark": "为帮助审核人员更快处理, 请补充违规内容出现位置", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-13T15:41:20+08:00", + "controls": null + }, + { + "tid": 10013, + "business": 1, + "weight": 37, + "round": 1, + "state": 1, + "name": "不良封面/标题", + "remark": "为帮助审核人员更快处理, 请描述详细信息", + "ctime": "2019-04-17T19:18:09+08:00", + "mtime": "2019-04-17T20:42:25+08:00", + "controls": null + }, + { + "tid": 10014, + "business": 1, + "weight": 8, + "round": 1, + "state": 1, + "name": "涉政谣言", + "remark": "为帮助审核人员更快处理,请补充谣言内容出现位置", + "ctime": "2022-09-15T17:23:44+08:00", + "mtime": "2022-09-16T09:56:07+08:00", + "controls": null + }, + { + "tid": 10015, + "business": 1, + "weight": 7, + "round": 1, + "state": 1, + "name": "涉社会事件谣言", + "remark": "为帮助审核人员更快处理,请补充谣言内容出现位置", + "ctime": "2022-09-15T17:25:56+08:00", + "mtime": "2022-09-16T09:56:07+08:00", + "controls": null + }, + { + "tid": 10017, + "business": 1, + "weight": 5, + "round": 1, + "state": 1, + "name": "虚假不实信息", + "remark": "为帮助审核人员更快处理,请补充不实内容出现位置", + "ctime": "2022-09-15T17:28:16+08:00", + "mtime": "2022-09-16T09:56:08+08:00", + "controls": null + }, + { + "tid": 10021, + "business": 1, + "weight": 88, + "round": 1, + "state": 1, + "name": "观感不适", + "remark": "", + "ctime": "2023-09-21T18:06:15+08:00", + "mtime": "2023-09-21T18:06:15+08:00", + "controls": null + } + ] +} +``` + +
+ +## 投诉稿件 + +> https://api.bilibili.com/x/web-interface/appeal/v2/submit +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ------------------------ | +| csrf | str | csrf token(位于cookie bili_jct) | 必要 | 位于request body | +| aid | num | 稿件aid | 必要 | 位于request body | +| tid | num | 投诉理由tid | 必要 | 位于request body | +| desc | str | 投诉理由详细描述 | 必要 | 位于request body | +| attach | str | 附件(多个附件用逗号隔开 | 非必要 | 位于request body | +| buid | str | 风控代码 | 必要 | 位于request header | +| Buid | str | 风控代码 | 必要 | 位于request cookies | + +上下两个buid值必须相同,可随机 + +**json回复:** + +| 参数名 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------- | +| code | num | 返回码 | 成功为0 | +| message | str | | 成功为0 | +| ttl | | 1 | | + +**示例:举报av号为61080066的视频,理由为人身攻击,描述为“xxxxx”,并附带了一个图片附件 + +```bash +curl --location --request POST 'https://api.bilibili.com/x/web-interface/appeal/v2/submit' \ +--form 'csrf="xxxx"'\ +--form 'aid="61080066"' \ +--form 'tid="7"' \ +--form 'desc="xxxxx"' \ +--form 'attach="https://archive.biliimg.com/bfs/archive/xxxxx.png"' +``` + +
+ 查看响应示例 + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +
diff --git a/docs/video/attribute_data.md b/docs/video/attribute_data.md new file mode 100644 index 0000000..a3d1e70 --- /dev/null +++ b/docs/video/attribute_data.md @@ -0,0 +1,71 @@ +# 视频属性数据说明 + +**PS**:以下部分内容来源不明,且部分值前端不可见,有待验证 + +## attribute字段值(稿件属性位) + +该字段前端已弃用, 相关接口返回恒为 `0`, 参见 [验证视频属性字段,实锤B站视频限流](https://shakaianee.top/archives/9/) + +该字段为二进制标志位,多个标志请用`OR`运算叠加 + +| 位 | 内容 | 备注 | +| ---- | ---------------------- | ------------------------------------------------------------ | +| 0 | 禁止排行 | | +| 1 | 动态禁止 | 禁止APP推送动态 | +| 2 | 禁止网页输出 | | +| 3 | 禁止客户端列表 | | +| 4 | 搜索禁止 | 打全标题或av/bv号都搜索不到的那种 | +| 5 | 海外禁止 | | +| 6 | 禁止推荐 | 禁止被APP端天马列表推荐 | +| 7 | 是否显示“禁止转载“标志 | **注:未经作者授权 禁止转载** | +| 8 | 是否高清 | 视频清晰度>=1080P | +| 9 | 是否PGC稿件 | 番剧&影视 | +| 10 | 允许承包 | | +| 11 | 是否番剧 | | +| 12 | 是否私单 | 存在商业推广恰饭内容 | +| 13 | 是否限制地区 | 大多数番剧&影视 | +| 14 | 禁止其他人添加TAG | | +| 15 | ? | 大多数旧视频会有这个标志 | +| 16 | 跳转 | 番剧及影视av/bv->ep跳转 | +| 17 | 是否影视 | | +| 18 | 是否付费 | | +| 19 | 推送动态 | | +| 20 | 家长模式 | | +| 21 | 是否限制游客和外链 | 分为两种情况,默认全部网页限制referer跳转,但第二种未登录无法访问,可以通过未登陆b站访问https://api.bilibili.com/x/web-interface/view 返回的code为-403来判断 | +| 22 | ? | | +| 23 | ? | | +| 24 | 是否为联合投稿 | | +| 25 | ? | | +| 26 | ? | | +| 27 | ? | | +| 28 | ? | | +| 29 | 是否为互动视频 | | + +## state字段值(稿件状态) + +| 值 | 内容 | 备注 | +| ---- | ------------ | ---------- | +| 1 | 橙色通过 | | +| 0 | 开放浏览 | | +| -1 | 待审 | | +| -2 | 被打回 | | +| -3 | 网警锁定 | | +| -4 | 被锁定 | 视频撞车了 | +| -5 | 管理员锁定 | | +| -6 | 修复待审 | | +| -7 | 暂缓审核 | | +| -8 | 补档待审 | | +| -9 | 等待转码 | | +| -10 | 延迟审核 | | +| -11 | 视频源待修 | | +| -12 | 转储失败 | | +| -13 | 允许评论待审 | | +| -14 | 临时回收站 | | +| -15 | 分发中 | | +| -16 | 转码失败 | | +| -20 | 创建未提交 | | +| -30 | 创建已提交 | | +| -40 | 定时发布 | | +| -50 | 仅UP主可见 | | +| -100 | 用户删除 | | + diff --git a/docs/video/collection.md b/docs/video/collection.md new file mode 100644 index 0000000..40efe80 --- /dev/null +++ b/docs/video/collection.md @@ -0,0 +1,1986 @@ +# 合集和视频列表信息 + +请注意区分 **合集(seasons_archives)** 和 **视频列表(seasons_series)** + +合集是后加入的功能, 图标为立体叠放的正方形(.icon-heji), 可以在创作中心管理, 参见 [合集管理](../creativecenter/season.md) + +列表即系列(series)或频道(channel), 图标为平面叠放的矩形且中央有播放按钮标识(.icon-ic_channel1), 在个人空间直接操作 + +此处保留原 Issue 的表述, 参见 [#945](https://github.com/SocialSisterYi/bilibili-API-collect/issues/945) + +## 获取视频合集信息 + +> https://api.bilibili.com/x/polymer/web-space/seasons_archives_list (需验证referer) +> +> https://api.bilibili.com/x/polymer/space/seasons_archives_list (旧接口, 不推荐使用, 无鉴权验证) + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-----|------|--------|-----| +| mid | num | 用户 mid | 必要 | 创建者的 mid,但也可以是任意的非负整数 | +| season_id | num | 视频合集 ID | 必要 | | +| sort_reverse | bool | 排序方式 | 可选 | true: 升序排序
false: 默认排序 | +| page_num | num | 页码索引 | 可选 | 默认为 1 | +| page_size | num | 单页内容数量 | 可选 | 默认为 30 | +| gaia_vtoken | str | 风控验证? | 可选 | 若被风控则必要(如User-Agent不正常) | +| web_location | str | 页面位置? | 可选 | 333.999 | +| w_rid | str | WBI 签名 | 可选 | 参见 [WBI 签名](../misc/sign/wbi.md) | +| wts | num | UNIX 秒级时间戳 | 可选 | 参见 [WBI 签名](../misc/sign/wbi.md) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------------- | ------- | ------------------------------ | ----------------------------------------------------------- | +| aids | array | 稿件 avid 列表 | 对应下方数组中内容 aid | +| archives | array | 合集中的视频 | | +| meta | obj | 合集元数据 | | +| page | obj | 分页信息 | | + +`data`中的`archives`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|----------|---------| +| 0 | obj | 合集内容 | | +| n | obj | (n+1)P内容 | | +| …… | obj | …… | …… | + +`archives`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|------|-----| +| aid | num | 稿件 avid || +| bvid | str | 稿件 bvid || +| ctime | num | 创建时间 | Unix 时间戳 | +| duration | num | 视频时长 | 单位为秒 | +| enable_vt | bool | false | 旧接口无 | +| interactive_video | bool | 是否是互动视频 | | +| pic | str | 封面 URL || +| playback_position | num || 会随着播放时间增长,播放完成后为 -1 。单位为 % | +| pubdate | num | 发布日期 | Unix 时间戳 | +| stat | obj | 稿件信息 || +| state | num | 0 || +| title | str | 稿件标题|| +| ugc_pay | num | UGC 付费? | 0: 否 | +| vt_display | str | 空 | 旧接口无 | + +`archives`中的`stat`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|------|-----| +| view | num | 稿件播放量 || +| vt | num | 0 || + +`data`中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------|-----|--------------|--------| +| category | num | 0 | | +| cover | str | 合集封面 URL | | +| description | str | 合集描述 | | +| mid | num | UP 主 ID | | +| name | str | 合集标题 | | +| ptime | num | 发布时间 | Unix 时间戳 | +| season_id | num | 合集 ID | | +| total | num | 合集内视频数量 | | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------|-----|--------------|--------| +| page_num | num | 分页页码 | | +| page_size | num | 单页个数 | | +| total | num | 合集内视频数量 | | + +**示例:** + +获取 `mid=37737161` 的 `season_id=1227671` 视频合集信息,默认排序,第 1 页,每页 30 个视频 + +```shell +curl -G "https://api.bilibili.com/x/polymer/space/seasons_archives_list" \ +--data-urlencode "mid=37737161" \ +--data-urlencode "sort_reverse=false" \ +--data-urlencode "season_id=1227671" \ +--data-urlencode "page_num=1" \ +--data-urlencode "page_size=30" +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aids": [ + 311606079, + 400546145 + ], + "archives": [ + { + "aid": 311606079, + "bvid": "BV1XN411K7g9", + "ctime": 1679651747, + "duration": 261, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/234e6bd061176dba9e148f4373c52fa7cd2d801f.jpg", + "pubdate": 1679651747, + "stat": { + "view": 12145 + }, + "state": 0, + "title": "某些IT社区平台乱象,文章千篇一律,毫不注重版权,文章互相抄袭成潮流,希望能够好好管管!", + "ugc_pay": 0 + }, + { + "aid": 400546145, + "bvid": "BV1qo4y1L73P", + "ctime": 1682777426, + "duration": 335, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/a6b6fb0330bbf6c500720a024e5a9ade24d888c3.jpg", + "pubdate": 1682777425, + "stat": { + "view": 52743 + }, + "state": 0, + "title": "某些搜索引擎得到的结果,官方网站反而排在一些诈骗广告后面,诱导用户下载大量捆绑垃圾软件", + "ugc_pay": 0 + } + ], + "meta": { + "category": 0, + "cover": "https://archive.biliimg.com/bfs/archive/5e1c1f77c3065ec31eec43d7e35f7a061602e4d6.jpg", + "description": "白马首席讲师吐槽系列视频", + "mid": 37737161, + "name": "水浅王八多,真假白马说", + "ptime": 1682777425, + "season_id": 1227671, + "total": 2 + }, + "page": { + "page_num": 1, + "page_size": 30, + "total": 2 + } + } +} +``` + +
+ +## 只获取系列视频 + +> https://api.bilibili.com/x/polymer/web-space/home/seasons_series + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ------------ | ------ | ---- | +| mid | num | 用户 mid | 必要 | | +| page_num | num | 页码索引 | 必要 | | +| page_size | num | 单页内容数量 | 必要 | | +| gaia_vtoken | str | 风控验证? | 可选 | 若被风控则必要(如User-Agent不正常) | +| w_rid | str | WBI 签名 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | +| wts | num | UNIX 秒级时间戳 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功
-352: 请求被风控
-400: 请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | -------- | +| items_lists | obj | 内容列表 | 套了个娃 | + +`data`中的`items_lists`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ----- | -------- | ---- | +| page | obj | 分页信息 | | +| seasons_list | array | 空 | | +| series_list | array | 系列列表 | | + +`items_lists`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------- | ---- | +| page_num | num | 分页页码 | | +| page_size | num | 单页个数 | | +| total | num | 总页数 | | + +`items_lists`中的`series_list`数组: + +| 项 | 类型 | 内容 | 备注 | +| -- | ---- | ----------------- | ---- | +| 0 | obj | 第1个系列内容 | | +| 1 | obj | 第2个系列内容 | | +| …… | obj | …… | …… | +| n | obj | 第(n+1)个系列内容 | | + +`series_list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ----------------- | ------------- | +| archives | array | 系列视频列表 | | +| meta | obj | 系列元数据 | | +| recent_aids | array | 系列视频 aid 列表 | 内容类型为num | + +`series_list`中的`archives`数组: + +同[获取视频合集信息](#获取视频合集信息)中的`archives`数组 + +`series_list`中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | -------------- | ------------- | +| category | num | 1 | | +| cover | str | 系列封面 URL | | +| creator | str | auto | | +| ctime | num | 创建时间 | Unix 时间戳 | +| description | str | 系列描述 | | +| keywords | array | 系列关键词列表 | 内容类型为str | +| last_update_ts | num | 最近更新时间 | Unix 时间戳 | +| mid | num | UP 主 ID | | +| mtime | num | 修改时间 | Unix 时间戳 | +| name | str | 系列标题 | | +| raw_keywords | str | 原始系列关键词 | | +| series_id | num | 系列 ID | | +| state | num | 2 | | +| total | num | 系列视频数量 | | + +**示例:** + +```shell +curl -G "https://api.bilibili.com/x/polymer/web-space/home/seasons_series" \ +--data-urlencode "mid=37737161" \ +--data-urlencode "page_num=1" \ +--data-urlencode "page_size=10" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "items_lists": { + "page": { + "page_num": 1, + "page_size": 10, + "total": 1 + }, + "seasons_list": [], + "series_list": [ + { + "archives": [ + { + "aid": 284063097, + "bvid": "BV1Fc411x7xF", + "ctime": 1705925782, + "duration": 8885, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/5aa1bb0a121d89969e9bd2634bc7ae23272bf850.jpg", + "playback_position": 0, + "pubdate": 1705925781, + "stat": { + "view": 14683, + "vt": 0 + }, + "state": 0, + "title": "Gradle 教程 已完结 (基于Kotlin DSL讲解) 4K蓝光画质 超强的脚本式项目依赖和构建工具", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 367948632, + "bvid": "BV1P94y1c7tV", + "ctime": 1703844221, + "duration": 52036, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/499aeb41a0428e05523b766e367540b04f7c3ae2.jpg", + "playback_position": 0, + "pubdate": 1703844220, + "stat": { + "view": 82997, + "vt": 0 + }, + "state": 0, + "title": "Kotlin 教程 已完结 (IDEA 2024 最新版) 4K蓝光画质+杜比音效 零基础入门一套搞定 入门到入土经典版", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 836303388, + "bvid": "BV1Hg4y1m7Ca", + "ctime": 1705401362, + "duration": 5873, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i1.hdslb.com/bfs/archive/a20b09d1cc1a81f6a9c5ed8ea322656e406be725.jpg", + "playback_position": 0, + "pubdate": 1705401362, + "stat": { + "view": 8417, + "vt": 0 + }, + "state": 0, + "title": "Kotlin 扩展篇 已完结 (IDEA 2024 最新版) 4K蓝光画质 与Java语言混合编程", + "ugc_pay": 0, + "vt_display": "" + } + ], + "meta": { + "category": 1, + "cover": "http://i0.hdslb.com/bfs/archive/5aa1bb0a121d89969e9bd2634bc7ae23272bf850.jpg", + "creator": "auto", + "ctime": 1705401630, + "description": "包含Kotlin语言学习的完整流程,正在不断完善中哦~", + "keywords": [ + "Kotlin" + ], + "last_update_ts": 1705925782, + "mid": 37737161, + "mtime": 1705925782, + "name": "Kotlin开心路线", + "raw_keywords": "Kotlin", + "series_id": 3908327, + "state": 2, + "total": 3 + }, + "recent_aids": [ + 284063097, + 367948632, + 836303388 + ] + }, + { + "archives": [ + { + "aid": 848832470, + "bvid": "BV1CL4y1i7qR", + "ctime": 1635258883, + "duration": 106474, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/45dddea811257f78ddd6f1e70197d95d7d6b5187.jpg", + "playback_position": 0, + "pubdate": 1635258883, + "stat": { + "view": 438645, + "vt": 0 + }, + "state": 0, + "title": "JavaWeb 教程 已完结(IDEA 2021版本)4K蓝光画质 入土到起立", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 566880413, + "bvid": "BV1Kv4y1x7is", + "ctime": 1676544280, + "duration": 25149, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i1.hdslb.com/bfs/archive/cc59de5afebc66447ba93ad9ea0ba73a9b09c117.jpg", + "playback_position": 0, + "pubdate": 1676544280, + "stat": { + "view": 87171, + "vt": 0 + }, + "state": 0, + "title": "Spring 核心教程 已完结(IDEA 2023最新版)4K蓝光画质 基于Spring6的全新重制版本 起立到起飞", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 615286308, + "bvid": "BV1Lh4y1M7kx", + "ctime": 1688117457, + "duration": 10373, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/5f860de4bc0fab30651ae93396f9c572be8380b2.jpg", + "playback_position": 0, + "pubdate": 1688117457, + "stat": { + "view": 41428, + "vt": 0 + }, + "state": 0, + "title": "Spring MVC 教程 已完结(IDEA 2023最新版)4K蓝光画质 基于Spring6的全新重制版本 起立到起飞", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 403104913, + "bvid": "BV1fV411M7aS", + "ctime": 1688560394, + "duration": 17611, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i1.hdslb.com/bfs/archive/c4557a16aa3519183d6ae0114e1c64107bb23703.jpg", + "playback_position": 0, + "pubdate": 1688560394, + "stat": { + "view": 59298, + "vt": 0 + }, + "state": 0, + "title": "Spring Security 教程 已完结(IDEA 2023最新版)4K蓝光画质 基于Spring6的全新重制版本 起立到起飞", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 828666773, + "bvid": "BV1xu4y1m7UP", + "ctime": 1689767299, + "duration": 29696, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i1.hdslb.com/bfs/archive/06cf686d4d3f7ce6731975ef59938d759283318e.jpg", + "playback_position": 0, + "pubdate": 1689767299, + "stat": { + "view": 108078, + "vt": 0 + }, + "state": 0, + "title": "Spring Boot 教程 已完结(IDEA 2023最新版)4K蓝光画质 基于SpringBoot 3 的全新重制版本 起飞到删库跑路", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 852857221, + "bvid": "BV1AL4y1j7RY", + "ctime": 1648811079, + "duration": 55544, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/629755f79c13c96c9b6d91da80257a352b29dd86.jpg", + "playback_position": 0, + "pubdate": 1648811079, + "stat": { + "view": 168251, + "vt": 0 + }, + "state": 0, + "title": "SpringCloud 教程 已完结(IDEA 2022.1最新版)4K蓝光画质 微服务开发", + "ugc_pay": 0, + "vt_display": "" + } + ], + "meta": { + "category": 1, + "cover": "http://i0.hdslb.com/bfs/archive/45dddea811257f78ddd6f1e70197d95d7d6b5187.jpg", + "creator": "auto", + "ctime": 1669273103, + "description": "已排序完成,共4个系列,请至少完成Java SE篇视频之后再开始JavaEE路线哦~ 整个路线大致为:JavaWeb基础篇、SSM成长篇、SpringBoot成熟篇、SpringCloud进阶篇", + "keywords": [ + "" + ], + "last_update_ts": 1696249622, + "mid": 37737161, + "mtime": 1696249622, + "name": "JavaEE通关路线", + "raw_keywords": "", + "series_id": 2800548, + "state": 2, + "total": 9 + }, + "recent_aids": [ + 848832470, + 566880413, + 615286308, + 403104913, + 828666773, + 852857221 + ] + }, + { + "archives": [ + { + "aid": 445283537, + "bvid": "BV14j411S76G", + "ctime": 1687946670, + "duration": 7008, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i1.hdslb.com/bfs/archive/208bb09ecf97fbbd73e45b3839715276ffbbe8f4.jpg", + "playback_position": 0, + "pubdate": 1687946670, + "stat": { + "view": 9483, + "vt": 0 + }, + "state": 0, + "title": "Apache Maven 依赖管理 极速上手 已完结(2021 版本)4K蓝光画质+杜比音效 从导入到冲突", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 813084463, + "bvid": "BV1r34y1p7j9", + "ctime": 1656909478, + "duration": 17457, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/798135f31dc9e03121458f32825dc81d8e403887.jpg", + "playback_position": 0, + "pubdate": 1656909478, + "stat": { + "view": 46179, + "vt": 0 + }, + "state": 0, + "title": "Docker 容器技术 已完结(2022 最新版)4K蓝光画质+杜比音效 从内卷到开摆", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 432905025, + "bvid": "BV1a3411f7nh", + "ctime": 1669296029, + "duration": 10393, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/d14c0fad064a224de7afb7edd147f8b335324c53.jpg", + "playback_position": 0, + "pubdate": 1669296029, + "stat": { + "view": 37040, + "vt": 0 + }, + "state": 0, + "title": "Linux 操作系统 光速入门 已完结(2021 版本)4K蓝光画质+杜比音效 从讨厌到喜欢", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 390385576, + "bvid": "BV19d4y147Df", + "ctime": 1669272992, + "duration": 23389, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/8ba763e1a1e14c47c1c178ecf21240896d3fbb5e.jpg", + "playback_position": 0, + "pubdate": 1669272992, + "stat": { + "view": 32189, + "vt": 0 + }, + "state": 0, + "title": "MySQL 数据库技术 已完结(2021版本)4K蓝光画质+杜比音效 从内卷到开摆", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 647924810, + "bvid": "BV1ce4y1W7YB", + "ctime": 1669275447, + "duration": 8492, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/f5bcc92a4e181cb12a8b80499cea255f43f2d97b.jpg", + "playback_position": 0, + "pubdate": 1669275447, + "stat": { + "view": 20004, + "vt": 0 + }, + "state": 0, + "title": "Git 版本控制 快速上手 已完结(2021版本)4K蓝光画质+杜比音效 从开摆到放弃", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 347934006, + "bvid": "BV1vR4y1o7Z2", + "ctime": 1669295228, + "duration": 10631, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/f95d39b0bc1a2bdad07461a8f4b1ea48c174902c.jpg", + "playback_position": 0, + "pubdate": 1669295228, + "stat": { + "view": 25860, + "vt": 0 + }, + "state": 0, + "title": "Redis 缓存技术 已完结(2021版本)4K蓝光画质+杜比音效 从内卷到开摆", + "ugc_pay": 0, + "vt_display": "" + } + ], + "meta": { + "category": 1, + "cover": "http://i1.hdslb.com/bfs/archive/208bb09ecf97fbbd73e45b3839715276ffbbe8f4.jpg", + "creator": "auto", + "ctime": 1669273164, + "description": "包含主线中讲解的中间件归档视频与当下必学的火热技术。", + "keywords": [ + "" + ], + "last_update_ts": 1688123428, + "mid": 37737161, + "mtime": 1688123428, + "name": "必学技术与中间件", + "raw_keywords": "", + "series_id": 2800550, + "state": 2, + "total": 7 + }, + "recent_aids": [ + 445283537, + 813084463, + 432905025, + 390385576, + 647924810, + 347934006 + ] + }, + { + "archives": [ + { + "aid": 900707014, + "bvid": "BV1YP4y1o75f", + "ctime": 1663494406, + "duration": 103542, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/291dd3b60b67a8f74567a81999612bd50b4e8017.jpg", + "playback_position": 0, + "pubdate": 1663494406, + "stat": { + "view": 312144, + "vt": 0 + }, + "state": 0, + "title": "JavaSE 教程 已完结 (IDEA 2022 最新版) 4K蓝光画质+杜比音效 零基础入门一套搞定 入门到入土", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 604837097, + "bvid": "BV1G84y1v7Vj", + "ctime": 1667815711, + "duration": 19395, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/4a4522194a1d0c8ae684976b26fb2fe43ce28f39.jpg", + "playback_position": 0, + "pubdate": 1667815711, + "stat": { + "view": 74496, + "vt": 0 + }, + "state": 0, + "title": "JavaSE AWT/Swing 图形化编程 (IDEA 2022 最新版) 4K蓝光画质+杜比音效 快速上手桌面程序 用IDEA写IDEA", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 766688029, + "bvid": "BV1Er4y1r7as", + "ctime": 1645157763, + "duration": 21585, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/ced6a8c8548f0f921f306ea3589f9d470adc0446.jpg", + "playback_position": 0, + "pubdate": 1645157763, + "stat": { + "view": 133409, + "vt": 0 + }, + "state": 0, + "title": "Java JVM 虚拟机 已完结(IDEA 2021版本)4K蓝光画质 全程劝退", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 936955310, + "bvid": "BV1JT4y1S7K8", + "ctime": 1646391131, + "duration": 31736, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i1.hdslb.com/bfs/archive/9347ef3cdb6cf0e5bca29ce32e211b488e90ab7b.jpg", + "playback_position": 0, + "pubdate": 1646391131, + "stat": { + "view": 74731, + "vt": 0 + }, + "state": 0, + "title": "Java JUC 并发编程 已完结(IDEA 2021版本)4K蓝光画质 玩转多线程", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 768437265, + "bvid": "BV1ar4y1J7mC", + "ctime": 1650881312, + "duration": 26314, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/7f97549147c09a386d9402b121cc6206c36e4079.jpg", + "playback_position": 0, + "pubdate": 1650881312, + "stat": { + "view": 67900, + "vt": 0 + }, + "state": 0, + "title": "Java NIO Netty网络编程 已完结(IDEA 2022.1最新版)4K蓝光画质 网络I/O进阶编程", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 684547077, + "bvid": "BV1tU4y1y7Fg", + "ctime": 1653900327, + "duration": 10243, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/dc0cc9464c6fc274c1f23f682a01dab5a358217b.jpg", + "playback_position": 0, + "pubdate": 1653900327, + "stat": { + "view": 47693, + "vt": 0 + }, + "state": 0, + "title": "JavaSE 9-17 新特性 已完结(IDEA 2022.1最新版)4K蓝光画质 Java9/10/11/12/13/14/15/16/17讲解", + "ugc_pay": 0, + "vt_display": "" + } + ], + "meta": { + "category": 1, + "cover": "http://i0.hdslb.com/bfs/archive/291dd3b60b67a8f74567a81999612bd50b4e8017.jpg", + "creator": "auto", + "ctime": 1648810702, + "description": "已排序完成,共3个系列,完成JavaSE篇之后,就可以开启JavaEE路线了", + "keywords": [ + "" + ], + "last_update_ts": 1667816253, + "mid": 37737161, + "mtime": 1667816253, + "name": "JavaSE基础路线", + "raw_keywords": "", + "series_id": 2158988, + "state": 2, + "total": 6 + }, + "recent_aids": [ + 900707014, + 604837097, + 766688029, + 936955310, + 768437265, + 684547077 + ] + }, + { + "archives": [ + { + "aid": 770027221, + "bvid": "BV1Cr4y137os", + "ctime": 1655371329, + "duration": 48185, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/5d9bd135f068e623e50c7341244635f6cc96c3ea.jpg", + "playback_position": 0, + "pubdate": 1655371329, + "stat": { + "view": 275378, + "vt": 0 + }, + "state": 0, + "title": "C语言程序设计 已完结(CLion 2022 最新版)4K蓝光画质+杜比音效 梦开始的地方", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 941207928, + "bvid": "BV13W4y127Ey", + "ctime": 1658474799, + "duration": 69081, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/0bf055a0961c0f9bbb7f869b47c3e3d7df21f55c.jpg", + "playback_position": 0, + "pubdate": 1658474798, + "stat": { + "view": 220072, + "vt": 0 + }, + "state": 0, + "title": "数据结构与算法 已完结(CLion 2022 最新版)4K蓝光画质+杜比音效 全程高能", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 426681358, + "bvid": "BV1u3411P7Na", + "ctime": 1653033628, + "duration": 12346, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i0.hdslb.com/bfs/archive/4174e2976f750d5410d6cef374c3035190717cac.jpg", + "playback_position": 0, + "pubdate": 1653033628, + "stat": { + "view": 71911, + "vt": 0 + }, + "state": 0, + "title": "Java 设计模式 已完结(IDEA 2022.1最新版)4K蓝光画质+杜比音效", + "ugc_pay": 0, + "vt_display": "" + } + ], + "meta": { + "category": 1, + "cover": "http://i0.hdslb.com/bfs/archive/5d9bd135f068e623e50c7341244635f6cc96c3ea.jpg", + "creator": "auto", + "ctime": 1653296733, + "description": "Java设计模式系列视频,提升你的代码编写规范。", + "keywords": [ + "" + ], + "last_update_ts": 1658735292, + "mid": 37737161, + "mtime": 1658735292, + "name": "高等院校计算机必修课", + "raw_keywords": "", + "series_id": 2318088, + "state": 2, + "total": 3 + }, + "recent_aids": [ + 770027221, + 941207928, + 426681358 + ] + } + ] + } + } +} +``` + +
+ +## 获取系列和合集视频 + +> https://api.bilibili.com/x/polymer/web-space/seasons_series_list + +*请求方式: GET* + +鉴权方式: 请求头 User-Agent 为正常浏览器, 若仍被风控则请求头再带上 Referer 为 `.bilibili.com` 下任意页 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| mid | num | 用户 mid | 必要 | | +| page_num | num | 页码 | 必要 | 默认为 1 | +| page_size | num | 每页数量 | 必要 | 默认为 20 | +| w_rid | str | WBI 签名 | 可选 | 参见 [WBI 签名](../misc/sign/wbi.md) | +| wts | num | UNIX 秒级时间戳 | 可选 | 参见 [WBI 签名](../misc/sign/wbi.md) | +| web_location | str | 页面位置? | 可选 | 333.999 | + +**JSON回复:** + +与 [只获取系列视频](#只获取系列视频) 基本一致, 但 `.data.items_lists.seasons_list` 数组不为空, +且该数组中的元素结构与 `.data.items_lists.series_list` 相同, 略 + +**示例:** + +获取 `mid=37737161` 的系列视频列表,每页 5 条,页码为 1 + +```shell +curl -G "https://api.bilibili.com/x/polymer/web-space/seasons_series_list" \ +--data-urlencode "mid=37737161" \ +--data-urlencode "page_num=1" \ +--data-urlencode "page_size=5" \ +--data-urlencode "w_rid=xxx" \ +--data-urlencode "wts=xxx" +``` + +
+查看响应示例: + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "items_lists": { + "page": { + "page_num": 1, + "page_size": 5, + "total": 9 + }, + "seasons_list": [ + { + "archives": [ + { + "aid": 343807541, + "bvid": "BV1t94y1D79E", + "ctime": 1658907465, + "duration": 2164, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i1.hdslb.com/bfs/archive/0af0faa77a1921db4cf86c115db70aa2594983f0.jpg", + "playback_position": 0, + "pubdate": 1658907465, + "stat": { + "view": 43096, + "vt": 0 + }, + "state": 0, + "title": "Java学习路线两条龙版,让你不再迷茫!包含各个知识点梳理,常用技术栈介绍等。", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 429032764, + "bvid": "BV11G411h7NB", + "ctime": 1659499261, + "duration": 197, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/5235a0ab2738e288b08654aa8e0cd3a509a7ef96.jpg", + "playback_position": 0, + "pubdate": 1659499200, + "stat": { + "view": 22700, + "vt": 0 + }, + "state": 0, + "title": "好书推荐《On Java》都什么年代了,还在看传统Java书籍?", + "ugc_pay": 0, + "vt_display": "" + }, + // ... + ], + "meta": { + "category": 0, + "cover": "https://archive.biliimg.com/bfs/archive/27733cf13514d990c880154b937cd8633f583aa4.jpg", + "description": "除教程视频外其他的视频,均在此。", + "mid": 37737161, + "name": "合集·拾枝杂谈", + "ptime": 1694682652, + "season_id": 587216, + "total": 10 + }, + "recent_aids": [ + 343807541, + 429032764, + 857089796, + 560181990, + 774119786, + 859397126 + ] + }, + { + "archives": [ + { + "aid": 311606079, + "bvid": "BV1XN411K7g9", + "ctime": 1679651747, + "duration": 261, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/234e6bd061176dba9e148f4373c52fa7cd2d801f.jpg", + "playback_position": 0, + "pubdate": 1679651747, + "stat": { + "view": 12150, + "vt": 0 + }, + "state": 0, + "title": "某些IT社区平台乱象,文章千篇一律,毫不注重版权,文章互相抄袭成潮流,希望能够好好管管!", + "ugc_pay": 0, + "vt_display": "" + }, + { + "aid": 400546145, + "bvid": "BV1qo4y1L73P", + "ctime": 1682777426, + "duration": 335, + "enable_vt": false, + "interactive_video": false, + "pic": "http://i2.hdslb.com/bfs/archive/a6b6fb0330bbf6c500720a024e5a9ade24d888c3.jpg", + "playback_position": 0, + "pubdate": 1682777425, + "stat": { + "view": 52744, + "vt": 0 + }, + "state": 0, + "title": "某些搜索引擎得到的结果,官方网站反而排在一些诈骗广告后面,诱导用户下载大量捆绑垃圾软件", + "ugc_pay": 0, + "vt_display": "" + } + ], + "meta": { + "category": 0, + "cover": "https://archive.biliimg.com/bfs/archive/5e1c1f77c3065ec31eec43d7e35f7a061602e4d6.jpg", + "description": "白马首席讲师吐槽系列视频", + "mid": 37737161, + "name": "合集·水浅王八多,真假白马说", + "ptime": 1682777425, + "season_id": 1227671, + "total": 2 + }, + "recent_aids": [ + 311606079, + 400546145 + ] + }, + // ... + ], + "series_list": [ + // 与前接口基本相同 + ] + } + } +} +``` + +
+ +## 查询指定系列 + +> https://api.bilibili.com/x/series/series + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| series_id | num | 系列ID | 必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | ---- | +| meta | obj | 系列信息 | | +| recent_aids | array | 系列 aid 列表 | 内容类型为 num | + +`data`中的`meta`对象: + +同[只获取系列视频](#只获取系列视频)中的`meta`对象 + +**示例:** + +```shell +curl -G 'https://api.bilibili.com/x/series/series' \ +--data-urlencode 'series_id=2158988' +``` + +
+查看响应示例 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "meta": { + "series_id": 2158988, + "mid": 37737161, + "name": "JavaSE基础路线", + "description": "已排序完成,共3个系列,完成JavaSE篇之后,就可以开启JavaEE路线了", + "keywords": [ + "" + ], + "creator": "auto", + "state": 2, + "last_update_ts": 1667816253, + "total": 6, + "ctime": 1648810702, + "mtime": 1667816253, + "raw_keywords": "", + "category": 1 + }, + "recent_aids": [ + 900707014, + 604837097, + 766688029, + 936955310, + 768437265, + 684547077 + ] + } +} +``` + +
+ +## 获取指定系列视频 + +> https://api.bilibili.com/x/series/archives + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| mid | num | 用户 mid | 必要 | | +| series_id | num | 系列ID | 必要 | | +| only_normal | bool | 作用尚不明确 | 可选 | 默认为 true | +| sort | str | 排序方式 | 可选 | desc: 默认排序
asc: 升序排序 | +| pn | num | 页码 | 可选 | 默认为 1 | +| ps | num | 每页数量 | 可选 | 默认为 20 | +| current_mid | num | 当前用户 mid | 可选 | 用于 `playback_position` 播放进度 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | ---- | +| aids | array | 视频 aid 列表 | 内容类型为 num | +| page | obj | 页码信息 | | +| archives | array | 视频信息列表 | | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| num | num | 当前页码 | | +| size | num | 每页数量 | | +| total | num | 视频总数 | | + +`data`中的`archives`数组: + +基本同[获取视频合集信息](#获取视频合集信息)中的`archives`数组 + +**示例:** + +获取 `mid=39665558` 的 `series_id=534501` 系列视频列表,每页 16 条,页码为 1,默认排序, 当前用户 mid 为 `1070915568` + +```shell +curl -G "https://api.bilibili.com/x/series/archives" \ +--data-urlencode "mid=39665558" \ +--data-urlencode "series_id=534501" \ +--data-urlencode "only_normal=true" \ +--data-urlencode "sort=desc" \ +--data-urlencode "pn=1" \ +--data-urlencode "ps=16" \ +--data-urlencode "current_mid=1070915568" +``` + +
+查看响应示例: + +```jsonc +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aids": [ + 695029098, + 724599872, + 594794875, + 41565264, + 541053051, + 499696652, + 673071936, + 462891077, + 973903762, + 61692380, + 336713491, + 372661682, + 550840795, + 51839931, + 718592873, + 87838863 + ], + "page": { + "num": 1, + "size": 16, + "total": 25 + }, + "archives": [ + { + "aid": 695029098, + "title": "Python控制Minecraft教程(下):自动建造", + "pubdate": 1677321251, + "ctime": 1677321251, + "state": 0, + "pic": "http://i1.hdslb.com/bfs/archive/187c0ba21b9ceba908a8760e83d49f466316824b.jpg", + "duration": 275, + "stat": { + "view": 26555 + }, + "bvid": "BV1k24y1J78X", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 724599872, + "title": "『教程』一看就懂!Github基础教程", + "pubdate": 1646740815, + "ctime": 1646740824, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/1401ebe64e88deddf2b44ad6a740ff8872c2fda6.jpg", + "duration": 296, + "stat": { + "view": 2412054 + }, + "bvid": "BV1hS4y1S7wL", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 594794875, + "title": "『教程』手把手教你流畅访问Github", + "pubdate": 1647345613, + "ctime": 1647336725, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/71cc640a84087cc99399449c00b93212fe78ee6f.jpg", + "duration": 236, + "stat": { + "view": 910491 + }, + "bvid": "BV1Aq4y1q7hr", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 41565264, + "title": "《Python负基础到入门教程》专为\"非计算机专业和编程困难户\"制作(全13集 配音字幕重制版)", + "pubdate": 1548316071, + "ctime": 1548316072, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/5f4f6acfc00723c84f726d35add94b1d4b4ee482.jpg", + "duration": 6395, + "stat": { + "view": 261286 + }, + "bvid": "BV1et411b76c", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 541053051, + "title": "『教程』文字频频乱码 这背后是显卡的扭曲还是规则的沦丧?", + "pubdate": 1592996906, + "ctime": 1592996907, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/8a3c3e3d01a91776763d34bba79add698869c82d.jpg", + "duration": 381, + "stat": { + "view": 1184937 + }, + "bvid": "BV1ai4y1x7Uz", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 499696652, + "title": "『教程』VsCode五分钟上手教程 无一句废话", + "pubdate": 1601207369, + "ctime": 1601207369, + "state": 0, + "pic": "http://i1.hdslb.com/bfs/archive/cb78c07a090ed456bdcc217b0417670867772a29.jpg", + "duration": 329, + "stat": { + "view": 417610 + }, + "bvid": "BV1bK411P767", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 673071936, + "title": "『教程』补码怎么来的?", + "pubdate": 1620994814, + "ctime": 1620986531, + "state": 0, + "pic": "http://i1.hdslb.com/bfs/archive/12c02599321a0b1386b29ddc4653ff7df9bd54b4.jpg", + "duration": 445, + "stat": { + "view": 247578 + }, + "bvid": "BV16U4y1t7LD", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 462891077, + "title": "『教程』回调函数是个啥?", + "pubdate": 1631274885, + "ctime": 1631274885, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/df294350462558601f65b743ca25e2fdc01de628.jpg", + "duration": 452, + "stat": { + "view": 213895 + }, + "bvid": "BV1vL411t78b", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 98 + }, + { + "aid": 973903762, + "title": "『教程』堆栈是个啥?", + "pubdate": 1625227205, + "ctime": 1625227209, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/bf7956b6311ec0787fd52d1293bb4287d16b7e65.jpg", + "duration": 370, + "stat": { + "view": 535174 + }, + "bvid": "BV1P44y1q7uL", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 99 + }, + { + "aid": 61692380, + "title": "『教程』什么是递归?", + "pubdate": 1564660818, + "ctime": 1564637347, + "state": 0, + "pic": "http://i1.hdslb.com/bfs/archive/4af853671204b9bc631fada1934a3e86145a7d19.jpg", + "duration": 658, + "stat": { + "view": 487397 + }, + "bvid": "BV194411f71o", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 79 + }, + { + "aid": 336713491, + "title": "『教程』几分钟听懂迭代器", + "pubdate": 1636713476, + "ctime": 1636713476, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/6e255cce7c0303ab0211acd0f9d1ec5980ff03f7.jpg", + "duration": 453, + "stat": { + "view": 110688 + }, + "bvid": "BV18R4y1t7Hg", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 97 + }, + { + "aid": 372661682, + "title": "『教程』桌面精灵是怎样实现的?", + "pubdate": 1604916264, + "ctime": 1604916264, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/aaa8bb7b6fced63dd4792e28c1f78ba903fcc4cc.jpg", + "duration": 326, + "stat": { + "view": 168775 + }, + "bvid": "BV1aZ4y1V7aa", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 550840795, + "title": "『教程』什么是钩子技术?", + "pubdate": 1642744335, + "ctime": 1642744335, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/380b1ff9726c673411cf916b03268c7fb16aff68.jpg", + "duration": 240, + "stat": { + "view": 237568 + }, + "bvid": "BV1Cq4y1c7kK", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 51839931, + "title": "『教程』学编程前必知的8个电脑操作", + "pubdate": 1557313623, + "ctime": 1557313623, + "state": 0, + "pic": "http://i2.hdslb.com/bfs/archive/b54535ee3ff27006912d8013f2ea1667b2a50f80.jpg", + "duration": 641, + "stat": { + "view": 139385 + }, + "bvid": "BV1t4411v78E", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 718592873, + "title": "『教程』这些常见编程单词到底该怎么读?看你能否读对?对✔❌✅☑", + "pubdate": 1634300675, + "ctime": 1634265090, + "state": 0, + "pic": "http://i1.hdslb.com/bfs/archive/de43275f44aea9f6d79c13ee68c6dcdfc9e5fc5e.jpg", + "duration": 783, + "stat": { + "view": 81193 + }, + "bvid": "BV1JQ4y1D79p", + "ugc_pay": 0, + "interactive_video": true, + "enable_vt": 0, + "vt_display": "", + "playback_position": 100 + }, + { + "aid": 87838863, + "title": "『教程』什么是环境变量", + "pubdate": 1581258353, + "ctime": 1581258353, + "state": 0, + "pic": "http://i0.hdslb.com/bfs/archive/331b2304d8262c4252f338599846761d6a5a8e0c.jpg", + "duration": 353, + "stat": { + "view": 99797 + }, + "bvid": "BV1w741147G9", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + } + ] + } +} +``` + +
+ +## 根据关键词查找视频 + +> https://api.bilibili.com/x/series/recArchivesByKeywords + +*请求方式:GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| mid | num | 用户 mid | 必要 | | +| keywords | str | 关键词 | 必要 | 可为空, 即获取所有视频 | +| ps | num | 每页视频数 | 非必要 | 默认为 0, 留空为 20,最大值 100 | +| pn | num | 页码 | 非必要 | 留空为 1,为 0 则直接忽略 ps 参数获取所有 | +| orderby | str | 排序方式 | 非必要 | 最新发布: pubdate(默认)
最多播放: views
senddate: 最新发布 | +| series_id | num | 系列 ID | 非必要 | 用于过滤结果, 即若某一视频包含在系列内则不返回该视频 | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| archives | arr | 视频列表 | | +| page | obj | 页码信息 | | + +`archives` 数组: + +同[获取视频合集信息](#获取视频合集信息)中的`archives`数组 + +`page` 对象: + +同[获取视频合集信息](#获取视频合集信息)中的`page`对象 + +**示例:** + +查询用户 `mid=2` 关键词为 `幕` 的视频, 不限制每页视频数 + +```shell +curl -G "https://api.bilibili.com/x/series/recArchivesByKeywords" \ +--data-urlencode "mid=2" \ +--data-urlencode "keywords=幕" \ +--data-urlencode "ps=0" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "archives": [ + { + "aid": 120040, + "title": "高级语言弹幕测试", + "pubdate": 1311616515, + "ctime": 1497344798, + "state": 0, + "pic": "http://i1.hdslb.com/bfs/archive/55a553659799d8a6fcb645d8f1f9df418ad6fe4e.jpg", + "duration": 911, + "stat": { + "view": 3584767 + }, + "bvid": "BV1Xx411c7cH", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 2, + "title": "字幕君交流场所", + "pubdate": 1252458549, + "ctime": 1497344798, + "state": 0, + "pic": "http://static.hdslb.com/images/transparent.gif", + "duration": 2055, + "stat": { + "view": 4609291 + }, + "bvid": "BV1xx411c7mD", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + }, + { + "aid": 271, + "title": "弹幕测试专用", + "pubdate": 1249886475, + "ctime": 1497344798, + "state": 0, + "pic": "http://i1.hdslb.com/bfs/archive/a5980672f3d03e8292148748a63de99cd45679d3.jpg", + "duration": 1213, + "stat": { + "view": 4857422 + }, + "bvid": "BV1xx411c7Xg", + "ugc_pay": 0, + "interactive_video": false, + "enable_vt": 0, + "vt_display": "", + "playback_position": 0 + } + ], + "page": { + "num": 1, + "size": 0, + "total": 3 + } + } +} +``` + +
+ +## 创建视频列表 + +> https://api.bilibili.com/x/series/series/createAndAddArchives + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ----| ---- | ------ | ---- | +| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | | + +**正文参数 (multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| mid | num | 用户 mid | 必要 | | +| name | str | 标题 | 必要 | | +| keywords | str | 关键词 | 不必要 | | +| description | str | 简介 | 不必要 | | +| aids | str | 视频 aid 列表 | 不必要 | 以 `,` 分隔, 如 `2,112861,112861976201494,976201494` | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------------ | ---- | +| series_id | num | 视频列表 ID | | + +**示例:** + +为 `mid=616368979` 创建视频列表, 标题为 `NAME`, 视频为 `112861976201494` + +```shell +curl -X POST --url "https://api.bilibili.com/x/series/series/createAndAddArchives" \ +--url-query "csrf=xxxxxxxxxx" \ +--data-urlencode "mid=616368979" \ +--data-urlencode "name=NAME" \ +--data-urlencode "aids=112861976201494" \ +-b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "series_id": 4269765 + } +} +``` + +
+ +## 删除视频列表 + +> https://api.bilibili.com/x/series/series/delete + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ----| ---- | ------ | ---- | +| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | | +| mid | num | 用户 mid | 必要 | | +| series_id | num | 视频列表 ID | 必要 | | +| aids | str | 空 | 不必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 空 | | + +**示例:** + +为 `mid=616368979` 删除视频列表 `series_id=4269765` + +```shell +curl -X POST --url "https://api.bilibili.com/x/series/series/delete" \ +--url-query "csrf=xxxxxxxxxx" \ +--url-query "series_id=4269765" \ +--url-query "mid=616368979" \ +-b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 删除视频列表中的稿件 + +> https://api.bilibili.com/x/series/series/delArchives + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ----| ---- | ------ | ---- | +| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | | + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| mid | num | 用户 mid | 必要 | | +| series_id | num | 视频列表 ID | 必要 | | +| aids | str | 视频 aid 列表 | 必要 | 以 `,` 分隔, 如 `2,112861,112861976201494,976201494` | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------- | +| code | num | 返回值 | 0: 成功 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 空 | | + +**示例:** + +为 `mid=616368979` 删除视频列表 `series_id=4269782` 中的 `112861976201494` + +```shell +curl -X POST --url "https://api.bilibili.com/x/series/series/delArchives" \ +--url-query "csrf=xxxxxxxxxx" \ +--data-urlencode "mid=616368979" \ +--data-urlencode "series_id=4269782" \ +--data-urlencode "aids=112861976201494" \ +-b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 添加稿件至视频列表 + +> https://api.bilibili.com/x/series/series/addArchives + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +同[删除视频列表中的稿件](#删除视频列表中的稿件) + +**正文参数 (application/x-www-form-urlencoded):** + +同[删除视频列表中的稿件](#删除视频列表中的稿件) + +**JSON回复:** + +同[删除视频列表中的稿件](#删除视频列表中的稿件) + +**示例:** + +为 `mid=616368979` 添加视频 `112861976201494` 至视频列表 `series_id=4269782` + +```shell +curl -X POST --url "https://api.bilibili.com/x/series/series/addArchives" \ +--url-query "csrf=xxxxxxxxxx" \ +--data-urlencode "mid=616368979" \ +--data-urlencode "series_id=4269782" \ +--data-urlencode "aids=112861976201494" \ +-b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ +## 编辑视频列表信息 + +> https://api.bilibili.com/x/series/series/update + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ----| ---- | ------ | ---- | +| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | | + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| mid | num | 用户 mid | 必要 | | +| series_id | num | 视频列表 ID | 必要 | | +| name | str | 标题 | 必要 | | +| keywords | str | 关键词 | 不必要 | | +| description | str | 简介 | 不必要 | | +| add_aids | str | 视频 aid 列表 | 不必要 | 以 `,` 分隔 | +| del_aids | str | 视频 aid 列表 | 不必要 | | +| aids | str | 空 | 不必要 | | + +**JSON回复:** + +同[删除视频列表中的稿件](#删除视频列表中的稿件) + +**示例:** + +为 `mid=616368979` 编辑视频列表 `series_id=4269782`, 设置标题为 `NAME`, 设置简介为空, 设置关键词 `Telnet`, 添加视频 `112861976201494` + +```shell +curl -X POST --url "https://api.bilibili.com/x/series/series/update" \ +--url-query "csrf=xxxxxxxxxx" \ +--data-urlencode "name=NAME" \ +--data-urlencode "mid=616368979" \ +--data-urlencode "series_id=4269782" \ +--data-urlencode "keywords=Telnet" \ +--data-urlencode "add_aids=112861976201494" \ +-b "SESSDATA=xxx" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
diff --git a/docs/video/info.md b/docs/video/info.md new file mode 100644 index 0000000..75c14d8 --- /dev/null +++ b/docs/video/info.md @@ -0,0 +1,4779 @@ +# 视频基本信息 + + + +## 获取视频详细信息(web端) + +> https://api.bilibili.com/x/web-interface/wbi/view +> https://api.bilibili.com/x/web-interface/view + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +限制游客访问的视频需要登录 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|-----|--------|--------|---------------| +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-403:权限不足
-404:无视频
62002:稿件不可见
62004:稿件审核中
62012:仅UP主自己可见 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------------- | ------- | ------------------------------ | ------------------------------------------------------------ | +| bvid | str | 稿件bvid | | +| aid | num | 稿件avid | | +| videos | num | 稿件分P总数 | 默认为1 | +| tid | num | 分区tid | 详情见[视频分区一览](video_zone.md) | +| tid_v2 | num | 分区tid (v2) | 详情见[视频分区一览 (v2)](video_zone_v2.md) | +| tname | str | 子分区名称 | | +| tname_v2 | str | 子分区名称 (v2) | | +| copyright | num | 视频类型 | 1:原创
2:转载
3:未填写 | +| pic | str | 稿件封面图片url | | +| title | str | 稿件标题 | | +| pubdate | num | 稿件发布时间 | 秒级时间戳 | +| ctime | num | 用户投稿时间 | 秒级时间戳 | +| desc | str | 视频简介 | | +| desc_v2 | array | 新版视频简介 | | +| state | num | 视频状态 | 详情见[属性数据文档](attribute_data.md#state字段值稿件状态) | +| ~~attribute~~(已经弃用) | ~~num~~ | ~~稿件属性位配置~~ | 详情见[属性数据文档](attribute_data.md#attribute字段值稿件属性位) | +| duration | num | 稿件总时长(所有分P) | 单位为秒 | +| forward | num | 撞车视频跳转avid | 仅撞车视频存在此字段 | +| mission_id | num | 稿件参与的活动id | | +| redirect_url | str | 重定向url | 仅番剧或影视视频存在此字段
用于番剧&影视的av/bv->ep | +| rights | obj | 视频属性标志 | | +| owner | obj | 视频UP主信息 | | +| stat | obj | 视频状态数 | | +| argue_info | obj | 争议/警告信息 | | +| dynamic | str | 视频同步发布的的动态的文字内容 | | +| cid | num | 视频1P cid | | +| dimension | obj | 视频1P分辨率 | | +| premiere | | null | | +| teenage_mode | num | | 用于青少年模式 | +| is_chargeable_season | bool | | | +| is_story | bool | 是否为动态视频 | | +| is_upower_exclusive | bool | 是否为充电专属视频 | | +| is_upower_play | bool | | | +| is_upower_preview | bool | 充电专属视频是否支持试看 | | +| no_cache | bool | 是否不允许缓存? | | +| pages | array | 视频分P列表 | | +| subtitle | obj | 视频CC字幕信息 | | +| ugc_season | obj | 视频合集信息 | 不在合集中的视频无此项 | +| staff | array | 合作成员列表 | 非合作视频无此项 | +| is_season_display | bool | | | +| user_garb | obj | 用户装扮信息 | | +| honor_reply | obj | | | +| like_icon | str | 空串 | | +| need_jump_bv | bool | 需要跳转到BV号? | | +| disable_show_up_info | bool | 禁止展示UP主信息? | | +| is_story_play | bool | | 作用未知,可能与动态视频有关 | +| is_view_self | bool | 是否尽自己可见 | | + +`data`中的`desc_v2`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|--------|-----| +| 0 | obj | 新版简介内容 | | + +`desc_v2`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|------|-----| +| raw_text | str | 简介内容 |type=1时显示原文
type=2时显示'@'+raw_text+' '并链接至biz_id的主页| +| type | num | 类型 |1:普通,2:@他人| +| biz_id | num |被@用户的mid|=0,当type=1| + +`data`中的`rights`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------|-----|--------------|--------| +| bp | num | 是否允许承包 | | +| elec | num | 是否支持充电 | | +| download | num | 是否允许下载 | | +| movie | num | 是否电影 | | +| pay | num | 是否PGC付费 | | +| hd5 | num | 是否有高码率 | | +| no_reprint | num | 是否显示“禁止转载”标志 | | +| autoplay | num | 是否自动播放 | | +| ugc_pay | num | 是否UGC付费 | | +| is_cooperation | num | 是否为联合投稿 | | +| ugc_pay_preview | num | 0 | 作用尚不明确 | +| no_background | num | 0 | 作用尚不明确 | +| clean_mode | num | 0 | 作用尚不明确 | +| is_stein_gate | num | 是否为互动视频 | | +| is_360 | num | 是否为全景视频 | | +| no_share | num | 0 | 作用尚不明确 | +| arc_pay | num | 0 | 作用尚不明确 | +| free_watch | num | 0 | 作用尚不明确 | + +`data`中的`owner`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|-----| +| mid | num | UP主mid | | +| name | str | UP主昵称 | | +| face | str | UP主头像 | | + +`data`中的`stat`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ------- | +| aid | num | 稿件avid | | +| view | num | 播放数 | | +| danmaku | num | 弹幕数 | | +| reply | num | 评论数 | | +| favorite | num | 收藏数 | | +| coin | num | 投币数 | | +| share | num | 分享数 | | +| now_rank | num | 当前排名 | | +| his_rank | num | 历史最高排行 | | +| like | num | 获赞数 | | +| dislike | num | 点踩数 | 恒为`0` | +| evaluation | str | 视频评分 | | +| vt | int | 作用尚不明确 | 恒为`0` | + +`data`中的`argue_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ----------------- | ------------ | +| argue_link | str | | 作用尚不明确 | +| argue_msg | str | 警告/争议提示信息 | | +| argue_type | int | | 作用尚不明确 | + +`data`中的`pages`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|----------|---------| +| 0 | obj | 1P内容 | 无分P仅有此项 | +| n | obj | (n+1)P内容 | | +| …… | obj | …… | …… | + +`pages`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------|-----|-----------|---------------------------------------------| +| cid | num | 分P cid | | +| page | num | 分P序号 | 从1开始 | +| from | str | 视频来源 | vupload:普通上传(B站)
hunan:芒果TV
qq:腾讯 | +| part | str | 分P标题 | | +| duration | num | 分P持续时间 | 单位为秒 | +| vid | str | 站外视频vid | 仅站外视频有效 | +| weblink | str | 站外视频跳转url | 仅站外视频有效 | +| dimension | obj | 当前分P分辨率 | 部分较老视频无分辨率值 | + +`pages`数组中的对象中的`dimension`对象(同`data`中的`dimension`对象): + +| 字段 | 类型 | 内容 | 备注 | +|--------|-----|---------|----------------| +| width | num | 当前分P 宽度 | | +| height | num | 当前分P 高度 | | +| rotate | num | 是否将宽高对换 | 0:正常
1:对换 | + +`subtitle`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-------|----------|-----| +| allow_submit | bool | 是否允许提交字幕 | | +| list | array | 字幕列表 | 未登录为空 | + +`subtitle`对象中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|---------|-----| +| 0 | obj | 字幕1 | | +| n | obj | 字幕(n+1) | | +| …… | obj | …… | …… | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|------|---------------|-----| +| id | num | 字幕id | | +| lan | str | 字幕语言 | | +| lan_doc | str | 字幕语言名称 | | +| is_lock | bool | 是否锁定 | | +| author_mid | num | 字幕上传者mid | | +| subtitle_url | str | json格式字幕文件url | | +| author | obj | 字幕上传者信息 | | + +`list`数组中的对象中的`author`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------------|-----|------------|--------| +| mid | num | 字幕上传者mid | | +| name | str | 字幕上传者昵称 | | +| sex | str | 字幕上传者性别 | 男 女 保密 | +| face | str | 字幕上传者头像url | | +| sign | str | 字幕上传者签名 | | +| rank | num | 10000 | 作用尚不明确 | +| birthday | num | 0 | 作用尚不明确 | +| is_fake_account | num | 0 | 作用尚不明确 | +| is_deleted | num | 0 | 作用尚不明确 | + +`ugc_season`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------------|-------|---------|--------| +| id | num | 视频合集id | | +| title | str | 视频合集标题 | | +| mid | str | 视频合集作者id | | +| intro | str | 视频合集介绍 | | +| sign_state | num | ? | 作用尚不明确 | +| attribute | num | 稿件属性位 | 详情见[属性数据文档](attribute_data.md#attribute字段值(稿件属性位)) | +| sections | array | 视频合集中分部列表,名称可由up主自定义,默认为正片 | | +| stat | obj | 视频合集状态数 | | +| ep_count | num | 视频合集中视频数量 | | +| season_type | num | 作用尚不明确 | | +| is_pay_season | bool | 是否为付费合集 | | +| enable_vt | num | 作用尚不明确 | | + +`ugc_season`中的`sections`数组: + +| 字段 | 类型 | 内容 | 备注 | +|------------|-------|---------|--------| +| season_id | num | 视频合集中分部所属视频合集id | | +| section_id | num | 视频合集中分部id | | +| title | str | 视频合集中分部标题 | | +| type | num | ? | 作用尚不明确 | +| episodes | array | 视频合集中分部的视频列表 | | + +`sections`中的`episodes`数组: + +| 字段 | 类型 | 内容 | 备注 | +|------------|-------|---------|--------| +| season_id | num | 视频合集中分部中视频所属视频合集id | | +| section_id | num | 视频合集中视频合集中分部中视频所属视频合集分部id | | +| id | num | 视频合集分部中视频id(以下简称视频) | | +| aid | num | 视频aid | | +| cid | num | 视频cid | | +| title | str | 视频标题 | 合集列表中展示的标题。默认视频真实标题,在[创作中心-合集管理-单集标题](https://member.bilibili.com/platform/upload-manager/ep)修改后则以修改后为准 | +| ~~attribute~~(已经弃用) | ~~num~~ | ~~稿件属性位配置~~ | 详情见[属性数据文档](attribute_data.md#attribute字段值(稿件属性位)) | +| arc | obj | 视频详细信息 | 基本同「[获取视频详细信息(web端)](#获取视频详细信息(web端))」中的data对象 | + +`ugc_season`中的`stat`对象: + +|字段 | 类型 | 内容 | 备注 | +|------------|-------|---------|--------| +| season_id | num | 视频合集id | | +| view | num | 视频合集总浏览量 | | +| danmaku | num | 视频合集总弹幕量 | | +| reply | num | 视频合集总评论量 | | +| fav | num | 视频合集总收藏数 | | +| coin | num | 视频合集总投币数 | | +| share | num | 视频合集总分享数 | | +| now_rank | num | 视频合集当前排名 | | +| his_rank | num | 视频合集历史排名 | | +| like | num | 视频合集总获赞数 | | +| vt | num | 作用尚不明确 | | +| vv | num | 作用尚不明确 | | + +`ugc_season`示例 + +```jsonc + "ugc_season": { + "id": 2974525, + "title": "楚汉传奇", + "cover": "https://archive.biliimg.com/bfs/archive/5a853e8bd10a041360b45a462785d90a58ec469e.png", + "mid": 1557073149, + "intro": "", + "sign_state": 0, + "attribute": 140, + "sections": [ + { + "season_id": 2974525, + "id": 3341804, + "title": "正片", + "type": 1, + "episodes": [ + { + "season_id": 2974525, + "section_id": 3341804, + "id": 64976947, + "aid": 1804383120, + "cid": 1541093346, + "title": "项燕的10万大军惨败秦国,临死前,立下狠誓“楚虽三户,亡秦必楚”", + "attribute": 0, + "arc": { + "aid": 1804383120, + "videos": 0, + "type_id": 0, + "type_name": "", + "copyright": 0, + "pic": "http://i1.hdslb.com/bfs/archive/9d0ebd0a8abd7b005466cb57632ddaa550d24dab.jpg", + "title": "项燕的10万大军惨败秦国,临死前,立下狠誓“楚虽三户,亡秦必楚”", + "pubdate": 1715427472, + "ctime": 1715427472, + "desc": "", + "state": 0, + "duration": 612, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 0, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "arc_pay": 0, + "free_watch": 0 + }, + "author": { + "mid": 0, + "name": "", + "face": "" + }, + "stat": { + "aid": 1804383120, + "view": 787330, + "danmaku": 1298, + "reply": 774, + "fav": 2589, + "coin": 1947, + "share": 271, + "now_rank": 0, + "his_rank": 0, + "like": 12320, + "dislike": 0, + "evaluation": "", + "argue_msg": "", + "vt": 2630119, + "vv": 787330 + }, + "dynamic": "", + "dimension": { + "width": 0, + "height": 0, + "rotate": 0 + }, + "desc_v2": null, + "is_chargeable_season": false, + "is_blooper": false, + "enable_vt": 0, + "vt_display": "" + }, + "page": { + "cid": 1541093346, + "page": 1, + "from": "vupload", + "part": "项燕的10万大军惨败秦国,临死前,立下狠誓“楚虽三户,亡秦必楚”", + "duration": 612, + "vid": "", + "weblink": "", + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + } + }, + "bvid": "BV1Tb421b7mi", + "pages": [ + { + "cid": 1541093346, + "page": 1, + "from": "vupload", + "part": "项燕的10万大军惨败秦国,临死前,立下狠誓“楚虽三户,亡秦必楚”", + "duration": 612, + "vid": "", + "weblink": "", + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + } + } + ] + }, + { + "season_id": 2974525, + "section_id": 3341804, + "id": 65121012, + "aid": 1004394994, + "cid": 1542426326, + "title": "卢绾斗鸡输了,眼看十个手指头保不住,刘邦倾家荡产帮了他", + "attribute": 0, + "arc": { + /// + } + } + ] + } + ], + "stat": { + "season_id": 3617611, + "view": 1826438, + "danmaku": 5193, + "reply": 3036, + "fav": 5970, + "coin": 2303, + "share": 663, + "now_rank": 0, + "his_rank": 0, + "like": 40848, + "vt": 0, + "vv": 0 + }, + "ep_count": 21, + "season_type": 1, + "is_pay_season": false, + "enable_vt": 0 + + } +``` + +`staff`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|-----------|-----| +| 0 | obj | 合作成员1 | | +| n | obj | 合作成员(n+1) | | +| …… | obj | …… | …… | + +`staff`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|---------|-----| +| mid | num | 成员mid | | +| title | str | 成员名称 | | +| name | str | 成员昵称 | | +| face | str | 成员头像url | | +| vip | obj | 成员大会员状态 | | +| official | obj | 成员认证信息 | | +| follower | num | 成员粉丝数 | | +| label_style | num | | | + +`staff`数组中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------------|-----|--------|---------------------------| +| type | num | 成员会员类型 | 0:无
1:月会员
2:年会员 | +| status | num | 会员状态 | 0:无
1:有 | +| due_date | num | 到期时间 | UNIX 毫秒时间戳 | +| vip_pay_type | num | | | +| theme_type | num | 0 | | +| label | obj | | | + +`staff`数组中的对象中的`official`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----|--------|---------------------------------------| +| role | num | 成员认证级别 | 见[用户认证类型一览](../user/official_role.md) | +| title | str | 成员认证名 | 无为空 | +| desc | str | 成员认证备注 | 无为空 | +| type | num | 成员认证类型 | -1:无
0:有 | + +`data`中的`user_garb`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------|-----|-------|-----| +| url_image_ani_cut | str | 某url? | | + +`data`中的`honor_reply`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-------|-----|-----| +| honor | array | | | + +`honor`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------------|-----|-------------------------------------|-----| +| aid | num | 当前稿件aid | | +| type | num | 1:入站必刷收录
2:第?期每周必看
3:全站排行榜最高第?名
4:热门 | | +| desc | num | 描述 | | +| weekly_recommend_num | num | | | + +**示例:** + +获取视频`av85440373`/`BV117411r7R1`的基本信息 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view' \ +--data-urlencode 'aid=85440373' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view' \ +--data-urlencode 'bvid=BV117411r7R1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "bvid": "BV117411r7R1", + "aid": 85440373, + "videos": 1, + "tid": 28, + "tid_v2": 2061, + "tname": "原创音乐", + "tname_v2": "人力VOCALOID", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg", + "title": "当我给拜年祭的快板加了电音配乐…", + "pubdate": 1580377255, + "ctime": 1580212263, + "desc": "【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天", + "desc_v2": [ + { + "raw_text": "【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天", + "type": 1, + "biz_id": 0 + } + ], + "state": 0, + "duration": 486, + "mission_id": 11838, + "rights": { + "bp": 0, + "elec": 0, + "download": 1, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "clean_mode": 0, + "is_stein_gate": 0, + "is_360": 0, + "no_share": 0, + "arc_pay": 0, + "free_watch": 0 + }, + "owner": { + "mid": 66606350, + "name": "陈楒潼桶桶桶", + "face": "https://i2.hdslb.com/bfs/face/c9af3b32cf74baec5a4b65af8ca18ae5ff571f77.jpg" + }, + "stat": { + "aid": 85440373, + "view": 2404179, + "danmaku": 12348, + "reply": 2676, + "favorite": 58329, + "coin": 72793, + "share": 9620, + "now_rank": 0, + "his_rank": 55, + "like": 161270, + "dislike": 0, + "evaluation": "", + "vt": 0 + }, + "argue_info": { + "argue_msg": "", + "argue_type": 0, + "argue_link": "" + }, + "dynamic": "进来就出不去了!!!\n#全民音乐UP主##CB##warma##电音##快板##拜年祭##诸神的奥运##编曲##Remix#", + "cid": 146044693, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "premiere": null, + "teenage_mode": 0, + "is_chargeable_season": false, + "is_story": false, + "is_upower_exclusive": false, + "is_upower_play": false, + "is_upower_preview": false, + "enable_vt": 0, + "vt_display": "", + "is_upower_exclusive_with_qa": false, + "no_cache": false, + "pages": [ + { + "cid": 146044693, + "page": 1, + "from": "vupload", + "part": "建议改成:建议改成:诸 神 的 电 音 节(不是)", + "duration": 486, + "vid": "", + "weblink": "", + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "ctime": 1580212263 + } + ], + "subtitle": { + "allow_submit": false, + "list": [ + { + "id": 1061981378473779968, + "lan": "ai-zh", + "lan_doc": "中文(自动生成)", + "is_lock": false, + "subtitle_url": "", + "type": 1, + "id_str": "1061981378473779968", + "ai_type": 0, + "ai_status": 2, + "author": { + "mid": 0, + "name": "", + "sex": "", + "face": "", + "sign": "", + "rank": 0, + "birthday": 0, + "is_fake_account": 0, + "is_deleted": 0, + "in_reg_audit": 0, + "is_senior_member": 0, + "name_render": null + } + } + ] + }, + "staff": [ + { + "mid": 66606350, + "title": "UP主", + "name": "陈楒潼桶桶桶", + "face": "https://i2.hdslb.com/bfs/face/c9af3b32cf74baec5a4b65af8ca18ae5ff571f77.jpg", + "vip": { + "type": 2, + "status": 1, + "due_date": 1769443200000, + "vip_pay_type": 1, + "theme_type": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "", + "tv_vip_status": 0, + "tv_vip_pay_type": 0, + "tv_due_date": 0, + "avatar_icon": { + "icon_type": 1, + "icon_resource": {} + } + }, + "official": { + "role": 1, + "title": "bilibili 知名音乐UP主", + "desc": "", + "type": 0 + }, + "follower": 616428, + "label_style": 0 + }, + { + "mid": 53456, + "title": "曲绘", + "name": "Warma", + "face": "https://i2.hdslb.com/bfs/face/87c0b7e4d3eedf04c458a82b9271013beaa4bc59.jpg", + "vip": { + "type": 2, + "status": 1, + "due_date": 1770480000000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "年度大会员", + "label_theme": "annual_vip", + "text_color": "#FFFFFF", + "bg_style": 1, + "bg_color": "#FB7299", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/0DFy9BHgwE.gif", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d7e624d13d3e134251e4174a7318c19a8edbd71.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/uckjAv3Npy.png" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 3, + "avatar_subscript_url": "", + "tv_vip_status": 1, + "tv_vip_pay_type": 1, + "tv_due_date": 1753286400, + "avatar_icon": { + "icon_type": 1, + "icon_resource": {} + } + }, + "official": { + "role": 1, + "title": "bilibili 知名UP主", + "desc": "", + "type": 0 + }, + "follower": 4818052, + "label_style": 0 + } + ], + "is_season_display": false, + "user_garb": { + "url_image_ani_cut": "https://i0.hdslb.com/bfs/garb/item/e4c1c34e8b87fc05a893ed4a04ad322f75edbed9.bin" + }, + "honor_reply": { + "honor": [ + { + "aid": 85440373, + "type": 2, + "desc": "第45期每周必看", + "weekly_recommend_num": 45 + }, + { + "aid": 85440373, + "type": 3, + "desc": "全站排行榜最高第55名", + "weekly_recommend_num": 0 + }, + { + "aid": 85440373, + "type": 4, + "desc": "热门", + "weekly_recommend_num": 0 + }, + { + "aid": 85440373, + "type": 7, + "desc": "热门收录", + "weekly_recommend_num": 0 + } + ] + }, + "like_icon": "", + "need_jump_bv": false, + "disable_show_up_info": false, + "is_story_play": 1, + "is_view_self": false + } +} +``` + +
+ +视频标题为:`当我给拜年祭的快板加了电音配乐…` + +视频分区为:`tid=28(音乐->原创音乐)` + +视频时长:`486s` + +视频发布时间:`2020/1/30 17:40:55` + +视频投稿时间:`2020/1/28 19:51:3` + +视频分P为:`1` + +视频类型为:`1(原创)` + +视频UP主为:`66606350(Crazy_Bucket_陈楒潼)` + +视频简介为: + +`【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天` + +视频状态为:`0(开放浏览)` + +视频属性为: `显示“禁止转载“标志`、`高清`、`禁止其他人添加TAG`、`联合投稿视频` + +视频封面为: + +https://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg + + + +## 获取视频超详细信息(web端) + +> https://api.bilibili.com/x/web-interface/view/detail + +> https://api.bilibili.com/x/web-interface/wbi/view/detail + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +限制游客访问的视频需要登录 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------------------- | ---------- | ------------------ | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| need_elec | num | 是否获取UP主充电信息 | 非必要 | 0:否
1:是 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-403:权限不足
-404:无视频
62002:稿件不可见
62004:稿件审核中
62012:仅UP主自己可见 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ---------------- | ------------ | +| View | obj | 视频基本信息 | | +| Card | obj | 视频UP主信息 | | +| Tags | array | 视频TAG信息 | | +| Reply | obj | 视频热评信息 | | +| Related | array | 推荐视频信息 | | +| Spec | null | ? | 作用尚不明确 | +| hot_share | obj | ? | 作用尚不明确 | +| elec | 有效时:obj
无效时:null | 充电信息 | 当请求参数 `need_elec=1` 且有充电信息时有效 | +| recommend | null | ? | 作用尚不明确 | +| emergency | obj | 视频操作按钮信息 | | +| view_addit | obj | ? | 作用尚不明确 | +| guide | null | ? | 作用尚不明确 | +| query_tags | null | ? | 作用尚不明确 | +| participle | array | 分词信息 | 用于推荐 | +| module_ctrl | null | ? | 作用尚不明确 | +| replace_recommend | bool | ? | 作用尚不明确 | + +`data`中的`View`对象: + +基本同「[获取视频详细信息(web端)](#获取视频详细信息web端)」中的data对象 + +`data`中的`Card`对象: + +基本同「[用户名片信息](../user/info.md#用户名片信息)」中的data对象 + +`data`中的`Tags`数组: + +基本同「[获取视频TAG信息(新)](tags.md#获取视频TAG信息新)」中的data数组 + +`data`中的`Reply`对象: + +基本同「[获取评论区热评](../comment/list.md#获取评论区热评)」中的data对象 + +`data`中的`Related`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|-----------|-----| +| 0 | obj | 推荐视频1 | | +| n | obj | 推荐视频(n+1) | | +| …… | obj | …… | …… | + +`Related`数组中的对象: + +基本同「[获取视频详细信息(web端)](#获取视频详细信息web端)」中的data对象,已知部分字段有差异,如没有分P信息 + +`data`中的`hot_share`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-------|-------|--------| +| show | bool | false | 作用尚不明确 | +| list | array | 空 | 作用尚不明确 | + +`data`中的`elec`对象: + +基本同「[获取视频充电鸣谢名单](../electric/charge_list.md#获取视频充电鸣谢名单)」中的data对象 + +`data`中的`emergency`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------------ | -------- | +| no_like | bool | 是否不显示点赞按钮 | | +| no_coin | bool | 是否不显示投币按钮 | | +| no_fav | bool | 是否不显示收藏按钮 | | +| no_share | bool | 是否不显示分享按钮 | | + +`data`中的`view_addit`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------------- | ------------ | +| 63 | bool | 是否不显示直播推荐 | | +| 64 | bool | 是否不显示活动推荐 | | +| 69 | bool | ? | 作用尚不明确 | +| 71 | bool | 是否不显示标签与笔记 | | +| 72 | bool | ? | 作用尚不明确 | + +**示例:** + +获取视频`av170001`/`BV17x411w7KC`的详细信息 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view/detail' \ +--data-urlencode 'aid=170001' \ +--data-urlencode 'need_elec=1' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view/detail' \ +--data-urlencode 'bvid=BV17x411w7KC' \ +--data-urlencode 'need_elec=1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "View": { + "bvid": "BV17x411w7KC", + "aid": 170001, + "videos": 10, + "tid": 193, + "tid_v2": 2017, + "tname": "MV", + "tname_v2": "MV", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/1ada8c32a9d168e4b2ee3e010f24789ba3353785.jpg", + "title": "【MV】保加利亚妖王AZIS视频合辑", + "pubdate": 1320850533, + "ctime": 1497380562, + "desc": "sina 保加利亚超级天王 Azis1999年出道。他的音乐融合保加利亚名族曲风chalga和pop、rap等元素,不过他惊艳的易装秀与浮夸的角色诠释才是他最为出名的地方 Azis与众多保加利亚天王天后级歌手都有过合作.06年,他作为Mariana Popova的伴唱,在欧洲半决赛上演唱了他们的参赛曲Let Me Cry 06年他被Velikite Balgari评为保加利亚有史以来最伟大的名人之一", + "desc_v2": [ + { + "raw_text": "sina 保加利亚超级天王 Azis1999年出道。他的音乐融合保加利亚名族曲风chalga和pop、rap等元素,不过他惊艳的易装秀与浮夸的角色诠释才是他最为出名的地方 Azis与众多保加利亚天王天后级歌手都有过合作.06年,他作为Mariana Popova的伴唱,在欧洲半决赛上演唱了他们的参赛曲Let Me Cry 06年他被Velikite Balgari评为保加利亚有史以来最伟大的名人之一", + "type": 1, + "biz_id": 0 + } + ], + "state": 0, + "duration": 2412, + "rights": { + "bp": 0, + "elec": 0, + "download": 1, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "clean_mode": 0, + "is_stein_gate": 0, + "is_360": 0, + "no_share": 0, + "arc_pay": 0, + "free_watch": 0 + }, + "owner": { + "mid": 122541, + "name": "冰封.虾子", + "face": "http://i0.hdslb.com/bfs/face/40c46ee74dd6ea33d46c38cd6083e6a1286aa482.gif" + }, + "stat": { + "aid": 170001, + "view": 45252521, + "danmaku": 914336, + "reply": 184686, + "favorite": 883733, + "coin": 291585, + "share": 12779204, + "now_rank": 0, + "his_rank": 13, + "like": 928358, + "dislike": 0, + "evaluation": "", + "vt": 0 + }, + "argue_info": { + "argue_msg": "", + "argue_type": 0, + "argue_link": "" + }, + "dynamic": "", + "cid": 279786, + "dimension": { + "width": 512, + "height": 288, + "rotate": 0 + }, + "premiere": null, + "teenage_mode": 0, + "is_chargeable_season": false, + "is_story": false, + "is_upower_exclusive": false, + "is_upower_play": false, + "is_upower_preview": false, + "enable_vt": 0, + "vt_display": "", + "is_upower_exclusive_with_qa": false, + "no_cache": false, + "pages": [ + { + "cid": 279786, + "page": 1, + "from": "vupload", + "part": "Хоп", + "duration": 199, + "vid": "", + "weblink": "", + "dimension": { + "width": 512, + "height": 288, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 275431, + "page": 2, + "from": "vupload", + "part": "Imash li surce", + "duration": 205, + "vid": "", + "weblink": "", + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 279787, + "page": 3, + "from": "vupload", + "part": "No Kazvam Ti Stiga", + "duration": 308, + "vid": "", + "weblink": "", + "dimension": { + "width": 432, + "height": 324, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 280467, + "page": 4, + "from": "vupload", + "part": "Samo za teb", + "duration": 273, + "vid": "", + "weblink": "", + "dimension": { + "width": 360, + "height": 288, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 280468, + "page": 5, + "from": "vupload", + "part": "Tochno sega", + "duration": 241, + "vid": "", + "weblink": "", + "dimension": { + "width": 584, + "height": 360, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 280469, + "page": 6, + "from": "vupload", + "part": "Kak boli", + "duration": 336, + "vid": "", + "weblink": "", + "dimension": { + "width": 384, + "height": 288, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 274491, + "page": 7, + "from": "vupload", + "part": "Obicham Te", + "duration": 250, + "vid": "", + "weblink": "", + "dimension": { + "width": 402, + "height": 208, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 267410, + "page": 8, + "from": "vupload", + "part": "Mrazish", + "duration": 201, + "vid": "", + "weblink": "", + "dimension": { + "width": 540, + "height": 360, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 267714, + "page": 9, + "from": "vupload", + "part": "Няма накъде", + "duration": 201, + "vid": "", + "weblink": "", + "dimension": { + "width": 450, + "height": 360, + "rotate": 0 + }, + "ctime": 1497380562 + }, + { + "cid": 270380, + "page": 10, + "from": "vupload", + "part": "Gadna poroda", + "duration": 198, + "vid": "", + "weblink": "", + "dimension": { + "width": 432, + "height": 324, + "rotate": 0 + }, + "ctime": 1497380562 + } + ], + "subtitle": { + "allow_submit": false, + "list": [] + }, + "is_season_display": false, + "user_garb": { + "url_image_ani_cut": "https://i0.hdslb.com/bfs/garb/item/e4c1c34e8b87fc05a893ed4a04ad322f75edbed9.bin" + }, + "honor_reply": { + "honor": [ + { + "aid": 170001, + "type": 3, + "desc": "全站排行榜最高第13名", + "weekly_recommend_num": 0 + } + ] + }, + "like_icon": "", + "need_jump_bv": false, + "disable_show_up_info": false, + "is_story_play": 0, + "is_view_self": false + }, + "Card": { + "card": { + "mid": "122541", + "name": "冰封.虾子", + "approve": false, + "sex": "保密", + "rank": "10000", + "face": "http://i0.hdslb.com/bfs/face/40c46ee74dd6ea33d46c38cd6083e6a1286aa482.gif", + "face_nft": 0, + "face_nft_type": 0, + "DisplayRank": "0", + "regtime": 0, + "spacesta": 0, + "birthday": "", + "place": "", + "description": "", + "article": 0, + "attentions": [], + "fans": 64052, + "friend": 45, + "attention": 45, + "sign": "路亚钓鱼爱好者交流群411267154", + "level_info": { + "current_level": 6, + "current_min": 0, + "current_exp": 0, + "next_exp": 0 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "", + "n_pid": 0 + }, + "nameplate": { + "nid": 9, + "name": "出道偶像", + "image": "https://i0.hdslb.com/bfs/face/3f2d64f048b39fb6c26f3db39df47e6080ec0f9c.png", + "image_small": "https://i0.hdslb.com/bfs/face/90c35d41d8a19b19474d6bac672394c17b444ce8.png", + "level": "高级勋章", + "condition": "所有自制视频总播放数>=50万" + }, + "Official": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "type": 1, + "status": 0, + "due_date": 1493827200000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "", + "tv_vip_status": 0, + "tv_vip_pay_type": 0, + "tv_due_date": 0, + "avatar_icon": { + "icon_resource": {} + }, + "vipType": 1, + "vipStatus": 0 + }, + "is_senior_member": 0, + "name_render": null + }, + "space": { + "s_img": "http://i1.hdslb.com/bfs/activity-plat/static/LRjqHhi0wL.png", + "l_img": "http://i1.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png" + }, + "following": false, + "archive_count": 382, + "article_count": 0, + "follower": 64052, + "like_num": 1048712 + }, + "Tags": [ + { + "tag_id": 0, + "tag_name": "发现《Hop》", + "music_id": "MA407124762800730394", + "tag_type": "bgm", + "jump_url": "https://music.bilibili.com/h5/music-detail?music_id=MA407124762800730394&cid=279786&aid=170001&na_close_hide=1" + }, + { + "tag_id": 117552, + "tag_name": "保加利亚妖王", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + }, + { + "tag_id": 112503, + "tag_name": "保加利亚", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + }, + { + "tag_id": 2958988, + "tag_name": "Азис", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + }, + { + "tag_id": 2622213, + "tag_name": "azis", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + }, + { + "tag_id": 2512079, + "tag_name": "mv", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + } + ], + "Reply": { + "page": null, + "replies": [ + { + "rpid": 1, + "oid": 0, + "type": 0, + "mid": 0, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 0, + "like": 0, + "action": 0, + "content": null, + "replies": null, + "assist": 0, + "show_follow": false + } + ] + }, + "Related": [ + { + "aid": 1252180876, + "videos": 1, + "tid": 130, + "tname": "音乐综合", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/5a4eef19e38a3fa27f9db53cc45e7233e714ae03.jpg", + "title": "Ricardo Milos - Dancin song [1080p]", + "pubdate": 1711002767, + "ctime": 1711002768, + "desc": "https://www.youtube.com/watch?v=e9ASqhs9770", + "state": 0, + "duration": 259, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 477132, + "name": "TAKERA", + "face": "https://i0.hdslb.com/bfs/face/5af8b319889ba7a7d20ac59edb8464d65f43c1e1.gif" + }, + "stat": { + "aid": 1252180876, + "view": 1590321, + "danmaku": 2766, + "reply": 2405, + "favorite": 58654, + "coin": 13468, + "share": 15966, + "now_rank": 0, + "his_rank": 0, + "like": 144640, + "dislike": 0, + "vt": 0, + "vv": 1590321, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 1483741030, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1hJ4m177RN", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n240327ad1t4c11o1bbzfc2bkvg5fkuc_firsti.jpg", + "pub_location": "中国香港", + "cover43": "", + "tidv2": 2036, + "tnamev2": "舞蹈综合", + "pid_v2": 1004, + "pid_name_v2": "舞蹈", + "bvid": "BV1hJ4m177RN", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 1252180876, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 80433022, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/5242750857121e05146d5d5b13a47a2a6dd36e98.jpg", + "title": "【官方 MV】Never Gonna Give You Up - Rick Astley", + "pubdate": 1577835803, + "ctime": 1577835803, + "desc": "-", + "state": 0, + "duration": 213, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 0, + "autoplay": 0, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 1, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 486906719, + "name": "索尼音乐中国", + "face": "https://i2.hdslb.com/bfs/face/6bc95d0670863d36bf9167a37b825c39ce258506.jpg" + }, + "stat": { + "aid": 80433022, + "view": 91790223, + "danmaku": 128050, + "reply": 170137, + "favorite": 1286326, + "coin": 1061915, + "share": 396054, + "now_rank": 0, + "his_rank": 0, + "like": 2464595, + "dislike": 0, + "vt": 0, + "vv": 91790223, + "fav_g": 10, + "like_g": 0 + }, + "dynamic": "", + "cid": 137649199, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1GJ411x7h7", + "up_from_v2": 15, + "pub_location": "未知", + "cover43": "", + "tidv2": 2017, + "tnamev2": "MV", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1GJ411x7h7", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 80433022, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 718913090, + "videos": 1, + "tid": 27, + "tname": "综合", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/6567760d676268e2bf2e2c57486085a31427ed79.jpg", + "title": "【咩栗】镇 站 之 宝", + "pubdate": 1636448401, + "ctime": 1636448403, + "desc": "可以关注一下可爱的小羊和小狼呀~\n小羊主页:https://space.bilibili.com/745493\n小狼主页:https://space.bilibili.com/617459493\n⚡️☀️\n微博@电击咩阿栗\n微博@呜米嗷呜\n⚡️☀️\n网易云@咩栗\n网易云@呜米", + "state": 0, + "duration": 188, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 674421433, + "name": "呜米咩栗的草原日常", + "face": "https://i1.hdslb.com/bfs/face/5566e3a4786959527a72545f908b5664693a2945.jpg" + }, + "stat": { + "aid": 718913090, + "view": 315224, + "danmaku": 195, + "reply": 462, + "favorite": 2897, + "coin": 702, + "share": 202, + "now_rank": 0, + "his_rank": 0, + "like": 15615, + "dislike": 0, + "vt": 0, + "vv": 315224, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "咩栗,不可以。", + "cid": 436835160, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV14Q4y1S7HU", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n211105a23d8ue6bh0m1ed1cu6yztac5_firsti.jpg", + "cover43": "", + "tidv2": 2047, + "tnamev2": "虚拟UP主", + "pid_v2": 1005, + "pid_name_v2": "二次元", + "bvid": "BV14Q4y1S7HU", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 718913090, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 895258574, + "videos": 2, + "tid": 130, + "tname": "音乐综合", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/b94b8be43cd0a9a12bf1a334541b017a3bd24cb6.jpg", + "title": "【全弹幕】av10388 武器A", + "pubdate": 1648906567, + "ctime": 1648906567, + "desc": "sm9307581\n武器A\n[日常]UP主:博丽·灵梦(UID:13308)\n播放:1605344 | 收藏:20926 | 弹幕:42522\n投稿时间:2010/06/20 10:13\n啊哈哈哈,啊哈哈,啊哈,啊……总之就是武器……", + "state": 0, + "duration": 144, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 104657830, + "name": "尚宜鼎MEMZ", + "face": "https://i1.hdslb.com/bfs/face/6761798442c6e9607c62803ac4fa5fe4a3e7b25b.jpg" + }, + "stat": { + "aid": 895258574, + "view": 3769820, + "danmaku": 22377, + "reply": 2776, + "favorite": 12271, + "coin": 484, + "share": 3748, + "now_rank": 0, + "his_rank": 0, + "like": 47622, + "dislike": 0, + "vt": 0, + "vv": 3769820, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 1491314436, + "dimension": { + "width": 2848, + "height": 1600, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1NP4y1K7Ze", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n240402sa2muwqb7q7sbvedoskth1279_firsti.jpg", + "pub_location": "广东", + "cover43": "", + "tidv2": 2041, + "tnamev2": "动漫剪辑", + "pid_v2": 1005, + "pid_name_v2": "二次元", + "bvid": "BV1NP4y1K7Ze", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 895258574, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 56927206, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/fd8324a72f0c6629f6d9b6af0daa11d950863993.jpg", + "title": "【每天一遍,网抑再见】万恶之源,抖就完事了", + "pubdate": 1561555314, + "ctime": 1561555314, + "desc": "【带字幕版】本人亲自翻译\nBGM:coincidance \n有些人看着看着就抖起来了,别说了,护士姐姐真漂亮\nhttps://www.youtube.com/watch?v=nBHkIWAJitg&feature=share\n肩膀好了,就来摇头吧\nav65659850", + "state": 0, + "duration": 139, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 34232005, + "name": "200斤的五条艾", + "face": "https://i1.hdslb.com/bfs/face/5135289ba858105ae466429ba9610e7980cf73f0.jpg" + }, + "stat": { + "aid": 56927206, + "view": 43534329, + "danmaku": 77687, + "reply": 19894, + "favorite": 1584517, + "coin": 721148, + "share": 563420, + "now_rank": 0, + "his_rank": 15, + "like": 2118557, + "dislike": 0, + "vt": 0, + "vv": 43534329, + "fav_g": 3, + "like_g": 0 + }, + "dynamic": "#沙雕##搞笑视频##魔性#", + "cid": 99428737, + "dimension": { + "width": 960, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1Ax411d7jD", + "up_from_v2": 11, + "cover43": "", + "tidv2": 2059, + "tnamev2": "鬼畜调教", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1Ax411d7jD", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 56927206, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 3643130, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/bc23ac6f17c82700d5c1941e0991bc8a6fcbd46c.png", + "title": "金坷垃原版", + "pubdate": 1453518942, + "ctime": 1497431869, + "desc": "http://v.youku.com/v_show/id_XNTkzMDUxNzI0.html?from=y1.2-1-102.3.1-1.1-1-1-0-0#paction 给知道金坷垃的孩子们补补课", + "state": 0, + "duration": 101, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 11374676, + "name": "LX秦先生", + "face": "https://i2.hdslb.com/bfs/face/90a808cdd9414d5f53e04d85b8929333eb61f474.jpg" + }, + "stat": { + "aid": 3643130, + "view": 11110768, + "danmaku": 29385, + "reply": 7168, + "favorite": 287656, + "coin": 61435, + "share": 190334, + "now_rank": 0, + "his_rank": 0, + "like": 379164, + "dislike": 0, + "vt": 0, + "vv": 11110768, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 5827830, + "dimension": { + "width": 640, + "height": 354, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1Rs411R7Hi", + "cover43": "", + "tidv2": 2059, + "tnamev2": "鬼畜调教", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1Rs411R7Hi", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 3643130, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 1601123876, + "videos": 1, + "tid": 130, + "tname": "音乐综合", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/bc7442c6c54ef573ebe0455104ad87703703fad5.jpg", + "title": "「保加利亚妖王」Hop - Azis 阿吉斯 百万级装备试听【Hi-Res】", + "pubdate": 1709023713, + "ctime": 1709023713, + "desc": "作词 : Azis\n作曲 : Azis\n\n\n\n音响:天朗皇家西敏寺\n功放:麦景图 \n录音MIC:纽曼149 \n录音设备:SSL+ Protools", + "state": 0, + "duration": 189, + "mission_id": 4009709, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 440121192, + "name": "JLRS日落fm", + "face": "https://i0.hdslb.com/bfs/face/008f2cf802f48e1d7f837887a3cefd95b918a0e5.jpg" + }, + "stat": { + "aid": 1601123876, + "view": 549485, + "danmaku": 1576, + "reply": 1569, + "favorite": 7872, + "coin": 5056, + "share": 4117, + "now_rank": 0, + "his_rank": 0, + "like": 22458, + "dislike": 0, + "vt": 0, + "vv": 549485, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "还记得这位妖王吗?", + "cid": 1452568619, + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "season_id": 4499678, + "short_link_v2": "https://b23.tv/BV1e1421f7rA", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n240227sauzmn6l1y49t5cjnklc5tyvk_firsti.jpg", + "pub_location": "吉林", + "cover43": "", + "tidv2": 2024, + "tnamev2": "电台·歌单", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1e1421f7rA", + "season_type": 1, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 1601123876, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 1581914, + "videos": 1, + "tid": 130, + "tname": "音乐综合", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/7437f19df1061f4a9cd2972b81dbd3a6723bf74c.jpg", + "title": "妖王都开始男人了,怎么办!", + "pubdate": 1412259320, + "ctime": 1497428704, + "desc": "音悦台 保加利亚妖男Azis /Азис携手流行男歌手Giorgos Tsalikis/Тсаликис 最新单曲 Estar Loco /Полудяваме\n纯爷们,男人就该干男人,该干的事。", + "state": 0, + "duration": 227, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 4685783, + "name": "FoolishJoker", + "face": "https://i2.hdslb.com/bfs/face/a81786a76af0cbd6d7e35adc488ccc22b0030d72.jpg" + }, + "stat": { + "aid": 1581914, + "view": 2303678, + "danmaku": 5815, + "reply": 6856, + "favorite": 28958, + "coin": 5696, + "share": 14014, + "now_rank": 0, + "his_rank": 0, + "like": 24255, + "dislike": 0, + "vt": 0, + "vv": 2303678, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 2403522, + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1gx411P77L", + "up_from_v2": 8, + "cover43": "", + "tidv2": 2027, + "tnamev2": "音乐综合", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1gx411P77L", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 1581914, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 31130726, + "videos": 1, + "tid": 130, + "tname": "音乐综合", + "copyright": 2, + "pic": "http://i0.hdslb.com/bfs/archive/e9755c62c5a38ec352e424aa0d7d20417c1a3fde.jpg", + "title": "PPAP原版完整视频", + "pubdate": 1536122369, + "ctime": 1536122367, + "desc": "视频时长令强迫症不爽(我故意的)", + "state": 0, + "duration": 121, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 180305935, + "name": "不懂事的记忆", + "face": "https://i1.hdslb.com/bfs/face/7c1510f2fc8911cf885c9b14a94a99db738813c2.jpg" + }, + "stat": { + "aid": 31130726, + "view": 3810989, + "danmaku": 5269, + "reply": 2587, + "favorite": 76845, + "coin": 7721, + "share": 21117, + "now_rank": 0, + "his_rank": 0, + "like": 122042, + "dislike": 0, + "vt": 0, + "vv": 3810989, + "fav_g": 8, + "like_g": 0 + }, + "dynamic": "", + "cid": 54379754, + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1BW411Z7J3", + "up_from_v2": 8, + "cover43": "", + "tidv2": 2027, + "tnamev2": "音乐综合", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1BW411Z7J3", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 31130726, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 675490509, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/58f8f3c8dfcf3b1ac6cf7a7b0eda660aa2e1e1fc.jpg", + "title": "奥地利美术生就业经历", + "pubdate": 1631273645, + "ctime": 1631272999, + "desc": "https://m.youtube.com/watch?v=h7s410TPnWg", + "state": 0, + "duration": 128, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 489656132, + "name": "古米廖夫", + "face": "https://i2.hdslb.com/bfs/face/633ed3ba1ec5bcde5db105849c2498b03f6b7eee.jpg" + }, + "stat": { + "aid": 675490509, + "view": 40823108, + "danmaku": 48676, + "reply": 12360, + "favorite": 952804, + "coin": 557605, + "share": 256173, + "now_rank": 0, + "his_rank": 0, + "like": 1531015, + "dislike": 0, + "vt": 0, + "vv": 40823108, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 405970117, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1jU4y1N7vg", + "up_from_v2": 35, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n210910a2u7yjx97xzec435kyzziyn8s_firsti.jpg", + "pub_location": "黑龙江", + "cover43": "", + "tidv2": 2060, + "tnamev2": "鬼畜剧场", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1jU4y1N7vg", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 675490509, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 44501, + "videos": 1, + "tid": 26, + "tname": "音MAD", + "copyright": 2, + "pic": "http://i0.hdslb.com/bfs/archive/1dff881735a73cdc4757237e45eff03d42c81137.jpg", + "title": "久本雅美の頭がカービィのBGMに合わせて爆発したようです", + "pubdate": 1293118092, + "ctime": 1497366357, + "desc": "sm6999999 恭请四代御本尊様,45秒后大量召唤三色弹幕,顺带头像同步测试┗(^o^ )┓", + "state": 0, + "duration": 72, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 59948, + "name": "高興帝", + "face": "http://i2.hdslb.com/bfs/face/68a4fb8cf9442f0db277d58a9dbccbf02eacdad4.jpg" + }, + "stat": { + "aid": 44501, + "view": 2450853, + "danmaku": 16774, + "reply": 5627, + "favorite": 25342, + "coin": 3316, + "share": 3531, + "now_rank": 0, + "his_rank": 0, + "like": 47552, + "dislike": 0, + "vt": 0, + "vv": 2450853, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 74884, + "dimension": { + "width": 480, + "height": 360, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1Bx411c7NF", + "cover43": "", + "tidv2": 2062, + "tnamev2": "音MAD", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1Bx411c7NF", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 44501, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 1706416465, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/2365889cfca6e33566104487604138906a610c59.jpg", + "title": "【4K珍藏】诈骗神曲《Never Gonna Give You Up》!愿者上钩!", + "pubdate": 1723457882, + "ctime": 1723042776, + "desc": "《‌Never Gonna Give You Up》‌这首歌曲发行于1987年11月16日。‌这首歌曲由Rick Astley演唱,‌并收录于他的专辑《‌Whenever You Need Somebody》‌中。", + "state": 0, + "duration": 213, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 2043250564, + "name": "4K音乐馆", + "face": "https://i1.hdslb.com/bfs/face/4be964615e70e18ab469e4403cb0fa320f8d2fdc.jpg" + }, + "stat": { + "aid": 1706416465, + "view": 1001774, + "danmaku": 1150, + "reply": 1204, + "favorite": 20440, + "coin": 2354, + "share": 12072, + "now_rank": 0, + "his_rank": 0, + "like": 28749, + "dislike": 0, + "vt": 0, + "vv": 1001774, + "fav_g": 38, + "like_g": 0 + }, + "dynamic": "", + "cid": 1641702404, + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "season_id": 257515, + "short_link_v2": "https://b23.tv/BV1UT42167xb", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n240807sa3h3ta5x4y8t48d3i1ld43yn_firsti.jpg", + "pub_location": "山东", + "cover43": "", + "tidv2": 2017, + "tnamev2": "MV", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1UT42167xb", + "season_type": 1, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 1706416465, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 70025529, + "videos": 1, + "tid": 130, + "tname": "音乐综合", + "copyright": 2, + "pic": "http://i0.hdslb.com/bfs/archive/49948624e5b18fda60ec255eeffe9fb86e2a73a0.jpg", + "title": "大悲咒(高品质珍藏版)", + "pubdate": 1570435422, + "ctime": 1570183927, + "desc": "净化心情,佛祖保佑,大吉大利!!!", + "state": 0, + "duration": 1792, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 362819520, + "name": "抹茶牛油果", + "face": "http://i0.hdslb.com/bfs/face/3b2571027baef2a954c2fc1b5473ed609ef00fb3.jpg" + }, + "stat": { + "aid": 70025529, + "view": 15194194, + "danmaku": 126652, + "reply": 36609, + "favorite": 447623, + "coin": 115299, + "share": 201225, + "now_rank": 0, + "his_rank": 0, + "like": 432430, + "dislike": 0, + "vt": 0, + "vv": 15194194, + "fav_g": 49, + "like_g": 0 + }, + "dynamic": "#大悲咒##高音质##循环#", + "cid": 121325699, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1XE411S7Ew", + "cover43": "", + "tidv2": 2192, + "tnamev2": "疗愈成长", + "pid_v2": 1028, + "pid_name_v2": "神秘学", + "bvid": "BV1XE411S7Ew", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 70025529, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 827984205, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/ffacd250c10ca7cea1a665e89b691b3b7b837587.jpg", + "title": "燃!保加利亚妖王2023新歌MV!", + "pubdate": 1688208848, + "ctime": 1688208848, + "desc": "youtube\n保加利亚妖王azis新歌mv", + "state": 0, + "duration": 225, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 1295732260, + "name": "蒂尼黄DiniHuang", + "face": "https://i1.hdslb.com/bfs/face/71cc994f3b717fb64dec53cab8b825b471f3886a.jpg" + }, + "stat": { + "aid": 827984205, + "view": 168546, + "danmaku": 188, + "reply": 343, + "favorite": 851, + "coin": 79, + "share": 2315, + "now_rank": 0, + "his_rank": 0, + "like": 4373, + "dislike": 0, + "vt": 0, + "vv": 168546, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 1181623685, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV19g4y1A7xq", + "up_from_v2": 8, + "first_frame": "http://i0.hdslb.com/bfs/storyff/n230701qn3tfuifpjvvh0e2pctwqbkep_firsti.jpg", + "pub_location": "上海", + "cover43": "", + "tidv2": 2017, + "tnamev2": "MV", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV19g4y1A7xq", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 827984205, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 80573606, + "videos": 1, + "tid": 29, + "tname": "音乐现场", + "copyright": 2, + "pic": "http://i0.hdslb.com/bfs/archive/b0433e71df7f856cf1a45a926361661eca28b8fb.jpg", + "title": "满级大佬屠杀新手村", + "pubdate": 1577243562, + "ctime": 1577243562, + "desc": "YouTube\n\n*《She Taught Me How to Yodel》\n\n约德尔唱法(Yodeling)是瑞士阿尔卑斯山区的一种特殊唱法,采用真假声迅速切换的方式演唱。“约德尔”,在当地方言中是“树林歌唱”的意思,因此有时也将其翻译为“woods sing”。\n\n小女孩叫Sofia Shkidchenko,演唱于乌克兰达人秀,她有自己的油管频道可以去订阅哦~\n\n自己也没想到随手上传的个视频突然播放量这么多,不是专业的搬运博主,此视频留作纪念,但更新随缘啦。祝大家万事如意。", + "state": 0, + "duration": 126, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 247412150, + "name": "Ueroey", + "face": "https://i2.hdslb.com/bfs/face/f8cef132ebaeac9da8c73ad52f6c53b7d1f74637.jpg" + }, + "stat": { + "aid": 80573606, + "view": 62129265, + "danmaku": 106580, + "reply": 27081, + "favorite": 1259191, + "coin": 453054, + "share": 189609, + "now_rank": 0, + "his_rank": 7, + "like": 2766708, + "dislike": 0, + "vt": 0, + "vv": 62129265, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "#音乐#", + "cid": 137890032, + "dimension": { + "width": 638, + "height": 312, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1LJ411W7Bo", + "up_from_v2": 9, + "pub_location": "浙江", + "cover43": "", + "tidv2": 2018, + "tnamev2": "音乐现场", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1LJ411W7Bo", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 80573606, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 370010949, + "videos": 2, + "tid": 138, + "tname": "搞笑", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/8339e4a40c1a10cfb0e0abe0bc4ef6ecbd61a45f.jpg", + "title": "黑人抬棺原版视频", + "pubdate": 1585735296, + "ctime": 1585735296, + "desc": "up主关于本条视频收入的说明戳:BV1YK41157dT\n转载自https://www.youtube.com/watch?v=b3Y_9bTRGVg\n其他:抖棺(肩)舞:BV1kt4y127Ee\n苏卡棺裂:BV1GZ4y1x7mZ\n我是比划,感谢您的观看感谢点赞感谢一切!改天一定陪老铁好好比划比划!(咕)\n(建议大家戳一下宝藏2p)", + "state": 0, + "duration": 200, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 479724334, + "name": "比划大魔王", + "face": "http://i1.hdslb.com/bfs/face/910e60494f7deff1b3bdcf1eaaead6779d77bac5.jpg" + }, + "stat": { + "aid": 370010949, + "view": 65490009, + "danmaku": 454078, + "reply": 47875, + "favorite": 1008732, + "coin": 445010, + "share": 783444, + "now_rank": 0, + "his_rank": 2, + "like": 1912992, + "dislike": 0, + "vt": 0, + "vv": 65490009, + "fav_g": 24, + "like_g": 0 + }, + "dynamic": "", + "cid": 172423516, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1NZ4y1j7nw", + "cover43": "", + "tidv2": 2059, + "tnamev2": "鬼畜调教", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1NZ4y1j7nw", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 370010949, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 161596, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/90bc3229e862994ac021a5f0894f232bc49b36bf.jpg", + "title": "据说80%的男生都听过这段音乐,有木有?", + "pubdate": 1319379031, + "ctime": 1497399731, + "desc": "据说男生都听过,为啥我没有呢? ", + "state": 0, + "duration": 0, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 211322, + "name": "卍解←死神", + "face": "https://i2.hdslb.com/bfs/face/2cb86d5f33a409732e4a0dcc7cda70bc8c199a7f.jpg" + }, + "stat": { + "aid": 161596, + "view": 576962, + "danmaku": 1042, + "reply": 1638, + "favorite": 6576, + "coin": 227, + "share": 931, + "now_rank": 0, + "his_rank": 612, + "like": 9845, + "dislike": 0, + "vt": 0, + "vv": 576962, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 266868, + "dimension": { + "width": 448, + "height": 336, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1Nx411w7tR", + "cover43": "", + "tidv2": 2027, + "tnamev2": "音乐综合", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1Nx411w7tR", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 161596, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 112699505707398, + "videos": 1, + "tid": 22, + "tname": "鬼畜调教", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/54c8218801e90a957e67541ea7d76e6d310614fe.jpg", + "title": "【范小勤】HOP", + "pubdate": 1719658405, + "ctime": 1719658405, + "desc": "", + "state": 0, + "duration": 200, + "mission_id": 1729431, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 40488241, + "name": "帅气的五岁少年", + "face": "https://i1.hdslb.com/bfs/face/0438443dd2bbb2fe1b46aa1d2134745f8d9f26c8.jpg" + }, + "stat": { + "aid": 112699505707398, + "view": 47395, + "danmaku": 176, + "reply": 125, + "favorite": 566, + "coin": 242, + "share": 1366, + "now_rank": 0, + "his_rank": 0, + "like": 1598, + "dislike": 0, + "vt": 0, + "vv": 47395, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 500001599795260, + "dimension": { + "width": 1440, + "height": 1080, + "rotate": 0 + }, + "season_id": 3617308, + "short_link_v2": "https://b23.tv/BV1J63veXEvH", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n240629sabnqqnvswrfyh2h8capwsas5_firsti.jpg", + "pub_location": "上海", + "cover43": "", + "tidv2": 2059, + "tnamev2": "鬼畜调教", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1J63veXEvH", + "season_type": 1, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 112699505707398, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 345957866, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/2327de6051626e9f263e265805cbb1be3a05ad8d.jpg", + "title": "【越南神曲】-《Kẻ Cắp Gặp Bà Già 》!终于找到原版了!", + "pubdate": 1664102700, + "ctime": 1664027264, + "desc": "提到「越南电音」,大家可能会感到比较陌生,甚至摸不着头脑。 事实上,越南电音已经席卷国内短视频平台,没有人可以逃过它的轰炸。 音乐一开,无人不嗨~", + "state": 0, + "duration": 234, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 0, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 2043250564, + "name": "4K音乐馆", + "face": "https://i1.hdslb.com/bfs/face/4be964615e70e18ab469e4403cb0fa320f8d2fdc.jpg" + }, + "stat": { + "aid": 345957866, + "view": 8519264, + "danmaku": 3892, + "reply": 3755, + "favorite": 143914, + "coin": 9867, + "share": 8152, + "now_rank": 0, + "his_rank": 0, + "like": 136218, + "dislike": 0, + "vt": 0, + "vv": 8519264, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 842321779, + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "season_id": 725909, + "short_link_v2": "https://b23.tv/BV1Ud4y1M7C7", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220924qn371jsgk4te6781w32102ovo_firsti.jpg", + "pub_location": "山东", + "cover43": "", + "tidv2": 2017, + "tnamev2": "MV", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1Ud4y1M7C7", + "season_type": 1, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 345957866, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 456093155, + "videos": 1, + "tid": 59, + "tname": "演奏", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/9c160af2907ba2c161d565a99e61032ba72868ff.png", + "title": "太羞耻了!敢于琴行挑战演奏《Hop》!", + "pubdate": 1592883074, + "ctime": 1592883074, + "desc": "太羞耻了!敢于琴行挑战演奏《Hop》! Hop改编版", + "state": 0, + "duration": 168, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 13677047, + "name": "Piano莱特", + "face": "https://i2.hdslb.com/bfs/face/edf6a0ae7dfe9adb5e8d5e813a69455554931c73.jpg" + }, + "stat": { + "aid": 456093155, + "view": 1432473, + "danmaku": 3867, + "reply": 1839, + "favorite": 14907, + "coin": 7949, + "share": 5164, + "now_rank": 0, + "his_rank": 0, + "like": 75832, + "dislike": 0, + "vt": 0, + "vv": 1432473, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 204234033, + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1r5411W71r", + "cover43": "", + "tidv2": 2021, + "tnamev2": "演奏", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1r5411W71r", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 456093155, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 88379669, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/44deb7e35de1c0d19fc79e6f838ad334585755f6.jpg", + "title": "当你怂恿网课老师放HOP", + "pubdate": 1581481509, + "ctime": 1581481509, + "desc": "我受不了了我要笑死了\n网课欢乐多", + "state": 0, + "duration": 131, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 8307655, + "name": "-Holog-", + "face": "https://i1.hdslb.com/bfs/face/797edf7cf269bdf89d1deb46b2b5068e65920b88.jpg" + }, + "stat": { + "aid": 88379669, + "view": 1553672, + "danmaku": 5349, + "reply": 1662, + "favorite": 7998, + "coin": 2519, + "share": 6023, + "now_rank": 0, + "his_rank": 0, + "like": 57979, + "dislike": 0, + "vt": 0, + "vv": 1553672, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "#保加利亚妖王##搞笑视频##HOP#\n把害怕打在公屏上_(:з」∠)_", + "cid": 150977310, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1D7411G76q", + "up_from_v2": 8, + "cover43": "", + "tidv2": 2207, + "tnamev2": "随拍·综合", + "pid_v2": 1032, + "pid_name_v2": "其他", + "bvid": "BV1D7411G76q", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 88379669, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 752882938, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/f5a60b4edaef1b44faab4ffc47384843a7d47c56.jpg", + "title": "【av100000000】b站视频破亿了!第一亿个视频十小时循环(补档)", + "pubdate": 1588142976, + "ctime": 1588142976, + "desc": "【av100000000】b站视频破亿了!第一亿个视频十小时循环(补档)\nBV1y7411Q743/av100000000", + "state": 0, + "duration": 36000, + "mission_id": 13243, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 382043832, + "name": "輝夜姬想讓人告白", + "face": "https://i0.hdslb.com/bfs/face/647d2a40ac51b8e1379d6c46c64f5a8e28b269ab.jpg" + }, + "stat": { + "aid": 752882938, + "view": 161614, + "danmaku": 357, + "reply": 497, + "favorite": 1217, + "coin": 165, + "share": 166, + "now_rank": 0, + "his_rank": 0, + "like": 4623, + "dislike": 0, + "vt": 0, + "vv": 161614, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "#B站##BILIBILI##哔哩哔哩#", + "cid": 184673331, + "dimension": { + "width": 960, + "height": 600, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1Yk4y1r7g2", + "cover43": "", + "tidv2": 2207, + "tnamev2": "随拍·综合", + "pid_v2": 1032, + "pid_name_v2": "其他", + "bvid": "BV1Yk4y1r7g2", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 752882938, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 676186170, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/24e8bd7eb31bbc142cd2676d28efa4c45c06bc33.jpg", + "title": "【4K60FPS】查理·普斯《See You Again》爆火神曲!珍惜身边的人!", + "pubdate": 1634983053, + "ctime": 1634983053, + "desc": "官方MV\n原盘提取制作,进行了部分调整\n中英文双语字幕制作,自己双语翻译\n《See You Again》是由美国说唱歌手维兹·卡利法与歌手查理·普斯合作演唱的一首歌曲\n这首歌,我想不用多说了,因为太多人点这首歌了\n希望大家珍惜身边的人", + "state": 0, + "duration": 229, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 0, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 229733301, + "name": "音乐私藏馆", + "face": "https://i0.hdslb.com/bfs/face/91a6526445f61e2d491523242b532d5e76f0435a.jpg" + }, + "stat": { + "aid": 676186170, + "view": 19331747, + "danmaku": 55418, + "reply": 19047, + "favorite": 459123, + "coin": 125647, + "share": 58270, + "now_rank": 0, + "his_rank": 30, + "like": 560583, + "dislike": 0, + "vt": 0, + "vv": 19331747, + "fav_g": 208, + "like_g": 0 + }, + "dynamic": "", + "cid": 429657756, + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1qU4y1F73A", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n211023qn35uju26iwo4pw2enpricqvy_firsti.jpg", + "pub_location": "陕西", + "cover43": "", + "tidv2": 2017, + "tnamev2": "MV", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1qU4y1F73A", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 676186170, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 11841799, + "videos": 1, + "tid": 236, + "tname": "竞技体育", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/20b223c72345a544272f70014f3a9ce2e30b39c8.jpg", + "title": "【万恶之源】游泳教练原视频", + "pubdate": 1499056716, + "ctime": 1499056716, + "desc": "在网盘里翻出来的不知道有没有人上传过。不断地摸索和练习,你就学会了游泳\n其中重点不能上传,我试过一次了。", + "state": 0, + "duration": 231, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 25844288, + "name": "希爾薇", + "face": "https://i2.hdslb.com/bfs/face/67b49b90952cd64320432ae561e78e54ea3ecb53.jpg" + }, + "stat": { + "aid": 11841799, + "view": 693786, + "danmaku": 4253, + "reply": 1097, + "favorite": 20296, + "coin": 2820, + "share": 14821, + "now_rank": 0, + "his_rank": 0, + "like": 13990, + "dislike": 0, + "vt": 0, + "vv": 693786, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 19555184, + "dimension": { + "width": 352, + "height": 288, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1ox411B7jr", + "cover43": "", + "tidv2": 2063, + "tnamev2": "鬼畜综合", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1ox411B7jr", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 11841799, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 96842562, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i0.hdslb.com/bfs/archive/5c33d3957fee3dac7376ab12b3e9a2b595600d84.jpg", + "title": "真正的冰雪女王", + "pubdate": 1584448702, + "ctime": 1584448702, + "desc": "转载https://weibo.com/tv/v/FlXRiE62K?fid=1034:217aa2b6ddb0f47e65468914c7d2c9af\n妖王的歌简直可以洗涤灵魂", + "state": 0, + "duration": 219, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 388982725, + "name": "萌萌四海为家", + "face": "https://i1.hdslb.com/bfs/face/f4ce35193db8743094a4efb4e00e97442244f2aa.jpg" + }, + "stat": { + "aid": 96842562, + "view": 39902, + "danmaku": 47, + "reply": 32, + "favorite": 372, + "coin": 39, + "share": 627, + "now_rank": 0, + "his_rank": 0, + "like": 507, + "dislike": 0, + "vt": 0, + "vv": 39902, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "#欧美MV##BGM##歌曲#", + "cid": 165335972, + "dimension": { + "width": 480, + "height": 360, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1V7411Z7HX", + "cover43": "", + "tidv2": 2017, + "tnamev2": "MV", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1V7411Z7HX", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 96842562, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 84204989, + "videos": 1, + "tid": 267, + "tname": "电台", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/c6533d1b6c9fcd3cd574a0117acaa4e5ddbe7fa4.jpg", + "title": "【B站入站曲】(全站最清晰音质)", + "pubdate": 1579462179, + "ctime": 1579462179, + "desc": "【B站音乐同名】本曲是本人使用Chrome+多种技术手段历时4个小时扒出的原曲,扒曲不易(如有异议请自行尝试即可知之),请多支持!", + "state": 0, + "duration": 131, + "mission_id": 12642, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 189708807, + "name": "Yc云灿", + "face": "https://i0.hdslb.com/bfs/face/c815a0c66ab6adbd208558a0fe25c59c6ee916fa.jpg" + }, + "stat": { + "aid": 84204989, + "view": 113298, + "danmaku": 2640, + "reply": 426, + "favorite": 6659, + "coin": 1578, + "share": 238, + "now_rank": 0, + "his_rank": 0, + "like": 8192, + "dislike": 0, + "vt": 0, + "vv": 113298, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "#2019##2019年度报告##年度报告#", + "cid": 144036516, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV157411v76Z", + "pub_location": "山西", + "cover43": "", + "tidv2": 2024, + "tnamev2": "电台·歌单", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV157411v76Z", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 84204989, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 45213203, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/1c73c8c16fe733568c3b6a5332c85be3ddc41acd.jpg", + "title": "如果把极乐净土的背景音乐换成hop会怎么样", + "pubdate": 1551585358, + "ctime": 1551585358, + "desc": "-", + "state": 0, + "duration": 222, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 300015102, + "name": "砂糖血块", + "face": "https://i0.hdslb.com/bfs/face/77d73e4aa3fa669255be492596e02f1570f4fb5d.jpg" + }, + "stat": { + "aid": 45213203, + "view": 521576, + "danmaku": 4054, + "reply": 867, + "favorite": 12646, + "coin": 12832, + "share": 8799, + "now_rank": 0, + "his_rank": 0, + "like": 31530, + "dislike": 0, + "vt": 0, + "vv": 521576, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 79166580, + "dimension": { + "width": 1144, + "height": 640, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1bb411B7dn", + "cover43": "", + "tidv2": 2036, + "tnamev2": "舞蹈综合", + "pid_v2": 1004, + "pid_name_v2": "舞蹈", + "bvid": "BV1bb411B7dn", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 45213203, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 66372123, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/a12315d2efc49f1862be996093c8076284719e43.jpg", + "title": "学校食堂公然放HOP,这到底是人性的泯灭,还是道德的伦桑?", + "pubdate": 1567398824, + "ctime": 1567398825, + "desc": "吃饭时的我惊呆了。。。", + "state": 0, + "duration": 61, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 298061175, + "name": "Dusk-氵夕", + "face": "https://i0.hdslb.com/bfs/face/803bf620ead9c25168935e31797b25d51f2cb614.jpg" + }, + "stat": { + "aid": 66372123, + "view": 270243, + "danmaku": 238, + "reply": 211, + "favorite": 1443, + "coin": 116, + "share": 427, + "now_rank": 0, + "his_rank": 0, + "like": 7846, + "dislike": 0, + "vt": 0, + "vv": 270243, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "#自制##奇葩##HOP#", + "cid": 115113475, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV174411177w", + "up_from_v2": 8, + "pub_location": "宁夏", + "cover43": "", + "tidv2": 2088, + "tnamev2": "社会观察", + "pid_v2": 1010, + "pid_name_v2": "知识", + "bvid": "BV174411177w", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 66372123, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 669351541, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/fa08f65dc87fa6a26a99d0dc6fbc141adcef917b.jpg", + "title": "这TM才是东京热!!!", + "pubdate": 1597827562, + "ctime": 1597827562, + "desc": "祝大家长高3cm!", + "state": 0, + "duration": 73, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 641529005, + "name": "海胆君の日本留学日记", + "face": "https://i2.hdslb.com/bfs/face/75b3ddf5767533667d08c4475823fdf6ed7111d0.jpg" + }, + "stat": { + "aid": 669351541, + "view": 183005, + "danmaku": 78, + "reply": 54, + "favorite": 685, + "coin": 101, + "share": 225, + "now_rank": 0, + "his_rank": 0, + "like": 1310, + "dislike": 0, + "vt": 0, + "vv": 183005, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "#bilibili新星计划##搞笑##全程高能#", + "cid": 226269297, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1ea4y177Rj", + "pub_location": "辽宁", + "cover43": "", + "tidv2": 2002, + "tnamev2": "影视剪辑", + "pid_v2": 1001, + "pid_name_v2": "影视", + "bvid": "BV1ea4y177Rj", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 669351541, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 239236582, + "videos": 1, + "tid": 22, + "tname": "鬼畜调教", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/60e0c8b0bdb8781ae5213d06e35a80e416b624fd.jpg", + "title": "av10388闪版", + "pubdate": 1706161150, + "ctime": 1706160987, + "desc": "-", + "state": 0, + "duration": 72, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 352435610, + "name": "尼911a", + "face": "https://i2.hdslb.com/bfs/face/dca0c49ddabaae204209764e73a1eeddd4e94fa3.jpg" + }, + "stat": { + "aid": 239236582, + "view": 98736, + "danmaku": 149, + "reply": 201, + "favorite": 700, + "coin": 45, + "share": 379, + "now_rank": 0, + "his_rank": 0, + "like": 875, + "dislike": 0, + "vt": 0, + "vv": 98736, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 1418632218, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1he411Y7MB", + "up_from_v2": 11, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n240125saqkgdlb6aio291t2cc5qola0_firsti.jpg", + "pub_location": "江苏", + "cover43": "", + "tidv2": 2207, + "tnamev2": "随拍·综合", + "pid_v2": 1032, + "pid_name_v2": "其他", + "bvid": "BV1he411Y7MB", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 239236582, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 294464399, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/8327a7955381a3a7fc0606b08ad87dd74a948a4b.png", + "title": "B站的两个极限AV号被我找到了!", + "pubdate": 1638019819, + "ctime": 1638019819, + "desc": "-", + "state": 0, + "duration": 71, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 495847991, + "name": "Tedsan", + "face": "https://i2.hdslb.com/bfs/face/d3689b9a5f93d82deb1f8b6a081767a16b16e5ca.jpg" + }, + "stat": { + "aid": 294464399, + "view": 86852, + "danmaku": 25, + "reply": 280, + "favorite": 338, + "coin": 54, + "share": 61, + "now_rank": 0, + "his_rank": 0, + "like": 450, + "dislike": 0, + "vt": 0, + "vv": 86852, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 450235439, + "dimension": { + "width": 1440, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1fF411b7Hm", + "up_from_v2": 19, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n211127a23442em8g5nug2775mg3789m_firsti.jpg", + "pub_location": "四川", + "cover43": "", + "tidv2": 2207, + "tnamev2": "随拍·综合", + "pid_v2": 1032, + "pid_name_v2": "其他", + "bvid": "BV1fF411b7Hm", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 294464399, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 592220402, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/234b7c4a99412224007bf21a0e3902946dc45cd6.jpg", + "title": "【4K50帧】“我在东北玩泥巴”原曲 Daler Mehndi - Tunak Tunak Tun", + "pubdate": 1638883948, + "ctime": 1638883948, + "desc": "-", + "state": 0, + "duration": 257, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 0, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 472562429, + "name": "智英武54", + "face": "https://i2.hdslb.com/bfs/face/e7bb5b2f16863992562f10ce2a686035bf33a1b4.jpg" + }, + "stat": { + "aid": 592220402, + "view": 2711581, + "danmaku": 7298, + "reply": 1980, + "favorite": 58898, + "coin": 5115, + "share": 17577, + "now_rank": 0, + "his_rank": 0, + "like": 72931, + "dislike": 0, + "vt": 0, + "vv": 2711581, + "fav_g": 11, + "like_g": 0 + }, + "dynamic": "", + "cid": 456563995, + "dimension": { + "width": 2880, + "height": 2160, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1bq4y1q7Ho", + "up_from_v2": 8, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n211207a24niqqktio4no1wmwd5tsget_firsti.jpg", + "pub_location": "江苏", + "cover43": "", + "tidv2": 2017, + "tnamev2": "MV", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1bq4y1q7Ho", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 592220402, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 441264199, + "videos": 1, + "tid": 26, + "tname": "音MAD", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/4e36449edad0021385e5477bbe427ca9243d549a.jpg", + "title": "五大哲学", + "pubdate": 1679426636, + "ctime": 1679426636, + "desc": "-", + "state": 0, + "duration": 13, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 613658683, + "name": "长瀞重度依赖", + "face": "https://i1.hdslb.com/bfs/face/c53f852b5ca574eed9be9877d7ce3f28a2e89385.jpg" + }, + "stat": { + "aid": 441264199, + "view": 671881, + "danmaku": 92, + "reply": 230, + "favorite": 2720, + "coin": 228, + "share": 1060, + "now_rank": 0, + "his_rank": 0, + "like": 9049, + "dislike": 0, + "vt": 0, + "vv": 671881, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 1064182352, + "dimension": { + "width": 720, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1nL411r7mS", + "up_from_v2": 8, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n230322qntglnzeqo4m1c23cnoyehccs_firsti.jpg", + "pub_location": "广西", + "cover43": "", + "tidv2": 2015, + "tnamev2": "娱乐综合", + "pid_v2": 1002, + "pid_name_v2": "娱乐", + "bvid": "BV1nL411r7mS", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 441264199, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 49016435, + "videos": 1, + "tid": 31, + "tname": "翻唱", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/9b7da84975469b7ddcd78717d06c092c4433ccf4.jpg", + "title": "【喵会长】妹子竟被逼着翻唱保加利亚妖王!⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄!", + "pubdate": 1555135227, + "ctime": 1554999201, + "desc": "这次视频改了N遍,剪的好累~希望大家能多多支持一下\n网易云音频链接:https://music.163.com/#/song?id=1358976277\n关注微博有惊喜!@隔壁班的喵会长", + "state": 0, + "duration": 200, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 21330948, + "name": "隔壁班的喵会长", + "face": "https://i0.hdslb.com/bfs/face/75a4a80496daacb478496f6a0aaf4d3ab357393d.jpg" + }, + "stat": { + "aid": 49016435, + "view": 1988312, + "danmaku": 8866, + "reply": 5413, + "favorite": 53008, + "coin": 136074, + "share": 13019, + "now_rank": 0, + "his_rank": 4, + "like": 268302, + "dislike": 0, + "vt": 0, + "vv": 1988312, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "那个曾经制霸b站的男银又肥来了!!!!", + "cid": 86290623, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1vb411M79s", + "pub_location": "山西", + "cover43": "", + "tidv2": 2061, + "tnamev2": "人力VOCALOID", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1vb411M79s", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 49016435, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 730704908, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/2fd2b442a3f42ed0ba20c5204afdd92dbdfb9a68.jpg", + "title": "【越南神曲】-《Cứ Chill Thôi》!终于找到原版了!", + "pubdate": 1663586400, + "ctime": 1663574508, + "desc": "听完以后瞬间心情舒畅,太绝了!", + "state": 0, + "duration": 281, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 0, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 2043250564, + "name": "4K音乐馆", + "face": "https://i1.hdslb.com/bfs/face/4be964615e70e18ab469e4403cb0fa320f8d2fdc.jpg" + }, + "stat": { + "aid": 730704908, + "view": 4715077, + "danmaku": 3141, + "reply": 4132, + "favorite": 75716, + "coin": 9002, + "share": 7597, + "now_rank": 0, + "his_rank": 0, + "like": 79627, + "dislike": 0, + "vt": 0, + "vv": 4715077, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 837595821, + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "season_id": 725909, + "short_link_v2": "https://b23.tv/BV1GD4y1i7dA", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220919qn29hpyl52if2k1dthb32a0ji_firsti.jpg", + "pub_location": "山东", + "cover43": "", + "tidv2": 2017, + "tnamev2": "MV", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1GD4y1i7dA", + "season_type": 1, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 730704908, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 413754644, + "videos": 1, + "tid": 59, + "tname": "演奏", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/4769bc9c91af6fc8598d1b22d16033b540af33a8.jpg", + "title": "【东京热】TOKY HOT THEME SONG ( FULL VERSION)", + "pubdate": 1594208253, + "ctime": 1594208253, + "desc": "-", + "state": 0, + "duration": 157, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 476156735, + "name": "星际的小喵", + "face": "http://i2.hdslb.com/bfs/face/b6fcd4d4d23047432012576dda4239b5d0b5fa6e.jpg" + }, + "stat": { + "aid": 413754644, + "view": 476215, + "danmaku": 166, + "reply": 906, + "favorite": 6630, + "coin": 627, + "share": 3116, + "now_rank": 0, + "his_rank": 0, + "like": 6086, + "dislike": 0, + "vt": 0, + "vv": 476215, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "#日本##音乐##东京#", + "cid": 210245452, + "dimension": { + "width": 426, + "height": 240, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1pV41167y7", + "cover43": "", + "tidv2": 2027, + "tnamev2": "音乐综合", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1pV41167y7", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 413754644, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 468509831, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i0.hdslb.com/bfs/archive/03971484b4c3931e89cbcf5862f8c10645e6aaec.jpg", + "title": "补裆 av3440 -", + "pubdate": 1651067890, + "ctime": 1651067890, + "desc": "新浪\nbiliplus,里面只有残缺的信息,发布时间应该是2010-2-27", + "state": 0, + "duration": 215, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 675115853, + "name": "゚゙゙゙゚゚゙゚゚", + "face": "https://i2.hdslb.com/bfs/face/8706d12c0df1f27aff5ae3c045b7da0133bd8c4a.png" + }, + "stat": { + "aid": 468509831, + "view": 280276, + "danmaku": 89, + "reply": 324, + "favorite": 4518, + "coin": 151, + "share": 209, + "now_rank": 0, + "his_rank": 0, + "like": 6403, + "dislike": 0, + "vt": 0, + "vv": 280276, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 586522933, + "dimension": { + "width": 320, + "height": 240, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1H541117sZ", + "up_from_v2": 8, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220427qn2g6emv26rnqxq247csj5kgn_firsti.jpg", + "cover43": "", + "tidv2": 2027, + "tnamev2": "音乐综合", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1H541117sZ", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 468509831, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 19390801, + "videos": 1, + "tid": 22, + "tname": "鬼畜调教", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/d52994a1876d07a975dc6683b78a898d9b581208.png", + "title": "【春晚鬼畜】赵本山:我就是念诗之王!【改革春风吹满地】", + "pubdate": 1518339644, + "ctime": 1518230987, + "desc": "小时候每次吃完年夜饭,都会急急忙忙跑回自己房间跟朋友玩彩虹岛,街头篮球,泡泡堂,极品飞车,CS。一旦听到外面大人们喊“哦!赵本山来咯!”,就马上暂停手上的游戏赶紧跑出去看。对我来说没有赵本山的春晚根本不是春晚。\n鬼畜本家:av18521530\n【举起手来】花姑娘又要吸旺仔牛奶!\nby @疯猴pme", + "state": 0, + "duration": 152, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 353246678, + "name": "UP-Sings", + "face": "http://i2.hdslb.com/bfs/face/224815f69567dfbdacffc64185b89568bf8da0f3.jpg" + }, + "stat": { + "aid": 19390801, + "view": 123739584, + "danmaku": 667864, + "reply": 325458, + "favorite": 3047850, + "coin": 4800461, + "share": 1494973, + "now_rank": 0, + "his_rank": 3, + "like": 5445710, + "dislike": 0, + "vt": 0, + "vv": 123739584, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "不管今年春晚有没有本山叔,鬼畜区总归是有的!", + "cid": 31621681, + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "season_id": 879555, + "short_link_v2": "https://b23.tv/BV1bW411n7fY", + "cover43": "", + "tidv2": 2059, + "tnamev2": "鬼畜调教", + "pid_v2": 1007, + "pid_name_v2": "鬼畜", + "bvid": "BV1bW411n7fY", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 19390801, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 305593327, + "videos": 1, + "tid": 255, + "tname": "颜值·网红舞", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/b4917bb0a9147f205e6af9d87d6d50b864a7a97f.jpg", + "title": "蝴蝶步2.0(◦˙▽˙◦)", + "pubdate": 1669474753, + "ctime": 1669474753, + "desc": "-", + "state": 0, + "duration": 15, + "mission_id": 1039224, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 43724742, + "name": "怎么这样的呐", + "face": "https://i0.hdslb.com/bfs/face/f9e9ae6025a9e02b134eec3dd84b87c3689216a3.jpg" + }, + "stat": { + "aid": 305593327, + "view": 13909975, + "danmaku": 1401, + "reply": 7111, + "favorite": 235000, + "coin": 83120, + "share": 24633, + "now_rank": 0, + "his_rank": 0, + "like": 383239, + "dislike": 0, + "vt": 0, + "vv": 13909975, + "fav_g": 14, + "like_g": 0 + }, + "dynamic": "双更一下~", + "cid": 904012490, + "dimension": { + "width": 1456, + "height": 2592, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1kP411u7jr", + "up_from_v2": 19, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n221126qn2i92o9zf8m22h34kykxw0dl_firsti.jpg", + "pub_location": "浙江", + "cover43": "", + "tidv2": 2030, + "tnamev2": "颜值·网红舞", + "pid_v2": 1004, + "pid_name_v2": "舞蹈", + "bvid": "BV1kP411u7jr", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 305593327, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + }, + { + "aid": 114075187020133, + "videos": 1, + "tid": 256, + "tname": "短片", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/3d3aaf0ab2da5e41f4de7ed3e7995babbfd1168a.jpg", + "title": "中国人自己的保加利亚妖王", + "pubdate": 1740649401, + "ctime": 1740649401, + "desc": "-", + "state": 0, + "duration": 53, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 1247190580, + "name": "麦克瑟瑟大型纪录片", + "face": "https://i1.hdslb.com/bfs/face/98df710e5e76e7fe37c0d5fd8047b899b21943d5.jpg" + }, + "stat": { + "aid": 114075187020133, + "view": 9167, + "danmaku": 1, + "reply": 12, + "favorite": 24, + "coin": 2, + "share": 9, + "now_rank": 0, + "his_rank": 0, + "like": 166, + "dislike": 0, + "vt": 0, + "vv": 9167, + "fav_g": 0, + "like_g": 0 + }, + "dynamic": "", + "cid": 28602729880, + "dimension": { + "width": 1440, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1Xg9cYYEDZ", + "up_from_v2": 19, + "first_frame": "http://i0.hdslb.com/bfs/storyff/n250227sao3m0apa1gc9g2yxt3vx2l53_firsti.jpg", + "pub_location": "河南", + "cover43": "", + "tidv2": 2026, + "tnamev2": "乐评盘点", + "pid_v2": 1003, + "pid_name_v2": "音乐", + "bvid": "BV1Xg9cYYEDZ", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "", + "enable_vt": 0, + "ai_rcmd": { + "id": 114075187020133, + "goto": "av", + "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62", + "uniq_id": "" + } + } + ], + "Spec": null, + "hot_share": { + "show": false, + "list": [] + }, + "elec": null, + "emergency": { + "no_like": false, + "no_coin": false, + "no_fav": false, + "no_share": false + }, + "view_addit": { + "63": false, + "64": false, + "69": false, + "71": false, + "72": false + }, + "guide": null, + "query_tags": null, + "participle": [ + "保加利亚", + "azis", + "mv" + ], + "module_ctrl": null, + "replace_recommend": false + } +} +``` + +
+ +## 获取视频简介 + +> https://api.bilibili.com/x/web-interface/archive/desc + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|-----|--------|--------|---------------| +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|--------------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
62002:稿件不可见 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | str | 简介内容 | | + +**示例:** + +查看视频(教主的咕鸽)`av39330059`/`BV1Bt411z799`的简介 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/archive/desc' \ +--data-urlencode 'aid=39330059' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/archive/desc' \ +--data-urlencode 'bvid=BV1Bt411z799' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": "1.小朋友们大家好,我是你们爷爷最喜欢的超威一列姆!\r\n2.在过去的一年里,我创作了无数脍炙人口的歌曲,常常被人夸赞高产似雌豚。\r\n3.接下来的日子里我会一如既往地勤勉创作,争取继续保持现在的产量,文体两开花。\r\n4.我感觉照这个势头和速度下去别说日常更新不在话下,连出张新专辑都指日可待了啊。\r\n5.也感谢你们一如既往的支持和鼓励,我会注意身体,不把自己累垮掉的。\r\n6.我个人不建议你们在评论区里艾特任何UP主,我真的不建议,当然你们非要这么做我也没办法的。" +} +``` + +
+ +## 查询视频分P列表 (avid/bvid转cid) + +> https://api.bilibili.com/x/player/pagelist + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|-----|--------|--------|---------------| +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-------|------|-----------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 分P列表 | | + +数组`data`: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|----------|---------| +| 0 | obj | 1P内容 | 无分P仅有此项 | +| n | obj | (n+1)P内容 | | +| …… | obj | …… | …… | + +数组`data`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|-----------|---------------------------------------------| +| cid | num | 当前分P cid | | +| page | num | 当前分P | | +| from | str | 视频来源 | vupload:普通上传(B站)
hunan:芒果TV
qq:腾讯 | +| part | str | 当前分P标题 | | +| duration | num | 当前分P持续时间 | 单位为秒 | +| vid | str | 站外视频vid | | +| weblink | str | 站外视频跳转url | | +| dimension | obj | 当前分P分辨率 | 有部分视频无法获取分辨率 | +| first_frame | str | 分P封面 | | + +数组`data`中的对象中的`dimension`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------|-----|---------|----------------| +| width | num | 当前分P 宽度 | | +| height | num | 当前分P 高度 | | +| rotate | num | 是否将宽高对换 | 0:正常
1:对换 | + +**示例:** + +查询视频`av13502509`/`BV1ex411J7GE`的分P列表 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/player/pagelist' \ +--data-urlencode 'aid=13502509' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/player/pagelist' \ +--data-urlencode 'bvid=BV1ex411J7GE' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [{ + "cid": 66445301, + "page": 1, + "from": "vupload", + "part": "00. 宣传短片", + "duration": 33, + "vid": "", + "weblink": "", + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + } + }, { + "cid": 35039663, + "page": 2, + "from": "vupload", + "part": "01. 火柴人与动画师", + "duration": 133, + "vid": "", + "weblink": "", + "dimension": { + "width": 1484, + "height": 1080, + "rotate": 0 + } + }, { + "cid": 35039678, + "page": 3, + "from": "vupload", + "part": "02. 火柴人与动画师 II", + "duration": 210, + "vid": "", + "weblink": "", + "dimension": { + "width": 1484, + "height": 1080, + "rotate": 0 + } + }, { + "cid": 35039693, + "page": 4, + "from": "vupload", + "part": "03. 火柴人与动画师 III", + "duration": 503, + "vid": "", + "weblink": "", + "dimension": { + "width": 992, + "height": 720, + "rotate": 0 + } + }] +} +``` + +
diff --git a/docs/video/interact_video.md b/docs/video/interact_video.md new file mode 100644 index 0000000..c87892d --- /dev/null +++ b/docs/video/interact_video.md @@ -0,0 +1,369 @@ +# 互动视频信息 + +注:互动视频分P与普通视频分P不互通 + +## 获取互动视频模块详细信息 + +> https://api.bilibili.com/x/stein/edgeinfo_v2 + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | -------- | ------------ | ------------------ | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| graph_version | num | 剧情图id | 必要 | 可于[播放器](/docs/video/player.md)接口的 `interaction` 對象取得 | +| edge_id | num | 模块编号 | 非必要 | 0或留空为起始模块 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无视频
99003:剧情图被修改已失效
99077:请输入aid/bvid | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | ------------------- | ------------------------------------------------ | +| title | str | 视频模块(分P)标题 | | +| edge_id | num | 当前模块id | | +| story_list | array | 进度回溯信息 | 未登录仅有起始模块 | +| edges | obj | 当前模块信息 | | +| preload | obj | 预加载的分P | | +| hidden_vars | array | 变量列表 | 无变量时不存在此项 | +| is_leaf | num | 是否为结束模块 | 0:当前模块为普通模块
1:当前模块为结束模块 | +| no_tutorial | num | 禁止记录选择 | 1:禁止
非禁止时无此项 | +| no_backtracking | num | 禁止进度回溯 | 1:禁止
非禁止时无此项 | +| no_evaluation | num | 禁止结尾评分 | 1:禁止
非禁止时无此项 | + +`data`中的`story_list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ---- | +| 0 | obj | 回溯第一项模块 | | +| n | obj | 回溯第(n+1)项模块 | | +| …… | obj | …… | …… | + +`story_list`数组中的对象: + +| 项 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------- | ----------------------------- | +| node_id | num | 模块编号 | | +| edge_id | num | **同上** | | +| title | str | 模块(分P)标题 | | +| cid | num | 模块(分P)cid | | +| start_pos | num | 记录播放开始位置 | 单位为毫秒 | +| cover | str | 分P封面url | | +| is_current | num | 是否为当前模块 | 1:是
仅为当前模块时存在 | +| cursor | num | 进度序号 | 从0开始向上增长 | + +`data`中的`edges`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------------- | ------------------------ | +| dimension | obj | 当前分P分辨率 | 有部分视频无法获取分辨率 | +| questions | array | 问题 | 结束模块无此项 | +| skin | obj | 问题外观 | | + +`edges`中的`dimension`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | -------------- | -------------------- | +| width | num | 当前分P 宽度 | | +| height | num | 当前分P 高度 | | +| rotate | num | 是否将宽高对换 | 0:正常
1:对换 | +| sar | str | ??? | 作用尚不明确 | + +`edges`中的`questions`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| 0 | obj | 套了个娃 | | + +`edges`中的`questions`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ----- | ---------------- | ------------------------------------------------------------ | +| id | num | ??? | 作用尚不明确 | +| type | num | 选项显示模式 | 0:不显示选项
1:底部选项模式
2:坐标定点模式
3:???
127:??? | +| start_time_r | num | 300 或 duration | 作用尚不明确 | +| duration | num | 回答限时 | 单位为毫秒
不限时为`-1` | +| pause_video | num | 是否暂停播放视频 | 0:不暂停
1:暂停播放 | +| title | str | 空 | 作用尚不明确 | +| choices | array | 选项列表 | | +| fade_in_time | num | 选项淡入时间 | 毫秒 | +| fade_out_time | num | 选项淡出时间 | 毫秒 | + +`questions`数组中的对象中的`choices`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | ---- | +| 0 | obj | 第一选项 | | +| n | obj | 第(n+1)选项 | | +| …… | obj | …… | …… | + +`questions`数组中的对象中的`choices`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | -------------------- | ------------------------------------- | +| id | num | 选项所跳转的模块id | | +| platform_action | str | 跳转信息文字 | JUMP+{所跳转的模块编号}+{所跳转的cid} | +| native_action | str | 点击后对变量运算语句 | 每项间用分号隔开
无为空 | +| condition | str | 选项出现条件判断语句 | 无为空 | +| cid | num | 选项所跳转分P的cid | | +| x | num | 选项出现的x坐标 | 仅坐标模式有此项 | +| y | num | 选项出现的y坐标 | 仅坐标模式有此项 | +| text_align | num | 选项文本对齐方式 | | +| option | str | 选项文字 | | +| selected | obj | 选择动画信息 | | +| submited | obj | 提交动画信息 | | +| is_default | num | 是否为默认选项 | 1:是
非默认选项无此项 | +| is_hidden | num | 是否为隐藏选项 | 1:是
非隐藏选项无此项 | + +`edges`中的`skin`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------ | ---- | ------------------- | ---------------- | +| choice_image | str | 选项组件外观图片url | | +| title_text_color | str | 文字颜色 | 以下均为RGBA格式 | +| title_shadow_color | str | 文字阴影颜色 | | +| title_shadow_offset_x | num | 文字阴影x偏移 | | +| title_shadow_offset_y | num | 文字阴影y偏移 | | +| title_shadow_radius | num | 文字阴影半径 | | +| progressbar_color | str | 倒计时条颜色 | | +| progressbar_shadow_color | str | 倒计时条阴影颜色 | | + +`data`中的`preload`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | ----------- | ---- | +| video | array | 预加载的分P | | + +`preload`中的`video`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------------------------------ | +| 0 | obj | 预加载第一项 | 预加载的内容为当前所有选项的跳转视频 | +| n | obj | 预加载第(n+1)项 | | +| …… | obj | …… | …… | + +`preload`中的`video`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---- | +| aid | num | 稿件avid | | +| cid | num | 分P cid | | + +`data`中的`hidden_vars`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 第一个变量 | | +| n | obj | 第(n+1)个变量 | | +| …… | obj | …… | …… | + +`data`中的`hidden_vars`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------ | -------------------------- | +| value | num | 变量值 | 随机值为随机整数 | +| id | str | 变量编号 | | +| id_v2 | str | 变量编号 | 语句中一般使用这种 | +| type | num | 变量类型 | 1:普通变量
2:随机值 | +| is_show | num | 是否展示变量 | 0:否
1:是 | +| name | str | 变量名 | | +| skip_overwrite | num | 0 | 作用尚不明确 | + +**示例:** + +查询互动视频`av73267982`下剧情图`155446`模块`5556092`的信息 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/stein/edgeinfo_v2' \ +--data-urlencode 'aid=73267982' \ +--data-urlencode 'graph_version=155446' \ +--data-urlencode 'edge_id=5556092' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/stein/edgeinfo_v2' \ +--data-urlencode 'bvid=BV1UE411y7Wy' \ +--data-urlencode 'graph_version=155446' \ +--data-urlencode 'edge_id=5556092' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "title": "4", + "edge_id": 5556092, + "story_list": [ + { + "node_id": 1, + "edge_id": 1, + "title": "0 片头", + "cid": 127486603, + "start_pos": 27000, + "cover": "http://i0.hdslb.com/bfs/steins-gate/127486603_screenshot.jpg", + "cursor": 0 + }, + { + "node_id": 5556092, + "edge_id": 5556092, + "title": "4", + "cid": 125499378, + "start_pos": 82000, + "cover": "http://i0.hdslb.com/bfs/steins-gate/125499378_screenshot.jpg", + "is_current": 1, + "cursor": 15 + } + ], + "edges": { + "dimension": { + "width": 1920, + "height": 1000, + "rotate": 0, + "sar": "" + }, + "questions": [ + { + "id": 0, + "type": 2, + "start_time_r": 300, + "duration": -1, + "pause_video": 1, + "title": "", + "choices": [ + { + "id": 5556133, + "platform_action": "JUMP 5556133 125499249", + "native_action": "", + "condition": "$H7g_64_PG2EVS>=1.00 && $H7g_64_PG2EVS<=80.00", + "cid": 125499249, + "x": 947, + "y": 499, + "text_align": 2, + "option": "A <你已成为杀手> 试图砍死萌新 (成功率20%)", + "is_default": 1 + }, + { + "id": 5556134, + "platform_action": "JUMP 5556134 125502707", + "native_action": "", + "condition": "$H7g_64_PG2EVS>=81.00 && $H7g_64_PG2EVS<=100.00", + "cid": 125502707, + "x": 949, + "y": 502, + "text_align": 2, + "option": "B <你已成为杀手> 试图砍死萌新 (成功率20%)" + }, + { + "id": 5556135, + "platform_action": "JUMP 5556135 125499249", + "native_action": "", + "condition": "", + "cid": 125499249, + "x": 120, + "y": 145, + "text_align": 2, + "option": "C 直接【砍杀失败】" + } + ] + } + ], + "skin": { + "choice_image": "https://i0.hdslb.com/bfs/app/db0ae7700d4fb1416c8b305bcfb6f0948f818cc9.png", + "title_text_color": "d8fbffff", + "title_shadow_color": "00000033", + "title_shadow_offset_y": 1, + "title_shadow_radius": 1, + "progressbar_color": "ffffffff", + "progressbar_shadow_color": "000000cc" + } + }, + "preload": { + "video": [ + { + "aid": 73267982, + "cid": 125499249 + }, + { + "aid": 73267982, + "cid": 125502707 + } + ] + }, + "hidden_vars": [ + { + "value": 97, + "id": "v-H7g@PG2EVS", + "id_v2": "$H7g_64_PG2EVS", + "type": 2, + "is_show": 0, + "name": "随机值", + "skip_overwrite": 0 + }, + { + "value": 0, + "id": "v-YWB6dk1oCP", + "id_v2": "$YWB6dk1oCP", + "type": 1, + "is_show": 1, + "name": "达成假结局次数", + "skip_overwrite": 0 + }, + { + "value": 0, + "id": "v-Zh4JACIiId", + "id_v2": "$Zh4JACIiId", + "type": 1, + "is_show": 1, + "name": "死亡次数", + "skip_overwrite": 0 + }, + { + "value": 0, + "id": "v-a2vplaQlsP", + "id_v2": "$a2vplaQlsP", + "type": 1, + "is_show": 1, + "name": "达成真结局次数", + "skip_overwrite": 0 + }, + { + "value": 1, + "id": "v-lMQqQ994Sk", + "id_v2": "$lMQqQ994Sk", + "type": 1, + "is_show": 1, + "name": "循环编号", + "skip_overwrite": 0 + } + ], + "is_leaf": 0 + } +} +``` + +
diff --git a/docs/video/online.md b/docs/video/online.md new file mode 100644 index 0000000..4b80f0e --- /dev/null +++ b/docs/video/online.md @@ -0,0 +1,143 @@ +# 视频在线人数 + +## 获取视频在线人数_web端 + +> https://api.bilibili.com/x/player/online/total + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ---------- | ------------------ | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| cid | num | 视频cid | 必要 | 用于选择目标分P | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ----------------- | ----------- | +| total | str | 所有终端总计人数 | 例如`10万+` | +| count | str | web端实时在线人数 | | +| show_switch | obj | 数据显示控制 | | + +`data`中的`show_switch`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | --------------------- | ---- | +| total | bool | 展示所有终端总计人数 | | +| count | bool | 展示web端实时在线人数 | | + +**示例:** + +查询视频`av759949922`/`BV1y64y1q757`中1P(`392402545`)的在线人数 + +```shell +curl -G 'https://api.bilibili.com/x/player/online/total' \ +--data-urlencode 'aid=759949922' \ +--data-urlencode 'cid=392402545' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "total": "9.4万+", + "count": "50953", + "show_switch": { + "total": true, + "count": true + } + } +} +``` + +
+ +## 获取视频在线人数_APP端 + +> https://app.bilibili.com/x/v2/view/video/online + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ----------- | --------------- | +| aid | num | 稿件avid | 必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| cid | num | 视频cid | 必要 | 用于选择目标分P | +| ts | num | 当前时间戳 | APP方式必要 | | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ---------------- | ---- | +| online | obj | 所有终端总计人数 | | + +`data`中的`show_switch`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ---------------- | ----------------- | +| online | str | 所有终端总计人数 | 例如`10万+人在看` | + +**示例:** + +查询视频`av759949922`/`BV1y64y1q757`中1P(`392402545`)的在线人数 + +```shell +curl -G 'https://app.bilibili.com/x/v2/view/video/online' \ +--data-urlencode 'aid=759949922' \ +--data-urlencode 'appkey=1d8b6e7d45233436' \ +--data-urlencode 'cid=392402545' \ +--data-urlencode 'ts=0' \ +--data-urlencode 'sign=172dfd9941a01275eb93ce6246cd8556' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "online": { + "total_text": "8.8万+人在看" + } + } +} +``` + +
\ No newline at end of file diff --git a/docs/video/pbp.md b/docs/video/pbp.md new file mode 100644 index 0000000..9ce5824 --- /dev/null +++ b/docs/video/pbp.md @@ -0,0 +1,69 @@ +# 高能进度条 + +高能进度条反应了在时域上,单位时间内弹幕发送量的变化趋势 + +并用曲线顶点表示在进度条上,实现可视化 + +## 获取弹幕趋势顶点列表 + +> https://bvc.bilivideo.com/pbp/data + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| cid | num | 视频cid | 必要 | | +| aid | num | 稿件avid | 非必要 | | +| bvid | num | 稿件bvid | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------ | ---------------------------- | +| step_sec | num | 采样间隔时间 | 单位为秒
由视频时长决定 | +| tagstr | str | ??? | 作用尚不明确 | +| events | obj | 数据本体 | | +| debug | str | 调试信息 | json字串 | + +`events`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | ---------- | ---- | +| default | array | 顶点值列表 | | + +`events`对象中的数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | -------------------------------- | +| 0 | num | 顶点1 | | +| n | num | 顶点(n+1) | 顶点个数由视频时长和采样时间决定 | +| …… | num | …… | …… | + +**示例:** + +获取视频`cid=3724723`的获取弹幕趋势顶点列表 + +```shell +curl -G 'https://api.bilibili.com/pbp/data' \ +--data-urlencode 'cid=3724723' +``` + +
+查看响应示例: + +```json +{ + "step_sec": 3, + "tagstr": "pbphide_0&client_&innersign_0&group_eg&nocheck_0&version_&pbphide_0", + "events": { + "default": [0, 8853, 8011, 8043.5, 8602.5, 9377, 18838, 9645, 10396, 10672.5, 10316.5, 9987, 9524, 9040, 9081, 8747, 8517, 8559.5, 8220.5, 8133, 7164, 5626, 4992, 4628.5, 4570.5, 4473.5, 4681.5, 4365.5, 3811.5, 3813, 3883, 4059.5, 4103.5, 4227.5, 4330.5, 4096.5, 4228.5, 4337, 5017, 5897, 6220, 5711.5, 4871.5, 4533, 4364, 3976, 4012, 3985, 3658, 3540, 3789, 3646, 3045, 2769, 2587, 2488.5, 2402.5, 2521.5, 2508.5, 2763.5, 2941.5, 3685.5, 3337.5, 2457, 2313, 2322.5, 2480.5, 2595, 2520, 2173.5, 2058.5, 2268.5, 2312.5, 2847, 1083, 1.5, 2.5, 0, 0, 2] + }, + "debug": "{\"max_time\":237,\"zero_points_ratio\":0.025,\"total_dm\":1000,\"event_count\":400147}" +} +``` + +
diff --git a/docs/video/player.md b/docs/video/player.md new file mode 100644 index 0000000..66bce57 --- /dev/null +++ b/docs/video/player.md @@ -0,0 +1,520 @@ +# 播放器 + +## web 播放器信息 + +web 播放器的信息接口,提供正常播放需要的元数据,包括:智能防挡弹幕、字幕、章节看点等。 + +> https://api.bilibili.com/x/player/wbi/v2 +> https://api.bilibili.com/x/player/v2 + +*请求方式:GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------- | ----------- | ----------------- | +| aid | num | 稿件 avid | 必要 (可选) | aid 与 bvid 任选 | +| bvid | str | 稿件 bvid | 必要 (可选) | aid 与 bvid 任选 | +| cid | num | 稿件 cid | 必要 | | +| season_id | num | 番剧 season_id | 不必要 | | +| ep_id | num | 剧集 ep_id | 不必要 | | +| w_rid | str | WBI 签名 | 不必要 | | +| wts | num | 当前 unix 时间戳 | 不必要 | | + +**JSON回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0: 成功
-400: 请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------- | ---- | +| aid | num | 视频 aid | | +| bvid | str | 视频 bvid | | +| allow_bp | bool | | | +| no_share | bool | 禁止分享? | | +| cid | num | 视频 cid | | +| dm_mask | obj | webmask 防挡字幕信息 | 若无则没有防挡功能 | +| subtitle | obj | 字幕信息 | 若无则没有字幕, 若不登陆则为空 | +| view_points | array | 分段章节信息 | | +| ip_info | obj | 请求 IP 信息 | | +| login_mid | num | 登录用户 mid | | +| login_mid_hash | str | | | +| is_owner | bool | 是否为该视频 UP 主 | | +| name | str | | | +| permission | num | | | +| level_info | obj | 登录用户等级信息 | | +| vip | obj | 登录用户 VIP 信息 | | +| answer_status | num | 答题状态 | | +| block_time | num | 封禁时间? | | +| role | str | | | +| last_play_time | num | 上次观看时间? | | +| last_play_cid | num | 上次观看 cid? | | +| now_time | num | 当前 UNIX 秒级时间戳 | | +| online_count | num | 在线人数 | | +| need_login_subtitle | bool | 是否必须登陆才能查看字幕 | 是的 | +| preview_toast | str | `为创作付费,购买观看完整视频\|购买观看` | | +| interaction | obj | 互动视频资讯 | 若非互动视频,则无该栏位(直接没有该键,而非栏位值为空)| +| options | obj | | | +| guide_attention | any | | | +| jump_card | any | | | +| operation_card | any | | | +| online_switch | obj | | | +| fawkes | obj | 播放器相关信息? | | +| show_switch | obj | | | +| bgm_info | obj | 背景音乐信息 | | +| toast_block | bool | | | +| is_upower_exclusive | bool | 是否为充电专属视频 | | +| is_upower_play | bool | | | +| is_ugc_pay_preview | bool | | | +| elec_high_level | obj | 充电专属视频信息 | | +| disable_show_up_info | bool | | | + +`data` 对象中的 `options` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | --- | --- | +| is_360 | bool | 是否 360 全景视频 | | +| without_vip | bool | | | + +`data` 对象中的 `bgm_info` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| music_id | str | 音乐 id | | +| music_title | str | 音乐标题 | | +| jump_url | str | 跳转 URL | | + +`data` 对象中的 `dm_mask` 对象 (如果有): + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------- | ---- | +|cid | num | 视频 cid | | +|plat | num | 未知 | | +|fps | num | webmask 取样 fps | | +|time | num | 未知 | | +|mask_url | str | webmask 资源 url | | + +解析 webmask 请看 [智能防挡弹幕](../danmaku/webmask.md) + +`data` 对象中的 `subtitle` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------- | ---- | +|allow_submit|bool | true | | +| lan | str | "" | | +|lan_doc | str | "" | | +|subtitles| array | | 不登录为 `[]` | + +`subtitle` 对象中的 `subtitles` 数组内的元素: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------- | ---- | +| ai_status | num | | | +| ai_type | num | | | +| id | num | | | +|id_str | str| | 和 id 不一样 | +| is_lock | bool | | | +| lan | str | 语言类型英文字母缩写 || +| lan_doc | str| 语言类型中文名称 | | +|subtitle_url|str| 资源 url 地址 | | +|type| num | 0 | | + +`data`对象中的`view_point` 数组内的元素: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------- | ---- | +| content | str | 分段章节名 | | +| from | num | 分段章节起始秒数 | | +| to | num | 分段章节结束秒数 | | +| type | num | | | +| imgUrl | str | 图片资源地址 | | +| logoUrl | str | "" | | +| team_type | str | | | +| team_name | str | | | + +`data` 对象中的 `interaction` 对象 (如果有): + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | -------- | ---- | +| graph_version | num | 剧情图id | | +| msg | str | | 未登入有机会返回 `登录后才能体验全部结局哦~` | +| error_toast | str | 错误信息? | 所有互动视频皆返回 `剧情图被修改已失效`,不确定有没有例外 | +| mark | num | 0? | | +| need_reload | num | 0? | | + +`data`对象中的`elec_high_level`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ------------------------------ | ---------------- | +| privilege_type | num | 解锁视频所需最低定价档位的代码 | 见[充电档位代码与定价](../electric/monthly.md#充电档位代码privilege_type与定价) | +| title | str | 提示标题 | `该视频为「{充电档位名称}」专属视频` | +| sub_title | str | 提示子标题 | `开通「{充电档位定价}元档包月充电」即可观看` | +| show_button | bool | 是否显示按钮 | | +| button_text | str | 按钮文本 | `去开通` | +| jump_url | obj | 跳转url信息 | 详细信息有待补充 | +| intro | str | 充电介绍语 | | +| open | bool | (?) | | +| new | bool | (?) | | +| question_text | str | (?) | | +| qa_detail_link | str | (?) | | + +**示例:** + +未登录, `aid=1906473802` + +```shell +curl -G 'https://api.bilibili.com/x/player/wbi/v2' \ +--url-query 'bvid=BV1MU411S7iJ' \ +--url-query 'aid=1906473802' \ +--url-query 'cid=1625992822' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aid": 1906473802, + "bvid": "BV1MU411S7iJ", + "allow_bp": false, + "no_share": false, + "cid": 1625992822, + "max_limit": 1000, + "page_no": 1, + "has_next": false, + "ip_info": { + "ip": "104.28.152.138", + "zone_ip": " 10.163.150.25", + "zone_id": 29409280, + "country": "美国", + "province": "加利福尼亚州", + "city": "东洛杉矶" + }, + "login_mid": 0, + "login_mid_hash": "", + "is_owner": false, + "name": "", + "permission": "0", + "level_info": { + "current_level": 0, + "current_min": 0, + "current_exp": 0, + "next_exp": 0, + "level_up": 0 + }, + "vip": { + "type": 0, + "status": 0, + "due_date": 0, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "", + "use_img_label": false, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "", + "img_label_uri_hant_static": "" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "", + "tv_vip_status": 0, + "tv_vip_pay_type": 0, + "tv_due_date": 0, + "avatar_icon": { + "icon_resource": {} + } + }, + "answer_status": 0, + "block_time": 0, + "role": "", + "last_play_time": 0, + "last_play_cid": 0, + "now_time": 1725002188, + "online_count": 1, + "need_login_subtitle": false, + "view_points": [], + "preview_toast": "为创作付费,购买观看完整视频|购买观看", + "options": { + "is_360": false, + "without_vip": false + }, + "guide_attention": [], + "jump_card": [], + "operation_card": [], + "online_switch": { + "enable_gray_dash_playback": "500", + "new_broadcast": "1", + "realtime_dm": "1", + "subtitle_submit_switch": "1" + }, + "fawkes": { + "config_version": 30787, + "ff_version": 21289 + }, + "show_switch": { + "long_progress": false + }, + "bgm_info": { + "music_id": "MA436038343856245020", + "music_title": "Unwelcome school", + "jump_url": "https://music.bilibili.com/h5/music-detail?music_id=MA436038343856245020&cid=1625992822&aid=1906473802" + }, + "toast_block": false, + "is_upower_exclusive": false, + "is_upower_play": false, + "is_ugc_pay_preview": false, + "elec_high_level": { + "privilege_type": 0, + "title": "", + "sub_title": "", + "show_button": false, + "button_text": "", + "jump_url": "", + "intro": "", + "new": false + }, + "disable_show_up_info": false + } +} +``` + +
+ +已登陆, `aid=60977932` + +```shell +curl -G 'https://api.bilibili.com/x/player/v2' \ +--url-query 'aid=60977932' \ +--url-query 'cid=106101299' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aid": 60977932, + "bvid": "BV1Jt411P77c", + "allow_bp": false, + "no_share": false, + "cid": 106101299, + "max_limit": 1000, + "page_no": 1, + "has_next": true, + "ip_info": { + "ip": "108.181.22.55", + "zone_ip": " 172.27.132.5", + "zone_id": 29409296, + "country": "美国", + "province": "加利福尼亚州", + "city": "洛杉矶" + }, + "login_mid": 616368979, + "login_mid_hash": "445e7035", + "is_owner": false, + "name": "淡紫玲儿", + "permission": "10000,1001", + "level_info": { + "current_level": 3, + "current_min": 1500, + "current_exp": 2962, + "next_exp": 4500, + "level_up": -62135596800 + }, + "vip": { + "type": 1, + "status": 0, + "due_date": 1665417600000, + "vip_pay_type": 0, + "theme_type": 0, + "label": { + "path": "", + "text": "", + "label_theme": "", + "text_color": "", + "bg_style": 0, + "bg_color": "", + "border_color": "", + "use_img_label": true, + "img_label_uri_hans": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png" + }, + "avatar_subscript": 0, + "nickname_color": "", + "role": 0, + "avatar_subscript_url": "", + "tv_vip_status": 0, + "tv_vip_pay_type": 0, + "tv_due_date": 0, + "avatar_icon": { + "icon_resource": {} + } + }, + "answer_status": 0, + "block_time": 0, + "role": "0", + "last_play_time": 0, + "last_play_cid": 0, + "now_time": 1725003260, + "online_count": 1, + "need_login_subtitle": false, + "subtitle": { + "allow_submit": true, + "lan": "zh-CN", + "lan_doc": "中文(中国)", + "subtitles": [ + { + "id": 13643112644608002, + "lan": "zh-Hans", + "lan_doc": "中文(简体)", + "is_lock": true, + "subtitle_url": "//aisubtitle.hdslb.com/bfs/subtitle/c49b18a284739d99df1e3723cdf72c0c82db98e0.json?auth_key=1725003260-5d0391a07f4f47f6960f60cf5045dff3-0-fc16c1f67a6b41edcb2a89d5e0c9bfdd", + "type": 0, + "id_str": "13643112644608002", + "ai_type": 0, + "ai_status": 0 + }, + { + "id": 13643200114196484, + "lan": "en-US", + "lan_doc": "英语(美国)", + "is_lock": true, + "subtitle_url": "//aisubtitle.hdslb.com/bfs/subtitle/2b38bc0f5d7671176964d4c3de441ed37568500c.json?auth_key=1725003260-5f709a74aa884751b77f86b6f6a48078-0-9b2fc3c18b99b1bf0cc7c7e63d18f686", + "type": 0, + "id_str": "13643200114196484", + "ai_type": 0, + "ai_status": 0 + } + ] + }, + "view_points": [], + "preview_toast": "为创作付费,购买观看完整视频|购买观看", + "options": { + "is_360": false, + "without_vip": false + }, + "guide_attention": [], + "jump_card": [], + "operation_card": [], + "online_switch": { + "enable_gray_dash_playback": "500", + "new_broadcast": "1", + "realtime_dm": "1", + "subtitle_submit_switch": "1" + }, + "fawkes": { + "config_version": 30787, + "ff_version": 21289 + }, + "show_switch": { + "long_progress": false + }, + "bgm_info": null, + "toast_block": false, + "is_upower_exclusive": false, + "is_upower_play": false, + "is_ugc_pay_preview": false, + "elec_high_level": { + "privilege_type": 0, + "title": "", + "sub_title": "", + "show_button": false, + "button_text": "", + "jump_url": "", + "intro": "", + "new": false + }, + "disable_show_up_info": false + } +} +``` + +
+ +## 播放反馈 + +> https://app.bilibili.com/x/resource/laser2 + +*请求方式: POST* + +注: 该接口不传 Cookie + +**URL参数:** + +|参数名|类型|内容|必要性|备注| +|-|-|-|-|-| +|mid|num|当前用户 mid|不必要|未登录为空| +|buvid|str|BUVID (APP) 或 buvid3 (Web)|必要|可为任意非空字符串| +|app_key|str|APP 密钥|必要|Web: web_player
可为任意非空字符串| +|url|str|日志 URL|非必要|从 [上传接口](../creativecenter/upload.md#上传接口) 得到的 upos 协议 URL| +|task_type|num|任务类型|非必要|300: 播放卡顿
301: 进度条君无法调戏
354: 校园网无法访问
303: 弹幕无法显示
553: 跳过首尾时间有误
304: 出现浮窗广告
305: 无限小电视
302: 音画不同步
306: 黑屏
307: 其他| + +**JSON回复:** + +|字段|类型|内容|备注| +|-|-|-|-| +|code|num|返回值|0: 成功
-400: 请求错误| +|message|str|错误信息|默认为 0| +|ttl|num|1|| +|data|obj|数据本体| | + +`data` 对象: + +|字段|类型|内容|备注| +|-|-|-|-| +|task_id|num|任务 ID?|| + +**示例:** + +播放反馈无限小电视, 不登录, 不传文件, buvid 为 `chenrui-in-icu` + +```shell +curl -X POST "https://app.bilibili.com/x/resource/laser2" \ +--data-urlencode "buvid=chenrui-in-icu" \ +--data-urlencode "app_key=web_player" \ +--data-urlencode "task_type=305" +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "task_id": 850448532 + } +} +``` + +
diff --git a/docs/video/recommend.md b/docs/video/recommend.md new file mode 100644 index 0000000..42704c4 --- /dev/null +++ b/docs/video/recommend.md @@ -0,0 +1,2680 @@ +# 视频推荐 + +## 获取单视频推荐列表(web端) + +> https://api.bilibili.com/x/web-interface/archive/related + +*请求方式:GET* + +最多获取40条推荐视频 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|-----|--------|--------|---------------| +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-------|------|----------------------| +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 推荐列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +|----|-----|-----------|----| +| 0 | obj | 推荐视频1 | | +| n | obj | 推荐视频(n+1) | | +| …… | obj | …… | …… | +| 39 | obj | 推荐视频40 | | + +`data`数组中的对象: + +基本同「[获取视频详细信息(web端)](info.md#获取视频详细信息(web端))」中的data对象,已知没有分P信息 + +**示例:** + +查询视频`av7`/`BV1xx411c7m9`的推荐视频列表 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/related' \ +--data-urlencode 'aid=7' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/related' \ +--data-urlencode 'bvid=BV1xx411c7m9' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "aid": 21322566, + "videos": 1, + "tid": 124, + "tname": "趣味科普人文", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/37f383ac35d386af1fc578108ad643e5952ff66a.jpg", + "title": "bilibili上市宣传视频", + "pubdate": 1522205992, + "ctime": 1522205994, + "desc": "今天晚上9点30分(北京时间),bilibili将在美国纳斯达克(NASDAQ)证券交易所挂牌上市。", + "state": 0, + "attribute": 16768, + "duration": 155, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 208259, + "name": "陈睿", + "face": "http://i2.hdslb.com/bfs/face/8920e6741fc2808cce5b81bc27abdbda291655d3.png" + }, + "stat": { + "aid": 21322566, + "view": 2129084, + "danmaku": 51108, + "reply": 18119, + "favorite": 46524, + "coin": 85223, + "share": 16669, + "now_rank": 0, + "his_rank": 1, + "like": 95621, + "dislike": 0 + }, + "dynamic": "今天晚上9点30分(北京时间),bilibili将在美国纳斯达克(NASDAQ)证券交易所挂牌上市。", + "cid": 35063529, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "" + }, + { + "aid": 271, + "videos": 1, + "tid": 53, + "tname": "", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/a5980672f3d03e8292148748a63de99cd45679d3.jpg", + "title": "弹幕测试专用", + "pubdate": 1249886475, + "ctime": 1497344798, + "desc": "给职人发射弹幕定位用.", + "state": 0, + "attribute": 32768, + "duration": 4558, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 2, + "name": "碧诗", + "face": "http://i1.hdslb.com/bfs/face/3e60b20604b6fdc7d081eb6a1ec72aa47c5a3964.jpg" + }, + "stat": { + "aid": 271, + "view": 2532266, + "danmaku": 699214, + "reply": 10224, + "favorite": 34927, + "coin": 9712, + "share": 3586, + "now_rank": 0, + "his_rank": 182, + "like": 27257, + "dislike": 0 + }, + "dynamic": "", + "cid": 3659795, + "dimension": { + "width": 0, + "height": 0, + "rotate": 0 + }, + "bvid": "" + }, + { + "aid": 106, + "videos": 1, + "tid": 26, + "tname": "音MAD", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/34d8fdf08d1fe28c229dec2fd122815a1d012908.jpg", + "title": "最终鬼畜蓝蓝路", + "pubdate": 1350316631, + "ctime": 1497348932, + "desc": "sm2057168 把这个音mad的图腾和支柱从UP的怒火中搬出来重新立好,这是我所能做的最后的事情了。", + "state": 0, + "attribute": 32768, + "duration": 318, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 0, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 8839, + "name": "TSA", + "face": "http://i0.hdslb.com/bfs/face/0ef5daf622bf4789034b3c15147a45e11c48c9b3.jpg" + }, + "stat": { + "aid": 106, + "view": 7607070, + "danmaku": 212896, + "reply": 41521, + "favorite": 200705, + "coin": 51673, + "share": 38049, + "now_rank": 0, + "his_rank": 22, + "like": 148550, + "dislike": 0 + }, + "dynamic": "", + "cid": 3635863, + "dimension": { + "width": 0, + "height": 0, + "rotate": 0 + }, + "bvid": "" + }, + { + "aid": 50025934, + "videos": 1, + "tid": 122, + "tname": "野生技术协会", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/af534399612085dbd916381b3377b18c765fab2d.png", + "title": "B站又一位Lv9的up诞生了", + "pubdate": 1555829289, + "ctime": 1555829289, + "desc": "要不关注一下?", + "state": 0, + "attribute": 16512, + "duration": 45, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 174161216, + "name": "血色红茶Xenomprph", + "face": "http://i1.hdslb.com/bfs/face/5a5ececb9b7a688751024c60063ba5853bed7e1e.jpg" + }, + "stat": { + "aid": 50025934, + "view": 159595, + "danmaku": 62, + "reply": 153, + "favorite": 301, + "coin": 1059, + "share": 55, + "now_rank": 0, + "his_rank": 0, + "like": 1219, + "dislike": 0 + }, + "dynamic": "", + "cid": 87577929, + "dimension": { + "width": 2560, + "height": 1440, + "rotate": 0 + }, + "bvid": "" + } + … + … + … + … + ] +} +``` + +
+ +## 获取首页视频推荐列表(web端) + +> https://api.bilibili.com/x/web-interface/wbi/index/top/feed/rcmd + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +最多获取30条推荐视频,直播及推荐边栏 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------------|-----|--------------|-----|--------------------------------| +| fresh_type | num | 相关性 | 非必要 | 默认为 4
值越大推荐内容越相关 | +| ps | num | 单页返回的记录条数 | 非必要 | 默认为 12, 留空即最大值为 30 | +| fresh_idx | num | 当前翻页号 | 非必要 | 以 1 开始 | +| fresh_idx_1h | num | 当前翻页号(一小时前?) | 非必要 | 以 1 开始, 默认与 fresh_idx 内容相同 | +| brush | num | 刷子? | 非必要 | 以 1 开始, 默认与 fresh_idx 内容相同 | +| fetch_row | num | 本次抓取的最后一行行号 | 非必要 | 1 递归加上本次抓取总行数 | +| web_location | num | 网页位置 | 非必要 | 主页为 1430650 | +| y_num | num | 普通列数 | 非必要 | 一行中视频,直播及广告数 | +| last_y_num | num | 总列数 | 非必要 | 普通列数 + 边栏列数 | +| feed_version | str | V8 | 非必要 | 作用尚不明确 | +| homepage_ver | num | 1 | 非必要 | 首页版本 | +| screen | str | 浏览器视口大小 | 非必要 | 水平在前垂直在后以减号分割 | +| seo_info | str | 空 | 非必要 | 作用尚不明确 | +| last_showlist | str | 上次抓取的视频av号列表 | 非必要 | av与数字间用下划线分隔, 若视频UP主已关注则中间再插入n | +| uniq_id | str | ??? | 非必要 | 作用尚不明确 | +| w_rid | str | WBI 签名 | 非必要 | 见[WBI 签名](../misc/sign/wbi.md) | +| wts | num | UNIX 时间戳 | 非必要 | 见[WBI 签名](../misc/sign/wbi.md) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|----------------------| +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------------------|-------|-------|--------------------| +| business_card | null | | | +| floor_info | null | | | +| item | array | 推荐列表 | | +| mid | num | 用户mid | 未登录为0 | +| preload_expose_pct | num | 0.5 | 用于预加载? | +| preload_floor_expose_pct | num | 0.5 | 用于预加载? | +| side_bar_column | array | 边栏列表? | 可参考字段 item 及对应功能文档 | +| user_feature | null | | | + +`data`对象中`item`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------------|------|---------------|----------------------------------------------| +| av_feature | null | | | +| business_info | obj | 商业推广信息 | 无为null
对于推广内容,视频信息会在这个dict的"archive"属性下 | +| bvid | str | 视频bvid | | +| cid | num | 稿件cid | | +| dislike_switch | num | 1 | 显示不感兴趣开关? | +| dislike_switch_pc | num | 0 | 显示不感兴趣开关(PC)? | +| duraion | num | 视频时长 | | +| enable_vt | num | 0 | 作用尚不明确 | +| goto | num | 目标类型 | av: 视频
ogv: 边栏
live: 直播 | +| duraion | num | 视频时长 | | +| id | num | 视频aid / 直播间id | | +| is_followed | num | 已关注 | 0: 未关注
1: 已关注 | +| is_stock | num | 0 | 作用尚不明确 | +| ogv_info | null | | | +| owner | obj | UP主 | | +| pic | str | 封面 | | +| pic_4_3 | str | 封面(4:3) | | +| pos | num | 0 | 位置? | +| pubdate | num | 发布时间 | | +| rcmd_reason | obj | 推荐理由 | 直播等为null | +| room_info | obj | 直播间信息 | 普通视频等为null, 参见[直播](../live) | +| show_info | num | 展示信息 | 1: 普通视频
0: 直播 | +| stat | obj | 视频状态信息 | 直播等为null, 参见[视频基本信息](info.md) | +| title | str | 标题 | | +| track_id | str | 跟踪标识? | | +| uri | str | 目标页 URI | | +| vt_display | str | 空 | 作用尚不明确 | + +`item`数组中的对象中的`owner`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|----| +| face | str | 头像URL | | +| mid | num | UP主mid | | +| name | str | UP昵称 | | + +`item`数组中的对象中的`rcmd_reason`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|------|-------------------------------| +| reason_type | num | 原因类型 | 0: 无
1: 已关注
3: 高点赞量 | +| content | str | 原因描述 | 当 reason_type 为 3 时存在 | + +**示例:** + +获取新版web端首页推荐视频列表 + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/wbi/index/top/feed/rcmd' \ +--data-urlencode 'fresh_type=4' \ +--data-urlencode 'ps=12' \ +--data-urlencode 'fresh_idx=5' \ +--data-urlencode 'fresh_idx_1h=5' \ +--data-urlencode 'fetch_row=16' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "item": [ + { + "id": 1354614895, + "bvid": "BV1Dz42117GZ", + "cid": 1548835687, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1Dz42117GZ", + "pic": "http://i1.hdslb.com/bfs/archive/b47154987b4c0f40a39779c09a9d485176d1238f.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/archive/b47154987b4c0f40a39779c09a9d485176d1238f.jpg", + "title": "做数学题总是抄错 | 看错 | 算错 怎么破?决定高考分数的这个非智力因素不容忽视", + "duration": 882, + "pubdate": 1715946937, + "owner": { + "mid": 374484802, + "name": "数学阮禾老师", + "face": "https://i1.hdslb.com/bfs/face/4df57e4b48b04206bce7572831688741580ca0e1.jpg" + }, + "stat": { + "view": 48250, + "like": 2959, + "danmaku": 433, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1255924089, + "bvid": "BV1DJ4m1u7Mp", + "cid": 1600833978, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1DJ4m1u7Mp", + "pic": "http://i0.hdslb.com/bfs/archive/5068d860e8bbc37679ece933aa8e6d8428cfb5c1.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-07-01-1145021255924089_1612_gener.jpg", + "title": "人类这种生物,看到按钮就会按下去。", + "duration": 326, + "pubdate": 1719805500, + "owner": { + "mid": 5616993, + "name": "马夫鱼33", + "face": "https://i0.hdslb.com/bfs/face/4c2af23046147e91ce5a4af3375464fdcf1956e6.jpg" + }, + "stat": { + "view": 667067, + "like": 28529, + "danmaku": 483, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "content": "2万点赞", + "reason_type": 3 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1306020278, + "bvid": "BV1rM4m117Ry", + "cid": 1608959606, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1rM4m117Ry", + "pic": "http://i0.hdslb.com/bfs/archive/49f62c70f17d0afe00e5e620dd366c68149c780e.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/archive/49f62c70f17d0afe00e5e620dd366c68149c780e.jpg", + "title": "Axios 前后端对接教程|HTTP", + "duration": 352, + "pubdate": 1720440325, + "owner": { + "mid": 260736087, + "name": "三分钟实验室", + "face": "https://i0.hdslb.com/bfs/face/6172aa089ed0b26ffffb72018422eb4280d4da41.jpg" + }, + "stat": { + "view": 7527, + "like": 365, + "danmaku": 1, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1755972439, + "bvid": "BV1g4421D7qn", + "cid": 1597039275, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1g4421D7qn", + "pic": "http://i2.hdslb.com/bfs/archive/35ee2ffaab4206d17893a3f48cdf512b4f028fdc.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-26-21354756381755972439_16_12_5326_crop.jpg", + "title": "《我爱发明》里那些抽象发明 歹徒兴奋床!", + "duration": 659, + "pubdate": 1719408945, + "owner": { + "mid": 348989367, + "name": "沫子瞪片", + "face": "https://i0.hdslb.com/bfs/face/a2131d38a2ea73f16ff25e61dbeb40377233f552.jpg" + }, + "stat": { + "view": 1540767, + "like": 65409, + "danmaku": 5383, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1055953358, + "bvid": "BV1jH4y1w7A6", + "cid": 1598484848, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1jH4y1w7A6", + "pic": "http://i1.hdslb.com/bfs/archive/accdb655b4f2bef665e6fdedb4de28de2feda078.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-28-12560692491055953358_16_12_2438_crop.jpg", + "title": "为什么一个数的5次方个位数是自己!", + "duration": 327, + "pubdate": 1719550565, + "owner": { + "mid": 483522694, + "name": "火星课堂", + "face": "https://i1.hdslb.com/bfs/face/fe751f0d7062c8e8adcef501390d48330fac0514.jpg" + }, + "stat": { + "view": 244673, + "like": 5406, + "danmaku": 210, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": { + "id": 0, + "contract_id": "", + "res_id": 1055953358, + "asg_id": 0, + "pos_num": 0, + "name": "", + "pic": "", + "litpic": "", + "url": "", + "style": 0, + "agency": "", + "label": "", + "intro": "", + "creative_type": 0, + "request_id": "1721098961752q172a25a216a162q1363", + "src_id": 5637, + "area": 0, + "is_ad_loc": true, + "ad_cb": "", + "title": "", + "server_type": 0, + "cm_mark": 0, + "stime": 0, + "mid": "", + "activity_type": 0, + "epid": 0, + "sub_title": "", + "ad_desc": "", + "adver_name": "", + "null_frame": false, + "pic_main_color": "", + "card_type": 0, + "business_mark": null, + "inline": { + "inline_use_same": 0, + "inline_type": 0, + "inline_url": "", + "inline_barrage_switch": 0 + }, + "operater": "", + "jump_target": 0, + "show_urls": null, + "click_urls": null + }, + "is_stock": 1, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1763571437, + "bvid": "", + "cid": 0, + "goto": "live", + "uri": "https://live.bilibili.com/1763571437", + "pic": "http://i0.hdslb.com/bfs/live/new_room_cover/f1787ef2ce4a2a031fb4a6a63b62d15493268d71.jpg", + "pic_4_3": "", + "title": "【新V】今天不要再把自己笨哭了", + "duration": 0, + "pubdate": 0, + "owner": { + "mid": 3546712666802274, + "name": "伊柒璇儿_鹤熙冠", + "face": "https://i0.hdslb.com/bfs/face/3e0ff3d7d53b9ac1a2d90ea563e22d3f70ad28cc.jpg" + }, + "stat": null, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": null, + "show_info": 0, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": { + "room_id": 1763571437, + "uid": 3546712666802274, + "live_status": 1, + "show": { + "short_id": 0, + "title": "【新V】今天不要再把自己笨哭了", + "cover": "http://i0.hdslb.com/bfs/live/new_room_cover/f1787ef2ce4a2a031fb4a6a63b62d15493268d71.jpg", + "keyframe": "http://i0.hdslb.com/bfs/live-key-frame/keyframe07161101001763571437k9l40v.jpg", + "popularity_count": 8539, + "tag_list": null, + "live_start_time": 0, + "live_id": 0, + "hidden_online": false + }, + "area": { + "area_id": 0, + "area_name": "虚拟日常", + "parent_area_id": 9, + "parent_area_name": "虚拟主播", + "old_area_id": 0, + "old_area_name": "", + "old_area_tag": "", + "area_pk_status": 0, + "is_video_room": false + }, + "watched_show": { + "switch": true, + "num": 168, + "text_small": "168", + "text_large": "168人看过", + "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png", + "icon_location": "", + "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png" + } + }, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1855792572, + "bvid": "BV16s421T7CU", + "cid": 1587596195, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV16s421T7CU", + "pic": "http://i2.hdslb.com/bfs/archive/1b9d9799260a075b094212bf79e3d7ccb9e04087.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-19-14044883851855792572_16_12_7260_crop.jpg", + "title": "压缩蚊件.zip", + "duration": 66, + "pubdate": 1718777086, + "owner": { + "mid": 173947574, + "name": "好奇五先生", + "face": "https://i2.hdslb.com/bfs/face/1c69fff12a2d0d50e71931cef0486ab919a818a2.jpg" + }, + "stat": { + "view": 951633, + "like": 22930, + "danmaku": 932, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1405866842, + "bvid": "BV11r421F7E8", + "cid": 1589772517, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV11r421F7E8", + "pic": "http://i2.hdslb.com/bfs/archive/50b1bb8d227d17a3b6195e80128ab295d152d3be.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-20-2148551405866842_1612_gener.jpg", + "title": "【音游推荐】暑期音游推荐,不同基础都可入坑", + "duration": 311, + "pubdate": 1718891332, + "owner": { + "mid": 592146708, + "name": "Qc天水", + "face": "https://i0.hdslb.com/bfs/face/2998a9e762aa07559b2acf54234f07979c959ffe.jpg" + }, + "stat": { + "view": 278997, + "like": 6698, + "danmaku": 303, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1055540151, + "bvid": "BV1in4y197U4", + "cid": 1582190043, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1in4y197U4", + "pic": "http://i2.hdslb.com/bfs/archive/9a366971fadd6e4dfd1813c42b180c8779038627.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-15-18004087071055540151_16_12_7856_crop.jpg", + "title": "我把裁判罚下场了", + "duration": 217, + "pubdate": 1718445600, + "owner": { + "mid": 475304452, + "name": "生姜蛋包饭", + "face": "https://i1.hdslb.com/bfs/face/40feee36c71f7f53931854fc54c88d530360b1a7.jpg" + }, + "stat": { + "view": 678085, + "like": 62171, + "danmaku": 832, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "content": "6万点赞", + "reason_type": 3 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1505823466, + "bvid": "BV1vS421d7No", + "cid": 1596567774, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1vS421d7No", + "pic": "http://i2.hdslb.com/bfs/archive/b2b19b067cdbf7dd93be5fc01009e72c20572184.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-26-1241021505823466_1612_gener.jpg", + "title": "AI 视频:两小儿辩日", + "duration": 138, + "pubdate": 1719376858, + "owner": { + "mid": 589397373, + "name": "宝玉xp", + "face": "https://i0.hdslb.com/bfs/face/c2c29f6e1bb9b0860241f0df4d2cdea8242ab5d2.jpg" + }, + "stat": { + "view": 1216188, + "like": 54839, + "danmaku": 194, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1055744039, + "bvid": "BV1Zn4y1Q7zj", + "cid": 1575814128, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1Zn4y1Q7zj", + "pic": "http://i0.hdslb.com/bfs/archive/5288cf0830e49de414084c4168b11033b08f8507.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-09-17404720501055744039_16_12_294_crop.jpg", + "title": "【诺子】重新“看见”世界是一种什么样的感觉?", + "duration": 579, + "pubdate": 1717926045, + "owner": { + "mid": 10276136, + "name": "诺子喵呜", + "face": "https://i2.hdslb.com/bfs/face/7e6846ed5619b945c888b8f8db5000469f6353ff.jpg" + }, + "stat": { + "view": 1016467, + "like": 97886, + "danmaku": 979, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + }, + { + "id": 1706215690, + "bvid": "BV1tT421k7By", + "cid": 1611364587, + "goto": "av", + "uri": "https://www.bilibili.com/video/BV1tT421k7By", + "pic": "http://i1.hdslb.com/bfs/archive/cd3308109e8726fe4147dd25ed7ca0dbeeda1dc1.jpg", + "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-07-11-00194836761706215690_16_12_3934_crop.jpg", + "title": "谷歌翻译20遍《河中石兽》泌尿系统", + "duration": 145, + "pubdate": 1720628387, + "owner": { + "mid": 1030835113, + "name": "象哥嘎", + "face": "https://i1.hdslb.com/bfs/face/aa0ae89fa72dab7b8bc082433769b1768f51c3dc.jpg" + }, + "stat": { + "view": 78600, + "like": 3437, + "danmaku": 328, + "vt": 0 + }, + "av_feature": null, + "is_followed": 0, + "rcmd_reason": { + "reason_type": 0 + }, + "show_info": 1, + "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133", + "pos": 0, + "room_info": null, + "ogv_info": null, + "business_info": null, + "is_stock": 0, + "enable_vt": 0, + "vt_display": "", + "dislike_switch": 1, + "dislike_switch_pc": 0 + } + ], + "side_bar_column": [ + { + "id": 25502, + "goto": "comic", + "track_id": "", + "pos": 1, + "card_type": "漫画", + "card_type_en": "comic", + "cover": "http://i0.hdslb.com/bfs/manga-static/5e410bf6f73ff87f87b543e4b918de5f024652e8.jpg", + "url": "https://manga.bilibili.com/detail/mc25502", + "title": "头文字D", + "sub_title": "", + "duration": 0, + "stats": null, + "room_info": null, + "styles": [ + "游戏竞技" + ], + "comic": { + "comic_id": 25502, + "title": "头文字D", + "horizontal_cover": "http://i0.hdslb.com/bfs/manga-static/5e410bf6f73ff87f87b543e4b918de5f024652e8.jpg", + "square_cover": "http://i0.hdslb.com/bfs/manga-static/da660f6274730af82d557f21a6247d4f6b1e300b.jpg", + "vertical_cover": "http://i0.hdslb.com/bfs/manga-static/64df8b860d2bf6bf2edd0426b4aefbff25b51386.jpg", + "is_finish": 1, + "status": 0, + "last_ord": 724, + "total": 724, + "release_time": "", + "last_short_title": "番外05", + "discount_type": 0, + "recommendation": "秋名山下坡最快的AE86神话!", + "last_read_ep_id": 0, + "latest_ep_short_title": "", + "style": [ + "游戏竞技" + ], + "author_name": [ + "重野秀一 ", + "讲谈社" + ], + "allow_wait_free": false, + "type": 0, + "rank": null, + "operate_cover": "", + "rookie_type": 0 + }, + "producer": null, + "source": "", + "av_feature": null, + "is_rec": 0, + "is_finish": 0, + "is_started": 0, + "is_play": 0, + "enable_vt": 0, + "vt_display": "" + }, + { + "id": 47800, + "goto": "ogv", + "track_id": "", + "pos": 2, + "card_type": "番剧", + "card_type_en": "bangumi", + "cover": "https://i0.hdslb.com/bfs/bangumi/image/1c61f75b571fffb8c5a2bd0396b49ce3529776f4.png", + "url": "https://www.bilibili.com/bangumi/play/ss47800", + "title": "铁甲小宝 重制版 中文配音", + "sub_title": "童年经典回归!", + "duration": 1382000, + "stats": { + "follow": 116644, + "view": 10864687, + "danmaku": 42428, + "reply": 11448, + "coin": 18904, + "series_follow": 209046, + "series_view": 17474247, + "likes": 61376, + "favorite": 116644 + }, + "room_info": null, + "new_ep": { + "id": 824212, + "index_show": "更新至第30话", + "cover": "http://i0.hdslb.com/bfs/archive/e185c054588945a1de6648ff7fb5001852df39f4.png", + "title": "30", + "long_title": "巨大机器来袭!!", + "pub_time": "2024-07-15 18:00:01", + "duration": 1382000, + "day_of_week": 1 + }, + "styles": [ + "日常", + "热血", + "搞笑", + "原创", + "特摄" + ], + "comic": null, + "producer": [ + { + "mid": 928123, + "name": "哔哩哔哩番剧", + "type": 3, + "is_contribute": 1 + } + ], + "source": "", + "av_feature": null, + "is_rec": 0, + "is_finish": 0, + "is_started": 1, + "is_play": 1, + "horizontal_cover_16_9": "https://i0.hdslb.com/bfs/bangumi/image/ec5065dc0e88417abd4792d5caa96dacc99d1d51.png", + "horizontal_cover_16_10": "https://i0.hdslb.com/bfs/bangumi/image/5cc132e336cc72e6521bba928d8a0e50bd5a6d34.png", + "enable_vt": 0, + "vt_display": "" + }, + { + "id": 48020, + "goto": "ogv", + "track_id": "", + "pos": 3, + "card_type": "国创", + "card_type_en": "guochuang", + "cover": "https://i0.hdslb.com/bfs/bangumi/image/fcb176fcbf5a66fd122fa99f9fdf2cabf22468bb.png", + "url": "https://www.bilibili.com/bangumi/play/ss48020", + "title": "不白吃古诗词漫游记 第二季", + "sub_title": "古诗词这动人的浪漫", + "duration": 179000, + "stats": { + "follow": 2173495, + "view": 325366, + "danmaku": 110, + "reply": 208, + "coin": 443, + "series_follow": 2208624, + "series_view": 3322752487, + "likes": 8794, + "favorite": 2173495 + }, + "room_info": null, + "new_ep": { + "id": 830238, + "index_show": "更新至第7话", + "cover": "http://i0.hdslb.com/bfs/archive/6db74bc8ab2670181562314a24abe525cebb7c76.jpg", + "title": "7", + "long_title": "王维当个官怎么还郁闷了?", + "pub_time": "2024-07-15 19:00:00", + "duration": 179000, + "day_of_week": 1 + }, + "styles": [ + "少儿", + "历史", + "原创", + "古风" + ], + "comic": null, + "producer": [], + "source": "", + "av_feature": null, + "is_rec": 0, + "is_finish": 0, + "is_started": 1, + "is_play": 1, + "horizontal_cover_16_9": "https://i0.hdslb.com/bfs/bangumi/image/f19013ddd7f87b0e03df10feccc4a61a3a43774a.png", + "horizontal_cover_16_10": "https://i0.hdslb.com/bfs/bangumi/image/966553b199829aae7e47882edbe053463ee85276.png", + "enable_vt": 0, + "vt_display": "" + } + ], + "business_card": null, + "floor_info": null, + "user_feature": null, + "preload_expose_pct": 0.5, + "preload_floor_expose_pct": 0.5, + "mid": 645769214 + } +} +``` + +
+ +## 根据点击视频获取的短视频播放列表 + +> https://app.bilibili.com/x/v2/feed/index/story + +*请求方式:GET* + +在APP端点击主页视频后发出的请求 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------------|------|-------------------------|----------------|------------------------------------------| +| aid | num | 点击视频的aid | 非必要 | 所点击视频的aid,会影响到后续视频内容 | +| display_id | num | 视频列表页数 | 非必要 | 从1开始,第1页会得到比其他页多aid处所填视频 | +| access_key | str | APP登录Token | APP方式必要 | | +| ad_extra | str | 额外广告? | 非必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| auto_play | num | 自动播放 | 非必要 | 可为0 | +| build | num | 版本 | APP方式必要 | 可为`8130300` | +| bvid | str | 视频的bv号 | 非必要 | 可为空,如果没有会导致返回不正常 | +| c_locale | str | 语言 | 非必要 | zh_CN | +| channel | num | 频道 | 非必要 | | +| cid | num | 目标频道id | 非必要 | | +| contain | bool | 未知 | 非必要 | 可为false | +| creative_id | num | 未知 | 非必要 | 默认为 `0` | +| device_name | str | 设备名称 | 非必要 | 随意字符串都行 | +| disable_rcmd | num | 未知 | 非必要 | 默认为 `1` | +| epid | num | 未知 | 非必要 | 默认为 `0` | +| feed_status | num | 未知 | 非必要 | 默认为 `0` | +| fnval | num | 视频流类型 | 非必要 | | +| fnver | num | 请求时提供的fnver | 非必要 | 可为 0 | +| force_host | num | 源url类型 | 非必要 | 0:无限制 1:使用http 2:使用https | +| fourk | num | 是否允许 4K 视频 | 非必要 | 画质最高 1080P:0(默认)
画质最高 4K:1 | +| from | num | 未知 | 非必要 | 可为 `7` | +| from_spmid | str | 未知 | 非必要 | tm.recommend.0.0 | +| goto | str | 未知 | 非必要 | | +| mobi_app | str | 平台标识 | 非必要 | 可为 `web`、`android` 等 | +| network | str | 网络 | 非必要 | 可为 `wifi` | +| ogv_style | num | 未知 | 非必要 | 默认为 `0` | +| platform | str | 平台 | 非必要 | 可为`web`或`android` | +| player_net | num | 未知 | 非必要 | 默认为 `1` | +| pull | num | 未知 | 非必要 | 默认为 `1` | +| pn | num | 似乎不是页码 | 非必要 | 默认为 `32` | +| request_from | num | 未知 | 非必要 | 默认为 `0` | +| s_locale | str | 语言 | 非必要 | zh_CN | +| spmid | str | 未知 | 非必要 | main.ugc-video-detail-vertical.0.0 | +| statistics | str | 位置 | 非必要 | 可为{"appId":1,"platform":3,"version":"8.13.0","abtest":""} | +| story_param | str | 未知 | 非必要 | | +| trackid | str | 路径id?未知 | 非必要 | | +| ts | num | 秒级时间戳 | 非必要 | | +| video_mode | num | 视频模式?未知 | 非必要 | 可为 `2`,应该是可以逆向出来的 | +| voice_balance | num | 未知 | 非必要 | 默认为 `1` | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 视频信息 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ---------------------------- | +| config | obj | 配置 | | +| items | array | 视频信息 | | + +`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ---- | +| 0 | obj | 视频信息1 | | +| n | obj | 视频信息(n+1) | | +| …… | obj | …… | …… | + +`items`数组元素: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ----- | ----------------------- | ------------------------ | +| bvid | str | 视频bv号 | | +| card_goto | str | 卡片跳转 | | +| copyright | num | 版权 | | +| cover | str | 封面url | | +| desc | str | 视频描述 | | +| dimension | num | 包括视频尺寸、旋转角度 | | +| dislike_reasons_v2 | obj | 不喜欢原因v2的各种显示 | | +| dislike_reasons_v3 | obj | 不喜欢原因v3的各种显示 | | +| duration | num | 视频时长 | | +| ff_cover | str | 短视频封面原图 | | +| goto | str | 应该是跳转去向类型 | 此处为vertical_av | +| owner | obj | 拥有者,也就是up信息 | | +| param | str | 参数,实际为视频aid | | +| player_args | obj | 播放器参数 | | +| pubdate | num | 发布时间秒级时间戳 | | +| report_flow_data | str | 报告流数据 | 是个伪装成obj的str | +| req_user | ? | 未知 | 空的 | +| rights | obj | 未知 | | +| share_bottom_button | obj | 分享下方按钮 | | +| share_guide | obj | 未知 | | +| short_link | str | 视频短链接 | | +| show_report | obj | 显示举报 | | +| stat | obj | 视频信息 | | +| sub_title | str | 子标题 | 但显示的是描述播放量的文字 | +| submission_entrance | obj | 提交入口 | icon的uri | +| three_point_button | obj | 三点按钮要显示的内容 | 里面有两个array | +| thumb_up_animation | str | 未知 | | +| title | str | 视频标题 | | +| top_search_bar | obj | 搜索栏 | 内含一个跳转的uri | +| track_id | str | 路由track | | +| uri | str | uri | | +| view_content | str | 用于显示的文本形式播放量 | | +| vip | obj | vip相关的信息 | | + +`owner`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ----- | ----------------------- | ------------------------ | +| attention | num | 未知 | 包含一个mid的int字段 | +| avatar | obj | 一些显示设置 | | +| face | str | 头像url | | +| fans | num | 粉丝量 | | +| like_num | num | 获赞数 | | +| mid | num | up主的mid | | +| name | str | up主的昵称 | | +| official_verify | obj | 官方认证 | type=-1为无认证,没有其他字段;type=0为黄闪电同时role=1,type=1为蓝闪电同时role大于1,且type不为-1时有字段title为称号 | +| relation | num | 关系?未知 | | +| sub_avatar | obj | 子形象 | 包含一个mid的int字段 | +| upower | obj | 充电相关 | 包含一个button_uri字段类型为str,是充电跳转链接 | + +`player_args`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ----- | ----------------------- | ------------------------ | +| aid | num | 视频作者的aid | | +| cid | num | 所属频道的cid | | +| type | str | 内容类型 | 视频一般都是av | + +`player_args`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ----- | ------------------------ | ------------------------ | +| aid | num | 视频作者的aid | | +| coin | num | 视频硬币数 | | +| danmaku | num | 视频弹幕数 | | +| favorite | num | 视频收藏数 | | +| follow | num | 未知 | 很多都是0 | +| like | num | 视频点赞数 | | +| reply | num | 视频评论与回复总数 | | +| share | num | 视频分享数 | | +| view | num | 视频播放 | | + +**示例:** + +(1)模拟点击aid=113350747029965的视频并获取短视频推荐列表 + +```python +import json +import requests + +mobile_headers = { + "User-Agent": "xxx", + "env": "prod", + "session_id": "xxx", # 在实际使用中,session_id需要及时更新,否则将导致响应列表有问题 + "APP-KEY": "android64", + 'Buvid': "xxx" +} + +story_url = "https://app.bilibili.com/x/v2/feed/index/story" + +story_params = { + "aid": 113350747029965, + "display_id": 1, + "appkey": "1d8b6e7d45233436", + "build": "8130300", + "bvid": "", + "mobi_app": "android", + "statistics": "{\"appId\":1,\"platform\":3,\"version\":\"8.13.0\",\"abtest\":\"\"}" +} + +response = requests.get(story_url, params=story_params, headers=mobile_headers) + +print(json.dumps(response.json(), indent=4)) +``` + +返回值内容过长,暂不予展示 + +(2)随机的短视频推荐 + +> https://app.bilibili.com/x/v2/feed/index/story + +浏览器直接输入 + +返回值内容过长,暂不予展示 + +## 获取短视频模式视频列表 + +> https://app.bilibili.com/x/v2/feed/index + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +有大量不明意义的参数 备注仅供参考 + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------------|------|------------|-----|--------------------------------------| +| fnval | num | 视频流格式标识 | 非必要 | 默认为272 | +| fnver | num | 视频流版本标识 | 非必要 | 恒为1 | +| force_host | num | 源url类型 | 非必要 | 0:无限制 1:使用http 2:使用https | +| fourk | num | 是否允许 4K 视频 | 非必要 | 画质最高 1080P:0(默认)
画质最高 4K:1 | +| guidance | num | 0 | 非必要 | | +| https_url_req | num | 0 | 非必要 | | +| inline_danmu | num | 2 | 非必要 | | +| inline_sound | num | 1 | 非必要 | | +| interest_id | num | 0 | 非必要 | | +| login_event | num | 登录状态 | 非必要 | 0为登录 1为未登录 | +| mobi_app | num | android | 非必要 | 设备类型 | +| network | num | wifi | 非必要 | 网络类型 | +| open_event | num | | 非必要 | | +| platform | num | android | 非必要 | 设备类型 | +| pull | boll | false | 非必要 | | +| qn | num | 32 | 非必要 | 似乎是画质 | +| recsys_mode | num | 0 | 非必要 | | +| s_locale | str | zh_CN | 非必要 | 语言 | +| video_mode | num | 1 | 非必要 | | +| accessKey | str | | 非必要 | 登录成功后返回的accessToken,添加此参数会返回个性化内容和横幅 | +| voice_balance | num | 音量均衡? | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------| +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------|-------|-----------|------| +| config | obj | 一些界面相关的内容 | 此处省略 | +| items | array | 视频列表 | | + +`data`中的`items`数组的对象: + +以下为视频类型 + +| 字段 | 类型 | 内容 | 备注 | +|----------------------------------|------|------------------|--------------------------------| +| can_play | num | 1 | 字面意思 | +| card_goto | str | av | 横幅时为banner | +| card_type | str | 卡片类型 | 视频为small_cover_v2,横幅为banner_v8 | +| cover | str | 封面url | | +| cover_left_1_content_description | str | 播放量 | 8.9万观看 | +| cover_left_2_content_description | str | 弹幕数 | 250弹幕 | +| cover_left_text_1 | str | 播放量 | 8.9万 | +| cover_left_text_2 | str | 弹幕数 | 250 | +| cover_right_content_description | str | 视频长度 | 1分钟20秒 | +| cover_right_text | str | 视频长度 | 1:20 | +| desc_button | obj | up主信息 | | +| param | str | 视频aid | | +| player_args | obj | 视频信息 | | +| talk_back | str | | | +| title | str | 标题 | | +| uri | str | 跳转链接 | | +| goto_icon | obj | 视频卡片左下角图标 | 视频为普通视频时出现 | +| rcmd_reason_style | obj | 左下角的'竖屏'or'2千点赞' | 视频为热门时出现 | +| banner_item | list | 横幅列表 | 登录后使用accessKey出现 包含横幅信息列表 | + +`desc_button`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----|------|----| +| event | str | | | +| text | str | up名称 | | +| type | num | 1 | | +| uri | str | 跳转链接 | | + +`player_args`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|-------|----| +| aid | num | 视频aid | | +| cid | num | 视频cid | | +| duration | num | 视频长度 | 秒数 | +| type | str | | | + +`goto_icon`对象 : + +| 字段 | 类型 | 内容 | 备注 | +|----------------|-----|-----------|----| +| icon_url | str | 图标链接 | | +| icon_night_url | str | 应该跟上面那个一样 | | +| icon_width | num | 16 | 宽度 | +| icon_height | num | 16 | 高度 | + +`rcmd_reason_style`对象 : + +| 字段 | 类型 | 内容 | 备注 | +|--------------------|-----|------------|---------| +| text | str | 1万点赞 \| 竖屏 | 文字信息 | +| text_color | str | #FF6633 | 字体颜色 | +| bg_color | str | #FFF1ED | 文本的背景颜色 | +| border_color | str | #FFF1ED | | +| text_color_night | str | #BF5330 | | +| bg_color_night | str | #3D2D29 | | +| border_color_night | str | #3D2D29 | | + +`banner_item`横幅列表内对象(内容尚未完全解读): + +为动态时 (列表索引通常为1) + +```json + { + "type": "static", + "resource_id": 4336, + "id": 1674508, + "index": 1, + "static_banner": { + "id": 1674508, + "title": "火凤燎原第二季完结!新的战神,来了!", + "image": "http://i0.hdslb.com/bfs/banner/b1fc0b68f727c2d4ea57bee154f531c3b7f13fca.png", + "hash": "a6cee3b5b1c05227159f734f68289ba5", + "uri": "https://www.bilibili.com/bangumi/play/ep1365959?goto=static_banner", + "request_id": "1745482994326q172a27a87a21q3087", + "src_id": 4337, + "is_ad_loc": true, + "client_ip": "182.89.224.34", + "server_type": 0, + "resource_id": 4336, + "index": 1, + "cm_mark": 0 + } +} +``` + +为广告时 index(列表索引通常为2) + +```json +{ + "type": "ad", + "resource_id": 4336, + "id": 0, + "index": 2, + "ad_banner": { + "id": 0, + "title": "今日全球首发,千件外观福利免费领", + "image": "https://i0.hdslb.com/bfs/sycp/creative_img/202504/bbd7cc4e6a74508e9ccee467541cc06a.jpg", + "hash": "46cbecfe04e047692acfd4a149e81ebd", + "uri": "https://qrsj.biligame.com/gcxz/h5/?sourceFrom=777&sourceType=adPut", + "request_id": "1745482994326q172a27a87a21q3087", + "creative_id": 1017846649959747584, + "src_id": 4338, + "is_ad": true, + "is_ad_loc": true, + "ad_cb": "CAAQABiAoLC1qsSHkA4gACgAMKm4TDjyIUIfMTc0NTQ4Mjk5NDMyNnExNzJhMjdhODdhMjFxMzA4N0iWpZO35jJSBuafs+W3nloG5bm/6KW/YgbkuK3lm71oAXAAeICAgICAGoABAIgBpYgEkgENMTgyLjg5LjIyNC4zNJoBj0BjcGNfcXVvdGE6Y29uc3RhbnQsZWNvbV9mb3JjZV9yZWNhbGw6YmFzZV8wNjI4XzIwLGJyYW5kX3NwbGFzaF9saXN0X2J5X3RpbWU6YnJhbmRfc3BsYXNoX2xpc3RfYnlfdGltZV80MF90dW5uZWwsdWVzX2VycWk6MTcsamtfY2FydDpqazEsZmVlZHNQcmltYXJ5TW9kZWxDb25mOmJzbDIsY29tbWVudENvbXBvbmVudEFudG91UmF0aW86YmFzZSxTbWFsbEJ1ZGdldFJhdGlvOmRlZmF1bHQsc2VhcmNoX2Fkc19jcmVhdGl2ZTpsbG1fZXhwMSxkYWlodW9fYm9vc3RfZXhwOmJvb3N0X2V4cCxzZWFyY2hfYWRzX3JlbGV2YW5jZTp0b3BfYmxhY2tsaXN0X2NhbGksc3BsYXNoX2lubmVyX291dGVyX2V4cDpiYXNlLGNjZF9leHBfZGVtbzpjY2RfYmFzZSxmcmVxUm91dGluZzpiYXNlLHZpZGVvX3RlbXBsYXRlX3N1cHBvcnQ6ZXhwMyxpYWFfb25seV9lY3BtOjAwLHRlc3RfbW9kZWxfbmFtZTpiYXNlXzExLGZseV9qdW1wX2NvbW1lbnQ6ZXhwMyxsb2dnaW5nX2FkaW5mb19saXN0OmJhc2UsdXNlTmV3WWVsbG93Q2FydFBhbm5lbDpleHAyLGhpZ2hfcXVhbGl0eV9hdmlkX3R1cm5fYmFjazpiYXNlLG5ld19kaXJlY3RfYWRtaXNzaW9uX3YyOm9wZW5fc2hvdXRhb193dWR1YW4sdHJhZGVfcmVjYWxsOmRlZmF1bHQsb3R0X2VjcG1fdGhyZDpiYXNlLGVuYWJsZV9hbHRfZGF2aW5jaTpkZWZhdWx0LGlubmVyX291dGVyX2JpZF9leHA6bmV3X3JhbmtmcmFtZV8wNDAyLG9mZmxpbmVfbWlkX2ZlYV92MjpleHAzLGRjdnJfd29ybGRfMjAyNVEyOmJhc2UxLHVuZGVyZnJhbWVfcHVsbF91cDpleHAxLGVuYWJsZV9pbmR1c3RyeV92Ml9maWx0ZXI6YmFzZSxuRmVkQmFjazE6bG9vc2UsRHBhMlJ0YVBpY2tQcm9kdWN0OnNoYXJlZF8zMCxmaWx0ZXJfY2xlYW46YmFzZSxhY2NvdW50RnJlcUNvbmY6YmFzZSxtaW5pZ2FtZV9iaWRfZXhwOmV4cF8wMzA3LHN0b3J5X2RhaWh1b19zdHlsZTpleHAsbm9fYWdlX2dlbmRlcl9leHA6YWdlMCxvdHRjb25maWc6ZXhwXzE1LE1peGVyRUNvbW1lcmNlOmVuYWJsZSxzc3BEaXJlY3REaXNwYXRjaEFkVm9FeHA6ZXhwXzIscmlza3lfYWRfb3B0OmhpZGRlbl9jb3N0XzAsc0ZCcnU6MyxCaXpNaXhlclJvdXRlcjpiaXpfbWl4ZXJfcGcsMjUzOTkxOmJhc2UsdHNtdjJfdHJhZGU6YmFzZSxmbHlfZGVxOm9yZGVyX2xpdmUsdHNtXzE6ZWR1dGFnX3JlY2FsbF8wMjA2LHJldHJpZXZlX2xvZzpvcGVuLGdkX21vZGVsOmV4cDEsY3BhX3NlYXJjaDpjcGFfdjIsdHNtdjJfc3dpbmdmbHlfb3RoZXJzY2VuZTpiYXNlLGFkeF9yZXF1ZXN0X29wdGltaXphdGlvbl90ZXN0OmRlZmF1bHQsc3RfdnZfbW9kZWw6YmFzZSxicnVzaF9kdXA6ZGVmYXVsdCxzdG9yeV9saXZlX3Z2OmRlZixpbmxpbmVfemVyb19jYXJkX2luZGV4OmV4cCxyZXFfbG9nX3JhdGlvOmJhc2UsZHBhVW5kZXJmcmFtZU5ld1N0eWxlOmV4cDIsZHluYW1pY1RpbWVvdXRNaW5zOjI0MCxtb2RlbF9jYWxpOmV4cDEsZmx5X2NwY19jYWxpX25ldzpvcmRlcl9hY2NfZXhwLGVuYWJsZVNtYXJ0Q292ZXJVcmw6YmFzZV9hYV8wMTE1LG1pbmlfZ2FtZV9sb25nX3RpbWVfZmxpcF9leHA6ZXhwX2dyb3VwLHV2X2FhOmRlZmF1bHQsYWNjb3VudF9ibGFjazpiYXNlLGFzQ29tbWVudENoZWNrRGlmZlJhdGlvRXhwOmV4cDIsY3RyX21vZGVsOmV4cF8wMSxic0R1cEFkOm9wZW4sb3JkZXJfbGF4aW46bGF4aW5fYmFzZV92Ml8xLHByb2dDcmVhRmVlZEN0cjpkaXN0X2x0cix1bmlvbl9mbHlfY3BjOmV4cDAxMjQsQ3VzdG9tQ3JlYXRpdmVTZWxlY3RFeHA6a3Vhbmd4aWFfMDQwMixuZXdCc0ZpbHRlckxvZzpvcGVuLHNlYXJjaF9xdWlja19wbGFjZW1lbnQ6ZXhwMSxib29zdF9leHA6ZXhwMyx0c212Ml9tb2RlbF9yZWNhbGw6YmFzZSxjY2RfdWVzY29yZTpjY2RfYmFzZSxkQWR4MTpvcGVuLGRhbGFvX2NhcmRfb25seV90b3A6ZXhwLGNhc3NpbmlFeHA6c21hbGxfYnVkZ2V0X2Nsb3NlLHNwbGFzaF90d2lzdF9hbmdsZV9leHA6YmFzZSx0c212Ml9vdGhlcnM6YmFzZSxzcGxhc2hNaW5JbnRlcnZhbEV4cDpiYXNlXzFoLGR5bmFtaWNfaW5kZXg6YmFzZSxyZWNhbGxfbGltaXRfcmF0aW86YmFzZSxmbHlfY3BhOmZseV92MyxnYW9uZW5nX2FidGVzdDpiYXNlLHBFTjpQUixzZWFyY2hfY3RyX21vZGVsOmV4cF95LGxpdmVfY2FyZF90YWdfbW92ZTpleHAxXzAzMTgsYmVzdENyZWF0aXZlOmVjcG0yLHN0b3J5X3N0eWxlX3NlbGVjdF9jb25mOmJhc2UyMDI1MDIyNyxjbG9zZV9zcmNfZWZmOmV4cF8wNzI1X25vX3J1bGUsMTA3MjpiYXNlLHNvZnRfYWRfZXhwOjA2LGZseV9saWtlX3RoOmNsb3NlLG1peGVyX3N0b3J5X2FkX3dlaWdodDo2LGFpZ2NfYW50b3U6TFJfYmFzZV8yMDI1MDMxNCxqZzpleHAyLHBkY3ZyX3RocmVzaG9sZDpleHAxLGRjdnJfcmV0ZW50aW9uX25ldzpjb21ib19iYXNlLHBlZ2FzdXNfbWl4ZXI6MDEsZHBhMjpiYXNlLHVuZGVyX2ZyYW1lX2VjcG1fZXhwOmJhc2UsSW5kdXN0cnlFeGNsdWRlSW5mb0NvbmZfdjI6YmFzZSxlbmFibGVfdXNlcl9mZWF0dXJlX2J1Y2tldDpiYXNlbGluZSxlY29tX3JlY2FsbDpMSFVDX0IsZW5hYmxlVGFnTW92ZVVwOmV4cDRfbW92ZV90YWdfZGlzbGlrZWFkaixhZF9icmFuZF9nZF9lbmFibGVfZGlmZjpiYXNlLGZkX3BjdHI6YmFzZV8xLDI1NzM4OmJhc2UscHJvZ0NyZWFEaWN0VmVyOmRlZmF1bHQsc2VhcmNoX3BhcmFsbGVsX3JlcV9yZWRpczpleHAxLHByb2dyYW1DcmVhdGl2ZTpkZWZhdWx0LGRwczpkZWZhdWx0LHBhZF9pbm5lcl9hZGxvYWQ6YmFzZV8yMF8wLHVuZGVyZnJhbWVfcHVsbF91cF9uZXc6YmFzZV9hYWEsY29hcnNlRXhwbG9yZUZhY3RvckNvbmY6ZGVmYXVsdCxmbHlfc3RvcnlfeWVsbG93Y2FyX3N0eWxlOnlvdXh1YW5fYmFzZV9rZmMsZmx5X2NwYV9wYzpleHAxMCxEcGFTdnJQcmVzc3VyZTpiYXNlLGNwYTpiYXNlLGJvb3N0X2JzOmJhc2UsZmx5Q2FyZFF1YWxpdHk6ZXhwNCxhbGw6Y3BjX2Nyb3dkX3RhcmdldCxmbHlfY3BhX2JvdHRvbTpjbG9zZSxSVEFfRElWSURFX0VYUF9UQUdfODkyOnJ0YV9kaXZpZGVfZXhwXzg5Ml81LEluZHVzdHJ5THRyQ29hcnNlQ29uZjpnYW1lbGl2ZSxlZGdlX3JlcmFuazpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR182NTc6cnRhX2RpdmlkZV9leHBfNjU3XzQsaGVhcnRfYm94OmV4cCwyMzUzMTpub3JtYWwscHVwX25hdGl2ZV9hZDpkZWZhdWx0LG90dF9lZHVjYXRpb25fYW50b3U6ZXhwLGg1X3Y6Y29tcGFyZSx1c2VMdWFTY3JpcHQ6YmFzZSxjb2Fyc2VfZGFpaHVvOmJhc2UsZmxvd1J1bGU6b3BlbkZsb3dSdWxlQ2hlY2tTd2l0Y2gsc3Rvcnlfc3R5bGVfc2VsZWN0aW9uX2NvbmY6YmFzZTIwMjQxMTI5LG5ld192aWRlb191cF9taWRfZmlsdGVyOmJhc2UsZmx5X2NvYXJzZTpjb25zdGFudCxkZWxldGVGcmVxQ29kZTpiYXNlMyxob25nZ3VvX25vdF9zaG93X2luX2NoYXJnaW5nX3BhZ2U6YmFzZSxEcGFDcmVhdGl2ZVN0cmF0ZWd5RXhwZXJpbWVudDpzZWFyY2hfbWVyZ2VfaW1hZ2VfZXhwLHNzcF9yZXBsYXlfYXM6YmFzZSxiZnNfc2RwYV9kaXZlcnNpZnk6cmVtYWluLHNlYXJjaF9zdWJjYXJkX3N0eWxlOmZvcm1fYnV0dG9uLGJzLXg6YnMsd2hpdGVfYm94OmNsb3NlLGR1YW5qdV9hcnB1OmFkZF9ub3ZlbF8wMzI3LE1vZGVsRmVhdHVyZXNIaXZlTG9nOmNsb3NlLGZseV9zdXBfZmFjdG9yczpleHAsY2x0cmNvbmY6YnNsMyxkYXZpbmNpX3JlcV9sb2c6ZGVmYXVsdCxmbHdfbGlrZV9lbmdhZ2U6YmFzZSxzdG9yeV9jdXN0b21pemVfZGFubXU6YmFzZSxhZHhQbGF5UGFnZVJhc2lvOmV4cDAsZHBhMlByb21vdGVQcm9kdWN0TWF0ZXJpYWw6YmFzZSxsaXZlX21vZGVsOmxpdmVfYmFzZV8wNDA4LHVzZUFpR2NUaXRsZTpiYXNlLHBlZ2FzdXNfYWRsb2FkXzM6MTQsbGFuY2VyX25hdHVyZTpleHAsc3RvcnlfZGFubXVfY29uZjpkYW5tdV9udW1fMzgsdHNtdjJfdG9rZW5fc2RwYTpiYXNlLDI0aF9yb2lfYXJwdV9uZXc6c3RhbGxfYmFzZV92MyxzcGxhc2hfaGFyZF9maWx0ZXJzOmV4cCxnYW1lX2VjcG1fcm9pX2ZhY3Rvcl9zd2l0Y2g6ZXhwX291dGVyLGJ1cGNwY19nc3A6ZGVmYXVsdCxuRmVkQmFjazpsb29zZSxVbml0RGV0YWlsSW5mbzpjbG9zZSzogIHkuInov57lub/lkYrlsY/olL06YmFzZSxnZF9mb3JjZV9zZWxlY3Q6ZXhwMixjb2xkX2Jvb3RfY2xlYXJfZnJlcTpiYXNlLGdhbWVfb3Blbl9pbnRlcmVzdF9vcmllbnRhdGlvbjpleHBfb3Blbl9ib3RoLGNsb3NlX3BlcnNvbmFsX3JlY29tbWVuZF8yMDI1OmV4cF9vcGVuX2FsbF8wMjI4LFJUQV9ESVZJREVfRVhQX1RBR183MzE6cnRhX2RpdmlkZV9leHBfNzMxXzMsbm9fYWRfc2V0OmJhc2UsUlRBX0RJVklERV9FWFBfVEFHXzg1NTpydGFfZGl2aWRlX2V4cF84NTVfNyxhY2NvdW50X2V4cGxvcmVfc2hvd19saW1pdDpkZWZhdWx0LGZseV9nb29kc19jb21tZW50X3VybDpibHVlbGlua19yZXBsYWNlXzA1LG9yZGVyX2xhcmdlOmRlbGF5MSxlY3BtX3RocmVzaG9sZF9sYXllcjowOCxyZWNhbGxfdW5pdF9saW1pdDpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR182NDA6cnRhX2RpdmlkZV9leHBfNjQwXzE2LGRhaWh1b1doaXRlQ29uZjp3aGl0ZV8yNDEyMDJfNSxSVEFfRElWSURFX0VYUF9UQUdfODgzOnJ0YV9kaXZpZGVfZXhwXzg4M181LGVuYWJsZUlubGluZUV4cDpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR184ODg6cnRhX2RpdmlkZV9leHBfODg4XzIsaWFhX3VuaXRfZWE6ZXhwMSxTbWFsbEJ1ZGdldFRvbGVyYXRlOmV4cF83MixhdXRvX2FkX2Fzc2lzdDpiYXNlLG1peGVyX2JyYW5kX29wdDpiYXNlLGxheWVyZWRfYmlkZGluZzpiYXNlMDkyMixzdG9yeVllbGxvd0NhcnROZXc6ZXhwX2Jhc2UyXzAyMTMseHN0X2NodWRpYW46YmFzZSxkdWFuanVfbW9kZWw6ZGVmYXVsdCxnZF9waWQ6ZXhwX3JlYWQsY3BjMV9leHRlbmRlZDpxdW90YV8xMCxicnVzaF9pbm5lcjpiYXNlLHN0b3J5X3N0eWxlX3NlbGVjdDpyYW5kLGVuYWJsZV9wbGF5cGFnZV9pbmxpbmVfd3hfanVtcDpleHBfMDQwOSxkY3ZyZl8yMDI1UTE6cmV2ZXJzZSxmcmVTOmJhc2UsYWR2dl9waWRfZml4OmJhc2UsQ3JlYXRpdmVRdWFsaXR5OmF1dG8sSW5kdXN0cnlCb29zdDpnYW1lbGl2ZSxmbHlfbTppY2ViZXJnX2Jhc2UsZWNwbV9jcm93ZHNfZmlsdGVyOnRlc3QsZ2Rfc2NoZV9yYXRpbzpiYXNlLHRlc3RfbWl4ZXJfY2NkOmJhc2Usa3Vha2VfbW9iaWxlX2FudG91X3BjOmFudG91X3BjLG5ld192aWRlb19ib29zdDpkZWZhdWx0LHVuZGVyZnJhbWVfdWVzY29yZTpiYXNlLEVBX2V4cDpjbG9zZV9lYV8xMjExLGFuY2hvckFwcERvd25sb2FkU3R5bGVFeHA6YmFzZSwyMzI0NDpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR183MDM6cnRhX2RpdmlkZV9leHBfNzAzXzMsZHVhbmp1X21vZGVsX2N0cjpkZWZhdWx0LGNvbG9yX21hc2s6YmFzZSxwdl9hYTpleHBfMSxwY19jbGllbnRfbm9fYWQ6bm9fYWRfYmFzZSxwcm9nQ3JlYVQ6djEuMCxuZWdhdGl2ZV9zdHJhdGVneV90ZXN0OmJhc2UsZW5hYmxlTmF0aXZlRmVlZHNUb1N0b3J5OmV4cF9oYXJkLGx0dl9pbnNfbG9nOmJhc2UxMCxmbHlfYnVfdW5kZXJmcmFtZTpiYXNlLHNwcmluZ2Zlc3RpdmFsX3N0YWJpbGl0eV9pbmR1c3RyeTpiYXNlLGdpZl9leHA6YmFzZSxjYXNlX2ludmVyc3RpZ2F0ZTpiYXNlLHByZXJhbmtfc2RwYTp4c2RqXzAxMTcscmVzZXJ2ZV9wcmljZTpnc3BfYWxsLHBheV83ZF9udW06ZXhwX2dhbWVfMSx0aW1lRnJlcTpkZWZhdWx0LGZyZXFDaGVja0R1cGxpY2F0ZTpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR183MjQ6cnRhX2RpdmlkZV9leHBfNzI0XzMsc3RvcnlGbHlNb2RlbENvbmY6YWRkX2VhX2V4cCxBcHBDb2V4aXN0RmlsdGVyOmNsb3NlLHVzdWFsX2FyZWFzOmJhc2UsYXBwU3RvcmVQcmlvcml0eVhpYW9ndW9BY2NvdW50SWRzOmJhc2UsbWFiaWRfZW5hYmxlOmJhc2VfMDEwOCxSVEFfRElWSURFX0VYUF9UQUdfODM2OnJ0YV9kaXZpZGVfZXhwXzgzNl8xMCxzb2Z0X2FkOjEyLHN0b3J5X3BsYXkzc190b3VjaF9yYXRpbzpyYXRpb18xMDAsZHVhbmp1X3JldGFyZ2V0OmJhc2UsUlRBX0RJVklERV9FWFBfVEFHXzEwMzc6cnRhX2RpdmlkZV9leHBfMTAzN181LGNhdGVnb3J5X3YzOmJhc2UsaWFhM19vdXRfdXBfYWRzOmV4cF9pYWFfb3V0X3VwLHByb2dDcmVhUmFuZG9tXzE6YmFzZV9tb2RlbDAzMTksZmx5X3lzYW50b3U6YmFzZV8wODIxLGZseV9jdHJfaW5saW5lX3RhcmdldDpjbG9zZSx0ZW1wbGF0ZV9maXg6YmFzZSxicmFuZER5bmFtaWNDYXJkSW5kZXhFeHA6ZXhwLGlubGluZUVjcG06ZGVmYXVsdCxmb3JjZUV4cG9zdXJlLWNhc3Npbmk6ZGFpaHVvX29wZW5fMjMxMTAxLHNwbGFzaF9uZXdfc3R5bGVfZmlsdGVyOmRlZmF1bHQsc2VhcmNoX3RyaXRvbjpiYXNlLGN2cl9mOmluZHVzdHJ5X29wdF9leHAsaW5uZXJfb3ZlcmxvYWRfY3RybDpkZWZhdWx0LHVnX3VuaXRfbGltaXQ6ZXhwLGNsZWFuX3Nsb3Q1MHA6ZXhwLG1lcmdlX2ZpbHRlcjplbmFibGVfc3luY19wcmltYXJ5X2ZpbHRlcixoeV9hcnB1X3JvdXRlX3NwbGl0OnN0YWxsX29yX3VuZGVsZXRlZF9mZWFzX2V4cCwxNTA2OmJhc2UsZ2RGZWVkc0VuYWJsZUJydXNoOmJhc2UsaW5saW5lX2Zsb3dfbm9fYWQ6YmFzZSxlbmFibGVfbGFuY2VyX3JlY29yZF9kbXNfZmVhdHVyZTowNDE0X3Rlc3QsdW5kZXJmcmFtZV9tYXJrX3N3dGljaDpleHAxXzA0MDksQWlFeHBQbGF5UGFnZTpiYXNlXzAsMjRoX3JvaV9hcnB1OmJhc2UzLG9wZW5QcmV2aWV3OmV4cDIsZ3NwX2V4cDpzZWFyY2hfZGVmYXVsdCxydW5uaW5nX29jcGM6YmFzZSxmbHlfcmFua19jb25mX21lcmdlOmJhc2UsbHRyQXBwTG9nOmNscyxzZWFyY2hfYWRzX3F1ZXJ5X3Jld3JpdGU6Y29tYmluZV9leHAxLHJhbmtfZGl2XzE6ZGVmYXVsdCx1bmRlcmZyYW1lX2Rvd25sb2FkX2FkYnV0dG9uOmJhc2UsQnNPZmZsaW5lTG9jYWxDcGFDb25maWdOZXc6ZGVmYXVsdCx1cFNwYWNlQ2hlY2tEaWZmUmF0aW9FeHA6ZXhwX21icyxzcGxhc2hfaW50ZXJmYWNlX2Rvd25ncmFkZTpiYXNlLGZvcmJpZGRlbl9kaXJlY3RfanVtcDpiYXNlLG1pbmlnYW1lX2JvbnVzX2V4cDpyZW1haW4sZW5hYmxlQXBwc3RvcmVEaXJlY3Q6ZXhwXzEsZnJlcV9pbmZvX3JvdXRpbmc6c2hqZF9zeWNwYl9mcmVxX3Rhc2tfY2x1c3Rlcl8xLHNlYXJjaF9hZHNfbWluX2JpZDpkZWZhdWx0LG9wZW5OZXdHZFByZXZpZXc6ZXhwLGRpc2FibGVfaWxsZWdhbF9vbmVfanVtcDpiYXNlLGNvYXJzZV9xdW90YV9jb250cm9sOmJhc2VfMDMyNCxmbHlfZHluYW1pY0FudG91OmJhc2UsQWlFeHBTdG9yeTpiYXNlLGRwYTJSZWNhbGw6Y2hvb3NlX3Byb2R1Y3RzX2Jhc2VfNTAsc2VhcmNoX25ld190YXJnZXRpbmc6YmFzZSxlbmFibGVfbW9kZWxfZGV0YWlsX3RyYWNrZXI6YmFzZSxEcGEyQ1ZSVGhyZXNob2xkOmpkX2N2cl8yMDAsY3RyX3RfZXhwOnQxLjAscGNTZWFyY2g6ZXhwLGVjb21fbWFpbl9zZWFyY2g65a+554Wn57uELGNvYXJzZTpjb2Fyc2VfY3ZyX25ld2NvbnYsZnJlcV9taWdyYXRlOmV4cF9lbmdpbmVfd2l0aF9zdHJpY3RfYnJ1c2g1LHN3aXRjaEJzUGdSZXFSYXRpbzpjbG9zZSxzZWFyY2hfcmVhbHRpbWVfdHJpZ2dlcjpjb25zdGFudCxBaUV4cEZlZWRzOmJhc2UsbWJzX3JlZmFjdG9yOmV4cDIsdWVzX3NlYXJjaDpkZWZhdWx0LHVuZGVyZnJhbWVfbXVsdGlfYWRzOmJhc2UsYWlnY19hbnRvdV9pbWFnZTpiYXNlXzAzMjYsbWl4ZXJfZnVzaW9uX2RpbWVuc2lvbjpnMixyb2xsb3V0X2xpc3R3aXNlX2Jpem1peGVyX2J1Z19maXg6YmFzZSx1c2VCc0ZpbmRhOmZpbmRhX3gsZmx5X3B1cF9lY3BtOmNvbnN0YW50LGZseV9jdHJfaW5saW5lOm1vZGVsLHRlc3RfcGVnYXN1c19wb3M6YmFzZSx0ZXN0X3N0b3J5X3BhY2s6ZXhwIDIsc3RvcnlfYWRsb2FkXzM6MTQsc2RwYV9kaXZlcnNpZnk6Y29uc3RhbnQyLG1pbmlfZ2FtZV9zY2VuZTpiYXNlLGN0cl9kaWx1Y19lbWJfbGF5ZXI6ZXhwcl9lbWJfZGlsdWMscm9pX2J4aWFveW91X25ldzpkZWZhdWx0LEluZHVzdHJ5Tm9UYXJnZXRGaWx0ZXJMYXllcjpleHAsY3JlYXRpdmVfYXZpZF90YWIzOmV4cF8wNTI3LHN0eWxlX2FiaWxpdHlfb2ZmbGluZTpiYXNlLHVuZGVyZnJhbWVfYnJhbmRfaGlnaDpiYXNlLGNyb3dkX2VjcGM6b3Blbl92Mix0c21fdjJfbGF5ZXI6YmFzZSxtaXhlcl9saXN0d2lzZV9wZWdhc3VzOmc1LHVzZUFzUGc6bWFpbl8yNDEyMjcsc3BsaXRfYnVja2V0OmJ1Y2tldF8zLGdsb2JhbF9yZXZlcnNlOmJhc2UscGxhdGZvcm06ZGVmYXVsdKABALIBICjf18utGMJMWQj0kF8utyJl8gRyHD1TIq1K6aKZR3vRugFCaHR0cHM6Ly9xcnNqLmJpbGlnYW1lLmNvbS9nY3h6L2g1Lz9zb3VyY2VGcm9tPTc3NyZzb3VyY2VUeXBlPWFkUHV0wgEA0gEA2AHQAeABAOgBAPABAIACAogCALgCAMACANACANgCAOoCAPACrIYl+AIAiAMGkgMAqAMAsAMAuAMAwgMAyAMX0gOWAXsiMTYiOiIxMjE1NDYwXzAiLCIxNyI6IjQzMzYiLCIxIjoiMTAxNzg0NjY0OTk1OTc0NzU4NCIsIjIiOiIxMjUyMzkzIiwiMyI6IjEyNTIzOTMiLCI2IjoiMTI1MjM5M18wIiwiMTIiOiI0MzM4IiwiMTMiOiIxMjE1NDYwIiwiMTQiOiI4ODciLCIxNSI6IjEzNjkifeADAOgDAPADAPoDBW90aGVyggQJbnVsbDpudWxsmAQAoAQAqgQECAAQBLAEAOIEwwE1Ni57InBzSWQiOjUyMTE4LCJ2MiI6IkFXVXMyZTBidEhmWTVCSzJ0LUQ0U3lNRGJtN2Z1SGIyYmlIREhsTnBjQlB1U2dVRzdLaW80dUkyNXlSdFJXQU5WUnRMbll1OVpxOElrdkVYZURfUmlER25BeTE0UV9CMlAtSzJmQ3pzMWZLQmY5WjZPUSJ9OzYzLnsicHNJZCI6NTIwNjYsInYyIjoiUWcifTs3MC57InBzSWQiOjUwMDQxLCJ2MiI6IktBIn2gBQDIBQPSBQA=", + "client_ip": "182.89.224.34", + "server_type": 1, + "resource_id": 4336, + "index": 2, + "cm_mark": 1, + "extra": { + "use_ad_web_v2": false, + "show_urls": [ + "" + ], + "click_urls": [], + "download_whitelist": [], + "card": { + "card_type": 0, + "title": "今日全球首发,千件外观福利免费领", + "covers": [ + { + "url": "https://i0.hdslb.com/bfs/sycp/creative_img/202504/bbd7cc4e6a74508e9ccee467541cc06a.jpg", + "loop": 0, + "image_height": 0, + "image_width": 0, + "gif_tag_show": false, + "jump_url": "", + "title": "", + "desc": "" + } + ], + "jump_url": "https://qrsj.biligame.com/gcxz/h5/?sourceFrom=777&sourceType=adPut", + "desc": "", + "callup_url": "", + "long_desc": "", + "ad_tag": "", + "extra_desc": "", + "universal_app": "", + "duration": "", + "adver": { + "adver_id": 1252393, + "adver_type": 3 + }, + "extreme_team_status": false, + "support_transition": false, + "under_player_interaction_style": 0, + "referral_pop_active_time": 10000, + "grade_denominator": 0, + "star_level": 0, + "live_booking_population_threshold": 0, + "ori_mark_hidden": 0, + "use_multi_cover": false, + "custom_feedback_panels": [], + "yellow_cart_pannel_pullup": 0, + "yellow_cart_pannel_version": 0, + "goods_item_id": 0, + "story_interaction_style": 0, + "videos": [], + "download_area": 0, + "goods_pannel_show": 0, + "goods_panel_show": 0, + "show_pop_window": 0, + "search_show_adbutton": 0, + "jump_interaction_style": 0, + "live_page_type": 0, + "ad_tag_style": { + "type": 4, + "text": "", + "text_color": "", + "bg_border_color": "", + "bg_color": "", + "border_color": "", + "img_url": "https://i0.hdslb.com/bfs/sycp/mng/202408/34463051f8d45a6d3c20f8aff31aad9b.png", + "img_height": 48, + "img_width": 72 + }, + "feedback_panel": { + "panel_type_text": "广告", + "feedback_panel_detail": [], + "toast": "将减少相似广告推荐", + "close_rec_tips": "操作成功", + "open_rec_tips": "将减少展示此类广告" + }, + "fold_time": 0, + "live_room_popularity": 0, + "live_tag_show": false, + "quality_infos": [], + "dynamic_text": "今日全球首发,千件外观福利免费领", + "choose_button_list": [], + "grade_level": 0, + "anim_in_enable": 0, + "underframe_card_style": 0, + "playpage_card_style": 0, + "live_auto_play": false, + "original_style_level": 0, + "live_card_show": false, + "enable_tag_move_up": 0, + "item_source": 0, + "closed_loop_item": 0, + "desc_type": 0, + "comment_use_game_page": 0, + "story_takeoff_interaction_style": 0 + }, + "report_time": 2000, + "sales_type": 31, + "special_industry": false, + "preload_landingpage": 0, + "enable_share": true, + "share_info": { + "title": "今日全球首发,千件外观福利免费领", + "subtitle": "", + "image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202504/3eba2979cb9525f14633a39c9f2ec2ab.jpg" + }, + "upzone_entrance_type": 0, + "upzone_entrance_report_id": 0, + "click_area": 0, + "shop_id": 0, + "up_mid": 0, + "track_id": "pbaes.DXUvRhr8IAhiFZ60KoOBStL0Na80m-kKS6CwFKDBtlzOwGJZu7il0VbEU3j2A_dZ96EXDGonAHs9Qx-5X2XbovyGP-xL4lyr_c_3rDZs4q3frmVjEGhu2VPOE5MRHF3AdryKsZiIGCl_f6ZD0y-cNQ==", + "enable_store_direct_launch": 0, + "enable_double_jump": false, + "from_track_id": "all_49.router-pegasus-2021478-7d7955f987-td5kj.1745482993998.1007", + "store_callup_card": false, + "enable_h5_alert": false, + "special_industry_style": 0, + "macro_replace_priority": 1, + "feedback_panel_style": 0, + "ad_content_type": 0, + "enable_h5_pre_load": 0, + "hot_activity_id": 0, + "middle_show_urls": [], + "middle_click_urls": [], + "product_id": 0, + "landingpage_download_style": 2, + "download_url_type": 0, + "enable_auto_callup": 0, + "top_live_stay_time_seconds": 0, + "vipshop_fast_framework": 0, + "lottery_id": 0, + "enable_openapk_dialog": false, + "user_cancel_jump_type": 0, + "comment_toast_open": 0, + "comment_biz_type": 0, + "app_exp_params": "{\"pegasus_live_inline_background_fill\":0,\"story_live_goods_card_style\":{\"first_type\":1,\"second_type\":2,\"delay_time\":3000}}" + } + } +} +``` + +为普通视频时 则对应最开始的视频类型 也就是 + +```json +{ + "card_type": "small_cover_v2", + "card_goto": "av", + "goto": "av", + "param": "114375012651120", + "cover": "http://i1.hdslb.com/bfs/archive/05ec862caac777f9d7d06175becf0413b9c653ee.jpg", + "title": "「小白」红米Turbo 4 Pro 性能体验:首台8sGen4量产机表现如何?", + "uri": "bilibili://video/114375012651120?cid=29550644277&player_height=1890&player_preload=%7B%22expire_time%22%3A1745486594%2C%22cid%22%3A29550644277%2C%22quality%22%3A32%2C%22file_info%22%3A%7B%2216%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A2121663%2C%22timelength%22%3A230900%7D%5D%7D%2C%2232%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A3606019%2C%22timelength%22%3A230900%7D%5D%7D%2C%2264%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A6733527%2C%22timelength%22%3A230900%7D%5D%7D%2C%2280%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A10362311%2C%22timelength%22%3A230900%7D%5D%7D%7D%2C%22video_codecid%22%3A7%2C%22video_project%22%3Atrue%2C%22dash%22%3A%7B%22video%22%3A%5B%7B%22id%22%3A32%2C%22base_url%22%3A%22http%3A%2F%2F123.184.35.33%3A8000%2Fv1%2Fresource%2F29550644277-1-100047.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D125426%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D158098%5Cu0026tag%3D%5Cu0026traceid%3DtrANPsmzTXNczh_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Ctag%252Cnbs%252Coi%252Cplatform%252Ctrid%252Cmid%252Cdeadline%252Cuipk%252Cgen%252Cos%252Cog%5Cu0026upsig%3Df6ea272dedd17383c1a7c43a39471036%22%2C%22bandwidth%22%3A124895%2C%22codecid%22%3A7%2C%22size%22%3A3606019%2C%22frame_rate%22%3A%2224.991%22%2C%22backup_url%22%3A%5B%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-100047.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026tag%3D%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026uipk%3D5%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026og%3Dcos%5Cu0026upsig%3Df6ea272dedd17383c1a7c43a39471036%5Cu0026uparams%3De%2Ctag%2Cnbs%2Coi%2Cplatform%2Ctrid%2Cmid%2Cdeadline%2Cuipk%2Cgen%2Cos%2Cog%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D125426%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026orderid%3D0%2C3%22%2C%22http%3A%2F%2Fupos-sz-estgoss.bilivideo.com%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-100047.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026tag%3D%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dupos%5Cu0026og%3Dcos%5Cu0026trid%3D56fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026platform%3Dandroid%5Cu0026upsig%3D464e03491d78d3249012e6c9affbb768%5Cu0026uparams%3De%2Ctag%2Cgen%2Cos%2Cog%2Ctrid%2Cmid%2Cdeadline%2Cnbs%2Coi%2Cuipk%2Cplatform%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D125426%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026orderid%3D1%2C3%22%5D%2C%22audio_id%22%3A30216%7D%2C%7B%22id%22%3A32%2C%22base_url%22%3A%22http%3A%2F%2F59.47.230.23%3A8000%2Fv1%2Fresource%2F29550644277-1-30033.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D131973%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D2d5ae2%5Cu0026tag%3D%5Cu0026traceid%3DtrQICyqgrXBqnY_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cnbs%252Coi%252Cuipk%252Cmid%252Cdeadline%252Cog%252Cplatform%252Ctrid%252Ctag%252Cgen%252Cos%5Cu0026upsig%3D855d6f99090897394e531af9d9cc6dc8%22%2C%22bandwidth%22%3A131411%2C%22codecid%22%3A12%2C%22size%22%3A3794237%2C%22frame_rate%22%3A%2224.991%22%2C%22backup_url%22%3A%5B%22http%3A%2F%2F122.191.18.170%3A8000%2Fv1%2Fresource%2F29550644277-1-30033.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D131973%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3Dcoso1bv%5Cu0026platform%3Dandroid%5Cu0026sign%3D2d5ae2%5Cu0026tag%3D%5Cu0026traceid%3DtrxqpZsZboLcyN_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cuipk%252Cplatform%252Ctag%252Cos%252Cog%252Cnbs%252Coi%252Ctrid%252Cmid%252Cdeadline%252Cgen%5Cu0026upsig%3D42f974aacd3f2a9a6ba659f11e469614%22%2C%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-30033.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026og%3Dcos%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026tag%3D%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026upsig%3D855d6f99090897394e531af9d9cc6dc8%5Cu0026uparams%3De%2Cnbs%2Coi%2Cuipk%2Cmid%2Cdeadline%2Cog%2Cplatform%2Ctrid%2Ctag%2Cgen%2Cos%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D131973%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026orderid%3D0%2C3%22%5D%2C%22audio_id%22%3A30216%7D%5D%2C%22audio%22%3A%5B%7B%22id%22%3A30216%2C%22base_url%22%3A%22http%3A%2F%2F121.31.234.218%3A8000%2Fv1%2Fresource%2F29550644277-1-30216.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43505%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3Db0263a%5Cu0026tag%3D%5Cu0026traceid%3DtrDHNJjmfaaueG_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cplatform%252Ctrid%252Cmid%252Cdeadline%252Cnbs%252Cgen%252Coi%252Cuipk%252Ctag%252Cos%252Cog%5Cu0026upsig%3De92887e43514a81bad4594c670c509d1%22%2C%22bandwidth%22%3A43292%2C%22size%22%3A1250775%2C%22backup_url%22%3A%5B%22http%3A%2F%2F211.141.225.131%3A8000%2Fv1%2Fresource%2F29550644277-1-30216.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43505%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3D08hbv%5Cu0026platform%3Dandroid%5Cu0026sign%3Db0263a%5Cu0026tag%3D%5Cu0026traceid%3DtrnTeKCShifUBc_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cgen%252Cog%252Cdeadline%252Ctag%252Cnbs%252Cplatform%252Ctrid%252Cos%252Cmid%252Coi%252Cuipk%5Cu0026upsig%3D313f602e2d41ebe9637a95fc20bceb93%22%2C%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-30216.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026nbs%3D1%5Cu0026gen%3Dplayurlv3%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026tag%3D%5Cu0026os%3Dmcdn%5Cu0026og%3Dhw%5Cu0026upsig%3De92887e43514a81bad4594c670c509d1%5Cu0026uparams%3De%2Cplatform%2Ctrid%2Cmid%2Cdeadline%2Cnbs%2Cgen%2Coi%2Cuipk%2Ctag%2Cos%2Cog%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D43505%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026orderid%3D0%2C3%22%5D%7D%2C%7B%22id%22%3A30280%2C%22base_url%22%3A%22http%3A%2F%2F211.97.94.165%3A8000%2Fv1%2Fresource%2F29550644277-1-30280.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43504%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D3f3ed4%5Cu0026tag%3D%5Cu0026traceid%3DtrQHmKzoFdDeCw_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cuipk%252Ctag%252Cnbs%252Cgen%252Cos%252Cog%252Coi%252Cplatform%252Ctrid%252Cmid%252Cdeadline%5Cu0026upsig%3D808cd1429841f75b1ccd7ccdc5de7bc3%22%2C%22bandwidth%22%3A43292%2C%22size%22%3A1250767%2C%22backup_url%22%3A%5B%22http%3A%2F%2F123.184.35.19%3A8000%2Fv1%2Fresource%2F29550644277-1-30280.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43504%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3Dupos%5Cu0026platform%3Dandroid%5Cu0026sign%3D3f3ed4%5Cu0026tag%3D%5Cu0026traceid%3DtrtSntUkmmkWVz_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cplatform%252Ctag%252Cnbs%252Cog%252Ctrid%252Cmid%252Cdeadline%252Coi%252Cuipk%252Cgen%252Cos%5Cu0026upsig%3D070e2e2176dd7e2d87777b20161c8d1f%22%2C%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-30280.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026uipk%3D5%5Cu0026tag%3D%5Cu0026nbs%3D1%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026upsig%3D808cd1429841f75b1ccd7ccdc5de7bc3%5Cu0026uparams%3De%2Cuipk%2Ctag%2Cnbs%2Cgen%2Cos%2Cog%2Coi%2Cplatform%2Ctrid%2Cmid%2Cdeadline%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D43504%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026orderid%3D0%2C3%22%5D%7D%2C%7B%22id%22%3A30232%2C%22base_url%22%3A%22http%3A%2F%2F125.106.124.64%3A8000%2Fv1%2Fresource%2F29550644277-1-30232.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43504%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D3ad163%5Cu0026tag%3D%5Cu0026traceid%3DtrsSvqSMaoCcOa_1_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Ctag%252Cuipk%252Cgen%252Cos%252Cog%252Ctrid%252Cmid%252Cdeadline%252Cnbs%252Coi%252Cplatform%5Cu0026upsig%3D219bdbd1641753ddc8555f788bc21711%22%2C%22bandwidth%22%3A43292%2C%22size%22%3A1250767%2C%22backup_url%22%3A%5B%22http%3A%2F%2F220.200.12.159%3A5889%2Fv1%2Fresource%2F29550644277-1-30232.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43504%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3D08hbv%5Cu0026platform%3Dandroid%5Cu0026sign%3D3ad163%5Cu0026tag%3D%5Cu0026traceid%3DtrQVqwCtxAuTKK_2_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Ctag%252Coi%252Ctrid%252Cdeadline%252Cgen%252Cos%252Cnbs%252Cuipk%252Cplatform%252Cmid%252Cog%5Cu0026upsig%3Dc45e0be8a46a1b1456b066fc447dcf4a%22%2C%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-30232.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026tag%3D%5Cu0026uipk%3D5%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026og%3Dhw%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026platform%3Dandroid%5Cu0026upsig%3D219bdbd1641753ddc8555f788bc21711%5Cu0026uparams%3De%2Ctag%2Cuipk%2Cgen%2Cos%2Cog%2Ctrid%2Cmid%2Cdeadline%2Cnbs%2Coi%2Cplatform%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D43504%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026orderid%3D0%2C3%22%5D%7D%5D%7D%2C%22fnval%22%3A272%2C%22accept_formats%22%3A%5B%7B%22quality%22%3A116%2C%22format%22%3A%22flv_p60%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%201080P60%22%2C%22new_description%22%3A%221080P%2060%E5%B8%A7%22%2C%22display_desc%22%3A%221080P%22%2C%22superscript%22%3A%2260%E5%B8%A7%22%2C%22need_vip%22%3Atrue%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A80%2C%22format%22%3A%22flv%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%201080P%22%2C%22new_description%22%3A%221080P%20%E9%AB%98%E6%B8%85%22%2C%22display_desc%22%3A%221080P%22%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A64%2C%22format%22%3A%22flv720%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%20720P%22%2C%22new_description%22%3A%22720P%20%E5%87%86%E9%AB%98%E6%B8%85%22%2C%22display_desc%22%3A%22720P%22%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A32%2C%22format%22%3A%22flv480%22%2C%22description%22%3A%22%E6%B8%85%E6%99%B0%20480P%22%2C%22new_description%22%3A%22480P%20%E6%A0%87%E6%B8%85%22%2C%22display_desc%22%3A%22480P%22%7D%2C%7B%22quality%22%3A16%2C%22format%22%3A%22mp4%22%2C%22description%22%3A%22%E6%B5%81%E7%95%85%20360P%22%2C%22new_description%22%3A%22360P%20%E6%B5%81%E7%95%85%22%2C%22display_desc%22%3A%22360P%22%7D%5D%2C%22volume%22%3A%7B%22measured_i%22%3A-18.2%2C%22measured_lra%22%3A5.9%2C%22measured_tp%22%3A-1.3%2C%22measured_threshold%22%3A-28.3%2C%22target_offset%22%3A0.5%2C%22target_i%22%3A-14%2C%22target_tp%22%3A-1%2C%22multi_scene_args%22%3A%7B%22high_dynamic_target_i%22%3A%22-24%22%2C%22normal_target_i%22%3A%22-14%22%2C%22undersized_target_i%22%3A%22-28%22%7D%7D%2C%22union_player%22%3A%7B%22biz_type%22%3A1%2C%22dimension%22%3A%7B%22width%22%3A4096%2C%22height%22%3A1890%7D%2C%22aid%22%3A114375012651120%7D%2C%22auto_qn_ctl%22%3A%7B%22login_half%22%3A32%2C%22nologin_half%22%3A32%2C%22login_full%22%3A80%2C%22nologin_full%22%3A32%2C%22mobile_login_full%22%3A80%2C%22mobile_nologin_full%22%3A32%7D%2C%22qn_exp%22%3A%7B%22qn_exp_1%22%3Atrue%7D%7D&player_rotate=0&player_width=4096&report_flow_data=%7B%22flow_card_type%22%3A%22av%22%2C%22flow_source%22%3A%22click_u2i%24ann_dssm_u2i_28d%24dssm_u2u%22%7D&trackid=all_49.router-pegasus-2021478-7d7955f987-td5kj.1745482993998.1007" + ... +} +``` + +**示例:** + +获取短视频模式视频列表 + +```shell +curl -G 'https://app.bilibili.com/x/v2/feed/index' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "items": [ + { + "card_type": "small_cover_v2", + "card_goto": "av", + "goto": "av", + "param": "411978753", + "cover": "http://i2.hdslb.com/bfs/archive/a1bda1e57e6812ca8822a8839fc4a1d3539255a8.jpg", + "title": "帕 鲁 现 状", + "uri": "bilibili://video/411978753?cid=1423365216\u0026player_height=1920\u0026player_preload=%7B%22cid%22%3A1423365216%2C%22expire_time%22%3A1706633200%2C%22file_info%22%3A%7B%2216%22%3A%5B%7B%22timelength%22%3A79970%2C%22filesize%22%3A3782665%7D%5D%2C%2264%22%3A%5B%7B%22timelength%22%3A79900%2C%22filesize%22%3A9552030%7D%5D%7D%2C%22support_quality%22%3Anull%2C%22support_formats%22%3Anull%2C%22support_description%22%3Anull%2C%22quality%22%3A16%2C%22url%22%3A%22http%3A%2F%2Fcn-gdst-cm-01-12.bilivideo.com%2Fupgcxcode%2F16%2F52%2F1423365216%2F1423365216-1-16.mp4%3Fe%3Dig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_%5Cu0026uipk%3D5%5Cu0026nbs%3D1%5Cu0026deadline%3D1706636800%5Cu0026gen%3Dplayurlv2%5Cu0026os%3Dbcache%5Cu0026oi%3D0%5Cu0026trid%3D00000ccc07d4b7a34140a25493d51003bd95U%5Cu0026mid%3D0%5Cu0026platform%3D%5Cu0026upsig%3D2bf8e99202a181300981ab6ba9d2305d%5Cu0026uparams%3De%2Cuipk%2Cnbs%2Cdeadline%2Cgen%2Cos%2Coi%2Ctrid%2Cmid%2Cplatform%5Cu0026cdnid%3D6876%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026orderid%3D0%2C3%5Cu0026buvid%3D%5Cu0026build%3D0%5Cu0026f%3DU_0_0%5Cu0026bw%3D47881%5Cu0026logo%3D80000000%22%2C%22video_codecid%22%3A7%2C%22video_project%22%3Atrue%2C%22fnver%22%3A0%2C%22fnval%22%3A0%7D\u0026player_rotate=0\u0026player_width=1080\u0026report_flow_data=%7B%22flow_card_type%22%3A%22av%22%7D", + "three_point": { + "dislike_reasons": [ + { + "id": 4, + "name": "UP主:锤子game", + "toast": "将减少相似内容推荐" + }, + { + "id": 2, + "name": "分区:网络游戏", + "toast": "将减少相似内容推荐" + }, + { + "id": 3, + "name": "频道:搞笑", + "toast": "将减少相似内容推荐" + }, + { + "id": 12, + "name": "此类内容过多", + "toast": "将减少相似内容推荐" + }, + { + "id": 13, + "name": "推荐过", + "toast": "将减少相似内容推荐" + }, + { + "id": 1, + "name": "不感兴趣", + "toast": "将减少相似内容推荐" + } + ], + "feedbacks": [ + { + "id": 1, + "name": "恐怖血腥", + "toast": "将优化首页此类内容" + }, + { + "id": 2, + "name": "色情低俗", + "toast": "将优化首页此类内容" + }, + { + "id": 3, + "name": "封面恶心", + "toast": "将优化首页此类内容" + }, + { + "id": 4, + "name": "标题党/封面党", + "toast": "将优化首页此类内容" + } + ], + "watch_later": 1 + }, + "args": { + "up_id": 495695169, + "up_name": "锤子game", + "rid": 65, + "rname": "网络游戏", + "tid": 1833, + "tname": "搞笑", + "aid": 411978753 + }, + "player_args": { + "aid": 411978753, + "cid": 1423365216, + "type": "av", + "duration": 80 + }, + "idx": 1706629610, + "three_point_v2": [ + { + "title": "添加至稍后再看", + "type": "watch_later", + "icon": "https://i0.hdslb.com/bfs/activity-plat/static/ce06d65bc0a8d8aa2a463747ce2a4752/NyPAqcn0QF.png" + }, + { + "title": "反馈", + "subtitle": "(选择后将优化首页此类内容)", + "reasons": [ + { + "id": 1, + "name": "恐怖血腥", + "toast": "将优化首页此类内容" + }, + { + "id": 2, + "name": "色情低俗", + "toast": "将优化首页此类内容" + }, + { + "id": 3, + "name": "封面恶心", + "toast": "将优化首页此类内容" + }, + { + "id": 4, + "name": "标题党/封面党", + "toast": "将优化首页此类内容" + } + ], + "type": "feedback" + }, + { + "title": "不感兴趣", + "subtitle": "(选择后将减少相似内容推荐)", + "reasons": [ + { + "id": 4, + "name": "UP主:锤子game", + "toast": "将减少相似内容推荐" + }, + { + "id": 2, + "name": "分区:网络游戏", + "toast": "将减少相似内容推荐" + }, + { + "id": 3, + "name": "频道:搞笑", + "toast": "将减少相似内容推荐" + }, + { + "id": 12, + "name": "此类内容过多", + "toast": "将减少相似内容推荐" + }, + { + "id": 13, + "name": "推荐过", + "toast": "将减少相似内容推荐" + }, + { + "id": 1, + "name": "不感兴趣", + "toast": "将减少相似内容推荐" + } + ], + "type": "dislike" + } + ], + "talk_back": "视频,帕 鲁 现 状,32.5万观看,257弹幕,时长1分钟20秒,UP主锤子game,", + "report_flow_data": "{\"flow_card_type\":\"av\"}", + "cover_left_text_1": "32.5万", + "cover_left_icon_1": 1, + "cover_left_1_content_description": "32.5万观看", + "cover_left_text_2": "257", + "cover_left_icon_2": 3, + "cover_left_2_content_description": "257弹幕", + "cover_right_text": "1:20", + "cover_right_content_description": "1分钟20秒", + "desc_button": { + "text": "锤子game", + "uri": "bilibili://space/495695169", + "event": "nickname", + "type": 1 + }, + "official_icon": 16, + "can_play": 1, + "goto_icon": { + "icon_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/077GOeHOfO.png", + "icon_night_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/ldbCXtkoK2.png", + "icon_width": 16, + "icon_height": 16 + } + }, + { + "card_type": "small_cover_v2", + "card_goto": "av", + "goto": "av", + "param": "836990443", + "cover": "http://i1.hdslb.com/bfs/archive/d16a125d6ec1c68cc9e0815bc28dcb62a1df9932.jpg", + "title": "【Phigros自制/崩坏:星穹铁道】欢迎来到匹诺康尼! 不眠之夜 IN Lv.13", + "uri": "bilibili://video/836990443?cid=1422516399\u0026player_height=1080\u0026player_preload=%7B%22cid%22%3A1422516399%2C%22expire_time%22%3A1706633200%2C%22file_info%22%3A%7B%2216%22%3A%5B%7B%22timelength%22%3A102818%2C%22filesize%22%3A4441802%7D%5D%2C%2264%22%3A%5B%7B%22timelength%22%3A102748%2C%22filesize%22%3A12468618%7D%5D%7D%2C%22support_quality%22%3Anull%2C%22support_formats%22%3Anull%2C%22support_description%22%3Anull%2C%22quality%22%3A16%2C%22url%22%3A%22http%3A%2F%2Fupos-sz-mirrorali.bilivideo.com%2Fupgcxcode%2F99%2F63%2F1422516399%2F1422516399-1-16.mp4%3Fe%3Dig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_%5Cu0026uipk%3D5%5Cu0026nbs%3D1%5Cu0026deadline%3D1706636800%5Cu0026gen%3Dplayurlv2%5Cu0026os%3Dalibv%5Cu0026oi%3D0%5Cu0026trid%3D0ccc07d4b7a34140a25493d51003bd95U%5Cu0026mid%3D0%5Cu0026platform%3D%5Cu0026upsig%3D06ea793aa573018646c0096adf0dcb9e%5Cu0026uparams%3De%2Cuipk%2Cnbs%2Cdeadline%2Cgen%2Cos%2Coi%2Ctrid%2Cmid%2Cplatform%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026orderid%3D0%2C3%5Cu0026buvid%3D%5Cu0026build%3D0%5Cu0026f%3DU_0_0%5Cu0026bw%3D43547%5Cu0026logo%3D80000000%22%2C%22video_codecid%22%3A7%2C%22video_project%22%3Atrue%2C%22fnver%22%3A0%2C%22fnval%22%3A0%7D\u0026player_rotate=0\u0026player_width=1920\u0026report_flow_data=%7B%22flow_card_type%22%3A%22av%22%7D", + "three_point": { + "dislike_reasons": [ + { + "id": 4, + "name": "UP主:早期陈总", + "toast": "将减少相似内容推荐" + }, + { + "id": 2, + "name": "分区:音游", + "toast": "将减少相似内容推荐" + }, + { + "id": 3, + "name": "频道:音乐游戏", + "toast": "将减少相似内容推荐" + }, + { + "id": 12, + "name": "此类内容过多", + "toast": "将减少相似内容推荐" + }, + { + "id": 13, + "name": "推荐过", + "toast": "将减少相似内容推荐" + }, + { + "id": 1, + "name": "不感兴趣", + "toast": "将减少相似内容推荐" + } + ], + "feedbacks": [ + { + "id": 1, + "name": "恐怖血腥", + "toast": "将优化首页此类内容" + }, + { + "id": 2, + "name": "色情低俗", + "toast": "将优化首页此类内容" + }, + { + "id": 3, + "name": "封面恶心", + "toast": "将优化首页此类内容" + }, + { + "id": 4, + "name": "标题党/封面党", + "toast": "将优化首页此类内容" + } + ], + "watch_later": 1 + }, + "args": { + "up_id": 1515475415, + "up_name": "早期陈总", + "rid": 136, + "rname": "音游", + "tid": 10174, + "tname": "音乐游戏", + "aid": 836990443 + }, + "player_args": { + "aid": 836990443, + "cid": 1422516399, + "type": "av", + "duration": 103 + }, + "idx": 1706629609, + "three_point_v2": [ + { + "title": "添加至稍后再看", + "type": "watch_later", + "icon": "https://i0.hdslb.com/bfs/activity-plat/static/ce06d65bc0a8d8aa2a463747ce2a4752/NyPAqcn0QF.png" + }, + { + "title": "反馈", + "subtitle": "(选择后将优化首页此类内容)", + "reasons": [ + { + "id": 1, + "name": "恐怖血腥", + "toast": "将优化首页此类内容" + }, + { + "id": 2, + "name": "色情低俗", + "toast": "将优化首页此类内容" + }, + { + "id": 3, + "name": "封面恶心", + "toast": "将优化首页此类内容" + }, + { + "id": 4, + "name": "标题党/封面党", + "toast": "将优化首页此类内容" + } + ], + "type": "feedback" + }, + { + "title": "不感兴趣", + "subtitle": "(选择后将减少相似内容推荐)", + "reasons": [ + { + "id": 4, + "name": "UP主:早期陈总", + "toast": "将减少相似内容推荐" + }, + { + "id": 2, + "name": "分区:音游", + "toast": "将减少相似内容推荐" + }, + { + "id": 3, + "name": "频道:音乐游戏", + "toast": "将减少相似内容推荐" + }, + { + "id": 12, + "name": "此类内容过多", + "toast": "将减少相似内容推荐" + }, + { + "id": 13, + "name": "推荐过", + "toast": "将减少相似内容推荐" + }, + { + "id": 1, + "name": "不感兴趣", + "toast": "将减少相似内容推荐" + } + ], + "type": "dislike" + } + ], + "talk_back": "视频,【Phigros自制/崩坏:星穹铁道】欢迎来到匹诺康尼! 不眠之夜 IN Lv.13,22.8万观看,797弹幕,时长1分钟43秒,UP主早期陈总,", + "report_flow_data": "{\"flow_card_type\":\"av\"}", + "cover_left_text_1": "22.8万", + "cover_left_icon_1": 1, + "cover_left_1_content_description": "22.8万观看", + "cover_left_text_2": "797", + "cover_left_icon_2": 3, + "cover_left_2_content_description": "797弹幕", + "cover_right_text": "1:43", + "cover_right_content_description": "1分钟43秒", + "desc_button": { + "text": "早期陈总", + "uri": "bilibili://space/1515475415", + "event": "nickname", + "type": 1 + }, + "can_play": 1, + "goto_icon": { + "icon_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/077GOeHOfO.png", + "icon_night_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/ldbCXtkoK2.png", + "icon_width": 16, + "icon_height": 16 + } + } + ], + "config": { + "column": 2, + "autoplay_card": 2, + "feed_clean_abtest": 0, + "home_transfer_test": 0, + "auto_refresh_time": 1200, + "show_inline_danmaku": 1, + "toast": {}, + "is_back_to_homepage": true, + "enable_rcmd_guide": true, + "inline_sound": 2, + "auto_refresh_time_by_appear": 1200, + "auto_refresh_time_by_active": 1200, + "visible_area": 80, + "card_density_exp": 1, + "story_mode_v2_guide_exp": 6 + }, + "interest_choose": null + } +} +``` + +
+ +
+查看登录后的响应示例(精简 包含横幅 热门视频 普通视频): + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "items": [ + { + "card_type": "banner_v8", + "card_goto": "banner", + "args": {}, + "idx": 1745482992, + "track_id": "all_49.router-pegasus-2021478-7d7955f987-td5kj.1745482993998.1007", + "hash": "4708571670781279769", + "banner_item": [ + { + "type": "static", + "resource_id": 4336, + "id": 1674508, + "index": 1, + "static_banner": { + "id": 1674508, + "title": "火凤燎原第二季完结!新的战神,来了!", + "image": "http://i0.hdslb.com/bfs/banner/b1fc0b68f727c2d4ea57bee154f531c3b7f13fca.png", + "hash": "a6cee3b5b1c05227159f734f68289ba5", + "uri": "https://www.bilibili.com/bangumi/play/ep1365959?goto=static_banner", + "request_id": "1745482994326q172a27a87a21q3087", + "src_id": 4337, + "is_ad_loc": true, + "client_ip": "182.89.224.34", + "server_type": 0, + "resource_id": 4336, + "index": 1, + "cm_mark": 0 + } + }, + { + "type": "ad", + "resource_id": 4336, + "id": 0, + "index": 2, + "ad_banner": { + "id": 0, + "title": "今日全球首发,千件外观福利免费领", + "image": "https://i0.hdslb.com/bfs/sycp/creative_img/202504/bbd7cc4e6a74508e9ccee467541cc06a.jpg", + "hash": "46cbecfe04e047692acfd4a149e81ebd", + "uri": "https://qrsj.biligame.com/gcxz/h5/?sourceFrom=777&sourceType=adPut", + "request_id": "1745482994326q172a27a87a21q3087", + "creative_id": 1017846649959747584, + "src_id": 4338, + "is_ad": true, + "is_ad_loc": true, + "ad_cb": "CAAQABiAoLC1qsSHkA4gACgAMKm4TDjyIUIfMTc0NTQ4Mjk5NDMyNnExNzJhMjdhODdhMjFxMzA4N0iWpZO35jJSBuafs+W3nloG5bm/6KW/YgbkuK3lm71oAXAAeICAgICAGoABAIgBpYgEkgENMTgyLjg5LjIyNC4zNJoBj0BjcGNfcXVvdGE6Y29uc3RhbnQsZWNvbV9mb3JjZV9yZWNhbGw6YmFzZV8wNjI4XzIwLGJyYW5kX3NwbGFzaF9saXN0X2J5X3RpbWU6YnJhbmRfc3BsYXNoX2xpc3RfYnlfdGltZV80MF90dW5uZWwsdWVzX2VycWk6MTcsamtfY2FydDpqazEsZmVlZHNQcmltYXJ5TW9kZWxDb25mOmJzbDIsY29tbWVudENvbXBvbmVudEFudG91UmF0aW86YmFzZSxTbWFsbEJ1ZGdldFJhdGlvOmRlZmF1bHQsc2VhcmNoX2Fkc19jcmVhdGl2ZTpsbG1fZXhwMSxkYWlodW9fYm9vc3RfZXhwOmJvb3N0X2V4cCxzZWFyY2hfYWRzX3JlbGV2YW5jZTp0b3BfYmxhY2tsaXN0X2NhbGksc3BsYXNoX2lubmVyX291dGVyX2V4cDpiYXNlLGNjZF9leHBfZGVtbzpjY2RfYmFzZSxmcmVxUm91dGluZzpiYXNlLHZpZGVvX3RlbXBsYXRlX3N1cHBvcnQ6ZXhwMyxpYWFfb25seV9lY3BtOjAwLHRlc3RfbW9kZWxfbmFtZTpiYXNlXzExLGZseV9qdW1wX2NvbW1lbnQ6ZXhwMyxsb2dnaW5nX2FkaW5mb19saXN0OmJhc2UsdXNlTmV3WWVsbG93Q2FydFBhbm5lbDpleHAyLGhpZ2hfcXVhbGl0eV9hdmlkX3R1cm5fYmFjazpiYXNlLG5ld19kaXJlY3RfYWRtaXNzaW9uX3YyOm9wZW5fc2hvdXRhb193dWR1YW4sdHJhZGVfcmVjYWxsOmRlZmF1bHQsb3R0X2VjcG1fdGhyZDpiYXNlLGVuYWJsZV9hbHRfZGF2aW5jaTpkZWZhdWx0LGlubmVyX291dGVyX2JpZF9leHA6bmV3X3JhbmtmcmFtZV8wNDAyLG9mZmxpbmVfbWlkX2ZlYV92MjpleHAzLGRjdnJfd29ybGRfMjAyNVEyOmJhc2UxLHVuZGVyZnJhbWVfcHVsbF91cDpleHAxLGVuYWJsZV9pbmR1c3RyeV92Ml9maWx0ZXI6YmFzZSxuRmVkQmFjazE6bG9vc2UsRHBhMlJ0YVBpY2tQcm9kdWN0OnNoYXJlZF8zMCxmaWx0ZXJfY2xlYW46YmFzZSxhY2NvdW50RnJlcUNvbmY6YmFzZSxtaW5pZ2FtZV9iaWRfZXhwOmV4cF8wMzA3LHN0b3J5X2RhaWh1b19zdHlsZTpleHAsbm9fYWdlX2dlbmRlcl9leHA6YWdlMCxvdHRjb25maWc6ZXhwXzE1LE1peGVyRUNvbW1lcmNlOmVuYWJsZSxzc3BEaXJlY3REaXNwYXRjaEFkVm9FeHA6ZXhwXzIscmlza3lfYWRfb3B0OmhpZGRlbl9jb3N0XzAsc0ZCcnU6MyxCaXpNaXhlclJvdXRlcjpiaXpfbWl4ZXJfcGcsMjUzOTkxOmJhc2UsdHNtdjJfdHJhZGU6YmFzZSxmbHlfZGVxOm9yZGVyX2xpdmUsdHNtXzE6ZWR1dGFnX3JlY2FsbF8wMjA2LHJldHJpZXZlX2xvZzpvcGVuLGdkX21vZGVsOmV4cDEsY3BhX3NlYXJjaDpjcGFfdjIsdHNtdjJfc3dpbmdmbHlfb3RoZXJzY2VuZTpiYXNlLGFkeF9yZXF1ZXN0X29wdGltaXphdGlvbl90ZXN0OmRlZmF1bHQsc3RfdnZfbW9kZWw6YmFzZSxicnVzaF9kdXA6ZGVmYXVsdCxzdG9yeV9saXZlX3Z2OmRlZixpbmxpbmVfemVyb19jYXJkX2luZGV4OmV4cCxyZXFfbG9nX3JhdGlvOmJhc2UsZHBhVW5kZXJmcmFtZU5ld1N0eWxlOmV4cDIsZHluYW1pY1RpbWVvdXRNaW5zOjI0MCxtb2RlbF9jYWxpOmV4cDEsZmx5X2NwY19jYWxpX25ldzpvcmRlcl9hY2NfZXhwLGVuYWJsZVNtYXJ0Q292ZXJVcmw6YmFzZV9hYV8wMTE1LG1pbmlfZ2FtZV9sb25nX3RpbWVfZmxpcF9leHA6ZXhwX2dyb3VwLHV2X2FhOmRlZmF1bHQsYWNjb3VudF9ibGFjazpiYXNlLGFzQ29tbWVudENoZWNrRGlmZlJhdGlvRXhwOmV4cDIsY3RyX21vZGVsOmV4cF8wMSxic0R1cEFkOm9wZW4sb3JkZXJfbGF4aW46bGF4aW5fYmFzZV92Ml8xLHByb2dDcmVhRmVlZEN0cjpkaXN0X2x0cix1bmlvbl9mbHlfY3BjOmV4cDAxMjQsQ3VzdG9tQ3JlYXRpdmVTZWxlY3RFeHA6a3Vhbmd4aWFfMDQwMixuZXdCc0ZpbHRlckxvZzpvcGVuLHNlYXJjaF9xdWlja19wbGFjZW1lbnQ6ZXhwMSxib29zdF9leHA6ZXhwMyx0c212Ml9tb2RlbF9yZWNhbGw6YmFzZSxjY2RfdWVzY29yZTpjY2RfYmFzZSxkQWR4MTpvcGVuLGRhbGFvX2NhcmRfb25seV90b3A6ZXhwLGNhc3NpbmlFeHA6c21hbGxfYnVkZ2V0X2Nsb3NlLHNwbGFzaF90d2lzdF9hbmdsZV9leHA6YmFzZSx0c212Ml9vdGhlcnM6YmFzZSxzcGxhc2hNaW5JbnRlcnZhbEV4cDpiYXNlXzFoLGR5bmFtaWNfaW5kZXg6YmFzZSxyZWNhbGxfbGltaXRfcmF0aW86YmFzZSxmbHlfY3BhOmZseV92MyxnYW9uZW5nX2FidGVzdDpiYXNlLHBFTjpQUixzZWFyY2hfY3RyX21vZGVsOmV4cF95LGxpdmVfY2FyZF90YWdfbW92ZTpleHAxXzAzMTgsYmVzdENyZWF0aXZlOmVjcG0yLHN0b3J5X3N0eWxlX3NlbGVjdF9jb25mOmJhc2UyMDI1MDIyNyxjbG9zZV9zcmNfZWZmOmV4cF8wNzI1X25vX3J1bGUsMTA3MjpiYXNlLHNvZnRfYWRfZXhwOjA2LGZseV9saWtlX3RoOmNsb3NlLG1peGVyX3N0b3J5X2FkX3dlaWdodDo2LGFpZ2NfYW50b3U6TFJfYmFzZV8yMDI1MDMxNCxqZzpleHAyLHBkY3ZyX3RocmVzaG9sZDpleHAxLGRjdnJfcmV0ZW50aW9uX25ldzpjb21ib19iYXNlLHBlZ2FzdXNfbWl4ZXI6MDEsZHBhMjpiYXNlLHVuZGVyX2ZyYW1lX2VjcG1fZXhwOmJhc2UsSW5kdXN0cnlFeGNsdWRlSW5mb0NvbmZfdjI6YmFzZSxlbmFibGVfdXNlcl9mZWF0dXJlX2J1Y2tldDpiYXNlbGluZSxlY29tX3JlY2FsbDpMSFVDX0IsZW5hYmxlVGFnTW92ZVVwOmV4cDRfbW92ZV90YWdfZGlzbGlrZWFkaixhZF9icmFuZF9nZF9lbmFibGVfZGlmZjpiYXNlLGZkX3BjdHI6YmFzZV8xLDI1NzM4OmJhc2UscHJvZ0NyZWFEaWN0VmVyOmRlZmF1bHQsc2VhcmNoX3BhcmFsbGVsX3JlcV9yZWRpczpleHAxLHByb2dyYW1DcmVhdGl2ZTpkZWZhdWx0LGRwczpkZWZhdWx0LHBhZF9pbm5lcl9hZGxvYWQ6YmFzZV8yMF8wLHVuZGVyZnJhbWVfcHVsbF91cF9uZXc6YmFzZV9hYWEsY29hcnNlRXhwbG9yZUZhY3RvckNvbmY6ZGVmYXVsdCxmbHlfc3RvcnlfeWVsbG93Y2FyX3N0eWxlOnlvdXh1YW5fYmFzZV9rZmMsZmx5X2NwYV9wYzpleHAxMCxEcGFTdnJQcmVzc3VyZTpiYXNlLGNwYTpiYXNlLGJvb3N0X2JzOmJhc2UsZmx5Q2FyZFF1YWxpdHk6ZXhwNCxhbGw6Y3BjX2Nyb3dkX3RhcmdldCxmbHlfY3BhX2JvdHRvbTpjbG9zZSxSVEFfRElWSURFX0VYUF9UQUdfODkyOnJ0YV9kaXZpZGVfZXhwXzg5Ml81LEluZHVzdHJ5THRyQ29hcnNlQ29uZjpnYW1lbGl2ZSxlZGdlX3JlcmFuazpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR182NTc6cnRhX2RpdmlkZV9leHBfNjU3XzQsaGVhcnRfYm94OmV4cCwyMzUzMTpub3JtYWwscHVwX25hdGl2ZV9hZDpkZWZhdWx0LG90dF9lZHVjYXRpb25fYW50b3U6ZXhwLGg1X3Y6Y29tcGFyZSx1c2VMdWFTY3JpcHQ6YmFzZSxjb2Fyc2VfZGFpaHVvOmJhc2UsZmxvd1J1bGU6b3BlbkZsb3dSdWxlQ2hlY2tTd2l0Y2gsc3Rvcnlfc3R5bGVfc2VsZWN0aW9uX2NvbmY6YmFzZTIwMjQxMTI5LG5ld192aWRlb191cF9taWRfZmlsdGVyOmJhc2UsZmx5X2NvYXJzZTpjb25zdGFudCxkZWxldGVGcmVxQ29kZTpiYXNlMyxob25nZ3VvX25vdF9zaG93X2luX2NoYXJnaW5nX3BhZ2U6YmFzZSxEcGFDcmVhdGl2ZVN0cmF0ZWd5RXhwZXJpbWVudDpzZWFyY2hfbWVyZ2VfaW1hZ2VfZXhwLHNzcF9yZXBsYXlfYXM6YmFzZSxiZnNfc2RwYV9kaXZlcnNpZnk6cmVtYWluLHNlYXJjaF9zdWJjYXJkX3N0eWxlOmZvcm1fYnV0dG9uLGJzLXg6YnMsd2hpdGVfYm94OmNsb3NlLGR1YW5qdV9hcnB1OmFkZF9ub3ZlbF8wMzI3LE1vZGVsRmVhdHVyZXNIaXZlTG9nOmNsb3NlLGZseV9zdXBfZmFjdG9yczpleHAsY2x0cmNvbmY6YnNsMyxkYXZpbmNpX3JlcV9sb2c6ZGVmYXVsdCxmbHdfbGlrZV9lbmdhZ2U6YmFzZSxzdG9yeV9jdXN0b21pemVfZGFubXU6YmFzZSxhZHhQbGF5UGFnZVJhc2lvOmV4cDAsZHBhMlByb21vdGVQcm9kdWN0TWF0ZXJpYWw6YmFzZSxsaXZlX21vZGVsOmxpdmVfYmFzZV8wNDA4LHVzZUFpR2NUaXRsZTpiYXNlLHBlZ2FzdXNfYWRsb2FkXzM6MTQsbGFuY2VyX25hdHVyZTpleHAsc3RvcnlfZGFubXVfY29uZjpkYW5tdV9udW1fMzgsdHNtdjJfdG9rZW5fc2RwYTpiYXNlLDI0aF9yb2lfYXJwdV9uZXc6c3RhbGxfYmFzZV92MyxzcGxhc2hfaGFyZF9maWx0ZXJzOmV4cCxnYW1lX2VjcG1fcm9pX2ZhY3Rvcl9zd2l0Y2g6ZXhwX291dGVyLGJ1cGNwY19nc3A6ZGVmYXVsdCxuRmVkQmFjazpsb29zZSxVbml0RGV0YWlsSW5mbzpjbG9zZSzogIHkuInov57lub/lkYrlsY/olL06YmFzZSxnZF9mb3JjZV9zZWxlY3Q6ZXhwMixjb2xkX2Jvb3RfY2xlYXJfZnJlcTpiYXNlLGdhbWVfb3Blbl9pbnRlcmVzdF9vcmllbnRhdGlvbjpleHBfb3Blbl9ib3RoLGNsb3NlX3BlcnNvbmFsX3JlY29tbWVuZF8yMDI1OmV4cF9vcGVuX2FsbF8wMjI4LFJUQV9ESVZJREVfRVhQX1RBR183MzE6cnRhX2RpdmlkZV9leHBfNzMxXzMsbm9fYWRfc2V0OmJhc2UsUlRBX0RJVklERV9FWFBfVEFHXzg1NTpydGFfZGl2aWRlX2V4cF84NTVfNyxhY2NvdW50X2V4cGxvcmVfc2hvd19saW1pdDpkZWZhdWx0LGZseV9nb29kc19jb21tZW50X3VybDpibHVlbGlua19yZXBsYWNlXzA1LG9yZGVyX2xhcmdlOmRlbGF5MSxlY3BtX3RocmVzaG9sZF9sYXllcjowOCxyZWNhbGxfdW5pdF9saW1pdDpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR182NDA6cnRhX2RpdmlkZV9leHBfNjQwXzE2LGRhaWh1b1doaXRlQ29uZjp3aGl0ZV8yNDEyMDJfNSxSVEFfRElWSURFX0VYUF9UQUdfODgzOnJ0YV9kaXZpZGVfZXhwXzg4M181LGVuYWJsZUlubGluZUV4cDpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR184ODg6cnRhX2RpdmlkZV9leHBfODg4XzIsaWFhX3VuaXRfZWE6ZXhwMSxTbWFsbEJ1ZGdldFRvbGVyYXRlOmV4cF83MixhdXRvX2FkX2Fzc2lzdDpiYXNlLG1peGVyX2JyYW5kX29wdDpiYXNlLGxheWVyZWRfYmlkZGluZzpiYXNlMDkyMixzdG9yeVllbGxvd0NhcnROZXc6ZXhwX2Jhc2UyXzAyMTMseHN0X2NodWRpYW46YmFzZSxkdWFuanVfbW9kZWw6ZGVmYXVsdCxnZF9waWQ6ZXhwX3JlYWQsY3BjMV9leHRlbmRlZDpxdW90YV8xMCxicnVzaF9pbm5lcjpiYXNlLHN0b3J5X3N0eWxlX3NlbGVjdDpyYW5kLGVuYWJsZV9wbGF5cGFnZV9pbmxpbmVfd3hfanVtcDpleHBfMDQwOSxkY3ZyZl8yMDI1UTE6cmV2ZXJzZSxmcmVTOmJhc2UsYWR2dl9waWRfZml4OmJhc2UsQ3JlYXRpdmVRdWFsaXR5OmF1dG8sSW5kdXN0cnlCb29zdDpnYW1lbGl2ZSxmbHlfbTppY2ViZXJnX2Jhc2UsZWNwbV9jcm93ZHNfZmlsdGVyOnRlc3QsZ2Rfc2NoZV9yYXRpbzpiYXNlLHRlc3RfbWl4ZXJfY2NkOmJhc2Usa3Vha2VfbW9iaWxlX2FudG91X3BjOmFudG91X3BjLG5ld192aWRlb19ib29zdDpkZWZhdWx0LHVuZGVyZnJhbWVfdWVzY29yZTpiYXNlLEVBX2V4cDpjbG9zZV9lYV8xMjExLGFuY2hvckFwcERvd25sb2FkU3R5bGVFeHA6YmFzZSwyMzI0NDpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR183MDM6cnRhX2RpdmlkZV9leHBfNzAzXzMsZHVhbmp1X21vZGVsX2N0cjpkZWZhdWx0LGNvbG9yX21hc2s6YmFzZSxwdl9hYTpleHBfMSxwY19jbGllbnRfbm9fYWQ6bm9fYWRfYmFzZSxwcm9nQ3JlYVQ6djEuMCxuZWdhdGl2ZV9zdHJhdGVneV90ZXN0OmJhc2UsZW5hYmxlTmF0aXZlRmVlZHNUb1N0b3J5OmV4cF9oYXJkLGx0dl9pbnNfbG9nOmJhc2UxMCxmbHlfYnVfdW5kZXJmcmFtZTpiYXNlLHNwcmluZ2Zlc3RpdmFsX3N0YWJpbGl0eV9pbmR1c3RyeTpiYXNlLGdpZl9leHA6YmFzZSxjYXNlX2ludmVyc3RpZ2F0ZTpiYXNlLHByZXJhbmtfc2RwYTp4c2RqXzAxMTcscmVzZXJ2ZV9wcmljZTpnc3BfYWxsLHBheV83ZF9udW06ZXhwX2dhbWVfMSx0aW1lRnJlcTpkZWZhdWx0LGZyZXFDaGVja0R1cGxpY2F0ZTpiYXNlLFJUQV9ESVZJREVfRVhQX1RBR183MjQ6cnRhX2RpdmlkZV9leHBfNzI0XzMsc3RvcnlGbHlNb2RlbENvbmY6YWRkX2VhX2V4cCxBcHBDb2V4aXN0RmlsdGVyOmNsb3NlLHVzdWFsX2FyZWFzOmJhc2UsYXBwU3RvcmVQcmlvcml0eVhpYW9ndW9BY2NvdW50SWRzOmJhc2UsbWFiaWRfZW5hYmxlOmJhc2VfMDEwOCxSVEFfRElWSURFX0VYUF9UQUdfODM2OnJ0YV9kaXZpZGVfZXhwXzgzNl8xMCxzb2Z0X2FkOjEyLHN0b3J5X3BsYXkzc190b3VjaF9yYXRpbzpyYXRpb18xMDAsZHVhbmp1X3JldGFyZ2V0OmJhc2UsUlRBX0RJVklERV9FWFBfVEFHXzEwMzc6cnRhX2RpdmlkZV9leHBfMTAzN181LGNhdGVnb3J5X3YzOmJhc2UsaWFhM19vdXRfdXBfYWRzOmV4cF9pYWFfb3V0X3VwLHByb2dDcmVhUmFuZG9tXzE6YmFzZV9tb2RlbDAzMTksZmx5X3lzYW50b3U6YmFzZV8wODIxLGZseV9jdHJfaW5saW5lX3RhcmdldDpjbG9zZSx0ZW1wbGF0ZV9maXg6YmFzZSxicmFuZER5bmFtaWNDYXJkSW5kZXhFeHA6ZXhwLGlubGluZUVjcG06ZGVmYXVsdCxmb3JjZUV4cG9zdXJlLWNhc3Npbmk6ZGFpaHVvX29wZW5fMjMxMTAxLHNwbGFzaF9uZXdfc3R5bGVfZmlsdGVyOmRlZmF1bHQsc2VhcmNoX3RyaXRvbjpiYXNlLGN2cl9mOmluZHVzdHJ5X29wdF9leHAsaW5uZXJfb3ZlcmxvYWRfY3RybDpkZWZhdWx0LHVnX3VuaXRfbGltaXQ6ZXhwLGNsZWFuX3Nsb3Q1MHA6ZXhwLG1lcmdlX2ZpbHRlcjplbmFibGVfc3luY19wcmltYXJ5X2ZpbHRlcixoeV9hcnB1X3JvdXRlX3NwbGl0OnN0YWxsX29yX3VuZGVsZXRlZF9mZWFzX2V4cCwxNTA2OmJhc2UsZ2RGZWVkc0VuYWJsZUJydXNoOmJhc2UsaW5saW5lX2Zsb3dfbm9fYWQ6YmFzZSxlbmFibGVfbGFuY2VyX3JlY29yZF9kbXNfZmVhdHVyZTowNDE0X3Rlc3QsdW5kZXJmcmFtZV9tYXJrX3N3dGljaDpleHAxXzA0MDksQWlFeHBQbGF5UGFnZTpiYXNlXzAsMjRoX3JvaV9hcnB1OmJhc2UzLG9wZW5QcmV2aWV3OmV4cDIsZ3NwX2V4cDpzZWFyY2hfZGVmYXVsdCxydW5uaW5nX29jcGM6YmFzZSxmbHlfcmFua19jb25mX21lcmdlOmJhc2UsbHRyQXBwTG9nOmNscyxzZWFyY2hfYWRzX3F1ZXJ5X3Jld3JpdGU6Y29tYmluZV9leHAxLHJhbmtfZGl2XzE6ZGVmYXVsdCx1bmRlcmZyYW1lX2Rvd25sb2FkX2FkYnV0dG9uOmJhc2UsQnNPZmZsaW5lTG9jYWxDcGFDb25maWdOZXc6ZGVmYXVsdCx1cFNwYWNlQ2hlY2tEaWZmUmF0aW9FeHA6ZXhwX21icyxzcGxhc2hfaW50ZXJmYWNlX2Rvd25ncmFkZTpiYXNlLGZvcmJpZGRlbl9kaXJlY3RfanVtcDpiYXNlLG1pbmlnYW1lX2JvbnVzX2V4cDpyZW1haW4sZW5hYmxlQXBwc3RvcmVEaXJlY3Q6ZXhwXzEsZnJlcV9pbmZvX3JvdXRpbmc6c2hqZF9zeWNwYl9mcmVxX3Rhc2tfY2x1c3Rlcl8xLHNlYXJjaF9hZHNfbWluX2JpZDpkZWZhdWx0LG9wZW5OZXdHZFByZXZpZXc6ZXhwLGRpc2FibGVfaWxsZWdhbF9vbmVfanVtcDpiYXNlLGNvYXJzZV9xdW90YV9jb250cm9sOmJhc2VfMDMyNCxmbHlfZHluYW1pY0FudG91OmJhc2UsQWlFeHBTdG9yeTpiYXNlLGRwYTJSZWNhbGw6Y2hvb3NlX3Byb2R1Y3RzX2Jhc2VfNTAsc2VhcmNoX25ld190YXJnZXRpbmc6YmFzZSxlbmFibGVfbW9kZWxfZGV0YWlsX3RyYWNrZXI6YmFzZSxEcGEyQ1ZSVGhyZXNob2xkOmpkX2N2cl8yMDAsY3RyX3RfZXhwOnQxLjAscGNTZWFyY2g6ZXhwLGVjb21fbWFpbl9zZWFyY2g65a+554Wn57uELGNvYXJzZTpjb2Fyc2VfY3ZyX25ld2NvbnYsZnJlcV9taWdyYXRlOmV4cF9lbmdpbmVfd2l0aF9zdHJpY3RfYnJ1c2g1LHN3aXRjaEJzUGdSZXFSYXRpbzpjbG9zZSxzZWFyY2hfcmVhbHRpbWVfdHJpZ2dlcjpjb25zdGFudCxBaUV4cEZlZWRzOmJhc2UsbWJzX3JlZmFjdG9yOmV4cDIsdWVzX3NlYXJjaDpkZWZhdWx0LHVuZGVyZnJhbWVfbXVsdGlfYWRzOmJhc2UsYWlnY19hbnRvdV9pbWFnZTpiYXNlXzAzMjYsbWl4ZXJfZnVzaW9uX2RpbWVuc2lvbjpnMixyb2xsb3V0X2xpc3R3aXNlX2Jpem1peGVyX2J1Z19maXg6YmFzZSx1c2VCc0ZpbmRhOmZpbmRhX3gsZmx5X3B1cF9lY3BtOmNvbnN0YW50LGZseV9jdHJfaW5saW5lOm1vZGVsLHRlc3RfcGVnYXN1c19wb3M6YmFzZSx0ZXN0X3N0b3J5X3BhY2s6ZXhwIDIsc3RvcnlfYWRsb2FkXzM6MTQsc2RwYV9kaXZlcnNpZnk6Y29uc3RhbnQyLG1pbmlfZ2FtZV9zY2VuZTpiYXNlLGN0cl9kaWx1Y19lbWJfbGF5ZXI6ZXhwcl9lbWJfZGlsdWMscm9pX2J4aWFveW91X25ldzpkZWZhdWx0LEluZHVzdHJ5Tm9UYXJnZXRGaWx0ZXJMYXllcjpleHAsY3JlYXRpdmVfYXZpZF90YWIzOmV4cF8wNTI3LHN0eWxlX2FiaWxpdHlfb2ZmbGluZTpiYXNlLHVuZGVyZnJhbWVfYnJhbmRfaGlnaDpiYXNlLGNyb3dkX2VjcGM6b3Blbl92Mix0c21fdjJfbGF5ZXI6YmFzZSxtaXhlcl9saXN0d2lzZV9wZWdhc3VzOmc1LHVzZUFzUGc6bWFpbl8yNDEyMjcsc3BsaXRfYnVja2V0OmJ1Y2tldF8zLGdsb2JhbF9yZXZlcnNlOmJhc2UscGxhdGZvcm06ZGVmYXVsdKABALIBICjf18utGMJMWQj0kF8utyJl8gRyHD1TIq1K6aKZR3vRugFCaHR0cHM6Ly9xcnNqLmJpbGlnYW1lLmNvbS9nY3h6L2g1Lz9zb3VyY2VGcm9tPTc3NyZzb3VyY2VUeXBlPWFkUHV0wgEA0gEA2AHQAeABAOgBAPABAIACAogCALgCAMACANACANgCAOoCAPACrIYl+AIAiAMGkgMAqAMAsAMAuAMAwgMAyAMX0gOWAXsiMTYiOiIxMjE1NDYwXzAiLCIxNyI6IjQzMzYiLCIxIjoiMTAxNzg0NjY0OTk1OTc0NzU4NCIsIjIiOiIxMjUyMzkzIiwiMyI6IjEyNTIzOTMiLCI2IjoiMTI1MjM5M18wIiwiMTIiOiI0MzM4IiwiMTMiOiIxMjE1NDYwIiwiMTQiOiI4ODciLCIxNSI6IjEzNjkifeADAOgDAPADAPoDBW90aGVyggQJbnVsbDpudWxsmAQAoAQAqgQECAAQBLAEAOIEwwE1Ni57InBzSWQiOjUyMTE4LCJ2MiI6IkFXVXMyZTBidEhmWTVCSzJ0LUQ0U3lNRGJtN2Z1SGIyYmlIREhsTnBjQlB1U2dVRzdLaW80dUkyNXlSdFJXQU5WUnRMbll1OVpxOElrdkVYZURfUmlER25BeTE0UV9CMlAtSzJmQ3pzMWZLQmY5WjZPUSJ9OzYzLnsicHNJZCI6NTIwNjYsInYyIjoiUWcifTs3MC57InBzSWQiOjUwMDQxLCJ2MiI6IktBIn2gBQDIBQPSBQA=", + "client_ip": "182.89.224.34", + "server_type": 1, + "resource_id": 4336, + "index": 2, + "cm_mark": 1, + "extra": { + "use_ad_web_v2": false, + "show_urls": [ + "" + ], + "click_urls": [], + "download_whitelist": [], + "card": { + "card_type": 0, + "title": "今日全球首发,千件外观福利免费领", + "covers": [ + { + "url": "https://i0.hdslb.com/bfs/sycp/creative_img/202504/bbd7cc4e6a74508e9ccee467541cc06a.jpg", + "loop": 0, + "image_height": 0, + "image_width": 0, + "gif_tag_show": false, + "jump_url": "", + "title": "", + "desc": "" + } + ], + "jump_url": "https://qrsj.biligame.com/gcxz/h5/?sourceFrom=777&sourceType=adPut", + "desc": "", + "callup_url": "", + "long_desc": "", + "ad_tag": "", + "extra_desc": "", + "universal_app": "", + "duration": "", + "adver": { + "adver_id": 1252393, + "adver_type": 3 + }, + "extreme_team_status": false, + "support_transition": false, + "under_player_interaction_style": 0, + "referral_pop_active_time": 10000, + "grade_denominator": 0, + "star_level": 0, + "live_booking_population_threshold": 0, + "ori_mark_hidden": 0, + "use_multi_cover": false, + "custom_feedback_panels": [], + "yellow_cart_pannel_pullup": 0, + "yellow_cart_pannel_version": 0, + "goods_item_id": 0, + "story_interaction_style": 0, + "videos": [], + "download_area": 0, + "goods_pannel_show": 0, + "goods_panel_show": 0, + "show_pop_window": 0, + "search_show_adbutton": 0, + "jump_interaction_style": 0, + "live_page_type": 0, + "ad_tag_style": { + "type": 4, + "text": "", + "text_color": "", + "bg_border_color": "", + "bg_color": "", + "border_color": "", + "img_url": "https://i0.hdslb.com/bfs/sycp/mng/202408/34463051f8d45a6d3c20f8aff31aad9b.png", + "img_height": 48, + "img_width": 72 + }, + "feedback_panel": { + "panel_type_text": "广告", + "feedback_panel_detail": [], + "toast": "将减少相似广告推荐", + "close_rec_tips": "操作成功", + "open_rec_tips": "将减少展示此类广告" + }, + "fold_time": 0, + "live_room_popularity": 0, + "live_tag_show": false, + "quality_infos": [], + "dynamic_text": "今日全球首发,千件外观福利免费领", + "choose_button_list": [], + "grade_level": 0, + "anim_in_enable": 0, + "underframe_card_style": 0, + "playpage_card_style": 0, + "live_auto_play": false, + "original_style_level": 0, + "live_card_show": false, + "enable_tag_move_up": 0, + "item_source": 0, + "closed_loop_item": 0, + "desc_type": 0, + "comment_use_game_page": 0, + "story_takeoff_interaction_style": 0 + }, + "report_time": 2000, + "sales_type": 31, + "special_industry": false, + "preload_landingpage": 0, + "enable_share": true, + "share_info": { + "title": "今日全球首发,千件外观福利免费领", + "subtitle": "", + "image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202504/3eba2979cb9525f14633a39c9f2ec2ab.jpg" + }, + "upzone_entrance_type": 0, + "upzone_entrance_report_id": 0, + "click_area": 0, + "shop_id": 0, + "up_mid": 0, + "track_id": "pbaes.DXUvRhr8IAhiFZ60KoOBStL0Na80m-kKS6CwFKDBtlzOwGJZu7il0VbEU3j2A_dZ96EXDGonAHs9Qx-5X2XbovyGP-xL4lyr_c_3rDZs4q3frmVjEGhu2VPOE5MRHF3AdryKsZiIGCl_f6ZD0y-cNQ==", + "enable_store_direct_launch": 0, + "enable_double_jump": false, + "from_track_id": "all_49.router-pegasus-2021478-7d7955f987-td5kj.1745482993998.1007", + "store_callup_card": false, + "enable_h5_alert": false, + "special_industry_style": 0, + "macro_replace_priority": 1, + "feedback_panel_style": 0, + "ad_content_type": 0, + "enable_h5_pre_load": 0, + "hot_activity_id": 0, + "middle_show_urls": [], + "middle_click_urls": [], + "product_id": 0, + "landingpage_download_style": 2, + "download_url_type": 0, + "enable_auto_callup": 0, + "top_live_stay_time_seconds": 0, + "vipshop_fast_framework": 0, + "lottery_id": 0, + "enable_openapk_dialog": false, + "user_cancel_jump_type": 0, + "comment_toast_open": 0, + "comment_biz_type": 0, + "app_exp_params": "{\"pegasus_live_inline_background_fill\":0,\"story_live_goods_card_style\":{\"first_type\":1,\"second_type\":2,\"delay_time\":3000}}" + } + } + }, + { + "card_type": "small_cover_v2", + "card_goto": "av", + "goto": "av", + "param": "114375012651120", + "cover": "http://i1.hdslb.com/bfs/archive/05ec862caac777f9d7d06175becf0413b9c653ee.jpg", + "title": "「小白」红米Turbo 4 Pro 性能体验:首台8sGen4量产机表现如何?", + "uri": "bilibili://video/114375012651120?cid=29550644277&player_height=1890&player_preload=%7B%22expire_time%22%3A1745486594%2C%22cid%22%3A29550644277%2C%22quality%22%3A32%2C%22file_info%22%3A%7B%2216%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A2121663%2C%22timelength%22%3A230900%7D%5D%7D%2C%2232%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A3606019%2C%22timelength%22%3A230900%7D%5D%7D%2C%2264%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A6733527%2C%22timelength%22%3A230900%7D%5D%7D%2C%2280%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A10362311%2C%22timelength%22%3A230900%7D%5D%7D%7D%2C%22video_codecid%22%3A7%2C%22video_project%22%3Atrue%2C%22dash%22%3A%7B%22video%22%3A%5B%7B%22id%22%3A32%2C%22base_url%22%3A%22http%3A%2F%2F123.184.35.33%3A8000%2Fv1%2Fresource%2F29550644277-1-100047.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D125426%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D158098%5Cu0026tag%3D%5Cu0026traceid%3DtrANPsmzTXNczh_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Ctag%252Cnbs%252Coi%252Cplatform%252Ctrid%252Cmid%252Cdeadline%252Cuipk%252Cgen%252Cos%252Cog%5Cu0026upsig%3Df6ea272dedd17383c1a7c43a39471036%22%2C%22bandwidth%22%3A124895%2C%22codecid%22%3A7%2C%22size%22%3A3606019%2C%22frame_rate%22%3A%2224.991%22%2C%22backup_url%22%3A%5B%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-100047.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026tag%3D%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026uipk%3D5%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026og%3Dcos%5Cu0026upsig%3Df6ea272dedd17383c1a7c43a39471036%5Cu0026uparams%3De%2Ctag%2Cnbs%2Coi%2Cplatform%2Ctrid%2Cmid%2Cdeadline%2Cuipk%2Cgen%2Cos%2Cog%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D125426%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026orderid%3D0%2C3%22%2C%22http%3A%2F%2Fupos-sz-estgoss.bilivideo.com%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-100047.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026tag%3D%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dupos%5Cu0026og%3Dcos%5Cu0026trid%3D56fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026platform%3Dandroid%5Cu0026upsig%3D464e03491d78d3249012e6c9affbb768%5Cu0026uparams%3De%2Ctag%2Cgen%2Cos%2Cog%2Ctrid%2Cmid%2Cdeadline%2Cnbs%2Coi%2Cuipk%2Cplatform%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D125426%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026orderid%3D1%2C3%22%5D%2C%22audio_id%22%3A30216%7D%2C%7B%22id%22%3A32%2C%22base_url%22%3A%22http%3A%2F%2F59.47.230.23%3A8000%2Fv1%2Fresource%2F29550644277-1-30033.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D131973%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D2d5ae2%5Cu0026tag%3D%5Cu0026traceid%3DtrQICyqgrXBqnY_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cnbs%252Coi%252Cuipk%252Cmid%252Cdeadline%252Cog%252Cplatform%252Ctrid%252Ctag%252Cgen%252Cos%5Cu0026upsig%3D855d6f99090897394e531af9d9cc6dc8%22%2C%22bandwidth%22%3A131411%2C%22codecid%22%3A12%2C%22size%22%3A3794237%2C%22frame_rate%22%3A%2224.991%22%2C%22backup_url%22%3A%5B%22http%3A%2F%2F122.191.18.170%3A8000%2Fv1%2Fresource%2F29550644277-1-30033.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D131973%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3Dcoso1bv%5Cu0026platform%3Dandroid%5Cu0026sign%3D2d5ae2%5Cu0026tag%3D%5Cu0026traceid%3DtrxqpZsZboLcyN_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cuipk%252Cplatform%252Ctag%252Cos%252Cog%252Cnbs%252Coi%252Ctrid%252Cmid%252Cdeadline%252Cgen%5Cu0026upsig%3D42f974aacd3f2a9a6ba659f11e469614%22%2C%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-30033.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026og%3Dcos%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026tag%3D%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026upsig%3D855d6f99090897394e531af9d9cc6dc8%5Cu0026uparams%3De%2Cnbs%2Coi%2Cuipk%2Cmid%2Cdeadline%2Cog%2Cplatform%2Ctrid%2Ctag%2Cgen%2Cos%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D131973%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026orderid%3D0%2C3%22%5D%2C%22audio_id%22%3A30216%7D%5D%2C%22audio%22%3A%5B%7B%22id%22%3A30216%2C%22base_url%22%3A%22http%3A%2F%2F121.31.234.218%3A8000%2Fv1%2Fresource%2F29550644277-1-30216.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43505%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3Db0263a%5Cu0026tag%3D%5Cu0026traceid%3DtrDHNJjmfaaueG_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cplatform%252Ctrid%252Cmid%252Cdeadline%252Cnbs%252Cgen%252Coi%252Cuipk%252Ctag%252Cos%252Cog%5Cu0026upsig%3De92887e43514a81bad4594c670c509d1%22%2C%22bandwidth%22%3A43292%2C%22size%22%3A1250775%2C%22backup_url%22%3A%5B%22http%3A%2F%2F211.141.225.131%3A8000%2Fv1%2Fresource%2F29550644277-1-30216.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43505%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3D08hbv%5Cu0026platform%3Dandroid%5Cu0026sign%3Db0263a%5Cu0026tag%3D%5Cu0026traceid%3DtrnTeKCShifUBc_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cgen%252Cog%252Cdeadline%252Ctag%252Cnbs%252Cplatform%252Ctrid%252Cos%252Cmid%252Coi%252Cuipk%5Cu0026upsig%3D313f602e2d41ebe9637a95fc20bceb93%22%2C%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-30216.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026nbs%3D1%5Cu0026gen%3Dplayurlv3%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026tag%3D%5Cu0026os%3Dmcdn%5Cu0026og%3Dhw%5Cu0026upsig%3De92887e43514a81bad4594c670c509d1%5Cu0026uparams%3De%2Cplatform%2Ctrid%2Cmid%2Cdeadline%2Cnbs%2Cgen%2Coi%2Cuipk%2Ctag%2Cos%2Cog%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D43505%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026orderid%3D0%2C3%22%5D%7D%2C%7B%22id%22%3A30280%2C%22base_url%22%3A%22http%3A%2F%2F211.97.94.165%3A8000%2Fv1%2Fresource%2F29550644277-1-30280.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43504%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D3f3ed4%5Cu0026tag%3D%5Cu0026traceid%3DtrQHmKzoFdDeCw_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cuipk%252Ctag%252Cnbs%252Cgen%252Cos%252Cog%252Coi%252Cplatform%252Ctrid%252Cmid%252Cdeadline%5Cu0026upsig%3D808cd1429841f75b1ccd7ccdc5de7bc3%22%2C%22bandwidth%22%3A43292%2C%22size%22%3A1250767%2C%22backup_url%22%3A%5B%22http%3A%2F%2F123.184.35.19%3A8000%2Fv1%2Fresource%2F29550644277-1-30280.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43504%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3Dupos%5Cu0026platform%3Dandroid%5Cu0026sign%3D3f3ed4%5Cu0026tag%3D%5Cu0026traceid%3DtrtSntUkmmkWVz_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cplatform%252Ctag%252Cnbs%252Cog%252Ctrid%252Cmid%252Cdeadline%252Coi%252Cuipk%252Cgen%252Cos%5Cu0026upsig%3D070e2e2176dd7e2d87777b20161c8d1f%22%2C%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-30280.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026uipk%3D5%5Cu0026tag%3D%5Cu0026nbs%3D1%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026upsig%3D808cd1429841f75b1ccd7ccdc5de7bc3%5Cu0026uparams%3De%2Cuipk%2Ctag%2Cnbs%2Cgen%2Cos%2Cog%2Coi%2Cplatform%2Ctrid%2Cmid%2Cdeadline%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D43504%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026orderid%3D0%2C3%22%5D%7D%2C%7B%22id%22%3A30232%2C%22base_url%22%3A%22http%3A%2F%2F125.106.124.64%3A8000%2Fv1%2Fresource%2F29550644277-1-30232.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43504%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50007224%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D3ad163%5Cu0026tag%3D%5Cu0026traceid%3DtrsSvqSMaoCcOa_1_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Ctag%252Cuipk%252Cgen%252Cos%252Cog%252Ctrid%252Cmid%252Cdeadline%252Cnbs%252Coi%252Cplatform%5Cu0026upsig%3D219bdbd1641753ddc8555f788bc21711%22%2C%22bandwidth%22%3A43292%2C%22size%22%3A1250767%2C%22backup_url%22%3A%5B%22http%3A%2F%2F220.200.12.159%3A5889%2Fv1%2Fresource%2F29550644277-1-30232.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D43504%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3D08hbv%5Cu0026platform%3Dandroid%5Cu0026sign%3D3ad163%5Cu0026tag%3D%5Cu0026traceid%3DtrQVqwCtxAuTKK_2_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Ctag%252Coi%252Ctrid%252Cdeadline%252Cgen%252Cos%252Cnbs%252Cuipk%252Cplatform%252Cmid%252Cog%5Cu0026upsig%3Dc45e0be8a46a1b1456b066fc447dcf4a%22%2C%22http%3A%2F%2F211.141.224.92%3A4480%2Fupgcxcode%2F77%2F42%2F29550644277%2F29550644277-1-30232.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026tag%3D%5Cu0026uipk%3D5%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026og%3Dhw%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026platform%3Dandroid%5Cu0026upsig%3D219bdbd1641753ddc8555f788bc21711%5Cu0026uparams%3De%2Ctag%2Cuipk%2Cgen%2Cos%2Cog%2Ctrid%2Cmid%2Cdeadline%2Cnbs%2Coi%2Cplatform%5Cu0026mcdnid%3D50007224%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D43504%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026orderid%3D0%2C3%22%5D%7D%5D%7D%2C%22fnval%22%3A272%2C%22accept_formats%22%3A%5B%7B%22quality%22%3A116%2C%22format%22%3A%22flv_p60%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%201080P60%22%2C%22new_description%22%3A%221080P%2060%E5%B8%A7%22%2C%22display_desc%22%3A%221080P%22%2C%22superscript%22%3A%2260%E5%B8%A7%22%2C%22need_vip%22%3Atrue%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A80%2C%22format%22%3A%22flv%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%201080P%22%2C%22new_description%22%3A%221080P%20%E9%AB%98%E6%B8%85%22%2C%22display_desc%22%3A%221080P%22%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A64%2C%22format%22%3A%22flv720%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%20720P%22%2C%22new_description%22%3A%22720P%20%E5%87%86%E9%AB%98%E6%B8%85%22%2C%22display_desc%22%3A%22720P%22%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A32%2C%22format%22%3A%22flv480%22%2C%22description%22%3A%22%E6%B8%85%E6%99%B0%20480P%22%2C%22new_description%22%3A%22480P%20%E6%A0%87%E6%B8%85%22%2C%22display_desc%22%3A%22480P%22%7D%2C%7B%22quality%22%3A16%2C%22format%22%3A%22mp4%22%2C%22description%22%3A%22%E6%B5%81%E7%95%85%20360P%22%2C%22new_description%22%3A%22360P%20%E6%B5%81%E7%95%85%22%2C%22display_desc%22%3A%22360P%22%7D%5D%2C%22volume%22%3A%7B%22measured_i%22%3A-18.2%2C%22measured_lra%22%3A5.9%2C%22measured_tp%22%3A-1.3%2C%22measured_threshold%22%3A-28.3%2C%22target_offset%22%3A0.5%2C%22target_i%22%3A-14%2C%22target_tp%22%3A-1%2C%22multi_scene_args%22%3A%7B%22high_dynamic_target_i%22%3A%22-24%22%2C%22normal_target_i%22%3A%22-14%22%2C%22undersized_target_i%22%3A%22-28%22%7D%7D%2C%22union_player%22%3A%7B%22biz_type%22%3A1%2C%22dimension%22%3A%7B%22width%22%3A4096%2C%22height%22%3A1890%7D%2C%22aid%22%3A114375012651120%7D%2C%22auto_qn_ctl%22%3A%7B%22login_half%22%3A32%2C%22nologin_half%22%3A32%2C%22login_full%22%3A80%2C%22nologin_full%22%3A32%2C%22mobile_login_full%22%3A80%2C%22mobile_nologin_full%22%3A32%7D%2C%22qn_exp%22%3A%7B%22qn_exp_1%22%3Atrue%7D%7D&player_rotate=0&player_width=4096&report_flow_data=%7B%22flow_card_type%22%3A%22av%22%2C%22flow_source%22%3A%22click_u2i%24ann_dssm_u2i_28d%24dssm_u2u%22%7D&trackid=all_49.router-pegasus-2021478-7d7955f987-td5kj.1745482993998.1007", + "three_point": { + "dislike_reasons": [ + { + "id": 4, + "name": "UP主:小白测评", + "toast": "将减少相似内容推荐" + }, + { + "id": 3, + "name": "频道:骁龙8s Gen4", + "toast": "将减少相似内容推荐" + }, + { + "id": 12, + "name": "此类内容过多", + "toast": "将减少相似内容推荐" + }, + { + "id": 13, + "name": "推荐过", + "toast": "将减少相似内容推荐" + }, + { + "id": 1, + "name": "这个内容", + "toast": "将减少相似内容推荐" + } + ], + "feedbacks": [ + { + "id": 1, + "name": "恐怖血腥", + "toast": "将优化首页此类内容" + }, + { + "id": 2, + "name": "色情低俗", + "toast": "将优化首页此类内容" + }, + { + "id": 3, + "name": "封面恶心", + "toast": "将优化首页此类内容" + }, + { + "id": 4, + "name": "标题党/封面党", + "toast": "将优化首页此类内容" + } + ], + "watch_later": 1 + }, + "args": { + "up_id": 8969156, + "up_name": "小白测评", + "tid": 74460002, + "tname": "骁龙8s Gen4", + "aid": 114375012651120 + }, + "player_args": { + "aid": 114375012651120, + "cid": 29550644277, + "type": "av", + "duration": 231 + }, + "idx": 1745482990, + "three_point_v2": [ + { + "title": "添加至稍后再看", + "type": "watch_later", + "icon": "https://i0.hdslb.com/bfs/activity-plat/static/20240103/0977767b2e79d8ad0a36a731068a83d7/8VhmmUeWnO.png", + "icon_night": "https://i0.hdslb.com/bfs/activity-plat/static/20240103/0977767b2e79d8ad0a36a731068a83d7/eIyDu5U7GA.png" + }, + { + "title": "反馈", + "subtitle": "(选择后将优化首页此类内容)", + "reasons": [ + { + "id": 1, + "name": "恐怖血腥", + "toast": "将优化首页此类内容" + }, + { + "id": 2, + "name": "色情低俗", + "toast": "将优化首页此类内容" + }, + { + "id": 3, + "name": "封面恶心", + "toast": "将优化首页此类内容" + }, + { + "id": 4, + "name": "标题党/封面党", + "toast": "将优化首页此类内容" + } + ], + "type": "feedback" + }, + { + "title": "我不想看", + "subtitle": "(选择后将减少相似内容推荐)", + "reasons": [ + { + "id": 4, + "name": "UP主:小白测评", + "toast": "将减少相似内容推荐" + }, + { + "id": 3, + "name": "频道:骁龙8s Gen4", + "toast": "将减少相似内容推荐", + "extend": "{\"tid\":\"74460002\"}" + }, + { + "id": 3, + "name": "频道:科技猎手2025·1.0计划", + "toast": "将减少相似内容推荐", + "extend": "{\"tid\":\"74338017\"}" + }, + { + "id": 12, + "name": "此类内容过多", + "toast": "将减少相似内容推荐" + }, + { + "id": 13, + "name": "推荐过", + "toast": "将减少相似内容推荐" + }, + { + "id": 1, + "name": "这个内容", + "toast": "将减少相似内容推荐" + } + ], + "type": "dislike" + } + ], + "track_id": "all_49.router-pegasus-2021478-7d7955f987-td5kj.1745482993998.1007", + "talk_back": "视频,「小白」红米Turbo 4 Pro 性能体验:首台8sGen4量产机表现如何?,39.5万观看,1654弹幕,时长3分钟51秒,UP主小白测评,", + "report_flow_data": "{\"flow_card_type\":\"av\",\"flow_source\":\"click_u2i$ann_dssm_u2i_28d$dssm_u2u\"}", + "three_point_v": "v2", + "cover_left_text_1": "39.5万", + "cover_left_icon_1": 1, + "cover_left_1_content_description": "39.5万观看", + "cover_left_text_2": "1654", + "cover_left_icon_2": 3, + "cover_left_2_content_description": "1654弹幕", + "cover_right_text": "3:51", + "cover_right_content_description": "3分钟51秒", + "desc_button": { + "text": "小白测评", + "uri": "bilibili://space/8969156", + "event": "nickname", + "type": 1 + }, + "official_icon": 16, + "can_play": 1, + "goto_icon": { + "icon_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/077GOeHOfO.png", + "icon_night_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/ldbCXtkoK2.png", + "icon_width": 16, + "icon_height": 16 + }, + "cover_info_priority": 123 + }, + { + "type": "static", + "resource_id": 4336, + "id": 1674583, + "index": 3, + "static_banner": { + "id": 1674583, + "title": "神舟二十号载人飞船今日发射", + "image": "http://i0.hdslb.com/bfs/banner/3d3f17726926194173a2db2a68ff51fbe1081458.jpg", + "hash": "e39cbd594c34ac3a0ec12a45dd6db0b5", + "uri": "https://live.bilibili.com/21686237", + "request_id": "1745482994326q172a27a87a21q3087", + "src_id": 4339, + "is_ad_loc": true, + "client_ip": "182.89.224.34", + "server_type": 0, + "resource_id": 4336, + "index": 3, + "cm_mark": 0 + } + } + ] + }, + { + "card_type": "small_cover_v2", + "card_goto": "av", + "goto": "av", + "param": "114369442680801", + "cover": "http://i1.hdslb.com/bfs/archive/13d3bace40c362db92d5752aef3ebce24bbcbea3.jpg", + "title": "【仿】《明日方舟》六周年庆典活动宣传PV", + "uri": "bilibili://video/114369442680801?cid=29516958739&player_height=1080&player_preload=%7B%22expire_time%22%3A1745486594%2C%22cid%22%3A29516958739%2C%22quality%22%3A32%2C%22file_info%22%3A%7B%2216%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A8427938%2C%22timelength%22%3A239258%7D%5D%7D%2C%2232%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A14979728%2C%22timelength%22%3A239238%7D%5D%7D%2C%2264%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A28834092%2C%22timelength%22%3A239238%7D%5D%7D%2C%2280%22%3A%7B%22infos%22%3A%5B%7B%22filesize%22%3A48620682%2C%22timelength%22%3A239238%7D%5D%7D%7D%2C%22video_codecid%22%3A7%2C%22video_project%22%3Atrue%2C%22dash%22%3A%7B%22video%22%3A%5B%7B%22id%22%3A32%2C%22base_url%22%3A%22http%3A%2F%2F118.184.254.3%3A4480%2Fupgcxcode%2F39%2F87%2F29516958739%2F29516958739-1-100047.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026platform%3Dandroid%5Cu0026gen%3Dplayurlv3%5Cu0026tag%3D%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026os%3Dmcdn%5Cu0026og%3Dcos%5Cu0026upsig%3D83d78984e6c66cf9fb8f44e16af524dc%5Cu0026uparams%3De%2Cnbs%2Coi%2Cuipk%2Cplatform%2Cgen%2Ctag%2Ctrid%2Cmid%2Cdeadline%2Cos%2Cog%5Cu0026mcdnid%3D50021694%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D501413%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026orderid%3D0%2C3%22%2C%22bandwidth%22%3A500862%2C%22codecid%22%3A7%2C%22size%22%3A14979728%2C%22frame_rate%22%3A%2229.966%22%2C%22backup_url%22%3A%5B%22http%3A%2F%2Fupos-sz-estgoss.bilivideo.com%2Fupgcxcode%2F39%2F87%2F29516958739%2F29516958739-1-100047.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026trid%3D56fb961696ed4d6bb208acb9ce431b1U%5Cu0026os%3Dupos%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026platform%3Dandroid%5Cu0026mid%3D479396940%5Cu0026deadline%3D1745490194%5Cu0026tag%3D%5Cu0026gen%3Dplayurlv3%5Cu0026nbs%3D1%5Cu0026upsig%3D4a9372dc47ff187acaddd4b1bb7ff762%5Cu0026uparams%3De%2Ctrid%2Cos%2Cog%2Coi%2Cuipk%2Cplatform%2Cmid%2Cdeadline%2Ctag%2Cgen%2Cnbs%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D501413%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026orderid%3D1%2C3%22%2C%22http%3A%2F%2Fupos-sz-estgoss.bilivideo.com%2Fupgcxcode%2F39%2F87%2F29516958739%2F29516958739-1-100047.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026deadline%3D1745490194%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dupos%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026platform%3Dandroid%5Cu0026trid%3D56fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026tag%3D%5Cu0026nbs%3D1%5Cu0026og%3Dcos%5Cu0026upsig%3Df4d94d26f589bd25736ae575f46117cb%5Cu0026uparams%3De%2Cdeadline%2Cgen%2Cos%2Coi%2Cuipk%2Cplatform%2Ctrid%2Cmid%2Ctag%2Cnbs%2Cog%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D501413%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026orderid%3D2%2C3%22%5D%2C%22audio_id%22%3A30216%7D%2C%7B%22id%22%3A32%2C%22base_url%22%3A%22http%3A%2F%2F123.184.30.75%3A8000%2Fv1%2Fresource%2F29516958739-1-30033.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D261105%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50021694%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3D6c5944%5Cu0026tag%3D%5Cu0026traceid%3DtrrIoIfTKBmhJG_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cnbs%252Cgen%252Cos%252Cog%252Cplatform%252Ctrid%252Cmid%252Ctag%252Coi%252Cuipk%252Cdeadline%5Cu0026upsig%3D20c184de73caf9072d6615826d43a023%22%2C%22bandwidth%22%3A260788%2C%22codecid%22%3A12%2C%22size%22%3A7800527%2C%22frame_rate%22%3A%2229.966%22%2C%22backup_url%22%3A%5B%22http%3A%2F%2F123.184.30.71%3A8000%2Fv1%2Fresource%2F29516958739-1-30033.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D261105%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3Dcoso1bv%5Cu0026platform%3Dandroid%5Cu0026sign%3D6c5944%5Cu0026tag%3D%5Cu0026traceid%3DtrKFqEZMFxtfGx_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cplatform%252Cnbs%252Ctrid%252Cmid%252Cdeadline%252Ctag%252Coi%252Cuipk%252Cgen%252Cos%252Cog%5Cu0026upsig%3D026e2862050e3c63ac42d8c153b140bd%22%2C%22http%3A%2F%2F118.184.254.3%3A4480%2Fupgcxcode%2F39%2F87%2F29516958739%2F29516958739-1-30033.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026nbs%3D1%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026og%3Dcos%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026tag%3D%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026deadline%3D1745490194%5Cu0026upsig%3D20c184de73caf9072d6615826d43a023%5Cu0026uparams%3De%2Cnbs%2Cgen%2Cos%2Cog%2Cplatform%2Ctrid%2Cmid%2Ctag%2Coi%2Cuipk%2Cdeadline%5Cu0026mcdnid%3D50021694%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D261105%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026orderid%3D0%2C3%22%5D%2C%22audio_id%22%3A30216%7D%5D%2C%22audio%22%3A%5B%7B%22id%22%3A30216%2C%22base_url%22%3A%22http%3A%2F%2F183.229.247.224%3A6809%2Fv1%2Fresource%2F29516958739-1-30216.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D57268%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50021694%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3Dc6f08b%5Cu0026tag%3D%5Cu0026traceid%3DtrOVFXiUwisFJo_1_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Ctrid%252Cdeadline%252Ctag%252Cos%252Cog%252Cnbs%252Coi%252Cuipk%252Cplatform%252Cmid%252Cgen%5Cu0026upsig%3D65fa2495f72b1652c93ae3e8ed18f2f6%22%2C%22bandwidth%22%3A57154%2C%22size%22%3A1710889%2C%22backup_url%22%3A%5B%22http%3A%2F%2F123.138.84.79%3A8000%2Fv1%2Fresource%2F29516958739-1-30216.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D57268%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3D08hbv%5Cu0026platform%3Dandroid%5Cu0026sign%3Dc6f08b%5Cu0026tag%3D%5Cu0026traceid%3DtrZvPCHsGisbaS_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cnbs%252Coi%252Cplatform%252Cmid%252Cgen%252Cos%252Cog%252Cdeadline%252Ctag%252Cuipk%252Ctrid%5Cu0026upsig%3Dc6eeb5169558ca73c36ff87b7925515c%22%2C%22http%3A%2F%2F118.184.254.3%3A4480%2Fupgcxcode%2F39%2F87%2F29516958739%2F29516958739-1-30216.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026deadline%3D1745490194%5Cu0026tag%3D%5Cu0026os%3Dmcdn%5Cu0026og%3Dhw%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026uipk%3D5%5Cu0026platform%3Dandroid%5Cu0026mid%3D479396940%5Cu0026gen%3Dplayurlv3%5Cu0026upsig%3D65fa2495f72b1652c93ae3e8ed18f2f6%5Cu0026uparams%3De%2Ctrid%2Cdeadline%2Ctag%2Cos%2Cog%2Cnbs%2Coi%2Cuipk%2Cplatform%2Cmid%2Cgen%5Cu0026mcdnid%3D50021694%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D57268%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026orderid%3D0%2C3%22%5D%7D%2C%7B%22id%22%3A30280%2C%22base_url%22%3A%22http%3A%2F%2F125.74.62.233%3A8000%2Fv1%2Fresource%2F29516958739-1-30280.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D201462%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50021694%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3Db1164b%5Cu0026tag%3D%5Cu0026traceid%3DtrkxYWIjABzQnP_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cuipk%252Ctrid%252Cmid%252Cnbs%252Cog%252Coi%252Cdeadline%252Ctag%252Cgen%252Cos%252Cplatform%5Cu0026upsig%3D5f5a3ee9562beef98824c40a28a6cf00%22%2C%22bandwidth%22%3A201184%2C%22size%22%3A6018701%2C%22backup_url%22%3A%5B%22http%3A%2F%2F118.182.248.130%3A8000%2Fv1%2Fresource%2F29516958739-1-30280.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D201462%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3Dcoso1bv%5Cu0026platform%3Dandroid%5Cu0026sign%3Db1164b%5Cu0026tag%3D%5Cu0026traceid%3DtrLzIEoLxgCnJA_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Ctrid%252Cog%252Cnbs%252Coi%252Cuipk%252Cdeadline%252Cgen%252Cos%252Ctag%252Cplatform%252Cmid%5Cu0026upsig%3D67dde445db5a37fb52a4bcf508e81318%22%2C%22http%3A%2F%2F118.184.254.3%3A4480%2Fupgcxcode%2F39%2F87%2F29516958739%2F29516958739-1-30280.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026uipk%3D5%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026og%3Dcos%5Cu0026oi%3D3059343394%5Cu0026deadline%3D1745490194%5Cu0026tag%3D%5Cu0026gen%3Dplayurlv3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026upsig%3D5f5a3ee9562beef98824c40a28a6cf00%5Cu0026uparams%3De%2Cuipk%2Ctrid%2Cmid%2Cnbs%2Cog%2Coi%2Cdeadline%2Ctag%2Cgen%2Cos%2Cplatform%5Cu0026mcdnid%3D50021694%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D201462%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026f%3DU_0_0%5Cu0026orderid%3D0%2C3%22%5D%7D%2C%7B%22id%22%3A30232%2C%22base_url%22%3A%22http%3A%2F%2F218.200.4.197%3A6768%2Fv1%2Fresource%2F29516958739-1-30232.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D107268%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mcdnid%3D50021694%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D0%252C3%5Cu0026os%3Dmcdn%5Cu0026platform%3Dandroid%5Cu0026sign%3Df944bf%5Cu0026tag%3D%5Cu0026traceid%3DtrxuDVFEVzmgrz_1_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cuipk%252Cgen%252Cplatform%252Ctrid%252Cmid%252Ctag%252Cnbs%252Coi%252Cog%252Cdeadline%252Cos%5Cu0026upsig%3Db3eef15ee3382742abc7374c9113a398%22%2C%22bandwidth%22%3A107097%2C%22size%22%3A3204643%2C%22backup_url%22%3A%5B%22http%3A%2F%2F123.184.35.27%3A8000%2Fv1%2Fresource%2F29516958739-1-30232.m4s%3Fagrr%3D1%5Cu0026build%3D8410300%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026bvc%3Dvod%5Cu0026bw%3D107268%5Cu0026deadline%3D1745490194%5Cu0026dl%3D0%5Cu0026e%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026f%3DU_0_0%5Cu0026gen%3Dplayurlv3%5Cu0026mid%3D479396940%5Cu0026nbs%3D1%5Cu0026nettype%3D0%5Cu0026og%3Dhw%5Cu0026oi%3D3059343394%5Cu0026orderid%3D1%252C3%5Cu0026os%3Dcoso1bv%5Cu0026platform%3Dandroid%5Cu0026sign%3Df944bf%5Cu0026tag%3D%5Cu0026traceid%3DtrEEpUqSymBxaq_0_U_a%5Cu0026uipk%3D5%5Cu0026uparams%3De%252Cplatform%252Cmid%252Cdeadline%252Ctag%252Coi%252Ctrid%252Cnbs%252Cuipk%252Cgen%252Cos%252Cog%5Cu0026upsig%3D3727194e76cf963df693733c2427f660%22%2C%22http%3A%2F%2F118.184.254.3%3A4480%2Fupgcxcode%2F39%2F87%2F29516958739%2F29516958739-1-30232.m4s%3Fe%3Dig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859IB_%5Cu0026uipk%3D5%5Cu0026gen%3Dplayurlv3%5Cu0026platform%3Dandroid%5Cu0026trid%3D000056fb961696ed4d6bb208acb9ce431b1U%5Cu0026mid%3D479396940%5Cu0026tag%3D%5Cu0026nbs%3D1%5Cu0026oi%3D3059343394%5Cu0026og%3Dhw%5Cu0026deadline%3D1745490194%5Cu0026os%3Dmcdn%5Cu0026upsig%3Db3eef15ee3382742abc7374c9113a398%5Cu0026uparams%3De%2Cuipk%2Cgen%2Cplatform%2Ctrid%2Cmid%2Ctag%2Cnbs%2Coi%2Cog%2Cdeadline%2Cos%5Cu0026mcdnid%3D50021694%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026bw%3D107268%5Cu0026f%3DU_0_0%5Cu0026agrr%3D1%5Cu0026buvid%3DXY6CBD464C1BC5767CE40A77F12B89222B6E7%5Cu0026build%3D8410300%5Cu0026dl%3D0%5Cu0026orderid%3D0%2C3%22%5D%7D%5D%7D%2C%22fnval%22%3A272%2C%22accept_formats%22%3A%5B%7B%22quality%22%3A112%2C%22format%22%3A%22hdflv2%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%201080P%2B%22%2C%22new_description%22%3A%221080P%20%E9%AB%98%E7%A0%81%E7%8E%87%22%2C%22display_desc%22%3A%221080P%22%2C%22superscript%22%3A%22%E9%AB%98%E7%A0%81%E7%8E%87%22%2C%22need_vip%22%3Atrue%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A80%2C%22format%22%3A%22flv%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%201080P%22%2C%22new_description%22%3A%221080P%20%E9%AB%98%E6%B8%85%22%2C%22display_desc%22%3A%221080P%22%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A64%2C%22format%22%3A%22flv720%22%2C%22description%22%3A%22%E9%AB%98%E6%B8%85%20720P%22%2C%22new_description%22%3A%22720P%20%E5%87%86%E9%AB%98%E6%B8%85%22%2C%22display_desc%22%3A%22720P%22%2C%22need_login%22%3Atrue%7D%2C%7B%22quality%22%3A32%2C%22format%22%3A%22flv480%22%2C%22description%22%3A%22%E6%B8%85%E6%99%B0%20480P%22%2C%22new_description%22%3A%22480P%20%E6%A0%87%E6%B8%85%22%2C%22display_desc%22%3A%22480P%22%7D%2C%7B%22quality%22%3A16%2C%22format%22%3A%22mp4%22%2C%22description%22%3A%22%E6%B5%81%E7%95%85%20360P%22%2C%22new_description%22%3A%22360P%20%E6%B5%81%E7%95%85%22%2C%22display_desc%22%3A%22360P%22%7D%5D%2C%22volume%22%3A%7B%22measured_i%22%3A-10.8%2C%22measured_lra%22%3A8.6%2C%22measured_tp%22%3A3.5%2C%22measured_threshold%22%3A-21%2C%22target_offset%22%3A-1.1%2C%22target_i%22%3A-14%2C%22target_tp%22%3A-1%2C%22multi_scene_args%22%3A%7B%22high_dynamic_target_i%22%3A%22-24%22%2C%22normal_target_i%22%3A%22-14%22%2C%22undersized_target_i%22%3A%22-28%22%7D%7D%2C%22union_player%22%3A%7B%22biz_type%22%3A1%2C%22dimension%22%3A%7B%22width%22%3A1920%2C%22height%22%3A1080%7D%2C%22aid%22%3A114369442680801%7D%2C%22auto_qn_ctl%22%3A%7B%22login_half%22%3A32%2C%22nologin_half%22%3A32%2C%22login_full%22%3A80%2C%22nologin_full%22%3A32%2C%22mobile_login_full%22%3A80%2C%22mobile_nologin_full%22%3A32%7D%2C%22qn_exp%22%3A%7B%22qn_exp_1%22%3Atrue%7D%7D&player_rotate=0&player_width=1920&report_flow_data=%7B%22flow_card_type%22%3A%22av%22%2C%22flow_source%22%3A%22dssm_u2u%22%7D&trackid=all_49.router-pegasus-2021478-7d7955f987-td5kj.1745482993998.1007", + "three_point": { + "dislike_reasons": [ + { + "id": 4, + "name": "UP主:罗德岛蜜饼工坊", + "toast": "将减少相似内容推荐" + }, + { + "id": 3, + "name": "频道:明日方舟UP主应援计划 – 离解复合", + "toast": "将减少相似内容推荐" + }, + { + "id": 12, + "name": "此类内容过多", + "toast": "将减少相似内容推荐" + }, + { + "id": 13, + "name": "推荐过", + "toast": "将减少相似内容推荐" + }, + { + "id": 1, + "name": "这个内容", + "toast": "将减少相似内容推荐" + } + ], + "feedbacks": [ + { + "id": 1, + "name": "恐怖血腥", + "toast": "将优化首页此类内容" + }, + { + "id": 2, + "name": "色情低俗", + "toast": "将优化首页此类内容" + }, + { + "id": 3, + "name": "封面恶心", + "toast": "将优化首页此类内容" + }, + { + "id": 4, + "name": "标题党/封面党", + "toast": "将优化首页此类内容" + } + ], + "watch_later": 1 + }, + "args": { + "up_id": 8412516, + "up_name": "罗德岛蜜饼工坊", + "tid": 74654031, + "tname": "明日方舟UP主应援计划 – 离解复合", + "aid": 114369442680801 + }, + "player_args": { + "aid": 114369442680801, + "cid": 29516958739, + "type": "av", + "duration": 240 + }, + "idx": 1745482982, + "three_point_v2": [ + { + "title": "添加至稍后再看", + "type": "watch_later", + "icon": "https://i0.hdslb.com/bfs/activity-plat/static/20240103/0977767b2e79d8ad0a36a731068a83d7/8VhmmUeWnO.png", + "icon_night": "https://i0.hdslb.com/bfs/activity-plat/static/20240103/0977767b2e79d8ad0a36a731068a83d7/eIyDu5U7GA.png" + }, + { + "title": "反馈", + "subtitle": "(选择后将优化首页此类内容)", + "reasons": [ + { + "id": 1, + "name": "恐怖血腥", + "toast": "将优化首页此类内容" + }, + { + "id": 2, + "name": "色情低俗", + "toast": "将优化首页此类内容" + }, + { + "id": 3, + "name": "封面恶心", + "toast": "将优化首页此类内容" + }, + { + "id": 4, + "name": "标题党/封面党", + "toast": "将优化首页此类内容" + } + ], + "type": "feedback" + }, + { + "title": "我不想看", + "subtitle": "(选择后将减少相似内容推荐)", + "reasons": [ + { + "id": 4, + "name": "UP主:罗德岛蜜饼工坊", + "toast": "将减少相似内容推荐" + }, + { + "id": 3, + "name": "频道:明日方舟UP主应援计划 – 离解复合", + "toast": "将减少相似内容推荐", + "extend": "{\"tid\":\"74654031\"}" + }, + { + "id": 3, + "name": "频道:泰拉探索协会", + "toast": "将减少相似内容推荐", + "extend": "{\"tid\":\"22177849\"}" + }, + { + "id": 12, + "name": "此类内容过多", + "toast": "将减少相似内容推荐" + }, + { + "id": 13, + "name": "推荐过", + "toast": "将减少相似内容推荐" + }, + { + "id": 1, + "name": "这个内容", + "toast": "将减少相似内容推荐" + } + ], + "type": "dislike" + } + ], + "track_id": "all_49.router-pegasus-2021478-7d7955f987-td5kj.1745482993998.1007", + "talk_back": "视频,【仿】《明日方舟》六周年庆典活动宣传PV,45.4万观看,1074弹幕,时长4分钟00秒,UP主罗德岛蜜饼工坊,3万点赞,", + "report_flow_data": "{\"flow_card_type\":\"av\",\"flow_source\":\"dssm_u2u\"}", + "three_point_v": "v2", + "cover_left_text_1": "45.4万", + "cover_left_icon_1": 1, + "cover_left_1_content_description": "45.4万观看", + "cover_left_text_2": "1074", + "cover_left_icon_2": 3, + "cover_left_2_content_description": "1074弹幕", + "cover_right_text": "4:00", + "cover_right_content_description": "4分钟00秒", + "rcmd_reason": "3万点赞", + "official_icon": 16, + "can_play": 1, + "rcmd_reason_style": { + "text": "3万点赞", + "text_color": "#FF6633", + "bg_color": "#FFF1ED", + "border_color": "#FFF1ED", + "text_color_night": "#BF5330", + "bg_color_night": "#3D2D29", + "border_color_night": "#3D2D29", + "bg_style": 1 + }, + "cover_info_priority": 123 + } + ], + "config": { + "column": 2, + "autoplay_card": 11, + "feed_clean_abtest": 0, + "home_transfer_test": 0, + "auto_refresh_time": 1200, + "show_inline_danmaku": 1, + "toast": {}, + "single_autoplay_flag": 1, + "is_back_to_homepage": true, + "enable_rcmd_guide": true, + "auto_refresh_time_by_appear": 1800, + "auto_refresh_time_by_active": 1800, + "trigger_loadmore_left_line_num": -1, + "history_cache_size": 10, + "visible_area": 80, + "card_density_exp": 1, + "small_cover_wh_ratio": 1.333333, + "video_mode": 1, + "space_enlarge_exp": 1, + "auto_refresh_time_by_behavior": 5, + "story_mode_v2_guide_exp": 6, + "auto_refresh_by_behavior": 1, + "three_point_style": 1, + "exposure_duration_start_ratio": 0.800000011920929, + "exposure_duration_end_ratio": 0.800000011920929, + "exposure_duration_min_ms": 1, + "rcmd_label_mng_entrance": 1 + }, + "interest_choose": null + } +} +``` + +
\ No newline at end of file diff --git a/docs/video/report.md b/docs/video/report.md new file mode 100644 index 0000000..ef141bc --- /dev/null +++ b/docs/video/report.md @@ -0,0 +1,246 @@ +# 视频观看数据上报 + +## 上报观看进度(双端) + +> https://api.bilibili.com/x/v2/history/report + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | --------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| aid | num | 稿件avid | 必要 | | +| cid | num | 视频cid | 必要 | 用于识别分P | +| progress | num | 观看进度 | 非必要 | 单位为秒
默认为0 | +| platform | str | 平台标识 | 非必要 | 可为android | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +记录视频`av13662970`(`cid=126654047`)的观看记录位于`1248`秒 + +Cookie方式: + +```shell +curl 'https://api.bilibili.com/x/v2/history/report' \ +--data-urlencode 'aid=13662970' \ +--data-urlencode 'cid=126654047' \ +--data-urlencode 'progress=1248' \ +--data-urlencode 'platform=android' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +APP方式: + +```shell +curl 'https://api.bilibili.com/x/v2/history/report' \ +--data-urlencode 'access_key=xxx' \ +--data-urlencode 'aid=13662970' \ +--data-urlencode 'cid=126654047' \ +--data-urlencode 'progress=1248' \ +--data-urlencode 'platform=android' +``` + + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 上报视频播放心跳(web端) + +> https://api.bilibili.com/x/click-interface/web/heartbeat + +*请求方式:POST* + +认证方式:仅可Cookie(SESSDATA) + +默认间隔15秒一次, 亦可记录播放历史 + +该接口较为复杂, 且参数计算方法均为推测, 实际过程不明, 可能含有错误, 若要正式使用可以把已播放的持续时间全都设为相同值 + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------------------- | ---- | ------------------------------ | ------ | ------- | +| w_start_ts | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | UNIX 秒级时间戳 | +| w_mid | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | | +| w_aid | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | | +| w_dt | num | 2 | 非必要 | | +| w_realtime | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 | +| w_playedtime | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 | +| w_real_played_time | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 | +| w_video_duration | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 | +| w_last_play_progress_time | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 | +| web_location | num | 网页位置 | 非必要 | 视频详情页播放器: 1315873 | +| w_rid | num | WBI 签名 | 非必要 | 参见[WBI 签名](../misc/sign/wbi.md) | +| wts | num | UNIX 秒级时间戳 | 非必要 | 参见[WBI 签名](../misc/sign/wbi.md) | + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------------------- | ---- | ---------------------------------- | ------------ | ----------------------------------------------------------- | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个(网页端请求默认仅使用aid) | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| cid | num | 视频cid | 非必要 | 用于识别分P | +| epid | num | 番剧epid | 非必要 | | +| sid | num | 番剧ssid | 非必要 | | +| mid | num | 当前用户mid | 非必要 | | +| played_time | num | 视频播放进度 | 非必要 | 单位 秒
播放完成为 -1 | +| realtime | num | 本轮页面会话真实播放时间 | 非必要 | 单位 秒 | +| real_played_time | num | 本轮页面会话真实视频播放持续时间 | 非必要 | 单位 秒 | +| refer_url | str | 与请求头 Referer 字段相同 | 非必要 | | +| quality | num | 视频清晰度 | 非必要 | 参见[qn视频清晰度标识](videostream_url.md#qn视频清晰度标识) | +| video_duration | num | 视频时长 | 非必要 | 单位 秒 | +| last_play_progress_time | num | play_time 与 本轮页面会话开始时 played_time 之和 | 非必要 | 单位 秒 | +| max_play_progress_time | num | 本轮页面会话所有最大 last_play_progress_time 与 本轮页面会话开始时 played_time 之和 | 非必要 | 单位 秒 | +| start_ts | num | 开始播放时刻 | 非必要 | 时间戳 | +| type | num | 视频类型 | 非必要 | 3:投稿视频
4:剧集
10:课程 | +| sub_type | num | 剧集副类型 | 非必要 | 0: 普通投稿视频
1:番剧
2:电影
3:纪录片
4:国创
5:电视剧
7:综艺 | +| dt | num | 2 | 非必要 | | +| outer | num | 0 | 非必要 | | +| spmid | str | 333.788.0.0 | 非必要 | 作用尚不明确 | +| from_spmid | str | 播放来源? | 非必要 | 也可为空, 如: `444.41.list.card_archive.click` `333.999.0.0` | +| session | str | 会话信息? | 非必要 | 一串无分隔小写 UUID | +| extra | obj | 额外信息, 如播放器版本 | 非必要 | 如: `{"player_version":"4.8.36"}` | +| play_type | num | 播放动作 | 非必要 | 0:播放中
1:开始播放
2:暂停
3:继续播放
4: 结束播放 | +| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +上报一次视频`av2`/`BV1xx411c7mD`的心跳数据 + +```shell +curl 'https://api.bilibili.com/x/click-interface/web/heartbeat' \ +--data-urlencode 'aid=2' \ +--data-urlencode 'bvid=BV1xx411c7mD' \ +--data-urlencode 'cid=62131' \ +--data-urlencode 'played_time=60' \ +--data-urlencode 'realtime=60' \ +--data-urlencode 'start_ts=1592720840' \ +--data-urlencode 'type=3' \ +--data-urlencode 'dt=2' \ +--data-urlencode 'play_type=0' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 开始观看视频 (web端) + +> https://api.bilibili.com/x/click-interface/click/web/h5 + +*请求方式: POST* + +认证方式: Cookie (SESSDATA) + +该接口亦被用于计算播放量, 播放量更新不是实时的
+该接口使用似乎存在 200 播放限制, **请勿滥用!** + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| w_aid | num | 稿件 aid | 不必要 | | +| w_part | num | 视频分 P 编号 | 不必要 | | +| w_ftime | num | 点击时间戳? | 不必要 | UNIX 秒级时间戳 | +| w_stime | num | 开始播放时间戳? | 不必要 | UNIX 秒级时间戳 | +| w_type | num | 视频类型 | 不必要 | 见[上报视频播放心跳(web端)](#上报视频播放心跳web端) | +| web_location | num | 网页位置? | 不必要 | 1315873 | +| w_rid | num | WBI 签名 | 不必要 | 参见[WBI 签名](../misc/sign/wbi.md) | +| wts | num | UNIX 秒级时间戳 | 不必要 | 参见[WBI 签名](../misc/sign/wbi.md) | + +**正文参数 (application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| mid | num | 当前用户 mid | 不必要 | | +| aid | num | 稿件 aid | 必要 | | +| cid | num | 视频 cid | 不必要 | | +| part | num | 视频分 P 编号 | 不必要 | | +| lv | num | 当前用户等级 | 不必要 | | +| ftime | num | 同 URL 参数中带有 `w_` 前缀的同名参数 | 不必要 | | +| stime | num | 同 URL 参数中带有 `w_` 前缀的同名参数 | 不必要 | | +| type | num | 视频类型 | 不必要 | 见[上报视频播放心跳(web端)](#上报视频播放心跳web端) | +| sub_type | num | 视频子类型 | 不必要 | 见[上报视频播放心跳(web端)](#上报视频播放心跳web端) | +| referer_url | str | 与请求头 Referer 字段相同 | 不必要 | | +| outer | num | 0 | 不必要 | | +| spmid | str | 333.788.0.0 | 不必要 | 作用尚不明确 | +| from_spmid | str | 播放来源? | 不必要 | 见[上报视频播放心跳(web端)](#上报视频播放心跳web端) | +| session | str | 会话信息? | 不必要 | 一串无分隔小写 UUID | +| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 不必要 | | + +**JSON回复:** + +根对象: + +|字段|类型|内容|备注| +|-|-|-|-| +|code|num|返回值|0:成功
-400:请求错误| +|message|str|错误信息|默认为 `0`| +|ttl|num|1|| + +**示例:** + +```shell +curl 'https://api.bilibili.com/x/click-interface/click/web/h5' \ +--data-urlencode 'aid=2' \ +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/video/snapshot.md b/docs/video/snapshot.md new file mode 100644 index 0000000..3bc1bb0 --- /dev/null +++ b/docs/video/snapshot.md @@ -0,0 +1,319 @@ +# 视频快照 + +快照的截取时间根据视频画面变化程度决定,各视频不相同 + +截取时间表的时间根据视频画面变化程度决定,各每个视频不相同 + +截取时间表的时间和快照一一对应,并按照从左到右 从上到下的顺序排布 + +## 获取视频快照(web端) +> https://api.bilibili.com/x/player/videoshot + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------ | ------------ | ----------------------------------- | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| cid | num | 分P cid | 非必要 | 默认为1P | +| index | num | json数组截取时间表 | 非必要 | 1:需要
0:不需要
默认为0 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------ | +| code | num | 返回值 | 0:成功
40001:请求错误
40003:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ---------------------- | --------- | +| pvdata | str | bin格式截取时间表url | | +| img_x_len | num | 每行图片数 | 一般为10 | +| img_y_len | num | 每列图片数 | 一般为10 | +| img_x_size | num | 每张图片长 | 一般为160 | +| img_y_size | num | 每张图片宽 | 一般为90 | +| image | array | 图片拼版 | | +| index | array | json数组格式截取时间表 | 无为空 | + +`data`中的`image`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | -------------------------- | +| 0 | str | 图片拼版1 url | | +| n | str | 图片拼版(n+1) url | 第一张拼版占满时延续第二张 | +| …… | str | …… | …… | + +`data`中的`index`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | --------------- | +| 0 | num | 恒为0 | | +| 1 | num | 图片1 截取时间 | 视频0秒截取时间 | +| n | num | 图片n 截取时间 | 单位为秒 | +| …… | num | …… | 单位为秒 | + +**示例:** + +获取视频`av26273789`/`BV1os411H7wm`的快照 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/player/videoshot' \ +--data-urlencode 'aid=26273789' \ +--data-urlencode 'index=1' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/player/videoshot' \ +--data-urlencode 'bvid=BV1os411H7wm' \ +--data-urlencode 'index=1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "pvdata": "//i0.hdslb.com/bfs/videoshot/49075258.bin", + "img_x_len": 10, + "img_y_len": 10, + "img_x_size": 160, + "img_y_size": 90, + "image": ["//i0.hdslb.com/bfs/videoshot/49075258.jpg", "//i0.hdslb.com/bfs/videoshot/49075258-1.jpg"], + "index": [0, 0, 8, 14, 19, 25, 34, 40, 46, 56, 63, 70, 80, 87, 93, 100, 109, 117, 124, 133, 142, 148, 156, 164, 171, 179, 184, 192, 198, 206, 214, 223, 232, 239, 246, 254, 261, 269, 275, 283, 289, 299, 305, 310, 315, 322, 330, 339, 348, 358, 364, 371, 376, 382, 391, 404, 413, 421, 426, 434, 441, 452, 458, 463, 473, 479, 491, 497, 504, 514, 521, 528, 533, 540, 546, 552, 558, 567, 575, 586, 591, 602, 609, 615, 623, 629, 639, 647, 653, 658, 664, 670, 675, 684, 691, 698, 713, 724, 729, 737, 743, 754, 762, 772, 779, 784, 797, 803, 810, 817, 825, 834, 845, 851, 857, 867, 878, 888, 896, 903, 909, 914, 919, 928, 935, 944, 958, 970, 977, 988, 996, 1004, 1011, 1018, 1026, 1035, 1041, 1048, 1055, 1063, 1073, 1079, 1086, 1095, 1106, 1111, 1124, 1135, 1147, 1153, 1159, 1165, 1171, 1184, 1198, 1209, 1215, 1221, 1228, 1236, 1242, 1253, 1258, 1269, 1276, 1284, 1289, 1300, 1306, 1315, 1321, 1328, 1340, 1347, 1354, 1361, 1366, 1371, 1383, 1390, 1396, 1403, 1415] + } +} +``` + +
+ +## 获取视频快照(APP端) + +> https://app.bilibili.com/x/v2/view/video/shot + +*请求方式:GET* + +鉴权方式:appkey + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ----------- | ---- | +| aid | num | 稿件avid | 必要 | | +| appkey | str | APP密钥 | APP方式必要 | | +| cid | num | 分P cid | 必要 | | +| ts | num | 当前时间戳 | APP方式必要 | | +| sign | str | APP签名 | APP方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
10008:稿件的缩略图不存在 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------------------- | --------- | +| pvdata | str | bin格式截取时间表url | | +| img_x_len | num | 每行图片数 | 一般为10 | +| img_y_len | num | 每列图片数 | 一般为10 | +| img_x_size | num | 每张图片长 | 一般为160 | +| img_y_size | num | 每张图片宽 | 一般为90 | +| image | array | 图片拼版 | | + +`data`中的`image`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | -------------------------- | +| 0 | str | 图片拼版1 url | | +| n | str | 图片拼版(n+1) url | 第一张拼版占满时延续第二张 | +| …… | str | …… | …… | + +示例: + +获取视频`av26273789`(`cid=49075258`)的快照 + +```shell +curl -G 'https://app.bilibili.com/x/v2/view/video/shot' \ +--data-urlencode 'appkey=1d8b6e7d45233436' \ +--data-urlencode 'aid=26273789' \ +--data-urlencode 'cid=49075258' \ +--data-urlencode 'ts=0' \ +--data-urlencode 'sign=06c0a4f2ede21984313552bd9439db18' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "pvdata": "https://i0.hdslb.com/bfs/videoshot/49075258.bin", + "img_x_len": 10, + "img_y_len": 10, + "img_x_size": 160, + "img_y_size": 90, + "image": [ + "https://i0.hdslb.com/bfs/videoshot/49075258.jpg", + "https://i0.hdslb.com/bfs/videoshot/49075258-1.jpg" + ] + } +} +``` + +
+ +## 获取视频快照(web端)(用于封面预览) + +> https://api.bilibili.com/pvideo + +*请求方式:GET* + +内容与「获取视频快照1」加参数index=1相同,但url带有转义,仅限第1P + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| aid | num | 稿件avid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------------------------- | +| code | num | 返回值 | 0:成功
40001:请求错误
-404:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | ---------------------- | --------- | +| pvdata | str | bin格式截取时间表url | | +| img_x_len | num | 每行图片数 | 一般为10 | +| img_y_len | num | 每列图片数 | 一般为10 | +| img_x_size | num | 每张图片长 | 一般为160 | +| img_y_size | num | 每张图片宽 | 一般为90 | +| image | array | 图片拼版 | | +| index | array | json数组格式截取时间表 | 无为空 | + +`data`中的`image`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | -------------------------- | +| 0 | str | 图片拼版1 url | | +| n | str | 图片拼版(n+1) url | 第一张拼版占满时延续第二张 | +| …… | str | …… | …… | + +`data`中的`index`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | --------------- | +| 0 | num | 恒为0 | | +| 1 | num | 图片1 截取时间 | 视频0秒截取时间 | +| n | num | 图片n 截取时间 | 单位为秒 | +| …… | num | …… | 单位为秒 | + +**示例:** + +获取视频`av26273789`的快照 + +```shell +curl -G 'https://api.bilibili.com/pvideo' \ +--data-urlencode 'aid=26273789' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "pvdata": "\/\/i0.hdslb.com\/bfs\/videoshot\/49075258.bin", + "img_x_len": 10, + "img_y_len": 10, + "img_x_size": 160, + "img_y_size": 90, + "image": ["\/\/i0.hdslb.com\/bfs\/videoshot\/49075258.jpg", "\/\/i0.hdslb.com\/bfs\/videoshot\/49075258-1.jpg"], + "index": [0, 0, 8, 14, 19, 25, 34, 40, 46, 56, 63, 70, 80, 87, 93, 100, 109, 117, 124, 133, 142, 148, 156, 164, 171, 179, 184, 192, 198, 206, 214, 223, 232, 239, 246, 254, 261, 269, 275, 283, 289, 299, 305, 310, 315, 322, 330, 339, 348, 358, 364, 371, 376, 382, 391, 404, 413, 421, 426, 434, 441, 452, 458, 463, 473, 479, 491, 497, 504, 514, 521, 528, 533, 540, 546, 552, 558, 567, 575, 586, 591, 602, 609, 615, 623, 629, 639, 647, 653, 658, 664, 670, 675, 684, 691, 698, 713, 724, 729, 737, 743, 754, 762, 772, 779, 784, 797, 803, 810, 817, 825, 834, 845, 851, 857, 867, 878, 888, 896, 903, 909, 914, 919, 928, 935, 944, 958, 970, 977, 988, 996, 1004, 1011, 1018, 1026, 1035, 1041, 1048, 1055, 1063, 1073, 1079, 1086, 1095, 1106, 1111, 1124, 1135, 1147, 1153, 1159, 1165, 1171, 1184, 1198, 1209, 1215, 1221, 1228, 1236, 1242, 1253, 1258, 1269, 1276, 1284, 1289, 1300, 1306, 1315, 1321, 1328, 1340, 1347, 1354, 1361, 1366, 1371, 1383, 1390, 1396, 1403, 1415] + } +} +``` + +
+ +## 图片拼版 + +以160x90像素为一张,横向10张,纵向10张,从左到右从上到下进行裁剪 + +图1为0s,图2为8s,图3为14s,以此类推…… + +示例拼版图片url:http://i0.hdslb.com/bfs/videoshot/49075258.jpg + + + +## bin格式截取时间表 + +bin的内容为uint16数组(2Byte对齐),与json数组一一对应 + +第0项恒为0,从第1项开始作为截取图片的时间(秒) + +示例bin格式截取时间表:http://i0.hdslb.com/bfs/videoshot/49075258.bin + +hex内容如下: + +``` +00000000 00 00 00 00 00 08 00 0e 00 13 00 19 00 22 00 28 |.............".(| +00000010 00 2e 00 38 00 3f 00 46 00 50 00 57 00 5d 00 64 |...8.?.F.P.W.].d| +00000020 00 6d 00 75 00 7c 00 85 00 8e 00 94 00 9c 00 a4 |.m.u.|..........| +00000030 00 ab 00 b3 00 b8 00 c0 00 c6 00 ce 00 d6 00 df |................| +00000040 00 e8 00 ef 00 f6 00 fe 01 05 01 0d 01 13 01 1b |................| +00000050 01 21 01 2b 01 31 01 36 01 3b 01 42 01 4a 01 53 |.!.+.1.6.;.B.J.S| +00000060 01 5c 01 66 01 6c 01 73 01 78 01 7e 01 87 01 94 |.\.f.l.s.x.~....| +00000070 01 9d 01 a5 01 aa 01 b2 01 b9 01 c4 01 ca 01 cf |................| +00000080 01 d9 01 df 01 eb 01 f1 01 f8 02 02 02 09 02 10 |................| +00000090 02 15 02 1c 02 22 02 28 02 2e 02 37 02 3f 02 4a |.....".(...7.?.J| +000000a0 02 4f 02 5a 02 61 02 67 02 6f 02 75 02 7f 02 87 |.O.Z.a.g.o.u....| +000000b0 02 8d 02 92 02 98 02 9e 02 a3 02 ac 02 b3 02 ba |................| +000000c0 02 c9 02 d4 02 d9 02 e1 02 e7 02 f2 02 fa 03 04 |................| +000000d0 03 0b 03 10 03 1d 03 23 03 2a 03 31 03 39 03 42 |.......#.*.1.9.B| +000000e0 03 4d 03 53 03 59 03 63 03 6e 03 78 03 80 03 87 |.M.S.Y.c.n.x....| +000000f0 03 8d 03 92 03 97 03 a0 03 a7 03 b0 03 be 03 ca |................| +00000100 03 d1 03 dc 03 e4 03 ec 03 f3 03 fa 04 02 04 0b |................| +00000110 04 11 04 18 04 1f 04 27 04 31 04 37 04 3e 04 47 |.......'.1.7.>.G| +00000120 04 52 04 57 04 64 04 6f 04 7b 04 81 04 87 04 8d |.R.W.d.o.{......| +00000130 04 93 04 a0 04 ae 04 b9 04 bf 04 c5 04 cc 04 d4 |................| +00000140 04 da 04 e5 04 ea 04 f5 04 fc 05 04 05 09 05 14 |................| +00000150 05 1a 05 23 05 29 05 30 05 3c 05 43 05 4a 05 51 |...#.).0.<.C.J.Q| +00000160 05 56 05 5b 05 67 05 6e 05 74 05 7b 05 87 |.V.[.g.n.t.{..| +``` diff --git a/docs/video/status_number.md b/docs/video/status_number.md new file mode 100644 index 0000000..89dc0bc --- /dev/null +++ b/docs/video/status_number.md @@ -0,0 +1,210 @@ +# 视频状态数 + +本页接口均已失效 + +## 视频状态数(仅avid) + +
+该接口已弃用 (HTTP 403) + +> https://api.bilibili.com/archive_stat/stat + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| aid | num | 稿件avid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------- | +| code | num | 返回值 | 0:成功
40001:请求错误
40003:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ------------------------ | ------------------------------ | -------------------- | +| aid | num | 稿件avid | | +| view | 正常:num
屏蔽:str | 正常:播放次数
屏蔽:"--" | | +| danmaku | num | 弹幕条数 | | +| reply | num | 评论条数 | | +| favorite | num | 收藏人数 | | +| coin | num | 投币枚数 | | +| share | num | 分享次数 | | +| now_rank | num | 0 | 作用尚不明确 | +| his_rank | num | 历史最高排行 | | +| like | num | 获赞次数 | | +| dislike | num | 0 | 作用尚不明确 | +| no_reprint | num | 禁止转载标志 | 0:无
1:禁止 | +| copyright | num | 版权标志 | 1:自制
2:转载 | + +**示例:** + +查询视频`av91572143`的状态数 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/archive_stat/stat' \ +--data-urlencode 'aid=91572143' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aid": 91572143, + "view": 2236510, + "danmaku": 37856, + "reply": 5723, + "favorite": 131317, + "coin": 143389, + "share": 44598, + "now_rank": 0, + "his_rank": 4, + "like": 264314, + "dislike": 0, + "no_reprint": 1, + "copyright": 1 + } +} +``` + +
+ +
+ +## 视频状态数(bvid/avid) + +
+该接口已失效 (HTTP 404) + +> https://api.bilibili.com/x/web-interface/archive/stat + +*请求方式:GET* + +此接口请求头中UA值存在`python`字串,会返回-412错误 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------------ | ------------------ | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-412:请求被拦截
40003:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ------------------------ | ------------------------------ | -------------------- | +| aid | num | 稿件avid | | +| bvid | str | 稿件bvid | | +| view | 正常:num
屏蔽:str | 正常:播放次数
屏蔽:"--" | | +| danmaku | num | 弹幕条数 | | +| reply | num | 评论条数 | | +| favorite | num | 收藏人数 | | +| coin | num | 投币枚数 | | +| share | num | 分享次数 | | +| now_rank | num | 0 | 作用尚不明确 | +| his_rank | num | 历史最高排行 | | +| like | num | 获赞次数 | | +| dislike | num | 0 | 作用尚不明确 | +| no_reprint | num | 禁止转载标志 | 0:无
1:禁止 | +| copyright | num | 版权标志 | 1:自制
2:转载 | +| argue_msg | str | 警告信息 | 默认为空 | +| evaluation | str | 视频评分 | 默认为空 | + +**示例:** + +查询视频`av2271112`/`BV1es411D7sW`的状态数 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/stat' \ +--data-urlencode 'aid=2271112' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/stat' \ +--data-urlencode 'bvid=BV1es411D7sW' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "aid": 2271112, + "bvid": "BV1es411D7sW", + "view": 26408224, + "danmaku": 161919, + "reply": 52825, + "favorite": 892560, + "coin": 599649, + "share": 240573, + "like": 628592, + "now_rank": 0, + "his_rank": 4, + "no_reprint": 0, + "copyright": 1, + "argue_msg": "", + "evaluation": "" + } +} +``` + +
+ +当UA为`2333python2333`时,则无法访问此接口: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/archive/stat' \ +--data-urlencode 'aid=2271112' \ +-A '2333python2333' +``` + +
+查看响应示例: + +```json +{ + "code":-412, + "message":"请求被拦截", + "ttl":1, + "data":null +} +``` + +
+ +
diff --git a/docs/video/summary.md b/docs/video/summary.md new file mode 100644 index 0000000..55d9fb1 --- /dev/null +++ b/docs/video/summary.md @@ -0,0 +1,287 @@ +# 视频AI总结 + + + +## 获取AI总结内容 + +> https://api.bilibili.com/x/web-interface/view/conclusion/get + +*请求方式: GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-----|--------|-----|----------------------------------| +| aid | num | 稿件 avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件 bvid | 必要(可选) | avid与bvid任选一个 | +| cid | num | 视频 cid | 必要 | | +| up_mid | num | UP主 mid | 可选 | | +| w_rid | str | Wbi 签名 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | +| wts | num | 当前时间戳 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|--------------------------| +| code | num | 返回值 | 0: 成功
-101: 账号未登录
-400:请求错误
-403: 访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-----|------|----------------------| +| code | num | 返回值 | -1: 不支持AI摘要(敏感内容等)或其他因素导致请求异常
0: 有摘要
1:无摘要(未识别到语音) | +| model_result | obj | 摘要内容 | | +| stid | str | 摘要 id | 如`code=1`且该字段为`0`时,则未进行 AI 总结,即添加总结队列
如`code=1`且该字段为空时未识别到语音 | +| status | num | (?) | | +| like_num | num | 点赞数 | 默认为`0` | +| dislike_num | num | 点踩数 | 默认为`0` | + +`data`中的`model_result`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|----------|------------------------------------------| +| result_type | num | 数据类型 | 0: 没有摘要
1:仅存着摘要总结
2:存着摘要以及提纲 | +| summary | str | 视频摘要 | 通常为一段概括整个视频内容的文本 | +| outline | 有数据时:array
无数据时:空数组 | 分段提纲 | 通常为视频中叙述的各部分及其要点 | +| subtitle | 有数据时:array
无数据时:空数组 | AI字幕 | 由AI识别生成的字幕列表,自动翻译英文,固定返回中文字幕 | + +`model_result`对象中的`outline`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|---------|-----| +| 0 | obj | 总结分段1 | | +| n | obj | 总结分段(n+1) | | +| …… | obj | …… | …… | + +`outline`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-----|------|----| +| title | str | 分段标题 | 段落内容的概括 | +| part_outline | array | 分段要点 | 当前分段中多个提到的细节 | +| timestamp | num | 分段起始时间 | 单位为秒 | + +`outline`数组中的对象中的`part_outline`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|---------|-----| +| 0 | obj | 分段要点1 | | +| n | obj | 分段要点(n+1) | | +| …… | obj | …… | …… | + +`part_outline`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------|-----|-------|----| +| timestamp | num | 要点起始时间 | 单位为秒 | +| content | str | 小结内容 | 其中一个分段的要点 | + +`model_result`对象中`subtitle`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|----------|-----| +| 0 | obj | 字幕列表1 | 若有结果,该数组长度仅为1 | + +`subtitle`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----|-----|---------|-----| +| part_subtitle | array | 字幕分段 | 当前分段中的字幕信息 | +| timestamp | num | 字幕识别起始时间 | 单位为秒 | +| title | str | 字幕标题 | 固定为空字符串 | + +`subtitle`数组中的对象中的`part_subtitle`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|---------|-----| +| 0 | obj | 字幕分段1 | | +| n | obj | 字幕分段n | | +| …… | obj | …… | …… | + +`part_subtitle`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----------|-----|-------|----| +| content | str | 字幕内容 | 其中一个分段的字幕内容 | +| start_timestamp | num | 分段开始时间 | 单位为秒 | +| end_timestamp | num | 分段结束时间 | 单位为秒 | + +**示例:** + +得到视频`BV1L94y1H7CV`(`cid=1335073288`)的摘要 + +```bash +curl -G 'https://api.bilibili.com/x/web-interface/view/conclusion/get' \ + --data-urlencode 'bvid=BV1L94y1H7CV' \ + --data-urlencode 'cid=1335073288' \ + --data-urlencode 'up_mid=297242063' \ + --data-urlencode 'wts=1701546363' \ + --data-urlencode 'w_rid=1073871926b3ccd99bd790f0162af634' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "code": 0, + "model_result": { + "result_type": 2, + "summary": "在网上阅读时遇到错别字和语言梗的烦恼,以及正确使用语言的重要性。作者认为,我们每个人都应该有包容心,不掉渣,不纠正别人的错误,同时也需要明辨是非,规范使用语言。视频还提到了一些常见的语言梗和错误用法,呼吁大家不要过分使用网络词汇,而应该注重语言的艺术性和深度。最后,作者欢迎大家关注他的微信公众号。", + "outline": [ + { + "title": "现代人使用中文时面临的困境,包括错别字、用法不正确等问题,并呼吁大家规范使用中文。", + "part_outline": [ + { + "timestamp": 1, + "content": "网友评论有错别字,勉强能看懂,但难受。" + }, + { + "timestamp": 39, + "content": "重来一次,明辨是非。" + }, + { + "timestamp": 167, + "content": "粉墨登场是贬义词,形容坏人打扮好老登场。" + } + ], + "timestamp": 1 + }, + { + "title": "网络词汇的过度使用导致语言生硬,以及对流行语言梗的短暂使用感到厌倦。", + "part_outline": [ + { + "timestamp": 241, + "content": "网络词汇过分使用会误导别人,使规范词汇生硬" + }, + { + "timestamp": 270, + "content": "以前的语言梗有深度,现在的流行梗很短命" + }, + { + "timestamp": 338, + "content": "巨星之间需要化学反应的过程,前几场发挥欠佳" + } + ], + "timestamp": 241 + } + ], + "subtitle": [ + { + "part_subtitle": [ + { + "content": "有时候上网啊", + "start_timestamp": 0, + "end_timestamp": 1 + }, + { + "content": "看网友的评论内容", + "start_timestamp": 1, + "end_timestamp": 3 + }, + { + "content": "一句话好几个错别字", + "start_timestamp": 3, + "end_timestamp": 5 + }, + // ... + { + "content": "黄一刀有毒", + "start_timestamp": 352, + "end_timestamp": 355 + } + ], + "timestamp": 1, + "title": "" + } + ], + }, + "stid": "5117037934391059183", + "status": 0, + "like_num": 6, + "dislike_num": 2 + } +} +``` + +
+ +## 点赞&点踩摘要 + +> https://api.bilibili.com/x/web-interface/view/conclusion/set + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-------|-----|--------|-----|----------------------------------| +| w_rid | str | Wbi 签名 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | +| wts | num | 当前时间戳 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) | + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------------|-----|----------------------|-----|-----------------------------| +| aid | num | 稿件 avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件 bvid | 必要(可选) | avid与bvid任选一个 | +| cid | num | 稿件 cid | 必要 | | +| up_mid | num | UP主 mid | 非必要 | | +| stid | num | 摘要 id | 必要 | | +| like_state | num | 执行操作 | 必要 | 1: 点赞
2: 取消点赞
3: 点踩
4: 取消点踩 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------------------------| +| code | num | 返回值 | 0: 成功
-400: 请求错误
65002:origin id 错误
65004:取消赞失败 未点赞过
65005:取消踩失败 未点踩过
65006: 已赞过
65007:已踩过 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +为视频`BV1L94y1H7CV`(`cid=1335073288`)的摘要点赞 + +```shell +curl 'https://api.bilibili.com/x/web-interface/view/conclusion/set?w_rid=edb471fc926646ef3889a80488166b66&wts=1700358953' \ + --data-urlencode 'bvid=BV1L94y1H7CV' \ + --data-urlencode 'cid=1335073288' \ + --data-urlencode 'up_mid=297242063' \ + --data-urlencode 'stid=5117037934391059183' \ + --data-urlencode '&like_state=1' \ + --data-urlencode 'csrf=xxx' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/video/tags.md b/docs/video/tags.md new file mode 100644 index 0000000..2ee6fde --- /dev/null +++ b/docs/video/tags.md @@ -0,0 +1,434 @@ +# 视频TAG + +## 获取视频TAG信息(新) + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------------ | -------------------------------- | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| cid | num | 分P cid | 非必要 | 提供此参数可返回对应分P的BGM信息 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | TAG列表 | 无TAG为空 | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | obj | 第1个TAG | | +| n | obj | 第(n+1)个TAG | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ------------------------------------------------------------ | +| tag_id | num | tag_id | 当`tag_type`不为`bgm`时有效 | +| tag_name | str | TAG名称 | | +| music_id | str | 背景音乐id | 当`tag_type`为`bgm`时有效,以`MA`开头 | +| tag_type | str | TAG类型 | `old_channel`:普通标签
`topic`:话题
`bgm`:背景音乐 | +| jump_url | str | 跳转url | 当`tag_type`为`topic`或`bgm`时有效 | + +**示例:** + +查询视频`av89772773`/`BV1M741177Kg`的TAG + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view/detail/tag' \ +--data-urlencode 'aid=89772773' \ +--data-urlencode 'cid=153322313' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view/detail/tag' \ +--data-urlencode 'bvid=BV1M741177Kg' \ +--data-urlencode 'cid=153322313' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "tag_id": 0, + "tag_name": "发现《Other Side》", + "music_id": "MA456128506519140428", + "tag_type": "bgm", + "jump_url": "https://music.bilibili.com/h5/music-detail?music_id=MA456128506519140428&cid=153322313&aid=89772773&na_close_hide=1" + }, + { + "tag_id": 12620189, + "tag_name": "异度侵入", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + }, + { + "tag_id": 707, + "tag_name": "ED", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + }, + { + "tag_id": 1394, + "tag_name": "动漫", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + }, + { + "tag_id": 13289329, + "tag_name": "异度侵入ed原图", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + }, + { + "tag_id": 7520816, + "tag_name": "bilibili新星计划", + "music_id": "", + "tag_type": "old_channel", + "jump_url": "" + } + ] +} +``` + +
+ +## 获取视频TAG信息(旧) + +> + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------------ | ------------------ | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | TAG列表 | 无TAG为空 | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | obj | 第1个TAG | | +| n | obj | 第(n+1)个TAG | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | -------------- | ------------------------------------------------------------ | +| tag_id | num | tag_id | | +| tag_name | str | TAG名称 | | +| cover | str | TAG图片url | | +| head_cover | str | TAG页面头图url | | +| content | str | TAG介绍 | | +| short_content | str | TAG简介 | | +| type | num | ??? | | +| state | num | 0 | | +| ctime | num | 创建时间 | 秒级时间戳 | +| count | obj | 状态数 | | +| is_atten | num | 是否关注 | 0:未关注
1:已关注
需要登录(Cookie)
未登录为0 | +| likes | num | 0 | 作用尚不明确 | +| hates | num | 0 | 作用尚不明确 | +| attribute | num | 0 | 作用尚不明确 | +| liked | num | 是否已经点赞 | 0:未点赞
1:已点赞
需要登录(Cookie)
未登录为0 | +| hated | num | 是否已经点踩 | 0:未点踩
1:已点踩
需要登录(Cookie)
未登录为0 | +| extra_attr | num | ? ? ? | | + +`data`数组中的对象中的`count`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------- | ------------ | +| view | num | 0 | 作用尚不明确 | +| use | num | 视频添加TAG数 | | +| atten | num | TAG关注 | | + +**示例:** + +查询视频`av89772773`/`BV1M741177Kg`的TAG + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/tag/archive/tags' \ +--data-urlencode 'aid=89772773' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/tag/archive/tags' \ +--data-urlencode 'bvid=BV1M741177Kg' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [{ + "tag_id": 12620189, + "tag_name": "异度侵入", + "cover": "", + "head_cover": "", + "content": "", + "short_content": "", + "type": 1, + "state": 0, + "ctime": 1576235749, + "count": { + "view": 0, + "use": 6392, + "atten": 8938 + }, + "is_atten": 1, + "likes": 1, + "hates": 0, + "attribute": 0, + "liked": 0, + "hated": 0 + }, { + "tag_id": 7520816, + "tag_name": "bilibili新星计划", + "cover": "", + "head_cover": "", + "content": "", + "short_content": "", + "type": 4, + "state": 0, + "ctime": 1529717850, + "count": { + "view": 0, + "use": 1967314, + "atten": 65082 + }, + "is_atten": 0, + "likes": 0, + "hates": 0, + "attribute": 0, + "liked": 0, + "hated": 0 + }, { + "tag_id": 707, + "tag_name": "ED", + "cover": "", + "head_cover": "", + "content": "", + "short_content": "", + "type": 3, + "state": 0, + "ctime": 1436866637, + "count": { + "view": 0, + "use": 62646, + "atten": 75642 + }, + "is_atten": 1, + "likes": 0, + "hates": 0, + "attribute": 0, + "liked": 0, + "hated": 0 + }, { + "tag_id": 1394, + "tag_name": "动漫", + "cover": "http://i0.hdslb.com/bfs/tag/d08c5fe17ceb793e7ce95d9c67392743b33b46d0.jpg", + "head_cover": "", + "content": " “动漫”是动画和漫画的合称与缩写。在其他语言相当少用。随着现代传媒技术的发展,动画(animation或anime)和漫画(comics,manga;特别是故事性漫画)之间联系日趋紧密,两者常被合而为“动漫”。\n  由于漫画本身的发展形成了现代故事漫画的表现形式,将影视艺术融入漫画之中,使得漫画与动画更容易结合,影视艺术独特的地方在于它能通过镜头的推拉摇移和片段剪辑的蒙太奇技巧来表达想法和感受。漫画正是吸收了影视艺术的这两个特点。当讲述的故事越发复杂、人物越发丰富的时候,传统单线式叙事的方法就越行不通,蒙太奇的介入就成为一种需要了;当漫画家在传统表现手段中无法找到更合适的抒发感情的方法的时候,当读者需要作品有更强的冲击力和表现力的时候,各种镜头的灵活运用就成为一种必需了。一部现代故事漫画往往集远、中、近、特四种镜头于一身,漫画家往往能熟练地运用镜头的移动和各种蒙太奇剪接,对故事特定部分的情绪和氛围进行渲染。这就是现代故事漫画容易和动画结合的一个原因,因为它天生就像动画的分镜头剧本,读者在看漫画时如同在看一部电影。正是有着这样的相似性所以如今将动画和漫画合称为“动漫”。", + "short_content": "", + "type": 3, + "state": 0, + "ctime": 1436866637, + "count": { + "view": 0, + "use": 1134143, + "atten": 113030 + }, + "is_atten": 0, + "likes": 0, + "hates": 0, + "attribute": 0, + "liked": 0, + "hated": 0 + }, { + "tag_id": 13289329, + "tag_name": "异度侵入ed原图", + "cover": "", + "head_cover": "", + "content": "", + "short_content": "", + "type": 1, + "state": 0, + "ctime": 1581948411, + "count": { + "view": 0, + "use": 3, + "atten": 0 + }, + "is_atten": 0, + "likes": 0, + "hates": 0, + "attribute": 0, + "liked": 0, + "hated": 0 + }] +} +``` + +
+ +## 点赞&取消点赞视频TAG + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +重复请求为取消 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| aid | num | 稿件avid | 必要 | | +| tag_id | num | tag_id | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +为视频`av89772773`的TAG`12620189`点赞 + +```shell +curl 'https://api.bilibili.com/x/tag/archive/like2' \ +--data-urlencode 'aid=89772773' \ +--data-urlencode 'tag_id=12620189' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 点踩&取消点踩视频TAG + +> + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +重复请求为取消 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| aid | num | 稿件avid | 必要 | | +| tag_id | num | tag_id | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +为视频`av89772773`的TAG`7520816`点踩 + +```shell +curl 'https://pi.bilibili.com/x/tag/archive/hate2' \ +--data-urlencode 'aid=89772773' \ +--data-urlencode 'tag_id=7520816' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/video/video_zone.md b/docs/video/video_zone.md new file mode 100644 index 0000000..14fe503 --- /dev/null +++ b/docs/video/video_zone.md @@ -0,0 +1,336 @@ +# 视频分区一览 + +用于判断视频所在的分区,或推荐分区视频等…… + +亦可用于更深♂入了解B站的分区 + +本文档中的内容适用于 `tid`、`tname` 等字段,关于 `tid_v2`、`tname_v2` 等字段请参阅 “[视频分区一览 (v2)](./video_zone_v2.md)” 文档 + +## 动画 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|-----------------------|------------|-----|------------------------------------------------------------------|--------------------------------------------------------------------| +| 动画(主分区) | douga | 1 | | [/v/douga](https://www.bilibili.com/v/douga) | +| MAD·AMV | mad | 24 | 具有一定制作程度的动画或静画的二次创作视频 | [/v/douga/mad](https://www.bilibili.com/v/douga/mad) | +| MMD·3D | mmd | 25 | 使用MMD(MikuMikuDance)和其他3D建模类软件制作的视频 | [/v/douga/mmd](https://www.bilibili.com/v/douga/mmd) | +| 同人·手书
(~~原短片·手书~~) | handdrawn | 47 | 追求个人特色和创意表达的手书(绘)、以及同人作品展示、宣传为主的内容 | [/v/douga/handdrawn](https://www.bilibili.com/v/douga/handdrawn) | +| 配音 | voice | 257 | 使用ACGN相关画面或台本素材进行人工配音创作的内容 | [/v/douga/voice](https://www.bilibili.com/v/douga/voice) | +| 手办·模玩 | garage_kit | 210 | 手办模玩的测评、改造或其他衍生内容 | [/v/douga/garage_kit](https://www.bilibili.com/v/douga/garage_kit) | +| 特摄 | tokusatsu | 86 | 特摄相关衍生视频 | [/v/douga/tokusatsu](https://www.bilibili.com/v/douga/tokusatsu) | +| 动漫杂谈 | acgntalks | 253 | 以谈话形式对ACGN文化圈进行的鉴赏、吐槽、评点、解说、推荐、科普等内容 | [/v/douga/acgntalks](https://www.bilibili.com/v/douga/acgntalks) | +| 综合 | other | 27 | 以动画及动画相关内容为素材,包括但不仅限于音频替换、恶搞改编、排行榜等内容 | [/v/douga/other](https://www.bilibili.com/v/douga/other) | + +## 番剧 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------|-------------|-----|---------------------------|----------------------------------------------------------------------| +| 番剧(主分区) | anime | 13 | | [/anime](https://www.bilibili.com/anime) | +| 资讯 | information | 51 | 动画番剧相关资讯视频 | [/v/anime/information](https://www.bilibili.com/v/anime/information) | +| 官方延伸 | offical | 152 | 动画番剧为主题的宣传节目、采访视频,及声优相关视频 | [/v/anime/offical](https://www.bilibili.com/v/anime/offical) | +| 完结动画 | finish | 32 | 已完结的动画番剧合集 | [/v/anime/finish](https://www.bilibili.com/v/anime/finish) | +| 连载动画 | serial | 33 | 当季连载的动画番剧 | [/v/anime/serial](https://www.bilibili.com/v/anime/serial) | + +## 国创 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------|-------------|-----|------------|------------------------------------------------------------------------------| +| 国创(主分区) | guochuang | 167 | | [/guochuang](https://www.bilibili.com/guochuang) | +| 国产动画 | chinese | 153 | 我国出品的PGC动画 | [/v/guochuang/chinese](https://www.bilibili.com/v/guochuang/chinese) | +| 国产原创相关 | original | 168 | | [/v/guochuang/original](https://www.bilibili.com/v/guochuang/original) | +| 布袋戏 | puppetry | 169 | | [/v/guochuang/puppetry](https://www.bilibili.com/v/guochuang/puppetry) | +| 资讯 | information | 170 | | [/v/guochuang/information](https://www.bilibili.com/v/guochuang/information) | +| 动态漫·广播剧 | motioncomic | 195 | | [/v/guochuang/motioncomic](https://www.bilibili.com/v/guochuang/motioncomic) | + +## 音乐 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------------|----------------|---------|----------------------------------------------------------|--------------------------------------------------------------------| +| 音乐(主分区) | music | 3 | | [/v/music](https://www.bilibili.com/v/music) | +| 原创音乐 | original | 28 | 原创歌曲及纯音乐,包括改编、重编曲及remix | [/v/music/original](https://www.bilibili.com/v/music/original) | +| 音乐现场 | live | 29 | 音乐表演的实况视频,包括官方的综艺节目、音乐剧、音乐节、演唱会、打歌舞台现场等,以及个人演出/街头表演现场等 | [/v/music/live](https://www.bilibili.com/v/music/live) | +| 翻唱 | cover | 31 | 对曲目的人声再演绎视频 | [/v/music/cover](https://www.bilibili.com/v/music/cover) | +| 演奏 | perform | 59 | 乐器和非传统乐器器材的演奏作品 | [/v/music/perform](https://www.bilibili.com/v/music/perform) | +| 乐评盘点 | commentary | 243 | 音乐类新闻、盘点、点评、reaction、榜单、采访、幕后故事、唱片开箱等 | [/v/music/commentary](https://www.bilibili.com/v/music/commentary) | +| VOCALOID·UTAU | vocaloid | 30 | 以VOCALOID等歌声合成引擎为基础,运用各类音源进行的创作 | [/v/music/vocaloid](https://www.bilibili.com/v/music/vocaloid) | +| MV | mv | 193 | 为音乐作品配合拍摄或制作的音乐录影带(Music Video),以及自制拍摄、剪辑、翻拍MV | [/v/music/mv](https://www.bilibili.com/v/music/mv) | +| 音乐粉丝饭拍 | fan_videos | 266 | 在音乐演出现场由粉丝团体或个人拍摄的非官方记录视频,包括但不限于粉丝自制饭拍、直拍、Vlog以及衍生的内容混剪等 | [/v/music/fan_videos](https://www.bilibili.com/v/music/fan_videos) | +| AI音乐 | ai_music | 265 | 以AI合成技术为基础,运用各类工具进行的AI作编曲、AI作词、AI语音、AI变声、AI翻唱、AI MV等创作 | [/v/music/ai_music](https://www.bilibili.com/v/music/ai_music) | +| 电台 | radio | 267 | 音乐分享、播单、白噪音、有声读物等以听为主的播放内容 | [/v/music/radio](https://www.bilibili.com/v/music/radio) | +| 音乐教学 | tutorial | 244 | 以音乐教学为目的的内容 | [/v/music/tutorial](https://www.bilibili.com/v/music/tutorial) | +| 音乐综合 | other | 130 | 所有无法被收纳到其他音乐二级分区的音乐类视频 | [/v/music/other](https://www.bilibili.com/v/music/other) | +| ~~电音~~(已下线) | ~~electronic~~ | ~~194~~ | ~~以电子合成器、音乐软体等产生的电子声响制作的音乐~~ | ~~/v/music/electronic~~ | + +## 舞蹈 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|-------------------------|----------|-----|--------------------------------------|----------------------------------------------------------------| +| 舞蹈(主分区) | dance | 129 | | [/v/dance](https://www.bilibili.com/v/dance) | +| 宅舞 | otaku | 20 | 与ACG相关的翻跳、原创舞蹈 | [/v/dance/otaku](https://www.bilibili.com/v/dance/otaku) | +| 街舞 | hiphop | 198 | 收录街舞相关内容,包括赛事现场、舞室作品、个人翻跳、FREESTYLE等 | [/v/dance/hiphop](https://www.bilibili.com/v/dance/hiphop) | +| 明星舞蹈 | star | 199 | 国内外明星发布的官方舞蹈及其翻跳内容 | [/v/dance/star](https://www.bilibili.com/v/dance/star) | +| 国风舞蹈 | china | 200 | 收录国风向舞蹈内容,包括中国舞、民族民间舞、汉唐舞、国风爵士等 | [/v/dance/china](https://www.bilibili.com/v/dance/china) | +| 颜值·网红舞
(~~原手势·网红舞~~) | gestures | 255 | 手势舞及网红流行舞蹈、短视频舞蹈等相关视频 | [/v/dance/gestures](https://www.bilibili.com/v/dance/gestures) | +| 舞蹈综合 | three_d | 154 | 收录无法定义到其他舞蹈子分区的舞蹈视频 | [/v/dance/three_d](https://www.bilibili.com/v/dance/three_d) | +| 舞蹈教程 | demo | 156 | 镜面慢速,动作分解,基础教程等具有教学意义的舞蹈视频 | [/v/dance/demo](https://www.bilibili.com/v/dance/demo) | + +## 游戏 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------|-------------|-----|---------------------------------------------------------------|--------------------------------------------------------------------| +| 游戏(主分区) | game | 4 | | [/v/game](https://www.bilibili.com/v/game) | +| 单机游戏 | stand_alone | 17 | 以所有平台(PC、主机、移动端)的单机或联机游戏为主的视频内容,包括游戏预告、CG、实况解说及相关的评测、杂谈与视频剪辑等 | [/v/game/stand_alone](https://www.bilibili.com/v/game/stand_alone) | +| 电子竞技 | esports | 171 | 具有高对抗性的电子竞技游戏项目,其相关的赛事、实况、攻略、解说、短剧等视频。 | [/v/game/esports](https://www.bilibili.com/v/game/esports) | +| 手机游戏 | mobile | 172 | 以手机及平板设备为主要平台的游戏,其相关的实况、攻略、解说、短剧、演示等视频。 | [/v/game/mobile](https://www.bilibili.com/v/game/mobile) | +| 网络游戏 | online | 65 | 由网络运营商运营的多人在线游戏,以及电子竞技的相关游戏内容。包括赛事、攻略、实况、解说等相关视频 | [/v/game/online](https://www.bilibili.com/v/game/online) | +| 桌游棋牌 | board | 173 | 桌游、棋牌、卡牌对战等及其相关电子版游戏的实况、攻略、解说、演示等视频。 | [/v/game/board](https://www.bilibili.com/v/game/board) | +| GMV | gmv | 121 | 由游戏素材制作的MV视频。以游戏内容或CG为主制作的,具有一定创作程度的MV类型的视频 | [/v/game/gmv](https://www.bilibili.com/v/game/gmv) | +| 音游 | music | 136 | 各个平台上,通过配合音乐与节奏而进行的音乐类游戏视频 | [/v/game/music](https://www.bilibili.com/v/game/music) | +| Mugen | mugen | 19 | 以Mugen引擎为平台制作、或与Mugen相关的游戏视频 | [/v/game/mugen](https://www.bilibili.com/v/game/mugen) | + +## 知识 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|-----------------------------|-------------------|--------|-----------------------------|----------------------------------------------------------------------------------------| +| 知识(主分区) | knowledge | 36 | | [/v/knowledge](https://www.bilibili.com/v/knowledge) | +| 科学科普 | science | 201 | 回答你的十万个为什么 | [/v/knowledge/science](https://www.bilibili.com/v/knowledge/science) | +| 社科·法律·心理(~~原社科人文、原趣味科普人文~~) | social_science | 124 | 基于社会科学、法学、心理学展开或个人观点输出的知识视频 | [/v/knowledge/social_science](https://www.bilibili.com/v/knowledge/social_science) | +| 人文历史 | humanity_history | 228 | 看看古今人物,聊聊历史过往,品品文学典籍 | [/v/knowledge/humanity_history](https://www.bilibili.com/v/knowledge/humanity_history) | +| 财经商业 | business | 207 | 说金融市场,谈宏观经济,一起畅聊商业故事 | [/v/knowledge/finance](https://www.bilibili.com/v/knowledge/finance) | +| 校园学习 | campus | 208 | 老师很有趣,学生也有才,我们一起搞学习 | [/v/knowledge/campus](https://www.bilibili.com/v/knowledge/campus) | +| 职业职场 | career | 209 | 职业分享、升级指南,一起成为最有料的职场人 | [/v/knowledge/career](https://www.bilibili.com/v/knowledge/career) | +| 设计·创意 | design | 229 | 天马行空,创意设计,都在这里 | [/v/knowledge/design](https://www.bilibili.com/v/knowledge/design) | +| 野生技术协会 | skill | 122 | 技能党集合,是时候展示真正的技术了 | [/v/knowledge/skill](https://www.bilibili.com/v/knowledge/skill) | +| ~~演讲·公开课~~(已下线) | ~~speech_course~~ | ~~39~~ | ~~涨知识的好地方,给爱学习的你~~ | ~~/v/technology/speech_course~~ | +| ~~星海~~(已下线) | ~~military~~ | ~~96~~ | ~~军事类内容的圣地~~ | ~~/v/technology/military~~ | +| ~~机械~~(已下线) | ~~mechanical~~ | ~~98~~ | ~~机械设备展示或制作视频~~ | ~~/v/technology/mechanical~~ | + +## 科技 + +新:旧: + +~~原数码分区~~ + +| 名称 | 代号 | tid | 简介 | url路由 | +|----------------------|---------------------|---------|----------------------------------|------------------------------------------------------------------------| +| 科技(主分区) | tech | 188 | | [/v/tech](https://www.bilibili.com/v/tech) | +| 数码(~~原手机平板~~) | digital | 95 | 科技数码产品大全,一起来做发烧友 | [/v/tech/digital](https://www.bilibili.com/v/tech/digital) | +| 软件应用 | application | 230 | 超全软件应用指南 | [/v/tech/application](https://www.bilibili.com/v/tech/application) | +| 计算机技术 | computer_tech | 231 | 研究分析、教学演示、经验分享......有关计算机技术的都在这里 | [/v/tech/computer_tech](https://www.bilibili.com/v/tech/computer_tech) | +| 科工机械 (~~原工业·工程·机械~~) | industry | 232 | 从小芯片到大工程,一起见证科工力量 | [/v/tech/industry](https://www.bilibili.com/v/tech/industry) | +| 极客DIY | diy | 233 | 炫酷技能,极客文化,硬核技巧,准备好你的惊讶 | [/v/tech/diy](https://www.bilibili.com/v/tech/diy) | +| ~~电脑装机~~(已下线) | ~~pc~~ | ~~189~~ | ~~电脑、笔记本、装机配件、外设和软件教程等相关视频~~ | ~~/v/digital/pc~~ | +| ~~摄影摄像~~(已下线) | ~~photography~~ | ~~190~~ | ~~摄影摄像器材、拍摄剪辑技巧、拍摄作品分享等相关视频~~ | ~~/v/digital/photography~~ | +| ~~影音智能~~(已下线) | ~~intelligence_av~~ | ~~191~~ | ~~影音设备、智能产品等相关视频~~ | ~~/v/digital/intelligence_av~~ | + +## 运动 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------|---------------|-----|--------------------------------------------------------|----------------------------------------------------------------------------| +| 运动(主分区) | sports | 234 | | [/v/sports](https://www.bilibili.com/v/sports) | +| 篮球 | basketball | 235 | 与篮球相关的视频,包括但不限于篮球赛事、教学、评述、剪辑、剧情等相关内容 | [/v/sports/basketball](https://www.bilibili.com/v/sports/basketball) | +| 足球 | football | 249 | 与足球相关的视频,包括但不限于足球赛事、教学、评述、剪辑、剧情等相关内容 | [/v/sports/football](https://www.bilibili.com/v/sports/football) | +| 健身 | aerobics | 164 | 与健身相关的视频,包括但不限于瑜伽、CrossFit、健美、力量举、普拉提、街健等相关内容 | [/v/sports/aerobics](https://www.bilibili.com/v/sports/aerobics) | +| 竞技体育 | athletic | 236 | 与竞技体育相关的视频,包括但不限于乒乓、羽毛球、排球、赛车等竞技项目的赛事、评述、剪辑、剧情等相关内容 | [/v/sports/culture](https://www.bilibili.com/v/sports/culture) | +| 运动文化 | culture | 237 | 与运动文化相关的视频,包络但不限于球鞋、球衣、球星卡等运动衍生品的分享、解读,体育产业的分析、科普等相关内容 | [/v/sports/culture](https://www.bilibili.com/v/sports/culture) | +| 运动综合 | comprehensive | 238 | 与运动综合相关的视频,包括但不限于钓鱼、骑行、滑板等日常运动分享、教学、Vlog等相关内容 | [/v/sports/comprehensive](https://www.bilibili.com/v/sports/comprehensive) | + +## 汽车 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------------|------------------|---------|---------------------------------------------------------------|----------------------------------------------------------------------------| +| 汽车(主分区) | car | 223 | | [/v/car](https://www.bilibili.com/v/car) | +| 汽车知识科普 | knowledge | 258 | 关于汽车技术与文化的硬核科普,以及生活中学车、用车、养车的相关知识 | [/v/car/knowledge](https://www.bilibili.com/v/car/knowledge) | +| 购车攻略 | strategy | 227 | 丰富详实的购车建议和新车体验 | [/v/car/strategy](https://www.bilibili.com/v/car/strategy) | +| 新能源车 | newenergyvehicle | 247 | 新能源汽车相关内容,包括电动汽车、混合动力汽车等车型种类,包含不限于新车资讯、试驾体验、专业评测、技术解读、知识科普等内容 | [/v/car/newenergyvehicle](https://www.bilibili.com/v/car/newenergyvehicle) | +| 赛车 | racing | 245 | F1等汽车运动相关 | [/v/car/racing](https://www.bilibili.com/v/car/racing) | +| 改装玩车 | modifiedvehicle | 246 | 汽车文化及改装车相关内容,包括改装车、老车修复介绍、汽车聚会分享等内容 | [/v/car/modifiedvehicle](https://www.bilibili.com/v/car/modifiedvehicle) | +| 摩托车 | motorcycle | 240 | 骑士们集合啦 | [/v/car/motorcycle](https://www.bilibili.com/v/car/motorcycle) | +| 房车 | touringcar | 248 | 房车及营地相关内容,包括不限于产品介绍、驾驶体验、房车生活和房车旅行等内容 | [/v/car/touringcar](https://www.bilibili.com/v/car/touringcar) | +| 汽车生活 | life | 176 | 分享汽车及出行相关的生活体验类视频 | [/v/car/life](https://www.bilibili.com/v/car/life) | +| ~~汽车文化~~(已下线) | ~~culture~~ | ~~224~~ | ~~车迷的精神圣地,包括汽车赛事、品牌历史、汽车改装、经典车型和汽车模型等~~ | ~~/v/car/culture~~ | +| ~~汽车极客~~(已下线) | ~~geek~~ | ~~225~~ | ~~汽车硬核达人聚集地,包括DIY造车、专业评测和技术知识分享~~ | ~~/v/car/geek~~ | +| ~~智能出行~~(已下线) | ~~smart~~ | ~~226~~ | ~~探索新能源汽车和未来智能出行的前沿阵地~~ | ~~/v/car/smart~~ | + +## 生活 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|--------------|----------------|---------|-----------------------------------|----------------------------------------------------------------| +| 生活(主分区) | life | 160 | | [/v/life](https://www.bilibili.com/v/life) | +| 搞笑 | funny | 138 | 各种沙雕有趣的搞笑剪辑,挑战,表演,配音等视频 | [/v/life/funny](https://www.bilibili.com/v/life/funny) | +| 亲子 | parenting | 254 | 分享亲子、萌娃、母婴、育儿相关的视频 | [/v/life/parenting](https://www.bilibili.com/v/life/parenting) | +| 出行 | travel | 250 | 为达到观光游览、休闲娱乐为目的的远途旅行、中近途户外生活、本地探店 | [/v/life/travel](https://www.bilibili.com/v/life/travel) | +| 三农 | rurallife | 251 | 分享美好农村生活 | [/v/life/rurallife](https://www.bilibili.com/v/life/rurallife) | +| 家居房产 | home | 239 | 与买房、装修、居家生活相关的分享 | [/v/life/home](https://www.bilibili.com/v/life/home) | +| 手工 | handmake | 161 | 手工制品的制作过程或成品展示、教程、测评类视频 | [/v/life/handmake](https://www.bilibili.com/v/life/handmake) | +| 绘画 | painting | 162 | 绘画过程或绘画教程,以及绘画相关的所有视频 | [/v/life/painting](https://www.bilibili.com/v/life/painting) | +| 日常 | daily | 21 | 记录日常生活,分享生活故事 | [/v/life/daily](https://www.bilibili.com/v/life/daily) | +| ~~美食圈~~(重定向) | ~~food~~ | ~~76~~ | ~~美食鉴赏&料理制作教程~~ | ~~/v/life/food~~ | +| ~~动物圈~~(重定向) | ~~animal~~ | ~~75~~ | ~~萌萌的动物都在这里哦~~ | ~~/v/life/animal~~ | +| ~~运动~~(重定向) | ~~sports~~ | ~~163~~ | ~~运动相关的记录、教程、装备评测和精彩瞬间剪辑视频~~ | ~~/v/life/sports~~ | +| ~~汽车~~(重定向) | ~~automobile~~ | ~~176~~ | ~~专业汽车资讯,分享车生活~~ | ~~/v/life/automobile~~ | +| ~~其他~~(已下线) | ~~other~~ | ~~174~~ | ~~对于分区归属不明的视频进行归纳整合的特定分区~~ | ~~/v/life/other~~ | + +## 美食 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|------------------------|-------------|-----|------------------|--------------------------------------------------------------------| +| 美食(主分区) | food | 211 | | [/v/food](https://www.bilibili.com/v/food) | +| 美食制作(~~原[生活]->[美食圈]~~) | make | 76 | 学做人间美味,展示精湛厨艺 | [/v/food/make](https://www.bilibili.com/v/food/make) | +| 美食侦探 | detective | 212 | 寻找美味餐厅,发现街头美食 | [/v/food/detective](https://www.bilibili.com/v/food/detective) | +| 美食测评 | measurement | 213 | 吃货世界,品尝世间美味 | [/v/food/measurement](https://www.bilibili.com/v/food/measurement) | +| 田园美食 | rural | 214 | 品味乡野美食,寻找山与海的味道 | [/v/food/rural](https://www.bilibili.com/v/food/rural) | +| 美食记录 | record | 215 | 记录一日三餐,给生活添一点幸福感 | [/v/food/record](https://www.bilibili.com/v/food/record) | + +## 动物圈 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|----------|------------------|-----|-------------------------------------------|----------------------------------------------------------------------------------| +| 动物圈(主分区) | animal | 217 | | [/v/animal](https://www.bilibili.com/v/animal) | +| 喵星人 | cat | 218 | 喵喵喵喵喵 | [/v/animal/cat](https://www.bilibili.com/v/animal/cat) | +| 汪星人 | dog | 219 | 汪汪汪汪汪 | [/v/animal/dog](https://www.bilibili.com/v/animal/dog) | +| 小宠异宠 | reptiles | 222 | 奇妙宠物大赏 | [/v/animal/reptiles](https://www.bilibili.com/v/animal/reptiles) | +| 野生动物 | wild_animal | 221 | 内有“猛兽”出没 | [/v/animal/wild_animal](https://www.bilibili.com/v/animal/wild_animal) | +| 动物二创 | second_edition | 220 | 解说、配音、剪辑、混剪 | [/v/animal/second_edition](https://www.bilibili.com/v/animal/second_edition) | +| 动物综合 | animal_composite | 75 | 收录除上述子分区外,其余动物相关视频以及非动物主体或多个动物主体的动物相关延伸内容 | [/v/animal/animal_composite](https://www.bilibili.com/v/animal/animal_composite) | + +## 鬼畜 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|------------|-----------------|-----|-----------------------------------------|----------------------------------------------------------------------------------| +| 鬼畜(主分区) | kichiku | 119 | | [/v/kichiku](https://www.bilibili.com/v/kichiku) | +| 鬼畜调教 | guide | 22 | 使用素材在音频、画面上做一定处理,达到与BGM一定的同步感 | [/v/kichiku/guide](https://www.bilibili.com/v/kichiku/guide) | +| 音MAD | mad | 26 | 使用素材音频进行一定的二次创作来达到还原原曲的非商业性质稿件 | [/v/kichiku/mad/v/kichiku/mad](https://www.bilibili.com/v/kichiku/mad) | +| 人力VOCALOID | manual_vocaloid | 126 | 将人物或者角色的无伴奏素材进行人工调音,使其就像VOCALOID一样歌唱的技术 | [/v/kichiku/manual_vocaloid](https://www.bilibili.com/v/kichiku/manual_vocaloid) | +| 鬼畜剧场 | theatre | 216 | 使用素材进行人工剪辑编排的有剧情的作品 | [/v/kichiku/theatre](https://www.bilibili.com/v/kichiku/theatre) | +| 教程演示 | course | 127 | 鬼畜相关的教程演示 | [/v/kichiku/course](https://www.bilibili.com/v/kichiku/course) | + +## 时尚 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|--------------|--------------|---------|---------------------------------------------|--------------------------------------------------------------------| +| 时尚(主分区) | fashion | 155 | | [/v/fashion](https://www.bilibili.com/v/fashion) | +| 美妆护肤 | makeup | 157 | 彩妆护肤、美甲美发、仿妆、医美相关内容分享或产品测评 | [/v/fashion/makeup](https://www.bilibili.com/v/fashion/makeup) | +| 仿妆cos | cos | 252 | 对二次元、三次元人物角色进行模仿、还原、展示、演绎的内容 | [/v/fashion/cos](https://www.bilibili.com/v/fashion/cos) | +| 穿搭 | clothing | 158 | 穿搭风格、穿搭技巧的展示分享,涵盖衣服、鞋靴、箱包配件、配饰(帽子、钟表、珠宝首饰)等 | [/v/fashion/clothing](https://www.bilibili.com/v/fashion/clothing) | +| 时尚潮流 | catwalk | 159 | 时尚街拍、时装周、时尚大片,时尚品牌、潮流等行业相关记录及知识科普 | [/v/fashion/catwalk](https://www.bilibili.com/v/fashion/catwalk) | +| ~~健身~~(重定向) | ~~aerobics~~ | ~~164~~ | ~~器械、有氧、拉伸运动等,以达到强身健体、减肥瘦身、形体塑造目的~~ | ~~/v/fashion/aerobics~~ | +| ~~风尚标~~(已下线) | ~~trends~~ | ~~192~~ | ~~时尚明星专访、街拍、时尚购物相关知识科普~~ | ~~/v/fashion/trends~~ | + +## 资讯 + +**注:该分区无排名功能** + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------|-------------|-----|------------------------|----------------------------------------------------------------------------| +| 资讯(主分区) | information | 202 | | [/v/information](https://www.bilibili.com/v/information) | +| 热点 | hotspot | 203 | 全民关注的时政热门资讯 | [/v/information/hotspot](https://www.bilibili.com/v/information/hotspot) | +| 环球 | global | 204 | 全球范围内发生的具有重大影响力的事件动态 | [/v/information/global](https://www.bilibili.com/v/information/global) | +| 社会 | social | 205 | 日常生活的社会事件、社会问题、社会风貌的报道 | [/v/information/social](https://www.bilibili.com/v/information/social) | +| 综合 | multiple | 206 | 除上述领域外其它垂直领域的综合资讯 | [/v/information/multiple](https://www.bilibili.com/v/information/multiple) | + +## 广告 + + + +**该分区已下线** + +| 名称 | 代号 | tid | 简介 | url路由 | +|-------------|--------|---------|-----|--------------| +| ~~广告(主分区)~~ | ~~ad~~ | ~~165~~ | | ~~/v/ad~~ | +| ~~广告~~(已下线) | ~~ad~~ | ~~166~~ | | ~~/v/ad/ad~~ | + +## 娱乐 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|-----------------------|--------------------|---------|------------------------------------------|--------------------------------------------------------------------------------| +| 娱乐(主分区) | ent | 5 | | [/v/ent](https://www.bilibili.com/v/ent) | +| 娱乐杂谈 | talker | 241 | 娱乐人物解读、娱乐热点点评、娱乐行业分析 | [/v/ent/talker](https://www.bilibili.com/v/ent/talker) | +| CP安利 | cp_recommendation | 262 | 以安利各类娱乐名人、角色CP之间默契于火花为主题的混剪、解说,观点表达类视频 | [/v/ent/cp_recommendation](https://www.bilibili.com/v/ent/cp_recommendation) | +| 颜值安利 | beauty | 263 | 以各类娱乐名人、角色的颜值、气质魅力为核心的混剪视频 | [/v/ent/beauty](https://www.bilibili.com/v/ent/beauty) | +| 娱乐粉丝创作
(~~原粉丝创作~~) | fans | 242 | 粉丝向创作视频 | [/v/ent/fans](https://www.bilibili.com/v/ent/fans) | +| 娱乐资讯 | entertainment_news | 264 | 具备趣味价值的文化娱乐新闻与动态报道,如名人动态,作品发布,舞台演出,趣闻盘点等 | [/v/ent/entertainment_news](https://www.bilibili.com/v/ent/entertainment_news) | +| 明星综合 | celebrity | 137 | 娱乐圈动态、明星资讯相关 | [/v/ent/celebrity](https://www.bilibili.com/v/ent/celebrity) | +| 综艺 | variety | 71 | 所有综艺相关,全部一手掌握! | [/v/ent/variety](https://www.bilibili.com/v/ent/variety) | +| ~~Korea相关~~(已下线) | ~~korea~~ | ~~131~~ | ~~Korea相关音乐、舞蹈、综艺等视频~~ | ~~/v/ent/korea~~ | + +## 影视 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------|---------------|-----|-------------------------------|----------------------------------------------------------------------------------| +| 影视(主分区) | cinephile | 181 | | [/v/cinephile](https://www.bilibili.com/v/cinephile) | +| 影视杂谈 | cinecism | 182 | 影视评论、解说、吐槽、科普等 | [/v/cinephile/cinecism](https://www.bilibili.com/v/cinephile/cinecism) | +| 影视剪辑 | montage | 183 | 对影视素材进行剪辑再创作的视频 | [/v/cinephile/montage](https://www.bilibili.com/v/cinephile/montage) | +| 影视整活 | mashup | 260 | 使用影视素材制造的有趣、有梗的创意混剪、配音、特效玩梗视频 | [/v/cinephile/mashup](https://www.bilibili.com/v/cinephile/mashup) | +| AI影像 | ai_imaging | 259 | 分享AI制作的影像作品、创作历程、技术风向 | [/v/cinephile/ai_imaging](https://www.bilibili.com/v/cinephile/ai_imaging) | +| 预告·资讯 | trailer_info | 184 | 影视类相关资讯,预告,花絮等视频 | [/v/cinephile/trailer_info](https://www.bilibili.com/v/cinephile/trailer_info) | +| 小剧场 | shortplay | 85 | 有场景、有剧情的演绎类内容 | [/v/cinephile/shortplay](https://www.bilibili.com/v/cinephile/shortplay) | +| 短片 | shortfilm | 256 | 各种类型的短片 | [/v/cinephile/shortfilm](https://www.bilibili.com/v/cinephile/shortfilm) | +| 影视综合 | comprehensive | 261 | 一切无法被收纳其他影视二级分区的影视相关内容 | [/v/cinephile/comprehensive](https://www.bilibili.com/v/cinephile/comprehensive) | + +## 纪录片 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|----------|-------------|-----|----|----------------------------------------------------------------------------| +| 纪录片(主分区) | documentary | 177 | | [/documentary](https://www.bilibili.com/documentary) | +| 人文·历史 | history | 37 | | [/v/documentary/history](https://www.bilibili.com/v/documentary/history) | +| 科学·探索·自然 | science | 178 | | [/v/documentary/science](https://www.bilibili.com/v/documentary/science) | +| 军事 | military | 179 | | [/v/documentary/military](https://www.bilibili.com/v/documentary/military) | +| 社会·美食·旅行 | travel | 180 | | [/v/documentary/travel](https://www.bilibili.com/v/documentary/travel) | + +## 电影 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------|---------|-----|-----|--------------------------------------------------------------| +| 电影(主分区) | movie | 23 | | [/movie](https://www.bilibili.com/movie) | +| 华语电影 | chinese | 147 | | [/v/movie/chinese](https://www.bilibili.com/v/movie/chinese) | +| 欧美电影 | west | 145 | | [/v/movie/west](https://www.bilibili.com/v/movie/west) | +| 日本电影 | japan | 146 | | [/v/movie/japan](https://www.bilibili.com/v/movie/japan) | +| 其他国家 | movie | 83 | | [/v/movie/movie](https://www.bilibili.com/v/movie/movie) | + +## 电视剧 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|----------|----------|-----|-----|----------------------------------------------------------| +| 电视剧(主分区) | tv | 11 | | [/tv](https://www.bilibili.com/tv) | +| 国产剧 | mainland | 185 | | [/v/tv/mainland](https://www.bilibili.com/v/tv/mainland) | +| 海外剧 | overseas | 187 | | [/v/tv/overseas](https://www.bilibili.com/v/tv/overseas) | diff --git a/docs/video/video_zone_v2.md b/docs/video/video_zone_v2.md new file mode 100644 index 0000000..247c122 --- /dev/null +++ b/docs/video/video_zone_v2.md @@ -0,0 +1,458 @@ +# 视频分区一览 (v2) + +本文档中的内容适用于 `tid_v2`(部分接口写为 `tidv2`)、`tname_v2`(部分接口写为 `tnamev2`)等字段,关于 `tid`、`tname` 等字段请参阅 “[视频分区一览](./video_zone.md)” 文档 + +目前 B 站尚未启用子分区 + +## 动画 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ----------- | ---- | --------- | ---------------------------------------------- | +| 动画 (主分区) | douga | 1005 | 7 | [/c/douga/](https://www.bilibili.com/c/douga/) | +| 同人动画 | fan_anime | 2037 | | | +| 模玩周边 | garage_kit | 2038 | | | +| cosplay | cosplay | 2039 | | | +| 二次元线下 | offline | 2040 | | | +| 动漫剪辑 | editing | 2041 | | | +| 动漫评论 | commentary | 2042 | | | +| 动漫速读 | quick_view | 2043 | | | +| 动漫配音 | voice | 2044 | | | +| 动漫资讯 | information | 2045 | | | +| 网文解读 | interpret | 2046 | | | +| 虚拟up主 | vup | 2047 | | | +| 特摄 | tokusatsu | 2048 | | | +| 布袋戏 | puppetry | 2049 | | | +| 漫画·动态漫 | comic | 2050 | | | +| 广播剧 | motion | 2051 | | | +| 动漫reaction | reaction | 2052 | | | +| 动漫教学 | tutorial | 2053 | | | +| 二次元其他 | other | 2054 | | | + +## 游戏 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| -------------- | ----------- | ---- | --------- | -------------------------------------------- | +| 游戏 (主分区) | game | 1008 | 8 | [/c/game/](https://www.bilibili.com/c/game/) | +| 单人RPG游戏 | rpg | 2064 | | | +| MMORPG游戏 | mmorpg | 2065 | | | +| 单机主机类游戏 | stand_alone | 2066 | | | +| SLG游戏 | slg | 2067 | | | +| 回合制策略游戏 | tbs | 2068 | | | +| 即时策略游戏 | rts | 2069 | | | +| MOBA游戏 | moba | 2070 | | | +| 射击游戏 | stg | 2071 | | | +| 体育竞速游戏 | spg | 2072 | | | +| 动作竞技游戏 | act | 2073 | | | +| 音游舞游 | msc | 2074 | | | +| 模拟经营游戏 | sim | 2075 | | | +| 女性向游戏 | otome | 2076 | | | +| 休闲/小游戏 | puz | 2077 | | | +| 沙盒类 | sandbox | 2078 | | | +| 其他游戏 | other | 2079 | | | + +## 鬼畜 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | --------------- | ---- | --------- | -------------------------------------------------- | +| 鬼畜 (主分区) | kichiku | 1007 | 9 | [/c/kichiku/](https://www.bilibili.com/c/kichiku/) | +| 鬼畜调教 | guide | 2059 | | | +| 鬼畜剧场 | theatre | 2060 | | | +| 人力VOCALOID | manual_vocaloid | 2061 | | | +| 音MAD | mad | 2062 | | | +| 鬼畜综合 | other | 2063 | | | + +## 音乐 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ---------- | ---- | --------- | ---------------------------------------------- | +| 音乐 (主分区) | music | 1003 | 10 | [/c/music/](https://www.bilibili.com/c/music/) | +| 原创音乐 | original | 2016 | | | +| MV | mv | 2017 | | | +| 音乐现场 | live | 2018 | | | +| 乐迷饭拍 | fan_videos | 2019 | | | +| 翻唱 | cover | 2020 | | | +| 演奏 | perform | 2021 | | | +| VOCALOID | vocaloid | 2022 | | | +| AI音乐 | ai_music | 2023 | | | +| 电台·歌单 | radio | 2024 | | | +| 音乐教学 | tutorial | 2025 | | | +| 乐评盘点 | commentary | 2026 | | | +| 音乐综合 | other | 2027 | | | + +## 舞蹈 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | -------- | ---- | --------- | ---------------------------------------------- | +| 舞蹈 (主分区) | dance | 1004 | 11 | [/c/dance/](https://www.bilibili.com/c/dance/) | +| 宅舞 | otaku | 2028 | | | +| 街舞 | hiphop | 2029 | | | +| 颜值·网红舞 | gestures | 2030 | | | +| 明星舞蹈 | star | 2031 | | | +| 国风舞蹈 | china | 2032 | | | +| 舞蹈教学 | tutorial | 2033 | | | +| 芭蕾舞 | ballet | 2034 | | | +| wota艺 | wota | 2035 | | | +| 舞蹈综合 | other | 2036 | | | + +## 影视 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ----------- | ---- | --------- | ------------------------------------------------------ | +| 影视 (主分区) | cinephile | 1001 | 12 | [/c/cinephile/](https://www.bilibili.com/c/cinephile/) | +| 影视解读 | commentary | 2001 | | | +| 影视剪辑 | montage | 2002 | | | +| 影视资讯 | information | 2003 | | | +| 影视正片搬运 | porterage | 2004 | | | +| 短剧短片 | shortfilm | 2005 | | | +| AI影视 | ai | 2006 | | | +| 影视reaction | reaction | 2007 | | | +| 影视综合 | other | 2008 | | | + +## 娱乐 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ----------- | ---- | --------- | ------------------------------------------ | +| 娱乐 (主分区) | ent | 1002 | 13 | [/c/ent/](https://www.bilibili.com/c/ent/) | +| 娱乐评论 | commentary | 2009 | | | +| 明星剪辑 | montage | 2010 | | | +| 娱乐饭拍&现场 | fans_video | 2011 | | | +| 娱乐资讯 | information | 2012 | | | +| 娱乐reaction | reaction | 2013 | | | +| 娱乐综艺正片 | variety | 2014 | | | +| 娱乐综合 | other | 2015 | | | + +## 知识 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| -------------- | ------------------ | ---- | --------- | ------------------------------------------------------ | +| 知识 (主分区) | knowledge | 1010 | 14 | [/c/knowledge/](https://www.bilibili.com/c/knowledge/) | +| 应试教育 | exam | 2084 | | | +| 非应试语言学习 | lang_skill | 2085 | | | +| 大学专业知识 | campus | 2086 | | | +| 商业财经 | business | 2087 | | | +| 社会观察 | social_observation | 2088 | | | +| 时政解读 | politics | 2089 | | | +| 人文历史 | humanity_history | 2090 | | | +| 设计艺术 | design | 2091 | | | +| 心理杂谈 | psychology | 2092 | | | +| 职场发展 | career | 2093 | | | +| 科学科普 | science | 2094 | | | +| 其他知识杂谈 | other | 2095 | | | + +## 科技数码 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | ----------- | ---- | --------- | -------------------------------------------- | +| 科技数码 (主分区) | tech | 1012 | 15 | [/c/tech/](https://www.bilibili.com/c/tech/) | +| 电脑 | computer | 2099 | | | +| 手机 | phone | 2100 | | | +| 平板电脑 | pad | 2101 | | | +| 摄影摄像 | photography | 2102 | | | +| 工程机械 | machine | 2103 | | | +| 自制发明/设备 | create | 2104 | | | +| 科技数码综合 | other | 2105 | | | + +## 资讯 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ----------- | ---- | --------- | ---------------------------------------------------------- | +| 资讯 (主分区) | information | 1009 | 16 | [/c/information/](https://www.bilibili.com/c/information/) | +| 时政资讯 | politics | 2080 | | | +| 海外资讯 | overseas | 2081 | | | +| 社会资讯 | social | 2082 | | | +| 综合资讯 | other | 2083 | | | + +## 美食 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ---------- | ---- | --------- | -------------------------------------------- | +| 美食 (主分区) | food | 1020 | 17 | [/c/food/](https://www.bilibili.com/c/food/) | +| 美食制作 | make | 2149 | | | +| 美食探店 | detective | 2150 | | | +| 美食测评 | commentary | 2151 | | | +| 美食记录 | record | 2152 | | | +| 美食综合 | other | 2153 | | | + +## 小剧场 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| --------------- | ---------- | ---- | --------- | ------------------------------------------------------ | +| 小剧场 (主分区) | shortplay | 1021 | 18 | [/c/shortplay/](https://www.bilibili.com/c/shortplay/) | +| 剧情演绎 | plot | 2154 | | | +| 语言类小剧场 | lang | 2155 | | | +| UP主小综艺 | up_variety | 2156 | | | +| 街头采访 | interview | 2157 | | | + +## 汽车 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ---------- | ---- | --------- | ---------------------------------------- | +| 汽车 (主分区) | car | 1013 | 19 | [/c/car](https://www.bilibili.com/c/car) | +| 汽车测评 | commentary | 2106 | | | +| 汽车文化 | culture | 2107 | | | +| 汽车生活 | life | 2108 | | | +| 汽车技术 | tech | 2109 | | | +| 汽车综合 | other | 2110 | | | + +## 时尚美妆 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | ----------- | ---- | --------- | -------------------------------------------------- | +| 时尚美妆 (主分区) | fashion | 1014 | 20 | [/c/fashion/](https://www.bilibili.com/c/fashion/) | +| 美妆 | makeup | 2111 | | | +| 护肤 | skincare | 2112 | | | +| 仿装cos | cos | 2113 | | | +| 鞋服穿搭 | outfits | 2114 | | | +| 箱包配饰 | accessories | 2115 | | | +| 珠宝首饰 | jewelry | 2116 | | | +| 三坑 | trick | 2117 | | | +| 时尚解读 | commentary | 2118 | | | +| 时尚综合 | other | 2119 | | | + +## 体育运动 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | ----------- | ---- | --------- | ------------------------------------------------ | +| 体育运动 (主分区) | sports | 1018 | 21 | [/c/sports/](https://www.bilibili.com/c/sports/) | +| 潮流运动 | trend | 2133 | | | +| 足球 | football | 2134 | | | +| 篮球 | basketball | 2135 | | | +| 跑步 | running | 2136 | | | +| 武术 | kungfu | 2137 | | | +| 格斗 | fighting | 2138 | | | +| 羽毛球 | badminton | 2139 | | | +| 体育资讯 | information | 2140 | | | +| 体育赛事 | match | 2141 | | | +| 体育综合 | other | 2142 | | | + +## 动物 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| --------------------- | -------- | ---- | --------- | ------------------------------------------------ | +| 动物 (主分区) | animal | 1024 | 22 | [/c/animal/](https://www.bilibili.com/c/animal/) | +| 猫 | cat | 2167 | | | +| 狗 | dog | 2168 | | | +| 小宠异宠 | reptiles | 2169 | | | +| 野生动物·动物解说科普 | science | 2170 | | | +| 动物综合·二创 | other | 2171 | | | + +## vlog + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ------- | ---- | --------- | -------------------------------------------- | +| vlog (主分区) | vlog | 1029 | 23 | [/c/vlog/](https://www.bilibili.com/c/vlog/) | +| 中外生活vlog | life | 2194 | | | +| 学生vlog | student | 2195 | | | +| 职业vlog | career | 2196 | | | +| 其他vlog | other | 2197 | | | + +## 绘画 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | -------- | ---- | --------- | ---------------------------------------------------- | +| 绘画 (主分区) | painting | 1006 | 24 | [/c/painting/](https://www.bilibili.com/c/painting/) | +| 二次元绘画 | acg | 2055 | | | +| 非二次元绘画 | none_acg | 2056 | | | +| 绘画学习 | tutorial | 2057 | | | +| 绘画综合 | other | 2058 | | | + +## 人工智能 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | ----------- | ---- | --------- | ---------------------------------------- | +| 人工智能 (主分区) | ai | 1011 | 25 | [/c/ai/](https://www.bilibili.com/c/ai/) | +| AI学习 | tutorial | 2096 | | | +| AI资讯 | information | 2097 | | | +| AI杂谈 | other | 2098 | | | + +## 家装房产 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | ---------- | ---- | --------- | -------------------------------------------- | +| 家装房产 (主分区) | home | 1015 | 26 | [/c/home/](https://www.bilibili.com/c/home/) | +| 买房租房 | trade | 2120 | | | +| 家庭装修 | renovation | 2121 | | | +| 家居展示 | furniture | 2122 | | | +| 家用电器 | appliances | 2123 | | | + +## 户外潮流 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | -------- | ---- | --------- | ---------------------------------------------------- | +| 户外潮流 (主分区) | outdoors | 1016 | 27 | [/c/outdoors/](https://www.bilibili.com/c/outdoors/) | +| 露营 | camping | 2124 | | | +| 徒步 | hiking | 2125 | | | +| 户外探秘 | explore | 2126 | | | +| 户外综合 | other | 2127 | | | + +## 健身 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | -------- | ---- | --------- | ------------------------------------------ | +| 健身 (主分区) | gym | 1017 | 28 | [/c/gym/](https://www.bilibili.com/c/gym/) | +| 健身科普 | science | 2128 | | | +| 健身跟练教学 | tutorial | 2129 | | | +| 健身记录 | record | 2130 | | | +| 健身身材展示 | figure | 2131 | | | +| 健身综合 | other | 2132 | | | + +## 手工 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ----------- | ---- | --------- | ---------------------------------------------------- | +| 手工 (主分区) | handmake | 1019 | 29 | [/c/handmake/](https://www.bilibili.com/c/handmake/) | +| 文具手帐 | handbook | 2143 | | | +| 轻手作 | light | 2144 | | | +| 传统手工艺 | traditional | 2145 | | | +| 解压手工 | relief | 2146 | | | +| DIY玩具 | diy | 2147 | | | +| 其他手工 | other | 2148 | | | + +## 旅游出行 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | --------- | ---- | --------- | ------------------------------------------------ | +| 旅游出行 (主分区) | travel | 1022 | 30 | [/c/travel/](https://www.bilibili.com/c/travel/) | +| 旅游记录 | record | 2158 | | | +| 旅游攻略 | strategy | 2159 | | | +| 城市出行 | city | 2160 | | | +| 公共交通 | transport | 2161 | | | + +## 三农 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | -------- | ---- | --------- | ---------------------------------------------- | +| 三农 (主分区) | rural | 1023 | 31 | [/c/rural/](https://www.bilibili.com/c/rural/) | +| 农村种植 | planting | 2162 | | | +| 赶海捕鱼 | fishing | 2163 | | | +| 打野采摘 | harvest | 2164 | | | +| 农业技术 | tech | 2165 | | | +| 农村生活 | life | 2166 | | | + +## 亲子 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ------------- | ---- | --------- | ------------------------------------------------------ | +| 亲子 (主分区) | parenting | 1025 | 32 | [/c/parenting/](https://www.bilibili.com/c/parenting/) | +| 孕产护理 | pregnant_care | 2172 | | | +| 婴幼护理 | infant_care | 2173 | | | +| 儿童才艺 | talent | 2174 | | | +| 萌娃 | cute | 2175 | | | +| 亲子互动 | interaction | 2176 | | | +| 亲子教育 | education | 2177 | | | +| 亲子综合 | other | 2178 | | | + +## 健康 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ---------- | ---- | --------- | ------------------------------------------------ | +| 健康 (主分区) | health | 1026 | 33 | [/c/health/](https://www.bilibili.com/c/health/) | +| 健康科普 | science | 2179 | | | +| 养生 | regimen | 2180 | | | +| 两性知识 | sexes | 2181 | | | +| 心理健康 | psychology | 2182 | | | +| 助眠视频·ASMR | asmr | 2183 | | | +| 医疗保健综合 | other | 2184 | | | + +## 情感 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ------------- | ------------- | ---- | --------- | -------------------------------------------------- | +| 情感 (主分区) | emotion | 1027 | 34 | [/c/emotion/](https://www.bilibili.com/c/emotion/) | +| 家庭关系 | family | 2185 | | | +| 恋爱关系 | romantic | 2186 | | | +| 人际关系 | interpersonal | 2187 | | | +| 自我成长 | growth | 2188 | | | + +## 生活兴趣 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | ----------------- | ---- | --------- | ---------------------------------------------------- | +| 生活兴趣 (主分区) | life_joy | 1030 | 35 | [/c/life_joy/](https://www.bilibili.com/c/life_joy/) | +| 休闲玩乐 | leisure | 2198 | | | +| 线下演出 | on_site | 2199 | | | +| 文玩文创 | artistic_products | 2200 | | | +| 潮玩玩具 | trendy_toys | 2201 | | | +| 兴趣综合 | other | 2202 | | | + +## 生活经验 + + + +| 名称 | 代号 | tid | channelId | url 路由 | +| ----------------- | --------------- | ---- | --------- | ------------------------------------------------------------------ | +| 生活经验 (主分区) | life_experience | 1031 | 36 | [/c/life_experience/](https://www.bilibili.com/c/life_experience/) | +| 生活技能 | skills | 2203 | | | +| 办事流程 | procedures | 2204 | | | +| 婚嫁 | marriage | 2205 | | | + +## 神秘学 (未公开) + +该分区未出现在 B 站前端的界面中,也无图标 + +| 名称 | 代号 | tid | channelId | url 路由 | +| --------------- | ----------- | ---- | --------- | ------------------------------------------------------ | +| 神秘学 (主分区) | mysticism | 1028 | 44 | [/c/mysticism/](https://www.bilibili.com/c/mysticism/) | +| 塔罗占卜 | tarot | 2189 | | | +| 星座占星 | horoscope | 2190 | | | +| 传统玄学 | metaphysics | 2191 | | | +| 疗愈成长 | healing | 2192 | | | +| 其他神秘学 | other | 2193 | | | diff --git a/docs/video/videostream_url.md b/docs/video/videostream_url.md new file mode 100644 index 0000000..d808d71 --- /dev/null +++ b/docs/video/videostream_url.md @@ -0,0 +1,1951 @@ +# 视频流URL + + + +视频为 DASH 或 MP4 流媒体,需调用取流 API 传参视频 id 获取 + +## qn视频清晰度标识 + +注:该值在 DASH 格式下无效,因为 DASH 格式会取到所有分辨率的流地址 + +又注: B站对于新的视频更新了播放设置, 较高分辨率均采用 DASH, 较低分辨率与老视频还保留了 MP4, 这导致较新视频无法获取 MP4 格式的高分辨率视频, 参见 [#606](https://github.com/SocialSisterYi/bilibili-API-collect/issues/606) 或 [cv949156](https://www.bilibili.com/read/cv949156/) + +| 值 | 含义 | 备注 | +| ---- | -------------- | ------------------------------------------------------------ | +| 6 | 240P 极速 | 仅 MP4 格式支持
仅`platform=html5`时有效 | +| 16 | 360P 流畅 | | +| 32 | 480P 清晰 | | +| 64 | 720P 高清 | WEB 端默认值
~~B站前端需要登录才能选择,但是直接发送请求可以不登录就拿到 720P 的取流地址~~
**无 720P 时则为 720P60** | +| 74 | 720P60 高帧率 | 登录认证 | +| 80 | 1080P 高清 | TV 端与 APP 端默认值
登录认证 | +| 100 | 智能修复 | 人工智能增强画质
大会员认证 +| 112 | 1080P+ 高码率 | 大会员认证 | +| 116 | 1080P60 高帧率 | 大会员认证 | +| 120 | 4K 超清 | 需要`fnval&128=128`且`fourk=1`
大会员认证 | +| 125 | HDR 真彩色 | 仅支持 DASH 格式
需要`fnval&64=64`
大会员认证 | +| 126 | 杜比视界 | 仅支持 DASH 格式
需要`fnval&512=512`
大会员认证 | +| 127 | 8K 超高清 | 仅支持 DASH 格式
需要`fnval&1024=1024`
大会员认证 | +| 129 | HDR Vivid | 大会员认证 | + +例如:请求 1080P+ 的视频,则`qn=112` + +## fnver视频流版本标识 + +目前该值恒为 0,即`fnver=0` + +## fnval视频流格式标识 + +该代码为二进制属性位,如需组合功能需要使用`OR`运算结合一下数值 + +目前 FLV 格式已下线,应避免使用`fnval=0` + +| 值 | 含义 | 备注 | +| ---- | ------------------ | ------------------------------------------------------------ | +| ~~0~~ | ~~FLV 格式~~ | FLV 格式已下线
~~仅 H.264 编码
部分老视频存在分段现象
与 MP4、DASH 格式互斥~~ | +| 1 | MP4 格式 | 仅 H.264 编码
与 ~~FLV~~、DASH 格式互斥 | +| 16 | DASH 格式 | 与 MP4、~~FLV~~ 格式互斥 | +| 64 | 是否需求 HDR 视频 | 需求 DASH 格式
仅 H.265 编码
需要`qn=125`
大会员认证 | +| 128 | 是否需求 4K 分辨率 | 该值与`fourk`字段协同作用
需要`qn=120`
大会员认证 | +| 256 | 是否需求杜比音频 | 需求 DASH 格式
大会员认证 | +| 512 | 是否需求杜比视界 | 需求 DASH 格式
大会员认证 | +| 1024 | 是否需求 8K 分辨率 | 需求 DASH 格式
需要`qn=127`
大会员认证 | +| 2048 | 是否需求 AV1 编码 | 需求 DASH 格式 | +| 4048 | 所有可用 DASH 视频流 | 即一次性返回所有可用 DASH 格式视频流 | +| 16384 | 是否需要 HDR Vivid | 需要`qn=129`
大会员认证
仅 APP 接口可用 | + +例如:请求 DASH 格式,且需要 HDR 的视频流,则`fnval=16|64=80` + +## 视频编码代码 + +| 值 | 含义 | 备注 | +| ---- | ---------- | ---------------- | +| 7 | AVC 编码 | 8K 视频不支持该格式 | +| 12 | HEVC 编码 | | +| 13 | AV1 编码 | | + +## 视频伴音音质代码 + +| 值 | 含义 | +| ----- | ---- | +| 30216 | 64K | +| 30232 | 132K | +| 30280 | 192K | +| 30250 | 杜比全景声 | +| 30251 | Hi-Res无损 | + +## 获取视频流地址_web端 + +> https://api.bilibili.com/x/player/wbi/playurl + +> ~~https://api.bilibili.com/x/player/playurl~~ (旧链接) + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +鉴权方式:[Wbi 签名](../misc/sign/wbi.md) + +--- + +关于视频流会员鉴权: + +- 获取 720P 及以上清晰度视频时需要登录(Cookie) + +- 获取高帧率(1080P60)/ 高码率(1080P+)/ HDR / 杜比视界 视频时需要有大会员的账号登录(Cookie) + +- 获取会员专属视频时需要登录(Cookie) + +- 部分特殊视频(如平台宣传片、活动视频等)不需要大会员账号认证 + +--- + +获取 url 有效时间为 120min,超时失效需要重新获取 + +~~部分视频会有分段,需要特别注意~~(FLV 格式已下线,不可能出现分段 + +若视频有分P,仅为单P视频的 url,换P则需传参对应 CID 重新获取 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------------- | ------------ | ------------------------------------------------------------ | +| avid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 | +| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 | +| cid | num | 视频 cid | 必要 | | +| gaia_source | str | view-card
pre-load | 必要(非必要) | 有Cookie(SESSDATA)时无需此参数
暂未找到两个内容值区别 | +| isGaiaAvoided| bool| true/false| 非必要|未知作用 | +| qn | num | 视频清晰度选择 | 非必要 | 未登录默认 32(480P),登录后默认 64(720P)
含义见 [上表](#qn视频清晰度标识)
**DASH 格式时无效** | +| fnval | num | 视频流格式标识 | 非必要 | 默认值为`1`(MP4 格式)
含义见 [上表](#fnval视频流格式标识) | +| fnver | num | 0 | 非必要 | | +| fourk | num | 是否允许 4K 视频 | 非必要 | 画质最高 1080P:0(默认)
画质最高 4K:1 | +| session | str | | 非必要 | 从视频播放页的 HTML 中设置 window.\_\_playinfo\_\_ 处获取,或者通过 buvid3 + 当前UNIX毫秒级时间戳 经过md5获取 | +| otype | str | | 非必要 | 固定为`json` | +| type | str | | 非必要 | 目前为空 | +| platform | str | | 非必要 | pc:web播放(默认值,视频流存在 referer鉴权)
html5:移动端 HTML5 播放(仅支持 MP4 格式,无 referer 鉴权可以直接使用`video`标签播放) | +| high_quality | num | 是否高画质 | 非必要 | platform=html5时,此值为1可使画质为1080p | +| try_look | num | 未登录高画质 | 非必要 | 为 `1` 时可以不登录拉到 `64` 和 `80` 清晰度 | +| cur_language | str | 使用AI原声翻译 | 非必要 | 可以填写`en`、`ja`等参数。
不填写时,默认拉取原音频。填写后,音频链接替换为指定的AI语音 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ---------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:obj
无效时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ----- | ----------------------------------------------- | ----------------------------------------------- | +| v_voucher | str | (?) | 需要参数`gaia_source` | +| from | str | `local`? | | +| result | str | `suee`? | | +| message | str | 空? | | +| quality | num | 清晰度标识 | 含义见 [上表](#qn视频清晰度标识) | +| format | str | 视频格式 | `mp4`/`flv` | +| timelength | num | 视频长度 | 单位为毫秒
不同分辨率 / 格式可能有略微差异 | +| accept_format | str | 支持的全部格式 | 每项用`,`分隔 | +| accept_description | array | 支持的清晰度列表(文字说明) | | +| accept_quality | array | 支持的清晰度列表(代码) | 含义见 [上表](#qn视频清晰度标识) | +| video_codecid | num | 默认选择视频流的编码id | 含义见 [上表](#视频编码代码) | +| seek_param | str | `start`? | | +| seek_type | str | `offset`(DASH / FLV)?
`second`(MP4)? | | +| durl | array | 视频分段流信息 | **注:仅 FLV / MP4 格式存在此字段** | +| dash | obj | DASH 流信息 | **注:仅 DASH 格式存在此字段** | +| support_formats | array | 支持格式的详细信息 | | +| high_format | null | (?) | | +| last_play_time | num | 上次播放进度 | 毫秒值 | +| last_play_cid | num | 上次播放分P的 cid | | +| cur_language | str | 当前的AI原声翻译语言 | `en`、`ja`等,未使用AI原声翻译时,此项为空字符串 | +| language | obj | 视频的AI原声翻译信息 | 视频不支持时,不存在此字段 | + +`data`中的`accept_description`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | str | 分辨率名称1 | | +| n | str | 分辨率名称(n+1) | | +| …… | str | …… | | + +`data`中的`accept_quality`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | -------------------------------- | +| 0 | num | 分辨率代码1 | 含义见 [上表](#qn视频清晰度标识) | +| n | num | 分辨率代码(n+1) | | +| …… | num | …… | | + +`data`中的`support_formats`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 播放格式详细信息1 | | +| n | obj | 播放格式详细信息(n+1) | | +| …… | obj | …… | | + +`support_formats`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ------ | ------------ | ---------------------------------- | +| quality | num | 视频清晰度代码 | 含义见 [上表](#qn视频清晰度标识) | +| format | str | 视频格式 | | +| new_description | str | 格式描述 | | +| display_desc | str | 格式描述 | | +| superscript | str | (?) | | +| codecs | array | 可用编码格式列表 | | + +`support_formats`中的`codecs`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | str | 例:av01.0.13M.08.0.110.01.01.01.0 | 使用AV1编码 | +| 1 | str | 例子:avc1.640034 | 使用AVC编码 | +| 2 | str | 例子:hev1.1.6.L153.90 | 使用HEVC编码 | + +`data`中的`language`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ------- | -------------------------- | ---- | +| support | boolean | 视频是否支持AI原声? | | +| items | array | 支持的原声翻译列表 | | +| open_toast | str | 启用AI原声翻译时的提示? | | +| close_toast | str | 关闭AI原声翻译时的提示? | | +| default_title | str | (?) | | +| bubble | obj | (?) | | + +`language`中的`items`数组: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ---------------- | ---- | +| 0 | obj | AI原声信息1 | | +| n | obj | AI原声信息(n+1) | | +| ... | obj | ... | | + +`items`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------ | ------- | ------------------- | ----------------------- | +| lang | str | AI原声翻译的语言值 | 可用于cur_language参数 | +| title | str | 语言显示文本 | 如:`English` | +| subtitle_lang | str | (?) | | +| video_detext | boolean | (?) | | +| video_mouth_shape_change | boolean | (?) | | +| production_type | num | 产品类型? | | + +由于 MP4 / ~~FLV~~ 与 DASH 格式的返回结构不同,以下内容需要分类讨论`durl`与`dash`字段的内容 + + +--- + +### FLV/MP4格式 + +`data`中的`durl`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ------------------------- | +| 0 | obj | 视频分段 1 信息 | **目前由于 FLV 格式已经下线,不会存在分段现象,故无需关心** | +| n | obj | 视频分段 (n+1) 信息 | | +| …… | obj | …… | | + +`durl`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ------ | ------------ | ---------------------------------- | +| order | num | 视频分段序号 | 某些视频会分为多个片段(从1顺序增长) | +| length | num | 视频长度 | 单位为毫秒 | +| size | num | 视频大小 | 单位为 Byte | +| ahead | str | (?) | | +| vhead | str | (?) | | +| url | str | 默认流 URL | **注意 unicode 转义符**
有效时间为120min | +| backup_url | array | 备用视频流 | | + +`durl`数组中的对象中的`backup_url`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | --------------------------------------------- | +| 0 | str | 备用流 URL 1 | **注意 unicode 转义符**
有效时间为120min | +| n | str | 备用流 URL (n+1) | | +| …… | str | …… | | + +**示例:** + +**视频无分段时:** + +获取视频`av99999999`/`BV1y7411Q7Eq`中的 1P(cid=`171776208`)的视频流 URL,清晰度为 1080P+,使用 FLV 方式获取 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/player/playurl' \ + --data-urlencode 'avid=99999999' \ + --data-urlencode 'cid=171776208' \ + --data-urlencode 'qn=112' \ + --data-urlencode 'fnval=0' \ + --data-urlencode 'fnver=0' \ + --data-urlencode 'fourk=1' \ + -b 'SESSDATA=xxx' +``` + + bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/player/playurl' \ + --data-urlencode 'bvid=BV1y7411Q7Eq' \ + --data-urlencode 'cid=171776208' \ + --data-urlencode 'qn=112' \ + --data-urlencode 'fnval=0' \ + --data-urlencode 'fnver=0' \ + --data-urlencode 'fourk=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "from": "local", + "result": "suee", + "message": "", + "quality": 64, + "format": "flv720", + "timelength": 283801, + "accept_format": "hdflv2,flv,flv720,flv480,mp4", + "accept_description": [ + "高清 1080P+", + "高清 1080P", + "高清 720P", + "清晰 480P", + "流畅 360P" + ], + "accept_quality": [ + 112, + 80, + 64, + 32, + 16 + ], + "video_codecid": 7, + "seek_param": "start", + "seek_type": "offset", + "durl": [ + { + "order": 1, + "length": 283801, + "size": 70486426, + "ahead": "", + "vhead": "", + "url": "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=a4d5f1713e1ba313041d034a958c2414&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=249068&logo=80000000", + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=a4d5f1713e1ba313041d034a958c2414&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&agrr=1&bw=249068&logo=40000000", + "https://upos-sz-mirrorcosb.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=7b8a6924948864944815ec0748cc108f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&agrr=1&bw=249068&logo=40000000" + ] + } + ], + "support_formats": [ + { + "quality": 112, + "format": "hdflv2", + "new_description": "1080P 高码率", + "display_desc": "1080P", + "superscript": "高码率", + "codecs": null + }, + { + "quality": 80, + "format": "flv", + "new_description": "1080P 高清", + "display_desc": "1080P", + "superscript": "", + "codecs": null + }, + { + "quality": 64, + "format": "flv720", + "new_description": "720P 高清", + "display_desc": "720P", + "superscript": "", + "codecs": null + }, + { + "quality": 32, + "format": "flv480", + "new_description": "480P 清晰", + "display_desc": "480P", + "superscript": "", + "codecs": null + }, + { + "quality": 16, + "format": "mp4", + "new_description": "360P 流畅", + "display_desc": "360P", + "superscript": "", + "codecs": null + } + ], + "high_format": null, + "last_play_time": 0, + "last_play_cid": 0 + } +} +``` + +
+ +**视频有分段时:** + +以下内容无参考价值,仅做历史保存 + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "from": "local", + "result": "suee", + "message": "", + "quality": 16, + "format": "flv360", + "timelength": 1437918, + "accept_format": "flv,flv720,flv480,flv360", + "accept_description": [ + "高清 1080P", + "高清 720P", + "清晰 480P", + "流畅 360P" + ], + "accept_quality": [ + 80, + 64, + 32, + 16 + ], + "video_codecid": 7, + "seek_param": "start", + "seek_type": "offset", + "durl": [ + { + "order": 1, + "length": 364417, + "size": 23018310, + "ahead": "", + "vhead": "", + "url": "http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/98/24/872498/872498-1-15.flv?e=ig8euxZM2rNcNbRB7zUVhoM17WuBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=hwbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=f99db2dc9b8c65c245515b29b9ca8b16&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000", + "backup_url": [ + "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-1-15.flv?e=ig8euxZM2rNcNbRB7zUVhoM17WuBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=74d0d62697364346f88d9c39430ce23c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000" + ] + }, + { + "order": 2, + "length": 364395, + "size": 23694756, + "ahead": "", + "vhead": "", + "url": "http://upos-sz-mirrorcos.bilivideo.com/upgcxcode/98/24/872498/872498-2-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=cosbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=308c87c55f3325bdaac2a3e8632948ee&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000", + "backup_url": [ + "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-2-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=eb8f043e0f36f82ab9c62fd002143438&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000" + ] + }, + { + "order": 3, + "length": 352333, + "size": 22835734, + "ahead": "", + "vhead": "", + "url": "http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/98/24/872498/872498-3-15.flv?e=ig8euxZM2rNcNbRjhwdVhoM17bdVhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=hwbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=2685b7649f4bb6eb90f986f125432d78&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000", + "backup_url": [ + "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-3-15.flv?e=ig8euxZM2rNcNbRjhwdVhoM17bdVhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=922543bfb26184f901187bf9c39c69b2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000" + ] + }, + { + "order": 4, + "length": 356773, + "size": 23466279, + "ahead": "", + "vhead": "", + "url": "http://upos-sz-mirrorkodo.bilivideo.com/upgcxcode/98/24/872498/872498-4-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=kodobv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=9d29707faf012797ef2b6de21523fcf2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000", + "backup_url": [ + "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-4-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=9ad4524d31c8d9695ae07b400b73ed29&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000" + ] + } + ] + } +} +``` + +
+ +--- + +### DASH格式 + +`data`中的`dash`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | ---------- | ------------ | +| duration | num | 视频长度 | 秒值 | +| minBufferTime | num | 1.5? | | +| min_buffer_time | num | 1.5? | | +| video | array | 视频流信息 | | +| audio | array | 伴音流信息 | 当视频没有音轨时,此项为 null | +| dolby | obj | 杜比全景声伴音信息 | | +| flac | obj | 无损音轨伴音信息 | 当视频没有无损音轨时,此项为 null | + +`dash`中的`video`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------------- | ---- | +| 0 | obj | 视频码流 1 | 同一清晰度可拥有 H.264 / H.265 / AV1 多种码流
**HDR 仅支持 H.265** | +| n | obj | 视频码流(n+1) | | +| …… | obj | …… | | + +`dash`中的`audio`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 清晰度1 | | +| n | obj | 清晰度(n+1) | | +| …… | obj | …… | | + +`video`及`audio`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ----- | --------------------- | ----------------------------------------------- | +| id | num | 音视频清晰度代码 | 参考上表
[qn视频清晰度标识](#qn视频清晰度标识)
[视频伴音音质代码](#视频伴音音质代码) | +| baseUrl | str | 默认流 URL | **注意 unicode 转义符**
有效时间为 120min | +| base_url | str | **同上** | | +| backupUrl | array | 备用流 URL | | +| backup_url | array | **同上** | | +| bandwidth | num | 所需最低带宽 | 单位为 Byte | +| mimeType | str | 格式 mimetype 类型 | | +| mime_type | str | **同上** | | +| codecs | str | 编码/音频类型 | eg:`avc1.640032` | +| width | num | 视频宽度 | 单位为像素
**仅视频流存在该字段** | +| height | num | 视频高度 | 单位为像素
**仅视频流存在该字段** | +| frameRate | str | 视频帧率 | **仅视频流存在该字段** | +| frame_rate | str | **同上** | | +| sar | str | Sample Aspect Ratio(单个像素的宽高比) | 音频流该值恒为空 | +| startWithSap | num | Stream Access Point(流媒体访问位点) | 音频流该值恒为空 | +| start_with_sap | num | **同上** | | +| SegmentBase | obj | 见下表 | url 对应 m4s 文件中,头部的位置
音频流该值恒为空 | +| segment_base | obj | **同上** | | +| codecid | num | 码流编码标识代码 | 含义见 [上表](#视频编码代码)
音频流该值恒为`0` | + +`video`数组中的对象中的`backup_url`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | --------------------------------------------- | +| 0 | str | 备用流 URL 1 | **注意 unicode 转义符**
有效时间为120min | +| n | str | 备用流 URL (n+1) | | +| …… | str | …… | | + +`video`数组中的对象中的`SegmentBase`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | ---------------------------- | ------------------------------------------------------------ | +| initialization | str | `${init_first}-${init_last}` | eg:`0-821`
ftyp (file type) box 加上 moov box 在 m4s 文件中的范围(单位为 bytes)
如 0-821 表示开头 820 个字节 | +| index_range | str | `${sidx_first}-${sidx_last}` | eg:`822-1309`
sidx (segment index) box 在 m4s 文件中的范围(单位为 bytes)
sidx 的核心是一个数组,记录了各关键帧的时间戳及其在文件中的位置,
其作用是索引 (拖进度条) | + +> 常规 MP4 文件的索引信息放在 moov box 中,其中包含每一帧 (不止是关键帧) 的一些信息。在 DASH 方式下,关键帧信息移到了 sidx box 里,其他的则分散到了各个 moof (movie fragment) box 中。 + +对这里的文件结构感兴趣的,可以参考标准文档 [ISO/IEC 14496-12](https://www.iso.org/standard/83102.html),如果不想那么深入的话可以百度「[MP4 文件结构](https://baike.baidu.com/item/mp4/9218018)」 + +`dash`中的`dolby`对象: + +此项为”杜比视界“视频独有 + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | --------------------------------------------- | ------------------------------------------------------------ | +| type | num | 杜比音效类型 | 1:普通杜比音效
2:全景杜比音效 | +| audio | array | 杜比伴音流列表 | | + +`dolby`对象中的`audio`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------------ | ----------------------------------------------- | +| 0 | obj | 杜比伴音流信息 | 同上文 DASH 流中`video`及`audio`数组中的对象 | + +`dash`中的`flac`对象: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------------ | ----------------------------------------------- | +| display | bool | 是否在播放器显示切换Hi-Res无损音轨按钮 | | +| audio | obj | 音频流信息 | 同上文 DASH 流中`video`及`audio`数组中的对象 | + +**示例:** + +获取视频`av969628065`/`BV1rp4y1e745`中的 1P(cid=`244954665`)的视频流 URL,使用 DASH 方式获取 + +avid 方式: + +```shell +curl -G 'https://api.bilibili.com/x/player/playurl' \ + --data-urlencode 'avid=969628065' \ + --data-urlencode 'cid=244954665' \ + --data-urlencode 'fnval=4048' \ # 4048 为所有 dash 选项或运算的结果 + --data-urlencode 'fnver=0' \ + --data-urlencode 'fourk=1' \ + -b 'SESSDATA=xxx' +``` + + bvid 方式: + +```shell +curl -G 'https://api.bilibili.com/x/player/playurl' \ + --data-urlencode 'bvid=BV1rp4y1e745' \ + --data-urlencode 'cid=244954665' \ + --data-urlencode 'fnval=4048' \ + --data-urlencode 'fnver=0' \ + --data-urlencode 'fourk=1' \ + -b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "from": "local", + "result": "suee", + "message": "", + "quality": 64, + "format": "flv720", + "timelength": 346495, + "accept_format": "hdflv2,hdflv2,flv_p60,flv,flv720,flv480,mp4", + "accept_description": [ + "真彩 HDR", + "超清 4K", + "高清 1080P60", + "高清 1080P", + "高清 720P", + "清晰 480P", + "流畅 360P" + ], + "accept_quality": [ + 125, + 120, + 116, + 80, + 64, + 32, + 16 + ], + "video_codecid": 7, + "seek_param": "start", + "seek_type": "offset", + "dash": { + "duration": 347, + "minBufferTime": 1.5, + "min_buffer_time": 1.5, + "video": [ + { + "id": 80, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026oi=3028829496\u0026tag=\u0026nbs=1\u0026gen=playurlv3\u0026uipk=5\u0026os=mcdn\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026upsig=71821c3a1f0d596b8a0f79861695de67\u0026uparams=e,og,oi,tag,nbs,gen,uipk,os,platform,trid,mid,deadline\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026oi=3028829496\u0026tag=\u0026nbs=1\u0026gen=playurlv3\u0026uipk=5\u0026os=mcdn\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026upsig=71821c3a1f0d596b8a0f79861695de67\u0026uparams=e,og,oi,tag,nbs,gen,uipk,os,platform,trid,mid,deadline\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026uipk=5\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026upsig=585675af7dc762a4d21572f939196248\u0026uparams=e,platform,trid,oi,mid,uipk,gen,os,og,deadline,tag,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026gen=playurlv3\u0026platform=pc\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026os=08cbv\u0026og=hw\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026upsig=9fc6a3e3e0eaf3847c5c0f1c32047c09\u0026uparams=e,oi,nbs,uipk,gen,platform,mid,deadline,tag,os,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026uipk=5\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026upsig=585675af7dc762a4d21572f939196248\u0026uparams=e,platform,trid,oi,mid,uipk,gen,os,og,deadline,tag,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026gen=playurlv3\u0026platform=pc\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026os=08cbv\u0026og=hw\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026upsig=9fc6a3e3e0eaf3847c5c0f1c32047c09\u0026uparams=e,oi,nbs,uipk,gen,platform,mid,deadline,tag,os,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "bandwidth": 772828, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L150.90", + "width": 1920, + "height": 960, + "frameRate": "30.303", + "frame_rate": "30.303", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1159", + "indexRange": "1160-2019" + }, + "segment_base": { + "initialization": "0-1159", + "index_range": "1160-2019" + }, + "codecid": 12 + }, + { + "id": 80, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1745411269\u0026uipk=5\u0026og=cos\u0026gen=playurlv3\u0026os=mcdn\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026upsig=134e6b8516a05db7ef97a18b68b94cb5\u0026uparams=e,platform,deadline,uipk,og,gen,os,trid,oi,mid,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1745411269\u0026uipk=5\u0026og=cos\u0026gen=playurlv3\u0026os=mcdn\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026upsig=134e6b8516a05db7ef97a18b68b94cb5\u0026uparams=e,platform,deadline,uipk,og,gen,os,trid,oi,mid,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026deadline=1745411269\u0026uipk=5\u0026nbs=1\u0026mid=59442895\u0026tag=\u0026upsig=d3f4bbcd7c490effdfdf0b9f8375f9a2\u0026uparams=e,platform,trid,oi,gen,os,og,deadline,uipk,nbs,mid,tag\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026gen=playurlv3\u0026os=cosbv\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026og=cos\u0026oi=3028829496\u0026deadline=1745411269\u0026upsig=584b3a331daefde16b118f612d43c1c6\u0026uparams=e,platform,gen,os,mid,tag,nbs,uipk,trid,og,oi,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026deadline=1745411269\u0026uipk=5\u0026nbs=1\u0026mid=59442895\u0026tag=\u0026upsig=d3f4bbcd7c490effdfdf0b9f8375f9a2\u0026uparams=e,platform,trid,oi,gen,os,og,deadline,uipk,nbs,mid,tag\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026gen=playurlv3\u0026os=cosbv\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026og=cos\u0026oi=3028829496\u0026deadline=1745411269\u0026upsig=584b3a331daefde16b118f612d43c1c6\u0026uparams=e,platform,gen,os,mid,tag,nbs,uipk,trid,og,oi,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "bandwidth": 1916748, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640032", + "width": 1920, + "height": 960, + "frameRate": "29.412", + "frame_rate": "29.412", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-994", + "indexRange": "995-1854" + }, + "segment_base": { + "initialization": "0-994", + "index_range": "995-1854" + }, + "codecid": 7 + }, + { + "id": 64, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026gen=playurlv3\u0026os=mcdn\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026upsig=fcba1f000ead402f2ab2748df6e8d127\u0026uparams=e,deadline,gen,os,og,nbs,uipk,platform,trid,oi,mid,tag\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026gen=playurlv3\u0026os=mcdn\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026upsig=fcba1f000ead402f2ab2748df6e8d127\u0026uparams=e,deadline,gen,os,og,nbs,uipk,platform,trid,oi,mid,tag\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026gen=playurlv3\u0026deadline=1745411269\u0026tag=\u0026og=cos\u0026oi=3028829496\u0026os=cosbv\u0026upsig=9ab39b34d214780c30147af36a862d89\u0026uparams=e,nbs,uipk,platform,trid,mid,gen,deadline,tag,og,oi,os\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026tag=\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026upsig=bea70709fec064c8f384ee24eb5ccd1a\u0026uparams=e,oi,nbs,uipk,tag,gen,os,og,platform,trid,mid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026gen=playurlv3\u0026deadline=1745411269\u0026tag=\u0026og=cos\u0026oi=3028829496\u0026os=cosbv\u0026upsig=9ab39b34d214780c30147af36a862d89\u0026uparams=e,nbs,uipk,platform,trid,mid,gen,deadline,tag,og,oi,os\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026tag=\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026upsig=bea70709fec064c8f384ee24eb5ccd1a\u0026uparams=e,oi,nbs,uipk,tag,gen,os,og,platform,trid,mid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "bandwidth": 1236894, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 1280, + "height": 640, + "frameRate": "58.824", + "frame_rate": "58.824", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1060", + "indexRange": "1061-1920" + }, + "segment_base": { + "initialization": "0-1060", + "index_range": "1061-1920" + }, + "codecid": 12 + }, + { + "id": 64, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026nbs=1\u0026uipk=5\u0026os=mcdn\u0026og=hw\u0026upsig=0b3aae3388cb52b436e591615c048007\u0026uparams=e,oi,mid,deadline,tag,gen,platform,trid,nbs,uipk,os,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026nbs=1\u0026uipk=5\u0026os=mcdn\u0026og=hw\u0026upsig=0b3aae3388cb52b436e591615c048007\u0026uparams=e,oi,mid,deadline,tag,gen,platform,trid,nbs,uipk,os,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026gen=playurlv3\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=08cbv\u0026og=hw\u0026upsig=9dc7c021d5094eab92053fc58e84a48d\u0026uparams=e,mid,deadline,tag,nbs,gen,uipk,platform,trid,oi,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026og=hw\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026os=08cbv\u0026upsig=d2a75ae893a23a5d90630725d57efe72\u0026uparams=e,trid,mid,deadline,tag,og,oi,nbs,uipk,platform,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026gen=playurlv3\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=08cbv\u0026og=hw\u0026upsig=9dc7c021d5094eab92053fc58e84a48d\u0026uparams=e,mid,deadline,tag,nbs,gen,uipk,platform,trid,oi,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026og=hw\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026os=08cbv\u0026upsig=d2a75ae893a23a5d90630725d57efe72\u0026uparams=e,trid,mid,deadline,tag,og,oi,nbs,uipk,platform,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3" + ], + "bandwidth": 1222911, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640020", + "width": 1280, + "height": 640, + "frameRate": "62.500", + "frame_rate": "62.500", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-994", + "indexRange": "995-1854" + }, + "segment_base": { + "initialization": "0-994", + "index_range": "995-1854" + }, + "codecid": 7 + }, + { + "id": 32, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026uipk=5\u0026og=cos\u0026gen=playurlv3\u0026os=mcdn\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026upsig=68bd74999864b4a96ac0dbb730b53612\u0026uparams=e,oi,uipk,og,gen,os,platform,trid,mid,deadline,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026uipk=5\u0026og=cos\u0026gen=playurlv3\u0026os=mcdn\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026upsig=68bd74999864b4a96ac0dbb730b53612\u0026uparams=e,oi,uipk,og,gen,os,platform,trid,mid,deadline,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026os=cosbv\u0026og=cos\u0026oi=3028829496\u0026mid=59442895\u0026nbs=1\u0026upsig=25c03095d15e721ca7a7e80f9e831319\u0026uparams=e,deadline,tag,gen,uipk,platform,trid,os,og,oi,mid,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026os=cosbv\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026nbs=1\u0026platform=pc\u0026gen=playurlv3\u0026og=cos\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026upsig=c879e409a7bf7995c12ae5e22cb82b97\u0026uparams=e,uipk,os,trid,oi,nbs,platform,gen,og,mid,deadline,tag\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026os=cosbv\u0026og=cos\u0026oi=3028829496\u0026mid=59442895\u0026nbs=1\u0026upsig=25c03095d15e721ca7a7e80f9e831319\u0026uparams=e,deadline,tag,gen,uipk,platform,trid,os,og,oi,mid,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026os=cosbv\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026nbs=1\u0026platform=pc\u0026gen=playurlv3\u0026og=cos\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026upsig=c879e409a7bf7995c12ae5e22cb82b97\u0026uparams=e,uipk,os,trid,oi,nbs,platform,gen,og,mid,deadline,tag\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3" + ], + "bandwidth": 246476, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 854, + "height": 426, + "frameRate": "30.303", + "frame_rate": "30.303", + "sar": "426:427", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1163", + "indexRange": "1164-2023" + }, + "segment_base": { + "initialization": "0-1163", + "index_range": "1164-2023" + }, + "codecid": 12 + }, + { + "id": 32, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026os=mcdn\u0026og=cos\u0026tag=\u0026platform=pc\u0026oi=3028829496\u0026gen=playurlv3\u0026upsig=99b3ff6929d865dafbbdf21301c3889b\u0026uparams=e,deadline,nbs,uipk,trid,mid,os,og,tag,platform,oi,gen\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026os=mcdn\u0026og=cos\u0026tag=\u0026platform=pc\u0026oi=3028829496\u0026gen=playurlv3\u0026upsig=99b3ff6929d865dafbbdf21301c3889b\u0026uparams=e,deadline,nbs,uipk,trid,mid,os,og,tag,platform,oi,gen\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026deadline=1745411269\u0026gen=playurlv3\u0026nbs=1\u0026platform=pc\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026os=cosbv\u0026og=cos\u0026upsig=2e6bf8c0c1fc96618294d917f21192e7\u0026uparams=e,uipk,trid,deadline,gen,nbs,platform,oi,mid,tag,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026mid=59442895\u0026gen=playurlv3\u0026tag=\u0026nbs=1\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=cosbv\u0026og=cos\u0026deadline=1745411269\u0026uipk=5\u0026upsig=cc07c04afd6ac07b10f46241ef4c5fbc\u0026uparams=e,platform,mid,gen,tag,nbs,trid,oi,os,og,deadline,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026deadline=1745411269\u0026gen=playurlv3\u0026nbs=1\u0026platform=pc\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026os=cosbv\u0026og=cos\u0026upsig=2e6bf8c0c1fc96618294d917f21192e7\u0026uparams=e,uipk,trid,deadline,gen,nbs,platform,oi,mid,tag,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026mid=59442895\u0026gen=playurlv3\u0026tag=\u0026nbs=1\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=cosbv\u0026og=cos\u0026deadline=1745411269\u0026uipk=5\u0026upsig=cc07c04afd6ac07b10f46241ef4c5fbc\u0026uparams=e,platform,mid,gen,tag,nbs,trid,oi,os,og,deadline,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3" + ], + "bandwidth": 628803, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.64001F", + "width": 854, + "height": 426, + "frameRate": "29.412", + "frame_rate": "29.412", + "sar": "426:427", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-999", + "indexRange": "1000-1859" + }, + "segment_base": { + "initialization": "0-999", + "index_range": "1000-1859" + }, + "codecid": 7 + }, + { + "id": 16, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026gen=playurlv3\u0026os=mcdn\u0026tag=\u0026nbs=1\u0026upsig=cdb471486fa3908a2790ba9ef0fd0a44\u0026uparams=e,og,oi,deadline,uipk,platform,trid,mid,gen,os,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026gen=playurlv3\u0026os=mcdn\u0026tag=\u0026nbs=1\u0026upsig=cdb471486fa3908a2790ba9ef0fd0a44\u0026uparams=e,og,oi,deadline,uipk,platform,trid,mid,gen,os,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026tag=\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026oi=3028829496\u0026upsig=340b5f721a89f6dd90ae6153225cf808\u0026uparams=e,tag,trid,mid,deadline,nbs,uipk,platform,gen,os,og,oi\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026uipk=5\u0026os=08cbv\u0026platform=pc\u0026deadline=1745411269\u0026gen=playurlv3\u0026og=hw\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026upsig=e6c5646fd0e0d9cbb16296d2c8d8649f\u0026uparams=e,oi,mid,tag,nbs,uipk,os,platform,deadline,gen,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026tag=\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026oi=3028829496\u0026upsig=340b5f721a89f6dd90ae6153225cf808\u0026uparams=e,tag,trid,mid,deadline,nbs,uipk,platform,gen,os,og,oi\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026uipk=5\u0026os=08cbv\u0026platform=pc\u0026deadline=1745411269\u0026gen=playurlv3\u0026og=hw\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026upsig=e6c5646fd0e0d9cbb16296d2c8d8649f\u0026uparams=e,oi,mid,tag,nbs,uipk,os,platform,deadline,gen,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "bandwidth": 167889, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 640, + "height": 320, + "frameRate": "30.303", + "frame_rate": "30.303", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1157", + "indexRange": "1158-2017" + }, + "segment_base": { + "initialization": "0-1157", + "index_range": "1158-2017" + }, + "codecid": 12 + }, + { + "id": 16, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026os=mcdn\u0026og=hw\u0026tag=\u0026upsig=93d8e429ac6dcf654df688457f138820\u0026uparams=e,oi,mid,deadline,nbs,uipk,platform,gen,trid,os,og,tag\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026os=mcdn\u0026og=hw\u0026tag=\u0026upsig=93d8e429ac6dcf654df688457f138820\u0026uparams=e,oi,mid,deadline,nbs,uipk,platform,gen,trid,os,og,tag\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026tag=\u0026upsig=87f32943e6cfcb2957f0b90e9be210f3\u0026uparams=e,mid,deadline,nbs,gen,os,og,uipk,platform,trid,oi,tag\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026og=hw\u0026tag=\u0026nbs=1\u0026deadline=1745411269\u0026gen=playurlv3\u0026os=08cbv\u0026upsig=0de6ac37eecd7261cc83e9e55f438747\u0026uparams=e,uipk,platform,trid,oi,mid,og,tag,nbs,deadline,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026tag=\u0026upsig=87f32943e6cfcb2957f0b90e9be210f3\u0026uparams=e,mid,deadline,nbs,gen,os,og,uipk,platform,trid,oi,tag\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026og=hw\u0026tag=\u0026nbs=1\u0026deadline=1745411269\u0026gen=playurlv3\u0026os=08cbv\u0026upsig=0de6ac37eecd7261cc83e9e55f438747\u0026uparams=e,uipk,platform,trid,oi,mid,og,tag,nbs,deadline,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "bandwidth": 352627, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.64001E", + "width": 640, + "height": 320, + "frameRate": "29.412", + "frame_rate": "29.412", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1002", + "indexRange": "1003-1862" + }, + "segment_base": { + "initialization": "0-1002", + "index_range": "1003-1862" + }, + "codecid": 7 + } + ], + "audio": [ + { + "id": 30232, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=59442895\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026gen=playurlv3\u0026os=mcdn\u0026og=cos\u0026upsig=c9f074f7fc113d3d06b928f74a1427d4\u0026uparams=e,deadline,tag,nbs,uipk,platform,mid,trid,oi,gen,os,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=59442895\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026gen=playurlv3\u0026os=mcdn\u0026og=cos\u0026upsig=c9f074f7fc113d3d06b928f74a1427d4\u0026uparams=e,deadline,tag,nbs,uipk,platform,mid,trid,oi,gen,os,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026og=cos\u0026oi=3028829496\u0026mid=59442895\u0026nbs=1\u0026os=upos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026tag=\u0026upsig=d563b613434d1b8d4c2acc1717a82dfa\u0026uparams=e,deadline,uipk,platform,gen,og,oi,mid,nbs,os,trid,tag\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026gen=playurlv3\u0026tag=\u0026platform=pc\u0026os=upos\u0026og=cos\u0026upsig=0d401aeaea4a51b01605e5155ccf2e34\u0026uparams=e,nbs,uipk,trid,oi,mid,deadline,gen,tag,platform,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026og=cos\u0026oi=3028829496\u0026mid=59442895\u0026nbs=1\u0026os=upos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026tag=\u0026upsig=d563b613434d1b8d4c2acc1717a82dfa\u0026uparams=e,deadline,uipk,platform,gen,og,oi,mid,nbs,os,trid,tag\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026gen=playurlv3\u0026tag=\u0026platform=pc\u0026os=upos\u0026og=cos\u0026upsig=0d401aeaea4a51b01605e5155ccf2e34\u0026uparams=e,nbs,uipk,trid,oi,mid,deadline,gen,tag,platform,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=2,3" + ], + "bandwidth": 76436, + "mimeType": "audio/mp4", + "mime_type": "audio/mp4", + "codecs": "mp4a.40.2", + "width": 0, + "height": 0, + "frameRate": "", + "frame_rate": "", + "sar": "", + "startWithSap": 0, + "start_with_sap": 0, + "SegmentBase": { + "Initialization": "0-933", + "indexRange": "934-1805" + }, + "segment_base": { + "initialization": "0-933", + "index_range": "934-1805" + }, + "codecid": 0 + }, + { + "id": 30280, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026gen=playurlv3\u0026tag=\u0026os=mcdn\u0026og=cos\u0026deadline=1745411269\u0026upsig=3d3484b4a91783d0d7277e073d947fad\u0026uparams=e,nbs,uipk,platform,trid,oi,mid,gen,tag,os,og,deadline\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026gen=playurlv3\u0026tag=\u0026os=mcdn\u0026og=cos\u0026deadline=1745411269\u0026upsig=3d3484b4a91783d0d7277e073d947fad\u0026uparams=e,nbs,uipk,platform,trid,oi,mid,gen,tag,os,og,deadline\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026os=cosbv\u0026platform=pc\u0026mid=59442895\u0026nbs=1\u0026uipk=5\u0026upsig=f7cc870e2a4925c24e46ad9425cf39a8\u0026uparams=e,og,trid,oi,deadline,tag,gen,os,platform,mid,nbs,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026platform=pc\u0026gen=playurlv3\u0026os=cosbv\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026upsig=d380844ae7ac21f8484650ba59a15d97\u0026uparams=e,og,mid,tag,nbs,platform,gen,os,trid,oi,deadline,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026os=cosbv\u0026platform=pc\u0026mid=59442895\u0026nbs=1\u0026uipk=5\u0026upsig=f7cc870e2a4925c24e46ad9425cf39a8\u0026uparams=e,og,trid,oi,deadline,tag,gen,os,platform,mid,nbs,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026platform=pc\u0026gen=playurlv3\u0026os=cosbv\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026upsig=d380844ae7ac21f8484650ba59a15d97\u0026uparams=e,og,mid,tag,nbs,platform,gen,os,trid,oi,deadline,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=2,3" + ], + "bandwidth": 154889, + "mimeType": "audio/mp4", + "mime_type": "audio/mp4", + "codecs": "mp4a.40.2", + "width": 0, + "height": 0, + "frameRate": "", + "frame_rate": "", + "sar": "", + "startWithSap": 0, + "start_with_sap": 0, + "SegmentBase": { + "Initialization": "0-933", + "indexRange": "934-1805" + }, + "segment_base": { + "initialization": "0-933", + "index_range": "934-1805" + }, + "codecid": 0 + }, + { + "id": 30216, + "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=mcdn\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026uipk=5\u0026mid=59442895\u0026gen=playurlv3\u0026og=cos\u0026upsig=77babed89168a38118c16f99396e3fb6\u0026uparams=e,platform,trid,oi,os,deadline,tag,nbs,uipk,mid,gen,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=mcdn\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026uipk=5\u0026mid=59442895\u0026gen=playurlv3\u0026og=cos\u0026upsig=77babed89168a38118c16f99396e3fb6\u0026uparams=e,platform,trid,oi,os,deadline,tag,nbs,uipk,mid,gen,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026upsig=d76799fe0f76dea02c775c8667fc3f82\u0026uparams=e,gen,os,og,trid,mid,tag,nbs,oi,deadline,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=cosbv\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026gen=playurlv3\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026deadline=1745411269\u0026upsig=5cb2a5242aa474a5a0ba70e16b3d04f6\u0026uparams=e,os,nbs,uipk,platform,oi,mid,tag,gen,og,trid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026upsig=d76799fe0f76dea02c775c8667fc3f82\u0026uparams=e,gen,os,og,trid,mid,tag,nbs,oi,deadline,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=cosbv\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026gen=playurlv3\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026deadline=1745411269\u0026upsig=5cb2a5242aa474a5a0ba70e16b3d04f6\u0026uparams=e,os,nbs,uipk,platform,oi,mid,tag,gen,og,trid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3" + ], + "bandwidth": 31705, + "mimeType": "audio/mp4", + "mime_type": "audio/mp4", + "codecs": "mp4a.40.5", + "width": 0, + "height": 0, + "frameRate": "", + "frame_rate": "", + "sar": "", + "startWithSap": 0, + "start_with_sap": 0, + "SegmentBase": { + "Initialization": "0-943", + "indexRange": "944-1815" + }, + "segment_base": { + "initialization": "0-943", + "index_range": "944-1815" + }, + "codecid": 0 + } + ], + "dolby": { + "type": 0, + "audio": null + }, + "flac": null + }, + "support_formats": [ + { + "quality": 125, + "format": "hdflv2", + "new_description": "HDR 真彩", + "display_desc": "HDR", + "superscript": "", + "codecs": [ + "hev1.2.4.L156.90" + ] + }, + { + "quality": 120, + "format": "hdflv2", + "new_description": "4K 超清", + "display_desc": "4K", + "superscript": "", + "codecs": [ + "avc1.640034", + "hev1.1.6.L156.90" + ] + }, + { + "quality": 116, + "format": "flv_p60", + "new_description": "1080P 60帧", + "display_desc": "1080P", + "superscript": "60帧", + "codecs": [ + "avc1.640032", + "hev1.1.6.L150.90" + ] + }, + { + "quality": 80, + "format": "flv", + "new_description": "1080P 高清", + "display_desc": "1080P", + "superscript": "", + "codecs": [ + "avc1.640032", + "hev1.1.6.L150.90" + ] + }, + { + "quality": 64, + "format": "flv720", + "new_description": "720P 高清", + "display_desc": "720P", + "superscript": "", + "codecs": [ + "avc1.640020", + "hev1.1.6.L120.90" + ] + }, + { + "quality": 32, + "format": "flv480", + "new_description": "480P 清晰", + "display_desc": "480P", + "superscript": "", + "codecs": [ + "avc1.64001F", + "hev1.1.6.L120.90" + ] + }, + { + "quality": 16, + "format": "mp4", + "new_description": "360P 流畅", + "display_desc": "360P", + "superscript": "", + "codecs": [ + "avc1.64001E", + "hev1.1.6.L120.90" + ] + } + ], + "high_format": null, + "last_play_time": 0, + "last_play_cid": 0, + "view_info": null, + "play_conf": { + "is_new_description": false + }, + "cur_language": "" + } +} +``` + +
+ +获取视频`av115871406101538`/`BV1pR6UB3ENW`中的 1P(cid=`35306865840`)使用英文AI原声配音的视频流 URL,使用 DASH 方式获取 + +请求示例: + +```shell +curl -G 'https://api.bilibili.com/x/player/playurl' \ + --data-urlencode 'avid=115871406101538' \ + --data-urlencode 'bvid=BV1pR6UB3ENW' \ + --data-urlencode 'cid=35306865840' \ + --data-urlencode 'fnval=4048' \ + --data-urlencode 'fnver=0' \ + --data-urlencode 'fourk=1' \ + --data-urlencode 'cur_language=en' \ + -b 'SESSDATA=xxx' +``` + +
+查看相应示例: + +```json +{ + "code": 0, + "message": "OK", + "ttl": 1, + "data": { + "from": "local", + "result": "suee", + "message": "", + "quality": 64, + "format": "flv720", + "timelength": 173100, + "accept_format": "hdflv2,flv,flv720,flv480,mp4", + "accept_description": [ + "高清 1080P+", + "高清 1080P", + "高清 720P", + "清晰 480P", + "流畅 360P" + ], + "accept_quality": [ + 112, + 80, + 64, + 32, + 16 + ], + "video_codecid": 7, + "seek_param": "start", + "seek_type": "offset", + "dash": { + "duration": 174, + "minBufferTime": 1.5, + "min_buffer_time": 1.5, + "video": [ + { + "id": 112, + "baseUrl": "https://cn-hbyc-ct-01-01.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026og=hw\u0026nbs=1\u0026uipk=5\u0026mid=38331014\u0026os=bcache\u0026upsig=10c7088d7924086772708970dd475753\u0026uparams=e,platform,deadline,oi,trid,gen,og,nbs,uipk,mid,os\u0026cdnid=88801\u0026bvc=vod\u0026nettype=0\u0026bw=1974380\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "base_url": "https://cn-hbyc-ct-01-01.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026og=hw\u0026nbs=1\u0026uipk=5\u0026mid=38331014\u0026os=bcache\u0026upsig=10c7088d7924086772708970dd475753\u0026uparams=e,platform,deadline,oi,trid,gen,og,nbs,uipk,mid,os\u0026cdnid=88801\u0026bvc=vod\u0026nettype=0\u0026bw=1974380\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026mid=38331014\u0026oi=605423425\u0026gen=playurlv3\u0026os=cosbv\u0026og=hw\u0026upsig=e25487dea1f18e2176ffd47f78e21dcc\u0026uparams=e,uipk,platform,deadline,trid,nbs,mid,oi,gen,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=1974380\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026nbs=1\u0026platform=pc\u0026os=cosbv\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026upsig=35315a9f898f3fbdc8820e1b36c2d670\u0026uparams=e,og,nbs,platform,os,oi,trid,uipk,mid,deadline,gen\u0026bvc=vod\u0026nettype=0\u0026bw=1974380\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026mid=38331014\u0026oi=605423425\u0026gen=playurlv3\u0026os=cosbv\u0026og=hw\u0026upsig=e25487dea1f18e2176ffd47f78e21dcc\u0026uparams=e,uipk,platform,deadline,trid,nbs,mid,oi,gen,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=1974380\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026nbs=1\u0026platform=pc\u0026os=cosbv\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026upsig=35315a9f898f3fbdc8820e1b36c2d670\u0026uparams=e,og,nbs,platform,os,oi,trid,uipk,mid,deadline,gen\u0026bvc=vod\u0026nettype=0\u0026bw=1974380\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=2,3" + ], + "bandwidth": 1973175, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640033", + "width": 1920, + "height": 1080, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-947", + "indexRange": "948-1399" + }, + "segment_base": { + "initialization": "0-947", + "index_range": "948-1399" + }, + "codecid": 7 + }, + { + "id": 112, + "baseUrl": "https://xy60x163x166x213xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-30102.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=1249475\u0026cdnid=88802\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=cos\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=b18765\u0026traceid=trdtUXpzcYtlvQ_0_e_N\u0026uipk=5\u0026uparams=e%2Coi%2Ctrid%2Cuipk%2Cplatform%2Cmid%2Cos%2Cog%2Cnbs%2Cdeadline%2Cgen\u0026upsig=a936808f3c612338e01ea479490f27ef", + "base_url": "https://xy60x163x166x213xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-30102.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=1249475\u0026cdnid=88802\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=cos\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=b18765\u0026traceid=trdtUXpzcYtlvQ_0_e_N\u0026uipk=5\u0026uparams=e%2Coi%2Ctrid%2Cuipk%2Cplatform%2Cmid%2Cos%2Cog%2Cnbs%2Cdeadline%2Cgen\u0026upsig=a936808f3c612338e01ea479490f27ef", + "backupUrl": [ + "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30102.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026os=bcache\u0026og=cos\u0026nbs=1\u0026deadline=1768921888\u0026gen=playurlv3\u0026upsig=a936808f3c612338e01ea479490f27ef\u0026uparams=e,oi,trid,uipk,platform,mid,os,og,nbs,deadline,gen\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=1249475\u0026lrs=42\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=0,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30102.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026oi=605423425\u0026nbs=1\u0026gen=playurlv3\u0026trid=e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026os=cosbv\u0026upsig=4340534fb442c116e39cdd86f92e52b9\u0026uparams=e,og,oi,nbs,gen,trid,uipk,platform,mid,deadline,os\u0026bvc=vod\u0026nettype=0\u0026bw=1249475\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3" + ], + "backup_url": [ + "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30102.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026os=bcache\u0026og=cos\u0026nbs=1\u0026deadline=1768921888\u0026gen=playurlv3\u0026upsig=a936808f3c612338e01ea479490f27ef\u0026uparams=e,oi,trid,uipk,platform,mid,os,og,nbs,deadline,gen\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=1249475\u0026lrs=42\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=0,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30102.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026oi=605423425\u0026nbs=1\u0026gen=playurlv3\u0026trid=e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026os=cosbv\u0026upsig=4340534fb442c116e39cdd86f92e52b9\u0026uparams=e,og,oi,nbs,gen,trid,uipk,platform,mid,deadline,os\u0026bvc=vod\u0026nettype=0\u0026bw=1249475\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3" + ], + "bandwidth": 1248689, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L150.90", + "width": 1920, + "height": 1080, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1108", + "indexRange": "1109-1560" + }, + "segment_base": { + "initialization": "0-1108", + "index_range": "1109-1560" + }, + "codecid": 12 + }, + { + "id": 112, + "baseUrl": "https://xy60x163x162x27xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-100027.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=1018351\u0026cdnid=88801\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=ali\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=fcd44e\u0026traceid=trWWkCQiOPSqwK_0_e_N\u0026uipk=5\u0026uparams=e%2Cnbs%2Cuipk%2Ctrid%2Cos%2Cplatform%2Cmid%2Cdeadline%2Coi%2Cgen%2Cog\u0026upsig=b957000962f2d3f2e47fb8028ba32243", + "base_url": "https://xy60x163x162x27xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-100027.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=1018351\u0026cdnid=88801\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=ali\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=fcd44e\u0026traceid=trWWkCQiOPSqwK_0_e_N\u0026uipk=5\u0026uparams=e%2Cnbs%2Cuipk%2Ctrid%2Cos%2Cplatform%2Cmid%2Cdeadline%2Coi%2Cgen%2Cog\u0026upsig=b957000962f2d3f2e47fb8028ba32243", + "backupUrl": [ + "https://cn-hbyc-ct-01-01.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100027.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026os=bcache\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026oi=605423425\u0026gen=playurlv3\u0026og=ali\u0026upsig=b957000962f2d3f2e47fb8028ba32243\u0026uparams=e,nbs,uipk,trid,os,platform,mid,deadline,oi,gen,og\u0026cdnid=88801\u0026bvc=vod\u0026nettype=0\u0026bw=1018351\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100027.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=estgoss\u0026og=ali\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026mid=38331014\u0026gen=playurlv3\u0026oi=605423425\u0026uipk=5\u0026platform=pc\u0026upsig=b57ff8f1fa6786700e0b1dfbeea110f5\u0026uparams=e,os,og,deadline,trid,nbs,mid,gen,oi,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=1018351\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3" + ], + "backup_url": [ + "https://cn-hbyc-ct-01-01.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100027.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026os=bcache\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026oi=605423425\u0026gen=playurlv3\u0026og=ali\u0026upsig=b957000962f2d3f2e47fb8028ba32243\u0026uparams=e,nbs,uipk,trid,os,platform,mid,deadline,oi,gen,og\u0026cdnid=88801\u0026bvc=vod\u0026nettype=0\u0026bw=1018351\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100027.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=estgoss\u0026og=ali\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026mid=38331014\u0026gen=playurlv3\u0026oi=605423425\u0026uipk=5\u0026platform=pc\u0026upsig=b57ff8f1fa6786700e0b1dfbeea110f5\u0026uparams=e,os,og,deadline,trid,nbs,mid,gen,oi,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=1018351\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3" + ], + "bandwidth": 1017695, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "av01.0.00M.10.0.110.01.01.01.0", + "width": 1920, + "height": 1080, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1010", + "indexRange": "1011-1462" + }, + "segment_base": { + "initialization": "0-1010", + "index_range": "1011-1462" + }, + "codecid": 13 + }, + { + "id": 80, + "baseUrl": "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026nbs=1\u0026mid=38331014\u0026os=bcache\u0026og=hw\u0026uipk=5\u0026upsig=374297c208206f6a1fce3e540d87a385\u0026uparams=e,platform,deadline,oi,trid,gen,nbs,mid,os,og,uipk\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=1282889\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "base_url": "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026nbs=1\u0026mid=38331014\u0026os=bcache\u0026og=hw\u0026uipk=5\u0026upsig=374297c208206f6a1fce3e540d87a385\u0026uparams=e,platform,deadline,oi,trid,gen,nbs,mid,os,og,uipk\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=1282889\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorzos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026os=zosbv\u0026og=hw\u0026platform=pc\u0026mid=38331014\u0026oi=605423425\u0026nbs=1\u0026uipk=5\u0026upsig=c9ba6df1df78621fffba26716c5e87ff\u0026uparams=e,deadline,trid,gen,os,og,platform,mid,oi,nbs,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=1282889\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026orderid=1,3", + "https://upos-sz-mirrorzos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026gen=playurlv3\u0026os=zosbv\u0026mid=38331014\u0026deadline=1768921888\u0026nbs=1\u0026og=hw\u0026upsig=5390019aa2418cfc08085bc992b04b18\u0026uparams=e,platform,oi,trid,uipk,gen,os,mid,deadline,nbs,og\u0026bvc=vod\u0026nettype=0\u0026bw=1282889\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorzos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026os=zosbv\u0026og=hw\u0026platform=pc\u0026mid=38331014\u0026oi=605423425\u0026nbs=1\u0026uipk=5\u0026upsig=c9ba6df1df78621fffba26716c5e87ff\u0026uparams=e,deadline,trid,gen,os,og,platform,mid,oi,nbs,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=1282889\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026orderid=1,3", + "https://upos-sz-mirrorzos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026gen=playurlv3\u0026os=zosbv\u0026mid=38331014\u0026deadline=1768921888\u0026nbs=1\u0026og=hw\u0026upsig=5390019aa2418cfc08085bc992b04b18\u0026uparams=e,platform,oi,trid,uipk,gen,os,mid,deadline,nbs,og\u0026bvc=vod\u0026nettype=0\u0026bw=1282889\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=2,3" + ], + "bandwidth": 1282083, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640033", + "width": 1920, + "height": 1080, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-947", + "indexRange": "948-1399" + }, + "segment_base": { + "initialization": "0-947", + "index_range": "948-1399" + }, + "codecid": 7 + }, + { + "id": 80, + "baseUrl": "https://xy115x231x44x139xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-30077.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=647865\u0026cdnid=88801\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=hw\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=598634\u0026traceid=trVvyEMqEnCxMO_0_e_N\u0026uipk=5\u0026uparams=e%2Cnbs%2Coi%2Ctrid%2Cos%2Cuipk%2Cplatform%2Cmid%2Cdeadline%2Cgen%2Cog\u0026upsig=5edd114e5a0ae886fec8fa2e82a47e2e", + "base_url": "https://xy115x231x44x139xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-30077.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=647865\u0026cdnid=88801\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=hw\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=598634\u0026traceid=trVvyEMqEnCxMO_0_e_N\u0026uipk=5\u0026uparams=e%2Cnbs%2Coi%2Ctrid%2Cos%2Cuipk%2Cplatform%2Cmid%2Cdeadline%2Cgen%2Cog\u0026upsig=5edd114e5a0ae886fec8fa2e82a47e2e", + "backupUrl": [ + "https://cn-hbyc-ct-01-01.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026os=bcache\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=hw\u0026upsig=5edd114e5a0ae886fec8fa2e82a47e2e\u0026uparams=e,nbs,oi,trid,os,uipk,platform,mid,deadline,gen,og\u0026cdnid=88801\u0026bvc=vod\u0026nettype=0\u0026bw=647865\u0026lrs=42\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=0,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=08cbv\u0026og=hw\u0026nbs=1\u0026uipk=5\u0026oi=605423425\u0026gen=playurlv3\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=5b3e14c8e8c9775d77a9c4ed906af794\u0026uparams=e,os,og,nbs,uipk,oi,gen,platform,mid,deadline,trid\u0026bvc=vod\u0026nettype=0\u0026bw=647865\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=1,3" + ], + "backup_url": [ + "https://cn-hbyc-ct-01-01.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026os=bcache\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=hw\u0026upsig=5edd114e5a0ae886fec8fa2e82a47e2e\u0026uparams=e,nbs,oi,trid,os,uipk,platform,mid,deadline,gen,og\u0026cdnid=88801\u0026bvc=vod\u0026nettype=0\u0026bw=647865\u0026lrs=42\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=0,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=08cbv\u0026og=hw\u0026nbs=1\u0026uipk=5\u0026oi=605423425\u0026gen=playurlv3\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=5b3e14c8e8c9775d77a9c4ed906af794\u0026uparams=e,os,og,nbs,uipk,oi,gen,platform,mid,deadline,trid\u0026bvc=vod\u0026nettype=0\u0026bw=647865\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=1,3" + ], + "bandwidth": 647422, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L150.90", + "width": 1920, + "height": 1080, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1108", + "indexRange": "1109-1560" + }, + "segment_base": { + "initialization": "0-1108", + "index_range": "1109-1560" + }, + "codecid": 12 + }, + { + "id": 80, + "baseUrl": "https://xy60x163x166x209xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-100026.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=517936\u0026cdnid=88802\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=cos\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=f7d612\u0026traceid=trwIKbxttngxnj_0_e_N\u0026uipk=5\u0026uparams=e%2Cuipk%2Cmid%2Coi%2Cgen%2Cnbs%2Cplatform%2Cdeadline%2Ctrid%2Cos%2Cog\u0026upsig=803da73a35b39b2513c4ef8ed01fe686", + "base_url": "https://xy60x163x166x209xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-100026.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=517936\u0026cdnid=88802\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=cos\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=f7d612\u0026traceid=trwIKbxttngxnj_0_e_N\u0026uipk=5\u0026uparams=e%2Cuipk%2Cmid%2Coi%2Cgen%2Cnbs%2Cplatform%2Cdeadline%2Ctrid%2Cos%2Cog\u0026upsig=803da73a35b39b2513c4ef8ed01fe686", + "backupUrl": [ + "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026mid=38331014\u0026oi=605423425\u0026gen=playurlv3\u0026nbs=1\u0026platform=pc\u0026deadline=1768921888\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026os=bcache\u0026og=cos\u0026upsig=803da73a35b39b2513c4ef8ed01fe686\u0026uparams=e,uipk,mid,oi,gen,nbs,platform,deadline,trid,os,og\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=517936\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026mid=38331014\u0026oi=605423425\u0026os=cosbv\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=2ce2b39750969fc9e8f03691cd572c2e\u0026uparams=e,gen,mid,oi,os,og,nbs,uipk,platform,deadline,trid\u0026bvc=vod\u0026nettype=0\u0026bw=517936\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3" + ], + "backup_url": [ + "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026mid=38331014\u0026oi=605423425\u0026gen=playurlv3\u0026nbs=1\u0026platform=pc\u0026deadline=1768921888\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026os=bcache\u0026og=cos\u0026upsig=803da73a35b39b2513c4ef8ed01fe686\u0026uparams=e,uipk,mid,oi,gen,nbs,platform,deadline,trid,os,og\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=517936\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100026.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026mid=38331014\u0026oi=605423425\u0026os=cosbv\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=2ce2b39750969fc9e8f03691cd572c2e\u0026uparams=e,gen,mid,oi,os,og,nbs,uipk,platform,deadline,trid\u0026bvc=vod\u0026nettype=0\u0026bw=517936\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3" + ], + "bandwidth": 517569, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "av01.0.00M.10.0.110.01.01.01.0", + "width": 1920, + "height": 1080, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1010", + "indexRange": "1011-1462" + }, + "segment_base": { + "initialization": "0-1010", + "index_range": "1011-1462" + }, + "codecid": 13 + }, + { + "id": 64, + "baseUrl": "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30064.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026os=bcache\u0026deadline=1768921888\u0026upsig=43e5c50e0e538112a14dd05323ac50ee\u0026uparams=e,gen,og,nbs,uipk,platform,mid,oi,trid,os,deadline\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=518391\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "base_url": "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30064.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026oi=605423425\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026os=bcache\u0026deadline=1768921888\u0026upsig=43e5c50e0e538112a14dd05323ac50ee\u0026uparams=e,gen,og,nbs,uipk,platform,mid,oi,trid,os,deadline\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=518391\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30064.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026deadline=1768921888\u0026os=cosbv\u0026nbs=1\u0026platform=pc\u0026mid=38331014\u0026gen=playurlv3\u0026og=cos\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=3ca661cdda109d65c246178f8e20896e\u0026uparams=e,uipk,deadline,os,nbs,platform,mid,gen,og,oi,trid\u0026bvc=vod\u0026nettype=0\u0026bw=518391\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30064.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=cosbv\u0026oi=605423425\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=cos\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=2ba66dedf2e1dfcc33a1bdb97e0aa49b\u0026uparams=e,os,oi,nbs,uipk,platform,mid,deadline,gen,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=518391\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30064.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026deadline=1768921888\u0026os=cosbv\u0026nbs=1\u0026platform=pc\u0026mid=38331014\u0026gen=playurlv3\u0026og=cos\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=3ca661cdda109d65c246178f8e20896e\u0026uparams=e,uipk,deadline,os,nbs,platform,mid,gen,og,oi,trid\u0026bvc=vod\u0026nettype=0\u0026bw=518391\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30064.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=cosbv\u0026oi=605423425\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=cos\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=2ba66dedf2e1dfcc33a1bdb97e0aa49b\u0026uparams=e,os,oi,nbs,uipk,platform,mid,deadline,gen,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=518391\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=2,3" + ], + "bandwidth": 518027, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640033", + "width": 1280, + "height": 720, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-945", + "indexRange": "946-1397" + }, + "segment_base": { + "initialization": "0-945", + "index_range": "946-1397" + }, + "codecid": 7 + }, + { + "id": 64, + "baseUrl": "https://xy60x163x166x210xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-30066.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=298292\u0026cdnid=88802\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=hw\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=5f63a8\u0026traceid=trxmPMoVQLDXJM_0_e_N\u0026uipk=5\u0026uparams=e%2Cos%2Cnbs%2Cog%2Ctrid%2Cuipk%2Cplatform%2Cmid%2Cdeadline%2Coi%2Cgen\u0026upsig=4557aa74f373b297e0a6a04b5038ed0a", + "base_url": "https://xy60x163x166x210xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-30066.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=298292\u0026cdnid=88802\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=hw\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=5f63a8\u0026traceid=trxmPMoVQLDXJM_0_e_N\u0026uipk=5\u0026uparams=e%2Cos%2Cnbs%2Cog%2Ctrid%2Cuipk%2Cplatform%2Cmid%2Cdeadline%2Coi%2Cgen\u0026upsig=4557aa74f373b297e0a6a04b5038ed0a", + "backupUrl": [ + "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30066.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=bcache\u0026nbs=1\u0026og=hw\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026oi=605423425\u0026gen=playurlv3\u0026upsig=4557aa74f373b297e0a6a04b5038ed0a\u0026uparams=e,os,nbs,og,trid,uipk,platform,mid,deadline,oi,gen\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=298292\u0026lrs=42\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=0,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30066.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=hw\u0026nbs=1\u0026platform=pc\u0026mid=38331014\u0026os=08cbv\u0026oi=605423425\u0026upsig=eda15c18ff3427591234a8cfcf0a4a88\u0026uparams=e,trid,uipk,deadline,gen,og,nbs,platform,mid,os,oi\u0026bvc=vod\u0026nettype=0\u0026bw=298292\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3" + ], + "backup_url": [ + "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30066.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=bcache\u0026nbs=1\u0026og=hw\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026oi=605423425\u0026gen=playurlv3\u0026upsig=4557aa74f373b297e0a6a04b5038ed0a\u0026uparams=e,os,nbs,og,trid,uipk,platform,mid,deadline,oi,gen\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=298292\u0026lrs=42\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=0,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30066.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=e20dd754d5964994878fd44815ac690u\u0026uipk=5\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=hw\u0026nbs=1\u0026platform=pc\u0026mid=38331014\u0026os=08cbv\u0026oi=605423425\u0026upsig=eda15c18ff3427591234a8cfcf0a4a88\u0026uparams=e,trid,uipk,deadline,gen,og,nbs,platform,mid,os,oi\u0026bvc=vod\u0026nettype=0\u0026bw=298292\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=1,3" + ], + "bandwidth": 298050, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 1280, + "height": 720, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1107", + "indexRange": "1108-1559" + }, + "segment_base": { + "initialization": "0-1107", + "index_range": "1108-1559" + }, + "codecid": 12 + }, + { + "id": 64, + "baseUrl": "https://xy60x188x71x66xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-100024.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=251176\u0026cdnid=88805\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=ali\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=df86d8\u0026traceid=trJKelwVBuuosq_0_e_N\u0026uipk=5\u0026uparams=e%2Cplatform%2Cdeadline%2Ctrid%2Cgen%2Cnbs%2Cuipk%2Cmid%2Coi%2Cos%2Cog\u0026upsig=c62f2453cb175f09c7087b48492a0890", + "base_url": "https://xy60x188x71x66xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-100024.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=251176\u0026cdnid=88805\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=ali\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=df86d8\u0026traceid=trJKelwVBuuosq_0_e_N\u0026uipk=5\u0026uparams=e%2Cplatform%2Cdeadline%2Ctrid%2Cgen%2Cnbs%2Cuipk%2Cmid%2Coi%2Cos%2Cog\u0026upsig=c62f2453cb175f09c7087b48492a0890", + "backupUrl": [ + "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100024.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1768921888\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026nbs=1\u0026uipk=5\u0026mid=38331014\u0026oi=605423425\u0026os=bcache\u0026og=ali\u0026upsig=c62f2453cb175f09c7087b48492a0890\u0026uparams=e,platform,deadline,trid,gen,nbs,uipk,mid,oi,os,og\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=251176\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100024.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026og=ali\u0026mid=38331014\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026os=estgoss\u0026upsig=fcb46de4b4593935875c7abd5ccc37ac\u0026uparams=e,nbs,uipk,platform,deadline,og,mid,oi,trid,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=251176\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=1,3" + ], + "backup_url": [ + "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100024.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1768921888\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026nbs=1\u0026uipk=5\u0026mid=38331014\u0026oi=605423425\u0026os=bcache\u0026og=ali\u0026upsig=c62f2453cb175f09c7087b48492a0890\u0026uparams=e,platform,deadline,trid,gen,nbs,uipk,mid,oi,os,og\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=251176\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100024.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026og=ali\u0026mid=38331014\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026os=estgoss\u0026upsig=fcb46de4b4593935875c7abd5ccc37ac\u0026uparams=e,nbs,uipk,platform,deadline,og,mid,oi,trid,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=251176\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=1,3" + ], + "bandwidth": 250963, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "av01.0.00M.10.0.110.01.01.01.0", + "width": 1280, + "height": 720, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1010", + "indexRange": "1011-1462" + }, + "segment_base": { + "initialization": "0-1010", + "index_range": "1011-1462" + }, + "codecid": 13 + }, + { + "id": 32, + "baseUrl": "https://xy115x231x44x139xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-30032.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=262520\u0026cdnid=88805\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=cos\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=fd840d\u0026traceid=trxsurzRqeJgoi_0_e_N\u0026uipk=5\u0026uparams=e%2Ctrid%2Cgen%2Cog%2Cuipk%2Cmid%2Cdeadline%2Cos%2Cnbs%2Cplatform%2Coi\u0026upsig=de3812cc9f42e8cb4f652ae93ad03c7d", + "base_url": "https://xy115x231x44x139xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-30032.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=262520\u0026cdnid=88805\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=cos\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=fd840d\u0026traceid=trxsurzRqeJgoi_0_e_N\u0026uipk=5\u0026uparams=e%2Ctrid%2Cgen%2Cog%2Cuipk%2Cmid%2Cdeadline%2Cos%2Cnbs%2Cplatform%2Coi\u0026upsig=de3812cc9f42e8cb4f652ae93ad03c7d", + "backupUrl": [ + "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026og=cos\u0026uipk=5\u0026mid=38331014\u0026deadline=1768921888\u0026os=bcache\u0026nbs=1\u0026platform=pc\u0026oi=605423425\u0026upsig=de3812cc9f42e8cb4f652ae93ad03c7d\u0026uparams=e,trid,gen,og,uipk,mid,deadline,os,nbs,platform,oi\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=262520\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=estgoss\u0026uipk=5\u0026platform=pc\u0026og=cos\u0026upsig=38ca77338127572828ddb3aaf81c967c\u0026uparams=e,oi,trid,nbs,mid,deadline,gen,os,uipk,platform,og\u0026bvc=vod\u0026nettype=0\u0026bw=262520\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026orderid=1,3" + ], + "backup_url": [ + "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026og=cos\u0026uipk=5\u0026mid=38331014\u0026deadline=1768921888\u0026os=bcache\u0026nbs=1\u0026platform=pc\u0026oi=605423425\u0026upsig=de3812cc9f42e8cb4f652ae93ad03c7d\u0026uparams=e,trid,gen,og,uipk,mid,deadline,os,nbs,platform,oi\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=262520\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=estgoss\u0026uipk=5\u0026platform=pc\u0026og=cos\u0026upsig=38ca77338127572828ddb3aaf81c967c\u0026uparams=e,oi,trid,nbs,mid,deadline,gen,os,uipk,platform,og\u0026bvc=vod\u0026nettype=0\u0026bw=262520\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026orderid=1,3" + ], + "bandwidth": 262304, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640033", + "width": 852, + "height": 480, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "640:639", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-950", + "indexRange": "951-1402" + }, + "segment_base": { + "initialization": "0-950", + "index_range": "951-1402" + }, + "codecid": 7 + }, + { + "id": 32, + "baseUrl": "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=bcache\u0026oi=605423425\u0026mid=38331014\u0026og=ali\u0026upsig=13a4c3d43c0c34bf5105bab7d8f1e66c\u0026uparams=e,trid,nbs,uipk,platform,deadline,gen,os,oi,mid,og\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=177469\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "base_url": "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=bcache\u0026oi=605423425\u0026mid=38331014\u0026og=ali\u0026upsig=13a4c3d43c0c34bf5105bab7d8f1e66c\u0026uparams=e,trid,nbs,uipk,platform,deadline,gen,os,oi,mid,og\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=177469\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=estgoss\u0026og=ali\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026upsig=7ab9c18be58382ad92b015e60b1d81d1\u0026uparams=e,oi,trid,mid,deadline,gen,os,og,nbs,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=177469\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=1,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026gen=playurlv3\u0026oi=605423425\u0026mid=38331014\u0026os=estgoss\u0026og=ali\u0026upsig=a3db99b9a34d473e111d9462d705b848\u0026uparams=e,trid,nbs,uipk,platform,deadline,gen,oi,mid,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=177469\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=estgoss\u0026og=ali\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026upsig=7ab9c18be58382ad92b015e60b1d81d1\u0026uparams=e,oi,trid,mid,deadline,gen,os,og,nbs,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=177469\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=1,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026gen=playurlv3\u0026oi=605423425\u0026mid=38331014\u0026os=estgoss\u0026og=ali\u0026upsig=a3db99b9a34d473e111d9462d705b848\u0026uparams=e,trid,nbs,uipk,platform,deadline,gen,oi,mid,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=177469\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=2,3" + ], + "bandwidth": 177295, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 852, + "height": 480, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "640:639", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1112", + "indexRange": "1113-1564" + }, + "segment_base": { + "initialization": "0-1112", + "index_range": "1113-1564" + }, + "codecid": 12 + }, + { + "id": 32, + "baseUrl": "https://xy218x60x39x73xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-100023.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=150725\u0026cdnid=88801\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=ali\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=7bb757\u0026traceid=trnydvRtRCjubG_0_e_N\u0026uipk=5\u0026uparams=e%2Cos%2Cog%2Cnbs%2Cplatform%2Cmid%2Cdeadline%2Coi%2Cgen%2Cuipk%2Ctrid\u0026upsig=dd02a985b8ddc3b4a71cbb2587940f33", + "base_url": "https://xy218x60x39x73xy.mcdn.bilivideo.cn:8082/v1/resource/35306865840-1-100023.m4s?agrr=0\u0026build=0\u0026buvid=\u0026bvc=vod\u0026bw=150725\u0026cdnid=88801\u0026deadline=1768921888\u0026dl=0\u0026e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M%3D\u0026f=u_0_0\u0026gen=playurlv3\u0026lrs=42\u0026mid=38331014\u0026nbs=1\u0026nettype=0\u0026og=ali\u0026oi=605423425\u0026orderid=0%2C3\u0026os=bcache\u0026platform=pc\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026sign=7bb757\u0026traceid=trnydvRtRCjubG_0_e_N\u0026uipk=5\u0026uparams=e%2Cos%2Cog%2Cnbs%2Cplatform%2Cmid%2Cdeadline%2Coi%2Cgen%2Cuipk%2Ctrid\u0026upsig=dd02a985b8ddc3b4a71cbb2587940f33", + "backupUrl": [ + "https://cn-hbyc-ct-01-01.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100023.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=bcache\u0026og=ali\u0026nbs=1\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026oi=605423425\u0026gen=playurlv3\u0026uipk=5\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026upsig=dd02a985b8ddc3b4a71cbb2587940f33\u0026uparams=e,os,og,nbs,platform,mid,deadline,oi,gen,uipk,trid\u0026cdnid=88801\u0026bvc=vod\u0026nettype=0\u0026bw=150725\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100023.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026os=estgoss\u0026og=ali\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026upsig=b9bb2f0770330407ae725c1c340f1afc\u0026uparams=e,gen,os,og,oi,trid,nbs,uipk,platform,mid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=150725\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=1,3" + ], + "backup_url": [ + "https://cn-hbyc-ct-01-01.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100023.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=bcache\u0026og=ali\u0026nbs=1\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026oi=605423425\u0026gen=playurlv3\u0026uipk=5\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026upsig=dd02a985b8ddc3b4a71cbb2587940f33\u0026uparams=e,os,og,nbs,platform,mid,deadline,oi,gen,uipk,trid\u0026cdnid=88801\u0026bvc=vod\u0026nettype=0\u0026bw=150725\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100023.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026os=estgoss\u0026og=ali\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026upsig=b9bb2f0770330407ae725c1c340f1afc\u0026uparams=e,gen,os,og,oi,trid,nbs,uipk,platform,mid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=150725\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=1,3" + ], + "bandwidth": 150571, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "av01.0.00M.10.0.110.01.01.01.0", + "width": 852, + "height": 480, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "640:639", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1010", + "indexRange": "1011-1462" + }, + "segment_base": { + "initialization": "0-1010", + "index_range": "1011-1462" + }, + "codecid": 13 + }, + { + "id": 16, + "baseUrl": "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026og=hw\u0026nbs=1\u0026mid=38331014\u0026oi=605423425\u0026os=bcache\u0026upsig=fa94c40e060692230803ac1c6663332a\u0026uparams=e,uipk,platform,deadline,trid,gen,og,nbs,mid,oi,os\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=123644\u0026lrs=42\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=0,3", + "base_url": "https://cn-hbyc-ct-01-02.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026og=hw\u0026nbs=1\u0026mid=38331014\u0026oi=605423425\u0026os=bcache\u0026upsig=fa94c40e060692230803ac1c6663332a\u0026uparams=e,uipk,platform,deadline,trid,gen,og,nbs,mid,oi,os\u0026cdnid=88802\u0026bvc=vod\u0026nettype=0\u0026bw=123644\u0026lrs=42\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=08cbv\u0026og=hw\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026nbs=1\u0026uipk=5\u0026mid=38331014\u0026trid=e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026upsig=907903b6cf872d695824c7c90d5a8215\u0026uparams=e,os,og,platform,deadline,oi,nbs,uipk,mid,trid,gen\u0026bvc=vod\u0026nettype=0\u0026bw=123644\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026oi=605423425\u0026nbs=1\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=50d4bf9786979cdbed40d0f0a55bbe60\u0026uparams=e,uipk,oi,nbs,platform,mid,deadline,gen,os,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=123644\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=08cbv\u0026og=hw\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026nbs=1\u0026uipk=5\u0026mid=38331014\u0026trid=e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026upsig=907903b6cf872d695824c7c90d5a8215\u0026uparams=e,os,og,platform,deadline,oi,nbs,uipk,mid,trid,gen\u0026bvc=vod\u0026nettype=0\u0026bw=123644\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026orderid=1,3", + "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026oi=605423425\u0026nbs=1\u0026platform=pc\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026trid=e20dd754d5964994878fd44815ac690u\u0026upsig=50d4bf9786979cdbed40d0f0a55bbe60\u0026uparams=e,uipk,oi,nbs,platform,mid,deadline,gen,os,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=123644\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=2,3" + ], + "bandwidth": 123502, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 640, + "height": 360, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1108", + "indexRange": "1109-1560" + }, + "segment_base": { + "initialization": "0-1108", + "index_range": "1109-1560" + }, + "codecid": 12 + }, + { + "id": 16, + "baseUrl": "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026deadline=1768921888\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026platform=pc\u0026mid=38331014\u0026oi=605423425\u0026gen=playurlv3\u0026os=bcache\u0026og=cos\u0026upsig=97252202334105cf4efc0af956642565\u0026uparams=e,nbs,uipk,deadline,trid,platform,mid,oi,gen,os,og\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=170409\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "base_url": "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026deadline=1768921888\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026platform=pc\u0026mid=38331014\u0026oi=605423425\u0026gen=playurlv3\u0026os=bcache\u0026og=cos\u0026upsig=97252202334105cf4efc0af956642565\u0026uparams=e,nbs,uipk,deadline,trid,platform,mid,oi,gen,os,og\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=170409\u0026lrs=42\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=38331014\u0026os=cosbv\u0026nbs=1\u0026uipk=5\u0026deadline=1768921888\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026og=cos\u0026platform=pc\u0026upsig=6e6496389af268a0e3ef31c904316024\u0026uparams=e,mid,os,nbs,uipk,deadline,oi,trid,gen,og,platform\u0026bvc=vod\u0026nettype=0\u0026bw=170409\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=cosbv\u0026nbs=1\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026og=cos\u0026uipk=5\u0026platform=pc\u0026upsig=e7c6a3eb7904090ee54f538e8a5be530\u0026uparams=e,mid,deadline,gen,os,nbs,oi,trid,og,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=170409\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=38331014\u0026os=cosbv\u0026nbs=1\u0026uipk=5\u0026deadline=1768921888\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026og=cos\u0026platform=pc\u0026upsig=6e6496389af268a0e3ef31c904316024\u0026uparams=e,mid,os,nbs,uipk,deadline,oi,trid,gen,og,platform\u0026bvc=vod\u0026nettype=0\u0026bw=170409\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=38331014\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=cosbv\u0026nbs=1\u0026oi=605423425\u0026trid=e20dd754d5964994878fd44815ac690u\u0026og=cos\u0026uipk=5\u0026platform=pc\u0026upsig=e7c6a3eb7904090ee54f538e8a5be530\u0026uparams=e,mid,deadline,gen,os,nbs,oi,trid,og,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=170409\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026orderid=2,3" + ], + "bandwidth": 170245, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640033", + "width": 640, + "height": 360, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-954", + "indexRange": "955-1406" + }, + "segment_base": { + "initialization": "0-954", + "index_range": "955-1406" + }, + "codecid": 7 + }, + { + "id": 16, + "baseUrl": "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=38331014\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026os=bcache\u0026og=cos\u0026upsig=0b2259ac082418fa252561d2212a7a1f\u0026uparams=e,mid,trid,gen,nbs,uipk,platform,deadline,oi,os,og\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=105933\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "base_url": "https://cn-hbyc-ct-01-05.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=38331014\u0026trid=0000e20dd754d5964994878fd44815ac690u\u0026gen=playurlv3\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026os=bcache\u0026og=cos\u0026upsig=0b2259ac082418fa252561d2212a7a1f\u0026uparams=e,mid,trid,gen,nbs,uipk,platform,deadline,oi,os,og\u0026cdnid=88805\u0026bvc=vod\u0026nettype=0\u0026bw=105933\u0026lrs=42\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=cosbv\u0026og=cos\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026mid=38331014\u0026oi=605423425\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026gen=playurlv3\u0026upsig=b520fb3213cc68b776d6c80ad6c725ae\u0026uparams=e,os,og,trid,nbs,mid,oi,uipk,platform,deadline,gen\u0026bvc=vod\u0026nettype=0\u0026bw=105933\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=e20dd754d5964994878fd44815ac690u\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026mid=38331014\u0026upsig=45869a9e7b2887d4a2db7891498543ed\u0026uparams=e,trid,platform,deadline,oi,gen,os,og,nbs,uipk,mid\u0026bvc=vod\u0026nettype=0\u0026bw=105933\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=cosbv\u0026og=cos\u0026trid=e20dd754d5964994878fd44815ac690u\u0026nbs=1\u0026mid=38331014\u0026oi=605423425\u0026uipk=5\u0026platform=pc\u0026deadline=1768921888\u0026gen=playurlv3\u0026upsig=b520fb3213cc68b776d6c80ad6c725ae\u0026uparams=e,os,og,trid,nbs,mid,oi,uipk,platform,deadline,gen\u0026bvc=vod\u0026nettype=0\u0026bw=105933\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=1,3", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/40/58/35306865840/35306865840-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=e20dd754d5964994878fd44815ac690u\u0026platform=pc\u0026deadline=1768921888\u0026oi=605423425\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026mid=38331014\u0026upsig=45869a9e7b2887d4a2db7891498543ed\u0026uparams=e,trid,platform,deadline,oi,gen,os,og,nbs,uipk,mid\u0026bvc=vod\u0026nettype=0\u0026bw=105933\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026qn_dyeid=bd71451926ffa1a0002987df696f7f00\u0026agrr=0\u0026orderid=2,3" + ], + "bandwidth": 105804, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "av01.0.00M.10.0.110.01.01.01.0", + "width": 640, + "height": 360, + "frameRate": "30.000", + "frame_rate": "30.000", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1010", + "indexRange": "1011-1462" + }, + "segment_base": { + "initialization": "0-1010", + "index_range": "1011-1462" + }, + "codecid": 13 + } + ], + "audio": [ + { + "id": 30216, + "baseUrl": "https://upos-sz-mirrorzos.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026mid=38331014\u0026nbs=1\u0026deadline=1768921888\u0026os=zosbv\u0026og=hw\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026uipk=5\u0026oi=605423425\u0026gen=playurlv3\u0026upsig=61c3da9028e753debb845ff14bfdfc5a\u0026uparams=e,platform,mid,nbs,deadline,os,og,trid,uipk,oi,gen\u0026bvc=vod\u0026nettype=0\u0026bw=65723\u0026f=N_0_0\u0026dl=0\u0026iptv=\u0026agrr=0\u0026orderid=0,3", + "base_url": "https://upos-sz-mirrorzos.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026mid=38331014\u0026nbs=1\u0026deadline=1768921888\u0026os=zosbv\u0026og=hw\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026uipk=5\u0026oi=605423425\u0026gen=playurlv3\u0026upsig=61c3da9028e753debb845ff14bfdfc5a\u0026uparams=e,platform,mid,nbs,deadline,os,og,trid,uipk,oi,gen\u0026bvc=vod\u0026nettype=0\u0026bw=65723\u0026f=N_0_0\u0026dl=0\u0026iptv=\u0026agrr=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorzos.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026oi=605423425\u0026platform=pc\u0026nbs=1\u0026os=zosbv\u0026og=hw\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026uipk=5\u0026deadline=1768921888\u0026upsig=8ec954270bab827008a6567cfd4aa73a\u0026uparams=e,gen,oi,platform,nbs,os,og,trid,mid,uipk,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=65723\u0026dl=0\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026orderid=1,3", + "https://upos-sz-mirror14b.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=14bbv\u0026oi=605423425\u0026platform=pc\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026uipk=5\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=hw\u0026mid=38331014\u0026nbs=1\u0026upsig=c79070c6fa0d721fc75836ec64a18995\u0026uparams=e,os,oi,platform,trid,uipk,deadline,gen,og,mid,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=65723\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026iptv=\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorzos.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026oi=605423425\u0026platform=pc\u0026nbs=1\u0026os=zosbv\u0026og=hw\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026uipk=5\u0026deadline=1768921888\u0026upsig=8ec954270bab827008a6567cfd4aa73a\u0026uparams=e,gen,oi,platform,nbs,os,og,trid,mid,uipk,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=65723\u0026dl=0\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026orderid=1,3", + "https://upos-sz-mirror14b.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=14bbv\u0026oi=605423425\u0026platform=pc\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026uipk=5\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=hw\u0026mid=38331014\u0026nbs=1\u0026upsig=c79070c6fa0d721fc75836ec64a18995\u0026uparams=e,os,oi,platform,trid,uipk,deadline,gen,og,mid,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=65723\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026iptv=\u0026orderid=2,3" + ], + "bandwidth": 65625, + "mimeType": "audio/mp4", + "mime_type": "audio/mp4", + "codecs": "mp4a.40.2", + "width": 0, + "height": 0, + "frameRate": "", + "frame_rate": "", + "sar": "", + "startWithSap": 0, + "start_with_sap": 0, + "SegmentBase": { + "Initialization": "0-821", + "indexRange": "822-1273" + }, + "segment_base": { + "initialization": "0-821", + "index_range": "822-1273" + }, + "codecid": 0 + }, + { + "id": 30232, + "baseUrl": "https://upos-sz-estghw.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026deadline=1768921888\u0026oi=605423425\u0026platform=pc\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026gen=playurlv3\u0026os=estghw\u0026uipk=5\u0026og=hw\u0026upsig=211824fb8890123667f7aa37e286efea\u0026uparams=e,nbs,deadline,oi,platform,trid,mid,gen,os,uipk,og\u0026bvc=vod\u0026nettype=0\u0026bw=84945\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026orderid=0,3", + "base_url": "https://upos-sz-estghw.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026deadline=1768921888\u0026oi=605423425\u0026platform=pc\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026gen=playurlv3\u0026os=estghw\u0026uipk=5\u0026og=hw\u0026upsig=211824fb8890123667f7aa37e286efea\u0026uparams=e,nbs,deadline,oi,platform,trid,mid,gen,os,uipk,og\u0026bvc=vod\u0026nettype=0\u0026bw=84945\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirror08c.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=08cbv\u0026nbs=1\u0026gen=playurlv3\u0026og=hw\u0026oi=605423425\u0026platform=pc\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026uipk=5\u0026deadline=1768921888\u0026upsig=647abf350d884239d06e172a7125667d\u0026uparams=e,os,nbs,gen,og,oi,platform,trid,mid,uipk,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=84945\u0026f=N_0_0\u0026dl=0\u0026iptv=\u0026agrr=0\u0026orderid=1,3", + "https://upos-sz-mirrorhwb.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026nbs=1\u0026uipk=5\u0026og=hw\u0026oi=605423425\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=hwbbv\u0026upsig=b34a257648941adb939b72f9e4d62eaf\u0026uparams=e,platform,trid,mid,nbs,uipk,og,oi,deadline,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=84945\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirror08c.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=08cbv\u0026nbs=1\u0026gen=playurlv3\u0026og=hw\u0026oi=605423425\u0026platform=pc\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026uipk=5\u0026deadline=1768921888\u0026upsig=647abf350d884239d06e172a7125667d\u0026uparams=e,os,nbs,gen,og,oi,platform,trid,mid,uipk,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=84945\u0026f=N_0_0\u0026dl=0\u0026iptv=\u0026agrr=0\u0026orderid=1,3", + "https://upos-sz-mirrorhwb.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026nbs=1\u0026uipk=5\u0026og=hw\u0026oi=605423425\u0026deadline=1768921888\u0026gen=playurlv3\u0026os=hwbbv\u0026upsig=b34a257648941adb939b72f9e4d62eaf\u0026uparams=e,platform,trid,mid,nbs,uipk,og,oi,deadline,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=84945\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026orderid=2,3" + ], + "bandwidth": 84835, + "mimeType": "audio/mp4", + "mime_type": "audio/mp4", + "codecs": "mp4a.40.2", + "width": 0, + "height": 0, + "frameRate": "", + "frame_rate": "", + "sar": "", + "startWithSap": 0, + "start_with_sap": 0, + "SegmentBase": { + "Initialization": "0-821", + "indexRange": "822-1273" + }, + "segment_base": { + "initialization": "0-821", + "index_range": "822-1273" + }, + "codecid": 0 + }, + { + "id": 30280, + "baseUrl": "https://upos-sz-estgcos.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026uipk=5\u0026os=estgcos\u0026platform=pc\u0026mid=38331014\u0026nbs=1\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=cos\u0026oi=605423425\u0026upsig=cc453cbbfbd3ac754f34bca5ee177365\u0026uparams=e,trid,uipk,os,platform,mid,nbs,deadline,gen,og,oi\u0026bvc=vod\u0026nettype=0\u0026bw=137816\u0026dl=0\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026orderid=0,3", + "base_url": "https://upos-sz-estgcos.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026uipk=5\u0026os=estgcos\u0026platform=pc\u0026mid=38331014\u0026nbs=1\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=cos\u0026oi=605423425\u0026upsig=cc453cbbfbd3ac754f34bca5ee177365\u0026uparams=e,trid,uipk,os,platform,mid,nbs,deadline,gen,og,oi\u0026bvc=vod\u0026nettype=0\u0026bw=137816\u0026dl=0\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026orderid=0,3", + "backupUrl": [ + "https://upos-sz-mirrorcos.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=cos\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026os=cosbv\u0026oi=605423425\u0026platform=pc\u0026upsig=29dedc9eeb4ce9ac312e522b938191db\u0026uparams=e,nbs,uipk,deadline,gen,og,trid,mid,os,oi,platform\u0026bvc=vod\u0026nettype=0\u0026bw=137816\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcosb.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=38331014\u0026gen=playurlv3\u0026os=cosbbv\u0026nbs=1\u0026uipk=5\u0026deadline=1768921888\u0026oi=605423425\u0026platform=pc\u0026og=cos\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026upsig=18818c6927fdab510b78de98435c4718\u0026uparams=e,mid,gen,os,nbs,uipk,deadline,oi,platform,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=137816\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026orderid=2,3" + ], + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026deadline=1768921888\u0026gen=playurlv3\u0026og=cos\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026mid=38331014\u0026os=cosbv\u0026oi=605423425\u0026platform=pc\u0026upsig=29dedc9eeb4ce9ac312e522b938191db\u0026uparams=e,nbs,uipk,deadline,gen,og,trid,mid,os,oi,platform\u0026bvc=vod\u0026nettype=0\u0026bw=137816\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026orderid=1,3", + "https://upos-sz-mirrorcosb.bilivideo.com/neoxcode/bb/9w/_000031h2ibmcia0ym2o1hkbfu8e9wbb-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=38331014\u0026gen=playurlv3\u0026os=cosbbv\u0026nbs=1\u0026uipk=5\u0026deadline=1768921888\u0026oi=605423425\u0026platform=pc\u0026og=cos\u0026trid=9543b281ee9c4f23b7eb20e6520c75bN\u0026upsig=18818c6927fdab510b78de98435c4718\u0026uparams=e,mid,gen,os,nbs,uipk,deadline,oi,platform,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=137816\u0026iptv=\u0026agrr=0\u0026f=N_0_0\u0026dl=0\u0026orderid=2,3" + ], + "bandwidth": 137674, + "mimeType": "audio/mp4", + "mime_type": "audio/mp4", + "codecs": "mp4a.40.2", + "width": 0, + "height": 0, + "frameRate": "", + "frame_rate": "", + "sar": "", + "startWithSap": 0, + "start_with_sap": 0, + "SegmentBase": { + "Initialization": "0-821", + "indexRange": "822-1273" + }, + "segment_base": { + "initialization": "0-821", + "index_range": "822-1273" + }, + "codecid": 0 + } + ], + "dolby": { + "type": 0, + "audio": null + }, + "flac": null + }, + "support_formats": [ + { + "quality": 112, + "format": "hdflv2", + "new_description": "1080P 高码率", + "display_desc": "1080P", + "superscript": "高码率", + "codecs": [ + "av01.0.00M.10.0.110.01.01.01.0", + "avc1.640033", + "hev1.1.6.L150.90" + ], + "can_watch_qn_reason": 3, + "limit_watch_reason": 0, + "report": { + "EXT_VIP_REPORT_PARAMS": "" + } + }, + { + "quality": 80, + "format": "flv", + "new_description": "1080P 高清", + "display_desc": "1080P", + "superscript": "", + "codecs": [ + "av01.0.00M.10.0.110.01.01.01.0", + "avc1.640033", + "hev1.1.6.L150.90" + ], + "can_watch_qn_reason": 0, + "limit_watch_reason": 0, + "report": {} + }, + { + "quality": 64, + "format": "flv720", + "new_description": "720P 准高清", + "display_desc": "720P", + "superscript": "", + "codecs": [ + "av01.0.00M.10.0.110.01.01.01.0", + "avc1.640033", + "hev1.1.6.L120.90" + ], + "can_watch_qn_reason": 0, + "limit_watch_reason": 0, + "report": {} + }, + { + "quality": 32, + "format": "flv480", + "new_description": "480P 标清", + "display_desc": "480P", + "superscript": "", + "codecs": [ + "av01.0.00M.10.0.110.01.01.01.0", + "avc1.640033", + "hev1.1.6.L120.90" + ], + "can_watch_qn_reason": 0, + "limit_watch_reason": 0, + "report": {} + }, + { + "quality": 16, + "format": "mp4", + "new_description": "360P 流畅", + "display_desc": "360P", + "superscript": "", + "codecs": [ + "av01.0.00M.10.0.110.01.01.01.0", + "avc1.640033", + "hev1.1.6.L120.90" + ], + "can_watch_qn_reason": 0, + "limit_watch_reason": 0, + "report": {} + } + ], + "high_format": null, + "last_play_time": 5000, + "last_play_cid": 35306865840, + "view_info": null, + "play_conf": { + "is_new_description": false + }, + "cur_language": "en", + "language": { + "support": true, + "items": [ + { + "lang": "en", + "title": "English", + "subtitle_lang": "", + "video_detext": false, + "video_mouth_shape_change": false, + "production_type": 2 + }, + { + "lang": "ja", + "title": "日本語", + "subtitle_lang": "", + "video_detext": false, + "video_mouth_shape_change": false, + "production_type": 2 + } + ], + "open_toast": "原声翻译开启中,请稍候", + "close_toast": "原声翻译关闭中,请稍候", + "default_title": "翻译", + "list_title": "AI原声翻译(Beta)", + "bubble": { + "title": "试试AI原声翻译", + "type": 2 + } + }, + "cur_production_type": 2, + "auto_qn_resp": { + "dyeid": "bd71451926ffa1a0002987df696f7f00" + } + } +} +``` + +
+ +## 视频取流说明 + +关于拉流: + +1. MP4 / ~~FLV~~ 格式仅需拉视频流,DASH 格式需同时拉视频与伴音流 +2. 如 DASH 格式需要杜比或无损的伴音,需要取对应`dolby`或`flac`字段中的流 +3. **注意 Unicode 转义符** + +~~关于分段:~~ + +~~FLV 格式可能产生分段情况,将`$.data.durl[1-n].url`或`$.data.durl[1-n].backup_url[0]`中的内容作为 URL 进行 GET 请求进行分段播放,如需下载需要合并~~(FLV 格式已下线,不会存在分段现象) + +关于鉴权: + +1. WEB 端取流需要验证防盗链,即`referer`为 `.bilibili.com`域名下且 UA 不能为空 +2. APP 端也需要验证防盗链,即 UA 需要含有`Mozilla/5.0 BiliDroid/*.*.* (bbcallen@gmail.com)`(*为版本) +3. 如`referer`或 UA 错误的情况会被判定为盗链,返回`403 Forbidden`故无法取流 +4. 若传`platform=html5`参数取流,则不会进行防盗链验证,即可通过 HTML 标签`