53 lines
32 KiB
JavaScript
53 lines
32 KiB
JavaScript
import{_ as t,c as l,a,b as n,d as s,e as d,w as r,r as i,o as p}from"./app-Dgsdh8A6.js";const c={};function u(m,e){const o=i("RouteLink");return p(),l("div",null,[e[17]||(e[17]=a('<h1 id="贡献指南" tabindex="-1"><a class="header-anchor" href="#贡献指南"><span>贡献指南</span></a></h1><p>欢迎来到 bilibili-API-collect 社区贡献指南,本文主要面向想要对本项目参与贡献的用户, 请务必认真阅读本文正文与潜在的注释</p><h2 id="总则" tabindex="-1"><a class="header-anchor" href="#总则"><span>总则</span></a></h2><p><a href="https://github.com/SocialSisterYi/bilibili-API-collect" target="_blank" rel="noopener noreferrer">bilibili-API-collect</a> 项目(简称 BAC 或 b-a-c)是一个仅用于学习研究、社区开源、公益性质的 <a href="https://www.bilibili.com/" target="_blank" rel="noopener noreferrer">B 站(哔哩哔哩)</a>API(应用程序接口)文档,使用 <a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE" target="_blank" rel="noopener noreferrer">CC-BY-NC 4.0 协议</a>开源,它将无差别收集整理相关的<strong>主站业务接口</strong>。</p><p>该项目使用 <a href="https://zh.wikipedia.org/zh-cn/Markdown" target="_blank" rel="noopener noreferrer">Markdown</a> 语法进行文档书写,按照业务类型及功能以<strong>路径</strong>+<strong>文件</strong>形式索引,任何用户都可通过 Issue、Pull Request 与 Discussion 提供自己分析出的接口地址与使用说明。</p><p>本项目收集的接口类型包括但不限于 REST API、gRPC、WebSocket,文档内统一优先使用安全套接字协议,如 <code>https</code>、<code>securityRpc</code>、<code>wss</code>。</p><h2 id="issue、discussion-与社群讨论" tabindex="-1"><a class="header-anchor" href="#issue、discussion-与社群讨论"><span>Issue、Discussion 与社群讨论</span></a></h2><p>对文档内容存在<strong>不理解</strong>之处、以及发现文档内容有所<strong>缺失</strong>或<strong>错误</strong>,可直接提出,强烈建议以提交 <strong>Issue</strong> 的形式 添加 / 补充 / 更新 文档中的说明,以发起 <strong>Discussion</strong> 的形式提出问题、代码用例、情报分享,并希望关于本项目的各种交流都是<strong>公开进行</strong>的,因为这样才可以保证关键信息的一致性。</p><p>提交 Issue 请遵守以下原则:</p><ol><li>标题需要点明 API 的用处, <code><title></code> 要替换为标题主要内容而不是保留不动,切勿仅填写 <code>补充</code>、<code>修复</code>,形式良好的标题可以是 <code>[新增请求] 新增 xx 接口</code>、<code>[更新请求] xx 接口地址已失效</code>、<code>[更新请求] xx 接口的参数有变化</code></li><li>正文请按照 Issue 模板进行填写,标明 API 来源(Web、Android、iOS、TV 等)、API 类型(REST、gRPC、WebSocket 等)、API 地址</li><li>详情描述需要提供该 API 的使用场景、请求及响应字段等,可附上原始抓包记录 (文本格式优先);在更新时还需指出原文档中与最新 API 行为不符之处,并附上已知的最新改动。例如:“在前端页面某地址 / APP 某界面访问某 API(标明地址),它的某参数与文档中不符(标明文档地址)”</li></ol><p>发起 Discussion 请遵守以下原则:</p><ol><li>标题言简意骇,说明欲提出的问题要点,如 <code>如何通过 xx 接口获取 yy</code>、<code>关于 xx 字段意义的探讨</code>、<code>建议将 xx 加入 yy 分类</code> 等标题;切勿使用表意含糊不清或索取性的标题,如 <code>怎么解决风控</code>、<code>搜索的接口是什么</code>、<code>好兄弟有没有投稿的接口</code> 等标题</li><li>Discussion 正文应对遇到的问题进行尽可能详细的描述,展开并聚焦有关的信息,例如: “按照文档中某位置的说明进行了某操作,为什么无法获得预期结果”、“请问某 API 的某字段的具体含义是什么”</li><li>提出问题时注意<a href="https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md" target="_blank" rel="noopener noreferrer">提问的智慧</a>并且<a href="https://github.com/tangx/Stop-Ask-Questions-The-Stupid-Ways" target="_blank" rel="noopener noreferrer">别像弱智一样提问</a></li></ol><p>同时,您还可以通过加入社群的方式参与讨论</p><ul><li>QQ 交流群:<a href="https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&group_code=191187164" target="_blank" rel="noopener noreferrer">邀请链接</a></li><li>Telegram 交流群:<a href="https://t.me/bilibili_API_collect_community" target="_blank" rel="noopener noreferrer">@bilibili_API_collect_community</a></li></ul><div class="hint-container tip"><p class="hint-container-title">提示</p><p>QQ 交流群为综合技术交流群(兼 Owner 的粉丝群),可交流探讨任何技术,包括但不限于 <a href="https://github.com/SocialSisterYi/bilibili-API-collect" target="_blank" rel="noopener noreferrer">BAC 项目</a></p><p>Telegram 交流群主要用作 <a href="https://github.com/SocialSisterYi/bilibili-API-collect" target="_blank" rel="noopener noreferrer">BAC 项目</a>的 Github Bot 接收,也可以进行项目相关的讨论,但不建议在此讨论交流其他内容(公开群)</p></div><div class="hint-container warning"><p class="hint-container-title">注意</p><p>群内讨论同样需要遵守<strong>公开交流</strong>的原则,以及群内会定期清理不活跃成员。</p><p><strong>QQ 交流群</strong>的加群问题答案可以去 <a href="https://github.com/SocialSisterYi" target="_blank" rel="noopener noreferrer">Owner 的主页</a> Contact 部分找到,如果您填写“我不知道,从 Github 来的”那么管理员将有理由禁止您进群讨论!</p></div><div class="hint-container caution"><p class="hint-container-title">禁止</p><p>项目 Issue 及其相关社群中<strong>禁止</strong>询问讨论 风控解除、爬虫(采集)、破解、漏洞利用、买卖代码和账号 相关内容,抵制基于本项目进行的一切黑产行为!</p></div><h2 id="目录与路径结构" tabindex="-1"><a class="header-anchor" href="#目录与路径结构"><span>目录与路径结构</span></a></h2><h3 id="目录" tabindex="-1"><a class="header-anchor" href="#目录"><span>目录</span></a></h3>',19)),n("p",null,[e[1]||(e[1]=s("文档目录以 ")),e[2]||(e[2]=n("strong",null,"Markdown 无序列表",-1)),e[3]||(e[3]=s("语法写在 ")),d(o,{to:"/"},{default:r(()=>e[0]||(e[0]=[s("README.md")])),_:1,__:[0]}),e[4]||(e[4]=s(" 中,使用缩进标识文档的层级,如 ")),e[5]||(e[5]=n("code",null,"视频",-1)),e[6]||(e[6]=s(" 下存在 ")),e[7]||(e[7]=n("code",null,"基本信息",-1)),e[8]||(e[8]=s("、")),e[9]||(e[9]=n("code",null,"快照",-1)),e[10]||(e[10]=s("、")),e[11]||(e[11]=n("code",null,"视频推荐",-1)),e[12]||(e[12]=s("、")),e[13]||(e[13]=n("code",null,"TAG",-1)),e[14]||(e[14]=s(" 等子分类,使用 ")),e[15]||(e[15]=n("strong",null,"Markdown 复选框",-1)),e[16]||(e[16]=s("语法该标注文档是否编写完成, 新文档写完后记得在目录添加入口"))]),e[18]||(e[18]=a(`<div class="language-markdown line-numbers-mode" data-highlighter="shiki" data-ext="markdown" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-markdown"><span class="line"><span style="color:#6796E6;">-</span><span style="color:#D4D4D4;"> [ ] 视频</span></span>
|
||
<span class="line"><span style="color:#6796E6;"> -</span><span style="color:#D4D4D4;"> [</span><span style="color:#CE9178;">x</span><span style="color:#D4D4D4;">] 基本信息</span></span>
|
||
<span class="line"><span style="color:#6796E6;"> -</span><span style="color:#D4D4D4;"> [</span><span style="color:#CE9178;">x</span><span style="color:#D4D4D4;">] 快照</span></span>
|
||
<span class="line"><span style="color:#6796E6;"> -</span><span style="color:#D4D4D4;"> [</span><span style="color:#CE9178;">x</span><span style="color:#D4D4D4;">] 视频推荐</span></span>
|
||
<span class="line"><span style="color:#6796E6;"> -</span><span style="color:#D4D4D4;"> [ ] TAG</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="路径" tabindex="-1"><a class="header-anchor" href="#路径"><span>路径</span></a></h3><p>路径层级应当与文档目录一致,以文件夹的形式存放在项目中的 <code>/docs</code> 路径下,命名统一使用英文小写,如 <code>video</code>、<code>danmaku</code>、<code>comment</code>, 不建议出现 <code>&</code> 等特殊字符</p><p>二级、三级路径应当存在二级三级目录,可选添加 <code>README.md</code> 以描述该子目录</p><h3 id="文件" tabindex="-1"><a class="header-anchor" href="#文件"><span>文件</span></a></h3><p>各个子接口集整理为 Markdown (.md) 文件,命名统一使用英文小写,如 <code>info.md</code>、<code>action.md</code>、<code>list.md</code></p><p>文档文件中用于存放相关的接口的说明,如 <code>video/</code> 下的 <code>info.md</code>,存在 <code>查询视频基本信息</code>、<code>查询视频简介</code>、<code>查询视频分P列表</code> 等内容</p><h2 id="markdown-文档内容格式" tabindex="-1"><a class="header-anchor" href="#markdown-文档内容格式"><span>Markdown 文档内容格式</span></a></h2><p>文档使用 <a href="https://vuepress.vuejs.org/" target="_blank" rel="noopener noreferrer">VuePress</a> 生成,可以使用 <a href="https://vuepress.vuejs.org/guide/markdown.html" target="_blank" rel="noopener noreferrer">VuePress Markdown 扩展语法</a>编写</p><p>注:以下文档范式主要针对接口类文档, 可根据<strong>实际情况</strong>进行调整, 你也可以使用 <a href="https://github.com/SessionHu/json-apidoc-gen" target="_blank" rel="noopener noreferrer"><code>json-apidoc-gen</code></a> 工具直接生成模板自行填充内容. 非接口类文档, 如算法等, 可以参考已有的内容</p><h3 id="头部" tabindex="-1"><a class="header-anchor" href="#头部"><span>头部</span></a></h3><p>文档首行为<strong>一级标签</strong>格式标题,如 <code># 用户基本信息</code></p><p><strong>文档头部不需要手写索引</strong>,索引由 VuePress 自动生成</p><h3 id="接口说明" tabindex="-1"><a class="header-anchor" href="#接口说明"><span>接口说明</span></a></h3><p>文档中可存在多个接口说明,应当遵守同一范式,依次排列在文档中</p><p>接口说明分为 <code>标题</code>、<code>地址</code>、<code>说明</code>、<code>请求参数</code>、<code>响应正文</code>、<code>示例</code> 这些部分</p><p>接口标题为<strong>二级以下</strong>的标签,接口地址使用<strong>块引用</strong>语法,地址只保留 REST API 路径,不应携带 query 等内容</p><p>接口地址下方需要注明接口的请求方法,如 <code>GET</code>、<code>POST</code>、<code>PUT</code> 等,使用<em>斜体</em>语法</p><p>若接口存在认证或鉴权,需要在说明中注明,如 <code>Cookie (SESSDATA)</code>、<code>APP</code>(认证是针对用户的,鉴权是针对接口使用的)</p><p>其他使用说明也可写在这里,如 <code>限制游客访问的视频需要登录</code></p><p>e.g.:</p><div class="language-markdown line-numbers-mode" data-highlighter="shiki" data-ext="markdown" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-markdown"><span class="line"><span style="color:#569CD6;font-weight:bold;">## 获取视频详细信息_web端</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#6A9955;">></span><span style="color:#D4D4D4;"> https://api.bilibili.com/x/web-interface/view</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;font-style:italic;">*请求方法: GET*</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">认证方式: Cookie (SESSDATA)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">限制游客访问的视频需要登录</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>请求参数</strong>应在<strong>接口说明</strong>的下方,应注明参数类型 URL 参数或正文参数(正文参数应注明 <code>Content-Type</code>,如 <code>application/x-www-form-urlencoded</code> 或 <code>multipart/form-data</code>),使用<strong>加粗</strong>语法</p><p>对象的字段及其含义使用<strong>表格</strong>进行整理,表头统一依次为 <code>参数名</code>、<code>类型</code>、<code>内容</code>、<code>必要性</code>、<code>备注</code>,使用 <code>object</code>、<code>number</code>、<code>string</code>、<code>boolean</code>、<code>number[]</code>、<code>string[]</code>、<code>file</code> 等这种类似 TypeScript 的类型系统,必要性为 <code>必要</code>、<code>非必要</code>、<code>必要 (可选)</code> 等,表格内每个字段为一行</p><p>e.g.:</p><table><thead><tr><th>参数名</th><th>类型</th><th>内容</th><th>必要性</th><th>备注</th></tr></thead><tbody><tr><td>aid</td><td>num</td><td>稿件 avid</td><td>必要 (可选)</td><td>avid 与 bvid 任选</td></tr><tr><td>bvid</td><td>str</td><td>稿件 bvid</td><td>必要 (可选)</td><td>avid 与 bvid 任选</td></tr></tbody></table><p><strong>响应正文</strong>应在<strong>请求参数</strong>的下方,接口响应的数据格式应标注,如 <code>JSON 回复</code>、<code>XML 回复</code>、<code>ProtoBuf 回复</code>,使用<strong>加粗</strong>语法</p><p>JSON Object 或 ProtoBuf Message 应以对象的<strong>表格</strong>形式书写,表头为 <code>根对象</code> 或 <code>xx 中的 yy 对象</code> 或 <code>xx.yy.zz 对象</code>,若对象位于数组中则为 <code>xx 数组中的对象</code> 或 <code>xx[] 中的对象</code></p><p>表头统一依次为 <code>字段</code>、<code>类型</code>、<code>内容</code>、<code>备注</code>,类型为 JSON / Protobuf 的标准类型,具体同请求参数一致</p><p>不明确定义的字段说明在内容的末尾添加问号,如 <code>播放数?</code>;定义尚未明确的字段使用 <code>(?)</code> 在内容中占位,并在备注中填写 <code>作用尚不明确</code></p><p>多个对象及数组,使用<strong>遍历树</strong>的顺序进行排列, 若数组中的每一项结构均相同也可以直接省略为像 <code>xxx 数组中的对象</code> 这样的格式</p><p>e.g.:</p><p><code>data</code> 对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>bvid</td><td>str</td><td>稿件 bvid</td><td></td></tr><tr><td>aid</td><td>num</td><td>稿件 avid</td><td></td></tr><tr><td>videos</td><td>num</td><td>稿件分P总数</td><td>默认为 1</td></tr><tr><td>tid</td><td>num</td><td>分区 tid</td><td></td></tr><tr><td>no_cache</td><td>bool</td><td>(?)</td><td>作用尚不明确</td></tr></tbody></table><p>Json Array 或 ProtoBuf Repeated 类型使用数组的<strong>表格</strong>形式书写,表头统一依次为 <code>项</code>、<code>类型</code>、<code>内容</code>、<code>备注</code>,无限长度数组表尾需要添加<strong>省略号</strong></p><p>数组每项内容若与实际数据有关联,<code>内容</code> 字段则可标为 <code>(n+1)P 视频内容</code> 这样的形式</p><p>e.g.:</p><p><code>data</code> 中的 <code>pages</code> 数组:</p><table><thead><tr><th>项</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>0</td><td>obj</td><td>1P 视频内容</td><td>无分 P 仅有此项</td></tr><tr><td>n</td><td>obj</td><td>(n+1)P 视频内容</td><td></td></tr><tr><td>……</td><td>obj</td><td>……</td><td>……</td></tr></tbody></table><p><strong>示例</strong>部分位于所有<strong>响应正文</strong>部分下方,需要<strong>加粗</strong>格式,分为请求命令示例与响应体示例两部分</p><p>请求命令示例为一段可测试该接口的 cURL 命令或某种编程语言的代码,使用<strong>代码块</strong>语法书写,命令应当尽可能简短、便于使人阅读, 代码缩进为 <strong>2</strong> 个 <strong>空格 (U+0020)</strong></p><p>示例命令中的认证信息应做<strong>脱敏处理</strong>,如 Cookie、Token、access_key 等,可替换为 <code>xxx</code> 占位</p><p>示例命令前后可以适当添加一些文字说明</p><p>响应体示例为一段格式化后的 JSON 或 ProtoBuf Message,使用<strong>代码块</strong>语法书写, 代码块语言填写清楚, 注意 <code>json</code> <code>jsonc</code> 区别. 并使用 <code><details></code> 标签进行折叠, 仍一律使用 <strong>2</strong> 个 <strong>空格</strong> 进行缩进</p><p>e.g.:</p><div class="language-markdown line-numbers-mode" data-highlighter="shiki" data-ext="markdown" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-markdown"><span class="line"><span style="color:#569CD6;font-weight:bold;">**示例:**</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">获取视频 </span><span style="color:#CE9178;">\`av85440373\`</span><span style="color:#D4D4D4;"> 的基本信息</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">\`\`\`shell</span></span>
|
||
<span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#569CD6;"> -G</span><span style="color:#CE9178;"> 'https://api.bilibili.com/x/web-interface/view'</span><span style="color:#D7BA7D;"> \\</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> --data-urlencode 'aid=85440373'</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">\`\`\`</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;"><details></span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"><summary>查看响应示例:</summary></span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;">\`\`\`jsonc</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">{</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "code"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "message"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"0"</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "ttl"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "data"</span><span style="color:#D4D4D4;">: {</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "bvid"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"BV117411r7R1"</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "aid"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">85440373</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "videos"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "tid"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">28</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "tname"</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">"原创音乐"</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> "copyright"</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // ...</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">}</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">\`\`\`</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#D4D4D4;"></details></span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="枚举值与属性位" tabindex="-1"><a class="header-anchor" href="#枚举值与属性位"><span>枚举值与属性位</span></a></h3><p>接口返回或请求中若存在一些 enum 类型或二进制属性位,应当单独进行探讨,如视频的属性位 <code>attribute</code> 或视频清晰度 <code>qn</code></p><p>这些值及其说明使用<strong>表格</strong>进行整理,表头统一为 <code>位</code> / <code>代码</code> / <code>值</code>、<code>含义</code>、<code>备注</code></p><p>这些枚举值或属性位的用法应附加文字说明</p><p>e.g.:</p><table><thead><tr><th>值</th><th>含义</th><th>备注</th></tr></thead><tbody><tr><td>6</td><td>240P 极速</td><td>仅 MP4 格式支持<br>仅 <code>platform=html5</code> 时有效</td></tr><tr><td>16</td><td>360P 流畅</td><td></td></tr><tr><td>32</td><td>480P 清晰</td><td></td></tr><tr><td>64</td><td>720P 高清</td><td>WEB 端默认值<br>B 站前端需要登录才能选择,但是直接发送请求可以不登录就拿到 720P 的取流地址<br><strong>无 720P 时则为 720P60</strong></td></tr><tr><td>74</td><td>720P60 高帧率</td><td>需要登录认证</td></tr><tr><td>80</td><td>1080P 高清</td><td>TV 端与 APP 端默认值<br>需要登录认证</td></tr></tbody></table><h2 id="proto-定义格式" tabindex="-1"><a class="header-anchor" href="#proto-定义格式"><span>Proto 定义格式</span></a></h2><p>proto 文件为 <a href="https://protobuf.dev/" target="_blank" rel="noopener noreferrer">Protocol Buffers</a> 以及 <a href="https://grpc.io/docs/" target="_blank" rel="noopener noreferrer">gRPC</a> 的数据结构体定义,多用于客户端的接口,本文档也做相关的收集</p><p>存放于项目的 <code>/grpc_api</code> 路径下,使用包名进行路径层级的组织,如:</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-"><span class="line"><span>/grpc_api/bilibili/main/community/reply/v1/reply.proto</span></span>
|
||
<span class="line"><span>/grpc_api/bilibili/app/archive/v1/archive.proto</span></span>
|
||
<span class="line"><span>/grpc_api/bilibili/app/view/v1/view.proto</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>proto 文件内使用<strong>单行注释</strong>标注字段或对象的含义,如:</p><div class="language-protobuf line-numbers-mode" data-highlighter="shiki" data-ext="protobuf" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-protobuf"><span class="line"><span style="color:#6A9955;">// UP主信息</span></span>
|
||
<span class="line"><span style="color:#569CD6;">message</span><span style="color:#4EC9B0;"> Author</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // UP主mid</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> int64</span><span style="color:#9CDCFE;"> mid</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">;</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // UP主昵称</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> name</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">;</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // UP主头像url</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> face</span><span style="color:#D4D4D4;"> = </span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">;</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="文档提交" tabindex="-1"><a class="header-anchor" href="#文档提交"><span>文档提交</span></a></h2><h3 id="拉取-pull-与-提交-commit" tabindex="-1"><a class="header-anchor" href="#拉取-pull-与-提交-commit"><span>拉取 (Pull) 与 提交 (Commit)</span></a></h3><p>本项目仓库仅托管于 GitHub, 使用 Git 作为版本控制系统, 你需要对两者有基础的了解</p><p>请先 fork, 然后在自己的 fork 上进行修改</p><p>提交的标题不要使用默认的 <code>Update xxx</code>, 请遵循 <a href="https://www.conventionalcommits.org/zh-hans/v1.0.0/" target="_blank" rel="noopener noreferrer">Conventional Commits (约定式提交) 规范</a>, 标题语言可根据个人习惯</p><p>当发现远程与本地仓库不一致时, 若你操作的 fork 的 branch 无打开的 PR, 建议使用变基拉取, 而不是生成一个额外的合并提交的合并拉取, 反之则相反</p><p>移动文件请使用 <code>git mv</code>, 而不是删除并添加同一个文件于不同位置 (该问题在 VSCode 的 GUI 版 Git 中存在), 以便后续 blame 操作</p><h3 id="拉取请求-pull-request" tabindex="-1"><a class="header-anchor" href="#拉取请求-pull-request"><span>拉取请求 (Pull Request)</span></a></h3><p>使用 拉取请求 (Pull Request, PR) 将修改后的文档提交到 <code>master</code> 分支,标题需写明修改或新增的内容, 同样也需要遵循约定式提交规范, <code>gh_pages</code> 分支将在 PR 合并后自动更新</p><p>如果你还没有完成计划的全部修改, 请创建 Draft Pull Request 表示你还没有做好被合并的准备 <s>(抢占先机, 精神可嘉, 值得鼓励)</s></p><p>PR 正文使用 <strong>无序列表</strong> 写明更改的每一项内容, 可以使用复选框表明进度, 需要关闭的 Issue 请使用 <code>close #xxxx</code> 这样的格式一并包含在内</p><p>如果内容包含代码等, 请一并提供测试的输入与输出的文本或截图, 最好可以附上完整的测试环境及相关可执行文件等</p><p>PR 合并后, 请及时删除或更新分支. 特别是在使用压缩合并或变基合并后, 请 <code>Discard changes</code> 或直接删除分支, 以免在下一次 PR 后出现重复相同提交的问题</p>`,71))])}const b=t(c,[["render",u]]),g=JSON.parse('{"path":"/CONTRIBUTING.html","title":"贡献指南","lang":"zh-CN","frontmatter":{},"git":{"updatedTime":1752448376000,"contributors":[{"name":"SocialSisterYi","username":"SocialSisterYi","email":"1440239038@qq.com","commits":4,"url":"https://github.com/SocialSisterYi"},{"name":"LaMerChiang","username":"LaMerChiang","email":"catlair@qq.com","commits":1,"url":"https://github.com/LaMerChiang"},{"name":"wuziqian211","username":"wuziqian211","email":"65224318+wuziqian211@users.noreply.github.com","commits":3,"url":"https://github.com/wuziqian211"},{"name":"SessionHu","username":"SessionHu","email":"102411014+SessionHu@users.noreply.github.com","commits":7,"url":"https://github.com/SessionHu"}],"changelog":[{"hash":"2eae485e9949f9ae71b9f57f3416c8d7034573bd","time":1752448376000,"email":"102411014+SessionHu@users.noreply.github.com","author":"Session小胡","message":"JSONC highlighting & Upgrade VuePress (#1091)"},{"hash":"2eeda0f468b527254b15675f954698c0ef84bc5b","time":1748661604000,"email":"102411014+SessionHu@users.noreply.github.com","author":"SessionHu","message":"feat(CONTRIBUTING.md): 确认类型系统更改"},{"hash":"612d59101f078991f0c570a42400b0fabe2242b0","time":1746372671000,"email":"102411014+SessionHu@users.noreply.github.com","author":"SessionHu","message":"feat(CONTRIBUTING.md): 更加严谨的表述"},{"hash":"85defd7b3620f2b9ea9dc48798e898ceb8071e2f","time":1745515578000,"email":"102411014+SessionHu@users.noreply.github.com","author":"SessionHu","message":"feat(CONTRIBUTING.md): code block desc about json jsonc"},{"hash":"654e296a05864e3be68a3871c16ae72b45294bff","time":1745148096000,"email":"102411014+SessionHu@users.noreply.github.com","author":"SessionHu","message":"feat(CONTRIBUTING.md): add link to json-apidoc-gen"},{"hash":"ac01f83cfff6509b166e4d63d6a5d8e1247f84e1","time":1745060980000,"email":"102411014+SessionHu@users.noreply.github.com","author":"SessionHu","message":"feat(CONTRIBUTING.md): add non-api doc info"},{"hash":"65c88d57205c3da55e2d9f36386bd4e8544b4f77","time":1745002629000,"email":"102411014+SessionHu@users.noreply.github.com","author":"SessionHu","message":"feat(CONTRIBUTING.md): Commit and PR"},{"hash":"41d73f1a20d856ffc5468243fbf17e5a35dc1a92","time":1726838526000,"email":"65224318+wuziqian211@users.noreply.github.com","author":"晨叶梦春","message":"feat: 添加消息中心接口相关说明 (#983)"},{"hash":"6521e3fea37a348230426c36499fc083d7887a21","time":1714761544000,"email":"65224318+wuziqian211@users.noreply.github.com","author":"wuziqian211","message":"Update CONTRIBUTING.md"},{"hash":"392dc2b0bec43171e205e3265a8f7c9d9c6d3963","time":1714722663000,"email":"65224318+wuziqian211@users.noreply.github.com","author":"wuziqian211","message":"Update CONTRIBUTING.md"},{"hash":"edb72085434afaa7daae092b8d98f62aebd99808","time":1706782992000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"Update CONTRIBUTING Guide"},{"hash":"ef919a61efd0a4813d95585fa0ebd24ce1d2988e","time":1693981546000,"email":"catlair@qq.com","author":"LaMerChiang","message":"chore: 升级为 vuepress@2 (#807)"},{"hash":"f6760f4be38d5b592d396b211e48c666286524de","time":1677124138000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"🔨remove header index"},{"hash":"75ee9d976ee565ad43ac193099c5580cb5ce7692","time":1674310725000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"update【contributing】"},{"hash":"3893a323d750de669bec7bc13a1d16867fa0b03f","time":1674230287000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"add contributing guide"}]},"filePathRelative":"CONTRIBUTING.md"}');export{b as comp,g as data};
|