29 lines
12 KiB
JavaScript
29 lines
12 KiB
JavaScript
import{_ as i,c as o,a as d,b as n,d as s,e,w as l,r,o as p}from"./app-Dgsdh8A6.js";const m={};function c(u,t){const a=r("RouteLink");return p(),o("div",null,[t[18]||(t[18]=d('<h1 id="protobuf弹幕" tabindex="-1"><a class="header-anchor" href="#protobuf弹幕"><span>protobuf弹幕</span></a></h1><p>2020å¹´5月23日,哔哩哔哩网页端å�Šç§»åŠ¨ç«¯å�¯ç”¨äº†æ–°çš„默认弹幕 API,网页端弹幕显示的上é™�å�˜ä¸ºåŽŸå¼¹å¹•æ± ä¸Šé™�的两å€�。</p><p>æ–°çš„ API 是以 6min 为一个å�•ä½�åŠ è½½ï¼Œå�³æ¯�æ¬¡åŠ è½½ 6min 内的弹幕</p><h2 id="获å�–实时弹幕" tabindex="-1"><a class="header-anchor" href="#获å�–实时弹幕"><span>获å�–实时弹幕</span></a></h2><blockquote><p>https://api.bilibili.com/x/v2/dm/web/seg.so (web端)</p><p>https://api.bilibili.com/x/v2/dm/wbi/web/seg.so (web 端新接å�£ï¼Œéœ€è¦� wbi 认è¯�)</p><p>https://api.bilibili.com/x/v2/dm/list/seg.so (APP端)</p><p>https://i0.hdslb.com/bfs/dm/{data}.bin (BAS/代ç �弹幕专包)</p></blockquote><p><em>请求方å¼�:GET</em><em>认è¯�æ–¹å¼�:å�ŠåŒ¿å��ï¼ˆéƒ¨åˆ†è§†é¢‘åœ¨æ— Cookie: SESSDATA æ—¶å�ªè¿”回部分弹幕)</em></p><p>æ¤æŽ¥å�£ä¸Žæ¼«ç”»å¼¹å¹•相å�Œ</p>',7)),n("p",null,[t[1]||(t[1]=s("å�ªèƒ½è¿”回普通弹幕(")),t[2]||(t[2]=n("code",null,"pool=1",-1)),t[3]||(t[3]=s()),t[4]||(t[4]=n("code",null,"mode=1-7",-1)),t[5]||(t[5]=s(")和代ç �弹幕(")),t[6]||(t[6]=n("code",null,"pool=2",-1)),t[7]||(t[7]=s()),t[8]||(t[8]=n("code",null,"mode=8",-1)),t[9]||(t[9]=s("),BAS弹幕(")),t[10]||(t[10]=n("code",null,"pool=2",-1)),t[11]||(t[11]=s()),t[12]||(t[12]=n("code",null,"mode=9",-1)),t[13]||(t[13]=s(")请从")),e(a,{to:"/docs/danmaku/danmaku_view_proto.html"},{default:l(()=>t[0]||(t[0]=[s("弹幕元数æ�®")])),_:1,__:[0]}),t[14]||(t[14]=s("ä¸èŽ·å�–"))]),n("p",null,[t[16]||(t[16]=s("互动弹幕(UP 主头åƒ�弹幕ã€�å…³è�”视频ã€�内嵌关注按钮)也ä¸�å˜åœ¨è¿™ä¸ªæŽ¥å�£ï¼Œè¯·ä»Ž")),e(a,{to:"/docs/danmaku/danmaku_view_proto.html"},{default:l(()=>t[15]||(t[15]=[s("弹幕元数æ�®")])),_:1,__:[15]}),t[17]||(t[17]=s("ä¸èŽ·å�–"))]),t[19]||(t[19]=d(`<p><strong>注:仅获å�– 6min 的整数å€�时间内的弹幕,6min 内最多弹幕数为 6000 æ�¡ï¼ˆå¦‚第一包ä¸å¼¹å¹•<code>progress</code>值域为0-360000)</strong></p><p><strong>urlå�‚数:</strong></p><table><thead><tr><th>å�‚æ•°å��</th><th>类型</th><th>内容</th><th>å¿…è¦�性</th><th>备注</th></tr></thead><tbody><tr><td>type</td><td>num</td><td>弹幕类</td><td>å¿…è¦�</td><td>1:视频弹幕<br>2:漫画弹幕</td></tr><tr><td>oid</td><td>num</td><td>视频 cid</td><td>å¿…è¦�</td><td></td></tr><tr><td>pid</td><td>num</td><td>稿件 avid</td><td>é�žå¿…è¦�</td><td></td></tr><tr><td>segment_index</td><td>num</td><td>分包</td><td>å¿…è¦�</td><td>6min 一包</td></tr><tr><td>pull_mode</td><td>num</td><td>(?)</td><td>é�žå¿…è¦�</td><td></td></tr><tr><td>ps</td><td>num</td><td>(?)</td><td>é�žå¿…è¦�</td><td></td></tr><tr><td>pe</td><td>num</td><td>(?)</td><td>é�žå¿…è¦�</td><td></td></tr></tbody></table><p><strong>proto回å¤�:</strong></p><p>proto定义è§�:<a href="../../grpc_api/bilibili/community/service/dm/v1/dm.proto">bilibili.community.service.dm.v1.DmSegMobileReply</a></p><ul><li><p><a href="https://protogen.marcgravell.com/" target="_blank" rel="noopener noreferrer">protogen.marcgravell</a>: 在线编译 protogen 工具, æ— éœ€å†�安装本地编译器(生æˆ�æ–‡ä»¶éœ€åŠ å�Žç¼€<code>_pb2.py</code>æ‰�å�¯ä½¿ç”¨)</p></li><li><p><a href="https://pypi.org/project/protobuf/" target="_blank" rel="noopener noreferrer">protobuf pip</a>: å�¯ä¸€é”®å®‰è£…çš„ Python çš„ protogen è§£æž�库</p></li></ul><p>消æ�¯<code>DmSegMobileReply</code>:</p><table><thead><tr><th>å��ç§°</th><th>类型</th><th>å�«ä¹‰</th><th>备注</th></tr></thead><tbody><tr><td>elems</td><td>repeated DanmakuElem</td><td>弹幕æ�¡ç›®</td><td></td></tr></tbody></table><p>消æ�¯<code>DanmakuElem</code>:</p><table><thead><tr><th>å��ç§°</th><th>类型</th><th>å�«ä¹‰</th><th>备注</th></tr></thead><tbody><tr><td>id</td><td>int64</td><td>弹幕 dmid</td><td>唯一 å�¯ç”¨äºŽæ“
|
||||
|
|
<span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> google.protobuf.text_format </span><span style="color:#C586C0;">as</span><span style="color:#D4D4D4;"> text_format</span></span>
|
|||
|
|
<span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> bilibili.community.service.dm.v1.dm_pb2 </span><span style="color:#C586C0;">as</span><span style="color:#D4D4D4;"> Danmaku</span></span>
|
|||
|
|
<span class="line"></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">url = </span><span style="color:#CE9178;">'https://api.bilibili.com/x/v2/dm/web/seg.so'</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">params = {</span></span>
|
|||
|
|
<span class="line"><span style="color:#CE9178;"> 'type'</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">, </span><span style="color:#6A9955;"># 弹幕类型</span></span>
|
|||
|
|
<span class="line"><span style="color:#CE9178;"> 'oid'</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1176840</span><span style="color:#D4D4D4;">, </span><span style="color:#6A9955;"># cid</span></span>
|
|||
|
|
<span class="line"><span style="color:#CE9178;"> 'pid'</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">810872</span><span style="color:#D4D4D4;">, </span><span style="color:#6A9955;"># avid</span></span>
|
|||
|
|
<span class="line"><span style="color:#CE9178;"> 'segment_index'</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#6A9955;"> # 弹幕分段</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">}</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">resp = requests.get(url, params)</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">data = resp.content</span></span>
|
|||
|
|
<span class="line"></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">danmaku_seg = Danmaku.DmSegMobileReply()</span></span>
|
|||
|
|
<span class="line"><span style="color:#D4D4D4;">danmaku_seg.ParseFromString(data)</span></span>
|
|||
|
|
<span class="line"></span>
|
|||
|
|
<span class="line"><span style="color:#DCDCAA;">print</span><span style="color:#D4D4D4;">(text_format.MessageToString(danmaku_seg.elems[</span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">], </span><span style="color:#9CDCFE;">as_utf8</span><span style="color:#D4D4D4;">=</span><span style="color:#569CD6;">True</span><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 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>输出:</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>id: 711923911</span></span>
|
|||
|
|
<span class="line"><span>progress: 47880</span></span>
|
|||
|
|
<span class="line"><span>mode: 1</span></span>
|
|||
|
|
<span class="line"><span>fontsize: 18</span></span>
|
|||
|
|
<span class="line"><span>color: 10092288</span></span>
|
|||
|
|
<span class="line"><span>midHash: "59417e95"</span></span>
|
|||
|
|
<span class="line"><span>content: "世界第一电击公主殿下,é�‡åˆ°ä½ 是我一生最美好的风景!å�¾ç‚®èµ›é«˜,永生ä¸�离!唯我超电ç£�炮永世长å˜! "</span></span>
|
|||
|
|
<span class="line"><span>ctime: 1418799826</span></span>
|
|||
|
|
<span class="line"><span>weight: 6</span></span>
|
|||
|
|
<span class="line"><span>idStr: "711923911"</span></span>
|
|||
|
|
<span class="line"><span>attr: 1</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></div>`,16))])}const v=i(m,[["render",c]]),D=JSON.parse('{"path":"/docs/danmaku/danmaku_proto.html","title":"protobuf弹幕","lang":"zh-CN","frontmatter":{},"git":{"updatedTime":1696153717000,"contributors":[{"name":"SocialSisterYi","username":"SocialSisterYi","email":"1440239038@qq.com","commits":3,"url":"https://github.com/SocialSisterYi"},{"name":"gwy15","username":"gwy15","email":"gwy15thu@gmail.com","commits":1,"url":"https://github.com/gwy15"},{"name":"LaMerChiang","username":"LaMerChiang","email":"catlair@qq.com","commits":1,"url":"https://github.com/LaMerChiang"}],"changelog":[{"hash":"4dac6cc2d0013c06c5cdf397d9dfc72a1c3531c4","time":1696153717000,"email":"catlair@qq.com","author":"LaMerChiang","message":"æ ‡æ³¨éƒ¨åˆ† wbi 链接 (#827)"},{"hash":"c2d9291c0026350e07c01e59fc8a3ee0e0cd42f1","time":1693028780000,"email":"gwy15thu@gmail.com","author":"gwy15","message":"Update danmaku_proto.mdï¼Œå¢žåŠ è®¤è¯�说明 (#792)"},{"hash":"87d56b66e7ce375029bccf9efda5314964b0528d","time":1684287732000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"update ã€�danmaku thumbup list】 APIDoc"},{"hash":"f6760f4be38d5b592d396b211e48c666286524de","time":1677124138000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"🔨remove header index"},{"hash":"7d89ece2ac46425810647c4ac92acf5f3721cb68","time":1676998806000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"🚀调整项目结构"}]},"filePathRelative":"docs/danmaku/danmaku_proto.md"}');export{v as comp,D as data};
|