mirror of
https://github.com/SocialSisterYi/bilibili-API-collect.git
synced 2026-05-07 02:37:41 +08:00
98 lines
52 KiB
HTML
98 lines
52 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||
<meta name="generator" content="VuePress 2.0.0-rc.24" />
|
||
<style>
|
||
:root {
|
||
--vp-c-bg: #fff;
|
||
}
|
||
|
||
[data-theme='dark'] {
|
||
--vp-c-bg: #1b1b1f;
|
||
}
|
||
|
||
html,
|
||
body {
|
||
background-color: var(--vp-c-bg);
|
||
}
|
||
</style>
|
||
<script>
|
||
const useChoice = localStorage.getItem('vuepress-color-scheme')
|
||
const systemStatus =
|
||
'matchMedia' in window
|
||
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
||
: false
|
||
|
||
if (useChoice === 'light') {
|
||
document.documentElement.dataset.theme = 'light'
|
||
} else if (useChoice === 'dark' || systemStatus) {
|
||
document.documentElement.dataset.theme = 'dark'
|
||
}
|
||
</script>
|
||
<link rel="icon" href="/bilibili-API-collect/logo2.jpg"><title>gRPC 接口定义(protobuf 结构体) | BAC Document</title><meta name="description" content="社区开源的第三方哔哩哔哩 API 文档">
|
||
<link rel="preload" href="/bilibili-API-collect/assets/style-D1PJH1oj.css" as="style"><link rel="stylesheet" href="/bilibili-API-collect/assets/style-D1PJH1oj.css">
|
||
<link rel="modulepreload" href="/bilibili-API-collect/assets/app-CDdN0tOz.js"><link rel="modulepreload" href="/bilibili-API-collect/assets/index.html-BHWVOlkG.js">
|
||
<link rel="prefetch" href="/bilibili-API-collect/assets/CONTRIBUTING.html-PK1UqqxE.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-ogQNRpTk.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/splash.html-DT2Mv3Kp.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/ver.html-QyIIKHz2.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-CFmmBt9q.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-CjC2sa8C.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-kh8YjgtV.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/activity_list.html-BvJR8Ryq.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-CkqFhcAX.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-B5fi37Z1.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/recommend_author.html-BujFvlYA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-DTKcRmsh.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/articles.html-Da6F23Ju.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/card.html-D3fqv2ms.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/category.html-_gEerbZj.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-B1d7nL5H.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/view.html-CfrvJobp.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-NeDlGWkg.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-BPQR7Cmp.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/music_list.html-B_bKuCv_.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/musicstream_url.html-EuMHubLL.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/rank.html-FjKu3TyA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/status_number.html-CeV6WUtE.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/follow.html-CDWBwNwp.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-DXDRP4Tr.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/season_index.html-DEvje2t4.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/timeline.html-CbxJa1xf.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/videostream_url.html-Bf9taY9f.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/banlist.html-BOIn5V7I.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-BtLmZCof.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/video_room.html-wzIAafFQ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-BiHKj1w9.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/videostream_url.html-CqsEu6DJ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/ip.html-E0kaE_eQ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-DD2cAx4v.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-LLsYtwDq.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-DztA8sxj.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/opus.html-eEc8Yf5P.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/railgun.html-BRLhtOZc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/season.html-CyIySS1H.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/statistics_data.html-DoGwaL2a.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/upload.html-BwWV1Mob.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/videos.html-CIxKiOa1.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/msg.html-Bit0P_qL.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-Dl7KcSA5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/buzzword.html-kk7HIlSF.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/config.html-DM69jDie.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/danmaku_proto.html-Xq8rg-Vi.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/danmaku_view_proto.html-BWgynEFR.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/danmaku_xml.html-DU2Yyky8.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/history.html-DlIgteaz.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/snapshot.html-gv9SZux9.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/thumbup.html-DfzKM8Zr.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/webmask.html-BYdvMhex.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-BFV_RxIQ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/all.html-BaPdqgO8.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/atlist.html-CefeZlt1.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/banner.html-BlYb5Zsf.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/basicInfo.html-C73Y6JhK.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/card_info.html-U03rcWu3.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/content.html-BkTvk_al.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/detail.html-CBnQQbZQ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/dynamic_enum.html-Dc_9_y7O.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/get_dynamic_detail.html-DSXWEtO3.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/nav.html-t3QEPmo5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/publish.html-CW3yJg6O.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/space.html-B2_VulMt.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/topic.html-B7RicLwi.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Bcoin.html-Dru89PCF.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/WeChat_Alipay.html-DHGxW8Yn.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/charge_list.html-Qt0HXaUu.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/charge_msg.html-BoB2kh1t.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/monthly.html-D2D4XfPu.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-Bzs6kPjU.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-BPyKjfye.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-CEll5q3T.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-ChgX453v.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-C6L1c2PM.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/color.html-CuBJhwWM.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/lottery.html-Bl6dJSch.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/skin.html-eLlqRnly.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/history.html-DprmvJ34.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/toview.html-BgUiigz9.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/danmaku.html-CQDg0elV.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/emoticons.html-DP073ORS.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/follow_up_live.html-A8GXI9f5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/gift.html-CXgFtYD_.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/guard.html-458TdML0.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-COOmU9Ww.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_area.html-Cz0Dkm7L.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_bill.html-B3EnzSEq.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_data.html-Nowo0bdt.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_replay.html-B4RZPhCn.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_stream.html-6lCtIirB.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/live_vote.html-9LQlvAYm.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/manage.html-B4yA90EK.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/message_stream.html-aQRQQUuq.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/recommend.html-CnDd3KcW.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/redpocket.html-DdHVXRsM.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/report.html-Cstzk6in.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/silent_user_manage.html-DhudMJfm.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/user.html-BtQqLu51.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/cookie_refresh.html-dYWKQSux.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/exit.html-BroV0kq3.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/login_info.html-Bzp6j_Of.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/login_notice.html-wYl00Hm3.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/member_center.html-DFmu76Nc.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Activity.html-TVXp2qcO.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/ClockIn.html-6YNaAeZA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Comic.html-CW5AOWoC.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Download.html-BXapSEFQ.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/Season.html-DXvGggpS.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/User.html-BscndSoG.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index_file.html-DGtsnz1d.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/light_card.html-Zvpc-F1u.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/point_shop.html-DZLcd1xT.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/msg.html-_GbFV9UV.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/private_msg.html-CaEr_DSB.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/private_msg_content.html-CHJdbTzA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/settings.html-C_MpVg0t.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/b23tv.html-Csfkl4ti.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/buvid3_4.html-t_rPekON.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/bvid_desc.html-DtS-E_fC.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/device_identity.html-DddBW7og.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/errcode.html-B1GfPLhh.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/mathjax.html-TSOsGSWM.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/picture.html-CobTmS-n.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/time_stamp.html-1E25B_hl.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-UfDC4QFo.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/fetch.html-D7Yay-TA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-CGmcJK93.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-DW2xjXB7.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-BOveruLf.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/list.html-D_bTQEto.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-6DRHNy6O.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/detail.html-oprHdDEr.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/features.html-CcaOOgcg.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/rich_text_nodes.html-CoQPH0FT.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/space.html-XtaqwWUU.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/hot.html-CFUbZNeB.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/search_request.html-CLPBFIjW.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/search_response.html-Bzt-Y-X5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/suggest.html-B-IFtUVa.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/teenager_mode.html-C4bvGcRa.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/batch.html-D5ZINnHR.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/check_nickname.html-B2_0nrT-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/contract.html--BB48rg6.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-B8jHpiku.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/medals.html-D3napn8q.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/official_role.html-CmQ7uSBH.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/register.html-D0pdaExC.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/relation.html-BcNqxNhw.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/space.html-BEj4Fbod.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/status_number.html-CFhUtt7s.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-CtswDJuD.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/appeal.html-DmV4u2js.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/attribute_data.html-BcOcmZw1.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/collection.html-MfFQgfvD.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-DNsCTu-l.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/interact_video.html-CUqv5NFS.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/online.html-BpgWFsDU.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/pbp.html-THoyMw_9.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/player.html-DuaavPwy.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/recommend.html-C9UhE8ge.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/report.html-DbuiY7dd.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/snapshot.html-tq8YVbyg.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/status_number.html-Bzy_V6j5.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/summary.html-B5TxyGjs.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/tags.html-D0Jr1AkA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/video_zone.html-VyZ_et64.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/video_zone_v2.html-C6Muqh5L.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/videostream_url.html-IlTdJFLq.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/dynamic.html-CrIbtawI.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/popular.html-DD13FCMz.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/precious_videos.html-BIva5INa.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/ranking.html-BMFWGpVy.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-Cf3w-sy1.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/center.html-bkoY7WVx.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/clockin.html-Ccx4gQWs.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-B6QTFJMK.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/info.html-BSxggG6o.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/404_manga.html-CZDdPabx.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/banner.html-Dh1ZfROR.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/header.html-B-0n93yR.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/zone_upload.html-DahAPJYT.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/action.html-9pAfC6IY.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/base_info.html-DD2TBcHH.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/judgement_info.html-6mtwSvq-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/QR.html-CKsBTmro.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/SMS.html-CSrRgFm4.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/password.html-BIitCOnG.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/index.html-D15Ti03q.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/APP.html-pgEqW_L0.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/APPKey.html-Bt5IxB3B.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/bili_ticket.html-vACxIeyA.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/v_voucher.html-Ddz3iH5-.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/wbi.html-Cu5X3BQY.js" as="script"><link rel="prefetch" href="/bilibili-API-collect/assets/404.html-5JIZPgUW.js" as="script">
|
||
</head>
|
||
<body>
|
||
<div id="app"><!--[--><div class="vp-theme-container external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/bilibili-API-collect/"><img class="vp-site-logo" src="/bilibili-API-collect/logo2.jpg" alt="BAC Document"><span class="vp-site-name vp-hide-mobile" aria-hidden="true">BAC Document</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/" aria-label="首页"><!--[--><!--[--><!--]--><!--]-->首页<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/#🍴目录" aria-label="目录"><!--[--><!--[--><!--]--><!--]-->目录<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/CONTRIBUTING.html" aria-label="贡献指南"><!--[--><!--[--><!--]--><!--]-->贡献指南<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="相关社群"><span class="title">相关社群</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="相关社群"><span class="title">相关社群</span><span class="right arrow"></span></button><ul class="vp-navbar-dropdown" style="display:none;"><!--[--><li class="vp-navbar-dropdown-item"><a class="auto-link external-link" href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&group_code=191187164" aria-label="QQ交流群(综合技术交流)" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->QQ交流群(综合技术交流)<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="auto-link external-link" href="https://t.me/bilibili_API_collect_community" aria-label="Telegram交流群(Github Bot推送)" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Telegram交流群(Github Bot推送)<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://github.com/SocialSisterYi/bilibili-API-collect" aria-label="GitHub" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->GitHub<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><form class="search-box" role="search"><input type="search" placeholder="搜索" autocomplete="off" spellcheck="false" value><!----></form></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/" aria-label="首页"><!--[--><!--[--><!--]--><!--]-->首页<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/#🍴目录" aria-label="目录"><!--[--><!--[--><!--]--><!--]-->目录<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/bilibili-API-collect/CONTRIBUTING.html" aria-label="贡献指南"><!--[--><!--[--><!--]--><!--]-->贡献指南<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="相关社群"><span class="title">相关社群</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="相关社群"><span class="title">相关社群</span><span class="right arrow"></span></button><ul class="vp-navbar-dropdown" style="display:none;"><!--[--><li class="vp-navbar-dropdown-item"><a class="auto-link external-link" href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&group_code=191187164" aria-label="QQ交流群(综合技术交流)" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->QQ交流群(综合技术交流)<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="auto-link external-link" href="https://t.me/bilibili_API_collect_community" aria-label="Telegram交流群(Github Bot推送)" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Telegram交流群(Github Bot推送)<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://github.com/SocialSisterYi/bilibili-API-collect" aria-label="GitHub" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->GitHub<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="vp-sidebar-items"><!--[--><li><p tabindex="0" class="vp-sidebar-item vp-sidebar-heading">gRPC 接口定义(protobuf 结构体) <!----></p><!----></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-page"><!--[--><!--]--><div vp-content><!--[--><!--]--><div id="content"><h1 id="grpc-接口定义-protobuf-结构体" tabindex="-1"><a class="header-anchor" href="#grpc-接口定义-protobuf-结构体"><span>gRPC 接口定义(protobuf 结构体)</span></a></h1><p>注:</p><ol><li><p>proto 结构体文件按照包名分类, 同级放在同一目录中</p></li><li><p>gRPC 接口定义全部来自对官方粉版(即大陆版本) APP 的逆向工程, 一般不会有错误, 但是可能有更新, 有实际应用需求的建议自行反编译 APP, 定位到 <code>com.bapis.*</code> 自行补足.</p></li></ol><h2 id="grpc-主机" tabindex="-1"><a class="header-anchor" href="#grpc-主机"><span>gRPC 主机</span></a></h2><p>B 站客户端的 gRPC 接口主机包括:</p><ul><li><code>grpc.biliapi.net</code> 原生 gRPC 接口</li><li><code>app.bilibili.com</code> Failover gRPC 接口</li></ul><p>实际应用中, 后者速度相对更快. 但是需要设置如 gRPC 超时时间等参数时只能使用前者.</p><h2 id="grpc-鉴权" tabindex="-1"><a class="header-anchor" href="#grpc-鉴权"><span>gRPC 鉴权</span></a></h2><p>需要在 Metadata 中添加 <code>authorization</code>: <code>identify_v1 {access_key}</code>.</p><h2 id="grpc-metadata" tabindex="-1"><a class="header-anchor" href="#grpc-metadata"><span>gRPC Metadata</span></a></h2><p>参考 <a href="https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md" target="_blank" rel="noopener noreferrer">gRPC Go 官方文档</a> 对 <code>Metadata</code> 的说明.</p><p>gRPC 的 <code>Metadata</code> 简单理解,就是 HTTP 的 Header 中的 key-value 对, 本质上是一个 Map. 在 gRPC <code>Metadata</code> 中,key 永远是 String,但是 value 可以是 String 也可以是二进制数据. <strong>需要存储二进制数据时, key 应当加上一个 <code>-bin</code> 后缀, 同时二进制 value 应当编码为 Base64</strong>.</p><p>一般而言, 设定 Binary 类型的 <code>Metadata</code> 时, 需要调用各个语言的 gRPC 库的相应方法, 库会帮我们编码二进制数据, 无需我们自行编码.</p><p>需要的 <code>Metadata</code> 包括(但不限于):</p><ul><li>Ascii 类 <ul><li><code>user-agent</code> 客户端 UA, 如 <code>Dalvik/2.1.0 (Linux; U; Android 12; {device_model} Build/{device_build}) {app_ver} os/android model/{device_model} mobi_app/{mobi_app} build/{app_build} channel/master innerVer/{app_build_inner} osVer/12 network/2 grpc-java-cronet/1.36.1</code>(其中 <code>grpc-java-cronet/1.36.1</code> 为原生 gRPC 接口才需要的). <strong>必需</strong>. <ul><li><code>device_model</code> 设备 Model, 如 <code>NOH-AN01</code>.</li><li><code>device_build</code> 设备 Build, 如 <code>HUAWEINOH-AN01</code>.</li><li><code>app_ver</code> APP 版本号, 如 <code>7.38.0</code>.</li><li><code>mobi_app</code> APP 包类型, 参考 <a class="route-link" href="/bilibili-API-collect/docs/misc/sign/APPKey.html">APPKey.md</a>.</li><li><code>app_build</code> APP 版本号, 如 <code>7380300</code>.</li><li><code>app_build_inner</code> APP 版本号(内部), 如 <code>7380310</code>. 实际应用中设置为 <code>app_build</code> 即可.</li></ul></li><li><code>x-bili-gaia-vtoken</code> 暂时留空.</li><li><code>x-bili-aurora-eid</code> 如 <code>UFUFQ1AA</code>. 算法见附录. 未登录留空. <strong>必需</strong>.</li><li><code>x-bili-mid</code> 用户 UID, 未登录默认为 0. <strong>必需</strong>.</li><li><code>x-bili-aurora-zone</code> 留空. <strong>必需</strong>.</li><li><code>x-bili-trace-id</code> 如 <code>06e903399574695df75be114ff63ac64:f75be114ff63ac64:0:0</code>. 算法见附录. <strong>必需</strong>.</li><li><code>authorization</code> 鉴权, 登录时设定为 <code>identify_v1 {access_key}</code>, 未登录时无需此项.</li><li><code>buvid</code> 设备唯一标识, 算法见 <a class="route-link" href="/bilibili-API-collect/docs/misc/device_identity.html">device_identity.md</a>. <strong>必需(?)</strong>.</li><li><code>bili-http-engine</code> 恒定为 <code>cronet</code>, 使用 <code>grpc.biliapi.net</code> 作为 gRPC 主机时无需此项.</li><li><code>te</code> 恒定为 <code>trailers</code>, Java gRPC 库固定添加, 使用 <code>app.bilibili.com</code> 作为 gRPC 主机时无需此项.</li></ul></li><li>Binary 类 <ul><li><code>x-bili-fawkes-req-bin</code> 设备 Fawkes 信息, 使用 <a href="bilibili/metadata/fawkes/fawkes.proto">FawkesReq</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-metadata-bin</code> 使用 <a href="bilibili/metadata/metadata.proto">Metadata</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-device-bin</code> 设备信息, 使用 <a href="bilibili/metadata/device/device.proto">Device</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-network-bin</code> 设备网络信息, 使用 <a href="bilibili/metadata/network/network.proto">Network</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-restriction-bin</code> 限制信息, 使用 <a href="bilibili/metadata/restriction/restriction.proto">Restriction</a> 生成. 本项一般直接传空值即可. <strong>必需</strong>.</li><li><code>x-bili-locale-bin</code> 设备区域信息, 使用 <a href="bilibili/metadata/locale/locale.proto">Locale</a> 生成. <strong>必需</strong>.</li><li><code>x-bili-exps-bin</code> 使用 <a href="bilibili/metadata/pararbox/pararbox.proto">Exps</a> 生成. 本项一般直接传空值即可. <strong>必需</strong>.</li></ul></li></ul><h2 id="接口请求定义" tabindex="-1"><a class="header-anchor" href="#接口请求定义"><span>接口请求定义</span></a></h2><p>等待补充, 参见 proto 文件注释. 以下仅介绍常用接口:</p><ul><li><a href="bilibili/app/playeronline/v1/playeronline.proto">bilibili.app.playeronline.v1 -> PlayerOnline</a> 视频在线人数接口.</li><li><a href="bilibili/app/playerunite/v1/playerunite.proto">bilibili.app.playerunite.v1 -> PlayViewUnite</a> United 视频播放链接接口(同时适用于 PGC, UGC 视频).</li><li><a href="bilibili/app/playurl/v1/playurl.proto">bilibili.app.playurl.v1 -> PlayURL</a> UGC 视频播放链接接口(V1 版本).</li><li><a href="bilibili/pgc/gateway/player/v1/playurl.proto">bilibili.pgc.gateway.player.v1 -> PlayView</a> PGC 视频播放链接接口(V1 版本).</li><li><a href="bilibili/pgc/gateway/player/v2/playurl.proto">bilibili.pgc.gateway.player.v2 -> PlayView</a> PGC 视频播放链接接口(V2 版本).</li><li><a href="bilibili/polymer/app/search/v1/search.proto">bilibili.polymer.app.search.v1 -> SearchAll, etc</a> 搜索接口(V1 版本).</li><li><a href="bilibili/app/dynamic/v2/dynamic.proto">bilibili.app.dynamic.v2 -> DynAll, etc</a> 动态接口(V2 版本).</li><li>...</li></ul><h2 id="应用示例" tabindex="-1"><a class="header-anchor" href="#应用示例"><span>应用示例</span></a></h2><h3 id="golang" tabindex="-1"><a class="header-anchor" href="#golang"><span>Golang</span></a></h3><p>B 站 gRPC API Golang 封装:<a href="https://github.com/XiaoMiku01/bilibili-grpc-api-go" target="_blank" rel="noopener noreferrer">XiaoMiku01/bilibili-grpc-api-go</a></p><h2 id="附录" tabindex="-1"><a class="header-anchor" href="#附录"><span>附录</span></a></h2><details><summary>点此展开</summary><h3 id="x-bili-aurora-eid-生成算法" tabindex="-1"><a class="header-anchor" href="#x-bili-aurora-eid-生成算法"><span><code>x-bili-aurora-eid</code> 生成算法</span></a></h3><div class="language-rust line-numbers-mode" data-highlighter="shiki" data-ext="rust" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-rust"><span class="line"><span style="color:#569CD6;">pub</span><span style="color:#569CD6;"> fn</span><span style="color:#DCDCAA;"> gen_aurora_eid</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">uid</span><span style="color:#D4D4D4;">: </span><span style="color:#4EC9B0;">u64</span><span style="color:#D4D4D4;">) -> </span><span style="color:#4EC9B0;">Option</span><span style="color:#D4D4D4;"><</span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;">> {</span></span>
|
||
<span class="line"><span style="color:#C586C0;"> if</span><span style="color:#9CDCFE;"> uid</span><span style="color:#D4D4D4;"> == </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#C586C0;"> return</span><span style="color:#4EC9B0;"> None</span><span style="color:#D4D4D4;">;</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> result_byte</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">Vec</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">with_capacity</span><span style="color:#D4D4D4;">(</span><span style="color:#B5CEA8;">64</span><span style="color:#D4D4D4;">);</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 1. 将 UID 字符串转为字节数组.</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#9CDCFE;"> mid_byte</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">uid</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">to_string</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">into_bytes</span><span style="color:#D4D4D4;">();</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 2. 将字节数组逐位(记为第 i 位)与 b"ad1va46a7lza" 中第 (i % 12) 位进行异或操作, 作为结果数组第 i 位.</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> mid_byte</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">iter</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">enumerate</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">for_each</span><span style="color:#D4D4D4;">(|(</span><span style="color:#9CDCFE;">i</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">v</span><span style="color:#D4D4D4;">)| {</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> result_byte</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">v</span><span style="color:#D4D4D4;"> ^ (</span><span style="color:#CE9178;">b"ad1va46a7lza"</span><span style="color:#D4D4D4;">[</span><span style="color:#9CDCFE;">i</span><span style="color:#D4D4D4;"> % </span><span style="color:#B5CEA8;">12</span><span style="color:#D4D4D4;">]))</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> });</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 3. 对字节数组执行 Base64 编码, 注意 no padding, 即得到 x-bili-aurora-eid.</span></span>
|
||
<span class="line"><span style="color:#4EC9B0;"> Some</span><span style="color:#D4D4D4;">(</span><span style="color:#4EC9B0;">base64</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">Engine</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">encode</span><span style="color:#D4D4D4;">(</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> &</span><span style="color:#4EC9B0;">base64</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">engine</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">general_purpose</span><span style="color:#D4D4D4;">::STANDARD_NO_PAD,</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> result_byte</span><span style="color:#D4D4D4;">,</span></span>
|
||
<span class="line"><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 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="x-bili-trace-id-生成算法" tabindex="-1"><a class="header-anchor" href="#x-bili-trace-id-生成算法"><span><code>x-bili-trace-id</code> 生成算法</span></a></h3><div class="language-rust line-numbers-mode" data-highlighter="shiki" data-ext="rust" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-rust"><span class="line"><span style="color:#569CD6;">pub</span><span style="color:#569CD6;"> fn</span><span style="color:#DCDCAA;"> gen_trace_id</span><span style="color:#D4D4D4;">() -> </span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 1. 生成 32 位随机字符串 random_id , Charset 为 0~9, a~z. </span></span>
|
||
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#9CDCFE;"> random_id</span><span style="color:#D4D4D4;"> = </span><span style="color:#DCDCAA;">gen_random_string!</span><span style="color:#D4D4D4;">(</span><span style="color:#B5CEA8;">32</span><span style="color:#D4D4D4;">);</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> random_trace_id</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">with_capacity</span><span style="color:#D4D4D4;">(</span><span style="color:#B5CEA8;">40</span><span style="color:#D4D4D4;">);</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 2. 取 random_id 前 24 位, 作为 random_trace_id.</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> random_trace_id</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&</span><span style="color:#9CDCFE;">random_id</span><span style="color:#D4D4D4;">[</span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">24</span><span style="color:#D4D4D4;">]);</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 3. 初始化一个长度为 3 的数组 b_arr, 初始值都为 0.</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> b_arr</span><span style="color:#D4D4D4;">: [</span><span style="color:#4EC9B0;">i8</span><span style="color:#D4D4D4;">; </span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">] = [</span><span style="color:#B5CEA8;">0</span><span style="color:#4EC9B0;">i8</span><span style="color:#D4D4D4;">; </span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">];</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 并获取当前时间戳</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> ts</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">chrono</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">Local</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">now</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">timestamp</span><span style="color:#D4D4D4;">();</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 使用循环从高位到低位遍历 b_arr 数组, 循环体内执行以下逻辑:</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // - 首先将 ts 右移 8 位</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // - 然后根据条件向 b_arr 的第 i 位赋值: </span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // - 如果 (ts / 128) % 2的结果为0, 则 b_arr[i] = ts % 256</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // - 否则 b_arr[i] = ts % 256 - 256</span></span>
|
||
<span class="line"><span style="color:#C586C0;"> for</span><span style="color:#9CDCFE;"> i</span><span style="color:#569CD6;"> in</span><span style="color:#D4D4D4;"> (</span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">).</span><span style="color:#DCDCAA;">rev</span><span style="color:#D4D4D4;">() {</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> ts</span><span style="color:#D4D4D4;"> >>= </span><span style="color:#B5CEA8;">8</span><span style="color:#D4D4D4;">;</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> b_arr</span><span style="color:#D4D4D4;">[</span><span style="color:#9CDCFE;">i</span><span style="color:#D4D4D4;">] = {</span></span>
|
||
<span class="line"><span style="color:#C586C0;"> if</span><span style="color:#D4D4D4;"> ((</span><span style="color:#9CDCFE;">ts</span><span style="color:#D4D4D4;"> / </span><span style="color:#B5CEA8;">128</span><span style="color:#D4D4D4;">) % </span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">) == </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> (</span><span style="color:#9CDCFE;">ts</span><span style="color:#D4D4D4;"> % </span><span style="color:#B5CEA8;">256</span><span style="color:#D4D4D4;">) </span><span style="color:#569CD6;">as</span><span style="color:#4EC9B0;"> i8</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> } </span><span style="color:#C586C0;">else</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> (</span><span style="color:#9CDCFE;">ts</span><span style="color:#D4D4D4;"> % </span><span style="color:#B5CEA8;">256</span><span style="color:#D4D4D4;"> - </span><span style="color:#B5CEA8;">256</span><span style="color:#D4D4D4;">) </span><span style="color:#569CD6;">as</span><span style="color:#4EC9B0;"> i8</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 style="color:#6A9955;"> // 4. 将数组 b_arr 中的每个元素逐个转换为两位的十六进制字符串并追加到 random_trace_id 中.</span></span>
|
||
<span class="line"><span style="color:#C586C0;"> for</span><span style="color:#9CDCFE;"> i</span><span style="color:#569CD6;"> in</span><span style="color:#B5CEA8;"> 0</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;"> {</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> random_trace_id</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&</span><span style="color:#DCDCAA;">format!</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">"{:0>2x}"</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">b_arr</span><span style="color:#D4D4D4;">[</span><span style="color:#9CDCFE;">i</span><span style="color:#D4D4D4;">]))</span></span>
|
||
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 5. 将 random_id 的第 31, 32 个字符追加到 random_trace_id 中, 此时 random_trace_id 生成完毕, 应当为 32 位长度.</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> random_trace_id</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&</span><span style="color:#9CDCFE;">random_id</span><span style="color:#D4D4D4;">[</span><span style="color:#B5CEA8;">30</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">32</span><span style="color:#D4D4D4;">]);</span></span>
|
||
<span class="line"><span style="color:#6A9955;"> // 6. 最后, 按 `{random_trace_id}:{random_trace_id[16..32]}:0:0` 的顺序拼接起来, 即为 x-bili-trace-id</span></span>
|
||
<span class="line"><span style="color:#569CD6;"> let</span><span style="color:#569CD6;"> mut</span><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">with_capacity</span><span style="color:#D4D4D4;">(</span><span style="color:#B5CEA8;">64</span><span style="color:#D4D4D4;">);</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&</span><span style="color:#9CDCFE;">random_trace_id</span><span style="color:#D4D4D4;">);</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">":"</span><span style="color:#D4D4D4;">);</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(&</span><span style="color:#9CDCFE;">random_trace_id</span><span style="color:#D4D4D4;">[</span><span style="color:#B5CEA8;">16</span><span style="color:#D4D4D4;">..</span><span style="color:#B5CEA8;">32</span><span style="color:#D4D4D4;">]);</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">push_str</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">":0:0"</span><span style="color:#D4D4D4;">);</span></span>
|
||
<span class="line"><span style="color:#9CDCFE;"> random_trace_id_final</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 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></details></div><!--[--><!--]--></div><footer class="vp-page-meta"><div class="vp-meta-item edit-link"><a class="auto-link external-link label" href="https://github.com/SocialSisterYi/bilibili-API-collect/edit/master/grpc_api/readme.md" aria-label="在 GitHub 上编辑此页" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><svg class="edit-icon" viewbox="0 0 1024 1024"><g fill="currentColor"><path d="M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"></path><path d="M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"></path></g></svg><!--]--><!--]-->在 GitHub 上编辑此页<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-meta-item git-info"><div class="vp-meta-item last-updated"><span class="meta-item-label">最近更新: </span><time class="meta-item-info" datetime="2023-07-14T04:46:41.000Z" data-allow-mismatch>2023/7/14 04:46</time></div><div class="vp-meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: 45892418+SocialSisterYi@users.noreply.github.com">SocialSisterYi</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: loveava0612@outlook.com">XiaoMiku01</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: 70561268+cxw620@users.noreply.github.com">cxw620</span><!----><!--]--><!--]--></span></div></div></footer><!----><!--[--><!--[--><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><!--]--><!--]--></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
|
||
<script type="module" src="/bilibili-API-collect/assets/app-CDdN0tOz.js" defer></script>
|
||
</body>
|
||
</html>
|