From 7d89ece2ac46425810647c4ac92acf5f3721cb68 Mon Sep 17 00:00:00 2001 From: SocialSisterYi <1440239038@qq.com> Date: Wed, 22 Feb 2023 01:00:06 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=E8=B0=83=E6=95=B4=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vuepress/public/logo2.jpg | Bin 0 -> 17236 bytes .vuepress/theme/index.js | 3 + .vuepress/theme/layouts/Layout.vue | 21 + assets/img/2233login.png | Bin 0 -> 45074 bytes assets/img/activit.svg | 3 + assets/img/add.svg | 20 + assets/img/akari.jpg | Bin 0 -> 8992 bytes assets/img/ban.png | Bin 0 -> 5472 bytes assets/img/battery-100.png | Bin 0 -> 6261 bytes assets/img/bilibili.svg | 44 + assets/img/blackroom.svg | 1 + assets/img/channel.svg | 6 + assets/img/class.svg | 7 + assets/img/coin.svg | 7 + assets/img/collect.svg | 9 + assets/img/comment.svg | 7 + assets/img/delete.svg | 9 + assets/img/download.svg | 7 + assets/img/fav.svg | 6 + assets/img/follow.svg | 23 + assets/img/history.png | Bin 0 -> 2400 bytes assets/img/home.svg | 6 + assets/img/like.svg | 5 + assets/img/live.svg | 1 + assets/img/loadTV.gif | Bin 0 -> 10013 bytes assets/img/logo.png | Bin 0 -> 257403 bytes assets/img/logo2.jpg | Bin 0 -> 17236 bytes assets/img/musicplus.svg | 1 + assets/img/ploading.gif | Bin 0 -> 4610 bytes assets/img/ranking.svg | 4 + assets/img/read.svg | 1 + assets/img/relation.svg | 10 + assets/img/share.svg | 5 + assets/img/sponsorQR.jpg | Bin 0 -> 706776 bytes assets/img/sub.svg | 5 + assets/img/tebietuijian.svg | 1 + assets/img/topic.svg | 1 + assets/img/toview.png | Bin 0 -> 724 bytes assets/img/tuiguang.svg | 1 + assets/img/video_up.svg | 6 + assets/zone_icon/ad.svg | 14 + assets/zone_icon/animal.svg | 11 + assets/zone_icon/anime.svg | 16 + assets/zone_icon/car.svg | 20 + assets/zone_icon/cinephile.svg | 14 + assets/zone_icon/comic.svg | 20 + assets/zone_icon/dance.svg | 10 + assets/zone_icon/digital.svg | 13 + assets/zone_icon/documentary.svg | 31 + assets/zone_icon/douga.svg | 14 + assets/zone_icon/ent.svg | 17 + assets/zone_icon/fashion.svg | 11 + assets/zone_icon/food.svg | 32 + assets/zone_icon/game.svg | 9 + assets/zone_icon/guochuang.svg | 11 + assets/zone_icon/information.svg | 17 + assets/zone_icon/kichiku.svg | 16 + assets/zone_icon/knowledge.svg | 18 + assets/zone_icon/life.svg | 8 + assets/zone_icon/movie.svg | 11 + assets/zone_icon/music.svg | 11 + assets/zone_icon/sports.svg | 8 + assets/zone_icon/tech.svg | 12 + assets/zone_icon/teleplay.svg | 11 + docs/APP_widget/splash.md | 572 ++ docs/album/action.md | 176 + docs/album/activity_list.md | 152 + docs/album/info.md | 249 + docs/album/list.md | 2442 ++++++++ docs/album/recommend_author.md | 171 + docs/article/articles.md | 315 + docs/article/category.md | 81 + docs/article/info.md | 186 + docs/article/like_coin_fav.md | 178 + docs/article/list.md | 677 ++ docs/audio/action.md | 154 + docs/audio/info.md | 432 ++ docs/audio/music_list.md | 790 +++ docs/audio/musicstream_url.md | 282 + docs/audio/status_number.md | 67 + docs/bangumi/follow.md | 129 + docs/bangumi/info.md | 1029 +++ docs/bangumi/timeline.md | 804 +++ docs/bangumi/videostream_url.md | 366 ++ docs/blackroom/banlist.md | 304 + docs/blackroom/jury/action.md | 367 ++ docs/blackroom/jury/base_info.md | 338 + docs/blackroom/jury/judgement_info.md | 998 +++ docs/broadcast/readme.md | 184 + docs/broadcast/video_room.md | 152 + docs/cheese/info.md | 645 ++ docs/cheese/videostream_url.md | 226 + docs/clientinfo/client_info.md | 95 + docs/clientinfo/ip.md | 66 + docs/comment/action.md | 544 ++ docs/comment/list.md | 5853 +++++++++++++++++ docs/comment/readme.md | 336 + docs/creativecenter/railgun.md | 275 + docs/creativecenter/statistics&data.md | 811 +++ docs/danmaku/action.md | 822 +++ docs/danmaku/buzzword.md | 513 ++ docs/danmaku/config.md | 75 + docs/danmaku/danmaku_proto.md | 111 + docs/danmaku/danmaku_view_proto.md | 298 + docs/danmaku/danmaku_xml.md | 153 + docs/danmaku/history.md | 246 + docs/danmaku/snapshot.md | 92 + docs/dynamic/action.md | 109 + docs/dynamic/atlist.md | 146 + docs/dynamic/basicInfo.md | 1586 +++++ docs/dynamic/card_info.md | 487 ++ docs/dynamic/content.md | 1039 ++++ docs/dynamic/get_dynamic_detail.md | 601 ++ docs/dynamic/publish.md | 881 +++ docs/dynamic/tag_dynamics.md | 7934 ++++++++++++++++++++++++ docs/electric/Bcoin.md | 331 + docs/electric/WeChat&Alipay.md | 207 + docs/electric/charge_list.md | 530 ++ docs/electric/charge_msg.md | 303 + docs/emoji/action.md | 110 + docs/emoji/list.md | 646 ++ docs/fav/action.md | 482 ++ docs/fav/info.md | 415 ++ docs/fav/list.md | 570 ++ docs/garb/color.md | 316 + docs/garb/skin.md | 272 + docs/history&toview/history.md | 850 +++ docs/history&toview/toview.md | 470 ++ docs/live/info.md | 971 +++ docs/live/live_area.md | 214 + docs/live/live_stream.md | 160 + docs/live/manage.md | 266 + docs/live/message_stream.md | 2336 +++++++ docs/live/redpocket.md | 130 + docs/live/user.md | 363 ++ docs/login/exit.md | 72 + docs/login/login_action/QR.md | 636 ++ docs/login/login_action/SMS.md | 258 + docs/login/login_action/password.md | 499 ++ docs/login/login_action/readme.md | 99 + docs/login/login_info.md | 569 ++ docs/login/login_notice.md | 74 + docs/login/member_center.md | 675 ++ docs/manga/Activity.md | 79 + docs/manga/ClockIn.md | 217 + docs/manga/Comic.md | 4223 +++++++++++++ docs/manga/Download.md | 256 + docs/manga/Season.md | 439 ++ docs/manga/User.md | 730 +++ docs/manga/index_file.md | 277 + docs/manga/light_card.md | 204 + docs/manga/point_shop.md | 451 ++ docs/message/msg.md | 65 + docs/message/private_msg.md | 374 ++ docs/newbie_exam/action.md | 456 ++ docs/newbie_exam/fetch.md | 263 + docs/newbie_exam/info.md | 556 ++ docs/note/action.md | 135 + docs/note/info.md | 315 + docs/note/list.md | 660 ++ docs/note/readme.md | 159 + docs/other/API_sign.md | 84 + docs/other/bvid_desc.md | 389 ++ docs/other/errcode.md | 65 + docs/other/picture.md | 44 + docs/other/time_stamp.md | 79 + docs/ranking&dynamic/85videos.md | 199 + docs/ranking&dynamic/dynamic.md | 199 + docs/ranking&dynamic/popular.md | 1298 ++++ docs/ranking&dynamic/ranking.md | 959 +++ docs/search/hot.md | 569 ++ docs/search/search_request.md | 1443 +++++ docs/search/search_response.md | 778 +++ docs/search/suggest.md | 185 + docs/user/check_nickname.md | 137 + docs/user/contract.md | 131 + docs/user/info.md | 1229 ++++ docs/user/register.md | 102 + docs/user/relation.md | 2450 ++++++++ docs/user/space.md | 4832 +++++++++++++++ docs/user/status_number.md | 311 + docs/video/action.md | 830 +++ docs/video/appeal.md | 306 + docs/video/attribute_data.md | 71 + docs/video/info.md | 3373 ++++++++++ docs/video/interact_video.md | 375 ++ docs/video/online.md | 146 + docs/video/pbp.md | 75 + docs/video/recommend.md | 294 + docs/video/report.md | 149 + docs/video/snapshot.md | 329 + docs/video/status_number.md | 202 + docs/video/tags.md | 316 + docs/video/video_zone.md | 322 + docs/video/videostream_url.md | 1288 ++++ docs/vip/action.md | 52 + docs/vip/center.md | 2079 +++++++ docs/vip/clockin.md | 68 + docs/vip/info.md | 120 + docs/web_widget/404_manga.md | 189 + docs/web_widget/zone_upload.md | 100 + 201 files changed, 84964 insertions(+) create mode 100644 .vuepress/public/logo2.jpg create mode 100644 .vuepress/theme/index.js create mode 100644 .vuepress/theme/layouts/Layout.vue create mode 100644 assets/img/2233login.png create mode 100644 assets/img/activit.svg create mode 100644 assets/img/add.svg create mode 100644 assets/img/akari.jpg create mode 100644 assets/img/ban.png create mode 100644 assets/img/battery-100.png create mode 100644 assets/img/bilibili.svg create mode 100644 assets/img/blackroom.svg create mode 100644 assets/img/channel.svg create mode 100644 assets/img/class.svg create mode 100644 assets/img/coin.svg create mode 100644 assets/img/collect.svg create mode 100644 assets/img/comment.svg create mode 100644 assets/img/delete.svg create mode 100644 assets/img/download.svg create mode 100644 assets/img/fav.svg create mode 100644 assets/img/follow.svg create mode 100644 assets/img/history.png create mode 100644 assets/img/home.svg create mode 100644 assets/img/like.svg create mode 100644 assets/img/live.svg create mode 100644 assets/img/loadTV.gif create mode 100644 assets/img/logo.png create mode 100644 assets/img/logo2.jpg create mode 100644 assets/img/musicplus.svg create mode 100644 assets/img/ploading.gif create mode 100644 assets/img/ranking.svg create mode 100644 assets/img/read.svg create mode 100644 assets/img/relation.svg create mode 100644 assets/img/share.svg create mode 100644 assets/img/sponsorQR.jpg create mode 100644 assets/img/sub.svg create mode 100644 assets/img/tebietuijian.svg create mode 100644 assets/img/topic.svg create mode 100644 assets/img/toview.png create mode 100644 assets/img/tuiguang.svg create mode 100644 assets/img/video_up.svg create mode 100644 assets/zone_icon/ad.svg create mode 100644 assets/zone_icon/animal.svg create mode 100644 assets/zone_icon/anime.svg create mode 100644 assets/zone_icon/car.svg create mode 100644 assets/zone_icon/cinephile.svg create mode 100644 assets/zone_icon/comic.svg create mode 100644 assets/zone_icon/dance.svg create mode 100644 assets/zone_icon/digital.svg create mode 100644 assets/zone_icon/documentary.svg create mode 100644 assets/zone_icon/douga.svg create mode 100644 assets/zone_icon/ent.svg create mode 100644 assets/zone_icon/fashion.svg create mode 100644 assets/zone_icon/food.svg create mode 100644 assets/zone_icon/game.svg create mode 100644 assets/zone_icon/guochuang.svg create mode 100644 assets/zone_icon/information.svg create mode 100644 assets/zone_icon/kichiku.svg create mode 100644 assets/zone_icon/knowledge.svg create mode 100644 assets/zone_icon/life.svg create mode 100644 assets/zone_icon/movie.svg create mode 100644 assets/zone_icon/music.svg create mode 100644 assets/zone_icon/sports.svg create mode 100644 assets/zone_icon/tech.svg create mode 100644 assets/zone_icon/teleplay.svg create mode 100644 docs/APP_widget/splash.md create mode 100644 docs/album/action.md create mode 100644 docs/album/activity_list.md create mode 100644 docs/album/info.md create mode 100644 docs/album/list.md create mode 100644 docs/album/recommend_author.md create mode 100644 docs/article/articles.md create mode 100644 docs/article/category.md create mode 100644 docs/article/info.md create mode 100644 docs/article/like_coin_fav.md create mode 100644 docs/article/list.md create mode 100644 docs/audio/action.md create mode 100644 docs/audio/info.md create mode 100644 docs/audio/music_list.md create mode 100644 docs/audio/musicstream_url.md create mode 100644 docs/audio/status_number.md create mode 100644 docs/bangumi/follow.md create mode 100644 docs/bangumi/info.md create mode 100644 docs/bangumi/timeline.md create mode 100644 docs/bangumi/videostream_url.md create mode 100644 docs/blackroom/banlist.md create mode 100644 docs/blackroom/jury/action.md create mode 100644 docs/blackroom/jury/base_info.md create mode 100644 docs/blackroom/jury/judgement_info.md create mode 100644 docs/broadcast/readme.md create mode 100644 docs/broadcast/video_room.md create mode 100644 docs/cheese/info.md create mode 100644 docs/cheese/videostream_url.md create mode 100644 docs/clientinfo/client_info.md create mode 100644 docs/clientinfo/ip.md create mode 100644 docs/comment/action.md create mode 100644 docs/comment/list.md create mode 100644 docs/comment/readme.md create mode 100644 docs/creativecenter/railgun.md create mode 100644 docs/creativecenter/statistics&data.md create mode 100644 docs/danmaku/action.md create mode 100644 docs/danmaku/buzzword.md create mode 100644 docs/danmaku/config.md create mode 100644 docs/danmaku/danmaku_proto.md create mode 100644 docs/danmaku/danmaku_view_proto.md create mode 100644 docs/danmaku/danmaku_xml.md create mode 100644 docs/danmaku/history.md create mode 100644 docs/danmaku/snapshot.md create mode 100644 docs/dynamic/action.md create mode 100644 docs/dynamic/atlist.md create mode 100644 docs/dynamic/basicInfo.md create mode 100644 docs/dynamic/card_info.md create mode 100644 docs/dynamic/content.md create mode 100644 docs/dynamic/get_dynamic_detail.md create mode 100644 docs/dynamic/publish.md create mode 100644 docs/dynamic/tag_dynamics.md create mode 100644 docs/electric/Bcoin.md create mode 100644 docs/electric/WeChat&Alipay.md create mode 100644 docs/electric/charge_list.md create mode 100644 docs/electric/charge_msg.md create mode 100644 docs/emoji/action.md create mode 100644 docs/emoji/list.md create mode 100644 docs/fav/action.md create mode 100644 docs/fav/info.md create mode 100644 docs/fav/list.md create mode 100644 docs/garb/color.md create mode 100644 docs/garb/skin.md create mode 100644 docs/history&toview/history.md create mode 100644 docs/history&toview/toview.md create mode 100644 docs/live/info.md create mode 100644 docs/live/live_area.md create mode 100644 docs/live/live_stream.md create mode 100644 docs/live/manage.md create mode 100644 docs/live/message_stream.md create mode 100644 docs/live/redpocket.md create mode 100644 docs/live/user.md create mode 100644 docs/login/exit.md create mode 100644 docs/login/login_action/QR.md create mode 100644 docs/login/login_action/SMS.md create mode 100644 docs/login/login_action/password.md create mode 100644 docs/login/login_action/readme.md create mode 100644 docs/login/login_info.md create mode 100644 docs/login/login_notice.md create mode 100644 docs/login/member_center.md create mode 100644 docs/manga/Activity.md create mode 100644 docs/manga/ClockIn.md create mode 100644 docs/manga/Comic.md create mode 100644 docs/manga/Download.md create mode 100644 docs/manga/Season.md create mode 100644 docs/manga/User.md create mode 100644 docs/manga/index_file.md create mode 100644 docs/manga/light_card.md create mode 100644 docs/manga/point_shop.md create mode 100644 docs/message/msg.md create mode 100644 docs/message/private_msg.md create mode 100644 docs/newbie_exam/action.md create mode 100644 docs/newbie_exam/fetch.md create mode 100644 docs/newbie_exam/info.md create mode 100644 docs/note/action.md create mode 100644 docs/note/info.md create mode 100644 docs/note/list.md create mode 100644 docs/note/readme.md create mode 100644 docs/other/API_sign.md create mode 100644 docs/other/bvid_desc.md create mode 100644 docs/other/errcode.md create mode 100644 docs/other/picture.md create mode 100644 docs/other/time_stamp.md create mode 100644 docs/ranking&dynamic/85videos.md create mode 100644 docs/ranking&dynamic/dynamic.md create mode 100644 docs/ranking&dynamic/popular.md create mode 100644 docs/ranking&dynamic/ranking.md create mode 100644 docs/search/hot.md create mode 100644 docs/search/search_request.md create mode 100644 docs/search/search_response.md create mode 100644 docs/search/suggest.md create mode 100644 docs/user/check_nickname.md create mode 100644 docs/user/contract.md create mode 100644 docs/user/info.md create mode 100644 docs/user/register.md create mode 100644 docs/user/relation.md create mode 100644 docs/user/space.md create mode 100644 docs/user/status_number.md create mode 100644 docs/video/action.md create mode 100644 docs/video/appeal.md create mode 100644 docs/video/attribute_data.md create mode 100644 docs/video/info.md create mode 100644 docs/video/interact_video.md create mode 100644 docs/video/online.md create mode 100644 docs/video/pbp.md create mode 100644 docs/video/recommend.md create mode 100644 docs/video/report.md create mode 100644 docs/video/snapshot.md create mode 100644 docs/video/status_number.md create mode 100644 docs/video/tags.md create mode 100644 docs/video/video_zone.md create mode 100644 docs/video/videostream_url.md create mode 100644 docs/vip/action.md create mode 100644 docs/vip/center.md create mode 100644 docs/vip/clockin.md create mode 100644 docs/vip/info.md create mode 100644 docs/web_widget/404_manga.md create mode 100644 docs/web_widget/zone_upload.md diff --git a/.vuepress/public/logo2.jpg b/.vuepress/public/logo2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..199eefc2de3db52e482d78f584e7ad78dd6f5edd GIT binary patch literal 17236 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 literal 0 HcmV?d00001 diff --git a/.vuepress/theme/index.js b/.vuepress/theme/index.js new file mode 100644 index 0000000..5baed34 --- /dev/null +++ b/.vuepress/theme/index.js @@ -0,0 +1,3 @@ +module.exports = { + extend: '@vuepress/theme-default' +} \ No newline at end of file diff --git a/.vuepress/theme/layouts/Layout.vue b/.vuepress/theme/layouts/Layout.vue new file mode 100644 index 0000000..2b29082 --- /dev/null +++ b/.vuepress/theme/layouts/Layout.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/assets/img/2233login.png b/assets/img/2233login.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9ff562262bff55999c956f1765c46842219904 GIT binary patch literal 45074 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 literal 0 HcmV?d00001 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 @@ + + + \ 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 @@ + + + + + + + + + + + + + + + + + diff --git a/assets/img/akari.jpg b/assets/img/akari.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e5ea0bc912b7e8b9eb447d35ee6fe5682616ce8 GIT binary patch literal 8992 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 xueIl6DyOnNq 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 Wf8K0CAWA^W@V`*tubls&nEOBCt+wa@ literal 0 HcmV?d00001 diff --git a/assets/img/ban.png b/assets/img/ban.png new file mode 100644 index 0000000000000000000000000000000000000000..a51f5b95d53282261f3cfa7ec13f88ab4e9f655b GIT binary patch literal 5472 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 + + 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 @@ + \ 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 @@ + + + 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 @@ + + + \ 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 @@ + + + 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 @@ + + + \ 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 @@ + + + \ 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 @@ + + + \ 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 @@ + + + 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 @@ + + + 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 @@ + + + + + + + + + + diff --git a/assets/img/history.png b/assets/img/history.png new file mode 100644 index 0000000000000000000000000000000000000000..dc42b04222dada65b6a0e5902ea3b70348ab8d32 GIT binary patch literal 2400 zcmcgud2G{G9L@@2lu{UHQ5j$i6vl9DC$vNCg-)hw&UC{EKfidj&L1pyX_7K`d!ITFmEbvTFRwEoxloa8LMO29v!_dR>v2s{efnyMz_0f4R%lcJ0D22g- zmY?H-ydIXqX^KKDX582`i5|N}RhlCT*{U3Y;;Lt)r_|Vn*$Jl|vt|<{Yjm3?a5wFy zX`H1g*3E)$C$ONmPbj4YOFR>cCWFb9G|-<|%b8FhmbQ$-65t1$is5);e}jZL5VPUb zn0#8mIBDhVL@%{ozV^tG404Z8fpgv%CSNe%A^D0Dqo7VIcmZwN(9mEqr7&K%voN>j$XVZ;%O<>B zfBW>fHFwT74C$ZY^@Tdt_D}1!dFi6`v_)%IZ0VBrQ=}yHMG8OZ{UU!)YRs@LEBCsj z=`gwSPS;Jb8f-^N>8Z8r4&J@6dM?>?fc|~mg9m>dy;652cK^yd;=U=?jZ<#jK8J6s zAJcI|=Zjm@-j<>TeHX|l(k`&Y)sFflT^$D+v!-7fJipO$Vl)|R!zeHH^DoO9@#ce^ z+im2)jDm(LhM1Y&6ref{bS~(+qIbwW>eLT?&h1S*IiV_6)aTwg{?wGI^&eebd8TgQ z)p_CJrQJ_f?>t<&{TpBA?xFkJpFh$oM;U(N=pd(~*QefL&Wu^Lrpr61<W4vj{H5;u=2M=j&GxF=gUj!@6=z%D zyLq0|sT<~PtIPI_&2^?(b=kRj!_SQFeZNg;US?=QO;#Jv<)yJK=O$0eHU7}F)J3+` zKl3lIT3l2+{ra(60}swPGg_`~i*#QSO`q=hF1PB!4dSayu(P`2Y}G`U@9;$E=7h|v zHwIeA7PK3$bedc67g|AiLJJvtkwQsZ1rLu9=q145ja>iOV4twv* zrd_XBU-S3BFte%t=&b7*9fY+?O1F`>`Zo4Bx^Sbb@9L%xOJD3a^?2!2UvqkD#){wI hNs~Sw@Iff6Ib)o?vg7``L1yC{$m_{-?{dw2<8N@ZIM4t9 literal 0 HcmV?d00001 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 @@ + + + \ 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 @@ + + + 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 @@ + \ No newline at end of file diff --git a/assets/img/loadTV.gif b/assets/img/loadTV.gif new file mode 100644 index 0000000000000000000000000000000000000000..33ebcd88d63d41e8d37471924a5bcc3ea40c1649 GIT binary patch literal 10013 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 Dln&x= literal 0 HcmV?d00001 diff --git a/assets/img/logo.png b/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..57fedbddee9348599840402950661954a3be79f2 GIT binary patch literal 257403 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¨bxee%v+ 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 literal 0 HcmV?d00001 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 @@ + \ No newline at end of file diff --git a/assets/img/ploading.gif b/assets/img/ploading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a8c97d0443b2b3f17ffa6b91ad8395c939bff2f GIT binary patch literal 4610 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 E3(>4PcK`qY literal 0 HcmV?d00001 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 @@ + + + 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 @@ + \ 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 @@ + + + \ 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 @@ + + + diff --git a/assets/img/sponsorQR.jpg b/assets/img/sponsorQR.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9178ffc1a8d5ce71122c48e9e9e4e5c779f9dda6 GIT binary patch literal 706776 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 z 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 z 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�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 e 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 literal 0 HcmV?d00001 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 @@ + + + \ 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 @@ + \ 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 @@ + \ No newline at end of file diff --git a/assets/img/toview.png b/assets/img/toview.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1e0aebdeb644ad1b2ddff47df4ed27416446f9 GIT binary patch literal 724 zcmV;_0xSKAP)P000>X1^@s6#OZ}&0007;NklKu}sJmHJbCIB(=G60Ed8A+o2f?~%=>1NdTN6iW5qsnMOzSA zMk0Y(=G-3viU4;?ke_`o`SJW7%KY!7p02Q*+^RE##s-;wc8l=05dgGn3lVzbC%Jgr zQQ+~4kQwKlMe7=)8FSTXe6FVihFq9zHAn|b0SI{p@V>Y&hrfR5G})?41>jo=w3rMP z`w5Q^5g2-prM4Nl#LD=MW`tIUTw=vi+f4BD2d%%i>zV-Gt_GqjD#zF3#AK^RNODqN zNHV5f)dU9L*#&TQH4q^i2~Un76_hSLk%BUQO^xXU(IfM6x{ye4cG3E1djq5G4bg!L zP!uJ;@E3vCz&T(ipkE0x=k7ymDJ0|>KrXQYi9aB~+( \ 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 @@ + + + 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 @@ + + + + + + \ 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 @@ + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + + + + + \ 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 @@ + + + + + + \ 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 @@ + + + + + + + + \ 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 @@ + + + + + + \ 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 @@ + + + + + + + + \ 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 @@ + + + + + + + + + + + + + \ 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 @@ + + + + + + \ 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 @@ + + + + + + + \ 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 @@ + + + + + \ 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 @@ + + + + + + + + + + + + \ 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 @@ + + + + + \ 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 @@ + + + + + \ 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 @@ + + + + + + + \ 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 @@ + + + + + + + + \ 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 @@ + + + + + + + + + \ 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 @@ + + + + \ 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 @@ + + + + + \ 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 @@ + + + + + \ 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 @@ + + + + \ 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 @@ + + + + + + \ 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 @@ + + + + + \ 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..93e62de --- /dev/null +++ b/docs/APP_widget/splash.md @@ -0,0 +1,572 @@ +# APP端开屏图片 + +- [获取APP端开屏图片列表](#获取APP端开屏图片列表) +- [获取APP端开屏幕广告信息](#获取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:成功
-3:API校验密匙错误
-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' +``` + +

+查看响应示例: + +```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 + } + ] + } +} +``` + +
+ +如id=11的图片为: + +![]( https://i0.hdslb.com/bfs/archive/fe737da5cdedf9dad038e5fd30e957be8a063bc2.png ) + + +## 获取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:成功
-3:API校验密匙错误
-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' +``` + +
+查看响应示例: + +```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" + } +} +``` +
\ No newline at end of file diff --git a/docs/album/action.md b/docs/album/action.md new file mode 100644 index 0000000..774a4ab --- /dev/null +++ b/docs/album/action.md @@ -0,0 +1,176 @@ +# 相簿操作 + +- [~~点赞相簿~~](#~~点赞相簿~~) +- [~~收藏相簿~~](#~~收藏相簿~~) +- [取消收藏相簿](#取消收藏相簿) + +--- + +## ~~点赞相簿~~ + +> 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:点赞
2:取消赞 | +| csrf_token | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
1:参数错误
3:未登录
110022:已经操作过了 | +| msg | str | 错误信息 | 默认为success | +| message | str | 错误信息 | 默认为success | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ---------------------- | +| type | num | 操作方式 | 1:点赞
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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "success", + "message": "success", + "data": { + "type": 1 + } +} +``` + +
+ +## ~~收藏相簿~~ + +> 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:成功
-400:参数错误
-500:未登录
-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' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "msg": "OK", + "message": "OK", + "data": [] +} +``` + +
+ +## 取消收藏相簿 + +> 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:成功
-400:参数错误
-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' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "msg": "OK", + "message": "OK", + "data": [] +} +``` + +
\ No newline at end of file diff --git a/docs/album/activity_list.md b/docs/album/activity_list.md new file mode 100644 index 0000000..adcb2cc --- /dev/null +++ b/docs/album/activity_list.md @@ -0,0 +1,152 @@ +# 相簿活动列表 + +- [获取相簿热门活动列表](#获取相簿热门活动列表) + +--- + +## 获取相簿热门活动列表 + +> https://api.vc.bilibili.com/photo_activity/v2/Activity/list + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | --------------------------------------------- | +| type | num | 活动类型 | 非必要 | 0:全部
1:展示类
2:比赛类 | +| biz | num | 分区 | 非必要 | 0:全部
1:画友
2:摄影
默认为0 | +| page_num | num | 页码 | 非必要 | 默认为4 | +| page_size | num | 每页项数 | 非必要 | 默认为0 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------ | +| code | num | 返回值 | 0:成功
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:展示类
2:比赛类 | +| biz | num | 所属分区 | 1:画友
2:摄影 | +| tag | str | 活动关联的TAG | | +| start_time | num | 开始时间 | 时间戳 | +| end_time | num | 结束时间 | 时间戳 | +| desc | str | 备注 | | +| desc_type | num | 活动状态 | 1:已结束
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' +``` + +
+查看响应示例: + + +```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 + } + ] + } +} +``` + +
\ No newline at end of file diff --git a/docs/album/info.md b/docs/album/info.md new file mode 100644 index 0000000..8a1e46b --- /dev/null +++ b/docs/album/info.md @@ -0,0 +1,249 @@ +# 相簿基本信息 + +- [获取相簿详细信息](#获取相簿详细信息) + +--- + +## 获取相簿详细信息 + +>https://api.vc.bilibili.com/link_draw/v1/doc/detail + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | ---- | +| doc_id | num | 目标相簿id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------- | +| code | num | 返回值 | 0:成功
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:无
1:月度大会员
2:年度及以上大会员 | +| vipDueDate | num | 会员到期时间 | 毫秒 时间戳 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 会员开通状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +`data`中的`item`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ------------------ | ------------------------------------------------------------ | +| biz | num | 相簿分区 | 1:画友
2:摄影
3:日常 | +| doc_id | num | 相簿id | | +| poster_uid | num | 作者mid | | +| category | str | 子分区标识 | cos:cosplay
daily:日常
illustration:插画
comic:漫画
draw:其他
sifu:私服 | +| type | num | 相簿类型 | 0:原创
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)
否则恒为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)
否则恒为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:不设置转载权限
1:开放授权-署名-非商用转载
2:作者授权-署名-非商用转载
3:禁止转载 | + +**示例:** + +查询相簿`id=99184721`的详细信息 + +```shell +curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/detail' \ +--data-urlencode 'doc_id=99184721' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + + +```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 + } + } +} +``` + +
\ No newline at end of file diff --git a/docs/album/list.md b/docs/album/list.md new file mode 100644 index 0000000..763e534 --- /dev/null +++ b/docs/album/list.md @@ -0,0 +1,2442 @@ +# 相簿列表 + +- [获取画友首页列表](#获取画友首页列表) +- [获取摄影首页列表](#获取摄影首页列表) +- [获取画友列表](#获取画友列表) +- [获取摄影列表](#获取摄影列表) +- [获取指定用户的相簿列表](#获取指定用户的相簿列表) + +--- + +## 获取画友首页列表 + +> https://api.vc.bilibili.com/link_draw/v2/Doc/index + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | ------------------------------------------- | +| type | str | 排序方式 | 必要 | recommend:推荐
hot:最热
new:最新 | +| page_num | num | 页码 | 非必要 | 默认为1 | +| page_size | num | 每页项数 | 非必要 | 默认为45 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------ | +| code | num | 返回值 | 0:成功
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)
否则恒为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' +``` + +
+查看响应示例: + +```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 + } + } + ] + } +} +``` + +
+ +## 获取摄影首页列表 + +> 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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 获取画友列表 + +> https://api.vc.bilibili.com/link_draw/v2/Doc/list + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | ------------------------------------------------------------ | +| category | str | 类型 | 必要 | all:全部
illustration:插画
comic:漫画
draw:其他 | +| type | str | 排序方式 | 必要 | hot:最热
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' +``` + +
+查看响应示例: + +```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 + } + } + ] + } +} +``` + +
+ +## 获取摄影列表 + +> https://api.vc.bilibili.com/link_draw/v2/Photo/list + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------- | ------ | --------------------------- | +| category | str | 类型 | 必要 | cos:Cosplay
sifu:私服 | +| type | str | 排序方式 | 必要 | hot:最热
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' +``` + +
+查看响应示例: + +```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 + } + } + ] + } +} +``` + +
+ +## 获取指定用户的相簿列表 + +> https://api.vc.bilibili.com/link_draw/v1/doc/others + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------- | ------ | --------------------------------------------- | +| biz | num | 分区 | 非必要 | 0:全部
1:画友
2:摄影
默认为0 | +| poster_uid | num | 作者mid | 必要 | 默认为20 | +| page_num | num | 页码 | 非必要 | 默认为1 | +| page_size | num | 每页项数 | 非必要 | 默认为45 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------ | +| code | num | 返回值 | 0:成功
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' +``` + +
+查看响应示例: + +```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 + } + ] + } +} +``` + +
\ No newline at end of file diff --git a/docs/album/recommend_author.md b/docs/album/recommend_author.md new file mode 100644 index 0000000..6f05606 --- /dev/null +++ b/docs/album/recommend_author.md @@ -0,0 +1,171 @@ +# 相簿推荐作者 + +- [获取摄影推荐作者](#获取摄影推荐作者) +- [获取画友推荐作者](#获取画友推荐作者) + +--- + +## 获取摄影推荐作者 + +> 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' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
+ +## 获取画友推荐作者 + +> 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' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
+ diff --git a/docs/article/articles.md b/docs/article/articles.md new file mode 100644 index 0000000..8cb4ef6 --- /dev/null +++ b/docs/article/articles.md @@ -0,0 +1,315 @@ +# 文集基本信息 + +- [获取文集基本信息](#获取文集基本信息) + +--- + +## 获取文集基本信息 + +> https://api.bilibili.com/x/article/list/web/articles + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 文集rlid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无此信息 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ---------------- | ------------------------------------------------------------ | +| list | obj | 文集概览 | | +| articles | array | 文集内的文章列表 | | +| author | obj | 文集作者信息 | | +| last | obj | - | 作用尚不明确
结构与data.articles[]中相似 | +| attention | bool | 是否关注文集作者 | false:未关注
true:已关注
需要登录(Cookie)
未登录为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:未点赞
1:已点赞
需要登录(Cookie)
未登录为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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
\ No newline at end of file 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..fcf4b7e --- /dev/null +++ b/docs/article/info.md @@ -0,0 +1,186 @@ +# 专栏基本信息 + +- [获取专栏文章基本信息](#获取专栏文章基本信息) + +--- + +## 获取专栏文章基本信息 + +> https://api.bilibili.com/x/article/viewinfo + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| id | num | 专栏cvid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无此信息 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ------ | ---------------- | ------------------------------------------------------------ | +| like | num | 是否点赞 | 0:未点赞
1:已点赞
需要登录(Cookie)
未登录为0 | +| attention | bool | 是否关注文章作者 | false:未关注
true:已关注
需要登录(Cookie)
未登录为false | +| favorite | bool | 是否收藏 | false:未收藏
true:已收藏
需要登录(Cookie)
未登录为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:否
true:是 | +| pre | num | 上一篇文章cvid | 无为0 | +| next | num | 下一篇文章cvid | 无为0 | +| share_channels | array | 分享方式列表 | | +| type | num | 文章类别 | 0:文章
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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
diff --git a/docs/article/like_coin_fav.md b/docs/article/like_coin_fav.md new file mode 100644 index 0000000..469186c --- /dev/null +++ b/docs/article/like_coin_fav.md @@ -0,0 +1,178 @@ +# 专栏投币&点赞&收藏 + +- [点赞文章](#点赞文章) +- [投币文章](#投币文章) +- [收藏文章](#收藏文章) + +--- + +## 点赞文章 + + + +> https://api.bilibili.com/x/article/like + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------- | ------ | ---------------------- | +| id | num | 文章cvid | 必要 | | +| type | num | 操作方式 | 必要 | 1:点赞
2:取消赞 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
10003:不存在该稿件
65006:已赞过
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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 投币文章 + + + +> 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:成功
-101:账号未登录
-102:账号被封停
-104:硬币不足
-111:csrf校验失败
-400:请求错误
10003:不存在该稿件
34002:不能给自己投币
34003:非法的投币数量
34005:超过投币上限 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ----------------------------------------------------- | +| like | bool | 是否点赞成功 | true:成功
false:失败
已赞过则附加点赞失败 | + +**示例:** + +为文章`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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "like": false + } +} +``` + +
+ +## 收藏文章 + + + +>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:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/article/list.md b/docs/article/list.md new file mode 100644 index 0000000..54b845d --- /dev/null +++ b/docs/article/list.md @@ -0,0 +1,677 @@ +# 获取用户专栏信息 + +- [获取用户专栏文章列表](#获取用户专栏文章列表) +- [获取用户专栏文集列表](#获取用户专栏文集列表) + +--- + +## 获取用户专栏文章列表 + +> https://api.bilibili.com/x/space/article + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**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 + } +} +``` + +
diff --git a/docs/audio/action.md b/docs/audio/action.md new file mode 100644 index 0000000..192c0fd --- /dev/null +++ b/docs/audio/action.md @@ -0,0 +1,154 @@ +# 音频投币&收藏 + +- [查询音频收藏状态](#查询音频收藏状态) +- [查询音频投币数](#查询音频投币数) +- [投币音频](#投币音频) + +--- + +## 查询音频收藏状态 + +> 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:成功
72000000:参数错误
72010002:账号未登陆
7201006:该音频不存在或已被下架 | +| msg | str | 错误信息 | 默认为success | +| data | bool | 是否收藏 | false:未收藏
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;' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "success", + "data": true +} +``` + +
+ +## 查询音频投币数 + +> 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:成功
72000000:参数错误
72010002:账号未登陆
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;' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "success", + "data": 1 +} +``` + +
+ +## 投币音频 + +> 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:成功
72000000:参数错误
72010002:账号未登陆
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;' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "0", + "data": "1" +} +``` + +
diff --git a/docs/audio/info.md b/docs/audio/info.md new file mode 100644 index 0000000..893cee8 --- /dev/null +++ b/docs/audio/info.md @@ -0,0 +1,432 @@ +# 歌曲基本信息 + +- [查询歌曲基本信息](#查询歌曲基本信息) +- [查询歌曲TAG](#查询歌曲TAG) +- [查询歌曲创作成员列表](#查询歌曲创作成员列表) +- [获取歌曲歌词](#获取歌曲歌词) + +--- + +## 查询歌曲基本信息 + +> https://www.bilibili.com/audio/music-service-c/web/song/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
72000000:参数错误
7201006:该音频不存在或已被下架
72010027:版权音乐重定向 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj
错误时: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:无
1:月会员
2:年会员 | +| status | num | 会员状态 | 0:无
1:有 | +| due_date | num | 会员到期时间 | 时间戳 毫秒 | +| vip_pay_type | num | 会员开通状态 | 0:无
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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 查询歌曲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' +``` + +
+查看响应示例: + +```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": "流行" + } + ] +} +``` + +
+ +## 查询歌曲创作成员列表 + +> 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:歌手
2:作词
3:作曲
4:编曲
5:后期/混音
7:封面制作
8:音源
9:调音
10:演奏
11:乐器
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' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
+ +## 获取歌曲歌词 + +> 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
错误时:null | lrc格式歌词信息 | 无为空 | + +**示例:** + +获取音频`au15664`的歌词信息 + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/song/lyric' \ +--data-urlencode 'sid=15664' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```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" +} +``` + +
diff --git a/docs/audio/music_list.md b/docs/audio/music_list.md new file mode 100644 index 0000000..258beb5 --- /dev/null +++ b/docs/audio/music_list.md @@ -0,0 +1,790 @@ +# 歌单&音频收藏夹详细信息 + +- [歌单&音频收藏夹详细信息](#歌单音频收藏夹详细信息) + - [查询自己创建的歌单](#查询自己创建的歌单) + - [查询音频收藏夹(默认歌单)信息](#查询音频收藏夹默认歌单信息) + - [查询热门歌单](#查询热门歌单) + - [查询热门榜单](#查询热门榜单) + +--- + +## 查询自己创建的歌单 + +> 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:成功
72000000:参数错误
72010002:未登录 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj
错误时: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:普通收藏夹
1:默认收藏夹 | +| published | num | 是否公开 | 0:不公开
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;' +``` + +共计创建了两个歌单,如下 + +
+查看响应示例: + +```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 + } + } + ] + } +} +``` + +
+ +## 查询音频收藏夹(默认歌单)信息 + +> 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:成功
72000000:参数错误
72010002:未登录 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj
错误时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | ------------------------ | ---------------------- | +| id | num | 音频收藏夹mlid | | +| uid | num | 创建用户mid | | +| uname | str | 创建用户昵称 | | +| title | str | 默认歌单 | 恒为`默认歌单` | +| type | num | 1 | 恒为`1` | +| published | num | 是否公开 | 0:不公开
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;' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ + +## 查询热门歌单 + +> https://www.bilibili.com/audio/music-service-c/web/menu/hit + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | ---- | --- | --- | +| pn | num | 页码 | 必要 | | +| ps | num | 每页项数 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | --------------------- | ---- | ----------------------------------------- | +| code | num | 返回值 | 0:成功
72000000:参数错误
72010002:未登录 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj
错误时: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:普通歌单
2:置顶歌单
5:PGC歌单 | +| off | num | 歌单是否公开 | 0:公开
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` + +
+查看响应示例: + +```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 + }] + } +} +``` + +
+ +## 查询热门榜单 + +> https://www.bilibili.com/audio/music-service-c/web/menu/rank + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | ---- | --- | --- | +| pn | num | 页码 | 必要 | | +| ps | num | 每页项数 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | --------------------- | ---- | ----------------------------------------- | +| code | num | 返回值 | 0:成功
72000000:参数错误
72010002:未登录 | +| msg | str | 错误信息 | 默认为success | +| data | 正确时:obj
错误时: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:普通歌单
2:置顶歌单
5:PGC歌单 | +| off | num | 歌单是否公开 | 0:公开
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` + +
+查看响应示例: + +```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 + }] + }] + } +} +``` + +
diff --git a/docs/audio/musicstream_url.md b/docs/audio/musicstream_url.md new file mode 100644 index 0000000..82fa2f3 --- /dev/null +++ b/docs/audio/musicstream_url.md @@ -0,0 +1,282 @@ +# 音频流URL + + + +- [获取音频流URL(无法获取付费音频)(web端)](#获取音频流url无法获取付费音频web端) +- [获取音频流URL(可获取付费音频)(双端)](#获取音频流url可获取付费音频双端) +- [音频流的获取](#音频流的获取) + +--- + +音质`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 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ----------------------------------------------------------- | +| code | num | 返回值 | 0:成功
7201006:未找到或已下架
72000000:请求错误 | +| msg | str | 错误信息 | 默认为success | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | --------- | --------------------------------------- | +| sid | num | 音频auid | | +| type | num | 音质标识 | -1:试听片段(192K)
1:192K | +| info | str | 空 | **作用尚不明确** | +| timeout | num | 有效时长 | 单位为秒
一般为3h | +| size | num | 文件大小 | 单位为字节
当`type`为-1时`size`为0 | +| cdns | array | 音频流url | | +| qualities | null | - | | +| title | null | - | | +| cover | null | - | | + +`data`对象的`cdns`数组: + + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | str | 音频流url | | +| 1 | str | 备用音频流url | | + +**示例:** + +```shell +curl -G 'https://www.bilibili.com/audio/music-service-c/web/url' \ +--data-urlencode 'sid=sid=15664' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "success", + "data": { + "sid": 15664, + "type": 1, + "info": "", + "timeout": 10800, + "size": 4853263, + "cdns": [ + "https://upos-sz-mirrorkodo.bilivideo.com/ugaxcode/7bf6a3a3e94421ccc653f005457b1e8c-192k.m4a?deadline=1595331310&gen=uga&os=kodobv&uparams=deadline,gen,os&upsig=0ecd3c7a8d9539f260239d8fa4c093db", + "https://upos-sz-mirrorks3.bilivideo.com/ugaxcode/7bf6a3a3e94421ccc653f005457b1e8c-192k.m4a?deadline=1595331310&gen=uga&os=ks3bv&uparams=deadline,gen,os&upsig=f3fe53aff56655b1b7264ae4ab65872e" + ], + "qualities": null, + "title": null, + "cover": null + } +} +``` + +
+ +## 获取音频流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:成功
7201006:未找到或已下架
72000000:请求错误 | +| msg | str | 错误信息 | 默认为success | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ----------- | ------------------------------------------------------------ | +| sid | num | 音频auid | | +| type | num | 音质标识 | -1:试听片段(192K)
0:128K
1:192K
2:320K
3:FLAC | +| info | str | 空 | **作用尚不明确** | +| timeout | num | 有效时长 | 单位为秒
一般为3h | +| size | num | 文件大小 | 单位为字节
当`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:不需要
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' +``` + +
+查看响应示例: + +```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" + } +} +``` + +
+ +## 音频流的获取 + +将`data`.`cdns`.`[0]`或`data`.`cdns`.`[1]`中的内容作为url进行GET操作 + +需要验证请求`user-agent` 不为空 + +**user-agent错误并且referer不在`*.bilibili.com`域名下的情况下会导致403 Forbidden,故无法获取** + +**以上述音频url为例:** + +```shell +wget 'https://upos-sz-mirrorkodo.bilivideo.com/ugaxcode/m190102ws2pzf6jitbem841vq2x0du5x-flac.flac?deadline=1595332269&gen=uga&os=kodobv&uparams=deadline,gen,os&upsig=ac2284d97a61ef8758681eccf621c56d' \ +-O 'Download_music.flac' +``` + +响应正文将返回一个flac文件 diff --git a/docs/audio/status_number.md b/docs/audio/status_number.md new file mode 100644 index 0000000..fa5b66c --- /dev/null +++ b/docs/audio/status_number.md @@ -0,0 +1,67 @@ +# 音频状态数 + +- [歌曲状态数](#歌曲状态数) + +--- + +## 歌曲状态数 + +>https://www.bilibili.com/audio/music-service-c/web/stat/song + +*请求方式:GET* + +唯缺投币数2333333 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ---- | +| sid | num | 音频auid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------------------------------- | +| code | num | 返回值 | 0:成功
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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "success", + "data": { + "sid": 15664, + "play": 1377390, + "collect": 44340, + "comment": 2756, + "share": 4114 + } +} +``` + +
diff --git a/docs/bangumi/follow.md b/docs/bangumi/follow.md new file mode 100644 index 0000000..e46beea --- /dev/null +++ b/docs/bangumi/follow.md @@ -0,0 +1,129 @@ +# 追番相关 + +- [追番](#追番) +- [取消追番](#取消追番) + +--- + +## 追番 +> 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:成功
-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' \ +``` + +
+ +查看响应示例: + +```json +{ + "code": 0, + "message": "success", + "result": { + "fmid": 0, + "relation": false, + "status": 2, + "toast": "自己追的番就要好好看完哟^o^" + } +} +``` +
+ +## 取消追番 + +> 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:成功
-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' \ +``` + +
+ +查看响应示例: + +```json +{ + "code": 0, + "message": "success", + "result": { + "fmid": 0, + "relation": false, + "status": 0, + "toast": "已取消追番" + } +} +``` +
diff --git a/docs/bangumi/info.md b/docs/bangumi/info.md new file mode 100644 index 0000000..857257c --- /dev/null +++ b/docs/bangumi/info.md @@ -0,0 +1,1029 @@ +# 剧集基本信息 + +- [剧集基本信息(mdid方式)](#剧集基本信息mdid方式) +- [获取剧集明细(web端)(ssid/epid方式)](#获取剧集明细web端ssidepid方式) +- [获取剧集分集信息](#获取剧集分集信息) + +--- + +## 剧集基本信息(mdid方式) + + +> https://api.bilibili.com/pgc/review/user + +*请求方式:GET* + +鉴权方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|----------|-----|--------|-----|-----| +| media_id | str | 剧集mdid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|----------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-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:番剧
2:电影
3:纪录片
4:国创
5:电视剧
6:漫画
7:综艺 | +| type_name | str | 剧集类型 | | + +`media`中的`areas`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|-----------|-----| +| 0 | obj | 地区信息1 | | +| n | obj | 地区信息(n+1) | | +| …… | obj | …… | | + +`areas`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| id | num | 所属地区编号 | 1:中国大陆
2:日本
3:美国
4:英国
5:加拿大
6:中国香港
7:中国台湾
8:韩国
9:法国
10:泰国
12:新加坡
13:西班牙
14:俄罗斯
15:德国
16:其他
17:丹麦
18:乌克兰
19:以色列
20:伊朗
24:匈牙利
22:克罗地亚
23:冰岛
24:匈牙利
25:南非
26:印尼
27:印度
30:土耳其
31:墨西哥
32:委内瑞拉
33:巴西
34:希腊
35:意大利
36:挪威
37:捷克
39:新西兰
40:智利
41:比利时
42:波兰
43:澳大利亚
44:爱尔兰
45:瑞典
46:瑞士
47:芬兰
48:苏联
49:荷兰
51:阿根廷
53:古巴
54:菲律宾
55:哈萨克斯坦 | +| 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' +``` + +
+查看响应示例: + +```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": "番剧" + } + } +} +``` + +
+ +## 获取剧集明细(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:成功
-404:错误 | +| message | str | 错误信息 | 默认为success | +| ttl | num | 1 | 作用尚不明确 | +| result | obj | 信息本体 | | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ------ | -------------------------- | ------------------------------------------ | +| activity | obj | 参与的活动 | | +| alias | str | 空 | 作用尚不明确 | +| bkg_cover | str | 网页背景图片url | 无则为空 | +| cover | str | 剧集封面图片url | | +| episodes | array | 正片剧集列表 | | +| evaluate | str | 简介 | | +| jp_title | str | 空 | 作用尚不明确 | +| link | str | 简介页面url | | +| media_id | num | 剧集mdid | | +| mode | num | 2 | 作用尚不明确 | +| new_ep | obj | 更新信息 | | +| payment | obj | 会员&付费信息 | 若无相关内容则无此项 | +| positive | obj | | | +| publish | obj | 发布信息 | | +| rating | obj | 评分信息 | 若无相关内容则无此项 | +| record | str | 备案号 | 无则为空 | +| rights | obj | 属性标志信息 | | +| season_id | num | 番剧ssid | | +| season_title | str | 剧集标题 | | +| seasons | array | 同系列所有季信息 | | +| section | array | 花絮、PV、番外等非正片内容 | 若无相关内容则无此项 | +| series | obj | 系列信息 | | +| share_copy | str | 《{标题}》+{备注} | | +| share_sub_title | str | 备注 | | +| share_url | str | 番剧播放页面url | | +| show | obj | 网页全屏标志 | | +| square_cover | str | 方形封面图片url | | +| stat | obj | 状态数 | | +| status | num | | | +| subtitle | str | 剧集副标题 | | +| title | str | 剧集标题 | | +| total | num | 总计正片集数 | 未完结:大多为-1
已完结:正整数 | +| type | num | 剧集类型 | 1:番剧
2:电影
3:纪录片
4:国创
5:电视剧
7:综艺 | +| up_info | obj | UP主信息 | 若无相关内容则无此项 | + +`result`中的`activity`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | ------------ | +| head_bg_url | str | 空 | 作用尚不明确 | +| id | num | 活动id | | +| title | str | 活动标题 | | + +`result`中的`episodes`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------ | +| 0 | obj | 正片第1集 | | +| n | obj | 正片第(n+1)集 | 按照顺序排列 | +| …… | obj | | | + +`episodes`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | --------------------------------- | -------------------- | +| aid | num | 单集稿件avid | | +| badge | str | 标签文字 | 例如`会员`、`限免`等 | +| badge_info | obj | | | +| badge_type | num | | | +| bvid | str | 单集稿件bvid | | +| cid | num | 视频cid | | +| cover | str | 单集封面url | | +| dimension | obj | 分辨率信息 | | +| from | str | | | +| id | num | 单集epid | | +| link | str | 单集网页url | | +| long_title | str | 单集完整标题 | | +| pub_time | num | 发布时间 | 时间戳 | +| pv | num | 0 | 作用尚不明确 | +| release_date | str | 空 | 作用尚不明确 | +| rights | obj | | | +| share_copy | str | 《{标题}》+第n话+{单集完整标题} | | +| share_url | str | 单集网页url | | +| short_link | str | 单集网页url短链接 | | +| status | num | | | +| subtitle | str | 单集副标题 | 观看次数文字 | +| title | str | 单集标题 | | +| vid | str | 单集vid | vupload_+{cid} | + +`result`中的`new_ep`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | ---------------- | +| desc | str | 更新备注 | | +| id | num | 最新一话epid | | +| is_new | num | 是否最新发布 | 0:否
1:是 | +| title | str | 最新一话标题 | | + +`result`中的`payment`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | ---- | ---- | +| discount | num | | | +| pay_type | obj | | | +| price | str | | | +| promotion | str | | | +| tip | str | | | +| vip_discount | num | | | +| vip_first_promotion | str | | | +| vip_promotion | str | | | + +`result`中的`positive`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---- | ---- | +| id | num | | | +| title | str | | | + +`result`中的`publish`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ---------------- | ------------------------ | +| is_finish | num | 完结状态 | 0:未完结
1:已完结 | +| is_started | num | 是否发布 | 0:未发布
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:授权
dujia:独家 | +| forbid_pre | 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 | | | +| media_id | str | | | +| new_ep | num | | | +| season_id | obj | | | +| season_title | num | | | +| season_type | str | | | +| stat | obj | | | + +`result`中的`section`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------- | ------------ | +| 0 | obj | 其他内容块1 | | +| n | obj | 其他内容块(n+1) | 按照顺序排列 | +| …… | obj | | | + +`section`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ----- | -------- | ---- | +| episode_id | num | 0 | | +| episodes | array | 板块内容 | | +| id | num | 板块id? | | +| title | str | 板块标题 | | +| type | num | ? | | + +`result`中的`series`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------ | ---- | +| series_id | num | 系列id | | +| series_title | str | 系列名 | | + +`result`中的`show`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | -------------------- | +| wide_screen | num | 是否全屏 | 0:正常
1:全屏 | + +`result`中的`stat`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ------ | ---- | +| coins | num | 投币数 | | +| danmakus | num | 弹幕数 | | +| favorites | num | 收藏数 | | +| likes | num | 点赞数 | | +| reply | num | 评论数 | | +| share | num | 分享数 | | +| views | num | 播放数 | | + +`result`中的`up_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ----------- | ---- | +| avatar | str | 头像图片url | | +| follower | num | 粉丝数 | | +| is_follow | num | 0 | | +| mid | num | UP主mid | | +| pendant | obj | | | +| theme_type | num | 0 | | +| uname | str | UP主昵称 | | +| verify_type | num | | | +| vip_status | num | | | +| vip_type | num | | | + +# 获取剧集分集信息 + +> https://api.bilibili.com/pgc/web/season/section + +*请求方式:GET* + +鉴权方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----------|-----|--------|-----|-----| +| season_id | str | 剧集ssid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-------------------| +| code | num | 返回值 | 0:成功
-404:错误 | +| message | str | 错误信息 | 默认为success | +| result | obj | 信息本体 | | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------------|-------|--------|-----| +| main_section | obj | 正片信息 | | +| section | array | 花絮、PV等 | | + +`result`中的`main_section`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-------|------------------------------|-----| +| episodes | array | 分集信息 | | +| id | num | 分组id | | +| type | num | 0:正片
1:PV&其他
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' +``` + +
+查看响应示例: + +```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 + } + ] + } +} +``` + +
\ No newline at end of file diff --git a/docs/bangumi/timeline.md b/docs/bangumi/timeline.md new file mode 100644 index 0000000..cfbe41c --- /dev/null +++ b/docs/bangumi/timeline.md @@ -0,0 +1,804 @@ +# 番剧或影视时间线 + +- [获取番剧或影视时间线](#获取番剧或影视时间线) + +--- + +## 获取番剧或影视时间线 + + +> https://api.bilibili.com/pgc/web/timeline +*请求方式:GET* + +鉴权方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------ | ------ | ----------------------------- | +| types | str | 类别 | 必要 | 1:`番剧`
3:`电影`
4:`国创` | +| before | num | 开始于前几日 | 必要 | ∈N∩[0,7] | +| after | num | 结束于后几日 | 必要 | ∈N∩[0,7] | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-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' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
\ 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..72461b8 --- /dev/null +++ b/docs/bangumi/videostream_url.md @@ -0,0 +1,366 @@ +# 视频流URL + + + +B站的番剧视频为http流媒体,需要对应的api以视频id获取取流url,并进行取流 + +- [qn视频清晰度标识](#qn视频清晰度标识) +- [fnver视频流版本标识](#fnver视频流版本标识) +- [fnval视频流格式标识](#fnval视频流格式标识) +- [视频伴音音质代码](#视频伴音音质代码) +- [获取番剧视频流URL](#获取番剧视频流URL) +- [视频的取流(web端及APP端)](#视频的取流web端及APP端) + +--- + +## qn视频清晰度标识 + +**注:该值在dash模式且非下载模式时无效** + +| 值 | 含义 | 备注 | +|-----|-------------|-----------------------------------------------------------------------------| +| 6 | 240P 极速 | 仅mp4方式支持 | +| 16 | 360P 流畅 | | +| 32 | 480P 清晰 | | +| 64 | 720P 高清 | web端默认值
B站前端需要登录才能选择,但是直接发送请求可以不登录就拿到720P的取流地址
**无720P时则为720P60** | +| 74 | 720P60 高帧率 | 需要认证登录账号 | +| 80 | 1080P 高清 | TV端与APP端默认值
需要认证登录账号 | +| 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`
大多情况需求认证大会员账号 | + +例如:请求1080P+的视频,则`qn=112` + +## fnver视频流版本标识 + +目前该值恒为0,即`fnver=0` + +## fnval视频流格式标识 + +该代码为二进制属性位,如需组合功能需要使用`OR`运算结合一下数值 + +| 值 | 含义 | 备注 | +|------|-------------|-------------------------------------------------------------| +| 0 | flv格式 | 仅H.264编码
部分老视频存在分段现象
与mp4格式及dash格式互斥 | +| 1 | mp4格式 | 仅H.264编码
不存在视频分段
与flv格式及dash格式互斥 | +| 16 | dash格式 | H.264编码或H.265编码
部分老视频的清晰度上限低于flv格式
与mp4格式及flv格式互斥 | +| 64 | 是否需求 HDR 视频 | 必须为dash格式
需要`qn=125`
大多情况需求认证大会员账号 | +| 128 | 是否需求 4K 分辨率 | 该值与`fourk`字段协同作用
需要`qn=120`
大多情况需求认证大会员账号 | +| 256 | 是否需求杜比音频 | 必须为dash格式
大多情况需求认证大会员账号 | +| 512 | 是否需求杜比视界 | 必须为dash格式
大多情况需求认证大会员账号 | +| 1024 | 是否需求 8K 分辨率 | 必须为dash格式
需要`qn=127`
大多情况需求认证大会员账号 | +| 2048 | 是否需求 av1 编码 | 必须为dash格式 | + +例如:请求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)
登录默认64(720P)
**值含义见上表**
注:dash方式无效 | +| fnval | num | 视频获取方式选择 | 非必要 | 默认为0
0 2:flv方式(可能会有分段)
1:低清mp4方式(仅240P与360P,且限速65K/s)
16 80:dash方式(音视频分流,支持H.265) | +| fnver | num | 0 | 非必要 | 固定为0 | +| fourk | num | 是否允许4K视频 | 非必要 | 默认为0
画质最高1080P:0
画质最高4K:1 | +| session | str | | 非必要 | 从视频播放页的网页源码中获取 | +| from_client | str | BROWSER | 非必要 | | +| drm_tech_type | num | 2 | 非必要 | | + + + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----------------------|------|------------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无视频 | +| message | str | 错误信息 | 成功为success | +| result | 有效时:obj
无效时: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 | 视频长度 | 单位为毫秒
不同分辨率/格式可能有略微差异 | +| accept_format | str | 视频支持的全部格式 | 每项用`,`分隔 | +| accept_description | array | 视频支持的分辨率列表 | | +| accept_quality | array | 视频支持的分辨率代码列表 | **值含义见上表** | +| 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 | 支持格式的详细信息 | | +| 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内容存在转义符**
有效时间为120min | +| backup_url | array | 备用视频流 | | + +`durl`数组中的对象中的`backup_url`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|----------------|-----------------------------------| +| 0 | str | 备用视频流url 1 | **注:url内容存在转义符**
有效时间为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 + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 视频的取流(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..ea54f6f --- /dev/null +++ b/docs/blackroom/banlist.md @@ -0,0 +1,304 @@ +# 封禁公示 + +- [获取封禁用户公示列表](#获取封禁用户公示列表) +- [封禁处理公示详情](#封禁处理公示详情) + +--- + +###### 表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 | 来源筛选 | 非必要 | 空:全部类型
`0`:系统封禁
`1`:风纪仲裁(仲裁系统升级后此类型已不再更新) | +| otype | num | 类型筛选 | 非必要 | **见[表2](#表2已知的违规类型代码)**
默认为`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`:封禁
`3`:永久封禁 | +| punishTypeName | str | 处理手段名 | | +| moralNum | num | `0`节操值 | 被封禁用户节操值均为`0` | +| blockedDays | num | 封禁天数 | 永封为`0` | +| publishStatus | num | `1` | 作用尚不明确 | +| blockedType | num | 处理来源 | `0`:系统封禁
1:风纪仲裁 | +| blockedForever | num | 是否永封 | `0`:非永封
`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' +``` + +
+查看响应示例: + +```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": "

案情:

1、大量刷屏/引战

我看新闻了,竹鼠全部被ZF无害化处理了,看的爽死我了,亏死你们,啊哈哈哈(x10)

【BV16g4y187he,2020-4-21 10:46:23~10:46:47】

2、大量人身攻击

N * * L

Deine Mu**er ist tot. (x10)

【BV1rk4y1R7id,2020-4-21 20:31:08~20:32:23】

3、引战

每次看他厨房乱七八糟的,可能有数不清的小强,你们还看美食看的有味也是奇PA

【BV1Kg4y1z7mA,2020-4-22  00:52:37】

批注:

满地狼藉招摇过,人皆愤懑怒拳握。

余恶不堪漏夜扫,正气于心涤龌龊。


(发现违规引战、人身攻击、刷屏评论,请按照相应分类进行举报。若发现反复进行上述行为,可联系工作人员反馈相关违规账号信息,我们会予以排查。)

(案例感想请发布在小黑屋评论区讨论,请勿骚扰被封禁的用户)

【本次判罚为管理员判定,请注意案件右上无蓝色标记(风纪委员众裁)】


", + "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": "

具体违规情况说明:

  1. 经查实确认,该账号从未申请从未担任过风纪委员职务。

  2. 发布多条 “您的稿件/评论涉及违规,即将下架/删除”的恐吓性言论。

  3. 谎称曾经封禁了某个up主,事实上风纪委员无法封禁up主投稿,且该up也从未被封禁。

  4. 威胁他人“要不要到小黑屋坐坐”,事实上风纪委员无法直接封禁用户。通过管理员封禁或风纪委员投票封禁的账号亦有据实申诉的机会。

  5. 故意挑衅他人“那你可以试着骂我,我们试试(举报)有没有用”。

  6. 误导他人“此评论区和弹幕无需保持礼仪”。

批注:

如您发现:假冒风纪委员身份招摇撞骗、炫耀风纪委员身份、借风纪委员职务之便威胁恐吓他人、在风纪观点中发布违规内容等违规行为,请及时联系我们进行举报。您可直接将举报材料发送至judgement@bilibili.com。

(案例感想请发布在小黑屋评论区讨论,请勿骚扰被封禁的用户)

【本次判罚为管理员判定,请注意案件右上无蓝色标记(风纪委员众裁)】

", + "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 + }, + ………… + ] +} +``` + +
+ +## 封禁处理公示详情 + +> https://api.bilibili.com/x/credit/blocked/info + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | ---- | +| id | num | 封禁公示id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-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`:封禁
`3`:永久封禁 | +| punishTypeName | str | 处理手段名 | | +| moralNum | num | `0`节操值 | 被封禁用户节操值均为`0` | +| blockedDays | num | 封禁天数 | 永封为`0` | +| publishStatus | num | `1` | 作用尚不明确 | +| blockedType | num | 处理来源 | `0`:系统封禁
`1`:风纪仲裁 | +| blockedForever | num | 是否永封 | `0`:非永封
`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' +``` + +
+查看响应示例: + +```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": "

具体违规情况说明:

  1. 经查实确认,该账号从未申请从未担任过风纪委员职务。

  2. 发布多条 “您的稿件/评论涉及违规,即将下架/删除”的恐吓性言论。

  3. 谎称曾经封禁了某个up主,事实上风纪委员无法封禁up主投稿,且该up也从未被封禁。

  4. 威胁他人“要不要到小黑屋坐坐”,事实上风纪委员无法直接封禁用户。通过管理员封禁或风纪委员投票封禁的账号亦有据实申诉的机会。

  5. 故意挑衅他人“那你可以试着骂我,我们试试(举报)有没有用”。

  6. 误导他人“此评论区和弹幕无需保持礼仪”。

批注:

如您发现:假冒风纪委员身份招摇撞骗、炫耀风纪委员身份、借风纪委员职务之便威胁恐吓他人、在风纪观点中发布违规内容等违规行为,请及时联系我们进行举报。您可直接将举报材料发送至judgement@bilibili.com。

(案例感想请发布在小黑屋评论区讨论,请勿骚扰被封禁的用户)

【本次判罚为管理员判定,请注意案件右上无蓝色标记(风纪委员众裁)】

", + "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 + } +} +``` + +
diff --git a/docs/blackroom/jury/action.md b/docs/blackroom/jury/action.md new file mode 100644 index 0000000..2ebcf56 --- /dev/null +++ b/docs/blackroom/jury/action.md @@ -0,0 +1,367 @@ +# 仲裁操作 + +- [申请加入风纪委员会](#申请加入风纪委员会) +- [拉取新案件](#拉取新案件) +- [进行仲裁投票](#进行仲裁投票) + +--- + +## 申请加入风纪委员会 + +> 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:成功
-101:账号未登录
-111:csrf 校验失败
25001:申请等级限制(会员等级<3)
25002:没有实名认证
25003:90天内有封禁记录
25013:不能重复申请风纪委资格
25016:当日风纪委员名额已发完 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | + + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +#### 旧API +
+查看旧版API: + +> 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:成功
-101:账号未登录
-111:csrf 校验失败
25001:申请等级限制(会员等级<3)
25002:没有实名认证
25003:90天内有封禁记录
25013:不能重复申请风纪委资格
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' +``` +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+
+ +## 拉取新案件 + +> https://api.bilibili.com/x/credit/v2/jury/case/next + +*请求方式:GET* + +认证方式:Cookie + +**标头参数(Headers):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ------ | ---- | +| Cookie | str | Cookie | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
25006:风纪委员资格已过期
25008:没有案件
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' +``` + + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "case_id": "AC2m4HlrIrHv" + } +} +``` + +
+ +#### 旧API +
+查看旧版API: + +> 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:成功
25005:不是风纪委员
25008:没有案件
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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "id": 1239790 + } +} +``` + +
+
+ + +## 进行仲裁投票 + +> 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
见「[众裁信息](judgement_info.md)」中表 | +| content | str | 理由 | 非必要 | | +| anonymous | num | 是否匿名 | 非必要 | 默认值为0
0:不匿名
1:匿名 | +| csrf | str | cookie中`bili_jct`的值 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:未登录
-111:csrf 错误
-400:请求错误(投票类型错误)
25005:不是风纪委员
25011:投票类型错误
25018:不能进行此操作

*注:新版本对于一个不存在的`case_id`,不会报错。* | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | + + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +#### 旧API +
+查看旧版API: +> 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:匿名
1:不匿名 | +| apply_type | num | 是否更改原因 | 非必要 | 0:保持原来原因
1:投票给新原因 | +| origin_reason | num | 原始原因 | 非必要 | 见「封禁公示」中表 | +| apply_reason | num | 新原因 | 非必要 | 见「封禁公示」中表 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:未登录
-111:csrf 错误
-400:请求错误(投票类型错误)
25005:不是风纪委员
25009: 案件不存在
25011:投票类型错误
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=' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+
\ 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..abf9a8b --- /dev/null +++ b/docs/blackroom/jury/base_info.md @@ -0,0 +1,338 @@ +# 风纪委员会用户基本信息 + +- [基本数据](#基本数据) +- [统计信息](#统计信息) + - [新API(2021年10月任期之后)](#新api2021年10月任期之后) + - [旧API](#旧api) +- [检查申请风纪委员会资格](#检查申请风纪委员会资格) + +--- + +## 基本数据 + +> https://api.bilibili.com/x/credit/v2/jury/jury + +_请求方式:GET_ + +认证方式:Cookie(SESSDATA)或 APP + +**url 参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ---- | +| access_key | str | APP 登录 Token | APP 方式必要 | | + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 信息 | 默认为 0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ------------ | -------------------------------------------------------------------------------------------------- | +| allow_apply | bool | true | 尚不明确(用户从未担任风纪委员时也为 true) | +| apply_status | num | 任期审核状态 | -1 资格失效,且未申请
0 刚申请连任时
5 申请后,等待审核
3 申请连任成功,status 为 1 | +| case_total | num | 总众裁数 | | +| err_msg | str | 空 | 尚不明确 | +| face | str | 用户头像 url | | +| status | num | 当前资格状态 | 0 未曾拥有资格
1 任期内
2 资格失效 | +| term_end | num | 任期结束时间 | 时间戳(秒级),无任期时为 0 | +| uname | str | 用户昵称 | | + +**旧API** + +部分字段信息停留在 2021 年 10 月。 + +
+查看旧 api: + +> 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:具有资格
2:资格失效 | +| uname | str | 用户昵称 | | + +
+ +## 统计信息 + +#### 新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:成功
-101:账号未登录
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 不合格
1 合格 | +| status | num | 当前资格状态 | 0 未曾拥有资格
1 任期内
2 资格失效 | +| apply_status | num | 当前资格申请状态 | -1 资格失效,且未申请
0 刚申请连任时
5 申请后,等待审核
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 | + +
+查看响应示例: + +注:本示例未传入`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 + } + } +} +``` +
+ +#### 旧API +
+查看旧 api: + +> 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:成功
-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' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
+
+ +## 检查申请风纪委员会资格 + +> ~~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:成功
-101:账号未登录 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------------- | ------------------------------------- | +| blocked | bool | 是否被封禁 | true:是
false:否
**下同** | +| 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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "blocked": false, + "cert": true, + "rule": true + } +} +``` + +
diff --git a/docs/blackroom/jury/judgement_info.md b/docs/blackroom/jury/judgement_info.md new file mode 100644 index 0000000..2182dc5 --- /dev/null +++ b/docs/blackroom/jury/judgement_info.md @@ -0,0 +1,998 @@ +# 众裁信息 + +- [查询投票过的单个案件](#查询投票过的单个案件) +- [查询案件众裁信息](#查询案件众裁信息) +- [查询我的众裁记录](#查询我的众裁记录) +- [获取众议观点](#获取众议观点) + +--- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
投票类型码总览
代码含义
0未投票
1封禁
2
3弃权
4删除
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
投票选项码总览
任务类型代码含义
单条评论(弹幕)1合适
2一般
3不合适
4无法判断
评论(弹幕)氛围11
12一般
13
14无法判断
+ + + +## 查询投票过的单个案件 + +> 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:成功
-101:账号未登录
-400:请求错误 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | -------- | ------------ | +| case_id | str | 案件id | | +| case_type | num | 任务类型 | 1:单条评论
2:评论氛围
3:单条弹幕
4:弹幕氛围 | +| jury_state | num | `1` | 改版后未见过其它值 | +| participate | num | 是否投票 | 0:未投票
1:已投票 | +| vote_items | object | 投票选项 | 见开头「投票选项码总览」 | +| default_vote | num | 默认投票选项 | `4`或`14`即`无法判断` | +| status | num | 裁决状态(新版) | 0:进行中
1:已结束 | +| origin_start | num | 案件关联视频,播放进度条起始坐标 | 单位:`秒` | +| avid | num | 视频av号 | | +| cid | num | 弹幕池id | 弹幕相关参见「[xml弹幕](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/danmaku/danmaku_xml.md)」 | +| vote_cd | num | `-1` | 暂不明确 | +| result | num | 众议结论 | 见开头「投票选项码总览」 | +| result_text | str | 众议结论文本 | | +| title | str | 视频标题 | | +| case_info | object | 案件信息 | 见「[附表1](#附表1data-对象下的case_info对象)」 | +| my_point | object | 我的观点 | 见「[附表4](#附表4data-对象下的my_point对象)」 | +| vote_info | object | 投票信息 | 见「[附表5](#附表5data-对象下的vote_info对象)」 | + +###### 附表1:`data` 对象下的`case_info`对象 + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ------ | ------------ | ------------------------------------------------------------ | +| comment | object | 单条评论信息 | 仅当`case_type`为`1`有值。见「[附表2](#附表2评论信息)」 | +| danmu_img | str | 弹幕截图 | 仅当`case_type`为`4`有值,截图URL | +| comments | object | 若干条评论 | 仅当`case_type`为`2`有值。见「[附表2](#附表2评论信息)」 | +| single_danmu | str | 单条弹幕信息 | 仅当`case_type`为`3`有值。见「[附表3](#附表3弹幕信息)」 | + +###### 附表2:评论信息 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| mid | num | 用户uid | | +| uname | str | 用户名 | | +| face | str | 用户头像 | 头像URL | +| content | str | 评论内容 | | +| child_comments | object | 子评论(对该评论的回复) | 见「[附表2](#附表2评论信息)」,单条评论和子评论下无`child_comments`字段 | + +###### 附表3:弹幕信息 + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ------------------------------------------------------------ | +| id_str | str | 弹幕dmid | 见「[xml弹幕](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/danmaku/danmaku_xml.md#%E5%B1%9E%E6%80%A7-p)」 | +| content | str | 弹幕内容 | | +| progress | num | | 尚不明确 | + +###### 附表4:`data` 对象下的`my_point`对象 + +记录了某个风纪委员的某个投票(观点)信息 + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | ------------------------------------------------------------ | +| opid | num | 观点编号 | 每当某个一个风纪委员给某个仲裁案件发表观点,就+1 | +| mid | num | 风纪委员用户ID | | +| uname | str | 风纪委员用户名 | 风纪委勾选匿名投票则显示“匿名用户” | +| face | str | 头像URL | 头像 | +| vote | num | 投票选项 | “合适题”分别为 `1` 或者 `2` 或者 `3` 或者 `4`,
对应:“合适”、“一般”、“不合适”、“无法判断”

“氛围题”分别为 `11` 或者 `12` 或者 `13` 或者 `14`,
对应:“好”、“一般”、“差”、“无法判断”

注释
合适题:“单条弹幕(评论)是否合适?”
氛围题:“弹幕(评论区)氛围如何” | +| vote_text | | 内容为空 | *现在系统已不再展示其他风纪委所投的票* | +| content | str | 观点内容 | 该风纪委员所发表的观点内容 | +| anonymous | num | 0 | 尚不明确 | +| like | num | 被点赞数量 | | +| hate | num | 被点踩数量 | | +| like_status | num | 点赞(踩)状态 | 本账号是否给该条评论点赞:
0:没做操作;1:给评论点赞;2:给评论点踩 | +| vote_time | num | 投票时间 | 时间戳,精确到秒 | +| insiders | num | 是否观看此类视频 | 1:平时观看此类视频;0:平时不观看此类视频 | + +###### 附表5:`data` 对象下的`vote_info`对象 + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ----- | -------- | -------------------------------------------- | +| all_count | num | 总投票数 | | +| counts | array | 观点分布 | 格式:`[合适, 一般, 不合适, 无法判断]` | +| insiders_counts | array | 行为分布 | 格式:`[平时会看此类视频, 平时不看此类视频]` | + +**示例:** + +
+查看响应示例: + +```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] + } + } +} +``` +
+ +#### 旧 api + +
+查看旧 api: + +> 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:成功
-101:账号未登录
-400:请求错误
25010:没有权限查看案件 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | -------- | ------------ | +| id | num | 案件id | | +| mid | num | 被举报用户mid | | +| status | num | 裁决状态 | 1:投票中
2:停止发放
3:复核中(结案中)
4:已裁决
5:待重启
6:未裁决
7:冻结中
8:队列中 | +| statusTitle | str | 封禁时间文字 | `judgeType`=1时有效 | +| originType | num | 来源类型 | 见「封禁公示」中表 | +| reasonType | num | 原因类型 | 见「封禁公示」中表 | +| originContent | str | 被举报的原文 | | +| punishResult | num | 处理结果 | 0:无
1:封禁3天
2:封禁7天
3:永封
4:其他封禁天数
5:封禁15天
6:仅删除不封禁 | +| punishTitle | str | 处罚原因 | | +| judgeType | num | 裁决类型 | `status`=4时有效
0:未裁决
1:违规
2:不违规 | +| originUrl | str | 来源url | | +| blockedDays | num | 封禁时间 | `judgeType`=1时有效 | +| putTotal | num | ??? | 作用尚不明确 | +| voteRule | num | 投票不违规人数 | | +| voteBreak | num | 投票建议封禁人数 | | +| voteDelete | num | 投票建议删除人数 | | +| startTime | num | 裁决起始时间 | 时间戳 | +| endTime | num | 裁决截止时间 | 时间戳
未结案固定为24小时 | +| ctime | num | 举报创建时间 | 时间戳 | +| mtime | num | 开始拉取时间 | 时间戳 | +| originTitle | str | 来源标题 | | +| relationId | str | 违规关系标识字 | {评论rpid}-{违规类型id}-{来源对象id} | +| face | str | 被举报用户头像url | | +| uname | str | 被举报用户昵称 | | +| vote | num | 我的投票 | **见上表** | +| case_type | num | 众裁类型 | 0:小众众裁
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' \ +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+
+ +## 查询案件众裁信息 + +注:这是一个旧版的API,暂未找到对应的新版API。 +
+展开: +> https://api.bilibili.com/x/credit/jury/caseInfo + +*请求方式:GET* + +注:该接口无需登录 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ------ | ---- | +| cid | num | 案件id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | -------------------------------- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:object
无效时:null | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ----------------- | ------------------------------------------------------------ | +| id | num | 案件id | | +| mid | num | 被举报用户mid | | +| status | num | 裁决状态 | 1:投票中
2:停止发放
3:复核中(结案中)
4:已裁决
5:待重启
6:未裁决
7:冻结中
8:队列中 | +| originType | num | 来源类型 | 见「封禁公示」中表 | +| reasonType | num | 原因类型 | 见「封禁公示」中表 | +| originContent | str | 被举报的原文 | | +| punishResult | num | 处理结果 | 0:无
1:封禁3天
2:封禁7天
3:永封
4:其他封禁天数
5:封禁15天
6:仅删除不封禁 | +| judgeType | num | 裁决类型 | `status`=4时有效
0:未裁决
1:违规
2:不违规 | +| originUrl | str | 来源url | | +| blockedDays | num | 封禁时间 | `judgeType`=1时有效 | +| putTotal | num | ??? | 作用尚不明确 | +| voteRule | num | 投票不违规人数 | | +| voteBreak | num | 投票建议封禁人数 | | +| voteDelete | num | 投票建议删除人数 | | +| startTime | num | 裁决起始时间 | 时间戳 | +| endTime | num | 裁决截止时间 | 时间戳
未结案固定为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:小众众裁
1:大众众裁 | + +**示例:** + +查询案件`1239790`的信息 + +```shell +curl -G 'https://api.bilibili.com/x/credit/jury/juryCase' \ +--data-urlencode 'cid=1239790' +``` + +
+查看响应示例: + +```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 + } +} +``` +
+
+ +## 查询我的众裁记录 + +> https://api.bilibili.com/x/credit/v2/jury/case/list + +*请求方式:GET* + +认证方式:Cookie + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | -------------------- | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页显示数量 | 非必要 | 默认为30
最大30 | + +**Headers参数** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---- | ------ | ---- | +| cookie | str | | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ------ | ------------ | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-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:单条评论
2:评论氛围
3:单条弹幕
4:弹幕氛围 | +| status | num | 裁决状态 | 0:投票中
1:已结束 | +| vote | num | 投票选项 | “单条评论(弹幕)”分别为 `1` 或者 `2` 或者 `3` 或者 `4`,
对应:“合适”、“一般”、“不合适”、“无法判断”

“评论(弹幕)氛围”分别为 `11` 或者 `12` 或者 `13` 或者 `14`,
对应:“好”、“一般”、“差”、“无法判断” | +| vote_text | str | 投票选项文本 | *参考上条* | +| vote_time | num | 投票时间 | 时间戳,精确到秒 | + +
+查看响应示例: + +```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 + } + ] + } +} +``` + +
+ +#### 旧 api + +
+查看旧版API: + +> 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
最大30 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-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:投票中
2:停止发放
3:复核中(结案中)
4:已裁决
5:待重启
6:未裁决
7:冻结中
8:队列中 | +| originType | num | 来源类型 | 见「封禁公示」中表 | +| reasonType | num | 原因类型 | 见「封禁公示」中表 | +| originContent | str | 被举报的原文 | | +| punishResult | num | 处理结果 | 0:无
1:封禁3天
2:封禁7天
3:永封
4:其他封禁天数
5:封禁15天
6:仅删除不封禁 | +| punishTitle | str | 处罚原因 | | +| judgeType | num | 裁决类型 | `status`=4时有效
0:未裁决
1:违规
2:不违规 | +| originUrl | str | 来源url | | +| blockedDays | num | 封禁时间 | `judgeType`=1时有效 | +| putTotal | num | ??? | 作用尚不明确 | +| voteRule | num | 投票不违规人数 | | +| voteBreak | num | 投票建议封禁人数 | | +| voteDelete | num | 投票建议删除人数 | | +| startTime | num | 裁决起始时间 | 时间戳 | +| endTime | num | 裁决截止时间 | 时间戳
未结案固定为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:小众众裁
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' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
+
+ +## 获取众议观点 + +> 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:成功;
-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' +``` + +
+查看响应示例: + +```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 + } + ] + } +} +``` + +
+ +#### 旧 api + +
+查看旧版API: + +> https://api.bilibili.com/x/credit/jury/case/opinion + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ------------ | ------ | ------------- | ------------- | +| cid | num | 案件id | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为10 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------ | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 信息 | 默认为0 | +| ttl | num | 1 | | +| data | object | 数据本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ------ | -------- | ------------ | +| count | num | 观点总数 | | +| opinion | 有效时:array
无效时: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:匿名
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' \ +``` + +
+查看响应示例: + +```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 + } + ] + } +} +``` + +
+
diff --git a/docs/broadcast/readme.md b/docs/broadcast/readme.md new file mode 100644 index 0000000..3e59ef7 --- /dev/null +++ b/docs/broadcast/readme.md @@ -0,0 +1,184 @@ +# 全站广播 + +可用的广播服务: + +- [视频实时信息](video_room.md)√ + +## 获取广播服务器地址 + +> https://api.bilibili.com/x/web-interface/broadcast/servers + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | --------------------------------- | +| platform | str | 平台选择 | 必要 | 为web时输出域名
其他时输出ip | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +当`platform`=其他时,显示节点ip + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/broadcast/servers' \ +--data-urlencode 'platform=1' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 服务器数据包 + +连接服务器分为三种方式,分别是ws wss tcp,数据包分为上行和下行 + +单个数据包分为头部和正文 + +其中上行的有认证包 心跳包,下行的有认证包回复 心跳包回复 普通包 + +建立连接后超过30s内未发送认证包,或握手后30s内未发送心跳包,或发送了错误的认证包,都会被强制断开连接 + +操作流程: + +1.发送认证包,等待接收认证回复 + +2.确认握手成功后,每30s内发送心跳包,并立即接收心跳包回复 + +3.空闲时间接收普通包 + +### 数据包结构 + +头部通用于上行和下行数据包 + +头部格式: + +| 偏移量 | 长度(字节) | 类型 | 含义 | +| ------ | ------------ | ------ | ---------------------------------------------------- | +| 0x00 | 4 | uint32 | 封包总大小(头部大小+正文大小) | +| 0x04 | 2 | uint16 | 头部大小(一般为0x0012,18字节) | +| 0x06 | 2 | uint16 | 协议版本,可取常数1 | +| 0x08 | 4 | uint32 | 操作码(包类型)
**见下表** | +| 0x0C | 4 | uint32 | sequence(请求次数),可取常数1
对于普通包恒为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..b49d79d --- /dev/null +++ b/docs/broadcast/video_room.md @@ -0,0 +1,152 @@ +# 视频实时信息 + +- [认证包(上行)](#认证包上行) +- [认证包回复(下行)](#认证包回复下行) +- [心跳包(上行)](#心跳包上行) +- [心跳包回复(实时观看数)(下行)](#心跳包回复实时观看数下行) +- [普通包(实时弹幕)(下行)](#普通包实时弹幕下行) + +--- + +## 认证包(上行) + +**正文内容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..5bf90a5 --- /dev/null +++ b/docs/cheese/info.md @@ -0,0 +1,645 @@ +# 课程基本信息 + +- [获取课程基本信息](#获取课程基本信息) +- [获取课程分集列表](#获取课程分集列表) + +--- + +课程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任选其一
**与番剧ssid不互通** | +| ep_id | num | 课程epid | 必要(可选) | season_id与ep_id任选其一
**与番剧epid不互通** | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------- | +| code | num | 返回值 | 0:成功
-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:可观看
2:不可观看 | +| title | str | 课程分集标题 | | +| watched | bool | 是否观看该集 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`**
false:未观看
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`**
0:未关注
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:未收藏
1:已收藏 | +| favored_count | num | 1 | **作用尚不明确** | +| payed | num | 是否购买 | 0:未购买
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' +``` + +
+查看响应示例: + +```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. 本内容为付费内容,购买成功后方可观看。
2. 本内容为虚拟服务,已购买内容不支持退款,敬请谅解。
3. 实际购买价格以页面展示的价格及订单结算页显示价格为准。
4. 如您在购买付费内容时有任何疑问,可随时咨询在线客服。
完整的购买协议,请点击阅读
《bilibili付费内容购买协议》", + "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" +} +``` + +
+ +## 获取课程分集列表 + +> 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:成功
-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:可观看
2:不可观看 | +| title | str | 课程分集标题 | | +| watched | bool | 是否观看该集 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`**
false:未观看
true:已观看 | +| watchedHistory | num | 该集观看历史 | **需要登录(SESSDATA)且referer为`https://www.bilibili.com`** | + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------------- | ----------------------------------------- | +| next | bool | 是否存在下一页 | false:不存在下一页
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' +``` + +
+查看响应示例: + +```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" +} +``` + +
diff --git a/docs/cheese/videostream_url.md b/docs/cheese/videostream_url.md new file mode 100644 index 0000000..2b54655 --- /dev/null +++ b/docs/cheese/videostream_url.md @@ -0,0 +1,226 @@ +# 课程视频流URL + +- [获取课程视频流URL(web端)](#获取课程视频流URLweb端) + +--- + + + +## 获取课程视频流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
画质最高1080P:0
画质最高4K:1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无视频
-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 | 视频长度 | 单位为毫秒
不同分辨率可能有略微差异 | +| 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' +``` + +
+查看响应示例: + +```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" +} +``` + +
\ No newline at end of file diff --git a/docs/clientinfo/client_info.md b/docs/clientinfo/client_info.md new file mode 100644 index 0000000..525b60f --- /dev/null +++ b/docs/clientinfo/client_info.md @@ -0,0 +1,95 @@ +# 终端信息查询 + +- [终端信息查询](#终端信息查询) + +--- + +## 终端信息查询 + +> https://api.bilibili.com/client_info + +*请求方式:任意* + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | -------- | ------------------- | ------------ | +| country | str | 国家/地区名 | | +| ip | str | 公网IP地址 | | +| province | str | 省/州 | 非必须存在项 | +| city | str | 城市 | 非必须存在项 | +| district | district | ? | | +| isp | str | 运营商名 | | +| dns | str | dns服务器ip | | +| dns_isp | str | dns服务器ip运营商名 | | +| headers | obj | 头部字段 | | + +`data`中的`headers`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------------------------- | ---- | ----------------- | ---- | +| HTTP_ACCEPT_ENCODING | str | | | +| HTTP_X_CACHE_SERVER | str | CDN服务器名 | | +| HTTP_X_CACHE_SERVER_ADDR | str | CDN服务器ip | | +| HTTP_X_BACKEND_BILI_REAL_IP | str | 真实服务器ip | | +| HTTP_X_BACKEND_BILI_REAL_IPPORT | str | 真实服务器端口 | | +| HTTP_X_BACKEND_BILI_REAL_IP_CHAIN | str | 真实服务器ip+端口 | | +| HTTP_X_SCHEME | str | 访问协议 | | +| HTTP_HOST | str | 访问域名 | | +| HTTP_USER_AGENT | str | 客户端UA | | +| HTTP_ACCEPT | str | | | +| HTTP_CACHE_CONTROL | str | | | + +**示例:** + +```shell +curl 'https://api.bilibili.com/client_info' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "ok", + "data": { + "country": "中国", + "ip": "36.40.120.140", + "province": "陕西", + "city": "渭南", + "district": null, + "isp": "电信", + "dns": null, + "dns_isp": null, + "headers": { + "HTTP_ACCEPT_ENCODING": "gzip", + "HTTP_X_CACHE_SERVER": "ks-bj-webcdn-07", + "HTTP_X_CACHE_SERVER_ADDR": "10.33.2.170", + "HTTP_X_BACKEND_BILI_REAL_IP": "36.40.120.140", + "HTTP_X_BACKEND_BILI_REAL_IPPORT": "22058", + "HTTP_X_BACKEND_BILI_REAL_IP_CHAIN": "36.40.120.140:22058", + "HTTP_X_SCHEME": "https", + "HTTP_HOST": "api.bilibili.com", + "HTTP_USER_AGENT": "PostmanRuntime/7.26.8", + "HTTP_ACCEPT": "*/*", + "HTTP_CACHE_CONTROL": "no-cache" + } + } +} +``` + +
+ diff --git a/docs/clientinfo/ip.md b/docs/clientinfo/ip.md new file mode 100644 index 0000000..e24b20c --- /dev/null +++ b/docs/clientinfo/ip.md @@ -0,0 +1,66 @@ +# 通过ip确定地理位置 + +- [通过ip确定位置](#通过ip确定位置) + +--- + +## 通过ip确定位置 + +> https://api.bilibili.com/x/web-interface/zone + +*请求方式: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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
diff --git a/docs/comment/action.md b/docs/comment/action.md new file mode 100644 index 0000000..f1e3794 --- /dev/null +++ b/docs/comment/action.md @@ -0,0 +1,544 @@ +# 评论区操作 + +- [发表评论](#发表评论) +- [点赞评论](#点赞评论) +- [点踩评论](#点踩评论) +- [删除评论](#删除评论) +- [置顶评论](#置顶评论) +- [举报评论](#举报评论) + +--- + +## 发表评论 + +> 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
大于二级评论为要回复的评论id | +| message | str | 发送评论内容 | 必要 | 最大1000字符
表情使用表情转义符 | +| plat | num | 发送平台标识 | 非必要 | 1:web端
2:安卓客户端
3:ios客户端
4:wp客户端
默认为1 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-404:无此项
-509:请求过于频繁
12001:已经存在评论主题
12002:评论区已关闭
12003:禁止回复
12006:没有该评论
12009:评论主体的type不合法
12015:需要评论验证码
12016:评论内容包含敏感信息
12025:评论字数过多
12035:该账号被UP主列入评论黑名单
12051:重复评论,请勿刷屏
12052:评论区已关闭
**(其他错误码有待补充)** | +| message | str | 错误信息 |
| +| 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
若为二级评论则为该评论id
大于二级评论为上一级评论id | +| dialog_str | str | 回复对方rpid | 字串格式 | +| root | num | 根评论rpid | 若为一级评论则为0
大于一级评论则为根评论id | +| root_str | str | 根评论rpid | 字串格式 | +| parent | num | 回复父评论rpid | 若为一级评论则为0
若为二级评论则为根评论id
大于二级评论为上一级评论id | +| parent_str | str | 回复父评论rpid | 字串格式 | +| emote | obj | 表情转义符信息 | [对象定义见表](readme.md#评论条目对象) | +| reply | 有效时:obj
无效时: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' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ +## 点赞评论 + +> 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
0:取消赞
1:点赞 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-404:无此项
-509:请求过于频繁
12002:评论区已关闭
12004:禁止操作 赞或踩
12006:没有该评论
12009:评论主体的type不合法
12011:不合法的赞或踩
**(其他错误码有待补充)** | +| 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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 点踩评论 + +> 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
0:取消踩
1:点踩 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-404:无此项
-509:请求过于频繁
12002:评论区已关闭
12004:禁止操作 赞或踩
12006:没有该评论
12009:评论主体的type不合法
12011:不合法的赞或踩
**(其他错误码有待补充)** | +| 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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 删除评论 + +> 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:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-403:权限不足
-404:无此项
-509:请求过于频繁
12002:评论区已关闭
12009:评论主体的type不合法
12022:已经被删除了
**(其他错误码有待补充)** | +| 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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 置顶评论 + +> 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
0:取消置顶
1:设为置顶 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-403:权限不足
-404:无此项
-509:请求过于频繁
12002:评论区已关闭
12006:没有该评论
12009:评论主体的type不合法
12029:已经有置顶评论
12030:不能置顶非一级评论
**(其他错误码有待补充)** | +| 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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 举报评论 + +> 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:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-403:权限不足
-404:无此项
-500:服务器错误
-509:请求过于频繁
12002:评论区已关闭
12006:没有该评论
12008:已经举报过了
12009:评论主体的type不合法
12019:举报过于频繁
**(其他错误码有待补充)** | +| 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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/comment/list.md b/docs/comment/list.md new file mode 100644 index 0000000..7bf73cf --- /dev/null +++ b/docs/comment/list.md @@ -0,0 +1,5853 @@ +# 评论区明细 + +- [获取评论区明细_翻页加载](#获取评论区明细_翻页加载) +- [获取评论区明细_懒加载](#获取评论区明细_懒加载) +- [获取指定评论的回复](#获取指定评论的回复) +- [获取指定评论对话树](#获取指定评论对话树) +- [获取评论区热评](#获取评论区热评) +- [~~获取指定评论信息~~](#~~获取指定评论信息~~) +- [获取评论区评论总数](#获取评论区评论总数) + +--- + +## 获取评论区明细_翻页加载 + +> 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
0:按时间
1:按点赞数
2:按回复数 | +| nohot | num | 是否不显示热评 | 非必要 | 默认为0
1:不显示
0:显示 | +| ps | num | 每页项数 | 非必要 | 默认为20
定义域:1-49 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无此项
12002:评论区已关闭
12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj
错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | -------------------------------- | -------- | ---------------- | +| page | obj | 页信息 | | +| config | obj | 评论区显示控制 | | +| replies | 禁用时:null
正常时:array | 评论列表 | | +| hots | 禁用时:null
正常时:array | 热评列表 | | +| upper | obj | 置顶评论 | | +| top | null | (?) | | +| notice | 无效时:null
有效时: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
无效时:null | 置顶条目 | [对象定义见表](readme.md#评论条目对象) | +| vote | 有效时:obj
无效时: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:无需筛选
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' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ +## 获取评论区明细_懒加载 + +> https://api.bilibili.com/x/v2/reply/main + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | -------------- | ------------ | ------------------------------------------------------------ | +| access_key | str | APP 登录 Token | APP 方式必要 | | +| type | num | 评论区类型代码 | 必要 | [类型代码见表](readme.md#评论区类型代码) | +| oid | num | 目标评论区 id | 必要 | | +| mode | num | 排序方式 | 非必要 | 默认为 3
0 3:仅按热度
1:按热度+按时间
2:仅按时间 | +| next | num | 评论页选择 | 非必要 | 按热度时:热度顺序页码(0 为第一页)
按时间时:时间倒序楼层号
默认为 0 | +| ps | num | 每页项数 | 非必要 | 默认为 20
定义域:1-30 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无此项
12002:评论区已关闭
12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj
错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | -------------------------------- | -------- | ---------------- | +| cursor | obj | 游标信息 | | +| hots | 禁用时:null
正常时:array | 热评列表 | | +| notice | 无效时:null
有效时:obj | 评论区公告信息 | | +| replies | 禁用时:null
正常时: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 | 评论区输入属性 | | + +`data`中的`cursor`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ----- | -------------- | ----------------------- | +| all_count | num | 全部评论条数 | | +| is_begin | bool | 是否为第一页 | false:否
true:是 | +| prev | num | 上页页码 | | +| next | num | 下页页码 | | +| is_end | bool | 是否为最后页 | false:否
true:是 | +| mode | num | 排序方式 | | +| show_type | num | (?) | | +| support_mode | array | 支持的排序方式 | | +| name | 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
无效时:null | 管理员置顶条目 | [对象定义见表](readme.md#评论条目对象) | +| upper | 有效时:obj
无效时:null | UP 主置顶条目 | [对象定义见表](readme.md#评论条目对象) | +| vote | 有效时:obj
无效时: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:无需筛选
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/main' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=2' \ +--data-urlencode 'mode=3' \ +--data-urlencode 'next=0' \ +--data-urlencode 'ps=5' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "cursor": { + "all_count": 76793, + "is_begin": true, + "prev": 1, + "next": 2, + "is_end": false, + "mode": 3, + "show_type": 1, + "support_mode": [ + 1, + 2, + 3 + ], + "name": "热门评论" + }, + "hots": null, + "notice": null, + "replies": [ + { + "rpid": 476670, + "oid": 2, + "type": 1, + "mid": 58426, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 2733, + "rcount": 2608, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1291350931, + "rpid_str": "476670", + "root_str": "0", + "parent_str": "0", + "like": 90419, + "action": 0, + "member": { + "mid": "58426", + "uname": "残星什么的就是残星", + "sex": "男", + "sign": "少说话多做事 _微博@残星", + "avatar": "http://i1.hdslb.com/bfs/face/56ac36b37662e3746228f30eb4acf2cd332b66a5.jpg", + "rank": "20000", + "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": 30, + "name": "字幕君", + "image": "http://i1.hdslb.com/bfs/face/383c3fed3dc162c93a8d616a272693f6650e98f1.png", + "image_small": "http://i2.hdslb.com/bfs/face/7ad18084e40b725210e22696e0efdae408cd378c.png", + "level": "稀有勋章", + "condition": "弹幕大赛获得" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1710777600000, + "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": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "貌似没人来", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 6 + }, + "replies": [ + { + "rpid": 214198733, + "oid": 2, + "type": 1, + "mid": 18370638, + "root": 476670, + "parent": 476670, + "dialog": 214198733, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1488888369, + "rpid_str": "214198733", + "root_str": "476670", + "parent_str": "476670", + "like": 1958, + "action": 0, + "member": { + "mid": "18370638", + "uname": "初音ハク", + "sex": "保密", + "sign": "我是艾尔的利刃", + "avatar": "http://i0.hdslb.com/bfs/face/71b838cc7c69dc16e0ad49fa4e6f84a2fe2eaadb.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": 74, + "name": "大会员2018年度勋章", + "image": "http://i0.hdslb.com/bfs/face/421179426c929dfeaed4117461c83f5d07ffb148.png", + "image_small": "http://i2.hdslb.com/bfs/face/682001c2e1c2ae887bdf2a0e18eef61180c48f84.png", + "level": "稀有勋章", + "condition": "2018.6.26-7.8某一天是年度大会员" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1654790400000, + "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": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "划了4千多条评论找到的啊ε=ε=(ノ≧∇≦)ノ", + "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": "1821天前发布" + } + }, + { + "rpid": 568785293, + "oid": 2, + "type": 1, + "mid": 52987877, + "root": 476670, + "parent": 476670, + "dialog": 568785293, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1514903586, + "rpid_str": "568785293", + "root_str": "476670", + "parent_str": "476670", + "like": 6534, + "action": 0, + "member": { + "mid": "52987877", + "uname": "Mr-Shadow", + "sex": "男", + "sign": "重灾区话题回避", + "avatar": "http://i2.hdslb.com/bfs/face/dc679f8221b27e2056c1ad018d168402d80d98d5.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://i2.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "expire": 0, + "image_enhance": "http://i2.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "http://i2.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png" + }, + "nameplate": { + "nid": 61, + "name": "有爱楷模", + "image": "http://i2.hdslb.com/bfs/face/5a90f715451325c642a6ac39e01195cb6d075734.png", + "image_small": "http://i0.hdslb.com/bfs/face/5bfc1b4fb3f4b411495dddb0b2127ad80f6fbcac.png", + "level": "普通勋章", + "condition": "当前持有粉丝勋章最高等级>=10级" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1666281600000, + "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": 2511, + "name": "初音未来13周年", + "image": "http://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "jump_url": "", + "type": "suit", + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png" + }, + "cardbg": { + "id": 2528, + "name": "初音未来13周年", + "image": "http://i0.hdslb.com/bfs/garb/item/7dbd22f700e0a7fe0c0d0da7b1a54241626bf1cd.png", + "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/2554?navhide=1&mid=52987877&from=reply", + "fan": { + "is_fan": 1, + "number": 94388, + "color": "#07b6d5", + "name": "初音未来周年纪念", + "num_desc": "094388" + }, + "type": "suit" + }, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "你可能抢到了整个b站最难抢到的沙发(`・ω・´)", + "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": "1520天前发布" + } + }, + { + "rpid": 2237449754, + "oid": 2, + "type": 1, + "mid": 400121455, + "root": 476670, + "parent": 568785293, + "dialog": 568785293, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1578311878, + "rpid_str": "2237449754", + "root_str": "476670", + "parent_str": "568785293", + "like": 194, + "action": 0, + "member": { + "mid": "400121455", + "uname": "TxAY丶", + "sex": "保密", + "sign": "6月后有空做视频 | 星火工作室后期、CM拜年祭制作成员", + "avatar": "http://i1.hdslb.com/bfs/face/ce011d50196afd8fedc45240f6aebab061aee524.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": 4, + "name": "青铜殿堂", + "image": "http://i2.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", + "image_small": "http://i1.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", + "level": "普通勋章", + "condition": "单个自制视频总播放数>=1万" + }, + "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": "回复 @Mr-Shadow :你可能抢到了整个b站最难抢到的热评的热评", + "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": "786天前发布" + } + } + ], + "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": true, + "invisible": false, + "reply_control": { + "sub_reply_entry_text": "共2608条回复", + "sub_reply_title_text": "相关回复共2608条", + "time_desc": "4107天前发布" + } + }, + { + "rpid": 917945205, + "oid": 2, + "type": 1, + "mid": 34762090, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 461, + "rcount": 365, + "state": 0, + "fansgrade": 1, + "attr": 0, + "ctime": 1532071373, + "rpid_str": "917945205", + "root_str": "0", + "parent_str": "0", + "like": 29793, + "action": 0, + "member": { + "mid": "34762090", + "uname": "某不科学的瓜皮", + "sex": "男", + "sign": "持杯拱天,谓无言,静沉眠", + "avatar": "http://i1.hdslb.com/bfs/face/cc61140c64409a3f5793207f3c866555e8638ab5.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": 4, + "name": "青铜殿堂", + "image": "http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", + "image_small": "http://i2.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", + "level": "普通勋章", + "condition": "单个自制视频总播放数>=1万" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1631980800000, + "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": { + "uid": 34762090, + "medal_id": 29058, + "medal_name": "逸国", + "score": 0, + "level": 1, + "intimacy": 0, + "master_status": 1, + "is_receive": 1, + "medal_color": 643602062, + "medal_color_end": 643602062, + "medal_color_border": 4284257934, + "medal_color_name": 4284257934, + "medal_color_level": 4284257934, + "guard_level": 0 + }, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "7.20日,站长被封7天\n\n历史性留名[2233娘_卖萌]", + "plat": 0, + "device": "", + "members": [], + "emote": { + "[2233娘_卖萌]": { + "id": 140, + "package_id": 6, + "state": 0, + "type": 2, + "attr": 0, + "text": "[2233娘_卖萌]", + "url": "http://i0.hdslb.com/bfs/emote/ea893aa25355de95ab4f03c2dad3f0c58d0c159e.png", + "meta": { + "size": 2 + }, + "mtime": 1626664892, + "jump_title": "卖萌" + } + }, + "jump_url": {}, + "max_line": 6 + }, + "replies": [ + { + "rpid": 1781253749, + "oid": 2, + "type": 1, + "mid": 34762090, + "root": 917945205, + "parent": 917945205, + "dialog": 1781253749, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 1, + "attr": 0, + "ctime": 1563598609, + "rpid_str": "1781253749", + "root_str": "917945205", + "parent_str": "917945205", + "like": 1224, + "action": 0, + "member": { + "mid": "34762090", + "uname": "某不科学的瓜皮", + "sex": "男", + "sign": "持杯拱天,谓无言,静沉眠", + "avatar": "http://i1.hdslb.com/bfs/face/cc61140c64409a3f5793207f3c866555e8638ab5.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": 4, + "name": "青铜殿堂", + "image": "http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png", + "image_small": "http://i2.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png", + "level": "普通勋章", + "condition": "单个自制视频总播放数>=1万" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1631980800000, + "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": { + "uid": 34762090, + "medal_id": 29058, + "medal_name": "逸国", + "score": 0, + "level": 1, + "intimacy": 0, + "master_status": 1, + "is_receive": 1, + "medal_color": 643602062, + "medal_color_end": 643602062, + "medal_color_border": 4284257934, + "medal_color_name": 4284257934, + "medal_color_level": 4284257934, + "guard_level": 0 + }, + "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": 121, + "package_id": 5, + "state": 0, + "type": 2, + "attr": 0, + "text": "[小电视_笑]", + "url": "http://i0.hdslb.com/bfs/emote/f80d384875183dfe2e24be13011c595c0210d273.png", + "meta": { + "size": 2 + }, + "mtime": 1628587688, + "jump_title": "笑" + } + }, + "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": "956天前发布" + } + }, + { + "rpid": 1781556726, + "oid": 2, + "type": 1, + "mid": 417437969, + "root": 917945205, + "parent": 1781253749, + "dialog": 1781253749, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1563605321, + "rpid_str": "1781556726", + "root_str": "917945205", + "parent_str": "1781253749", + "like": 372, + "action": 0, + "member": { + "mid": "417437969", + "uname": "理查奈德", + "sex": "男", + "sign": "欲雷普琪露诺的各种小圈子小鬼", + "avatar": "http://i2.hdslb.com/bfs/face/6923f6414503413f292a1cfad13ac483683a77d6.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": 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": 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": "956天前发布" + } + }, + { + "rpid": 2254034005, + "oid": 2, + "type": 1, + "mid": 435781129, + "root": 917945205, + "parent": 917945205, + "dialog": 2254034005, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1578829367, + "rpid_str": "2254034005", + "root_str": "917945205", + "parent_str": "917945205", + "like": 137, + "action": 0, + "member": { + "mid": "435781129", + "uname": "yourmumdie", + "sex": "保密", + "sign": "签名不能留八个字", + "avatar": "http://i1.hdslb.com/bfs/face/77489a807c616304cef9ac446b8bed2528de4e25.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": 1644249600000, + "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": "av7", + "plat": 0, + "device": "", + "members": [], + "jump_url": { + "av7": { + "title": "2012地球便当之日宣传片", + "state": 0, + "prefix_icon": "https://i0.hdslb.com/bfs/activity-plat/static/20201110/4c8b2dbaded282e67c9a31daa4297c3c/AeQJlYP7e.png", + "app_url_schema": "", + "app_name": "", + "app_package_name": "", + "click_report": "7", + "is_half_screen": false, + "exposure_report": "" + } + }, + "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": "780天前发布" + } + } + ], + "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": true, + "invisible": false, + "reply_control": { + "sub_reply_entry_text": "共365条回复", + "sub_reply_title_text": "相关回复共365条", + "time_desc": "1321天前发布" + } + }, + { + "rpid": 2576184175, + "oid": 2, + "type": 1, + "mid": 24512285, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 1066, + "rcount": 1000, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1584945297, + "rpid_str": "2576184175", + "root_str": "0", + "parent_str": "0", + "like": 44307, + "action": 0, + "member": { + "mid": "24512285", + "uname": "艾斯黛斯T", + "sex": "男", + "sign": "飞飞飞", + "avatar": "http://i2.hdslb.com/bfs/face/e2176a16d749fdb720d4181309d4075c91db7952.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": 4104, + "name": "良辰美景·不问天", + "image": "http://i2.hdslb.com/bfs/garb/item/4dbf08aae75f9479a21db2bb289229b8d71631e1.png", + "expire": 0, + "image_enhance": "http://i2.hdslb.com/bfs/garb/item/253bf41272ddef301c1f6a0361abd49d772bfafc.webp", + "image_enhance_frame": "http://i2.hdslb.com/bfs/garb/item/c4934a1ffdb3865fe79b319de439af3973b53ec9.png" + }, + "nameplate": { + "nid": 58, + "name": "收集达人", + "image": "http://i0.hdslb.com/bfs/face/3f5539e1486303422ffc8595862ccb6606e0b745.png", + "image_small": "http://i0.hdslb.com/bfs/face/cf85e7908095d256e595ec9759f4e7795f23bc22.png", + "level": "普通勋章", + "condition": "同时拥有粉丝勋章>=15个" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1646236800000, + "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": 4104, + "name": "良辰美景·不问天", + "image": "http://i0.hdslb.com/bfs/garb/item/4dbf08aae75f9479a21db2bb289229b8d71631e1.png", + "jump_url": "", + "type": "suit", + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/253bf41272ddef301c1f6a0361abd49d772bfafc.webp", + "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/c4934a1ffdb3865fe79b319de439af3973b53ec9.png" + }, + "cardbg": { + "id": 4123, + "name": "良辰美景·不问天", + "image": "http://i0.hdslb.com/bfs/garb/item/f251c507a2b09605d414c9107ffe2073bbf65735.png", + "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/4019?navhide=1&mid=24512285&from=reply", + "fan": { + "is_fan": 1, + "number": 70746, + "color": "#fe7491", + "name": "良辰美景·不问天", + "num_desc": "070746" + }, + "type": "suit" + }, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "人类最古のav号(挂了的不算)也变成bv了[大哭][大哭][大哭]青春结束了", + "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": [ + { + "rpid": 2578082161, + "oid": 2, + "type": 1, + "mid": 407225717, + "root": 2576184175, + "parent": 2576184175, + "dialog": 2578082161, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1584964926, + "rpid_str": "2578082161", + "root_str": "2576184175", + "parent_str": "2576184175", + "like": 2030, + "action": 0, + "member": { + "mid": "407225717", + "uname": "白月魁单推人", + "sex": "保密", + "sign": "", + "avatar": "http://i2.hdslb.com/bfs/face/57899fca9856acfb2f92fdabf00e655a74aeae67.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": "先留个名,估计以后av会被当成冷知识放出来[大哭]", + "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": 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": "709天前发布" + } + }, + { + "rpid": 2579961512, + "oid": 2, + "type": 1, + "mid": 329965337, + "root": 2576184175, + "parent": 2576184175, + "dialog": 2579961512, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1584982846, + "rpid_str": "2579961512", + "root_str": "2576184175", + "parent_str": "2576184175", + "like": 248, + "action": 0, + "member": { + "mid": "329965337", + "uname": "积极发言的刘同学", + "sex": "男", + "sign": "Hi这里是刘同学,一个业余的校园摄影及公路自行车骑手,同时也是在校高中生(有时穿穿dk)", + "avatar": "http://i2.hdslb.com/bfs/face/3b586d7dbe8c2dba32b213e0a474fe6d86921b85.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": 1585324800000, + "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": "10个小时就有6500多赞?你是魔鬼?", + "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": "708天前发布" + } + }, + { + "rpid": 2596150498, + "oid": 2, + "type": 1, + "mid": 426825448, + "root": 2576184175, + "parent": 2578082161, + "dialog": 2578082161, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1585211858, + "rpid_str": "2596150498", + "root_str": "2576184175", + "parent_str": "2578082161", + "like": 605, + "action": 0, + "member": { + "mid": "426825448", + "uname": "TrueBinger", + "sex": "男", + "sign": "这个人不懒,但是什么都没有留下。", + "avatar": "http://i1.hdslb.com/bfs/face/4bcc2120e3cb0ce855de6500a9bc422e981ced32.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": 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": 1, + "vipDueDate": 1592668800000, + "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": "回复 @渣男5107号 :哈喽各位小伙伴们大家好,众所周知,世界第一大视频网站bilibili的视频采用bv号来标记视频,可小伙伴们知道吗,其实在2020.3之前,bv一直都是av哦!这已经是100000年前的事了,小伙伴们知道了吗[滑稽]", + "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": 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": "706天前发布" + } + } + ], + "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": true, + "invisible": false, + "reply_control": { + "sub_reply_entry_text": "共1000条回复", + "sub_reply_title_text": "相关回复共1000条", + "time_desc": "709天前发布" + } + }, + { + "rpid": 495059, + "oid": 2, + "type": 1, + "mid": 2, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 898, + "rcount": 838, + "state": 2, + "fansgrade": 0, + "attr": 0, + "ctime": 1291918239, + "rpid_str": "495059", + "root_str": "0", + "parent_str": "0", + "like": 34223, + "action": 0, + "member": { + "mid": "2", + "uname": "碧诗", + "sex": "男", + "sign": "kami.im 直男过气网红 # av362830 “We Are Star Dust”", + "avatar": "http://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "rank": "20000", + "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": 10, + "name": "见习偶像", + "image": "http://i2.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png", + "image_small": "http://i1.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png", + "level": "普通勋章", + "condition": "所有自制视频总播放数>=10万" + }, + "official_verify": { + "type": 0, + "desc": "bilibili创始人(站长)" + }, + "vip": { + "vipType": 2, + "vipDueDate": 3901881600000, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 1, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "", + "text": "十年大会员", + "label_theme": "ten_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": 3865, + "name": "2021拜年纪", + "image": "http://i0.hdslb.com/bfs/garb/item/e2c4d4ba094ddb98c1f72114a12081b4eca7ed88.png", + "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/3898?navhide=1&mid=2&from=reply", + "fan": { + "is_fan": 1, + "number": 21206, + "color": "#ec3d39", + "name": "2021拜年纪", + "num_desc": "021206" + }, + "type": "suit" + }, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "wwwww", + "plat": 0, + "device": "", + "members": [], + "jump_url": {}, + "max_line": 6 + }, + "replies": [ + { + "rpid": 164517433, + "oid": 2, + "type": 1, + "mid": 3476504, + "root": 495059, + "parent": 495059, + "dialog": 164517433, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1479570959, + "rpid_str": "164517433", + "root_str": "495059", + "parent_str": "495059", + "like": 478, + "action": 0, + "member": { + "mid": "3476504", + "uname": "MaskQwQ麦斯科", + "sex": "保密", + "sign": "重拾过去。。", + "avatar": "http://i2.hdslb.com/bfs/face/7bf954d807cbda4de4221d78f3b425534042ac02.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": 194, + "name": "黑白无双", + "image": "http://i2.hdslb.com/bfs/face/89b25cad74abd9e42a94b11e456bc21fe36b8763.png", + "expire": 0, + "image_enhance": "http://i2.hdslb.com/bfs/face/89b25cad74abd9e42a94b11e456bc21fe36b8763.png", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 74, + "name": "大会员2018年度勋章", + "image": "http://i0.hdslb.com/bfs/face/421179426c929dfeaed4117461c83f5d07ffb148.png", + "image_small": "http://i1.hdslb.com/bfs/face/682001c2e1c2ae887bdf2a0e18eef61180c48f84.png", + "level": "稀有勋章", + "condition": "2018.6.26-7.8某一天是年度大会员" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1771344000000, + "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": 194, + "name": "黑白无双", + "image": "http://i0.hdslb.com/bfs/face/89b25cad74abd9e42a94b11e456bc21fe36b8763.png", + "jump_url": "", + "type": "vip", + "image_enhance": "http://i0.hdslb.com/bfs/face/89b25cad74abd9e42a94b11e456bc21fe36b8763.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": "1928天前发布" + } + }, + { + "rpid": 464424502, + "oid": 2, + "type": 1, + "mid": 37145412, + "root": 495059, + "parent": 495059, + "dialog": 464424502, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 1, + "attr": 0, + "ctime": 1509257961, + "rpid_str": "464424502", + "root_str": "495059", + "parent_str": "495059", + "like": 298, + "action": 0, + "member": { + "mid": "37145412", + "uname": "边走边发呆", + "sex": "男", + "sign": "这个人懒死了,什么都不发=_= 头像是素晴日", + "avatar": "http://i0.hdslb.com/bfs/face/4dfe0f1b0bfc9b1afea9e3bacbc5a92221fe9b09.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": 60, + "name": "有爱萌新", + "image": "http://i1.hdslb.com/bfs/face/51ca16136e570938450bca360f28761ceb609f33.png", + "image_small": "http://i2.hdslb.com/bfs/face/9abfa4769357f85937782c2dbc40fafda4f57217.png", + "level": "普通勋章", + "condition": "当前持有粉丝勋章最高等级>=5级" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1559836800000, + "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": { + "uid": 37145412, + "medal_id": 29058, + "medal_name": "逸国", + "score": 0, + "level": 7, + "intimacy": 0, + "master_status": 1, + "is_receive": 1, + "medal_color": 643660702, + "medal_color_end": 643660702, + "medal_color_border": 6126494, + "medal_color_name": 6126494, + "medal_color_level": 6126494, + "guard_level": 0 + }, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": null, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "5000多楼6225评论(;¬_¬)手有点酸,如果不是特殊方法进来的话是要大会员吧(● ̄(エ) ̄●)", + "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": "1585天前发布" + } + }, + { + "rpid": 4002945120, + "oid": 2, + "type": 1, + "mid": 282146749, + "root": 495059, + "parent": 464424502, + "dialog": 464424502, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1611588059, + "rpid_str": "4002945120", + "root_str": "495059", + "parent_str": "464424502", + "like": 107, + "action": 0, + "member": { + "mid": "282146749", + "uname": "能天使exia", + "sex": "女", + "sign": "电子学会评测师,脑机非技术研究学者,黑客网络贴吧二周目群管,明日方舟三服,三崩子团长,公主焊接会长,红三圈模组收集者,游戏尝鲜人,随心情更新", + "avatar": "http://i1.hdslb.com/bfs/face/f6ec44a9d2785783fa6b1b2dd4b7ad7b17e7cbb9.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": 3508, + "name": "总之就是非常可爱", + "image": "http://i1.hdslb.com/bfs/garb/item/2c63178e3fcce804a851ef510e03c2b0e91a61e0.png", + "expire": 0, + "image_enhance": "http://i1.hdslb.com/bfs/garb/item/2c63178e3fcce804a851ef510e03c2b0e91a61e0.png", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 72, + "name": "风纪元老", + "image": "http://i0.hdslb.com/bfs/face/032bce9fd6dcb562d83b60f8a8719362b18a0afb.png", + "image_small": "http://i2.hdslb.com/bfs/face/2930b8bf5d7c68e1961d81ed3a59783af9d639a2.png", + "level": "稀有勋章", + "condition": "风纪委员连任期数 >= 12" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1727280000000, + "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": 3508, + "name": "总之就是非常可爱", + "image": "http://i0.hdslb.com/bfs/garb/item/2c63178e3fcce804a851ef510e03c2b0e91a61e0.png", + "jump_url": "", + "type": "suit", + "image_enhance": "http://i0.hdslb.com/bfs/garb/item/2c63178e3fcce804a851ef510e03c2b0e91a61e0.png", + "image_enhance_frame": "" + }, + "cardbg": { + "id": 5323, + "name": "明日方舟音律系列", + "image": "http://i0.hdslb.com/bfs/garb/item/e62b17700b3c1bc981606905f85615363c183105.png", + "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/5359?navhide=1&mid=282146749&from=reply", + "fan": { + "is_fan": 1, + "number": 11418, + "color": "#ffb628", + "name": "明日方舟音律联觉", + "num_desc": "011418" + }, + "type": "suit" + }, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "content": { + "message": "回复 @边走边发呆 :拜登时代洛阳铲,带人,食大便了,现在的b站没有楼层了[牛年]", + "plat": 0, + "device": "", + "members": [ + { + "mid": "37145412", + "uname": "边走边发呆", + "sex": "男", + "sign": "这个人懒死了,什么都不发=_= 头像是素晴日", + "avatar": "http://i0.hdslb.com/bfs/face/4dfe0f1b0bfc9b1afea9e3bacbc5a92221fe9b09.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": 60, + "name": "有爱萌新", + "image": "http://i1.hdslb.com/bfs/face/51ca16136e570938450bca360f28761ceb609f33.png", + "image_small": "http://i2.hdslb.com/bfs/face/9abfa4769357f85937782c2dbc40fafda4f57217.png", + "level": "普通勋章", + "condition": "当前持有粉丝勋章最高等级>=5级" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1559836800000, + "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": "" + } + } + ], + "emote": { + "[牛年]": { + "id": 3146, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[牛年]", + "url": "http://i0.hdslb.com/bfs/emote/9275275ff1f2659310648221107d20bc4970f106.png", + "meta": { + "size": 1 + }, + "mtime": 1611200715, + "jump_title": "牛年" + } + }, + "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": "400天前发布" + } + } + ], + "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": { + "sub_reply_entry_text": "共838条回复", + "sub_reply_title_text": "相关回复共838条", + "time_desc": "4100天前发布" + } + }, + { + "rpid": 646408628, + "oid": 2, + "type": 1, + "mid": 33066927, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 173, + "rcount": 160, + "state": 0, + "fansgrade": 1, + "attr": 0, + "ctime": 1519135750, + "rpid_str": "646408628", + "root_str": "0", + "parent_str": "0", + "like": 7197, + "action": 0, + "member": { + "mid": "33066927", + "uname": "冰魂喵丶", + "sex": "男", + "sign": "反正不要钱,多少关注下?\n等我有时间,就把你们全吃了", + "avatar": "http://i0.hdslb.com/bfs/face/f60445649445f69db7293f1cb611f6c0dcdd9a21.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": 71, + "name": "资深委员", + "image": "http://i1.hdslb.com/bfs/face/5beecb936bd7422a5ac11c9c5c8df56f334b2a65.png", + "image_small": "http://i0.hdslb.com/bfs/face/9f8e0d5cd0201cf7177199d9365be562be1deb05.png", + "level": "高级勋章", + "condition": "风纪委员连任期数 >= 6" + }, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 1, + "vipDueDate": 1620748800000, + "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": { + "uid": 33066927, + "medal_id": 29058, + "medal_name": "逸国", + "score": 0, + "level": 1, + "intimacy": 0, + "master_status": 1, + "is_receive": 1, + "medal_color": 643602062, + "medal_color_end": 643602062, + "medal_color_border": 4284257934, + "medal_color_name": 4284257934, + "medal_color_level": 4284257934, + "guard_level": 0 + }, + "following": 0, + "is_followed": 0, + "user_sailing": { + "pendant": null, + "cardbg": { + "id": 32680, + "name": "坎公骑冠剑", + "image": "http://i0.hdslb.com/bfs/garb/item/e861ec7f80f9725fbed51bbfc51ade4c083ddedc.png", + "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/32658?navhide=1&mid=33066927&from=reply", + "fan": { + "is_fan": 1, + "number": 16578, + "color": "#f7b130", + "name": "坎公骑冠剑", + "num_desc": "016578" + }, + "type": "suit" + }, + "cardbg_with_focus": null + }, + "is_contractor": false, + "contract_desc": "" + }, + "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": [], + "jump_url": {}, + "max_line": 6 + }, + "replies": [ + { + "rpid": 646507261, + "oid": 2, + "type": 1, + "mid": 11531860, + "root": 646408628, + "parent": 646408628, + "dialog": 646507261, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1519138195, + "rpid_str": "646507261", + "root_str": "646408628", + "parent_str": "646408628", + "like": 140, + "action": 0, + "member": { + "mid": "11531860", + "uname": "方圆十里有名的俊后生", + "sex": "男", + "sign": "", + "avatar": "http://i0.hdslb.com/bfs/baselabs/fab0bf0029e891eed162175c73473003528a5f22.jpg", + "rank": "10000", + "DisplayRank": "0", + "face_nft_new": 1, + "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": 1647619200000, + "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": [], + "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": "1471天前发布" + } + }, + { + "rpid": 1601887431, + "oid": 2, + "type": 1, + "mid": 341470991, + "root": 646408628, + "parent": 646408628, + "dialog": 1601887431, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1557745446, + "rpid_str": "1601887431", + "root_str": "646408628", + "parent_str": "646408628", + "like": 94, + "action": 0, + "member": { + "mid": "341470991", + "uname": "飞行科", + "sex": "保密", + "sign": "", + "avatar": "http://i2.hdslb.com/bfs/face/327188d3f35510699e54a65a65b2fba95dd6ded2.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": "1024天前发布" + } + }, + { + "rpid": 1627517285, + "oid": 2, + "type": 1, + "mid": 244446278, + "root": 646408628, + "parent": 646408628, + "dialog": 1627517285, + "count": 0, + "rcount": 0, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1558630445, + "rpid_str": "1627517285", + "root_str": "646408628", + "parent_str": "646408628", + "like": 75, + "action": 0, + "member": { + "mid": "244446278", + "uname": "KRHX", + "sex": "男", + "sign": "自由的明天仍在前方\n如繁星般闪烁着光芒\n即便只是缥缈的愿景\n也要朝着那黎明迈向\n哪怕路途艰辛\n哪怕前途渺茫\n世间进步仍未停息\n向那理想的彼方", + "avatar": "http://i2.hdslb.com/bfs/face/df0e691dd30d84f9c5224dbb7820b03953c7e6de.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": 2, + "vipDueDate": 1647446400000, + "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": 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": "1013天前发布" + } + } + ], + "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": { + "sub_reply_entry_text": "共160条回复", + "sub_reply_title_text": "相关回复共160条", + "time_desc": "1471天前发布" + } + } + ], + "top": { + "admin": null, + "upper": null, + "vote": null + }, + "top_replies": null, + "lottery_card": null, + "folder": { + "has_folded": false, + "is_folded": false, + "rule": "https://www.bilibili.com/blackboard/foldingreply.html" + }, + "up_selection": { + "pending_count": 0, + "ignore_count": 0 + }, + "cm": {}, + "cm_info": { + "ads": null + }, + "effects": { + "preloading": "" + }, + "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": 2 + }, + "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, + "callbacks": null + } +} +``` + +
+ +## 获取指定评论的回复 + +> 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
定义域:1-49
但 data_replies 的最大内容数为20,因此设置为49其实也只会有20条回复被返回 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无此项
12002:评论区已关闭
12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj
错误时: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:无需筛选
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' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ +## 获取指定评论对话树 + +> 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:成功
-400:请求错误
-404:无此项
12002:评论区已关闭
12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj
错误时: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:无需筛选
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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 获取评论区热评 + +> 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
定义域:1-49 | +| pn | num | 页码 | 非必要 | 默认为1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无此项
12002:评论区已关闭
12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj
错误时: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' +``` + +
+查看响应示例: + +```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": {} + } + ] + } +} +``` + +
+ +## ~~获取指定评论信息~~ + +> https://api.bilibili.com/x/v2/reply/info + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------------- | ------ | -------------------------------------------- | +| type | num | 评论区类型代码 | 非必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区 id | 非必要 | | +| rpid | num | 目标评论 rpid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无此项 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj
错误时: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' +``` + +
+查看响应示例: + +```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": {} + } +} +``` + +
+ +## 获取评论区评论总数 + +> https://api.bilibili.com/x/v2/reply/count + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------------- | ------ | -------------------------------------------- | +| type | num | 评论区类型代码 | 必要 | **[类型代码见表](readme.md#评论区类型代码)** | +| oid | num | 目标评论区 id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无此项
12009:评论主体的type不合法 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj
错误时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---- | +| count | num | 评论条数 | | + +**示例:** + +获取视频`av2`的评论区总计评论条数 + +```shell +curl -G 'https://api.bilibili.com/x/v2/reply/count' \ +--data-urlencode 'type=1' \ +--data-urlencode 'oid=2' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 65521 + } +} +``` + +
+ diff --git a/docs/comment/readme.md b/docs/comment/readme.md new file mode 100644 index 0000000..687fe24 --- /dev/null +++ b/docs/comment/readme.md @@ -0,0 +1,336 @@ +# 评论区 + + + +评论系统为全站通用,且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
大于一级评论则为根评论 id | +| parent | num | 回复父评论 rpid | 若为一级评论则为 0
若为二级评论则为根评论 rpid
大于二级评论为上一级评 论 rpid | +| dialog | num | 回复对方 rpid | 若为一级评论则为 0
若为二级评论则为该评论 rpid
大于二级评论为上一级评论 rpid | +| count | num | 二级评论条数 | | +| rcount | num | 回复评论条数 | | +| floor | num | 评论楼层号 | **注:若不支持楼层则无此项** | +| state | num | (?) | | +| fansgrade | num | 是否具有粉丝标签 | 0:无
1:有 | +| attr | num | 某属性位? | | +| ctime | num | 评论发送时间 | 时间戳 | +| rpid_str | str | 评论rpid | 字串格式 | +| root_str | str | 根评论rpid | 字串格式 | +| parent_str | str | 回复父评论rpid | 字串格式 | +| like | num | 评论获赞数 | | +| action | num | 当前用户操作状态 | 需要登录(Cookie 或 APP)
否则恒为 0
0:无
1:已点赞
2:已点踩 | +| member | obj | 评论发送者信息 | | +| content | obj | 评论信息 | | +| replies | 无效时:null
有效时:array | 评论回复条目预览 | **仅嵌套一层**
否则为 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
有效时:obj | 发送者粉丝标签 | | +| following | num | 是否关注该用户 | 需要登录(Cookie或APP)
否则恒为0
0:未关注
1:已关注 | +| is_followed | num | 是否被该用户关注 | 需要登录(Cookie或APP)
否则恒为0
0:未关注
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:无
0:个人认证
1:机构认证 | +| desc | str | 认证信息 | 无为空 | + +`member`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | -------------- | --------------------------------------- | +| vipType | num | 大会员类型 | 0:无
1:月会员
2:年以上会员 | +| vipDueDate | num | 大会员到期时间 | 毫秒 时间戳 | +| dueRemark | str | (?) | | +| accessStatus | num | (?) | | +| vipStatus | num | 大会员状态 | 0:无
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:大会员
annual_vip:年度大会员
ten_annual_vip:十年大会员
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
有效时:obj | 头像框信息 | | +| cardbg | 无效时:null
有效时:obj | 评论卡片装扮 | | +| cardbg_with_focus | null | (?) | | + +`user_sailing`中的`pendant`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ---- | -------------- | -------------------------------------- | +| id | num | 头像框 id | | +| name | str | 头像框名称 | | +| image | str | 头像框图片 url | | +| jump_url | str | 空 | | +| type | str | 装扮类型 | suit:一般装扮
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:一般装扮
vip_suit:vip 装扮 | + +`cardbg`中的`fan`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------------ | ---------------- | +| is_fan | num | 是否为粉丝专属装扮 | 0:否
1:是 | +| number | num | 粉丝专属编号 | | +| color | str | 数字颜色 | 颜色码 | +| name | str | 装扮名称 | | +| num_desc | str | 粉丝专属编号 | 字串格式 | + +`评论条目`中的`content`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------------------ | ------------------------------------------------------------ | +| message | str | 评论内容 | **重要** | +| plat | num | 评论发送端 | 1:web端
2:安卓客户端
3:ios 客户端
4:wp 客户端 | +| device | str | 评论发送平台设备 | | +| members | array | at 到的用户信息 | | +| emote | obj | 需要渲染的表情转义 | 评论内容无表情则无此项 | +| jump_url | obj | 需要高亮的超链转义 | | +| max_line | num | 6 | 收起最大行数 | + +`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:免费
2:会员专属
3:购买所得
4:颜文字 | +| attr | num | (?) | | +| text | str | 表情转义符 | | +| url | str | 表情图片 url | | +| meta | obj | 属性信息 | | +| mtime | num | 表情创建时间 | 时间戳 | +| jump_title | str | 表情名称 | | + +`{表情转义符}`中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | ---------------- | +| size | num | 表情尺寸信息 | 1:小
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 | | + +`评论条目`中的`replies`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ------------------------------------------------------------ | +| 0 | obj | 回复条目1 | **为本对象的递归嵌套**
**仅可嵌套一层**
按照热度顺序排列 | +| 1 | obj | 回复条目2 | | +| 2 | obj | 回复条目3 | 最后一项 | + +`评论条目`中的`folder`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------------- | ---- | +| has_folded | bool | 是否有被折叠的二级评论 | | +| is_folded | bool | 评论是否被折叠 | | +| rule | str | 相关规则页面 url | | + +`评论条目`中的`up_action`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------------- | ----------------------- | +| like | bool | 是否UP主觉得很赞 | false:否
true:是 | +| reply | bool | 是否被UP主回复 | false:否
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`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | ---- | -------- | -------------------- | +| sub_reply_entry_text | str | 回复提示 | `共 xx 条回复` | +| sub_reply_title_text | str | 回复提示 | `相关回复共有 xx 条` | +| time_desc | str | 时间提示 | `xx 天/小时 前发布` | diff --git a/docs/creativecenter/railgun.md b/docs/creativecenter/railgun.md new file mode 100644 index 0000000..6b5abaf --- /dev/null +++ b/docs/creativecenter/railgun.md @@ -0,0 +1,275 @@ +# 电磁力相关 + +- [获取电磁力等级(web端)](#获取电磁力等级web端) +- [获取电磁力详细数值(双端)](#获取电磁力详细数值双端) +- [获取电磁力数值历史变化(双端)](#获取电磁力数值历史变化双端) + +--- + +电磁力每周日下午刷新 + +## 获取电磁力等级(web端) + +> https://member.bilibili.com/x/web/elec/user + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ----------- | ---------------- | +| mid | num | 当前用户mid | | +| state | num | 电磁力等级 | | +| reason | str | 空 | **作用尚不明确** | + +**示例:** + +```shell +curl 'https://member.bilibili.com/x/web/elec/user' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "mid": 293793435, + "state": 2, + "reason": "" + } +} +``` + +
+ +## 获取电磁力详细数值(双端) + +> https://api.bilibili.com/studio/up-rating/rating/summary + +*请求方式: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`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ---- | -------------- | ---- | +| 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' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ +## 获取电磁力数值历史变化(双端) + +> 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:成功
-101:账号未登录
-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' +``` + +
+查看响应示例: + +```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 + ] + } +} +``` + +
diff --git a/docs/creativecenter/statistics&data.md b/docs/creativecenter/statistics&data.md new file mode 100644 index 0000000..2e82b05 --- /dev/null +++ b/docs/creativecenter/statistics&data.md @@ -0,0 +1,811 @@ +# 统计与数据 + +- [UP主视频状态数据](#UP主视频状态数据) +- [UP主专栏状态数据](#UP主专栏状态数据) +- [视频数据增量趋势](#视频数据增量趋势) +- [专栏数据增量趋势](#专栏数据增量趋势) +- [稿件操作来源占比情况](#稿件操作来源占比情况) +- [播放来源占比情况(平台及方式)](#播放来源占比情况平台及方式) +- [播放分布情况(粉丝与路人)](#播放分布情况粉丝与路人) + +--- + +统计与数据次日中午12刷新 + +## UP主视频状态数据 + +> https://member.bilibili.com/x/web/index/stat + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## UP主专栏状态数据 + +> https://member.bilibili.com/x/web/data/article + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 视频数据增量趋势 + +> https://member.bilibili.com/x/web/data/article/thirty + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +数据为前30天 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | -------------- | +| type | num | 目标数据类型 | 必要 | 类型代码见下表 | + +类型代码`type`: + +| 代码 | 含义 | +| ---- | ---- | +| 1 | 播放 | +| 2 | 弹幕 | +| 3 | 评论 | +| 4 | 分享 | +| 5 | 投币 | +| 6 | 收藏 | +| 7 | 充电 | +| 8 | 点赞 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-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' +``` + +
+查看响应示例: + +```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 + }, + ………… + ] +} +``` + +
+ +## 专栏数据增量趋势 + +> 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:成功
-101:账号未登录
-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' +``` + +
+查看响应示例: + +```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 + }] +} +``` + +
+ +## 稿件操作来源占比情况 + +> 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:成功
-101:账号未登录
-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' +``` + +
+查看响应示例: + +```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 + } + } + } +} +``` + +
+ +## 播放来源占比情况(平台及方式) + +> https://member.bilibili.com/x/web/data/playsource + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ +## 播放分布情况(粉丝与路人) + +> https://member.bilibili.com/x/web/data/base + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } + } + } +} +``` + +
diff --git a/docs/danmaku/action.md b/docs/danmaku/action.md new file mode 100644 index 0000000..3c38836 --- /dev/null +++ b/docs/danmaku/action.md @@ -0,0 +1,822 @@ +# 弹幕操作 + +- [发送视频弹幕](#发送视频弹幕) +- [发送互动弹幕](#发送互动弹幕) +- [撤回弹幕](#撤回弹幕) +- [购买高级弹幕发送权限](#购买高级弹幕发送权限) +- [检测高级弹幕发送权限](#检测高级弹幕发送权限) +- [查询弹幕点赞数](#查询弹幕点赞数) +- [点赞弹幕](#点赞弹幕) +- [举报弹幕](#举报弹幕) +- [保护&删除弹幕](#保护&删除弹幕) +- [修改字幕池](#修改字幕池) + +--- + +## 发送视频弹幕 + +> https://api.bilibili.com/x/v2/dm/post + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +此接口与漫画弹幕相同 + +`mode=6`的逆向弹幕与`mode=8`的代码弹幕不可发送 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ | +| access_key | str | APP登录Token | APP方式必要 | | +| type | num | 弹幕类选择 | 必要 | 1:视频弹幕 | +| oid | num | 视频cid | 必要 | | +| msg | str | 弹幕内容 | 必要 | 长度小于100字符 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒
默认为0 | +| color | num | 弹幕颜色设置 | 非必要 | 十进制RGB888值
默认为16777215(#FFFFFF)白色 | +| fontsize | num | 弹幕字号设置 | 非必要 | 默认为25
极小:12
超小:16
小:18
标准:25
大:36
超大:45
极大:64 | +| pool | num | 弹幕池选择 | 非必要 | 0:普通池
1:字幕池
2:特殊池(代码/BAS弹幕)
默认为0 | +| mode | num | 弹幕类型选择 | 必要 | 1:普通弹幕
4:底部弹幕
5:顶部弹幕
7:高级弹幕
9:BAS弹幕(`pool`必须为2) | +| rnd | num | 当前时间戳*1000000 | 非必要 | **若无此项,则发送弹幕冷却时间限制为90s**
若有此项,则发送弹幕冷却时间限制为5s | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-404:无此项
36700:系统升级中
36701:弹幕包含被禁止的内容
36702:弹幕长度大于100
36703:发送频率过快
36704:禁止向未审核的视频发送弹幕
36705:您的等级不足,不能发送弹幕
36706:您的等级不足,不能发送顶端弹幕
36707:您的等级不足,不能发送底端弹幕
36708:您的等级不足,不能发送彩色弹幕
36709:您的等级不足,不能发送高级弹幕
36710:您的权限不足,不能发送这种样式的弹幕
36711:该视频禁止发送弹幕
36712:level 1用户发送弹幕的最大长度为20
36713:稿件未付费
36714:弹幕发送时间不合法
36715:当日操作数量超过上限 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | ------------ | +| action | str | 空 | 作用尚不明确 | +| dmid | num | 弹幕dmid | | +| dmid_str | str | 弹幕dmid | 字串形式 | +| visible | bool | true | 作用尚不明确 | + +**示例:** + +为视频`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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "action":"", + "dmid":32161968826613767, + "dmid_str":"32161968826613767", + "visible":true + } +} +``` + +
+ +## 发送互动弹幕 + +> 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主头像弹幕
2:关联视频弹幕
5:视频内嵌引导关注按钮 | +| aid | num | 稿件avid | 必要 | | +| cid | num | 视频cid | 必要 | | +| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒
默认为0 | +| plat | num | 平台标识 | 必要 | 1:web端
2:安卓端
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:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-404:无此项
-500:服务器错误
36711:该视频禁止发送弹幕
79026:发送失败,请勿填写当前稿件bvid
79024:发送失败,请输入正确的bvid
79036:该指令弹幕超出限制
79037:关注弹幕坐标溢出 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 正确时:obj
错误时:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------------------- | ------------------------------------------------------------ | +| command | str | 指令? | UP主头像弹幕:#UP#
关联视频弹幕:#LINK#
视频内嵌引导关注按钮:#ATTENTION# | +| content | str | 弹幕内容 | | +| extra | str | 弹幕数据 | json序列 | +| id | num | 弹幕dmid | | +| idStr | str | 弹幕dmid | 字串形式 | +| mid | num | 用户mid | | +| oid | num | 视频cid | | +| progress | num | 弹幕出现在视频内的时间 | | +| type | num | 互动弹幕类型 | 1:UP主头像弹幕
2:关联视频弹幕
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:仅关注
1:仅三联
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' +``` + +
+查看响应示例: + +```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" + } +} +``` + +
+ +为视频`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' +``` + +
+查看响应示例: + +```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" + } +} +``` + +
+ + +为视频`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' +``` + +
+查看响应示例: + +```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" + } +} +``` + +
+ + +## 撤回弹幕 + +> 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:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
-404:无此项
36301:撤回失败,弹幕发送已过2分钟
36302:撤回失败,弹幕已经被删除或撤回
36303:撤回失败,今天撤回的机会已经用完
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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "撤回成功,你还有3次撤回机会" +} +``` + +
+ +## 购买高级弹幕发送权限 + +> 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:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-107:硬币不足
-400:请求错误
36007:不允许购买
36009:正在确认中
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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"已成功购买" +} +``` + +
+ +## 检测高级弹幕发送权限 + +> 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:成功
-101:账号未登录
--400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:obj
无效时:null | 有效时:信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ---------------- | ------------------------------------------ | +| coins | num | 需要支付的硬币数 | | +| confirm | num | 是否同意 | 1:同意
2:未同意
未购买时无此项 | +| accept | bool | 是否允许申请 | true:允许
false:不允许 | +| hasBuy | bool | 是否已购买 | true:已购买
未购买时无此项 | + +**示例:** + +查询视频cid为`168901231`的视频高级弹幕权限购买状态 + +当前状态为已购买且同意 + +```shell +curl -G 'https://api.bilibili.com/x/dm/adv/state' \ +--data-urlencode 'cid=168901231' \ +--data-urlencode 'mode=sp' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "coins": 2, + "confirm": 1, + "accept": true, + "hasBuy": true + } +} +``` + +
+ +## 查询弹幕点赞数 + +> https://api.bilibili.com/x/v2/dm/thumbup/stats + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| oid | num | 视频cid | 必要 | | +| ids | nums | 弹幕dmid列表 | 必要 | 多个id之间用`,`分隔 | + +**json回复** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------------- | --------------------------------- | +| {弹幕id} | obj | 弹幕id对应的信息 | id分别对应请求参数中的`ids`,下同 | +| …… | obj | 弹幕id对应的信息 | | + +`{弹幕id}`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | -------- | ------------------------------------------------------------ | +| likes | num | 点赞数 | | +| user_like | num | 是否点赞 | 0:未点赞
1:已点赞
需要登录(Cookie或APP)
未登录恒为0 | +| id_str | str | 弹幕dmid | | + +**示例** + +查询`cid=236871317`下的弹幕`35600074482384899`、`38880975220375559`、`39052528418553863`点赞数 + +```shell +curl -G 'https://api.bilibili.com/x/v2/dm/thumbup/stats' \ +--data-urlencode 'oid=236871317' \ +--data-urlencode 'ids=39019145405661191,38880975220375559,39052528418553863' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "38880975220375559": { + "likes": 1, + "user_like": 1, + "id_str": "38880975220375559" + }, + "39019145405661191": { + "likes": 3, + "user_like": 1, + "id_str": "39019145405661191" + }, + "39052528418553863": { + "likes": 2, + "user_like": 0, + "id_str": "39052528418553863" + } + } +} +``` + +
+ +## 点赞弹幕 + +> https://api.bilibili.com/x/v2/dm/thumbup/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | -------------- | ------------------------ | +| access_key | str | APP登录Token | APP方式必要 | | +| dmid | num | 弹幕dmid | 必要 | | +| oid | num | 视频cid | 必要 | | +| op | num | 操作 | 必要 | 1:点赞
2:取消点赞 | +| platform | str | 平台 | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf 校验失败
-400:请求错误
36106:该弹幕已被删除
36805:该视频禁止点赞弹幕
65004:取消赞失败 未点赞过
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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +
+ +## 举报弹幕 + +> 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:成功
-101:账号未登录
-111:csrf 校验失败
-400:请求错误
36201:举报弹幕不存在
36203:举报原因类型错误
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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"" +} +``` + +
+ +## 保护&删除弹幕 + +> 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:删除弹幕
2:弹幕保护
3:取消保护 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf 校验失败
-400:请求错误
-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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +
+ +## 修改字幕池 + +> 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:移出字幕池
1:移入字幕池 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf 校验失败
-400:请求错误
-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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +
diff --git a/docs/danmaku/buzzword.md b/docs/danmaku/buzzword.md new file mode 100644 index 0000000..d03c719 --- /dev/null +++ b/docs/danmaku/buzzword.md @@ -0,0 +1,513 @@ +# 名词解释 + +该功能用于解释和科普 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代表“哔哩哔哩热词图鉴”
5代表“语言类” | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | 默认为20 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ +## 查询名词解释详情 + +> https://api.bilibili.com/x/v2/dm/buzzword/detail + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------ | ------ | -------------------------------- | +| id | num | 名词id | 必要 | 如:1代表“kksk”
2代表“打脸” | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | --------------------------------- | -------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:不存在该名词 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有数据时:obj
无数据时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ------------------------------- | -------------------- | ----------------------------- | +| id | num | 名词id | | +| name | str | 名词 | | +| description | str | 名词解释 | | +| picture | str | 名词图片 url | | +| types | array | 父分类列表 | 该名词可能隶属多个父分类 | +| related_words | array | 近义词/相关词 | | +| uppers | 有数据:array
无数据:null | 相关 UP 列表 | 该名词(梗)出处 | +| related_ugc | 有数据:array
无数据:null | 相关 ucg 视频列表 | 该名词(梗)出处 | +| related_ogv | 有数据:array
无数据:null | 相关 pgc 视频列表 | 该名词(梗)出处 | +| guides | obj | 推荐创作信息 | | +| related_buzzwords | array | 推荐名词列表 | | +| topic | obj | 关联话题信息 | | +| show_dynamic | bool | 是否展示话题动态聚合 | `true`展示
`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)
`true`已关注
`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`已追剧/番
`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' +``` + +
+查看响应示例: + + +```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 + } +} +``` + +
diff --git a/docs/danmaku/config.md b/docs/danmaku/config.md new file mode 100644 index 0000000..06b9c6b --- /dev/null +++ b/docs/danmaku/config.md @@ -0,0 +1,75 @@ +# 弹幕个人配置修改 + +- [修改弹幕个人配置(web端)](#修改弹幕个人配置web端) + +--- + +## 修改弹幕个人配置(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:开启
false:关闭 | +| blockscroll | bool | 屏蔽类型-滚动 | 非必要 | true:不屏蔽
false:屏蔽 | +| blocktop | bool | 屏蔽类型-顶部 | 非必要 | 同上 | +| blockbottom | bool | 屏蔽类型-底部 | 非必要 | 同上 | +| blockcolor | bool | 屏蔽类型-彩色 | 非必要 | 同上 | +| blockspecial | bool | 屏蔽类型-特殊 | 非必要 | 同上 | +| ai_switch | bool | 是否打开智能云屏蔽 | 非必要 | true:开启
false:关闭 | +| ai_level | num | 智能云屏蔽等级 | 非必要 | 区间:[0-10]
0为默认等级(3级) | +| preventshade | bool | 防挡弹幕(底部15%) | 非必要 | true:开启
false:关闭 | +| dmask | bool | 智能防挡弹幕(人像蒙版) | 非必要 | 同上 | +| opacity | num | 弹幕不透明度 | 非必要 | 区间:[0-1] | +| dmarea | num | 弹幕显示区域 | 非必要 | 100:不重叠
75:3/4屏
50:半瓶
25:1/4屏
0:不限 | +| speedplus | num | 弹幕速度 | 非必要 | 区间:[0.4-1.6] | +| fontsize | num | 字体大小 | 非必要 | 区间:[0.4-1.6] | +| screensync | bool | 跟随屏幕缩放比例 | 非必要 | true:开启
false:关闭 | +| speedsync | bool | 根据播放倍速调整速度 | 非必要 | 同上 | +| fontfamily | str | 字体类型 | 非必要 | 未启用 | +| bold | bool | 粗体 | 非必要 | 未启用 | +| fontborder | num | 描边类型 | 非必要 | 0:重墨
1:描边
2:45°投影 | +| drawType | string | 渲染类型 | 非必要 | 未启用 | +| ts | num | 当前时间戳 | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +
\ 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..bb11abd --- /dev/null +++ b/docs/danmaku/danmaku_proto.md @@ -0,0 +1,111 @@ +# protobuf弹幕 + +2020年5月23日,哔哩哔哩网页端及移动端启用了新的默认弹幕api,网页端弹幕显示的上限变为原弹幕池上限的两倍。 + +新的api是以6分钟为一个单位加载,即每次加载6分钟内的弹幕 + +- [获取实时弹幕](#获取实时弹幕) + +--- + +## 获取实时弹幕 + +> https://api.bilibili.com/x/v2/dm/web/seg.so (web端) +> +> https://api.bilibili.com/x/v2/dm/list/seg.so (APP端) +> +> https://i0.hdslb.com/bfs/dm/{data}.bin (BAS/代码弹幕专包) + +*请求方式:GET* + +此接口与漫画弹幕相同 + +只能返回普通弹幕(`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:视频弹幕 | +| oid | num | 视频cid | 必要 | | +| pid | num | 稿件avid | 非必要 | | +| segment_index | num | 分包 | 必要 | 6分钟一包 | + +**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:普通弹幕
4:底部弹幕
5:顶部弹幕
6:逆向弹幕
7:高级弹幕
8:代码弹幕
9:BAS弹幕(仅限于特殊弹幕专包) | +| fontsize | int32 | 弹幕字号 | 18:小
25:标准
36:大 | +| color | uint32 | 弹幕颜色 | 十进制RGB888值 | +| midHash | string | 发送者mid的HASH | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户id | +| content | string | 弹幕内容 | utf-8编码 | +| ctime | int64 | 弹幕发送时间 | 时间戳 | +| weight | int32 | 权重 | 用于智能屏蔽,根据弹幕语义及长度通过AI识别得出
范围:[0-10]
值越大权重越高 | +| action | string | 动作? | 作用尚不明确 | +| pool | int32 | 弹幕池 | 0:普通池
1:字幕池
2:特殊池(代码/BAS弹幕) | +| idStr | string | 弹幕dmid | 字串形式
唯一 可用于操作参数 | + +**示例:** + +获取视频`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..ebc6601 --- /dev/null +++ b/docs/danmaku/danmaku_view_proto.md @@ -0,0 +1,298 @@ +# 弹幕元数据 + +2020-09-25 B站更新了互动弹幕功能,包括UP主头像弹幕、关联视频弹幕、视频内嵌引导关注按钮三大功能 + +详情见: + +[【客户端更新】6.10版本更新!UP主支持发布关联视频弹幕]( https://www.bilibili.com/read/cv7728299 ) + + [引导关注卡片](https://www.bilibili.com/blackboard/activity-c8a0iDRQy.html ) + +--- + +- [获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包(web端)](#获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包web端) +- [实例](#实例) + - [获取互动弹幕](#获取互动弹幕) + - [获取BAS(代码)弹幕专包](#获取BAS(代码)弹幕专包) + +--- + +## 获取弹幕个人配置与互动弹幕及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:开放弹幕
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主头像弹幕
`#LINK#`:关联视频弹幕
`#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:仅关注
1:仅三联
2:关注+三联 | + +消息`dmSetting`: + +| 名称 | 类型 | 含义 | 备注 | +| ------------ | ------ | ------------------------ | ------------------------------------------------------------ | +| dmSwitch | bool | 弹幕开关 | true:开启
false:关闭 | +| aiSwitch | bool | 智能云屏蔽 | 同上 | +| aiLevel | int32 | 智能云屏蔽级别 | 区间:[1-10] | +| blocktop | bool | 屏蔽类型-顶部 | true:不屏蔽
false:屏蔽 | +| blockscroll | bool | 屏蔽类型-滚动 | 同上 | +| blockbottom | bool | 屏蔽类型-底部 | 同上 | +| blockcolor | bool | 屏蔽类型-彩色 | 同上 | +| blockspecial | bool | 屏蔽类型-特殊 | 同上 | +| preventshade | bool | 防挡弹幕(底部15%) | true:开启
false:关闭 | +| dmask | bool | 智能防挡弹幕(人像蒙版) | 同上 | +| opacity | float | 弹幕不透明度 | 区间:[0-1] | +| dmarea | int32 | 弹幕显示区域 | 100:不重叠
75:3/4屏
50:半瓶
25:1/4屏
0:不限 | +| speedplus | float | 弹幕速度 | 区间:[0.4-1.6] | +| fontsize | float | 字体大小 | 区间:[0.4-1.6] | +| screensync | bool | 跟随屏幕缩放比例 | | +| speedsync | bool | 根据播放倍速调整速度 | | +| fontfamily | string | 字体类型? | 未启用 | +| bold | bool | 粗体? | 未启用 | +| fontborder | int32 | 描边类型 | 0:重墨
1:描边
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..bf568c9 --- /dev/null +++ b/docs/danmaku/danmaku_xml.md @@ -0,0 +1,153 @@ +# xml弹幕 + +实时弹幕池容量有限(根据视频类型500-8000条不等),占满后再发送会使实时弹幕池底部的弹幕压入历史弹幕池(类似于堆栈) + +--- + +- [获取实时弹幕1](#获取实时弹幕1) +- [获取实时弹幕2](#获取实时弹幕2) +- [弹幕格式](#弹幕格式) + +--- + +## 获取实时弹幕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回复:** + +
+查看响应示例: + +```xml + + + chat.bilibili.com + 144541892 + 0 + 1500 + 0 + 0 + e-r + 从结尾回来看这里,更感动了! + 咦三体居然还有动画 + 哈哈哈哈开心 + 红岸么 + 我就是想看我的世界里水滴长啥样 + 有手指? + 侦测到在途的聚变打击 + 都是虫子 + ocean + 村民,哼~ + 黄河之水天上来 + 镇站之宝 + 这水 + 海的那边是什么 + 折跃门准备完毕 + ………… + +``` + +
+ +## 弹幕格式 + +### 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:普通弹幕
4:底部弹幕
5:顶部弹幕
6:逆向弹幕
7:高级弹幕
8:代码弹幕
9:BAS弹幕(`pool`必须为2) | +| 2 | 弹幕字号 | int32 | 18:小
25:标准
36:大 | +| 3 | 弹幕颜色 | int32 | 十进制RGB888值 | +| 4 | 弹幕发送时间 | int32 | 时间戳 | +| 5 | 弹幕池类型 | int32 | 0:普通池
1:字幕池
2:特殊池(代码/BAS弹幕) | +| 6 | 发送者mid的HASH | string | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户id | +| 7 | 弹幕dmid | int64 | 唯一 可用于操作参数 | +| 8 | 弹幕的屏蔽等级 | int32 | 0-10,低于用户设定等级的弹幕将被屏蔽
(新增,下方样例未包含) | + +```xml +从结尾回来看这里,更感动了! +``` + +弹幕内容为:“从结尾回来看这里,更感动了!” + +参数为:视频内出现的时间是490.19100秒,类型是普通弹幕,字号为标准,颜色为白色(#FFFFFF),发送时间是2020/3/15 18:41:32......... + +### web版标准颜色 + +弹幕的颜色属性使用**十进制RGB888**值 + +| 颜色 | HEX(RGB888) | DEC(RGB888) | +| --------------------------------- | ----------------------------------- | ------------------------------------- | +| 红色 | FE0302 | 16646914‬ | +| 橘红 | FF7204 | 16740868 | +| 橘黄 | FFAA02 | 16755202 | +| 淡黄 | FFD302 | 16765698 | +| 黄色 | FFFF00 | 16776960 | +| 草绿 | A0EE00 | 10546688 | +| 绿色 | 00CD00 | 52480 | +| 墨绿 | 019899 | 104601 | +| 紫色 | 4266BE | 4351678 | +| 青色 | 89D5FF | 9022215 | +| 品红 | CC0273 | 13369971 | +| 黑色 | 222222 | 2236962 | +| 灰色 | 9B9B9B | 10197915 | +| 白色 | FFFFFF | 16777215 | diff --git a/docs/danmaku/history.md b/docs/danmaku/history.md new file mode 100644 index 0000000..9bb322d --- /dev/null +++ b/docs/danmaku/history.md @@ -0,0 +1,246 @@ +# 历史弹幕 + +**注:历史弹幕的xml接口已经失效,现已改为protobuf接口** + +- [查询历史弹幕日期](#查询历史弹幕日期) +- [获取历史弹幕protobuf接口](#获取历史弹幕protobuf接口) +- [~~获取历史弹幕xml接口~~](#获取历史弹幕xml接口) + +--- + +## 查询历史弹幕日期 + +> 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:成功
-400:请求错误
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有弹幕:array
无弹幕: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' +``` + +
+查看响应示例: + +```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" + ] +} +``` + +
+ +返回结果的 `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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": null +} +``` + +
+ +## 获取历史弹幕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](../grpc_api/bilibili/community/service/dm/v1.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接口 + +
+查看折叠内容: + +> 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' +``` + +
+查看响应示例: + +```xml + + + chat.bilibili.com + 144541892 + 0 + 1500 + 0 + 0 + 敬礼 + 悄默声的更新啊怎么 + 久等了 + 不都是乱纪元才浸泡 + 已阅,狗屁不通。大字报在地上搞搞就行,别弄到天上去 + CSSC。。。 + 看到了个寂寞 + 有耳朵了! + 雪天不用浸泡吧 + 未来史学派 + 浸泡!!!!!!! + 章召忠 + mi24av + 泪奔 + 组建太空军 + 是未来史学派? + 刘培强还行 + ………… + +``` + +
+ +
\ No newline at end of file diff --git a/docs/danmaku/snapshot.md b/docs/danmaku/snapshot.md new file mode 100644 index 0000000..7fad064 --- /dev/null +++ b/docs/danmaku/snapshot.md @@ -0,0 +1,92 @@ +# 弹幕快照 + +- [获取弹幕快照](#获取弹幕快照) + +--- + +## 获取弹幕快照 + +> https://api.bilibili.com/x/v2/dm/ajax + +*请求方式:GET* + +最近产生的几条弹幕内容,**最多20条** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | -------- | ------------------ | ------ | ---- | +| aid | num或str | 稿件avid或稿件bvid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | --------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + "漫画比动漫好看而且血腥", + "666", + "金木小天使", + "太喜欢了", + "每天一遍防止抑郁", + "我还记得土豆那时候还有的看", + "把在给我摸摸~", + "突然泪目", + "感谢野生字幕君", + "993-7", + "刚刚出的时候小学看,现在高二了", + "原版op有这么长吗?搞笑,肯定做了剪辑,op会给你放全歌?", + "让你看个op 3 : 5 4 秒?", + "说原版不原版的都是弱智", + "樱花", + "请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,", + "再来亿遍", + "错的不是我,而是这个世界。", + "吃货的第一季的最后一季足以让他封神!", + "+" + ] +} +``` + +
diff --git a/docs/dynamic/action.md b/docs/dynamic/action.md new file mode 100644 index 0000000..9f45494 --- /dev/null +++ b/docs/dynamic/action.md @@ -0,0 +1,109 @@ + + +# 动态操作 + +- [删除动态](#删除动态) +- [删除定时发送动态](#删除草稿) + +## 删除动态 + +> 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 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | +| ------- | ---- | ----------------- | +| code | num | 0:成功 | +| | | 500404:已经删除过 | +| | | 500406:不是自己的 | +| msg | str | 错误信息 | +| message | str | 和msg一样 | +| data | obj | 未知 | + +
+查看示例 + + +```bash +curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic' \ + -X POST \ + -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0' \ + -H 'Referer: https://t.bilibili.com/' \ + -H 'Cookie: SESSDATA=********; bili_jct=de2731532b4ab96bc8536da948932668;' \ + --data-raw 'dynamic_id=588320531406678918&csrf_token=de2731532b4ab96bc8536da948932668&csrf=de2731532b4ab96bc8536da948932668' +``` + +```json +{ + "code":0, + "msg":"", + "message":"", + "data": { + "_gt_":0 + } +} +``` + +
+ +## 删除草稿 + +> 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:成功
4120015: 系统异常 | +| message | str | 错误信息 | +| ttl | num | 1 | +| data | obj | 空对象 | + +
+查看示例 + + +```bash +curl -X POST 'https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/rm_draft' \ +--data-urlencode 'draft_id=755409289278914611' \ +--data-urlencode 'csrf=xxxx' +-b 'SESSDATA=xxxx;' \ +``` + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": {} +} +``` + +
+ diff --git a/docs/dynamic/atlist.md b/docs/dynamic/atlist.md new file mode 100644 index 0000000..09a0adf --- /dev/null +++ b/docs/dynamic/atlist.md @@ -0,0 +1,146 @@ +# 根据关键字搜索用户(at别人时的填充列表) + +**注意关键字不一定顺序匹配,如最后示例** + +> https://api.vc.bilibili.com/dynamic_mix/v1/dynamic_mix/at_search + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**正文参数(multipart/form-data):** + +| 参数名 | 类型 | 内容 | +| --- | --- | --- | +| uid | num | 自己的uid | +| keyword | str | 搜索关键字 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | +| --- | --- | --- | +| code | num | 0成功 | +| msg | str | 成功为空文本 | +| message | str | 同msg | +| data | obj | 数据本体 | + +data对象: + +| 字段 | 类型 | 内容 | +| --- | --- | --- | +| groups | obj[] | 内容分组(好像是根据关注列表分) | +| \_gt_ | num | 0 | + +group对象: + +| 字段 | 类型 | 内容 | +| --- | --- | --- | +| group_type | num | 2:我的关注
4:其他 | +| group_name | str | 分组名字 | +| items | obj[] | 用户信息 | + +item对象: + +| 字段 | 类型 | 内容 | +| --- | --- | --- | +| uid | num | 用户id | +| uname | str | 用户昵称 | +| face | str | 用户头像url | +| fans | num | 用户粉丝数 | +| official_verify_type | num | 认证信息? | + +
+查看示例 + +```shell +# 搜索关键字:社会易 +curl 'https://api.vc.bilibili.com/dynamic_mix/v1/dynamic_mix/at_search?uid=15858903&keyword=%e7%a4%be%e4%bc%9a%e6%98%93' \ + -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0' -H 'Accept: application/json, text/plain, */*' \ + -H 'Referer: https://t.bilibili.com/' \ + -H 'Cookie: SESSDATA=******' +``` + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "groups": [ + { + "group_type": 2, + "group_name": "我的关注", + "items": [ + { + "uid": 293793435, + "uname": "社会易姐QwQ", + "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "fans": 1179, + "official_verify_type": -1 + } + ] + }, + { + "group_type": 4, + "group_name": "其他", + "items": [ + { + "uid": 250129011, + "uname": "社会小伙肖子易", + "face": "https://i0.hdslb.com/bfs/face/2ae12d7f71173baa8e00c4cfe97acb5a3de31566.jpg", + "fans": 7, + "official_verify_type": -1 + }, + { + "uid": 394873001, + "uname": "社会你易叔", + "face": "https://i2.hdslb.com/bfs/face/bde2811aa895e349036aba9ece5630bcd1341ff0.jpg", + "fans": 5, + "official_verify_type": -1 + }, + { + "uid": 486568790, + "uname": "社会主义接班人小易", + "face": "https://i2.hdslb.com/bfs/face/1ebb0d4aa8e2c4b532f82983503ec38b62a1820f.jpg", + "fans": 3, + "official_verify_type": -1 + }, + { + "uid": 497214639, + "uname": "社会你易易", + "face": "https://i0.hdslb.com/bfs/face/dccb52f3c15ba1bb99aac3c86e9825842cc95295.jpg", + "fans": 2, + "official_verify_type": -1 + }, + { + "uid": 496622388, + "uname": "社会你易哥", + "face": "https://i0.hdslb.com/bfs/face/daac5514a7622741f767c68b1cbc6b91e60b4798.jpg", + "fans": 1, + "official_verify_type": -1 + }, + { + "uid": 457675287, + "uname": "易社会", + "face": "https://i0.hdslb.com/bfs/face/632bf9dd17f4e9f2f12be2c0ad00cdacd2d825fa.jpg", + "fans": 1, + "official_verify_type": -1 + }, + { + "uid": 123270058, + "uname": "周易社会", + "face": "https://i1.hdslb.com/bfs/face/c6100396729112230deb3b0972db1504e9ce21bf.jpg", + "fans": 1, + "official_verify_type": -1 + } + ] + } + ], + "_gt_": 0 + } +} +``` + +
\ No newline at end of file diff --git a/docs/dynamic/basicInfo.md b/docs/dynamic/basicInfo.md new file mode 100644 index 0000000..83a129e --- /dev/null +++ b/docs/dynamic/basicInfo.md @@ -0,0 +1,1586 @@ +# 动态基本信息 +- 单条动态基本信息 + - [动态转发列表](#动态转发列表) + - [动态评论列表](../comment/list.md) + - [动态点赞列表](#动态点赞列表) +- [获取草稿箱(定时发送)列表](#获取草稿列表) + +## 动态转发列表 + +> 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' +``` + +
+查看响应示例 + +```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 + } +} +``` +
+ + +## 动态点赞列表 + +> 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' +``` + +
+查看响应示例 + +```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 + } +} +``` + +
+ +## 获取草稿列表 + +> 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..0b7c8d8 --- /dev/null +++ b/docs/dynamic/card_info.md @@ -0,0 +1,487 @@ +# 动态详细信息字段 + +不同动态内容卡片的具体信息。包含在***获取特定动态卡片信息,话题下特定动态信息***等API的Json回复中。 + +以card字段的形式出现,内容为一个可被解析为Json对象的字符串。 + +不同类型的动态内容拥有不同的字段。 + +**** + +## 在转发类动态中(type=1) + +需注意账号转发视频投稿,其他用户的动态以及分享收藏夹等均为转发类内容,并不属于type=4300的收藏类动态等。 + +在type=1的转发类动态中,解析出的对象包含以下内容: +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| user | obj | 转发者用户信息 | 包含用户名,用户id和头像 | +| item | obj | 转发相关信息 | `content`字段为转发附言 | | +| origin | str | 被转发动态信息 | 即本文档所描述的动态详细信息字段。
动态类型为`item`对象的`orig_type`字段 | +| origin_extend_json | str | 被转发动态补充信息 | | +| origin_user | obj | 被转发用户信息 | | +| activity_infos | obj | 被转发动态参与的活动 | | + +
+查看字段内容示例: + +```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\":\"打卡挑战\"}" + } + ] + } +} +``` + +
+ +## 在图片动态中(type=2) + +在type=2的图片动态中,解析出的对象包含以下内容: +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| item | obj | 图片动态内容 | `description`字段为文字内容
`pictures`字段图片 | | +| user | obj | 发布者用户信息 | 包含用户名,用户id和头像 | + + +
+查看字段内容示例: + +```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 + } + } +} +``` + +
+ + +## 在文字动态中(type=4) + +在type=4的文字动态中,解析出的对象包含以下内容: +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| item | obj | 文字动态内容 | `description`字段为文字内容 | | +| user | obj | 发布者用户信息 | 包含用户名,用户id和头像 | + + +
+查看字段内容示例: + +```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 + } +} +``` + +
+ +## 在视频投稿动态中(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 | 视频数| | + + + +
+查看字段内容示例: + +```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 +} +``` + +
+ +## 在专栏投稿动态中(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 | 可能是专栏类别 | | + +
+查看字段内容示例: + +```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 +} +``` + +
+ +## 在音频投稿动态中(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 | 上传者的头像链接 | | + +
+查看字段内容示例: + +```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" +} +``` + +
diff --git a/docs/dynamic/content.md b/docs/dynamic/content.md new file mode 100644 index 0000000..19fa44d --- /dev/null +++ b/docs/dynamic/content.md @@ -0,0 +1,1039 @@ +# 动态信息 + +- [获取正在直播的已关注者](#获取正在直播的已关注者) +- [获取发布新动态的已关注者](#获取发布新动态的已关注者) + +--- + +## 获取正在直播的已关注者 + +> 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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 获取发布新动态的已关注者 + +> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_dyn_uplist + +*请求方式:GET* + +认证方式:Cookie(SESSDSTA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------------- | ---- | ------------------ | ------ | ---------------- | +| teenagers_mode | num | 是否开启青少年模式 | 非必要 | 否:0
是:1 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
\ No newline at end of file diff --git a/docs/dynamic/get_dynamic_detail.md b/docs/dynamic/get_dynamic_detail.md new file mode 100644 index 0000000..0b8490e --- /dev/null +++ b/docs/dynamic/get_dynamic_detail.md @@ -0,0 +1,601 @@ +# 获取特定动态卡片信息 + +> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ---------- | ------ | -------- | +| dynamic_id | id | 动态id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 默认为空 | +| msg | num | 空 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------- | ------------ | +| card | obj | 动态卡片内容 | 当动态不存在/删除时不返回此项 | +| result | num | 0 | 作用尚不明确(当动态不存在/删除时不返回此项) | +| \_gt\_ | num | 0 | 作用尚不明确 | + +`data`中的`card`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| activity_infos | obj | 该条动态参与的活动 |当此条动态没有参与任何活动时不显示此项 | +| card | str | 动态详细信息 | 会跟随此动态类型不同发生一定的变化,评论数、点赞数等相关信息参考`desc`字段 | +| desc | obj | 动态相关信息 | 会跟随此动态类型不同发生一定的变化,详细信息(例如动态描述等)参考`card`字段 | +| display | obj | 动态部分的可操作项 | 会随着动态类型发生变化,主要用于显示动态 | +| extend_json | str | 动态扩展项 | 会随着动态类型发生变化 | +**此处的大部分字段的内容都会根据`desc`中的`type`值发生一定变化,具体的数值对照参考下表(仅作参考,部分内容的解释未知,同时有些内容仅为在部分页面出现,无法通过此API调出):** + +| 值 | 含义 | +| ---- | ---- | +| 268435455 | 具体定义未知 | +| 1 | 转发 | +| 2 | 图片动态 | +| 4 | 文字动态 | +| 8 | 视频动态 | +| 16 | 小视频 | +| 32 | 具体定义未知(可能为戏剧) | +| 64 | 专栏 | +| 256 | 音频 | +| 512 | 番剧 | +| 1024 | 具体定义未知 | +| 2048 | H5活动动态 | +| 2049 | 漫画分享 | +| 4097 | PGC番剧 | +| 4098 | 电影 | +| 4099 | 电视剧 | +| 4100 | 国创动漫 | +| 4101 | 纪录片 | +| 4200 | 直播 | +| 4201 | 直播 | +| 4300 | 收藏夹 | +| 4302 | 付费课程 | +| 4303 | 付费课程 | +| 4308 | 直播 | +| 4310 | 合集 | +| 4311 | 具体定义未知 | +| 1e3 | 具体定义未知 | +| 1001 | 具体定义未知 | + +**示例:** + +获取`哔哩哔哩弹幕网`的动态id为`507420325550127049`动态 + +```shell +curl -G 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail' \ +--data-urlencode 'dynamic_id=507420325550127049' +``` + +
+查看响应示例 + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "card": { + "desc": { + "uid": 8047632, + "type": 8, + "rid": 204774719, + "acl": 0, + "view": 1182282, + "repost": 405, + "like": 31940, + "is_liked": 0, + "dynamic_id": 507420325550127049, + "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/f2cb8d9854156e3f26d4c6751d6eeb9c30e21847.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩弹幕网官方账号 " + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1924531200000, + "vipStatus": 1, + "themeType": 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": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 3860, + "name": "2021拜年纪", + "image": "https://i0.hdslb.com/bfs/garb/item/7f8aa8ef1eed8c2dce0796801ddc82552a4164f9.png", + "expire": 0, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/7f8aa8ef1eed8c2dce0796801ddc82552a4164f9.png", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "哔哩哔哩 干杯 - ( ゜- ゜)つロ", + "level_info": { + "current_level": 6 + } + }, + "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", + "bvid": "BV1Dh411S7sS" + }, + "card": "{\"aid\":204774719,\"attribute\":0,\"cid\":316514988,\"copyright\":1,\"ctime\":1616939233,\"desc\":\"2021年3月29日9:30(北京时间),B站在中国香港港交所成功挂牌二次上市。欢迎来到bilibili这座乐园,和超过2亿中国年轻人一起表达自我、拥抱世界。\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":290,\"dynamic\":\"\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/204774719\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/f2cb8d9854156e3f26d4c6751d6eeb9c30e21847.jpg\",\"mid\":8047632,\"name\":\"哔哩哔哩弹幕网\"},\"pic\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/archive\\/bcbcac6560268ef9cbe59fbf759ac28adf5e0432.jpg\",\"player_info\":null,\"pubdate\":1616981400,\"rights\":{\"autoplay\":1,\"bp\":0,\"download\":0,\"elec\":0,\"hd5\":1,\"is_cooperation\":0,\"movie\":0,\"no_background\":0,\"no_reprint\":1,\"pay\":0,\"ugc_pay\":0,\"ugc_pay_preview\":0},\"share_subtitle\":\"已观看24.0万次\",\"short_link\":\"https:\\/\\/b23.tv\\/BV1Dh411S7sS\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1Dh411S7sS\",\"stat\":{\"aid\":204774719,\"coin\":8661,\"danmaku\":744,\"dislike\":0,\"favorite\":6025,\"his_rank\":0,\"like\":31940,\"now_rank\":0,\"reply\":1619,\"share\":2134,\"view\":246956},\"state\":0,\"tid\":207,\"title\":\"欢迎来到2亿年轻人的乐园——bilibili 回香港上市啦!\",\"tname\":\"财经\",\"videos\":1}", + "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}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 12895437, + "topic_name": "二次上市", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 10967402, + "topic_name": "香港上市", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/102930" + }, + { + "topic_id": 114859, + "topic_name": "B站", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 8312, + "topic_name": "宣传片", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/8795" + }, + { + "topic_id": 679, + "topic_name": "BILIBILI", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + "result": 0, + "_gt_": 0 + } +} +``` + +
+ +## 最近更新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 | 认证类型 | 0:无
1 2 7:个人认证
3 4 5 6:机构认证 | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无
0:认证 | + +`my_info`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------------------- | --- | --------- | -------------------------------------------- | +| type | num | 会员类型 | 0:无
1:月大会员
2:年度及以上大会员 | +| status | num | 会员状态 | 0:无
1:有 | +| due_date | num | 会员过期时间 | Unix时间戳(毫秒) | +| 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 | 电视大会员支付类型 | | + +`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 | 大会员牌子图片 | 繁体版 | + +`data`中的`up_list`数组对象 + +| 字段 | 属性 | 内容 | 备注 | +| ----------------- | ---- | --------- | --- | +| face | str | UP主头像 | | +| has_update | bool | 最近更新是否更新? | | +| is_reserve_recall | bool | 不明 | | +| mid | int | UP主mid | | +| uname | str | up主昵称 | | + +
+查看响应示例: + +```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----" + } + ] + } +} +``` + +
diff --git a/docs/dynamic/publish.md b/docs/dynamic/publish.md new file mode 100644 index 0000000..a9d868e --- /dev/null +++ b/docs/dynamic/publish.md @@ -0,0 +1,881 @@ +# 发布动态 + +- [发布动态](#发布动态) + - [为图片动态上传图片](#为图片动态上传图片) + - [创建投票](#创建投票) + - [发表纯文本动态](#发表纯文本动态) + - [发表复杂动态](#发表复杂动态) + - [立即发布定时动态](#立即发布定时动态) + +--- + +## 为图片动态上传图片 + +> https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +注意:非日常类型像素宽高必须大于420 + +**正文参数 (multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| file_up | file | 需要上传的图片文件 | 必要 | 格式仅支持jpg png gif | +| category | str | 图片类型 | 必要 | daily:日常(动态)
draw:绘画(画友)
cos:摄影(COSPLAY) | +| biz | str | | | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-1:未添加图片
-2:参数错误
-3:图片尺寸过小
-4:账号未登录
-7:图片信息错误 | +| message | str | 错误信息 | 默认为success | +| data | obj | 信息本体 | 仅在正确时既`code=0`时为有效信息 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | -------------- | ---- | +| image_url | str | 已上传图片url | | +| image_width | num | 已上传图片宽度 | 像素 | +| image_height | num | 已上传图片高度 | 像素 | + +**示例:** + +上传了一张图片`test.png`类型为`日常` + +```shell +curl 'https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs' \ +-F 'file_up=@test.png' \ +-F 'category=daily' +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"success", + "data":{ + "image_url":"http:\/\/i0.hdslb.com\/bfs\/album\/13f9523efe186a8066b2d72e80283cea2437eb62.png", + "image_width":1225, + "image_height":850 + } +} +``` + +
+ + +## 创建投票 + +> https://api.vc.bilibili.com/vote_svr/v1/vote_svr/create_vote + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +注意: options最少两个,下标n从0开始 + +**正文参数 (multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------------------------- | ---- | ------------------------ | ------ | -------------------------------------------------------- | +| info[title] | str | 投票标题 | 必要 | | +| info[desc] | str | 投票描述 | 非必要 | 可为空 | +| info[type] | num | 投票类型 | 必要 | 0:文字投票 1:图片投票 | +| info[choice_cnt] | num | 最多选几项 | 必要 | | +| info[duration] | num | 投票持续秒数 | 必要 | 常用:
三天:259200
七天:604800
三十天:2592000 | +| info[options]\[ n ][desc] | str | 第n项选项文字内容 | 必要 | | +| info[options]\[ n ][img_url] | str | 第n项选项投票图片 | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 非必要 | 头次见非必要的csrf | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------------------------------- | +| code | num | 返回值 | 0:成功
5100001: 参数错误 | +| msg | str | 错误信息 | 成功为空 | +| message | str | 错误信息 | 跟上面那个一模一样 | +| data | obj | 信息本体 | 仅在正确时既`code=0`时为有效信息 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | -------------- | ---- | +| vote_id | num | 投票id | | +| \_gt\_ | num | 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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "vote_id": 4947171, + "_gt_": 0 + } +} +``` + +
+ +## 发表纯文本动态 + +> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create + +*请求方式:POST* + +认证方式:Cookie (SESSDATA) + +**正文参数(multipart/form-data):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| dynamic_id | num | 0 | 必要 | | +| type | num | 4 | 必要 | | +| rid | num | 0 | 必要 | | +| content | str | 动态内容 | 必要 | | +| up_choose_comment | num | 0 | 非必要 | | +| up_close_comment | num | 0 | 非必要 | | +| extension | json | 位置信息 | 非必要 | | +| at_uids | str | 动态中 at 到的用户的 uid | 非必要 | 使用逗号`,`分隔 | +| ctrl | array | 特殊格式控制 (如 at 别人时的蓝字体和链接) | 非必要 | | +| csrf_token | str | CSRF Token (位于 cookie) | 非必要 | | +| csrf | str | CSRF Token (位于 cookie) | 非必要 | | + +extension参数值: +```json +{ + "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 | num | 从全文第几个字开始变蓝 | +| type | num | 1 (可能1代表链接到用户uid) | +| length | num | 这一段变蓝多少字 | +| data | str | 链接目标(被at人的uid) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 成功为空 | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| result | num | 0 | | +| errmsg | str | 像是服务器日志一样的东西 | | +| dynamic_id | num | 动态 id | | +| create_result | num | 1 | | +| dynamic_id_str | str | 动态 id | 字符串格式 | +| \_gt_ | num | 0 | | + +
+查看示例(纯文本) + +```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 + } +} + +``` + +
+ +
+查看示例(at两个人) + +动态正文 +``` +[热词系列_神仙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=******' +``` + +
+ + + +## 发表复杂动态 + + + +> https://api.bilibili.com/x/dynamic/feed/create/dyn + +*请求方式:POST* + +认证方式:Cookie (SESSDATA) + +**URL参数** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**正文参数(application/json):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| dyn_req | obj | 请求本体 | 必要 | | + +`dyn_req`对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --- | --- | --- | --- | --- | +| attach_card | obj | 特殊卡片 | 非必要 | 如直播预约等 | +| content | obj | 动态内容 | 必要 | | +| meta | obj | 元信息 | 非必要 | 大概是来源信息 | +| scene | num | 动态类型? | 必要 | 纯文本: 1
带图: 2 | +| pics | array | 携带图片 | 非必要 | 最多九个 | +| topic | obj | 话题 | 非必要 | | +| option | obj | 互动设置 | 非必要 | 没有此项时默认开启评论区 | +| upload_id | str | 客户端生成的 | 非必要 | 内容为`发送人mid`+`当前秒级时间戳`+`四位随机整数`,中间用`_`隔开 | + +`dyn_req`对象的`meta`对象,大概是来源信息,很简单就不详细列表了: + +```json +{ + "app_meta": { + "from": "create.dynamic.web", + "mobi_app": "web" + } +} +``` + +`dyn_req`对象的`content`对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ----- | -------------------- | ------ | ---- | +| contents | array | 动态组件对象有序数组 | 必要 | | + +`contents`数组内每一个动态组件对象: + +```json +{ + "raw_text": "ui上直接显示的字符串", + "type": 组件类型id, + "biz_id": "动态组件的内容id转字符串,比如投票id" +} +``` + +动态组件类型: + +| 组件名 | type | `biz_id`含义 | +| ------ | ---- | ------------ | +| 纯文本 | 1 | 空 | +| AT人 | 2 | AT人的mid | +| 表情 | 9 | 空 | +| 投票 | 4 | 投票id | + +`dyn_req`对象的`topic`对象 + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ------- | ------ | -------------------------- | +| from_source | str | 来源id? | 必要 | 网页版直接选为dyn.web.list | +| from_topic_id | num | 0 | 必要 | | +| id | num | 话题id | 必要 | | +| name | str | 话题名 | 必要 | | + +`dyn_req`对象的`pics`数组的每一项对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ----- | ---------------- | ------ | ------------------------------------------------------------ | +| img_height | num | 图片高 | 非必要 | 这个东西会直接原封不动传到前端,比如你都写0在网页上就看不见了,但是还会加载 | +| img_width | num | 图片宽 | 非必要 | 同上 | +| img_size | float | 图片文件大小(KB) | 非必要 | | +| img_src | str | 图片bfs链接 | 必要 | | + +`dyn_req`对象的`option`对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------------- | ---- | ------------ | ------ | --------------- | +| up_choose_comment | num | 精选评论flag | 非必要 | 1: 开启 | +| close_comment | num | 关闭评论flag | 非必要 | 同上,与上二选一 | + +`dyn_req`对象的`topic`对象: + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------- | ---- | ------------ | ------ | -------- | +| from_source | str | dyn.web.list | 非必要 | 作用不明 | +| from_topic_id | num | 0 | 非必要 | 作用不明 | +| id | num | 话题id | 必要 | | +| name | str | 话题名 | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 成功为空 | +| data | obj | 数据本体 | | + +`data`对象: + +当Cookie中含有任意的`buvid3`时,比较干净简洁: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| result | num | 0 | | +| message | str | 错误信息 | | +| dyn_id | num | 动态 id | | +| dyn_id_str | str | 动态 id | 字符串格式 | +| dyn_type | num | 动态类型 | 不带图片: 4
带图片: 2
其他请参考 get_dynamic_detail.md | +| \_gt_ | num | 0 | | + +**警告:下面的内容又乱又杂,而且绝大多数情况用不到,我建议大家用这个接口的时候随便带一个buvid3的cookie屏蔽掉它们算了.** + +当Cookie中不含有`buvid3`时,较上述字段多出一个`fake_card`对象,大概是移动端用的卡片: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---- | ------------ | +| fake_card | obj | 0 | 又多又乱又杂 | + +`fake_card`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------------ | ------------------------------------------------------------ | +| card_type | num | 卡片类型 | 不带图片: 4
带图片: 2
其他请参考 [获取特定动态卡片信息](get_dynamic_detail.md) | +| modules | array | 卡片组件列表 | | +| extend | obj | 其他杂项信息 | | + +`fake_card`对象的`modules`数组中每一项对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------- | -------------------------------------------- | +| module_type | num | 组件类型 | 1: 作者信息
3: 动态内容
其他有待发现 | +| ModuleItem | obj | 卡片组件 | | + +`ModuleItem`对象与`module_type`对应关系: + +| module_type | `ModuleItem`含有的唯一一个key | 备注 | +| ----------- | ----------------------------- | ----------------------- | +| 1 | module_author | 作者信息 | +| 3 | module_desc | 动态内容 | +| 4 | module_dynamic | 携带图片等 | +| 9 | module_stat | 不明,貌似一直都是空对象 | + + `ModuleItem`内`module_author`: + +| 字段 | 类型 | 内容 | 备注 | +| ---------------- | ---- | -------------------------------- | ------------------------------------------------ | +| mid | num | 发送者mid | | +| ptime_label_text | str | 发送时间(人类可读形式)肯定是刚刚 | | +| author | obj | 作者详细信息 | 请参考[用户基本信息](../user/info.md),不再赘述.. | + + `ModuleItem`内`module_desc`: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------------- | ---- | +| desc | array | 动态组件列表 | | +| text | str | 动态纯文本形式 | | + +`module_desc`的`desc`数组: + +| 项 | 类型 | 备注 | +| ---- | ---- | ------------------- | +| 0 | obj | 第0个动态组件 | +| n | obj | 第n+1个动态组件组件 | +| ... | obj | ... | + +`desc`数组的每一项: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------------------------------------ | ----------------------------- | +| text | str | 该组件对外显示的纯文本 | 对应请求时该组件的`raw_text` | +| type | num | 组件类型 | 对应请求时该组件的`type` | +| rid | str | 组件内容的id,例如@人的mid | 根据需要出现,比如纯文本就没有 | +| uri | str | b站自定义`bilibili://`协议链接,用于@人点击跳转等 | 根据需要出现,比如纯文本就没有 | + + `ModuleItem`内`module_dynamic`: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------------ | -------------------- | +| type | num | 不知道是什么的类型 | 5: 图片
其他未知 | +| ModuleItem | obj | 组件? | 怎么还有套娃的? | + +当`module_dynamic`的`type`字段为`5`时: + +`module_dynamic`的`ModuleItem`有唯一key`dyn_draw`: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ----- | -------------------------------- | ------------------------------------------------ | +| items | array | 图片数组 | 与请求部分`dyn_req.pics`一致 | +| id | num | 这条图片动态所对应的相簿`doc_id` | 可以参考本文档的[相簿基本信息](../album/info.md) | + +`fake_card`的`extend`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ----- | ---------------------------------------------- | ---------------------------------------- | +| dyn_id_str | str | 动态id字符串形式 | | +| business_id | str | 未知 | 根据情况出现 | +| orif_img_url | str | 封面图url(如果有) | | +| share_type | str | 一般为3 | 未知 | +| share_scene | str | 一般为dynamic | 未知 | +| is_fast_share | bool | 一般为true | 未知 | +| dyn_type | num | 动态类型 | 不带图片: 4
带图片: 2
其他待探索 | +| uid | num | 发送者mid | | +| card_url | str | b站自定义`bilibili://`协议链接,指向该条动态 | | +| desc | array | 动态组件列表,重复了一遍`module_desc`的desc数组 | | +| reply | obj | 评论区相关 | | + +`extend`的`reply`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ------------------------------------------------- | ---- | +| uri | str | b站自定义`bilibili://`协议链接,指向该条动态评论区 | | +| params | array | 未知 | | + +
+查看示例(不带`buvid3`) + +```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": 755402937023332386, + "dyn_id_str": "755402937023332386", + "dyn_type": 2, + "dyn_rid": 221621929, + "fake_card": { + "card_type": 7, + "modules": [ + { + "module_type": 1, + "ModuleItem": { + "module_author": { + "mid": 470310172, + "ptime_label_text": "刚刚", + "author": { + "mid": 470310172, + "name": "I_Min", + "face": "https://i1.hdslb.com/bfs/face/d36e9dc2d14b545a055980a2f3c1f2d5621646c6.png", + "official": { + "type": -1 + }, + "vip": { + "Type": 1, + "due_date": 1673366400000, + "label": {} + }, + "uri": "bilibili://space/470310172?defaultTab=dynamic", + "pendant": {}, + "nameplate": { + "nid": 3, + "name": "白银殿堂", + "image": "https://i1.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png", + "image_small": "https://i0.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png", + "level": "高级勋章", + "condition": "单个自制视频总播放数>=10万" + } + }, + "decorate_card": { + "id": 984, + "card_url": "https://i0.hdslb.com/bfs/vip/e42569d2f91a17346cdb991c7c34d3bbc677d4ef.png", + "jump_url": "https://www.bilibili.com/h5/mall/equity-link/home?navhide=1&item_id=984&part=card&f_source=garb&from=post&isdiy=0", + "fan": { + "number_str": "000000" + } + }, + "tp_list": [ + { + "type": 3, + "Item": { + "share": { + "icon": "http://i0.hdslb.com/bfs/feed-admin/ee5902a63bbe4a0d78646d11036b062ea60573f6.png", + "title": "分享" + } + } + }, + { + "type": 7, + "Item": { + "default": { + "icon": "http://i0.hdslb.com/bfs/feed-admin/9163a7b29964cb84cb5fc35e4f7b899151cf2afc.png", + "title": "删除" + } + } + } + ] + } + } + }, + { + "module_type": 3, + "ModuleItem": { + "module_desc": { + "desc": [ + { + "text": "Test", + "type": 1 + }, + { + "text": "礼堂丁真,鉴定为一眼丁真", + "type": 2, + "uri": "bilibili://space/1463028352?defaultTab=dynamic", + "rid": "1463028352" + } + ], + "text": "Test礼堂丁真,鉴定为一眼丁真" + } + } + }, + { + "module_type": 4, + "ModuleItem": { + "module_dynamic": { + "type": 5, + "ModuleItem": { + "dyn_draw": { + "items": [ + { + "src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png", + "width": 1368, + "height": 1500, + "size": 662.6006 + }, + { + "src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png", + "width": 1368, + "height": 1500, + "size": 662.6006 + } + ], + "id": 221621929 + } + } + } + } + }, + { + "module_type": 9, + "ModuleItem": { + "module_stat": {} + } + } + ], + "extend": { + "dyn_id_str": "755402937023332386", + "business_id": "221621929", + "orig_img_url": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png", + "desc": [ + { + "text": "Test", + "type": 1 + }, + { + "text": "礼堂丁真,鉴定为一眼丁真", + "type": 2, + "uri": "bilibili://space/1463028352?defaultTab=dynamic", + "rid": "1463028352" + } + ], + "share_type": "3", + "share_scene": "dynamic", + "is_fast_share": true, + "dyn_type": 2, + "uid": 470310172, + "card_url": "bilibili://following/detail/755402937023332386?cardType=2&rid=221621929", + "reply": { + "uri": "bilibili://following/detail/755402937023332386?cardType=2&rid=221621929", + "params": [ + { + "key": "comment_on", + "value": "1" + } + ] + } + } + } + } +} +``` + +
+ +
+查看示例(带`buvid3`) + +动态正文 +``` +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 + } +} +``` + + + +
+ +## 立即发布定时动态 + +> 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 | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------ | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | 正常为空对象 | +| message | str | 错误消息 | 正常为"0" | +| ttl | num | 1 | 不明 | + +
+查看示例 + + +```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":{} +} +``` + +
+ diff --git a/docs/dynamic/tag_dynamics.md b/docs/dynamic/tag_dynamics.md new file mode 100644 index 0000000..73e0657 --- /dev/null +++ b/docs/dynamic/tag_dynamics.md @@ -0,0 +1,7934 @@ +# 话题下特定动态信息 +- [获取包含置顶及热门的动态列表](#获取包含置顶及热门的动态列表) +- [获取历史动态列表](#获取历史动态列表) +--- + +## 获取包含置顶及热门的动态列表 + +> https://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ---------- | ------ | -------- | +| topic_name | str | 话题名称 | 必要(可选) | topic_id与topic_name任选一个 | +| topic_id | num | 话题id | 必要(可选) | topic_id与topic_name任选一个 | +| sortby | num | 排序方式 | 非必要 | 一般情况下带上参数2,在部分话题中使用可以排除热门部分| +| offset | num | 偏移值 | 非必要| 可用于偏移显示的动态列表(为`0`时获取不包含置顶及热门的最新动态) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 默认为空 | +| msg | num | 空 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------- | ------------ | +| attentions | obj | 当前登录账户关注列表(仅在传递了登录信息时出现) | | +| cards | array | 动态列表 | | +| founder_uid | num | 0 | 作用尚不明确 | +| has_more | num | 当前话题是否有额外的动态 | 0:无额外动态
1:有额外动态 | +| is_drawer_topic | num | 0 | 作用尚不明确 | +| offset | str | 接下来获取列表时的偏移值 | 一般为当前获取的话题列表下最后一个动态id | +| \_gt\_ | num | 0 | 作用尚不明确 | + +`data`中的`cards`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 第1条动态卡片 | | +| n | obj | 第(n+1)条动态卡片 | | +| …… | obj | …… | …… | + +`data`中的`cards`数组中的对象: + +基本同「[获取特定动态卡片信息](get_dynamic_detail.md)」中的data对象 + +**示例:** + +获取话题`哔哩哔哩漫画`(话题id`7539944`)的当前动态列表(包含置顶&热门) + +topic_name方式: +```shell +curl -G 'https://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics' \ +--data-urlencode 'topic_name=哔哩哔哩漫画&sortby=2' +``` +topic_id方式: +```shell +curl -G 'https://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics' \ +--data-urlencode 'topic_id=7539944&sortby=2' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "has_more": 1, + "cards": [ + { + "desc": { + "uid": 628215255, + "type": 8, + "rid": 332648194, + "view": 4768, + "repost": 18, + "like": 8325, + "is_liked": 0, + "dynamic_id": 516720707860453704, + "timestamp": 1619146815, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 628215255, + "uname": "faguowenhua", + "face": "https://i0.hdslb.com/bfs/face/341a390cbae7efc021d3c492da56665f2a4944ee.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": 2 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "A", + "topic_board_desc": "热门", + "status": 1, + "dynamic_id_str": "516720707860453704", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "332648194", + "bvid": "BV1eA411L7Ck" + }, + "card": "{\"aid\":332648194,\"attribute\":0,\"cid\":327661869,\"copyright\":1,\"ctime\":1619091334,\"desc\":\"漫画节之际,恰逢世界读书日,哔哩哔哩漫画联合欧漫达高,邀请到了法国驻上海总领事馆文化领事柯梅燕女士在线推荐漫画啦!\\n被称为“图像小说”的纯正法国漫画是什么样呢?让我们一起跟着柯梅燕女士的介绍看看这本《莫奈逐光者》,领略欧陆漫画艺术的独特魅力吧~\",\"dimension\":{\"height\":2160,\"rotate\":0,\"width\":3840},\"duration\":219,\"dynamic\":\"漫画节之际,恰逢世界读书日,法国驻上海总领事馆文化领事柯梅燕女士应哔哩哔哩漫画与@欧漫达高 邀请,来给大家推荐漫画啦!\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/332648194\\/?page=1&player_preload=null&player_width=3840&player_height=2160&player_rotate=0\",\"mission_id\":20024,\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/341a390cbae7efc021d3c492da56665f2a4944ee.jpg\",\"mid\":628215255,\"name\":\"faguowenhua\"},\"pic\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/archive\\/7de60703c311c2afae10fab44a18bd3fbb5b3a13.jpg\",\"player_info\":null,\"pubdate\":1619146812,\"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\\/BV1eA411L7Ck\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1eA411L7Ck\",\"stat\":{\"aid\":332648194,\"coin\":291,\"danmaku\":18,\"dislike\":0,\"favorite\":295,\"his_rank\":0,\"like\":8325,\"now_rank\":0,\"reply\":148,\"share\":95,\"view\":42916},\"state\":0,\"tid\":124,\"title\":\"大师的故事《莫奈逐光者》——来自法国文化领事的漫画推荐│哔哩哔哩漫画节\",\"tname\":\"社科人文\",\"videos\":1}", + "extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\",\"verify\":{}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "activity_infos": { + "details": [ + { + "type": 1, + "detail": "{\"is_show\":1,\"topic_id\":877418,\"topic_link\":\"https:\\/\\/www.bilibili.com\\/blackboard\\/activity-7uSyvlCGRS.html\",\"topic_name\":\"漫画节\"}" + } + ] + }, + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 19380831, + "topic_name": "2021读书日", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1449371, + "topic_name": "法国漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 877418, + "topic_name": "漫画节", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html" + }, + { + "topic_id": 591844, + "topic_name": "莫奈", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 507003, + "topic_name": "欧漫", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "tags": [ + { + "tag_type": 3, + "sub_type": 1, + "icon": "https://i0.hdslb.com/bfs/album/4c1880a3e9d5fd2c72b339929a73a4b83d2bab93.png", + "text": "漫画节", + "link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html?topic_from=topic-card&name=%E6%BC%AB%E7%94%BB%E8%8A%82", + "rid": 877418, + "sub_module": "topic" + } + ], + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 7435683, + "type": 8, + "rid": 630241940, + "acl": 0, + "view": 32187, + "repost": 13, + "like": 10044, + "is_liked": 0, + "dynamic_id": 516457881633694548, + "timestamp": 1619085621, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 7435683, + "uname": "葉月Mashiro灬", + "face": "https://i0.hdslb.com/bfs/face/a536ad1c4c66e17113cfb599fcbb97e03bcdae44.jpg" + }, + "card": { + "official_verify": { + "type": 0, + "desc": "bilibili 知名动漫UP主" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1642694400000, + "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": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 2701, + "name": "七濑胡桃", + "image": "https://i0.hdslb.com/bfs/garb/item/2c40fe802d1935d96e4fc63ec42274d8846a34b7.png", + "expire": 0, + "image_enhance": "https://i0.hdslb.com/bfs/garb/item/2c40fe802d1935d96e4fc63ec42274d8846a34b7.png", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "个人up主 商业合作QQ:740998177月月本人 动漫交流群:958318991 约稿请私信", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "A", + "topic_board_desc": "热门", + "status": 1, + "dynamic_id_str": "516457881633694548", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "630241940", + "bvid": "BV1b84y1F7qT" + }, + "card": "{\"aid\":630241940,\"attribute\":0,\"cid\":325729439,\"copyright\":1,\"ctime\":1618830035,\"desc\":\"BGM:No Rainbows In The Desert (Pluto Tapes),歌手名:Unlike Pluto\\n咒术回战单素材,帅就完事!求3连!\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":94,\"dynamic\":\"\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/630241940\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/a536ad1c4c66e17113cfb599fcbb97e03bcdae44.jpg\",\"mid\":7435683,\"name\":\"葉月Mashiro灬\"},\"pic\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/archive\\/663b7f275b0f93356523880aa7e626803168df93.jpg\",\"player_info\":null,\"pubdate\":1619085619,\"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\\/BV1b84y1F7qT\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1b84y1F7qT\",\"stat\":{\"aid\":630241940,\"coin\":889,\"danmaku\":146,\"dislike\":0,\"favorite\":1163,\"his_rank\":0,\"like\":10044,\"now_rank\":0,\"reply\":95,\"share\":205,\"view\":61268},\"state\":0,\"tid\":24,\"title\":\"全员高能!这才是咒术回战!\",\"tname\":\"MAD·AMV\",\"videos\":1}", + "extend_json": "{\"\":{\"decoration\":{\"decoration_id\":0},\"game\":{\"game_id\":0},\"manga\":{\"manga_id\":26505},\"match\":{\"match_id\":0},\"official_activity\":{\"official_activity_id\":0},\"ogv\":{\"auto_bind\":0,\"ogv_id\":0},\"pgc\":0,\"pugv\":{\"pugv_id\":0},\"reserve\":{\"reserve_id\":0},\"ugc\":{\"ugc_id\":0}},\"bottom\":{},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\"},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 391, + "topic_name": "AMV", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 281, + "topic_name": "MAD", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 7662089, + "topic_name": "五条悟", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/66796" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 6497596, + "topic_name": "咒术回战", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3545, + "topic_name": "热血", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/ca4c24bd8bf896545811f401106c19588b80549d.png", + "cover_type": 2, + "title": "咒术回战", + "desc_first": "更新至146", + "desc_second": "冒险,热血,奇幻", + "jump_url": "https://manga.bilibili.com/m/detail/mc26505?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "26505" + }, + "add_on_card_info": [ + { + "add_on_card_show_type": 2, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/ca4c24bd8bf896545811f401106c19588b80549d.png", + "cover_type": 2, + "title": "咒术回战", + "desc_first": "更新至146", + "desc_second": "冒险,热血,奇幻", + "jump_url": "https://manga.bilibili.com/m/detail/mc26505?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "26505" + } + } + ], + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 381355897, + "type": 2, + "rid": 131242904, + "acl": 0, + "view": 20829, + "repost": 0, + "comment": 0, + "like": 99, + "is_liked": 0, + "dynamic_id": 516859813265346703, + "timestamp": 1619179203, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 381355897, + "uname": "电绘狂", + "face": "https://i1.hdslb.com/bfs/face/19c52b3c93e12698cd1e23093f8e2661e32e2533.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1580486400000, + "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": 1823, + "name": "春日樱花", + "image": "https://i1.hdslb.com/bfs/garb/item/dbe7d6c13cfa15ee717f7219501dc4613affbb9c.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/dbe7d6c13cfa15ee717f7219501dc4613affbb9c.png", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "交流群:100931574、cctalk&B站每周三天 直播绘画教学+改图", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "A", + "topic_board_desc": "热门", + "status": 1, + "dynamic_id_str": "516859813265346703", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131242904" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"‍【#寒远#第十话:你穿什么都好看!!】\\n新角色登场!!猜猜他们是小公主的谁呢?[妙啊]\\n彩色条漫+每周五更新+ :https:\\/\\/manga.bilibili.com\\/detail\\/mc29468 \\n\\n#哔哩哔哩漫画# \",\"id\":131242904,\"is_fav\":0,\"pictures\":[{\"img_height\":1260,\"img_size\":151.478515625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/cce04242486413faf4299ba0fd4e6cb072cd376e.jpg\",\"img_tags\":null,\"img_width\":750},{\"img_height\":1040,\"img_size\":126.9970703125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/678a826ac0e2e869e4ee2c1556a60c69d626dbfd.jpg\",\"img_tags\":null,\"img_width\":750}],\"pictures_count\":2,\"reply\":0,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619179203},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/19c52b3c93e12698cd1e23093f8e2661e32e2533.jpg\",\"name\":\"电绘狂\",\"uid\":381355897,\"vip\":{\"avatar_subscript\":0,\"due_date\":1580486400000,\"label\":{\"label_theme\":\"\",\"path\":\"\",\"text\":\"\"},\"nickname_color\":\"\",\"status\":0,\"theme_type\":0,\"type\":1,\"vip_pay_type\":0}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"cc\":{\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 17996793, + "topic_name": "寒远", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[妙啊]", + "id": 435, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[妙啊]", + "url": "https://i0.hdslb.com/bfs/emote/b4cb77159d58614a9b787b91b1cd22a81f383535.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 350963773, + "type": 8, + "rid": 972741830, + "acl": 0, + "view": 2059, + "repost": 5, + "like": 53, + "is_liked": 0, + "dynamic_id": 515066247810442308, + "timestamp": 1618761606, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 350963773, + "uname": "届不到_Zula", + "face": "https://i1.hdslb.com/bfs/face/613e6dcd59feaecf875092ae945834a362b37f6c.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1674403200000, + "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": "https://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, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "A", + "topic_board_desc": "热门", + "status": 1, + "dynamic_id_str": "515066247810442308", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "972741830", + "bvid": "BV1Mp4y1b7vk" + }, + "card": "{\"aid\":972741830,\"attribute\":0,\"cid\":325740795,\"copyright\":1,\"ctime\":1618713447,\"desc\":\"我永远喜欢水原千鹤!\\n水原千鹤应援群:605563880\\n欢迎加入!\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":207,\"dynamic\":\"水原千鹤,生日快乐\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/972741830\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/613e6dcd59feaecf875092ae945834a362b37f6c.jpg\",\"mid\":350963773,\"name\":\"届不到_Zula\"},\"pic\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/archive\\/5e8a7e26b2b386626f3ddc54d1999ee3f1978888.jpg\",\"player_info\":null,\"pubdate\":1618761602,\"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\\/BV1Mp4y1b7vk\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1Mp4y1b7vk\",\"stat\":{\"aid\":972741830,\"coin\":58,\"danmaku\":15,\"dislike\":0,\"favorite\":29,\"his_rank\":0,\"like\":53,\"now_rank\":0,\"reply\":45,\"share\":15,\"view\":427},\"state\":0,\"tid\":24,\"title\":\"【2021水原千鹤生贺】此生能遇见你,真是太好了\",\"tname\":\"MAD·AMV\",\"up_from_v2\":19,\"videos\":2}", + "extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"bottom\":{},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\",\"verify\":{}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 170379, + "topic_name": "生贺", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 4145, + "topic_name": "恋爱", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 391, + "topic_name": "AMV", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 281, + "topic_name": "MAD", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 7382791, + "topic_name": "水原千鹤", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/43055" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "tags": [ + { + "tag_type": 5, + "icon": "https://i0.hdslb.com/bfs/album/969bfb96b77f12acb2e36068fa03de3b418b2219.png", + "text": "领取专属形象赢大奖", + "link": "https://www.bilibili.com/blackboard/activity-K4Yvj51WtJ.html", + "sub_module": "diversion", + "show_action": 0 + } + ], + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131534120, + "acl": 0, + "view": 196445, + "repost": 2, + "comment": 54, + "like": 1048, + "is_liked": 0, + "dynamic_id": 517602000793534062, + "timestamp": 1619352007, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517602000793534062", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131534120" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 作品推荐】兽人控狂喜!《#不莱梅乐队#》:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc28880\\n[思考]大家小时候看过一篇叫做《不莱梅的音乐家》的格林童话吗?\\n[惊喜]只不过在这部#欧漫#里,这四个动物的目的不是赶走强盗,而是追逐梦想、爱情、自由、正义。在这个充满混沌的世界里,他们将用音乐的力量改写自己和他人的命运。 \",\"id\":131534120,\"is_fav\":0,\"pictures\":[{\"img_height\":1922,\"img_size\":1163.9267578125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/f5a82f03475eed52973b3cecb2b5180b090cc5f0.png\",\"img_tags\":null,\"img_width\":1080},{\"img_height\":757,\"img_size\":273.130859375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/ca4055c7b9c246e7e922190102d5c87cd4dbcea8.png\",\"img_tags\":null,\"img_width\":436},{\"img_height\":1067,\"img_size\":640.29296875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/9de3ece4d374d07fb7b192db4520779a477cdf97.png\",\"img_tags\":null,\"img_width\":542},{\"img_height\":972,\"img_size\":374.8349609375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/cac12d548a3686335d3154cce672f1823ca92517.png\",\"img_tags\":null,\"img_width\":487}],\"pictures_count\":4,\"reply\":54,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619352007},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"cc\":{\"nv\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 15149492, + "topic_name": "不莱梅乐队", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 507003, + "topic_name": "欧漫", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[思考]", + "id": 1941, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[思考]", + "url": "https://i0.hdslb.com/bfs/emote/cfa9b7e89e4bfe04bbcd34ccb1b0df37f4fa905c.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + }, + { + "emoji_name": "[惊喜]", + "id": 19, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[惊喜]", + "url": "https://i0.hdslb.com/bfs/emote/0afecaf3a3499479af946f29749e1a6c285b6f65.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 240911350, + "type": 1, + "rid": 517516389208371264, + "acl": 0, + "view": 237, + "repost": 0, + "comment": 0, + "like": 2, + "is_liked": 0, + "dynamic_id": 517516389214088892, + "timestamp": 1619332074, + "pre_dy_id": 517479366596833835, + "orig_dy_id": 517479366596833835, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 240911350, + "uname": "Kekkai-piano", + "face": "https://i1.hdslb.com/bfs/face/f9b56adf0e9fb16d556fb5af93fc8367a255e4af.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1658851200000, + "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": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 2511, + "name": "初音未来13周年", + "image": "https://i1.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png" + }, + "rank": "10000", + "sign": "看动画片的88键音游爱好者 \n专业人士轻喷 \n正在寻找缺失之物 \n超天変地異みたいな狂騒にも慣れて\n高三备考ing,莫要取关(bushi)", + "level_info": { + "current_level": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517516389214088892", + "pre_dy_id_str": "517479366596833835", + "orig_dy_id_str": "517479366596833835", + "rid_str": "517516389208371264", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131479206, + "acl": 1024, + "view": 1379492, + "repost": 11233, + "dynamic_id": 517479366596833835, + "timestamp": 1619323454, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517479366596833835", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131479206" + } + }, + "card": "{ \"user\": { \"uid\": 240911350, \"uname\": \"Kekkai-piano\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/f9b56adf0e9fb16d556fb5af93fc8367a255e4af.jpg\" }, \"item\": { \"rp_id\": 517516389208371264, \"uid\": 240911350, \"content\": \"分母报道[doge]#哔哩哔哩漫画#,#AISHA#\", \"orig_dy_id\": 517479366596833835, \"pre_dy_id\": 517479366596833835, \"timestamp\": 1619332074, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\",\\\\\\\"length\\\\\\\":0,\\\\\\\"location\\\\\\\":0,\\\\\\\"type\\\\\\\":2},{\\\\\\\"location\\\\\\\":19,\\\\\\\"type\\\\\\\":1,\\\\\\\"length\\\\\\\":8,\\\\\\\"data\\\\\\\":\\\\\\\"1425490690\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 关+转,抽3位幸运小伙伴送@漫画家法吉特 【《逆光》画集作者签名版】~\\\\n #哔哩哔哩漫画#重磅安利之《#AISHA#》\\\\n当当当当!剧情党福音~\\\\n答题就有机会赢得礼物?还有法吉特太太亲签精美画集?\\\\n活动入口→https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/blackboard\\\\\\/topic\\\\\\/activity-oPISh007wv.html\\\\n\\\\n你以为这样就结束了了吗?\\\\nNONONO~\\\\n法吉特老师首次出版个人作品集《逆光》~商城4月25日0点首发开售!\\\\n有法吉特老师签名版掉落哦!随书额外附赠专属书签特典!\\\\n活动指路:哔哩哔哩漫画APP-我的-商城-banner\\\",\\\"id\\\":131479206,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":782,\\\"img_size\\\":1097.2451171875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/8965a784f77e2545f4f2f168df4f417ed3ace818.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":750}],\\\"pictures_count\\\":1,\\\"reply\\\":573,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619323454},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":61398}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2},{\\\"data\\\":\\\"1425490690\\\",\\\"length\\\":8,\\\"location\\\":19,\\\"type\\\":1}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":61398},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[doge]", + "id": 26, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[doge]", + "url": "https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1192711092, + "type": 1, + "rid": 517505230885402892, + "acl": 0, + "view": 2, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517505230886905525, + "timestamp": 1619329476, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 1192711092, + "uname": "会发光的偶恰", + "face": "https://i0.hdslb.com/bfs/face/b85a508793bd96deec61e2491d60e68f10378395.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 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517505230886905525", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517505230885402892", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1951519, + "repost": 16543, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 1192711092, \"uname\": \"会发光的偶恰\", \"face\": \"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/b85a508793bd96deec61e2491d60e68f10378395.jpg\" }, \"item\": { \"rp_id\": 517505230885402892, \"uid\": 1192711092, \"content\": \"我最喜欢这个了,我也想要#哔哩哔哩漫画#\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619329476, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1003,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1365116, + "type": 1, + "rid": 517503525787575777, + "acl": 0, + "view": 1, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517503525779637979, + "timestamp": 1619329079, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 1365116, + "uname": "濑户的海参", + "face": "https://i2.hdslb.com/bfs/face/8426c61be9c3ccd2296d080a54691c3bed5f2f9f.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": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517503525779637979", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517503525787575777", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1951519, + "repost": 16543, + "comment": 1003, + "like": 6950, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 1365116, \"uname\": \"濑户的海参\", \"face\": \"https:\\/\\/i2.hdslb.com\\/bfs\\/face\\/8426c61be9c3ccd2296d080a54691c3bed5f2f9f.jpg\" }, \"item\": { \"rp_id\": 517503525787575777, \"uid\": 1365116, \"content\": \"嗯哼#哔哩哔哩漫画#\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619329079, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1003,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131489076, + "acl": 0, + "view": 1385233, + "repost": 31, + "comment": 23, + "like": 3737, + "is_liked": 0, + "dynamic_id": 517501494260096644, + "timestamp": 1619328606, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517501494260096644", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131489076" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 限免活动+周边路透】✿ヽ(°▽°)ノ✿ \\n《#天宝伏妖录#》漫画第二卷将在【4月25日至5月2日】限时免费1周[打call][打call],感谢大家一直以来的支持[W-哈哈]!精彩剧情,不容错过!\\n同时之前《#天宝伏妖录#》第三卷活动售卖的周边近期在准备开补款啦~\\n小伙伴们先看看限定周边的实物图透叭(P1-P8)[打call]! 新卷也一直在筹备中,新卷封面同时奉上(P9)! \\n【追漫传送】:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc27592 \",\"id\":131489076,\"is_fav\":0,\"pictures\":[{\"img_height\":5046,\"img_size\":16654.3876953125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/6bcd7a96fe7bc616a7ea334319b58a3ab451cda2.jpg\",\"img_tags\":null,\"img_width\":6728},{\"img_height\":5046,\"img_size\":15713.2236328125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/41e9e8ed2f181ce84adbb1175dcfc47b6b32d270.jpg\",\"img_tags\":null,\"img_width\":6728},{\"img_height\":5136,\"img_size\":20368.2822265625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/81936f0dacc1fa63264d18cdba738b3582562cdd.jpg\",\"img_tags\":null,\"img_width\":7705},{\"img_height\":4427,\"img_size\":15909.310546875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/5116024add807a033cf63395683c5b6ade28fbcf.jpg\",\"img_tags\":null,\"img_width\":6641},{\"img_height\":5136,\"img_size\":20431.3994140625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/61155f325c5a862b0dcdb1dacc95f252ac768a4e.jpg\",\"img_tags\":null,\"img_width\":7705},{\"img_height\":5261,\"img_size\":19335.5029296875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/6f5a7241d8f0093952edf16195b4d0aecfa2c6cd.jpg\",\"img_tags\":null,\"img_width\":7014},{\"img_height\":1408,\"img_size\":4784.3037109375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/0350c791822a980d72450da226b1d61fa7b68c8f.png\",\"img_tags\":null,\"img_width\":1878},{\"img_height\":1408,\"img_size\":4614.8251953125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/271187137e9973d07f01763a9a41b9b7f25f68fd.png\",\"img_tags\":null,\"img_width\":1878},{\"img_height\":3508,\"img_size\":1452.4482421875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/f818bb197c7cc914ed4c921a6f7488f87ca15faf.jpg\",\"img_tags\":null,\"img_width\":2480}],\"pictures_count\":9,\"reply\":23,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619328606},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"cc\":{\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3812656, + "topic_name": "天宝伏妖录", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/62601" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[W-哈哈]", + "id": 3045, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[W-哈哈]", + "url": "https://i0.hdslb.com/bfs/emote/83d527303c8f62f494e6971c48836487e7d87b1b.png", + "meta": { + "size": 1 + }, + "mtime": 1608785082 + }, + { + "emoji_name": "[打call]", + "id": 510, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[打call]", + "url": "https://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1902548007, + "type": 2, + "rid": 131480564, + "acl": 0, + "view": 1056, + "repost": 0, + "comment": 0, + "like": 16, + "is_liked": 0, + "dynamic_id": 517482725259184156, + "timestamp": 1619324236, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 1902548007, + "uname": "BV社", + "face": "https://i0.hdslb.com/bfs/face/48f8e6afa688e37b9f1e3721a86bea8ce02688dc.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "BV社官方账号" + } + }, + "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": "Vomic,让你爱的漫画更动听", + "level_info": { + "current_level": 2 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517482725259184156", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131480564" + }, + "card": "{\"item\":{\"at_control\":\"[{\\\"location\\\":122,\\\"type\\\":1,\\\"length\\\":8,\\\"data\\\":\\\"326499679\\\"},{\\\"location\\\":133,\\\"type\\\":1,\\\"length\\\":5,\\\"data\\\":\\\"1902548007\\\"},{\\\"location\\\":141,\\\"type\\\":1,\\\"length\\\":9,\\\"data\\\":\\\"386135764\\\"},{\\\"location\\\":153,\\\"type\\\":1,\\\"length\\\":6,\\\"data\\\":\\\"1740792\\\"}]\",\"category\":\"daily\",\"description\":\"#哔哩哔哩漫画#独家\\n“女鬼”找上门,却是为了救人?\\n“养尸地?那是啥?里面有宝贝嘛?”\\n“有凶尸。”\\n哟,父子俩这是什么情况?\\n惊奇 #Vomic##幽冥诡匠#第五集正式上线!每周日更新!更多精彩,小剧场,花絮,尽在哔哩哔哩漫画APP\\n出品:@哔哩哔哩漫画\\n策划:@BV社\\n制作:@回声漫响工作室\\n录制:@音熊联萌 \",\"id\":131480564,\"is_fav\":0,\"pictures\":[{\"img_height\":2400,\"img_size\":2852.115234375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/cb7632509c8cb8a7703f5ab289320b26a07ec62e.jpg\",\"img_tags\":null,\"img_width\":2400}],\"pictures_count\":1,\"reply\":0,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619324236},\"user\":{\"head_url\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/48f8e6afa688e37b9f1e3721a86bea8ce02688dc.jpg\",\"name\":\"BV社\",\"uid\":1902548007,\"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}}}", + "extend_json": "{\"ctrl\":[{\"data\":\"326499679\",\"length\":8,\"location\":122,\"type\":1},{\"data\":\"1902548007\",\"length\":5,\"location\":133,\"type\":1},{\"data\":\"386135764\",\"length\":9,\"location\":141,\"type\":1},{\"data\":\"1740792\",\"length\":6,\"location\":153,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.dynamic.web\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3208432, + "topic_name": "Vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106426" + }, + { + "topic_id": 7128092, + "topic_name": "幽冥诡匠", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/42527" + }, + { + "topic_id": 37542, + "topic_name": "VOMIC", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106283" + }, + { + "topic_id": 8972604, + "topic_name": "vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106766" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 255495142, + "type": 1, + "rid": 517480856950088884, + "acl": 0, + "view": 331, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517480856947349138, + "timestamp": 1619323801, + "pre_dy_id": 517479366596833835, + "orig_dy_id": 517479366596833835, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 255495142, + "uname": "坐怀不乱登徒子", + "face": "https://i1.hdslb.com/bfs/face/fa18d118f6c58da704400909743fb895c4c47627.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1626451200000, + "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": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 204, + "name": "至高守护", + "image": "https://i1.hdslb.com/bfs/face/88162662c23c2768c9e9e5c25017375685e83798.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/face/88162662c23c2768c9e9e5c25017375685e83798.png", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "", + "level_info": { + "current_level": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517480856947349138", + "pre_dy_id_str": "517479366596833835", + "orig_dy_id_str": "517479366596833835", + "rid_str": "517480856950088884", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131479206, + "acl": 1024, + "view": 1379492, + "repost": 11233, + "comment": 573, + "like": 6337, + "is_liked": 0, + "dynamic_id": 517479366596833835, + "timestamp": 1619323454, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517479366596833835", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131479206" + } + }, + "card": "{ \"user\": { \"uid\": 255495142, \"uname\": \"坐怀不乱登徒子\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/fa18d118f6c58da704400909743fb895c4c47627.jpg\" }, \"item\": { \"rp_id\": 517480856950088884, \"uid\": 255495142, \"content\": \"[doge]#哔哩哔哩漫画#,#AISHA#\", \"orig_dy_id\": 517479366596833835, \"pre_dy_id\": 517479366596833835, \"timestamp\": 1619323801, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\",\\\\\\\"length\\\\\\\":0,\\\\\\\"location\\\\\\\":0,\\\\\\\"type\\\\\\\":2},{\\\\\\\"location\\\\\\\":19,\\\\\\\"type\\\\\\\":1,\\\\\\\"length\\\\\\\":8,\\\\\\\"data\\\\\\\":\\\\\\\"1425490690\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 关+转,抽3位幸运小伙伴送@漫画家法吉特 【《逆光》画集作者签名版】~\\\\n #哔哩哔哩漫画#重磅安利之《#AISHA#》\\\\n当当当当!剧情党福音~\\\\n答题就有机会赢得礼物?还有法吉特太太亲签精美画集?\\\\n活动入口→https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/blackboard\\\\\\/topic\\\\\\/activity-oPISh007wv.html\\\\n\\\\n你以为这样就结束了了吗?\\\\nNONONO~\\\\n法吉特老师首次出版个人作品集《逆光》~商城4月25日0点首发开售!\\\\n有法吉特老师签名版掉落哦!随书额外附赠专属书签特典!\\\\n活动指路:哔哩哔哩漫画APP-我的-商城-banner\\\",\\\"id\\\":131479206,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":782,\\\"img_size\\\":1097.2451171875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/8965a784f77e2545f4f2f168df4f417ed3ace818.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":750}],\\\"pictures_count\\\":1,\\\"reply\\\":573,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619323454},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":61398}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2},{\\\"data\\\":\\\"1425490690\\\",\\\"length\\\":8,\\\"location\\\":19,\\\"type\\\":1}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":61398},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[doge]", + "id": 26, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[doge]", + "url": "https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131479206, + "acl": 1024, + "view": 1379492, + "repost": 11233, + "comment": 573, + "like": 6337, + "is_liked": 0, + "dynamic_id": 517479366596833835, + "timestamp": 1619323454, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517479366596833835", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131479206" + }, + "card": "{\"item\":{\"at_control\":\"[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2},{\\\"location\\\":19,\\\"type\\\":1,\\\"length\\\":8,\\\"data\\\":\\\"1425490690\\\"}]\",\"category\":\"daily\",\"description\":\"​互动抽奖 关+转,抽3位幸运小伙伴送@漫画家法吉特 【《逆光》画集作者签名版】~\\n #哔哩哔哩漫画#重磅安利之《#AISHA#》\\n当当当当!剧情党福音~\\n答题就有机会赢得礼物?还有法吉特太太亲签精美画集?\\n活动入口→https:\\/\\/www.bilibili.com\\/blackboard\\/topic\\/activity-oPISh007wv.html\\n\\n你以为这样就结束了了吗?\\nNONONO~\\n法吉特老师首次出版个人作品集《逆光》~商城4月25日0点首发开售!\\n有法吉特老师签名版掉落哦!随书额外附赠专属书签特典!\\n活动指路:哔哩哔哩漫画APP-我的-商城-banner\",\"id\":131479206,\"is_fav\":0,\"pictures\":[{\"img_height\":782,\"img_size\":1097.2451171875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/8965a784f77e2545f4f2f168df4f417ed3ace818.png\",\"img_tags\":null,\"img_width\":750}],\"pictures_count\":1,\"reply\":573,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619323454},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extension": { + "lott": "{\"lottery_id\":61398}" + }, + "extend_json": "{\"ctrl\":[{\"data\":\"5\",\"length\":0,\"location\":0,\"type\":2},{\"data\":\"1425490690\",\"length\":8,\"location\":19,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.dynamic.web\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"cc\":{\"vf\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"lott\":{\"lottery_id\":61398},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 271873076, + "type": 2, + "rid": 131468623, + "acl": 0, + "view": 22, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517452016241823721, + "timestamp": 1619317086, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 271873076, + "uname": "爱乐果iLEGUO", + "face": "https://i2.hdslb.com/bfs/face/fb79ac0f6de92c8ecc7d4cd1e958d19376c85fe8.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": "龙俦纪+羞耻侠+妖怪IDOLS+偶像饲养手册+闪亮的家+神奇少年团+第8界+爱果系列+爱次元!研究社", + "level_info": { + "current_level": 4 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517452016241823721", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131468623" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"《龙俦纪》第99话4月25日更新!\\n高振采药遇险,竟然从悬崖上坠入万丈深渊?!!\\n苏郃首次展现能力,苏千屹又从苏郃身上发现了什么秘密?\\n《龙俦纪》正在好评连载中,逢“五”更新,欢迎追漫!\\n#哔哩哔哩漫画# https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc26014 \\n#宝藏漫画##爱乐果##漫画##二次元##古风##玄幻##二次元条漫# \",\"id\":131468623,\"is_fav\":0,\"pictures\":[{\"img_height\":720,\"img_size\":297.19140625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/54e4f9e0c339f42484fcbe42cb7e7f69be4b87aa.jpg\",\"img_tags\":null,\"img_width\":1280}],\"pictures_count\":1,\"reply\":0,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619317086},\"user\":{\"head_url\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/face\\/fb79ac0f6de92c8ecc7d4cd1e958d19376c85fe8.jpg\",\"name\":\"爱乐果iLEGUO\",\"uid\":271873076,\"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}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 10182306, + "topic_name": "宝藏漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 9628017, + "topic_name": "爱乐果", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1184, + "topic_name": "漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1907, + "topic_name": "二次元", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/7694" + }, + { + "topic_id": 8227, + "topic_name": "古风", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 62935, + "topic_name": "玄幻", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 12532729, + "topic_name": "二次元条漫", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1677019, + "type": 1, + "rid": 517443572335742626, + "acl": 0, + "view": 3, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517443572332941328, + "timestamp": 1619315120, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 1677019, + "uname": "逗妇卤", + "face": "https://i1.hdslb.com/bfs/face/15a8f5d8c93f8f30bda71f192b92cfde2c76a1c7.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1637510400000, + "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": "https://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, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517443572332941328", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517443572335742626", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1951519, + "repost": 16543, + "comment": 1003, + "like": 6950, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 1677019, \"uname\": \"逗妇卤\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/15a8f5d8c93f8f30bda71f192b92cfde2c76a1c7.jpg\" }, \"item\": { \"rp_id\": 517443572335742626, \"uid\": 1677019, \"content\": \"【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\/玩偶等福利好礼相送!\\n[干杯] 快来哔哩哔哩漫画追漫吧~\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619315120, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1003,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 324540735, + "type": 8, + "rid": 672631542, + "acl": 0, + "view": 29, + "repost": 0, + "like": 1, + "is_liked": 0, + "dynamic_id": 517311278755293659, + "timestamp": 1619284318, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 324540735, + "uname": "文雯兄", + "face": "https://i0.hdslb.com/bfs/face/8000d5ad4652f8bf9074781a108eb54243a06889.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1613491200000, + "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, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517311278755293659", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "672631542", + "bvid": "BV1dU4y1h78A" + }, + "card": "{\"aid\":672631542,\"attribute\":0,\"cid\":328783995,\"copyright\":1,\"ctime\":1619284318,\"desc\":\"本漫画由哔哩哔哩漫画出品,本人配音,谢谢大家的支持。\",\"dimension\":{\"height\":1920,\"rotate\":0,\"width\":864},\"duration\":191,\"dynamic\":\"\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/672631542\\/?page=1&player_preload=null&player_width=864&player_height=1920&player_rotate=0\",\"mission_id\":18978,\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/8000d5ad4652f8bf9074781a108eb54243a06889.jpg\",\"mid\":324540735,\"name\":\"文雯兄\"},\"pic\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/archive\\/b2d2dc3a909696ea1db3fbfeeb7ab42dc37ced87.jpg\",\"player_info\":null,\"pubdate\":1619284318,\"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\\/BV1dU4y1h78A\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1dU4y1h78A\",\"stat\":{\"aid\":672631542,\"coin\":0,\"danmaku\":0,\"dislike\":0,\"favorite\":0,\"his_rank\":0,\"like\":1,\"now_rank\":0,\"reply\":0,\"share\":0,\"view\":10},\"state\":0,\"tid\":138,\"title\":\"怎么办,我穿越成最弱小野怪了(三十九)【关于我不当人的这件事】\",\"tname\":\"搞笑\",\"up_from_v2\":8,\"videos\":1}", + "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}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 19254944, + "topic_name": "火力配音王-配音剧场", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/108663" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3844, + "topic_name": "穿越", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1833, + "topic_name": "搞笑", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1217, + "topic_name": "自制", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1184, + "topic_name": "漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 326499679, + "type": 8, + "rid": 972719486, + "acl": 0, + "view": 2745390, + "repost": 4, + "like": 5879, + "is_liked": 0, + "dynamic_id": 517261895213635612, + "timestamp": 1619272820, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 0, + "label": { + "path": "", + "text": "十年大会员", + "label_theme": "ten_annual_vip", + "text_color": "#FFFFFF",- + "orig_dy_id_str": "0", + "rid_str": "972719486", + "bvid": "BV1Gp4y1b7ZB" + }, + "card": "{\"aid\":972719486,\"attribute\":0,\"cid\":328058863,\"copyright\":1,\"ctime\":1619272820,\"desc\":\"#反派初始化# #Vomic#\\n圈圈叉叉,桃树开花,花瓣落下,生出新芽。\\n@哔哩哔哩漫画 出品、@BV社 策划、 @Antler_墨柚 原作、@叉叉叉叉叉口叉 主笔、@补天研究所 制作、@音熊联萌 录制、Vomic《反派初始化》第二集正式上线!\\n哔哩哔哩漫画独家播放,每周六更新!\\n还有小剧场,花絮不定时掉落、敬请期待~\\n\\n出品:@哔哩哔哩漫画\\n策划:@BV社\\n制作:@补天研究所\\n录制:@音熊联萌\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":62,\"dynamic\":\"#哔哩哔哩漫画#独家,#Vomic#2021年4月3日起每周六更新!更多精彩,小剧场,花絮,尽在哔哩哔哩漫画APP\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/972719486\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"mid\":326499679,\"name\":\"哔哩哔哩漫画\"},\"pic\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/archive\\/3c8a720b809153f95b1134acb991011eb79dc80b.jpg\",\"player_info\":null,\"pubdate\":1619272819,\"rights\":{\"autoplay\":1,\"bp\":0,\"download\":0,\"elec\":0,\"hd5\":1,\"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\\/BV1Gp4y1b7ZB\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1Gp4y1b7ZB\",\"stat\":{\"aid\":972719486,\"coin\":115,\"danmaku\":4,\"dislike\":0,\"favorite\":43,\"his_rank\":0,\"like\":5879,\"now_rank\":0,\"reply\":36,\"share\":145,\"view\":31840},\"state\":0,\"tid\":27,\"title\":\"【Vomic】滴——《反派初始化》第二集精彩片段!\",\"tname\":\"综合\",\"videos\":1}", + "extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\",\"verify\":{}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3208432, + "topic_name": "Vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106426" + }, + { + "topic_id": 37542, + "topic_name": "VOMIC", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106283" + }, + { + "topic_id": 8972604, + "topic_name": "vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106766" + }, + { + "topic_id": 210754, + "topic_name": "夏磊", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 10526139, + "topic_name": "反派初始化", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1322133, + "topic_name": "赵路", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 423864, + "topic_name": "音熊联萌", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/17389" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 255495142, + "type": 1, + "rid": 517243774753706830, + "acl": 0, + "view": 8, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517243774755903256, + "timestamp": 1619268601, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 255495142, + "uname": "坐怀不乱登徒子", + "face": "https://i1.hdslb.com/bfs/face/fa18d118f6c58da704400909743fb895c4c47627.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1626451200000, + "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": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 204, + "name": "至高守护", + "image": "https://i1.hdslb.com/bfs/face/88162662c23c2768c9e9e5c25017375685e83798.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/face/88162662c23c2768c9e9e5c25017375685e83798.png", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "", + "level_info": { + "current_level": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517243774755903256", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517243774753706830", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1951519, + "repost": 16543, + "comment": 1003, + "like": 6950, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 255495142, \"uname\": \"坐怀不乱登徒子\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/fa18d118f6c58da704400909743fb895c4c47627.jpg\" }, \"item\": { \"rp_id\": 517243774753706830, \"uid\": 255495142, \"content\": \"冲冲冲#哔哩哔哩漫画#\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619268601, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1003,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 335270851, + "type": 1, + "rid": 517243658786443535, + "acl": 0, + "view": 24, + "repost": 0, + "comment": 0, + "like": 1, + "is_liked": 0, + "dynamic_id": 517243658790736702, + "timestamp": 1619268574, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 335270851, + "uname": "符号门", + "face": "https://i1.hdslb.com/bfs/face/67371311c9e047543a70c1d41e7a03c3854f2981.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1647014400000, + "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": "https://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": 4 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517243658790736702", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517243658786443535", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1951519, + "repost": 16543, + "comment": 1003, + "like": 6950, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 335270851, \"uname\": \"符号门\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/67371311c9e047543a70c1d41e7a03c3854f2981.jpg\" }, \"item\": { \"rp_id\": 517243658786443535, \"uid\": 335270851, \"content\": \"#哔哩哔哩漫画#[打call][打call][打call]\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619268574, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1003,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[打call]", + "id": 510, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[打call]", + "url": "https://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1951519, + "repost": 16543, + "comment": 1003, + "like": 6950, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + }, + "card": "{\"item\":{\"at_control\":\"[{\\\"type\\\":2,\\\"location\\\":0,\\\"length\\\":0,\\\"data\\\":\\\"5\\\"}]\",\"category\":\"daily\",\"description\":\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\/玩偶等福利好礼相送!\\n[干杯] 快来哔哩哔哩漫画追漫吧~\",\"id\":131403515,\"is_fav\":0,\"pictures\":[{\"img_height\":1357,\"img_size\":1759.1650390625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\",\"img_tags\":null,\"img_width\":1080},{\"img_height\":1238,\"img_size\":832.51953125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\",\"img_tags\":null,\"img_width\":1080},{\"img_height\":2193,\"img_size\":3424.060546875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\",\"img_tags\":null,\"img_width\":1080},{\"img_height\":800,\"img_size\":166.1552734375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\",\"img_tags\":null,\"img_width\":800}],\"pictures_count\":4,\"reply\":1003,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619268097},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extension": { + "lott": "{\"callbackId\":10,\"lottery_id\":61382,\"lottery_time\":1620504000,\"title\":\"互动抽奖\"}" + }, + "extend_json": "{\"ctrl\":[{\"data\":\"5\",\"length\":0,\"location\":0,\"type\":2}],\"from\":{\"emoji_type\":1,\"from\":\"\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"cc\":{\"vf\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"lott\":{\"callbackId\":10,\"lottery_id\":61382,\"lottery_time\":1620504000,\"title\":\"互动抽奖\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131384529, + "acl": 0, + "view": 1599049, + "repost": 5, + "comment": 63, + "like": 4614, + "is_liked": 0, + "dynamic_id": 517215462328123502, + "timestamp": 1619262009, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517215462328123502", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131384529" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 近期更新】(`・ω・´)\\nP1《#辉夜大小姐想让我告白# ~天才们的恋爱头脑战~ 》:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc26009\\nP2《#入间同学入魔了#!》:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc27189\\nP3《催眠麦克风-Division Rap Battle- side D.H&B.A.T》\\nP4《他和她的魔法契约》\\nP5《瓦尼塔斯的手记》\\nP6《见面5秒开始战斗》\\nP7《魔气来袭》\\nP8《尖帽子的魔法工坊》 \",\"id\":131384529,\"is_fav\":0,\"pictures\":[{\"img_height\":2920,\"img_size\":1993.103515625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/24a3e5d04e8ad86fcdae48e6ee88f90a0351f82d.jpg\",\"img_tags\":null,\"img_width\":2000},{\"img_height\":2872,\"img_size\":2453.1513671875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/d512d771dd3f91b54733f104e5de7e38d61ef56c.jpg\",\"img_tags\":null,\"img_width\":2000},{\"img_height\":2806,\"img_size\":4156.140625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/119fe01717120eb9c8c04d2c48a22298c8f88d17.jpg\",\"img_tags\":null,\"img_width\":2000},{\"img_height\":1147,\"img_size\":152.23046875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/d2fb2a6d2229a03ea967ee2182faefd67b0811fd.jpg\",\"img_tags\":null,\"img_width\":800},{\"img_height\":2637,\"img_size\":10432.2978515625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/e8966e96d34938474eebfcf60f38e14932e09be4.jpg\",\"img_tags\":null,\"img_width\":3600},{\"img_height\":2268,\"img_size\":6175.017578125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/4ed99d7329108e9e585db49da63a56bdcf7e8670.jpg\",\"img_tags\":null,\"img_width\":3200},{\"img_height\":1461,\"img_size\":283.990234375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/a8f37ec732103b1912fd3448d06d610cae5486df.jpg\",\"img_tags\":null,\"img_width\":800},{\"img_height\":2871,\"img_size\":3639.478515625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/fe8e58fd4f7c7063f880f064b3366e758dbfd7ee.jpg\",\"img_tags\":null,\"img_width\":2000}],\"pictures_count\":8,\"reply\":63,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619262009},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"cc\":{\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 4386628, + "topic_name": "辉夜大小姐想让我告白", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 8724199, + "topic_name": "入间同学入魔了", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/69330" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + } + ], + "offset": "517215462328123502", + "is_drawer_topic": 0, + "founder_uid": 0, + "_gt_": 0 + } +} +``` + +
+ +## 获取历史动态列表 +> https://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history + + *请求方式:GET* + + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------ | ---- | ---------- | ------ | -------- | +| topic_name | str | 话题名称 | 必要(可选) | topic_id与topic_name任选一个 | +| topic_id | num | 话题id | 必要(可选) | topic_id与topic_name任选一个 | +| offset_dynamic_id | num | 偏移值 | 必要| 可用于偏移显示的动态列表(为`0`时获取最新动态) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| data | obj | 信息本体 | | +| message | str | 错误信息 | 默认为空 | +| msg | num | 空 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ----- | ---------- | ------------ | +| attentions | obj | 当前登录账户关注列表(仅在传递了登录信息时出现) | | +| cards | array | 动态列表 | | +| has_more | num | 当前话题是否有额外的动态 | 0:无额外动态
1:有额外动态 | +| offset | str | 接下来获取列表时的偏移值 | 一般为当前获取的话题列表下最后一个动态id | +| \_gt\_ | num | 0 | 作用尚不明确 | + +`data`中的`cards`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 第1条动态卡片 | | +| n | obj | 第(n+1)条动态卡片 | | +| …… | obj | …… | …… | + +`data`中的`cards`数组中的对象: + +基本同「[获取特定动态卡片信息](get_dynamic_detail.md)」中的data对象 + +**示例:** + +获取话题`哔哩哔哩漫画`(话题id`7539944`)的当前动态列表 + +topic_name方式: +```shell +curl -G 'https://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history' \ +--data-urlencode 'topic_name=哔哩哔哩漫画&offset_dynamic_id=0' +``` +topic_id方式: +```shell +curl -G 'https://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history' \ +--data-urlencode 'topic_id=7539944&offset_dynamic_id=0' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "has_more": 1, + "cards": [ + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131534120, + "acl": 0, + "view": 555573, + "repost": 9, + "comment": 90, + "like": 2478, + "is_liked": 0, + "dynamic_id": 517602000793534062, + "timestamp": 1619352007, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517602000793534062", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131534120" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 作品推荐】兽人控狂喜!《#不莱梅乐队#》:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc28880\\n[思考]大家小时候看过一篇叫做《不莱梅的音乐家》的格林童话吗?\\n[惊喜]只不过在这部#欧漫#里,这四个动物的目的不是赶走强盗,而是追逐梦想、爱情、自由、正义。在这个充满混沌的世界里,他们将用音乐的力量改写自己和他人的命运。 \",\"id\":131534120,\"is_fav\":0,\"pictures\":[{\"img_height\":1922,\"img_size\":1163.9267578125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/f5a82f03475eed52973b3cecb2b5180b090cc5f0.png\",\"img_tags\":null,\"img_width\":1080},{\"img_height\":757,\"img_size\":273.130859375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/ca4055c7b9c246e7e922190102d5c87cd4dbcea8.png\",\"img_tags\":null,\"img_width\":436},{\"img_height\":1067,\"img_size\":640.29296875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/9de3ece4d374d07fb7b192db4520779a477cdf97.png\",\"img_tags\":null,\"img_width\":542},{\"img_height\":972,\"img_size\":374.8349609375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/cac12d548a3686335d3154cce672f1823ca92517.png\",\"img_tags\":null,\"img_width\":487}],\"pictures_count\":4,\"reply\":90,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619352007},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"cc\":{\"nv\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 15149492, + "topic_name": "不莱梅乐队", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 507003, + "topic_name": "欧漫", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[思考]", + "id": 1941, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[思考]", + "url": "https://i0.hdslb.com/bfs/emote/cfa9b7e89e4bfe04bbcd34ccb1b0df37f4fa905c.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + }, + { + "emoji_name": "[惊喜]", + "id": 19, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[惊喜]", + "url": "https://i0.hdslb.com/bfs/emote/0afecaf3a3499479af946f29749e1a6c285b6f65.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 240911350, + "type": 1, + "rid": 517516389208371264, + "acl": 0, + "view": 251, + "repost": 0, + "comment": 0, + "like": 2, + "is_liked": 0, + "dynamic_id": 517516389214088892, + "timestamp": 1619332074, + "pre_dy_id": 517479366596833835, + "orig_dy_id": 517479366596833835, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 240911350, + "uname": "Kekkai-piano", + "face": "https://i1.hdslb.com/bfs/face/f9b56adf0e9fb16d556fb5af93fc8367a255e4af.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1658851200000, + "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": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 2511, + "name": "初音未来13周年", + "image": "https://i1.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp", + "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png" + }, + "rank": "10000", + "sign": "看动画片的88键音游爱好者 \n专业人士轻喷 \n正在寻找缺失之物 \n超天変地異みたいな狂騒にも慣れて\n高三备考ing,莫要取关(bushi)", + "level_info": { + "current_level": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517516389214088892", + "pre_dy_id_str": "517479366596833835", + "orig_dy_id_str": "517479366596833835", + "rid_str": "517516389208371264", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131479206, + "acl": 1024, + "view": 1412747, + "repost": 11488, + "dynamic_id": 517479366596833835, + "timestamp": 1619323454, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517479366596833835", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131479206" + } + }, + "card": "{ \"user\": { \"uid\": 240911350, \"uname\": \"Kekkai-piano\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/f9b56adf0e9fb16d556fb5af93fc8367a255e4af.jpg\" }, \"item\": { \"rp_id\": 517516389208371264, \"uid\": 240911350, \"content\": \"分母报道[doge]#哔哩哔哩漫画#,#AISHA#\", \"orig_dy_id\": 517479366596833835, \"pre_dy_id\": 517479366596833835, \"timestamp\": 1619332074, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\",\\\\\\\"length\\\\\\\":0,\\\\\\\"location\\\\\\\":0,\\\\\\\"type\\\\\\\":2},{\\\\\\\"location\\\\\\\":19,\\\\\\\"type\\\\\\\":1,\\\\\\\"length\\\\\\\":8,\\\\\\\"data\\\\\\\":\\\\\\\"1425490690\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 关+转,抽3位幸运小伙伴送@漫画家法吉特 【《逆光》画集作者签名版】~\\\\n #哔哩哔哩漫画#重磅安利之《#AISHA#》\\\\n当当当当!剧情党福音~\\\\n答题就有机会赢得礼物?还有法吉特太太亲签精美画集?\\\\n活动入口→https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/blackboard\\\\\\/topic\\\\\\/activity-oPISh007wv.html\\\\n\\\\n你以为这样就结束了了吗?\\\\nNONONO~\\\\n法吉特老师首次出版个人作品集《逆光》~商城4月25日0点首发开售!\\\\n有法吉特老师签名版掉落哦!随书额外附赠专属书签特典!\\\\n活动指路:哔哩哔哩漫画APP-我的-商城-banner\\\",\\\"id\\\":131479206,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":782,\\\"img_size\\\":1097.2451171875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/8965a784f77e2545f4f2f168df4f417ed3ace818.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":750}],\\\"pictures_count\\\":1,\\\"reply\\\":599,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619323454},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":61398}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2},{\\\"data\\\":\\\"1425490690\\\",\\\"length\\\":8,\\\"location\\\":19,\\\"type\\\":1}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":61398},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[doge]", + "id": 26, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[doge]", + "url": "https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1192711092, + "type": 1, + "rid": 517505230885402892, + "acl": 0, + "view": 3, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517505230886905525, + "timestamp": 1619329476, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 1192711092, + "uname": "会发光的偶恰", + "face": "https://i0.hdslb.com/bfs/face/b85a508793bd96deec61e2491d60e68f10378395.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 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517505230886905525", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517505230885402892", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1962092, + "repost": 16607, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 1192711092, \"uname\": \"会发光的偶恰\", \"face\": \"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/b85a508793bd96deec61e2491d60e68f10378395.jpg\" }, \"item\": { \"rp_id\": 517505230885402892, \"uid\": 1192711092, \"content\": \"我最喜欢这个了,我也想要#哔哩哔哩漫画#\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619329476, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1020,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1365116, + "type": 1, + "rid": 517503525787575777, + "acl": 0, + "view": 2, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517503525779637979, + "timestamp": 1619329079, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 1365116, + "uname": "濑户的海参", + "face": "https://i2.hdslb.com/bfs/face/8426c61be9c3ccd2296d080a54691c3bed5f2f9f.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": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517503525779637979", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517503525787575777", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1962092, + "repost": 16607, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 1365116, \"uname\": \"濑户的海参\", \"face\": \"https:\\/\\/i2.hdslb.com\\/bfs\\/face\\/8426c61be9c3ccd2296d080a54691c3bed5f2f9f.jpg\" }, \"item\": { \"rp_id\": 517503525787575777, \"uid\": 1365116, \"content\": \"嗯哼#哔哩哔哩漫画#\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619329079, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1020,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131489076, + "acl": 0, + "view": 1429218, + "repost": 34, + "comment": 23, + "like": 3872, + "is_liked": 0, + "dynamic_id": 517501494260096644, + "timestamp": 1619328606, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517501494260096644", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131489076" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 限免活动+周边路透】✿ヽ(°▽°)ノ✿ \\n《#天宝伏妖录#》漫画第二卷将在【4月25日至5月2日】限时免费1周[打call][打call],感谢大家一直以来的支持[W-哈哈]!精彩剧情,不容错过!\\n同时之前《#天宝伏妖录#》第三卷活动售卖的周边近期在准备开补款啦~\\n小伙伴们先看看限定周边的实物图透叭(P1-P8)[打call]! 新卷也一直在筹备中,新卷封面同时奉上(P9)! \\n【追漫传送】:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc27592 \",\"id\":131489076,\"is_fav\":0,\"pictures\":[{\"img_height\":5046,\"img_size\":16654.3876953125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/6bcd7a96fe7bc616a7ea334319b58a3ab451cda2.jpg\",\"img_tags\":null,\"img_width\":6728},{\"img_height\":5046,\"img_size\":15713.2236328125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/41e9e8ed2f181ce84adbb1175dcfc47b6b32d270.jpg\",\"img_tags\":null,\"img_width\":6728},{\"img_height\":5136,\"img_size\":20368.2822265625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/81936f0dacc1fa63264d18cdba738b3582562cdd.jpg\",\"img_tags\":null,\"img_width\":7705},{\"img_height\":4427,\"img_size\":15909.310546875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/5116024add807a033cf63395683c5b6ade28fbcf.jpg\",\"img_tags\":null,\"img_width\":6641},{\"img_height\":5136,\"img_size\":20431.3994140625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/61155f325c5a862b0dcdb1dacc95f252ac768a4e.jpg\",\"img_tags\":null,\"img_width\":7705},{\"img_height\":5261,\"img_size\":19335.5029296875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/6f5a7241d8f0093952edf16195b4d0aecfa2c6cd.jpg\",\"img_tags\":null,\"img_width\":7014},{\"img_height\":1408,\"img_size\":4784.3037109375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/0350c791822a980d72450da226b1d61fa7b68c8f.png\",\"img_tags\":null,\"img_width\":1878},{\"img_height\":1408,\"img_size\":4614.8251953125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/271187137e9973d07f01763a9a41b9b7f25f68fd.png\",\"img_tags\":null,\"img_width\":1878},{\"img_height\":3508,\"img_size\":1452.4482421875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/f818bb197c7cc914ed4c921a6f7488f87ca15faf.jpg\",\"img_tags\":null,\"img_width\":2480}],\"pictures_count\":9,\"reply\":23,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619328606},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"cc\":{\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3812656, + "topic_name": "天宝伏妖录", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/62601" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[W-哈哈]", + "id": 3045, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[W-哈哈]", + "url": "https://i0.hdslb.com/bfs/emote/83d527303c8f62f494e6971c48836487e7d87b1b.png", + "meta": { + "size": 1 + }, + "mtime": 1608785082 + }, + { + "emoji_name": "[打call]", + "id": 510, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[打call]", + "url": "https://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1902548007, + "type": 2, + "rid": 131480564, + "acl": 0, + "view": 1095, + "repost": 0, + "comment": 0, + "like": 16, + "is_liked": 0, + "dynamic_id": 517482725259184156, + "timestamp": 1619324236, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 1902548007, + "uname": "BV社", + "face": "https://i0.hdslb.com/bfs/face/48f8e6afa688e37b9f1e3721a86bea8ce02688dc.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "BV社官方账号" + } + }, + "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": "Vomic,让你爱的漫画更动听", + "level_info": { + "current_level": 2 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517482725259184156", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131480564" + }, + "card": "{\"item\":{\"at_control\":\"[{\\\"location\\\":122,\\\"type\\\":1,\\\"length\\\":8,\\\"data\\\":\\\"326499679\\\"},{\\\"location\\\":133,\\\"type\\\":1,\\\"length\\\":5,\\\"data\\\":\\\"1902548007\\\"},{\\\"location\\\":141,\\\"type\\\":1,\\\"length\\\":9,\\\"data\\\":\\\"386135764\\\"},{\\\"location\\\":153,\\\"type\\\":1,\\\"length\\\":6,\\\"data\\\":\\\"1740792\\\"}]\",\"category\":\"daily\",\"description\":\"#哔哩哔哩漫画#独家\\n“女鬼”找上门,却是为了救人?\\n“养尸地?那是啥?里面有宝贝嘛?”\\n“有凶尸。”\\n哟,父子俩这是什么情况?\\n惊奇 #Vomic##幽冥诡匠#第五集正式上线!每周日更新!更多精彩,小剧场,花絮,尽在哔哩哔哩漫画APP\\n出品:@哔哩哔哩漫画\\n策划:@BV社\\n制作:@回声漫响工作室\\n录制:@音熊联萌 \",\"id\":131480564,\"is_fav\":0,\"pictures\":[{\"img_height\":2400,\"img_size\":2852.115234375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/cb7632509c8cb8a7703f5ab289320b26a07ec62e.jpg\",\"img_tags\":null,\"img_width\":2400}],\"pictures_count\":1,\"reply\":0,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619324236},\"user\":{\"head_url\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/48f8e6afa688e37b9f1e3721a86bea8ce02688dc.jpg\",\"name\":\"BV社\",\"uid\":1902548007,\"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}}}", + "extend_json": "{\"ctrl\":[{\"data\":\"326499679\",\"length\":8,\"location\":122,\"type\":1},{\"data\":\"1902548007\",\"length\":5,\"location\":133,\"type\":1},{\"data\":\"386135764\",\"length\":9,\"location\":141,\"type\":1},{\"data\":\"1740792\",\"length\":6,\"location\":153,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.dynamic.web\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3208432, + "topic_name": "Vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106426" + }, + { + "topic_id": 7128092, + "topic_name": "幽冥诡匠", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/42527" + }, + { + "topic_id": 37542, + "topic_name": "VOMIC", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106283" + }, + { + "topic_id": 8972604, + "topic_name": "vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106766" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 255495142, + "type": 1, + "rid": 517480856950088884, + "acl": 0, + "view": 344, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517480856947349138, + "timestamp": 1619323801, + "pre_dy_id": 517479366596833835, + "orig_dy_id": 517479366596833835, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 255495142, + "uname": "坐怀不乱登徒子", + "face": "https://i1.hdslb.com/bfs/face/fa18d118f6c58da704400909743fb895c4c47627.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1626451200000, + "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": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 204, + "name": "至高守护", + "image": "https://i1.hdslb.com/bfs/face/88162662c23c2768c9e9e5c25017375685e83798.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/face/88162662c23c2768c9e9e5c25017375685e83798.png", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "", + "level_info": { + "current_level": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517480856947349138", + "pre_dy_id_str": "517479366596833835", + "orig_dy_id_str": "517479366596833835", + "rid_str": "517480856950088884", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131479206, + "acl": 1024, + "view": 1412747, + "repost": 11488, + "dynamic_id": 517479366596833835, + "timestamp": 1619323454, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517479366596833835", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131479206" + } + }, + "card": "{ \"user\": { \"uid\": 255495142, \"uname\": \"坐怀不乱登徒子\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/fa18d118f6c58da704400909743fb895c4c47627.jpg\" }, \"item\": { \"rp_id\": 517480856950088884, \"uid\": 255495142, \"content\": \"[doge]#哔哩哔哩漫画#,#AISHA#\", \"orig_dy_id\": 517479366596833835, \"pre_dy_id\": 517479366596833835, \"timestamp\": 1619323801, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\",\\\\\\\"length\\\\\\\":0,\\\\\\\"location\\\\\\\":0,\\\\\\\"type\\\\\\\":2},{\\\\\\\"location\\\\\\\":19,\\\\\\\"type\\\\\\\":1,\\\\\\\"length\\\\\\\":8,\\\\\\\"data\\\\\\\":\\\\\\\"1425490690\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 关+转,抽3位幸运小伙伴送@漫画家法吉特 【《逆光》画集作者签名版】~\\\\n #哔哩哔哩漫画#重磅安利之《#AISHA#》\\\\n当当当当!剧情党福音~\\\\n答题就有机会赢得礼物?还有法吉特太太亲签精美画集?\\\\n活动入口→https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/blackboard\\\\\\/topic\\\\\\/activity-oPISh007wv.html\\\\n\\\\n你以为这样就结束了了吗?\\\\nNONONO~\\\\n法吉特老师首次出版个人作品集《逆光》~商城4月25日0点首发开售!\\\\n有法吉特老师签名版掉落哦!随书额外附赠专属书签特典!\\\\n活动指路:哔哩哔哩漫画APP-我的-商城-banner\\\",\\\"id\\\":131479206,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":782,\\\"img_size\\\":1097.2451171875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/8965a784f77e2545f4f2f168df4f417ed3ace818.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":750}],\\\"pictures_count\\\":1,\\\"reply\\\":599,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619323454},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":61398}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2},{\\\"data\\\":\\\"1425490690\\\",\\\"length\\\":8,\\\"location\\\":19,\\\"type\\\":1}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":61398},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[doge]", + "id": 26, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[doge]", + "url": "https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131479206, + "acl": 1024, + "view": 1412747, + "repost": 11488, + "comment": 599, + "like": 6530, + "is_liked": 0, + "dynamic_id": 517479366596833835, + "timestamp": 1619323454, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517479366596833835", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131479206" + }, + "card": "{\"item\":{\"at_control\":\"[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2},{\\\"location\\\":19,\\\"type\\\":1,\\\"length\\\":8,\\\"data\\\":\\\"1425490690\\\"}]\",\"category\":\"daily\",\"description\":\"​互动抽奖 关+转,抽3位幸运小伙伴送@漫画家法吉特 【《逆光》画集作者签名版】~\\n #哔哩哔哩漫画#重磅安利之《#AISHA#》\\n当当当当!剧情党福音~\\n答题就有机会赢得礼物?还有法吉特太太亲签精美画集?\\n活动入口→https:\\/\\/www.bilibili.com\\/blackboard\\/topic\\/activity-oPISh007wv.html\\n\\n你以为这样就结束了了吗?\\nNONONO~\\n法吉特老师首次出版个人作品集《逆光》~商城4月25日0点首发开售!\\n有法吉特老师签名版掉落哦!随书额外附赠专属书签特典!\\n活动指路:哔哩哔哩漫画APP-我的-商城-banner\",\"id\":131479206,\"is_fav\":0,\"pictures\":[{\"img_height\":782,\"img_size\":1097.2451171875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/8965a784f77e2545f4f2f168df4f417ed3ace818.png\",\"img_tags\":null,\"img_width\":750}],\"pictures_count\":1,\"reply\":599,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619323454},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extension": { + "lott": "{\"lottery_id\":61398}" + }, + "extend_json": "{\"ctrl\":[{\"data\":\"5\",\"length\":0,\"location\":0,\"type\":2},{\"data\":\"1425490690\",\"length\":8,\"location\":19,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.dynamic.web\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"cc\":{\"vf\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"lott\":{\"lottery_id\":61398},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 148830, + "topic_name": "AISHA", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/18159" + }, + { + "topic_id": 2514603, + "topic_name": "aisha", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 271873076, + "type": 2, + "rid": 131468623, + "acl": 0, + "view": 23, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517452016241823721, + "timestamp": 1619317086, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 271873076, + "uname": "爱乐果iLEGUO", + "face": "https://i2.hdslb.com/bfs/face/fb79ac0f6de92c8ecc7d4cd1e958d19376c85fe8.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": "龙俦纪+羞耻侠+妖怪IDOLS+偶像饲养手册+闪亮的家+神奇少年团+第8界+爱果系列+爱次元!研究社", + "level_info": { + "current_level": 4 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517452016241823721", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131468623" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"《龙俦纪》第99话4月25日更新!\\n高振采药遇险,竟然从悬崖上坠入万丈深渊?!!\\n苏郃首次展现能力,苏千屹又从苏郃身上发现了什么秘密?\\n《龙俦纪》正在好评连载中,逢“五”更新,欢迎追漫!\\n#哔哩哔哩漫画# https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc26014 \\n#宝藏漫画##爱乐果##漫画##二次元##古风##玄幻##二次元条漫# \",\"id\":131468623,\"is_fav\":0,\"pictures\":[{\"img_height\":720,\"img_size\":297.19140625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/54e4f9e0c339f42484fcbe42cb7e7f69be4b87aa.jpg\",\"img_tags\":null,\"img_width\":1280}],\"pictures_count\":1,\"reply\":0,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619317086},\"user\":{\"head_url\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/face\\/fb79ac0f6de92c8ecc7d4cd1e958d19376c85fe8.jpg\",\"name\":\"爱乐果iLEGUO\",\"uid\":271873076,\"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}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 10182306, + "topic_name": "宝藏漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 9628017, + "topic_name": "爱乐果", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1184, + "topic_name": "漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1907, + "topic_name": "二次元", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/7694" + }, + { + "topic_id": 8227, + "topic_name": "古风", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 62935, + "topic_name": "玄幻", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 12532729, + "topic_name": "二次元条漫", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1677019, + "type": 1, + "rid": 517443572335742626, + "acl": 0, + "view": 5, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517443572332941328, + "timestamp": 1619315120, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 1677019, + "uname": "逗妇卤", + "face": "https://i1.hdslb.com/bfs/face/15a8f5d8c93f8f30bda71f192b92cfde2c76a1c7.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1637510400000, + "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": "https://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, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517443572332941328", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517443572335742626", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1962092, + "repost": 16607, + "comment": 1020, + "like": 7002, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 1677019, \"uname\": \"逗妇卤\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/15a8f5d8c93f8f30bda71f192b92cfde2c76a1c7.jpg\" }, \"item\": { \"rp_id\": 517443572335742626, \"uid\": 1677019, \"content\": \"【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\/玩偶等福利好礼相送!\\n[干杯] 快来哔哩哔哩漫画追漫吧~\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619315120, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1020,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 324540735, + "type": 8, + "rid": 672631542, + "acl": 0, + "view": 31, + "repost": 0, + "like": 1, + "is_liked": 0, + "dynamic_id": 517311278755293659, + "timestamp": 1619284318, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 324540735, + "uname": "文雯兄", + "face": "https://i0.hdslb.com/bfs/face/8000d5ad4652f8bf9074781a108eb54243a06889.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 1, + "vipDueDate": 1613491200000, + "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, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517311278755293659", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "672631542", + "bvid": "BV1dU4y1h78A" + }, + "card": "{\"aid\":672631542,\"attribute\":0,\"cid\":328783995,\"copyright\":1,\"ctime\":1619284318,\"desc\":\"本漫画由哔哩哔哩漫画出品,本人配音,谢谢大家的支持。\",\"dimension\":{\"height\":1920,\"rotate\":0,\"width\":864},\"duration\":191,\"dynamic\":\"\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/672631542\\/?page=1&player_preload=null&player_width=864&player_height=1920&player_rotate=0\",\"mission_id\":18978,\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/8000d5ad4652f8bf9074781a108eb54243a06889.jpg\",\"mid\":324540735,\"name\":\"文雯兄\"},\"pic\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/archive\\/b2d2dc3a909696ea1db3fbfeeb7ab42dc37ced87.jpg\",\"player_info\":null,\"pubdate\":1619284318,\"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\\/BV1dU4y1h78A\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1dU4y1h78A\",\"stat\":{\"aid\":672631542,\"coin\":0,\"danmaku\":0,\"dislike\":0,\"favorite\":0,\"his_rank\":0,\"like\":1,\"now_rank\":0,\"reply\":0,\"share\":0,\"view\":10},\"state\":0,\"tid\":138,\"title\":\"怎么办,我穿越成最弱小野怪了(三十九)【关于我不当人的这件事】\",\"tname\":\"搞笑\",\"up_from_v2\":8,\"videos\":1}", + "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}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 19254944, + "topic_name": "火力配音王-配音剧场", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/108663" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3844, + "topic_name": "穿越", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1833, + "topic_name": "搞笑", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1217, + "topic_name": "自制", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1184, + "topic_name": "漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 326499679, + "type": 8, + "rid": 972719486, + "acl": 0, + "view": 2766257, + "repost": 3, + "like": 5925, + "is_liked": 0, + "dynamic_id": 517261895213635612, + "timestamp": 1619272820, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517261895213635612", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "972719486", + "bvid": "BV1Gp4y1b7ZB" + }, + "card": "{\"aid\":972719486,\"attribute\":0,\"cid\":328058863,\"copyright\":1,\"ctime\":1619272820,\"desc\":\"#反派初始化# #Vomic#\\n圈圈叉叉,桃树开花,花瓣落下,生出新芽。\\n@哔哩哔哩漫画 出品、@BV社 策划、 @Antler_墨柚 原作、@叉叉叉叉叉口叉 主笔、@补天研究所 制作、@音熊联萌 录制、Vomic《反派初始化》第二集正式上线!\\n哔哩哔哩漫画独家播放,每周六更新!\\n还有小剧场,花絮不定时掉落、敬请期待~\\n\\n出品:@哔哩哔哩漫画\\n策划:@BV社\\n制作:@补天研究所\\n录制:@音熊联萌\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":62,\"dynamic\":\"#哔哩哔哩漫画#独家,#Vomic#2021年4月3日起每周六更新!更多精彩,小剧场,花絮,尽在哔哩哔哩漫画APP\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/972719486\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"mid\":326499679,\"name\":\"哔哩哔哩漫画\"},\"pic\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/archive\\/3c8a720b809153f95b1134acb991011eb79dc80b.jpg\",\"player_info\":null,\"pubdate\":1619272819,\"rights\":{\"autoplay\":1,\"bp\":0,\"download\":0,\"elec\":0,\"hd5\":1,\"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\\/BV1Gp4y1b7ZB\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1Gp4y1b7ZB\",\"stat\":{\"aid\":972719486,\"coin\":115,\"danmaku\":4,\"dislike\":0,\"favorite\":44,\"his_rank\":0,\"like\":5925,\"now_rank\":0,\"reply\":35,\"share\":145,\"view\":32070},\"state\":0,\"tid\":27,\"title\":\"【Vomic】滴——《反派初始化》第二集精彩片段!\",\"tname\":\"综合\",\"videos\":1}", + "extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\",\"verify\":{}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3208432, + "topic_name": "Vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106426" + }, + { + "topic_id": 37542, + "topic_name": "VOMIC", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106283" + }, + { + "topic_id": 8972604, + "topic_name": "vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106766" + }, + { + "topic_id": 210754, + "topic_name": "夏磊", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 10526139, + "topic_name": "反派初始化", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1322133, + "topic_name": "赵路", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 423864, + "topic_name": "音熊联萌", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/17389" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 255495142, + "type": 1, + "rid": 517243774753706830, + "acl": 0, + "view": 9, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517243774755903256, + "timestamp": 1619268601, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 255495142, + "uname": "坐怀不乱登徒子", + "face": "https://i1.hdslb.com/bfs/face/fa18d118f6c58da704400909743fb895c4c47627.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1626451200000, + "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": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png" + }, + "pendant": { + "pid": 204, + "name": "至高守护", + "image": "https://i1.hdslb.com/bfs/face/88162662c23c2768c9e9e5c25017375685e83798.png", + "expire": 0, + "image_enhance": "https://i1.hdslb.com/bfs/face/88162662c23c2768c9e9e5c25017375685e83798.png", + "image_enhance_frame": "" + }, + "rank": "10000", + "sign": "", + "level_info": { + "current_level": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517243774755903256", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517243774753706830", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1962092, + "repost": 16607, + "comment": 1020, + "like": 7002, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 255495142, \"uname\": \"坐怀不乱登徒子\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/fa18d118f6c58da704400909743fb895c4c47627.jpg\" }, \"item\": { \"rp_id\": 517243774753706830, \"uid\": 255495142, \"content\": \"冲冲冲#哔哩哔哩漫画#\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619268601, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1020,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 335270851, + "type": 1, + "rid": 517243658786443535, + "acl": 0, + "view": 25, + "repost": 0, + "comment": 0, + "like": 1, + "is_liked": 0, + "dynamic_id": 517243658790736702, + "timestamp": 1619268574, + "pre_dy_id": 517241610091321208, + "orig_dy_id": 517241610091321208, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 335270851, + "uname": "符号门", + "face": "https://i1.hdslb.com/bfs/face/67371311c9e047543a70c1d41e7a03c3854f2981.jpg" + }, + "card": { + "official_verify": { + "type": -1, + "desc": "" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1647014400000, + "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": "https://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": 4 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517243658790736702", + "pre_dy_id_str": "517241610091321208", + "orig_dy_id_str": "517241610091321208", + "rid_str": "517243658786443535", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1962092, + "repost": 16607, + "comment": 1020, + "like": 7002, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + } + }, + "card": "{ \"user\": { \"uid\": 335270851, \"uname\": \"符号门\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/67371311c9e047543a70c1d41e7a03c3854f2981.jpg\" }, \"item\": { \"rp_id\": 517243658786443535, \"uid\": 335270851, \"content\": \"#哔哩哔哩漫画#[打call][打call][打call]\", \"orig_dy_id\": 517241610091321208, \"pre_dy_id\": 517241610091321208, \"timestamp\": 1619268574, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"type\\\\\\\":2,\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":0,\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\"}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\\\\\/玩偶等福利好礼相送!\\\\n[干杯] 快来哔哩哔哩漫画追漫吧~\\\",\\\"id\\\":131403515,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":1357,\\\"img_size\\\":1759.1650390625,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":1238,\\\"img_size\\\":832.51953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":2193,\\\"img_size\\\":3424.060546875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080},{\\\"img_height\\\":800,\\\"img_size\\\":166.1552734375,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":800}],\\\"pictures_count\\\":4,\\\"reply\\\":1020,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619268097},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"asw\\\":{\\\"fl\\\":15,\\\"nv\\\":1},\\\"cc\\\":{\\\"vf\\\":1},\\\"sw\\\":{\\\"fl\\\":15,\\\"nv\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"callbackId\\\":10,\\\"lottery_id\\\":61382,\\\"lottery_time\\\":1620504000,\\\"title\\\":\\\"互动抽奖\\\"},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[打call]", + "id": 510, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[打call]", + "url": "https://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131403515, + "acl": 1024, + "view": 1962092, + "repost": 16607, + "comment": 1020, + "like": 7002, + "is_liked": 0, + "dynamic_id": 517241610091321208, + "timestamp": 1619268097, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517241610091321208", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131403515" + }, + "card": "{\"item\":{\"at_control\":\"[{\\\"type\\\":2,\\\"location\\\":0,\\\"length\\\":0,\\\"data\\\":\\\"5\\\"}]\",\"category\":\"daily\",\"description\":\"​互动抽奖 【关+转】抽1位小伙伴送【哔哩哔哩小电视兔子包】~\\n【#哔哩哔哩漫画# 作品推荐】大量西幻少女漫爆更来啦———\\n[干杯] 即日起,《重生成为公爵家的丑女》《暴君的监护人是反派魔女》《姐姐捡回了男主》等大量西幻少女精品漫画爆更,追漫更有樱花立牌\\/玩偶等福利好礼相送!\\n[干杯] 快来哔哩哔哩漫画追漫吧~\",\"id\":131403515,\"is_fav\":0,\"pictures\":[{\"img_height\":1357,\"img_size\":1759.1650390625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/1ce565e7f36e0ae5a3809df21bb39aa2fe578a88.png\",\"img_tags\":null,\"img_width\":1080},{\"img_height\":1238,\"img_size\":832.51953125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/6df0150c77a7f42a5d31cce8bb006105a660dad9.png\",\"img_tags\":null,\"img_width\":1080},{\"img_height\":2193,\"img_size\":3424.060546875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/adce81c59436184b56d84e5394583d2ab491b2e6.png\",\"img_tags\":null,\"img_width\":1080},{\"img_height\":800,\"img_size\":166.1552734375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/9c4e8d6fc04d5a1f3df225d5967fb65c7a3f5f09.jpg\",\"img_tags\":null,\"img_width\":800}],\"pictures_count\":4,\"reply\":1020,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619268097},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extension": { + "lott": "{\"callbackId\":10,\"lottery_id\":61382,\"lottery_time\":1620504000,\"title\":\"互动抽奖\"}" + }, + "extend_json": "{\"ctrl\":[{\"data\":\"5\",\"length\":0,\"location\":0,\"type\":2}],\"from\":{\"emoji_type\":1,\"from\":\"\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"cc\":{\"vf\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"lott\":{\"callbackId\":10,\"lottery_id\":61382,\"lottery_time\":1620504000,\"title\":\"互动抽奖\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[干杯]", + "id": 1949, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[干杯]", + "url": "https://i0.hdslb.com/bfs/emote/8da12d5f55a2c7e9778dcc05b40571979fe208e6.png", + "meta": { + "size": 1 + }, + "mtime": 1597738918 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131384529, + "acl": 0, + "view": 1605629, + "repost": 5, + "comment": 63, + "like": 4631, + "is_liked": 0, + "dynamic_id": 517215462328123502, + "timestamp": 1619262009, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517215462328123502", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131384529" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 近期更新】(`・ω・´)\\nP1《#辉夜大小姐想让我告白# ~天才们的恋爱头脑战~ 》:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc26009\\nP2《#入间同学入魔了#!》:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc27189\\nP3《催眠麦克风-Division Rap Battle- side D.H&B.A.T》\\nP4《他和她的魔法契约》\\nP5《瓦尼塔斯的手记》\\nP6《见面5秒开始战斗》\\nP7《魔气来袭》\\nP8《尖帽子的魔法工坊》 \",\"id\":131384529,\"is_fav\":0,\"pictures\":[{\"img_height\":2920,\"img_size\":1993.103515625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/24a3e5d04e8ad86fcdae48e6ee88f90a0351f82d.jpg\",\"img_tags\":null,\"img_width\":2000},{\"img_height\":2872,\"img_size\":2453.1513671875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/d512d771dd3f91b54733f104e5de7e38d61ef56c.jpg\",\"img_tags\":null,\"img_width\":2000},{\"img_height\":2806,\"img_size\":4156.140625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/119fe01717120eb9c8c04d2c48a22298c8f88d17.jpg\",\"img_tags\":null,\"img_width\":2000},{\"img_height\":1147,\"img_size\":152.23046875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/d2fb2a6d2229a03ea967ee2182faefd67b0811fd.jpg\",\"img_tags\":null,\"img_width\":800},{\"img_height\":2637,\"img_size\":10432.2978515625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/e8966e96d34938474eebfcf60f38e14932e09be4.jpg\",\"img_tags\":null,\"img_width\":3600},{\"img_height\":2268,\"img_size\":6175.017578125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/4ed99d7329108e9e585db49da63a56bdcf7e8670.jpg\",\"img_tags\":null,\"img_width\":3200},{\"img_height\":1461,\"img_size\":283.990234375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/a8f37ec732103b1912fd3448d06d610cae5486df.jpg\",\"img_tags\":null,\"img_width\":800},{\"img_height\":2871,\"img_size\":3639.478515625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/fe8e58fd4f7c7063f880f064b3366e758dbfd7ee.jpg\",\"img_tags\":null,\"img_width\":2000}],\"pictures_count\":8,\"reply\":63,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619262009},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"cc\":{\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 4386628, + "topic_name": "辉夜大小姐想让我告白", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 8724199, + "topic_name": "入间同学入魔了", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/69330" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1572178656, + "type": 2, + "rid": 131375699, + "acl": 0, + "view": 13, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 517200331161362689, + "timestamp": 1619258486, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 1572178656, + "uname": "星宿战纪漫画", + "face": "https://i0.hdslb.com/bfs/face/f791586939dcbd3f19545af1e65c369983e63c39.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": 2 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517200331161362689", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131375699" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"#哔哩哔哩漫画# #星宿战纪# #星宿战纪漫画# #漫画# B漫:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc29438\\n闭关修炼ing的小金蝉~可可爱爱[热词系列_奥力给]\",\"id\":131375699,\"is_fav\":0,\"pictures\":[{\"img_height\":593,\"img_size\":86.4052734375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/d3074ad36616678a285de9011d3ba1cee04fa69e.jpg\",\"img_tags\":null,\"img_width\":375}],\"pictures_count\":1,\"reply\":0,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619258486},\"user\":{\"head_url\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/f791586939dcbd3f19545af1e65c369983e63c39.jpg\",\"name\":\"星宿战纪漫画\",\"uid\":1572178656,\"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}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"\",\"up_close_comment\":0,\"verify\":{}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 18523004, + "topic_name": "星宿战纪", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 18523003, + "topic_name": "星宿战纪漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1184, + "topic_name": "漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[热词系列_奥力给]", + "id": 1885, + "package_id": 53, + "state": 0, + "type": 1, + "attr": 2, + "text": "[热词系列_奥力给]", + "url": "https://i0.hdslb.com/bfs/emote/c9b8683827ec6c00fea5327c9bec14f581cef2aa.png", + "meta": { + "size": 2 + }, + "mtime": 1598525979 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131350038, + "acl": 0, + "view": 1974729, + "repost": 13, + "comment": 39, + "like": 4732, + "is_liked": 0, + "dynamic_id": 517153601912668248, + "timestamp": 1619247606, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517153601912668248", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131350038" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 作品推荐】来读一部治愈系#欧漫#吧:《#格莱米耶姐妹#》https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc28726\\n[W-哈哈]还记得童年最爱的五个魔力少女吗?《#魔力W.i.t.c.h.#》的作者带着全新的故事来了!\\n[打call]熟悉的画风,同样的治愈,主角变成了可爱的三姐妹。她们想在妈妈生日当天送给她一本图画书,却意外发现了一张特别的照片,一个亲情秘密即将被揭晓…… \",\"id\":131350038,\"is_fav\":0,\"pictures\":[{\"img_height\":960,\"img_size\":911.2685546875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/f88be70d1dee3dd408fb00daf27ca2b551045424.jpg\",\"img_tags\":null,\"img_width\":720},{\"img_height\":3705,\"img_size\":3552.703125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/0c1ad02cfed7d09fb68da69f6f6ed3afb33759ac.png\",\"img_tags\":null,\"img_width\":800},{\"img_height\":3373,\"img_size\":2038.8671875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/4eed376d55d27870b126b7089082cd6f32582c55.png\",\"img_tags\":null,\"img_width\":800}],\"pictures_count\":3,\"reply\":39,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619247606},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"cc\":{\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 507003, + "topic_name": "欧漫", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 19491399, + "topic_name": "格莱米耶姐妹", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 19491398, + "topic_name": "魔力W.i.t.c.h.", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1161514, + "topic_name": "魔力W.I.T.C.H.", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[W-哈哈]", + "id": 3045, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[W-哈哈]", + "url": "https://i0.hdslb.com/bfs/emote/83d527303c8f62f494e6971c48836487e7d87b1b.png", + "meta": { + "size": 1 + }, + "mtime": 1608785082 + }, + { + "emoji_name": "[打call]", + "id": 510, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[打call]", + "url": "https://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png", + "meta": { + "size": 1 + }, + "mtime": 1617293741 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1902548007, + "type": 2, + "rid": 131326547, + "acl": 0, + "view": 1681, + "repost": 0, + "comment": 2, + "like": 17, + "is_liked": 0, + "dynamic_id": 517110364476558101, + "timestamp": 1619237539, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 1902548007, + "uname": "BV社", + "face": "https://i0.hdslb.com/bfs/face/48f8e6afa688e37b9f1e3721a86bea8ce02688dc.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "BV社官方账号" + } + }, + "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": "Vomic,让你爱的漫画更动听", + "level_info": { + "current_level": 2 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "517110364476558101", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131326547" + }, + "card": "{\"item\":{\"at_control\":\"[{\\\"location\\\":93,\\\"type\\\":1,\\\"length\\\":8,\\\"data\\\":\\\"326499679\\\"},{\\\"location\\\":104,\\\"type\\\":1,\\\"length\\\":5,\\\"data\\\":\\\"1902548007\\\"},{\\\"location\\\":112,\\\"type\\\":1,\\\"length\\\":7,\\\"data\\\":\\\"492733946\\\"},{\\\"location\\\":122,\\\"type\\\":1,\\\"length\\\":6,\\\"data\\\":\\\"1740792\\\"}]\",\"category\":\"daily\",\"description\":\"#哔哩哔哩漫画#独家,#反派初始化# #Vomic# 我命定的男主!凌辰!!\\n第四集准时上线!2021年4月3日起每周六更新!更多精彩,小剧场,花絮,尽在哔哩哔哩漫画APP\\n \\n出品:@哔哩哔哩漫画\\n策划:@BV社\\n制作:@补天研究所\\n录制:@音熊联萌 \",\"id\":131326547,\"is_fav\":0,\"pictures\":[{\"img_height\":2400,\"img_size\":2228.2724609375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/461e7359ad89788cea42f61690b9cf7c73cc6ab5.jpg\",\"img_tags\":null,\"img_width\":2400}],\"pictures_count\":1,\"reply\":2,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619237539},\"user\":{\"head_url\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/48f8e6afa688e37b9f1e3721a86bea8ce02688dc.jpg\",\"name\":\"BV社\",\"uid\":1902548007,\"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}}}", + "extend_json": "{\"ctrl\":[{\"data\":\"326499679\",\"length\":8,\"location\":93,\"type\":1},{\"data\":\"1902548007\",\"length\":5,\"location\":104,\"type\":1},{\"data\":\"492733946\",\"length\":7,\"location\":112,\"type\":1},{\"data\":\"1740792\",\"length\":6,\"location\":122,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.dynamic.web\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 10526139, + "topic_name": "反派初始化", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3208432, + "topic_name": "Vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106426" + }, + { + "topic_id": 37542, + "topic_name": "VOMIC", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106283" + }, + { + "topic_id": 8972604, + "topic_name": "vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106766" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1192711092, + "type": 1, + "rid": 516803952918881881, + "acl": 0, + "view": 231, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 516803952924449005, + "timestamp": 1619166197, + "pre_dy_id": 516417934145814823, + "orig_dy_id": 516417934145814823, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 1192711092, + "uname": "会发光的偶恰", + "face": "https://i0.hdslb.com/bfs/face/b85a508793bd96deec61e2491d60e68f10378395.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 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "516803952924449005", + "pre_dy_id_str": "516417934145814823", + "orig_dy_id_str": "516417934145814823", + "rid_str": "516803952918881881", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131093146, + "acl": 1024, + "view": 1794629, + "repost": 10824, + "dynamic_id": 516417934145814823, + "timestamp": 1619076320, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "516417934145814823", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131093146" + } + }, + "card": "{ \"user\": { \"uid\": 1192711092, \"uname\": \"会发光的偶恰\", \"face\": \"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/b85a508793bd96deec61e2491d60e68f10378395.jpg\" }, \"item\": { \"rp_id\": 516803952918881881, \"uid\": 1192711092, \"content\": \"给我也整一个,我太爱了#漫画节#,#哔哩哔哩漫画#\", \"ctrl\": \"\", \"orig_dy_id\": 516417934145814823, \"pre_dy_id\": 516417934145814823, \"timestamp\": 1619166197, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\",\\\\\\\"length\\\\\\\":0,\\\\\\\"location\\\\\\\":0,\\\\\\\"type\\\\\\\":2}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽3位幸运小伙伴送【哔哩哔哩漫画商城 · 50元图书无门槛优惠券】~\\\\n【#漫画节# 买书礼】商城图书活动开启,23日0点抢新书秒杀,最高立减160元!\\\\n《罗小黑战记 兰溪镇2》《我是蜘蛛又怎样》等多款新书5元起!\\\\n更有8折立减券,来商城看看吧!\\\\n[羞羞] 活动指路:#哔哩哔哩漫画#APP - 我的 - 漫画商城\\\",\\\"id\\\":131093146,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":600,\\\"img_size\\\":251.2998046875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1103a166b95de39f9f05455fed2bcfce5edfacc6.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1200}],\\\"pictures_count\\\":1,\\\"reply\\\":857,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619076320},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":61227}\" }, \"origin_extend_json\": \"{\\\"\\\":{\\\"manga\\\":{\\\"manga_id\\\":26551}},\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"cc\\\":{\\\"vf\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":61227},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } }, \"activity_infos\": { \"details\": [ { \"type\": 1, \"detail\": \"{\\\"is_show\\\":1,\\\"topic_id\\\":877418,\\\"topic_link\\\":\\\"https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/blackboard\\\\\\/activity-7uSyvlCGRS.html\\\",\\\"topic_name\\\":\\\"漫画节\\\"}\" } ] } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 877418, + "topic_name": "漫画节", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 877418, + "topic_name": "漫画节", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[羞羞]", + "id": 2901, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[羞羞]", + "url": "https://i0.hdslb.com/bfs/emote/f4f9171e4d8c3f30827a8b96ea1ce1beb825ad50.png", + "meta": { + "size": 1 + }, + "mtime": 1606448649 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/e79378436e02fd7f227b901efb9fe79c2df9499c.jpg", + "cover_type": 2, + "title": "罗小黑战记·蓝溪镇", + "desc_first": "更新至068", + "desc_second": "搞笑,治愈,古风", + "jump_url": "https://manga.bilibili.com/m/detail/mc26551?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "26551" + }, + "tags": [ + { + "tag_type": 3, + "sub_type": 1, + "icon": "https://i0.hdslb.com/bfs/album/4c1880a3e9d5fd2c72b339929a73a4b83d2bab93.png", + "text": "漫画节", + "link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html?topic_from=topic-card&name=%E6%BC%AB%E7%94%BB%E8%8A%82", + "rid": 877418, + "sub_module": "topic" + } + ], + "add_on_card_info": [ + { + "add_on_card_show_type": 2, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/e79378436e02fd7f227b901efb9fe79c2df9499c.jpg", + "cover_type": 2, + "title": "罗小黑战记·蓝溪镇", + "desc_first": "更新至068", + "desc_second": "搞笑,治愈,古风", + "jump_url": "https://manga.bilibili.com/m/detail/mc26551?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "26551" + } + } + ], + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1365116, + "type": 1, + "rid": 516801496201774949, + "acl": 0, + "view": 185, + "repost": 0, + "comment": 0, + "like": 0, + "is_liked": 0, + "dynamic_id": 516801496202094777, + "timestamp": 1619165625, + "pre_dy_id": 516417934145814823, + "orig_dy_id": 516417934145814823, + "orig_type": 2, + "user_profile": { + "info": { + "uid": 1365116, + "uname": "濑户的海参", + "face": "https://i2.hdslb.com/bfs/face/8426c61be9c3ccd2296d080a54691c3bed5f2f9f.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": 5 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "516801496202094777", + "pre_dy_id_str": "516417934145814823", + "orig_dy_id_str": "516417934145814823", + "rid_str": "516801496201774949", + "origin": { + "uid": 326499679, + "type": 2, + "rid": 131093146, + "acl": 1024, + "view": 1794629, + "repost": 10824, + "dynamic_id": 516417934145814823, + "timestamp": 1619076320, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "516417934145814823", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131093146" + } + }, + "card": "{ \"user\": { \"uid\": 1365116, \"uname\": \"濑户的海参\", \"face\": \"https:\\/\\/i2.hdslb.com\\/bfs\\/face\\/8426c61be9c3ccd2296d080a54691c3bed5f2f9f.jpg\" }, \"item\": { \"rp_id\": 516801496201774949, \"uid\": 1365116, \"content\": \"嗯哼#漫画节#,#哔哩哔哩漫画#\", \"ctrl\": \"\", \"orig_dy_id\": 516417934145814823, \"pre_dy_id\": 516417934145814823, \"timestamp\": 1619165625, \"reply\": 0, \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"data\\\\\\\":\\\\\\\"5\\\\\\\",\\\\\\\"length\\\\\\\":0,\\\\\\\"location\\\\\\\":0,\\\\\\\"type\\\\\\\":2}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"​互动抽奖 【关+转】抽3位幸运小伙伴送【哔哩哔哩漫画商城 · 50元图书无门槛优惠券】~\\\\n【#漫画节# 买书礼】商城图书活动开启,23日0点抢新书秒杀,最高立减160元!\\\\n《罗小黑战记 兰溪镇2》《我是蜘蛛又怎样》等多款新书5元起!\\\\n更有8折立减券,来商城看看吧!\\\\n[羞羞] 活动指路:#哔哩哔哩漫画#APP - 我的 - 漫画商城\\\",\\\"id\\\":131093146,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":600,\\\"img_size\\\":251.2998046875,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/1103a166b95de39f9f05455fed2bcfce5edfacc6.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1200}],\\\"pictures_count\\\":1,\\\"reply\\\":857,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1619076320},\\\"user\\\":{\\\"head_url\\\":\\\"https:\\\\\\/\\\\\\/i1.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\\\",\\\"name\\\":\\\"哔哩哔哩漫画\\\",\\\"uid\\\":326499679,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1941033600000,\\\"label\\\":{\\\"label_theme\\\":\\\"ten_annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"十年大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":61227}\" }, \"origin_extend_json\": \"{\\\"\\\":{\\\"manga\\\":{\\\"manga_id\\\":26551}},\\\"ctrl\\\":[{\\\"data\\\":\\\"5\\\",\\\"length\\\":0,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"up_close_comment\\\":0,\\\"verify\\\":{\\\"cc\\\":{\\\"vf\\\":1}}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":61227},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 326499679, \"uname\": \"哔哩哔哩漫画\", \"face\": \"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\" }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩漫画官方账号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1941033600000, \"vipStatus\": 1, \"themeType\": 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\": \"https:\\/\\/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\": \"↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑\", \"level_info\": { \"current_level\": 6 } }, \"activity_infos\": { \"details\": [ { \"type\": 1, \"detail\": \"{\\\"is_show\\\":1,\\\"topic_id\\\":877418,\\\"topic_link\\\":\\\"https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/blackboard\\\\\\/activity-7uSyvlCGRS.html\\\",\\\"topic_name\\\":\\\"漫画节\\\"}\" } ] } }", + "extend_json": "{\"from\":{\"emoji_type\":1,\"from\":\"create.comment\",\"up_close_comment\":0},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 877418, + "topic_name": "漫画节", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "origin": { + "topic_info": { + "topic_details": [ + { + "topic_id": 877418, + "topic_name": "漫画节", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[羞羞]", + "id": 2901, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[羞羞]", + "url": "https://i0.hdslb.com/bfs/emote/f4f9171e4d8c3f30827a8b96ea1ce1beb825ad50.png", + "meta": { + "size": 1 + }, + "mtime": 1606448649 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/e79378436e02fd7f227b901efb9fe79c2df9499c.jpg", + "cover_type": 2, + "title": "罗小黑战记·蓝溪镇", + "desc_first": "更新至068", + "desc_second": "搞笑,治愈,古风", + "jump_url": "https://manga.bilibili.com/m/detail/mc26551?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "26551" + }, + "tags": [ + { + "tag_type": 3, + "sub_type": 1, + "icon": "https://i0.hdslb.com/bfs/album/4c1880a3e9d5fd2c72b339929a73a4b83d2bab93.png", + "text": "漫画节", + "link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html?topic_from=topic-card&name=%E6%BC%AB%E7%94%BB%E8%8A%82", + "rid": 877418, + "sub_module": "topic" + } + ], + "add_on_card_info": [ + { + "add_on_card_show_type": 2, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/e79378436e02fd7f227b901efb9fe79c2df9499c.jpg", + "cover_type": 2, + "title": "罗小黑战记·蓝溪镇", + "desc_first": "更新至068", + "desc_second": "搞笑,治愈,古风", + "jump_url": "https://manga.bilibili.com/m/detail/mc26551?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "26551" + } + } + ], + "show_tip": { + "del_tip": "要删除动态吗?" + } + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 1902548007, + "type": 2, + "rid": 131192629, + "view": 1537, + "repost": 0, + "comment": 1, + "like": 18, + "is_liked": 0, + "dynamic_id": 516737432462144044, + "timestamp": 1619150709, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 1902548007, + "uname": "BV社", + "face": "https://i0.hdslb.com/bfs/face/48f8e6afa688e37b9f1e3721a86bea8ce02688dc.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "BV社官方账号" + } + }, + "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": "Vomic,让你爱的漫画更动听", + "level_info": { + "current_level": 2 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "516737432462144044", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131192629" + }, + "card": "{\"item\":{\"at_control\":\"[{\\\"location\\\":111,\\\"type\\\":1,\\\"length\\\":8,\\\"data\\\":\\\"326499679\\\"},{\\\"location\\\":122,\\\"type\\\":1,\\\"length\\\":5,\\\"data\\\":\\\"1902548007\\\"},{\\\"location\\\":130,\\\"type\\\":1,\\\"length\\\":6,\\\"data\\\":\\\"1740792\\\"}]\",\"category\":\"daily\",\"description\":\"#哔哩哔哩漫画#独家,#神赐予我这种尴尬的超能力究竟有什么用?# #Vomic# 这粉色情侣套间是怎么回事?搞这么大排场!?2021年4月9日起每周五更新!更多精彩,小剧场,花絮,尽在哔哩哔哩漫画APP \\n \\n出品:@哔哩哔哩漫画\\n策划:@BV社\\n承制:@音熊联萌 \",\"id\":131192629,\"is_fav\":0,\"pictures\":[{\"img_height\":2400,\"img_size\":2546.9873046875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/b355832bc3bf9196f9a6e024504b99279e1463fa.jpg\",\"img_tags\":null,\"img_width\":2400}],\"pictures_count\":1,\"reply\":1,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619150709},\"user\":{\"head_url\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/48f8e6afa688e37b9f1e3721a86bea8ce02688dc.jpg\",\"name\":\"BV社\",\"uid\":1902548007,\"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}}}", + "extend_json": "{\"ctrl\":[{\"data\":\"326499679\",\"length\":8,\"location\":111,\"type\":1},{\"data\":\"1902548007\",\"length\":5,\"location\":122,\"type\":1},{\"data\":\"1740792\",\"length\":6,\"location\":130,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"asw\":{\"fl\":15,\"nv\":1},\"sw\":{\"fl\":15,\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 15321050, + "topic_name": "神赐予我这种尴尬的超能力究竟有什么用?", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3208432, + "topic_name": "Vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106426" + }, + { + "topic_id": 37542, + "topic_name": "VOMIC", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106283" + }, + { + "topic_id": 8972604, + "topic_name": "vomic", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/106766" + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 8, + "rid": 332648194, + "view": 2470218, + "repost": 11, + "like": 8329, + "is_liked": 0, + "dynamic_id": 516720707859405128, + "timestamp": 1619146815, + "orig_dy_id": 516720707860453704, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "516720707859405128", + "pre_dy_id_str": "0", + "orig_dy_id_str": "516720707860453704", + "rid_str": "332648194", + "origin": { + "uid": 628215255, + "type": 8, + "rid": 332648194, + "view": 4802, + "repost": 18, + "dynamic_id": 516720707860453704, + "timestamp": 1619146815, + "uid_type": 1, + "r_type": 1, + "status": 1, + "dynamic_id_str": "516720707860453704", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "332648194", + "bvid": "BV1eA411L7Ck" + }, + "bvid": "BV1eA411L7Ck" + }, + "card": "{\"aid\":332648194,\"attribute\":0,\"cid\":327661869,\"copyright\":1,\"ctime\":1619091334,\"desc\":\"漫画节之际,恰逢世界读书日,哔哩哔哩漫画联合欧漫达高,邀请到了法国驻上海总领事馆文化领事柯梅燕女士在线推荐漫画啦!\\n被称为“图像小说”的纯正法国漫画是什么样呢?让我们一起跟着柯梅燕女士的介绍看看这本《莫奈逐光者》,领略欧陆漫画艺术的独特魅力吧~\",\"dimension\":{\"height\":2160,\"rotate\":0,\"width\":3840},\"duration\":219,\"dynamic\":\"漫画节之际,恰逢世界读书日,法国驻上海总领事馆文化领事柯梅燕女士应哔哩哔哩漫画与@欧漫达高 邀请,来给大家推荐漫画啦!\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/332648194\\/?page=1&player_preload=null&player_width=3840&player_height=2160&player_rotate=0\",\"mission_id\":20024,\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/341a390cbae7efc021d3c492da56665f2a4944ee.jpg\",\"mid\":628215255,\"name\":\"faguowenhua\"},\"pic\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/archive\\/7de60703c311c2afae10fab44a18bd3fbb5b3a13.jpg\",\"player_info\":null,\"pubdate\":1619146812,\"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\\/BV1eA411L7Ck\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1eA411L7Ck\",\"stat\":{\"aid\":332648194,\"coin\":291,\"danmaku\":18,\"dislike\":0,\"favorite\":295,\"his_rank\":0,\"like\":8329,\"now_rank\":0,\"reply\":148,\"share\":95,\"view\":42929},\"state\":0,\"tid\":124,\"title\":\"大师的故事《莫奈逐光者》——来自法国文化领事的漫画推荐│哔哩哔哩漫画节\",\"tname\":\"社科人文\",\"videos\":1}", + "extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\",\"verify\":{}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "activity_infos": { + "details": [ + { + "type": 1, + "detail": "{\"is_show\":1,\"topic_id\":877418,\"topic_link\":\"https:\\/\\/www.bilibili.com\\/blackboard\\/activity-7uSyvlCGRS.html\",\"topic_name\":\"漫画节\"}" + } + ] + }, + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 19380831, + "topic_name": "2021读书日", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 1449371, + "topic_name": "法国漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 877418, + "topic_name": "漫画节", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html" + }, + { + "topic_id": 591844, + "topic_name": "莫奈", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 507003, + "topic_name": "欧漫", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "usr_action_txt": "与他人联合创作", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "tags": [ + { + "tag_type": 3, + "sub_type": 1, + "icon": "https://i0.hdslb.com/bfs/album/4c1880a3e9d5fd2c72b339929a73a4b83d2bab93.png", + "text": "漫画节", + "link": "https://www.bilibili.com/blackboard/activity-7uSyvlCGRS.html?topic_from=topic-card&name=%E6%BC%AB%E7%94%BB%E8%8A%82", + "rid": 877418, + "sub_module": "topic" + } + ], + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131140536, + "view": 2969785, + "repost": 11, + "comment": 55, + "like": 5077, + "is_liked": 0, + "dynamic_id": 516519647563103432, + "timestamp": 1619100002, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "516519647563103432", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131140536" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 作品推荐】《#蘑菇汤#》:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc29622\\n[霜叶-疑问]才刚转学离开了熟悉的朋友们,就被爸爸送的“生日礼物”震惊到!\\n[煌-震撼]在2次敲打礼物树后,雅丽瞬间往地下坠落?!魅力无穷的蘑菇族的故事现在开始! \",\"id\":131140536,\"is_fav\":0,\"pictures\":[{\"img_height\":960,\"img_size\":198.8623046875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/b9f8d6849478db32593ebd4b6b452b873c989fae.jpg\",\"img_tags\":null,\"img_width\":720},{\"img_height\":4532,\"img_size\":4342.27734375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/ce9803ca6c0e3424cebcfa42fc4d9a59e809f3d7.jpg\",\"img_tags\":null,\"img_width\":1280},{\"img_height\":2293,\"img_size\":298.7080078125,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/d52ce6a063eba9c8256458e85e776cd3c82b07f7.jpg\",\"img_tags\":null,\"img_width\":1280},{\"img_height\":4122,\"img_size\":2115.80859375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/7bd83bd470376334a3c5ce9266cb6f045cb72faa.jpg\",\"img_tags\":null,\"img_width\":1280},{\"img_height\":4149,\"img_size\":1425.8837890625,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/80aaba99dbc558287b89aa961329e15814ff85a2.jpg\",\"img_tags\":null,\"img_width\":1280},{\"img_height\":5019,\"img_size\":1546.1396484375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/3a86cdd61a701559935bf87bdd7a3f68f59cf5f6.jpg\",\"img_tags\":null,\"img_width\":1280}],\"pictures_count\":6,\"reply\":55,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619100002},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"\":{\"manga\":{\"manga_id\":29622}},\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"cc\":{\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 699, + "topic_name": "蘑菇汤", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[煌-震撼]", + "id": 3047, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[煌-震撼]", + "url": "https://i0.hdslb.com/bfs/emote/7bb39ac289bc97fe52af047020a9bf324ecdebe1.png", + "meta": { + "size": 1 + }, + "mtime": 1608785082 + }, + { + "emoji_name": "[霜叶-疑问]", + "id": 3048, + "package_id": 1, + "state": 0, + "type": 1, + "attr": 0, + "text": "[霜叶-疑问]", + "url": "https://i0.hdslb.com/bfs/emote/ada3aea8594e724511c1daad15fb3b23900d8e24.png", + "meta": { + "size": 1 + }, + "mtime": 1608785082 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/72bb5ca8058c0a5b19093136f09a77c2dca707cb.jpg", + "cover_type": 2, + "title": "蘑菇汤", + "desc_first": "更新至13", + "desc_second": "奇幻,日常,治愈", + "jump_url": "https://manga.bilibili.com/m/detail/mc29622?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "29622" + }, + "add_on_card_info": [ + { + "add_on_card_show_type": 2, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/72bb5ca8058c0a5b19093136f09a77c2dca707cb.jpg", + "cover_type": 2, + "title": "蘑菇汤", + "desc_first": "更新至13", + "desc_second": "奇幻,日常,治愈", + "jump_url": "https://manga.bilibili.com/m/detail/mc29622?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "29622" + } + } + ], + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 326499679, + "type": 2, + "rid": 131131421, + "acl": 0, + "view": 2620670, + "repost": 8, + "comment": 46, + "like": 4764, + "is_liked": 0, + "dynamic_id": 516504207153429574, + "timestamp": 1619096407, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "516504207153429574", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "131131421" + }, + "card": "{\"item\":{\"at_control\":\"\",\"category\":\"daily\",\"description\":\"【#哔哩哔哩漫画# 作品推荐】《#身体互换#》:https:\\/\\/manga.bilibili.com\\/m\\/detail\\/mc29621 \\n[热词系列_害]青梅竹马三人组,同是失恋沦落人,相逢在许愿池边时奇怪的事情发生了……\\n[热词系列_知识增加]什么?我和喜欢的女生互换了身体?!学霸、落落大方、机智果断的属性都出现在我自己的身上,突……突然感觉自己变帅了?\",\"id\":131131421,\"is_fav\":0,\"pictures\":[{\"img_height\":960,\"img_size\":537.4560546875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/0144a1a68b77eb293915fe8e63876a592c39a179.jpg\",\"img_tags\":null,\"img_width\":720},{\"img_height\":2687,\"img_size\":880.25,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/5c169c961e6abe6ed9e19a508d8ce742219fce48.jpg\",\"img_tags\":null,\"img_width\":1280},{\"img_height\":2329,\"img_size\":649.5859375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/20d28936c37fa2c62e9ef5bab0050d670a6074c7.jpg\",\"img_tags\":null,\"img_width\":1280},{\"img_height\":2236,\"img_size\":703.5146484375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/5ddea24d47abb40636d05b1cd07a759eb7fe7967.jpg\",\"img_tags\":null,\"img_width\":1280},{\"img_height\":3472,\"img_size\":714.130859375,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/d1c9aafd4317192c3815fb342aee64887cfd1a6e.jpg\",\"img_tags\":null,\"img_width\":2500},{\"img_height\":6321,\"img_size\":3838.9482421875,\"img_src\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/album\\/f16021df4379261ec1c118d7e2a3b7259e759671.jpg\",\"img_tags\":null,\"img_width\":2500}],\"pictures_count\":6,\"reply\":46,\"role\":[],\"settings\":{\"copy_forbidden\":\"0\"},\"source\":[],\"title\":\"\",\"upload_time\":1619096407},\"user\":{\"head_url\":\"https:\\/\\/i1.hdslb.com\\/bfs\\/face\\/2254162161a60b528cfec449f3450409a81ebc37.jpg\",\"name\":\"哔哩哔哩漫画\",\"uid\":326499679,\"vip\":{\"avatar_subscript\":1,\"due_date\":1941033600000,\"label\":{\"label_theme\":\"ten_annual_vip\",\"path\":\"\",\"text\":\"十年大会员\"},\"nickname_color\":\"#FB7299\",\"status\":1,\"theme_type\":0,\"type\":2,\"vip_pay_type\":0}}}", + "extend_json": "{\"\":{\"manga\":{\"manga_id\":29621}},\"from\":{\"emoji_type\":1,\"from\":\"timer.publish\",\"up_close_comment\":0,\"verify\":{\"cc\":{\"nv\":1}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 200686, + "topic_name": "身体互换", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/20573" + } + ] + }, + "emoji_info": { + "emoji_details": [ + { + "emoji_name": "[热词系列_害]", + "id": 1965, + "package_id": 53, + "state": 0, + "type": 1, + "attr": 2, + "text": "[热词系列_害]", + "url": "https://i0.hdslb.com/bfs/emote/cbe798a194612958537c5282fcca7c3bcd2aa15c.png", + "meta": { + "size": 2 + }, + "mtime": 1598525979 + }, + { + "emoji_name": "[热词系列_知识增加]", + "id": 1937, + "package_id": 53, + "state": 0, + "type": 1, + "attr": 2, + "text": "[热词系列_知识增加]", + "url": "https://i0.hdslb.com/bfs/emote/142409b595982b8210b2958f3d340f3b47942645.png", + "meta": { + "size": 2 + }, + "mtime": 1617293934 + } + ] + }, + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/2f7e4c1c1e6122c6488ce986d5785319fc329b89.jpg", + "cover_type": 2, + "title": "身体互换", + "desc_first": "更新至15", + "desc_second": "恋爱,校园,奇幻", + "jump_url": "https://manga.bilibili.com/m/detail/mc29621?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "29621" + }, + "add_on_card_info": [ + { + "add_on_card_show_type": 2, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/2f7e4c1c1e6122c6488ce986d5785319fc329b89.jpg", + "cover_type": 2, + "title": "身体互换", + "desc_first": "更新至15", + "desc_second": "恋爱,校园,奇幻", + "jump_url": "https://manga.bilibili.com/m/detail/mc29621?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "29621" + } + } + ], + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + } + } + }, + { + "desc": { + "uid": 398468825, + "type": 8, + "rid": 545184671, + "acl": 0, + "view": 393, + "repost": 0, + "like": 8, + "is_liked": 0, + "dynamic_id": 516478317094534470, + "timestamp": 1619090379, + "pre_dy_id": 0, + "orig_dy_id": 0, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 398468825, + "uname": "欧漫达高", + "face": "https://i2.hdslb.com/bfs/face/0ba24b18b461b80c5727b5dee9a66bb9e25c1f46.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": "经典欧洲绘本、漫画、动画集合地。Weibo:欧漫达高 WeChat:DargaudShanghai", + "level_info": { + "current_level": 2 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "516478317094534470", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "545184671", + "bvid": "BV1ki4y1A7Kb" + }, + "card": "{\"aid\":545184671,\"attribute\":0,\"cid\":327679459,\"copyright\":1,\"ctime\":1619090379,\"desc\":\"2151年,由于气候变化,世界人口缩减到了原来的十分之一,人类生活在脆弱的平衡之中。仅剩的7个城市区建立了新的社会生活模式。宇航员西蒙是名为“未来计划”的太空探险任务的一员,但这将是一场有去无回的旅行,承载着人类历史上前所未有的野心。在出发之前,西蒙带儿子尤里兜了最后一次风。开始了解世界的尤里能否明白母亲对完美、对冒险和对未知的渴求呢?\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":58,\"dynamic\":\"昨天的科幻欧漫预告片还没看过瘾?今天和另一部科幻漫的编剧一起规划未来吧!这位作者的日常向漫画《双面人生》中文版在#哔哩哔哩漫画#就能看哦~\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/545184671\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/face\\/0ba24b18b461b80c5727b5dee9a66bb9e25c1f46.jpg\",\"mid\":398468825,\"name\":\"欧漫达高\"},\"pic\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/archive\\/3411696f65b2bce0954f1dc66b1adc0a73de398a.jpg\",\"player_info\":null,\"pubdate\":1619090379,\"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\\/BV1ki4y1A7Kb\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1ki4y1A7Kb\",\"stat\":{\"aid\":545184671,\"coin\":4,\"danmaku\":0,\"dislike\":0,\"favorite\":1,\"his_rank\":0,\"like\":8,\"now_rank\":0,\"reply\":0,\"share\":1,\"view\":29},\"state\":0,\"tid\":27,\"title\":\"【欧漫作家访谈】《未来计划》(SOON)作者Thomas Cadène采访\",\"tname\":\"综合\",\"videos\":1}", + "extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\",\"verify\":{\"asw\":{\"fl\":15},\"sw\":{\"fl\":15}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 530918, + "topic_name": "动漫杂谈", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 444408, + "topic_name": "编剧", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 43646, + "topic_name": "生态", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 33730, + "topic_name": "法语", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 13619, + "topic_name": "欧美", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 9264, + "topic_name": "宇宙", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "usr_action_txt": "投稿了视频", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + }, + { + "desc": { + "uid": 326499679, + "type": 8, + "rid": 630241940, + "view": 2624796, + "repost": 5, + "like": 10051, + "is_liked": 0, + "dynamic_id": 516457881632645972, + "timestamp": 1619085621, + "orig_dy_id": 516457881633694548, + "orig_type": 0, + "user_profile": { + "info": { + "uid": 326499679, + "uname": "哔哩哔哩漫画", + "face": "https://i1.hdslb.com/bfs/face/2254162161a60b528cfec449f3450409a81ebc37.jpg" + }, + "card": { + "official_verify": { + "type": 1, + "desc": "哔哩哔哩漫画官方账号" + } + }, + "vip": { + "vipType": 2, + "vipDueDate": 1941033600000, + "vipStatus": 1, + "themeType": 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": "https://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": "↑ 【关注漫画姬】就送【漫读券5张】,当日或次日登录哔哩哔哩漫画APP即可领取,快来关注领券吧(°∀°)ノ ↑", + "level_info": { + "current_level": 6 + } + }, + "uid_type": 1, + "recommend_info": { + "is_attention": 0 + }, + "r_type": 1, + "topic_board": "C", + "topic_board_desc": "最新", + "status": 1, + "dynamic_id_str": "516457881632645972", + "pre_dy_id_str": "0", + "orig_dy_id_str": "516457881633694548", + "rid_str": "630241940", + "origin": { + "uid": 7435683, + "type": 8, + "rid": 630241940, + "acl": 0, + "view": 32239, + "repost": 13, + "like": 0, + "dynamic_id": 516457881633694548, + "timestamp": 1619085621, + "pre_dy_id": 0, + "orig_dy_id": 0, + "uid_type": 1, + "stype": 0, + "r_type": 1, + "inner_id": 0, + "status": 1, + "dynamic_id_str": "516457881633694548", + "pre_dy_id_str": "0", + "orig_dy_id_str": "0", + "rid_str": "630241940", + "bvid": "BV1b84y1F7qT" + }, + "bvid": "BV1b84y1F7qT" + }, + "card": "{\"aid\":630241940,\"attribute\":0,\"cid\":325729439,\"copyright\":1,\"ctime\":1618830035,\"desc\":\"BGM:No Rainbows In The Desert (Pluto Tapes),歌手名:Unlike Pluto\\n咒术回战单素材,帅就完事!求3连!\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":94,\"dynamic\":\"\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/630241940\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/a536ad1c4c66e17113cfb599fcbb97e03bcdae44.jpg\",\"mid\":7435683,\"name\":\"葉月Mashiro灬\"},\"pic\":\"https:\\/\\/i2.hdslb.com\\/bfs\\/archive\\/663b7f275b0f93356523880aa7e626803168df93.jpg\",\"player_info\":null,\"pubdate\":1619085619,\"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\\/BV1b84y1F7qT\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1b84y1F7qT\",\"stat\":{\"aid\":630241940,\"coin\":889,\"danmaku\":146,\"dislike\":0,\"favorite\":1167,\"his_rank\":0,\"like\":10051,\"now_rank\":0,\"reply\":95,\"share\":205,\"view\":61405},\"state\":0,\"tid\":24,\"title\":\"全员高能!这才是咒术回战!\",\"tname\":\"MAD·AMV\",\"videos\":1}", + "extend_json": "{\"\":{\"decoration\":{\"decoration_id\":0},\"game\":{\"game_id\":0},\"manga\":{\"manga_id\":26505},\"match\":{\"match_id\":0},\"official_activity\":{\"official_activity_id\":0},\"ogv\":{\"auto_bind\":0,\"ogv_id\":0},\"pgc\":0,\"pugv\":{\"pugv_id\":0},\"reserve\":{\"reserve_id\":0},\"ugc\":{\"ugc_id\":0}},\"bottom\":{},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\"},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}", + "display": { + "topic_info": { + "topic_details": [ + { + "topic_id": 391, + "topic_name": "AMV", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 281, + "topic_name": "MAD", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 7662089, + "topic_name": "五条悟", + "is_activity": 1, + "topic_link": "https://www.bilibili.com/blackboard/dynamic/66796" + }, + { + "topic_id": 7539944, + "topic_name": "哔哩哔哩漫画", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 6497596, + "topic_name": "咒术回战", + "is_activity": 0, + "topic_link": "" + }, + { + "topic_id": 3545, + "topic_name": "热血", + "is_activity": 0, + "topic_link": "" + } + ] + }, + "usr_action_txt": "与他人联合创作", + "relation": { + "status": 1, + "is_follow": 0, + "is_followed": 0 + }, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/ca4c24bd8bf896545811f401106c19588b80549d.png", + "cover_type": 2, + "title": "咒术回战", + "desc_first": "更新至146", + "desc_second": "冒险,热血,奇幻", + "jump_url": "https://manga.bilibili.com/m/detail/mc26505?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "26505" + }, + "add_on_card_info": [ + { + "add_on_card_show_type": 2, + "attach_card": { + "type": "manga", + "head_text": "相关漫画作品", + "cover_url": "https://i0.hdslb.com/bfs/manga-static/ca4c24bd8bf896545811f401106c19588b80549d.png", + "cover_type": 2, + "title": "咒术回战", + "desc_first": "更新至146", + "desc_second": "冒险,热血,奇幻", + "jump_url": "https://manga.bilibili.com/m/detail/mc26505?from=sub_card", + "button": { + "type": 2, + "uncheck": { + "icon": "https://i0.hdslb.com/bfs/bangumi/154b6898d2b2c20c21ccef9e41fcf809b518ebb4.png", + "text": "追漫" + }, + "check": { + "icon": "", + "text": "已追漫" + }, + "status": 1 + }, + "oid_str": "26505" + } + } + ], + "up_act_button": { + "report_title": "举报", + "founder_report_title": "举报(发起人)", + "top_title": "置顶", + "top_confirm_title": "确定将此动态置顶吗", + "top_cancel_title": "确定将此动态取消置顶吗" + }, + "show_tip": { + "del_tip": "要删除动态吗?" + }, + "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png" + } + } + ], + "offset": "516457881632645972", + "_gt_": 0 + } +} +``` +
\ No newline at end of file diff --git a/docs/electric/Bcoin.md b/docs/electric/Bcoin.md new file mode 100644 index 0000000..42c1973 --- /dev/null +++ b/docs/electric/Bcoin.md @@ -0,0 +1,331 @@ +# B币方式充电 + + + +**注:以前充电是电池的概念,1B币折合10电池,一般地充电10电池可获得1经验** + +**目前(2020/12/02后)则是贝壳的概念,1B币折合1贝壳、1经验(如果存在小数点,则经验值向下取整,即2.5B币获得2经验)** + +--- + +- [B币方式充电](#b币方式充电) + - [新版本B币充电](#新版本b币充电) + - [老版本B币充电](#老版本b币充电) + +--- + +## 新版本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:空间充电
archive:视频充电 | +| oid | num | 充电来源代码 | 必要 | 空间充电:充电对象用户mid
视频充电:稿件avid | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功(并不代表充电成功)
-101:账号未登录
-111:csrf校验失败
-400:请求错误 | +| 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:成功
-2:低于20电池下限
-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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "mid":293793435, + "up_mid":293793435, + "order_no":"BPRG5CEC3VUPOOANA540", + "bp_num":2, + "exp":"2", + "status":4, + "msg":"" + } +} +``` + +
+ +当所充电贝壳数小于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' +``` + +
+查看响应示例: + +```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" + } +} +``` + +
+ +当所充贝壳数折合的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' +``` + +
+查看响应示例: + +```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 币余额不足" + } +} +``` + +
+ + +## 老版本B币充电 + +老版本目前已过期,调用接口成功后(code返回0),data.status会返回0,且B币不会消耗,贝壳也不会增加。以下是历史信息: + +
+查看折叠内容 + +> 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:空间充电
archive:视频充电 | +| oid | num | 充电来源代码 | 必要 | 空间充电:充电对象用户mid
视频充电:稿件avid | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功(并不代表充电成功)
-101:账号未登录
-111:csrf校验失败
-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:成功
-2:低于20电池下限
-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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "mid":293793435, + "up_mid":293793435, + "order_no":"BPRG5CEC3VUPOOANA540", + "elec_num":20, + "exp":2, + "status":4, + "msg":"" + } +} +``` + +
+ +当所充电池数小于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' +``` + +
+查看响应示例: + +```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" + } +} +``` + +
+ +当所充电池数折合的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' +``` + +
+查看响应示例: + +```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 币余额不足" + } +} +``` + +
+
diff --git a/docs/electric/WeChat&Alipay.md b/docs/electric/WeChat&Alipay.md new file mode 100644 index 0000000..609864a --- /dev/null +++ b/docs/electric/WeChat&Alipay.md @@ -0,0 +1,207 @@ +# 微信&支付宝方式充电 + + + +- [申请充电二维码及扫码秘钥](#申请充电二维码及扫码秘钥) + +- [检查扫码支付结果](#检查扫码支付结果) + +--- + +操作流程: + +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之间 | +| up_mid | num | 充电对象用户mid | 必要 | | +| is_bp_remains_prior | bool | 是否优先扣除B币 | 必要 | true:是
false:否
在B币不足时剩余的部分利用支付平台支付 | +| otype | str | 充电来源 | 必要 | up:空间充电
archive:视频充电 | +| oid | num | 充电来源代码 | 必要 | 空间充电:充电对象用户mid
视频充电:稿件avid | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "qr_code_url": "http://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/gateway?mid=293793435&token=c1cb1d95d2194ba58df6bb0f24ae1aaa", + "qr_token": "c1cb1d95d2194ba58df6bb0f24ae1aaa", + "exp": 1 + } +} +``` + +
+ +## 检查扫码支付结果 + +> https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | ---- | +| qr_token | str | 扫码秘钥 | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ----------- | ------------------------------------------------------------ | +| qr_token | str | 扫码秘钥 | | +| order_no | str | 留言token | 未成功则无此项
用于添加充电留言 | +| mid | num | 当前用户mid | | +| status | num | 状态值 | 若秘钥错误则无此项
1:已支付
2:未扫描
3:未确认 | + +**示例:** + +当申请到的支付二维码未被扫描时,`data`.`ststus`的值为`2` + +```shell +curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \ +--data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "qr_token":"c7cbdc47fc424cd18f2146db653597b8", + "mid":293793435, + "status":2 + } +} +``` + +
+ +当申请到的支付二维码已扫描但未确认时,`data`.`ststus`的值为`3` + +```shell +curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \ +--data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "qr_token":"c7cbdc47fc424cd18f2146db653597b8", + "mid":293793435, + "status":3 + } +} +``` + +
+ +成功支付后,`data`.`ststus`的值为`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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "qr_token":"bd649c836c524550bfe22a369334fc05", + "order_no":"BPTD36U3KP82I31RSSLG", + "mid":293793435, + "status":1 + } +} +``` + +
diff --git a/docs/electric/charge_list.md b/docs/electric/charge_list.md new file mode 100644 index 0000000..dd46641 --- /dev/null +++ b/docs/electric/charge_list.md @@ -0,0 +1,530 @@ +# 充电列表 + +- [获取空间充电公示列表](#获取空间充电公示列表) +- [获取视频充电鸣谢名单](#获取视频充电鸣谢名单) +- [查询我收到的充电列表](#查询我收到的充电列表) +- [查询历史充电数据](#查询历史充电数据) + +--- + +## 获取空间充电公示列表 + +> https://elec.bilibili.com/api/query.rank.do + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
500011:mid错误 | +| msg | str | 错误信息 | 正确时无此项 | +| data | obj | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ------ | ---------------- | ------------ | +| display_num | num | 0 | 作用尚不明确 | +| count | num | 本月充电人数 | | +| total_count | num | 总计充电人数 | | +| list | array | 本月充电用户列表 | | +| user | null | | 作用尚不明确 | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------- | +| 0 | obj | 充电用户1 | | +| n | obj | 充电用户(n+1) | 按照充电排名排列 | +| …… | obj | …… | …… | +| 29 | obj | 充电用户30 | 最后一项 | + +`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:无
1:月会员
2:年会员 | +| vipDueMsec | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | + +**示例:** + +查询用户`mid=53456`的充电公示列表 + +```shell +curl -G 'https://elec.bilibili.com/api/query.rank.do' \ +--data-urlencode 'mid=53456' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "data": { + "display_num": 0, + "count": 226, + "total_count": 11528, + "list": [ + { + "mid": 53456, + "pay_mid": 346545025, + "rank": 1, + "uname": "还有什么名字没人用", + "avatar": "http://i1.hdslb.com/bfs/face/76d4b1ecd13e992a6c7303d77bf716dd922ab234.jpg", + "message": "早日康复,五月快乐", + "msg_deleted": 0, + "vip_info": { + "vipType": 2, + "vipDueMsec": 0, + "vipStatus": 1 + }, + "trend_type": 0 + }, + { + "mid": 53456, + "pay_mid": 8826056, + "rank": 2, + "uname": "煋痕", + "avatar": "http://i2.hdslb.com/bfs/face/35b7c752d0eb1bb7a924804f240b9bfd9199625f.jpg", + "message": "", + "msg_deleted": 0, + "vip_info": { + "vipType": 2, + "vipDueMsec": 0, + "vipStatus": 1 + }, + "trend_type": 0 + }, + { + "mid": 53456, + "pay_mid": 356668487, + "rank": 3, + "uname": "舞象祥", + "avatar": "http://i1.hdslb.com/bfs/face/574f6203ef5bd0d56b95ded6a2736676d9cc5307.jpg", + "message": "warma hayo", + "msg_deleted": 0, + "vip_info": { + "vipType": 1, + "vipDueMsec": 0, + "vipStatus": 1 + }, + "trend_type": 0 + }, + ………… + ], + "user": null + } +} +``` + +
+ +## 获取视频充电鸣谢名单 + +> 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:成功
-400:请求错误
-404:无视频
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 | 作用尚不明确 | +| list | array | 本月充电用户列表 | | + +`data`中的`show_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------------------ | ----------------------------- | +| show | bool | 是否展示视频充电鸣谢名单 | false:不展示
true:展示 | +| state | num | 0 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------- | +| 0 | obj | 充电用户1 | | +| n | obj | 充电用户(n+1) | 按照充电排名排列 | +| …… | obj | …… | …… | +| 29 | obj | 充电用户30 | 最后一项 | + +`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:无
1:月会员
2:年会员 | +| vipDueMsec | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
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 ' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "show_info": { + "show": true, + "state": 0 + }, + "av_count": 0, + "count": 0, + "total_count": 19422, + "special_day": 0, + "display_num": 0, + "list": [ + { + "mid": 53456, + "pay_mid": 1216085164, + "rank": 1, + "uname": "JZ72", + "avatar": "http://i1.hdslb.com/bfs/face/3d741682fafc286999b5e8089a844ae4f46651fe.jpg", + "message": "Warma YYDS ", + "msg_deleted": 0, + "vip_info": { + "vipType": 2, + "vipDueMsec": 0, + "vipStatus": 1 + }, + "trend_type": 0 + }, + { + "mid": 53456, + "pay_mid": 305858373, + "rank": 2, + "uname": "适应性神经系统", + "avatar": "http://i0.hdslb.com/bfs/face/2ad38dec879f66c32b5e5cb1750cb3f3e446bf91.jpg", + "message": "", + "msg_deleted": 0, + "vip_info": { + "vipType": 1, + "vipDueMsec": 0, + "vipStatus": 0 + }, + "trend_type": 0 + }, + ...... + ] + } +} +``` + +
+ +## 查询我收到的充电列表 + +> 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:成功
800501007:user not login
800501008:内部错误
800501011:请求参数有误| +| errno | num | | | +| msg | str | | | +| showMsg | str | | | +| success | bool | | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| page | obj | 分页信息 | | +| result | array | 充电信息本体 | | +| config | array | (?) | | + +`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| currentPage | num | 当前页数 | | +| pageSize | num | 当前分页大小 | | +| totalCount | num | 记录总数 | | +| totalPage | num | 总页数 | | + +`config`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| mid | num | | 总是为null | +| name | str | | 总是为null | +| avatar | str | | 总是为null | +| originalThirdCoin | num | | 总是为null | +| brokerage | num | | 总是为null | +| remark | str | | 总是为null | +| ctime | str | | 总是为null | + +`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 | + +**示例:** + +```shell +curl -L -X GET 'https://pay.bilibili.com/bk/brokerage/listForCustomerRechargeRecord?currentPage=1&pageSize=2&customerId=10026' \ +-H 'Cookie: SESSDATA=xxx' +``` + +
+查看响应示例: + +```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 +} +``` + +
+ +## 查询历史充电数据 + +> 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 -L -X GET 'https://member.bilibili.com/x/h5/elec/rank/recent' \ +-H 'Cookie: SESSDATA=xxx' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
diff --git a/docs/electric/charge_msg.md b/docs/electric/charge_msg.md new file mode 100644 index 0000000..10805ab --- /dev/null +++ b/docs/electric/charge_msg.md @@ -0,0 +1,303 @@ +# 充电留言 + +- [发送充电留言](#发送充电留言) +- [查询我收到的充电留言](#查询我收到的充电留言) +- [查询充电留言详情](#查询充电留言详情) +- [回复充电留言](#回复充电留言) + +--- + +## 发送充电留言 + +> 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:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1 +} +``` + +
+ +## 查询我收到的充电留言 + +> 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:成功
-101:账号未登录| +| msg | str | 0 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| page | obj | 分页信息 | | +| list | array | 信息本体 | | + +`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| current | num | 当前页数 | | +| size | num | 当前分页大小 | | +| total | num | 记录总数 | | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| aid | num | | | +| bvid | str | | | +| id | num | 留言记录id | | +| mid | num | | | +| reply_mid | num | 0| | +| elec_num | num | 0 | | +| state | num | UP是否已经回复这条留言 | 0:未回复
1:已回复 | +| msg | str | 留言信息 | | +| aname | str | 空 | | +| uname | str |空 | | +| avator | str | 空 | | +| reply_name | str | 空 | | +| reply_avator | str | 空 | | +| reply_msg | str | 空 | | +| ctime | num | 留言时间 | 毫秒级时间戳 | +| reply_time | num | 0 | | + +**示例:** + +```shell +curl -L -X GET 'https://member.bilibili.com/x/web/elec/remark/list?begin=2016-01-01&end=2050-01-01&pn=1&ps=10' \ +-H 'Cookie: SESSDATA=xxx;' +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ +## 查询充电留言详情 + +> https://member.bilibili.com/x/web/elec/remark/detail?id=6662619 + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | -------------------------------- | +| id | num | 留言id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误| +| message | str | 0 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ----- | ------ | ---- | +| aid | num | | | +| bvid | str | | | +| id | num | 留言id | | +| mid | num | 留言者uid(充电用户) | | +| reply_mid | num | UP主uid | | +| elec_num | num | 0 | | +| state | num | UP是否已经回复这条留言 | 0:未回复
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 -L -X GET 'https://member.bilibili.com/x/web/elec/remark/detail?id=6507563' \ +-H 'cookie: SESSDATA=xxx' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 回复充电留言 + +> 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:成功
-101:账号未登录
-111:csrf 校验失败
-400:请求错误20004:充电服务异常
| +| message | str | 错误信息 | | +| ttl | num | 1 | | + +**示例:** + +```shell +curl -L -X POST 'https://member.bilibili.com/x/web/elec/remark/reply' \ +-H 'cookie: SESSDATA=xxx' \ +-H 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'csrf=xxx' \ +--data-urlencode 'id=6258929' \ +--data-urlencode 'msg=( ̄3 ̄)' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": 1 +} +``` + +
\ No newline at end of file diff --git a/docs/emoji/action.md b/docs/emoji/action.md new file mode 100644 index 0000000..315aed6 --- /dev/null +++ b/docs/emoji/action.md @@ -0,0 +1,110 @@ +# 表情操作 + +- [添加表情包](#添加表情包) +- [移除表情包](#移除表情包) + +--- + +## 添加表情包 + +> https://api.bilibili.com/x/emote/package/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +只能添加有会员权限或已购买的表情包 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | -------------------------------- | +| package_id | num | 表情包id | 必要 | | +| business | str | 使用场景 | 必要 | reply:评论区
dynamic:动态 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 移除表情包 + +> https://api.bilibili.com/x/emote/package/remove + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------------------ | ------ | -------------------------------- | +| package_id | num | 表情包id | 必要 | | +| business | str | 使用场景 | 必要 | reply:评论区
dynamic:动态 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
diff --git a/docs/emoji/list.md b/docs/emoji/list.md new file mode 100644 index 0000000..e3bd468 --- /dev/null +++ b/docs/emoji/list.md @@ -0,0 +1,646 @@ +# 表情列表 + +- [获取我的表情列表](#获取我的表情列表) +- [取指定的表情包明细](#取指定的表情包明细) +- [获取所有表情包列表](#获取所有表情包列表) +- [附表-表情包对象](#附表-表情包对象) + +--- + +## 获取我的表情列表 + +> https://api.bilibili.com/x/emote/user/panel/web + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +使用登录(Cookie)进行会员专属及已购买表情包的分发,否则全为免费表情包 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | -------------------------------- | +| business | str | 使用场景 | 必要 | reply:评论区
dynamic:动态 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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": {} + }, + ………… + }, + ………… + ] + } +} +``` + +
+ +## 获取指定的表情包明细 + +> https://api.bilibili.com/x/emote/package + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | -------------------------------- | +| business | str | 使用场景 | 必要 | reply:评论区
dynamic:动态 | +| ids | nums | 表情包id | 必要 | id之间以`,`隔开 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:obj
无效时: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' +``` + +
+查看响应示例: + +```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 + } + } + ] + } +} +``` + +
+ +## 获取所有表情包列表 + +> https://api.bilibili.com/x/emote/setting/panel + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | -------------------------------- | +| business | str | 使用场景 | 必要 | reply:评论区
dynamic:动态 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-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:普通
2:会员专属
3:购买所得
4:颜文字 | +| attr | num | ??? | **作用尚不明确** | +| meta | obj | 属性信息 | | +| emote | array | 表情列表 | | +| flags | obj | 是否添加标志 | | + +`表情包对象`中的`flags`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ------------------------------------------------------------ | +| added | bool | 是否已添加 | true:已添加
false:未添加
需要登录(SESSDATA)
否则恒为false | + +`表情包对象`中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | --------------- | ---------------- | +| size | num | 表情尺寸信息 | 1:小
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:普通
2:会员专属
3:购买所得
4:颜文字 | +| attr | num | ??? | **作用尚不明确** | +| meta | obj | 属性信息 | | +| flags | obj | 禁用标志 | 无则为空 | + +`emote`数组中的对象中的`flags`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---- | ---------- | ------------------------------------------------------ | +| no_access | bool | 是否为禁用 | true:禁用
需要登录(SESSDATA)
否则恒为true | + +`emote`数组中的对象中的`meta`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | ---------------- | +| size | num | 表情尺寸信息 | 1:小
2:大 | +| alias | str | 简写名 | 无则无此项 | diff --git a/docs/fav/action.md b/docs/fav/action.md new file mode 100644 index 0000000..b554be8 --- /dev/null +++ b/docs/fav/action.md @@ -0,0 +1,482 @@ +# 收藏夹操作 + +- [管理收藏夹](#管理收藏夹) + - [新建收藏夹](#新建收藏夹) + - [修改收藏夹](#修改收藏夹) + - [删除收藏夹](#删除收藏夹) +- [管理收藏内容](#管理收藏内容) + - [批量复制内容](#批量复制内容) + - [清空所有失效内容](#清空所有失效内容) + +--- + +## 管理收藏夹 + +### 新建收藏夹 + +> https://api.bilibili.com/x/v3/fav/folder/add + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | -------------- | ------------------------------------ | +| title | str | 收藏夹标题 | 必要 | | +| intro | str | 收藏夹简介 | 非必要 | 默认为空 | +| privacy | num | 是否公开 | 非必要 | 默认为公开
0:公开
1:私密 | +| cover | str | 封面图url | 非必要 | 封面会被审核 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +### 修改收藏夹 + +> 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 | 是否公开 | 非必要 | 默认为公开

0:公开
1:私密 | +| cover | str | 封面图url | 非必要 | 封面会被审核 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------- | +| code | num | 返回值 | 0:成功
-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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +### 删除收藏夹 + +> 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' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +
+ +## 管理收藏内容 + +### 批量复制内容 + +> 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}:{内容类型}
每个成员间用`,`分隔
类型:
2:视频稿件
12:音频
21:视频合集
内容id:
视频稿件:视频稿件avid
音频:音频auid
视频合集:视频合集id | +| platform | str | 平台标识 | 非必要 | 可为web | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
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' +``` + +
+查看响应示例: + + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +
+ +### 批量移动内容 + +> 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}:{内容类型}
每个成员间用`,`分隔
类型:
2:视频稿件
12:音频
21:视频合集
内容id:
视频稿件:视频稿件avid
音频:音频auid
视频合集:视频合集id | +| platform | str | 平台标识 | 非必要 | 可为web | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
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' +``` + +
+查看响应示例: + + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +
+ +### 批量删除内容 + +> https://api.bilibili.com/x/v3/fav/resource/batch-del + +*请求方式:POST* + +认证方式:APP或Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | -------------- | ------------------------ | ------------------------------------------------------------ | ------- | +| resources | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型}
每个成员间用`,`分隔
类型:
2:视频稿件
12:音频
21:视频合集
内容id:
视频稿件:视频稿件avid
音频:音频auid
视频合集:视频合集id | | +| media_id | num | 目标收藏夹id | 必要 | | +| platform | str | 平台标识 | 非必要 | 可为web | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
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' +``` + +
+查看响应示例: + + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +
+ +### 清空所有失效内容 + +> 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' +``` + +
+查看响应示例: + + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":0 +} +``` + +
diff --git a/docs/fav/info.md b/docs/fav/info.md new file mode 100644 index 0000000..60979fd --- /dev/null +++ b/docs/fav/info.md @@ -0,0 +1,415 @@ +# 收藏夹基本信息 + +- [获取收藏夹元数据](#获取收藏夹元数据) +- [获取指定用户创建的所有收藏夹信息](#获取指定用户创建的所有收藏夹信息) +- [批量获取指定收藏id的内容](#批量获取指定收藏id的内容) + +--- + +## 获取收藏夹元数据 + +> https://api.bilibili.com/x/v3/fav/folder/info + +*请求方式:GET* + +认证方式:Cookie或APP + +**注:查询权限收藏夹时需要相应用户登录** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------------- | ------ | ---- | +| media_id | num | 目标收藏夹id(完整id) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:obj
无效或: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
未收藏收藏夹:0
需要登录 | +| like_state | num | 点赞状态 | 已点赞:1
未点赞:0
需要登录 | +| media_count | num | 收藏夹内容数量 | | + + +`info`中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------- | ----------------------------------------------- | +| mid | num | 创建者mid | | +| name | str | 创建者昵称 | | +| face | str | 创建者头像url | | +| followed | bool | 是否已关注创建者 | | +| vip_type | num | 会员类别 | 0:无
1:月大会员
2:年度及以上大会员 | +| vip_statue | num | 会员开通状态 | 0:无
1:有 | + +`info`中的`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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 获取指定用户创建的所有收藏夹信息 + +> https://api.bilibili.com/x/v3/fav/folder/created/list-all + +*请求方式:GET* + +认证方式:Cookie或APP + +**注:查询权限收藏夹时需要相应用户登录** + +该接口也能查询目标内容id存在于那些收藏夹中 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | ---------------------------------------- | +| up_mid | num | 目标用户mid | 必要 | | +| type | num | 目标内容属性 | 非必要 | 默认为全部
0:全部
2:视频稿件 | +| rid | num | 目标内容id | 非必要 | 视频稿件:视频稿件avid | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:obj
无效或:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ---------------- | ---- | +| count | num | 创建的收藏夹总数 | | +| list | array | 创建的收藏夹列表 | | +| season | null | (?) | | + +`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 收藏夹1 | | +| n | obj | 收藏夹(n+1) | | +| ... | obj | ... | | + +`medias`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------------------ | ------------------------------------------ | +| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 | +| fid | num | 收藏夹原始id | | +| mid | num | 创建者mid | | +| attr | num | 属性位(?) | | +| title | str | 收藏夹标题 | | +| fav_state | num | 目标id是否存在于该收藏夹 | 存在于该收藏夹:1
不存在于该收藏夹:0 | +| media_count | num | 收藏夹内容数量 | | + +**示例:** + +查询用户`mid=509372`的所有创建收藏夹列表 + +```shell +curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \ +--data-urlencode 'up_mid=509372' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 2, + "list": [ + { + "id": 939227072, + "fid": 9392270, + "mid": 509372, + "attr": 54, + "title": "学习", + "fav_state": 0, + "media_count": 22 + }, + { + "id": 75020272, + "fid": 750202, + "mid": 509372, + "attr": 22, + "title": "MAD/AMV", + "fav_state": 0, + "media_count": 16 + } + ], + "season": null + } +} +``` + +
+ +## 批量获取指定收藏id的内容 + +> https://api.bilibili.com/x/v3/fav/resource/infos + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | -------------- | ------ | ------------------------------------------------------------ | +| resources | strs | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型}
每个成员间用`,`分隔
类型:
2:视频稿件
12:音频
21:视频合集
内容id:
视频稿件:视频稿件avid
音频:音频auid
视频合集:视频合集id | +| platform | str | 平台标识 | 非必要 | 可为web(影响内容列表类型) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------------------------------- | ------------ | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:array
无效或:null | 内容信息列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 内容信息1 | | +| n | obj | 内容信息(n+1) | | +| ... | obj | ... | | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ------------- | ------------------------------------------------------------ | +| id | num | 内容id | 视频稿件:视频稿件avid
音频:音频auid
视频合集:视频合集id | +| type | num | 内容类型 | 2:视频稿件
12:音频
21:视频合集 | +| title | str | 标题 | | +| cover | str | 封面url | | +| intro | str | 简介 | | +| page | num | 视频分P数 | | +| duration | num | 音频/视频时长 | | +| upper | obj | UP主信息 | | +| attr | num | 属性 | 0:正常
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-视频合集-`523` + +3-音频-`au15664` + +```shell +curl -G 'https://api.bilibili.com/x/v3/fav/resource/infos' \ +--data-urlencode 'resources=583785685:2,523:21,15664:12' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
\ No newline at end of file diff --git a/docs/fav/list.md b/docs/fav/list.md new file mode 100644 index 0000000..86eb8e5 --- /dev/null +++ b/docs/fav/list.md @@ -0,0 +1,570 @@ +# 收藏夹内容 + +- [获取收藏夹内容明细列表](#获取收藏夹内容明细列表) +- [获取收藏夹全部内容id](#获取收藏夹全部内容id) + +--- + +## 获取收藏夹内容明细列表 + +> https://api.bilibili.com/x/v3/fav/resource/list + +*请求方式:GET* + +认证方式:Cookie或APP + +**注:查询权限收藏夹时需要相应用户登录** + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| media_id | num | 目标收藏夹mlid(完整id) | 必要 | | +| tid | num | 分区tid | 非必要 | 默认为全部分区
0:全部分区
[详见说明](../video/video_zone.md) | +| keyword | str | 搜索关键字 | 非必要 | | +| order | str | 排序方式 | 非必要 | 按收藏时间:mtime
按播放量: view
按投稿时间:pubtime | +| type | num | 查询范围 | 非必要 | 0:当前收藏夹(对应media_id)
1:全部收藏夹 | +| ps | num | 每页数量 | 必要 | 定义域:1-20 | +| pn | num | 页码 | 非必要 | 默认为1 | +| platform | str | 平台标识 | 非必要 | 可为web(影响内容列表类型) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:obj
无效或:null | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ----- | ------------ | ---- | +| info | obj | 收藏夹元数据 | | +| medias | array | 收藏夹内容 | | + +`data`中的`info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------------- | -------------------------------------------------- | +| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 | +| fid | num | 收藏夹原始id | | +| mid | num | 创建者mid | | +| attr | num | 属性 | 0:正常
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
未收藏收藏夹:0
需要登录 | +| like_state | num | 点赞状态 | 已点赞:1
未点赞:0
需要登录 | +| media_count | num | 收藏夹内容数量 | | + + +`info`中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---------------- | ----------------------------------------------- | +| mid | num | 创建者mid | | +| name | str | 创建者昵称 | | +| face | str | 创建者头像url | | +| followed | bool | 是否已关注创建者 | | +| vip_type | num | 会员类别 | 0:无
1:月大会员
2:年度及以上大会员 | +| vip_statue | num | 会员开通状态 | 0:无
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
音频:音频auid
视频合集:视频合集id | +| type | num | 内容类型 | 2:视频稿件
12:音频
21:视频合集 | +| title | str | 标题 | | +| cover | str | 封面url | | +| intro | str | 简介 | | +| page | num | 视频分P数 | | +| duration | num | 音频/视频时长 | | +| upper | obj | UP主信息 | | +| attr | num | 属性位(?) | | +| 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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 获取收藏夹全部内容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:成功
-400:请求错误
-403:访问权限不足 | +| message | str | 错误信息 | 默认为0 | +| data | 有效时:array
无效或:null | 内容id列表 | | + +`data`中的`medias`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ---- | +| 0 | obj | 收藏内容id1 | | +| n | obj | 收藏内容id(n+1) | | +| ... | obj | ... | | + +`medias`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ------------ | ------------------------------------------------------------ | +| id | num | 内容id | 视频稿件:视频稿件avid
音频:音频auid
视频合集:视频合集id | +| type | num | 内容类型 | 2:视频稿件
12:音频
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' +``` + +
+查看响应示例: + +```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" + } + ] +} +``` + +
diff --git a/docs/garb/color.md b/docs/garb/color.md new file mode 100644 index 0000000..3ec7e07 --- /dev/null +++ b/docs/garb/color.md @@ -0,0 +1,316 @@ +# 主题色 + +- [获取主题色基本信息1](#获取主题色基本信息1) +- [获取主题色基本信息2](#获取主题色基本信息2) + +--- + +## 获取主题色基本信息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:成功
-3:API校验密匙错误
-400:请求错误 | +| data | array | 主题颜色列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | obj | 主题颜色1 | | +| n | obj | 主题颜色(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------------ | ------------------------------- | +| id | num | 颜色id | | +| name | str | 颜色名称 | | +| is_free | bool | 是否免费 | false:收费
true:免费 | +| price | num | 价格 | 单位为硬币 | +| is_bought | bool | 是否已购买 | false:未购买
true:已购买 | +| status | num | 状态 | 1:自动续费
4:已退订 | +| buy_time | num | 购买时间 | 毫秒时间戳 | +| due_time | num | 到期时间 | 毫秒时间戳 | +| color_name | str | 颜色类型名称 | | +| is_overdue | bool | 是否已到期 | false:未到期
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' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
+ +## 获取主题色基本信息2 + +> https://api.bilibili.com/x/garb/skin/color/list + +*请求方式:GET* + +认证方式:仅可Cookie + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | ------------- | +| mobi_app | str | 平台标识 | 非必要 | 可为`android` | +| build | num | 版本 | 非必要 | 可为`6082000` | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | ------------ | ---------------------------------------------------- | +| code | num | 返回值 | 0:成功
-3:API校验密匙错误
-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:收费
true:免费 | +| price | num | 价格 | 单位为硬币 | +| is_bought | bool | 是否已购买 | false:未购买
true:已购买 | +| status | num | 状态 | 1:自动续费
4:已退订 | +| buy_time | num | 购买时间 | 毫秒时间戳 | +| due_time | num | 到期时间 | 毫秒时间戳 | +| color_name | str | 颜色类型名称 | | +| is_overdue | bool | 是否已到期 | false:未到期
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' +``` + +
+查看响应示例: + +```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 + } + ] +} +``` + +
\ No newline at end of file diff --git a/docs/garb/skin.md b/docs/garb/skin.md new file mode 100644 index 0000000..51186ee --- /dev/null +++ b/docs/garb/skin.md @@ -0,0 +1,272 @@ +# 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:成功
-3:API校验密匙错误
-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:亮色
dark:暗色 | +| color | str | 前景色? | 必要 | 颜色
1. 使用十六进制颜色值
2. 颜色值的大小写不限,下同
3. 例:#ffffff | +| color_second_page | str | 背景色? | 必要 | 颜色 | +| tail_color | str | 底边栏颜色 | 必要 | 颜色 | +| tail_color_selected | str | 底边栏颜色(选择时) | 必要 | 颜色 | +| tail_icon_ani | bool | 有无底边栏动画 | 必要 | false:无
true:有 | +| tail_icon_ani_mode | str | 底边栏动画循环播放 | 必要 | once:播放一次 | +| head_myself_mp4_play| str | 我的页面头图(视频)循环 | 必要 | once:播放一次
loop:循环播放 | +| tail_icon_mode | str | 底栏改图标或改颜色 | 必要 | img:图标
color:颜色 | +| side_bg_color | str | 侧边栏颜色 | 非必要 | 颜色
5.x 版本客户端的侧边栏 | +| side_line_color | str | 侧边栏线条颜色? | 非必要 | 颜色
5.x 版本客户端的侧边栏 | +| tail_icon_color | str | 底栏图标颜色 | 可能必要 | 颜色
若 tail_icon_mode = "color",则必要 | +| tail_icon_color_dark| str | 底栏图标颜色(夜间模式) | 可能必要 | 颜色
若 tail_icon_mode = "color",则必要 | +| tail_icon_color_selected| str | 底栏图标颜色(选择时) | 可能必要 | 颜色
若 tail_icon_mode = "color",则必要 | +| tail_icon_color_selected_dark| str | 底栏图标颜色(选择时)(夜间模式) | 可能必要 | 颜色
若 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:收费
true:免费 | +| price | num | 价格 | 单位为硬币 | +| is_bought | bool | 是否已购买 | false:未购买
true:已购买 | +| status | num | 状态 | 1:自动续费
4:已退订 | +| buy_time | num | 购买时间 | 毫秒时间戳 | +| due_time | num | 到期时间 | 毫秒时间戳 | +| color_name | str | 颜色类型名称 | | +| is_overdue | bool | 是否已到期 | false:未到期
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' +``` + +
+查看响应示例: + +```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" + } + } +} +``` + +
+ +## 主题包结构 + +主题包为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 | 【我的】页面头图(视频)
格式参考:后缀必须 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/history&toview/history.md b/docs/history&toview/history.md new file mode 100644 index 0000000..ea54bc2 --- /dev/null +++ b/docs/history&toview/history.md @@ -0,0 +1,850 @@ +# 历史记录 + +- [获取历史记录列表_web端](#获取历史记录列表_web端) +- [获取视频观看历史记录_web端旧版](#获取视频观看历史记录_旧版) +- [删除历史记录](#删除历史记录) +- [清空历史记录](#清空历史记录) +- [停用历史记录](#停用历史记录) +- [查询历史记录停用状态](#查询历史记录停用状态) + +--- + +## 获取历史记录列表_web端 + +>https://api.bilibili.com/x/web-interface/history/cursor + +*请求方式:GET* + +认证方式:Cookie (SESSDATA) + +注:`max`、`business`、`view_at`参数用于历史记录列表的 IFS (无限滚动),其用法类似链表的 next 指针 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| max | num | 历史记录截止目标 id | 非必要 | 默认为 0
稿件:稿件 avid
剧集(番剧 / 影视):剧集 ssid
直播:直播间 id
文集:文集 rlid
文章:文章 cvid | +| business | str | 历史记录截止目标业务类型 | 非必要 | 默认为空
archive:稿件
pgc:剧集(番剧 / 影视)
live:直播
article-list:文集
article:文章 | +| view_at | num | 历史记录截止时间 | 非必要 | 时间戳
默认为 0
0 为当前时间 | +| type | str | 历史记录分类筛选 | 非必要 | all:全部类型(默认)
archive:稿件
live:直播
article:文章 | +| ps | num | 每页项数 | 非必要 | 默认为 20,最大 30 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | ------------ | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-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
无效时: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 | 视频观看进度 | 单位为秒
用于稿件视频或剧集 | +| badge | str | 角标文案 | 稿件视频 / 剧集 / 笔记 | +| show_title | str | 分 P 标题 | 用于稿件视频或剧集 | +| duration | num | 视频总时长 | 用于稿件视频或剧集 | +| current | str | (?) | | +| total | num | 总计分集数 | 仅用于剧集 | +| new_desc | str | 最新一话 / 最新一 P 标识 | 用于稿件视频或剧集 | +| is_finish | num | 是否已完结 | 仅用于剧集
0:未完结
1:已完结 | +| is_fav | num | 是否收藏 | 0:未收藏
1:已收藏 | +| kid | num | 条目目标 id | **详细内容见参数** | +| tag_name | str | 子分区名 | 用于稿件视频和直播 | +| live_status | num | 直播状态 | 仅用于直播
0:未开播
1:已开播 | + +`list`数组中的对象中的`covers`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | -------------- | ---- | +| 0 | str | 封面图片 1 | | +| n | str | 封面图片 (n+1) | | +| …… | str | …… | | + +`list`数组中的对象中的`history`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | --------------------- | ------------------------------------------------------------ | +| oid | num | 目标id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):稿件avid
直播(当`business=live`时):直播间id
文章(当`business=article`时):文章cvid
文集(当`business=article-list`时):文集rlid | +| epid | num | 剧集epid | 仅用于剧集 | +| bvid | str | 稿件bvid | 仅用于稿件视频 | +| page | num | 观看到的视频分P数 | 仅用于稿件视频 | +| cid | num | 观看到的对象id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):视频cid
文集(当`business=article-list`时):文章cvid | +| part | str | 观看到的视频分 P 标题 | 仅用于稿件视频 | +| business | str | 业务类型 | **见请求参数** | +| dt | num | 记录查看的平台代码 | 1 3 5 7:手机端
2:web端
4 6:pad端
33:TV端
0:其他 | + +**示例:** + +获取当前时间截止的5条历史记录 + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/history/cursor' \ +--data-urlencode 'ps=5' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```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 + } + ] + } +} +``` + +
+ +## 获取视频观看历史记录_web端旧版 + +> https://api.bilibili.com/x/v2/history + +*请求方式:GET* + +认证方式:Cookie (SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | ------- | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | ------------ | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 历史记录列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ------------------------------------------ | +| 0 | obj | 历史观看1 | | +| n | obj | 历史观看(n+1) | 按照观看顺序排列
项数为总计观看视频数 | +| …… | obj | …… | …… | + +`data`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------------- | ------- | ------------------------------ | ------------------------------------------------------------ | +| aid | num | 稿件avid | | +| videos | num | 视频分P总数 | 默认为1 | +| tid | num | 分区tid | | +| tname | str | 子分区名称 | | +| copyright | num | 是否转载 | 1:原创
2:转载 | +| 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`对象 | +| bangumi | obj | 番剧/影视信息 | 非番剧/影视无此项 | +| cheese | obj | 课程信息 | 非课程无此项 | +| favorite | bool | 是否已收藏 | true:已收藏
false:未收藏 | +| type | num | 视频属性 | 3:普通视频
4:剧集
10:课程 | +| sub_type | num | 附视频属性 | 0:普通视频
1:番剧
2:电影
3:纪录片
4:国创
5:电视剧
7:综艺 | +| device | num | 观看平台代码 | 1 3 5 7:手机端
2:web端
4 6:pad端
33:TV端
0:其他 | +| page | obj | 最后观看的分P信息 | | +| count | num | 分P数 | 非投稿视频无此项 | +| progress | num | 观看进度 | 单位为秒 | +| view_at | num | 观看时间 | 时间戳 | +| kid | num | 稿件avid | | +| business | str | 视频类型标识 | archive:用户投稿视频
pgc:番剧/影视
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:连载中
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' +``` + +
+查看响应示例: + +```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" + } + ] +} +``` + +
+ +## 删除历史记录 + +> https://api.bilibili.com/x/v2/history/delete + +*请求方式:POST* + +认证方式:Cookie (SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | --------------------------------------------------- | ------ | ------------------------------------------------------------ | +| kid | str | 删除的目标记录,格式为`{业务类型}_{目标id}`详见备注 | 必要 | 视频:archive\_{稿件avid}
直播:live_{直播间id}
专栏:article\_{专栏cvid}
剧集:pgc\_{剧集ssid}
文集:article-list\_{文集rlid} | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 清空历史记录 + +> 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:成功
-101:账号未登录
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 停用历史记录 + +> https://api.bilibili.com/x/v2/history/shadow/set + +*请求方式:POST* + +认证方式:Cookie (SESSDATA) + +该操作不会影响原有历史记录 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | -------------------------------------------- | +| switch | bool | 停用开关 | 非必要 | true:停用
false:正常
默认为false | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 查询历史记录停用状态 + +> https://api.bilibili.com/x/v2/history/shadow + +*请求方式:GET* + +认证方式:Cookie (SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | bool | 停用状态 | true:停用
false:正常 | + +**示例:** + +当前状态为未停用视频历史记录 + +```shell +curl 'https://api.bilibili.com/x/v2/history/shadow' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": false +} +``` + +
diff --git a/docs/history&toview/toview.md b/docs/history&toview/toview.md new file mode 100644 index 0000000..2f16ae7 --- /dev/null +++ b/docs/history&toview/toview.md @@ -0,0 +1,470 @@ +# 稍后再看 + + + +- [视频添加稍后再看](#视频添加稍后再看) +- [添加频道中所有视频到稍后再看](#添加频道中所有视频到稍后再看) +- [获取稍后再看视频列表](#获取稍后再看视频列表) +- [删除稍后再看视频](#删除稍后再看视频) +- [清空稍后再看视频列表](#清空稍后再看视频列表) + +--- + +## 视频添加稍后再看 + +>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:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
90001:列表已满
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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 添加频道中所有视频到稍后再看 + +> 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:失败
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' +``` + +
+查看响应示例: + +```json +{ + "status": true, + "data": "操作成功" +} +``` + +
+ +## 获取稍后再看视频列表 + +> https://api.bilibili.com/x/v2/history/toview + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | data | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ------ | ---------------- | ---- | +| count | num | 稍后再看视频数 | | +| list | array | 稍后再看视频列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---------------------------------------------- | +| 0 | obj | 稍后再看1 | | +| n | obj | 稍后再看(n+1) | 按照添加顺序排列
项数为总计稍后再看视频数 | +| …… | obj | …… | …… | +| 99 | obj | 最后一项 | | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------------------- | ------- | ------------------------------ | ------------------------------------------------------------ | +| aid | num | 稿件avid | | +| videos | num | 稿件分P总数 | 默认为1 | +| tid | num | 分区tid | | +| tname | str | 子分区名称 | | +| copyright | num | 是否转载 | 1:原创
2:转载 | +| 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' +``` + +
+查看响应示例: + +```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" + }, + ………… + ] + } +} +``` + +
+ +## 删除稍后再看视频 + +> https://api.bilibili.com/x/v2/history/toview/del + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ | +| viewed | bool | 是否删除所有已观看的视频 | 非必要 | true:删除已观看视频
false:不删除已观看视频
默认为false | +| aid | num | 删除的目标记录的avid | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +删除所有已观看的视频 + +```shell +curl 'https://api.bilibili.com/x/v2/history/toview/del' \ +--data-urlencode 'viewed=true' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 清空稍后再看视频列表 + +> 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:成功
-101:账号未登录
-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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
\ No newline at end of file diff --git a/docs/live/info.md b/docs/live/info.md new file mode 100644 index 0000000..5eeef0a --- /dev/null +++ b/docs/live/info.md @@ -0,0 +1,971 @@ +# 直播间基本信息 + +- [直播间基本信息](#直播间基本信息) + - [获取直播间信息](#获取直播间信息) + - [获取用户对应的直播间状态](#获取用户对应的直播间状态) + - [获取房间页初始化信息](#获取房间页初始化信息) + - [获取主播信息](#获取主播信息) + - [批量查询直播间状态](#批量查询直播间状态) + - [获取直播间信息](#获取直播间信息) + +--- + +## 获取直播间信息 + +> https://api.live.bilibili.com/room/v1/Room/get_info + +*请求方式: GET* + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------|-----|------|-----|-------| +| room_id | num | 直播间号 | 必要 | 可以为短号 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------| +| code | num | 返回值 | 0:成功
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:未开播
1:直播中
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: 个人认证(黄)
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' +``` + +
+查看响应示例: + +```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": [] + } + } +} +``` + +
+ +## 获取用户对应的直播间状态 + +> https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|---------|-----|-----| +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|---------------------| +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------|-----|-----------|------------------| +| roomStatus | num | 直播间状态 | 0:无房间
1:有房间 | +| roundStatus | num | 轮播状态 | 0:未轮播
1:轮播 | +| live_status | num | 直播状态 | 0:未开播
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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 获取房间页初始化信息 + +> https://api.live.bilibili.com/room/v1/Room/room_init + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|------------|-----|-----| +| id | num | 目标直播间号(短号) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------| +| code | num | 返回值 | 0:成功
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:未开播
1:直播中
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:普通直播间
1:付费直播间 | +| special_type | num | 特殊直播间标志 | 0:普通直播间
1:付费直播间
2:拜年祭直播间 | + +**示例:** + +查询直播间`id=76`的直播间信息 + +```shell +curl -G 'https://api.live.bilibili.com/room/v1/Room/room_init' \ +--data-urlencode 'id=76' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 获取主播信息 + +> https://api.live.bilibili.com/live_user/v1/Master/info + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|---------|-----|-----| +| uid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------| +| code | num | 返回值 | 0:成功
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:保密
0:女
1:男 | + +`info`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|------------------------------| +| type | num | 主播认证类型 | -1:无
0:个人认证
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=76`的主播信息 + +```shell +curl -G 'https://api.live.bilibili.com/live_user/v1/Master/info' \ +--data-urlencode 'uid=2' +``` + +
+查看响应示例: + +```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": "" + } + } +} +``` + +
+ +## 批量查询直播间状态 + +> 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:成功
-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 | 直播持续时长 | | +| live_status | num | 直播间开播状态 | 0:未开播
1:正在直播
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:普通直播
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]}" +``` + +
+查看响应示例: + +```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 + } + } +} +``` + +
+ +## 清晰度代码 + +| 代码 | 说明 | +|-------|-----| +| 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
1:http_hls
可多选, 使用英文逗号分隔 | +| format | str | 格式 | 必要 | 0:flv
1:ts
2:fmp4
可多选, 使用英文逗号分隔 | +| codec | str | 编码格式 | 必要 | 0:AVC
1:HEVC
可多选, 使用英文逗号分隔 | +| qn | num | 清晰度编码 | | 默认`150`
[清晰度代码](#清晰度代码) | +| platform | str | `web` | | | +| ptype | num | `8` | | | +| dolby | num | `5` | | | +| panorama | num | `1` | | | + +**json回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------------| +| code | num | 响应码 | 0:成功
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:未开播
1:直播中
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' +``` + +
+查看响应示例: + +```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 + } + } + } +} +``` + +
\ No newline at end of file diff --git a/docs/live/live_area.md b/docs/live/live_area.md new file mode 100644 index 0000000..5eeedf0 --- /dev/null +++ b/docs/live/live_area.md @@ -0,0 +1,214 @@ +# 直播间分区 + +- [获取全部直播间分区列表](#获取全部直播间分区列表) + +--- + +## 获取全部直播间分区列表 + +> 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:否
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' +``` + +
+查看响应示例: + +```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 + }, + ………… + ] + } + ] +} +``` + +
diff --git a/docs/live/live_stream.md b/docs/live/live_stream.md new file mode 100644 index 0000000..22cd70a --- /dev/null +++ b/docs/live/live_stream.md @@ -0,0 +1,160 @@ +# 直播间视频流 + +- [根据真实直播间号获取直播视频流](#根据真实直播间号获取直播视频流) + +--- + +## 根据真实直播间号获取直播视频流 + +> https://api.live.bilibili.com/room/v1/Room/playUrl + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| cid | num | 目标真实直播间号 | 必要 | 直播间的`room_id`(非短号) | +| platform | str | 直播流格式 | 非必要 | h5:hls方式
web:http-flv方式
默认为http-flv方式 | +| quality | num | 画质 | 非必要 | `qn`与`quality`任选其一
2:流畅
3:高清
4:原画 | +| qn | str | 画质 | 非必要 | `qn`与`quality`任选其一
80:流畅
150:高清
400:蓝光
10000:原画
20000:4K
30000:杜比 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:参数错误
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格式
**注:带有转义** | +| 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' +``` + +
+查看响应示例: + +```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 + } + ] + } +} +``` + +
diff --git a/docs/live/manage.md b/docs/live/manage.md new file mode 100644 index 0000000..6cf334b --- /dev/null +++ b/docs/live/manage.md @@ -0,0 +1,266 @@ +# 直播间管理 + +- [更新直播间标题](#更新直播间标题) +- [开始直播](#开始直播) +- [关闭直播](#关闭直播) + +--- + +## 更新直播间标题 + +> https://api.live.bilibili.com/room/v1/Room/update + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | -------------------- | +| room_id | num | 直播间id | 必要 | 必须为自己的直播间id | +| title | str | 直播间标题 | 必要 | 最大20字符 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ------------------------------------------------------ | +| code | num | 返回值 | 0:成功
65530:token错误(登录错误)
1:错误 | +| msg | str | 错误信息 | 默认为ok | +| message | str | 错误信息 | 默认为ok | +| data | array | 空 | | + +**示例:** + +修改直播间`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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "ok", + "message": "ok", + "data": [] +} +``` + +
+ +## 开始直播 + +> 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 | 直播平台 | 必要 | web端:
bililink:android_link | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
65530:token错误(登录错误)
1:错误
60009:分区不存在
**(其他错误码有待补充)** | +| msg | str | 错误信息 | 默认为空 | +| message | str | 错误信息 | 默认为空 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ---------------- | ---------------------- | +| change | num | 是否改变状态 | 0:未改变
1:改变 | +| status | str | LIVE | | +| room_type | num | 0 | 作用尚不明确 | +| rtmp | obj | RTMP推流地址信息 | | +| protocols | array | ??? | 作用尚不明确 | +| try_time | str | ??? | 作用尚不明确 | +| live_key | str | ??? | 作用尚不明确 | +| notice | obj | ??? | 作用尚不明确 | + +`data`中的`rtmp`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------------------------------- | ------------ | +| addr | str | RTMP推流(发送)地址 | **重要** | +| code | str | RTMP推流参数(密钥) | **重要** | +| new_link | str | 获取CDN推流ip地址重定向信息的url | 没啥用 | +| provider | str | ??? | 作用尚不明确 | + +`data`中的`protocols`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | ------------ | +| 0 | obj | ??? | 作用尚不明确 | + +`data`中的`protocols`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------------------------------- | ------------ | +| protocol | str | rtmp | 作用尚不明确 | +| addr | str | RTMP推流(发送)地址 | | +| code | str | RTMP推流参数(密钥) | | +| 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 | 空 | 作用尚不明确 | + +**示例:** + +以`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' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "change": 1, + "status": "LIVE", + "room_type": 0, + "rtmp": { + "addr": "rtmp://txy.live-send.acg.tv/live-txy/", + "code": "?streamname=live_293793435_1567354&key=***", + "new_link": "http://tcdns.myqcloud.com:8086/bilibili_redirect?up_rtmp=txy.live-send.acg.tv%2Flive-txy%2F%3Fstreamname%3Dlive_293793435_1567354%26key%3D***", + "provider": "txy" + }, + "protocols": [ + { + "protocol": "rtmp", + "addr": "rtmp://txy.live-send.acg.tv/live-txy/", + "code": "?streamname=live_293793435_1567354&key=***", + "new_link": "http://tcdns.myqcloud.com:8086/bilibili_redirect?up_rtmp=txy.live-send.acg.tv%2Flive-txy%2F%3Fstreamname%3Dlive_293793435_1567354%26key%3D***", + "provider": "txy" + } + ], + "try_time": "0000-00-00 00:00:00", + "live_key": "l:one:live:record:10352053:1589344980", + "notice": { + "type": 1, + "status": 0, + "title": "", + "msg": "", + "button_text": "", + "button_url": "" + } + } +} +``` + +
+ +## 关闭直播 + +> https://api.live.bilibili.com/room/v1/Room/stopLive + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ---- | ------------------------ | ------ | -------------------- | +| room_id | num | 直播间id | 必要 | 必须为自己的直播间id | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
65530:token错误(登录错误)
-400:没有权限
**(其他错误码有待补充)** | +| msg | str | 错误信息 | 默认为空 | +| message | str | 错误信息 | 默认为空 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | ---------------------- | +| change | num | 是否改变状态 | 0:未改变
1:改变 | +| status | str | PREPARING | | + +**示例:** + +关闭直播间`10352053`的直播 + +```shell +curl 'https://api.live.bilibili.com/room/v1/Room/stopLive' \ +--data-urlencode 'room_id=10352053' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx;bili_jct=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": { + "change": 1, + "status": "PREPARING" + } +} +``` + +
diff --git a/docs/live/message_stream.md b/docs/live/message_stream.md new file mode 100644 index 0000000..7e5be5b --- /dev/null +++ b/docs/live/message_stream.md @@ -0,0 +1,2336 @@ +# 直播间信息流 + +- [获取信息流认证秘钥](#获取信息流认证秘钥) +- [数据包格式](#数据包格式) +- [数据包](#数据包) + - [认证包](#认证包) + - [认证包回复](#认证包回复) + - [心跳包](#心跳包) + - [心跳包回复](#心跳包回复人气值) + - [普通包](#普通包) + +--- + +## 获取信息流认证秘钥 + +> https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------ | ------ | ---- | +| id | num | 直播间真实id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
65530:token错误(登录错误)
1:错误
60009:分区不存在
**(其他错误码有待补充)** | +| 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 | 信息流服务器节点列表 | | + +`host_list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | ---------- | ---- | +| host | str | 服务器域名 | | +| port | num | tcp端口 | | +| wss_port | num | wss端口 | | +| ws_port | num | ws端口 | | + +**示例:** + +获得直播间`22824550`的信息流认证秘钥 + +```shell +curl -G 'https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo' \ +--data-urlencode 'id=22824550' +``` + +
+查看响应示例: + +```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": "Eac3Lm1JADzny-YnB5MW0MQcd23rw_mgMFZAnu40I-J2ecP2Qj6CH-UqjdfvwiqVEZcEksG1ONSOi1dGzm0wM4FxqA-ZYXtcQyHXPXqxmrx3AmDx8Z5-d4TuKQkaU0zxevH1B-gnu7g8TDtIE4lns4BYlw==", + "host_list": [ + { + "host": "tx-sh-live-comet-02.chat.bilibili.com", + "port": 2243, + "wss_port": 443, + "ws_port": 2244 + }, + { + "host": "tx-bj-live-comet-02.chat.bilibili.com", + "port": 2243, + "wss_port": 443, + "ws_port": 2244 + }, + { + "host": "broadcastlv.chat.bilibili.com", + "port": 2243, + "wss_port": 443, + "ws_port": 2244 + } + ] + } +} +``` + +
+ +## 数据包格式 + +数据包为MQ(Message Queue,消息队列)使用Websocket或TCP连接作为通道,具体格式为头部数据+正文数据 + +操作流程: + +发送认证包->接收认证包回应->接收普通包&(每30秒发送心跳包->接收心跳回应) + +头部格式: + +| 偏移量 | 长度 | 类型 | 含义 | +| ------ | ---- | ------ | ------------------------------------------------------------ | +| 0 | 4 | uint32 | 封包总大小(头部大小+正文大小) | +| 4 | 2 | uint16 | 头部大小(一般为0x0010,16字节) | +| 6 | 2 | uint16 | 协议版本:
0普通包正文不使用压缩
1心跳及认证包正文不使用压缩
2普通包正文使用zlib压缩
3普通包正文使用brotli压缩,解压为一个带头部的协议0普通包 | +| 8 | 4 | uint32 | 操作码(封包类型) | +| 12 | 4 | uint32 | sequence,每次发包时向上递增 | + +操作码: + +| 代码 | 含义 | +| ---- | -------------------- | +| 2 | 心跳包 | +| 3 | 心跳包回复(人气值) | +| 5 | 普通包(命令) | +| 7 | 认证包 | +| 8 | 认证包回复 | + +*普通包可能包含多条命令,每个命令有一个头部,指示该条命令的长度等信息* + +## 数据包 + +### 认证包 + +方式:(上行) + +连接成功后5秒内发送,否则强制断开连接 + +正文: + +json格式 + +| 字段 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------ | ------ | ------------------ | +| uid | num | 用户mid | 非必要 | uid为0即为游客登录 | +| roomid | num | 加入房间的id | 必要 | 直播间真实id | +| protover | num | 协议版本 | 非必要 | 3 | +| platform | str | 平台标识 | 非必要 | "web" | +| type | num | 2 | 非必要 | | +| key | str | 认证秘钥 | 非必要 | | + +示例: + +``` +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格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| code | num | 返回值 | 0认证成功 | + +示例: + +``` +00000000: 0000 001a 0010 0001 0000 0008 0000 0001 ................ +00000001: 7b22 636f 6465 223a 307d {"code":0} +``` + + + +### 心跳包 + +方式:(上行) + +30秒左右发送一次,否则60秒后会被强制断开连接 + +正文: + +可以为空或任意字符 + +示例: + +``` +00000000: 0000 001f 0010 0001 0000 0002 0000 0001 ................ +00000001: 5b6f 626a 6563 7420 4f62 6a65 6374 5d [object Object] +``` + +### 心跳包回复(人气值) + +方式:(下行) + +在心跳包发送成功后就会收到 + +正文: + +正文分为两个部分,第一部分是人气值 [uint32整数,代表房间当前的人气值] + +第二部分是对于心跳包内容的复制,心跳包正文是什么这里就会回应什么。 + +示例: + +``` +00000000: 0000 0014 0010 0001 0000 0003 0000 0000 ................ +00000001: 0000 09a2 5b6f 626a 6563 7420 4f62 6a65 ....[object Obje +00000002: 6374 5d ct] +``` + +可见房间内人气值为2466(0x000009a2) + +### 普通包 + +方式:(下行) + +正文: + +正文一般为普通JSON数据。 + +大多数普通包都经过zlib压缩或brotli压缩。 + +示例: + +``` +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 .."}}. +``` + +--- + +- [弹幕](#弹幕) +- [进场或关注消息](#进场或关注消息) +- [送礼](#送礼) +- [礼物星球点亮](#礼物星球点亮) +- [礼物连击](#礼物连击) +- [通知消息](#通知消息) +- [主播准备中](#主播准备中) +- [直播开始](#直播开始) +- [主播信息更新](#主播信息更新) +- [直播间高能榜](#直播间高能榜) +- [直播间高能用户数量](#直播间高能用户数量) +- [用户到达直播间高能榜前三名的消息](#用户到达直播间高能榜前三名的消息) +- [直播间用户点赞](#直播间用户点赞) +- [直播间点赞数](#直播间点赞数) +- [直播间发红包弹幕](#直播间发红包弹幕) +- [直播间红包](#直播间红包) +- [直播间抢到红包的用户](#直播间抢到红包的用户) +- [直播间看过人数](#直播间看过人数) +- [用户进场特效](#用户进场特效) +- [直播间在所属分区的排名改变](#直播间在所属分区的排名改变) +- [直播间在所属分区排名提升的祝福](#直播间在所属分区排名提升的祝福) +- [直播间信息更改](#直播间信息更改) +- [醒目留言按钮](#醒目留言按钮) +- [顶部横幅](#顶部横幅) +- [下播的直播间](#下播的直播间) +- [未知消息](#未知消息) + +--- + + +#### 弹幕 + +当收到弹幕时接收到此条消息 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "DANMU_MSG" | 如果是弹幕消息,内容则是"DANMU_MSG" | +| info | array | 这条弹幕的用户、内容与粉丝勋章等各种信息 | 待调查其中每个数据的含义 | + + + + + + +
+查看消息示例: + +``` json +{ + "cmd": "DANMU_MSG", + "info": [ + [ + 0, + 1, + 25, + 16777215, + 1673789362967, + 1673770572, + 0, + "81240bc1", + 0, + 0, + 0, + "", + 0, + "{}", + "{}", + { + "mode": 0, + "show_player_type": 0, + "extra": "{\"send_from_me\":false,\"mode\":0,\"color\":16777215,\"dm_type\":0,\"font_size\":25,\"player_mode\":1,\"show_player_type\":0,\"content\":\"测试文本\",\"user_hash\":\"2166623169\",\"emoticon_unique\":\"\",\"bulge_display\":0,\"recommend_score\":8,\"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}" + }, + { + "activity_identity": "", + "activity_source": 0, + "not_show": 0 + } + ], + "测试文本", + [ + 50500335, + "属官一号", + 0, + 0, + 0, + 10000, + 1, + "" + ], + [ + 5, + "小纸鱼", + "薄海纸鱼", + 706667, + 6126494, + "", + 0, + 12632256, + 12632256, + 12632256, + 0, + 0, + 1837617 + ], + [ + 0, + 0, + 9868950, + ">50000", + 2 + ], + [ + "", + "" + ], + 0, + 0, + null, + { + "ts": 1673789362, + "ct": "A4721FE3" + }, + 0, + 0, + null, + null, + 0, + 21 + ] +} +``` +
+ +#### 进场或关注消息 + +有用户进入直播间或关注主播时触发 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "INTERACT_WORD" | 如果是进入直播间或关注消息,内容则是"INTERACT_WORD" | +| data | obj | 进入直播间的用户的信息 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| contribution | obj | 待调查 | | +| dmscore | num | 待调查 | | +| fans_medal | obj | 粉丝勋章 | | +| identities | num | 待调查 | | +| is_spread | num | 待调查 | | +| msg_type | num | 1为进场,2为关注 | | +| 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 | 用户名称颜色 | | + +
+查看消息示例: + +```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": "" + } +} +``` + +
+ +#### 送礼 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "SEND_GIFT" | 投喂礼物等,内容则是"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 | number | 该次投喂的礼物数量 | | +| 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 | 待调查 | | +| uid | num | 礼物投喂者的UID | | +| uname | str | 礼物投喂者的名称 | | + +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 | 礼物投喂者的名称 | | + +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 | 待调查 | | + +receive_user_info字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| uid | num | 礼物接收者的UID | 一般为主播的UID | +| uname | str | 礼物接收者的名称 | 一般为主播的名称 | + +
+查看消息示例: + +```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" + } +} +``` +
+ +#### 礼物星球点亮 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "GIFT_STAR_PROCESS" | 主播的礼物星球其一点亮之后,则内容为"GIFT_STAR_PROCESS" | +| data | obj | 消息文本 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| status | num | 待调查 | | +| tip | str | 点亮礼物星球的消息文本 | | + +
+查看消息示例: + +```json +{ + "cmd": "GIFT_STAR_PROCESS", + "data": { + "status": 1, + "tip": "情书已点亮" + } +} +``` +
+ +#### 礼物连击 + +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 | 礼物投喂者的名称 | | + +receive_user_info字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | -------- | ------ | --------- | +| uid | number | 礼物接收者的UID | 一般为主播的UID | +| uname | string | 礼物接收者的名称 | 一般为主播的名称 | + +
+查看消息示例: + +```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" + } +} +``` +
+ + + +#### 通知消息 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "NOTICE_MSG" | 通知消息,内容则是"NOTICE_MSG" | +| id | num | 待调查 | | +| data | obj | 通知数据 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| full | obj | 待调查 | | +| half | obj | 待调查 | | +| side | obj | 待调查 | | +| roomid | num | 目标直播间短号 | | +| real_roomid | num | 目标直播间真实ID | | +| msg_common | str | 显示的消息内容 | | +| msg_self | str | 消息内容本身 | 剔除额外文本 | +| link_rel | str | 通知消息跳转的URL | | +| msg_type | num | 待调查 | | +| shield_uid | num | 待调查 | | +| business_id | str | 待调查 | | +| scatter | obj | 待调查 | | +| marquee_id | str | 待调查 | | +| notice_type | num | 待调查 | | + +
+查看消息示例: + +```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 +} +``` + +
+ +#### 主播准备中 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "PREPARING" | | +| round | num | 轮播状态:
1正在轮播
0未轮播 | | +| roomid | num | 直播间ID | 未知是真实ID还是短号 | | + +
+查看消息示例: + +```json +{ + "cmd": "PREPARING", + "round": 1, + "roomid": "8618057" +} +``` + +
+ +#### 直播开始 + + +#### 主播信息更新 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "ROOM_REAL_TIME_MESSAGE_UPDATE" | | +| data | obj | 房间ID、主播粉丝数等 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| roomid | num | 直播间ID | 未知是真实ID还是短号 | | +| fans | num | 主播当前粉丝数 | | +| red_notice | num | 待调查 | | +| fans_club | num | 主播粉丝团人数 | | + +
+查看消息示例: + +```json +{ + "cmd": "ROOM_REAL_TIME_MESSAGE_UPDATE", + "data": { + "roomid": 8618057, + "fans": 136, + "red_notice": -1, + "fans_club": 8 + } +} +
+ +#### 直播间高能榜 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "ONLINE_RANK_V2" | 直播间高能用户数据刷新,内容则是"ONLINE_RANK_V2" | +| data | obj | 直播间高能用户数据 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| list | array | 在直播间高能用户中的用户信息 | | +| rank_type | str | 待调查 | | + +list数组中的对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| uid | num | 用户UID | | +| face | str | 用户头像URL | | +| score | str | 该用户的贡献值 | | +| uname | str | 用户名称 | | +| rank | num | 该用户在高能榜中的排名 | | +| guard_level | num | 待调查 | | + +
+查看消息示例: + +```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" + } +} +``` + +
+ + +#### 直播间高能用户数量 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "ONLINE_RANK_COUNT" | 直播间高能用户数,内容是"ONLINE_RANK_COUNT" | +| data | obj | 直播间高能用户数量 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| count | num | 直播间高能用户数量 | | + + +
+查看消息示例: + +```json +{ + "cmd": "ONLINE_RANK_COUNT", + "data": { + "count": 4 + } +} +``` + +
+ +#### 用户到达直播间高能榜前三名的消息 + + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "ONLINE_RANK_TOP3" | | +| data | obj | 消息内容、高能榜排名等 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| dmscore | num | 待调查 | | +| list | array | 消息内容和高能榜排名 | | + +list数组中的对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| msg | str | 消息内容 | | +| rank | num | 该用户的高能榜排名 | | + +
+查看消息示例: + +```json +{ + "cmd": "ONLINE_RANK_TOP3", + "data": { + "dmscore": 112, + "list": [ + { + "msg": "恭喜 <%你干嘛哈哈哎哟%> 成为高能用户", + "rank": 1 + } + ] + } +} +``` + +
+ +#### 直播间用户点赞 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "LIKE_INFO_V3_CLICK" | 若直播间被赞,则内容是"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 | 待调查 | | + +
+查看消息示例: + +```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 + } +} +``` + +
+ +#### 直播间点赞数 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "LIKE_INFO_V3_UPDATE" | 若直播间点赞数更新,则内容是"LIKE_INFO_V3_UPDATE" | +| data | obj | 直播间点赞数 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| click_count | num | 直播间点赞数 | | + +
+查看消息示例: + +```json +{ + "cmd": "LIKE_INFO_V3_UPDATE", + "data": { + "click_count": 3227 + } +} +``` + +
+ +#### 直播间发红包弹幕 + +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已参与
2未参与 | +| awards | array | 红包内包含的礼物的信息 | | +| lot_config_id | num | 待调查 | | +| total_price | num | 红包总价格 | | +| wait_num | num | 待调查 | | + +awards数组中的对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| gift_id | num | 礼物ID | | +| gift_name | str | 礼物名称 | | +| gift_pic | str | 礼物图标URL | | +| num | num | 该礼物的数量 | | + + +
+查看消息示例: + +```json +{ + "cmd": "POPULARITY_RED_POCKET_START", + "data": { + "lot_id": 8445764, + "sender_uid": 38554435, + "sender_name": "我的0019", + "sender_face": "https://i1.hdslb.com/bfs/face/282c3055de94c74d69094fad91a56f9ed73a270a.jpg", + "join_requirement": 1, + "danmu": "点点红包,关注主播抽礼物~", + "current_time": 1673684632, + "start_time": 1673684631, + "end_time": 1673684811, + "last_time": 180, + "remove_time": 1673684826, + "replace_time": 1673684821, + "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=8445764", + "user_status": 2, + "awards": [ + { + "gift_id": 31212, + "gift_name": "打call", + "gift_pic": "https://s1.hdslb.com/bfs/live/461be640f60788c1d159ec8d6c5d5cf1ef3d1830.png", + "num": 2 + }, + { + "gift_id": 31214, + "gift_name": "牛哇", + "gift_pic": "https://s1.hdslb.com/bfs/live/91ac8e35dd93a7196325f1e2052356e71d135afb.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 + } +} +``` + +
+ + +#### 直播间红包 + +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 | 待调查 | | +| uname | str | 发送者的名称 | | +| uid | num | 发送者的UID | | +| action | str | 礼物操作 | | +| num | num | 礼物数量 | | +| gift_name | str | "红包" | | +| gift_id | num | 礼物ID | | +| price | num | 待调查 | | +| name_color | str | 发送者的名称的颜色 | | +| medal_info | obj | 发送者的粉丝勋章信息 | | + + +
+查看消息示例: + +```json +{ + "cmd": "POPULARITY_RED_POCKET_NEW", + "data": { + "lot_id": 8445764, + "start_time": 1673684631, + "current_time": 1673684631, + "wait_num": 0, + "uname": "我的0019", + "uid": 38554435, + "action": "送出", + "num": 1, + "gift_name": "红包", + "gift_id": 13000, + "price": 20, + "name_color": "", + "medal_info": { + "target_id": 400963649, + "special": "", + "icon_id": 0, + "anchor_uname": "", + "anchor_roomid": 0, + "medal_level": 21, + "medal_name": "憨憨酥", + "medal_color": 1725515, + "medal_color_start": 12632256, + "medal_color_end": 12632256, + "medal_color_border": 12632256, + "is_lighted": 0, + "guard_level": 0 + } + } +} +``` +
+ + +#### 直播间抢到红包的用户 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "POPULARITY_RED_POCKET_WINNER_LIST" | | +| data | obj | 抢到红包的用户信息、红包内的礼物信息 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| lot_id | num | 该红包的ID | | +| total_num | num | 该红包内所有礼物的总数 | | +| winner_info | array | 抢到红包的用户的信息
抢到的礼物ID等 | | +| awards | obj | 该红包内的礼物信息 | | +| version | num | 待调查 | | + +winner_info数组中的数组 + +| 索引 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| 0 | num | 该抢到红包的用户的UID | | +| 1 | str | 该抢到红包的用户的名称 | | +| 2 | num | 待调查 | | +| 3 | num | 该用户抢到的礼物的ID | | + +awards字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| 礼物ID | obj | 礼物信息 | | +| ... | obj | | | + +礼物ID 对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| award_type | num | 待调查 | | +| award_name | str | 该礼物的名称 | | +| award_pic | str | 该礼物的图标URL | | +| award_big_pic | str | 该礼物的高分辨率图标URL | | +| award_price | num | 待调查 | | + +
+查看消息示例: + +```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 + } +} +``` +
+ + + +#### 直播间看过人数 + +该数据包的正文中,前19字节的信息未知。 + +前19字节信息示例: +``` +00000001: 8b38 8000 0000 7200 1000 0000 0000 0500 .8....r......... +00000002: 0000 00 ... +``` + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "WATCHED_CHANGE" | 若直播间看过人数更新,则内容是"WATCHED_CHANGE" | +| data | obj | 直播间看过人数 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| num | num | | | +| text_small | str | | | +| text_large | str | | | + +
+查看消息示例: + +```json +{ + "cmd": "WATCHED_CHANGE", + "data": { + "num": 17903, + "text_small": "1.7万", + "text_large": "1.7万人看过" + } +} +``` + +
+ +#### 用户进场特效 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "ENTRY_EFFECT" | 有进场特效的用户进入直播间,则内容是"ENTRY_EFFECT" | +| data | obj | 进场用户、进场特效信息 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| id | num | 待调查 | | +| uid | num | 进场用户的UID | | +| target_id | num | 主播的UID? | | +| mock_effect | num | 待调查 | | +| face | str | 进场用户的头像URL | | +| privilege_type | num | 待调查 | | +| copy_writing | str | 进场欢迎文本 | | +| copy_color | str | 进场欢迎文本的十六进制颜色值 | | +| highlight_color | str | 待调查 | | +| priority | num | 待调查 | | +| basemap_url | str | 进场特效背景图片URL | APP端使用该URL | +| show_avatar | num | 是否显示用户头像 | 1显示
0不显示 | +| web_basemap_url | str | 进场特效背景图片URL | 网页端使用该URL | +| web_effective_time | num | 进场特效生存时间 | 网页端 | +| web_effect_close | num | 待调查 | | +| web_close_time | num | 待调查 | | +| business | num | 待调查 | | +| copy_writing_v2 | str | 进场欢迎文本的复制? | | +| icon_list | array | 待调查 | | +| max_delay_time | num | 待调查 | | +| trigger_time | num | 触发的Unix时间戳,以及后面9位未知数字 | | +| 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 | 待调查 | | + +
+查看消息示例: + +```json +{ + "cmd": "ENTRY_EFFECT", + "data": { + "id": 4, + "uid": 489893482, + "target_id": 27717502, + "mock_effect": 0, + "face": "https://i0.hdslb.com/bfs/face/member/noface.jpg", + "privilege_type": 3, + "copy_writing": "欢迎舰长 <%天使雨晰%> 进入直播间", + "copy_color": "#ffffff", + "highlight_color": "#E6FF00", + "priority": 1, + "basemap_url": "https://i0.hdslb.com/bfs/live/mlive/11a6e8eb061c3e715d0a6a2ac0ddea2faa15c15e.png", + "show_avatar": 1, + "effective_time": 2, + "web_basemap_url": "https://i0.hdslb.com/bfs/live/mlive/11a6e8eb061c3e715d0a6a2ac0ddea2faa15c15e.png", + "web_effective_time": 2, + "web_effect_close": 0, + "web_close_time": 0, + "business": 1, + "copy_writing_v2": "欢迎舰长 <%天使雨晰%> 进入直播间", + "icon_list": [], + "max_delay_time": 7, + "trigger_time": 1673625604373633300, + "identities": 6, + "effect_silent_time": 0, + "effective_time_new": 0, + "web_dynamic_url_webp": "", + "web_dynamic_url_apng": "", + "mobile_dynamic_url_webp": "" + } +} +``` + +
+ + +#### 直播间在所属分区的排名改变 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "AREA_RANK_CHANGED" | 若直播间在所属分区的排名改变,则内容是"AREA_RANK_CHANGED" | +| data | obj | 直播间在所属分区的排名信息 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| conf_id | num | 待调查 | | +| rank_name | str | 排行榜名称 | | +| uid | num | 主播的UID | | +| 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 | 待调查 | | +| jump_url_link | str | 排行榜跳转链接 | APP端页面 | +| jump_url_pc | str | 排行榜跳转链接 | APP端页面 | +| jump_url_pink | str | 排行榜跳转链接 | APP端页面 | +| jump_url_web | str | 排行榜跳转链接 | APP端页面 | + +
+查看消息示例: + +```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" + } +} +``` + +
+ + +#### 直播间在所属分区排名提升的祝福 + +会分多个普通包发送 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "COMMON_NOTICE_DANMAKU" | 例如提示“恭喜主播 时雨ioo 成为手游航海当前第5名”,
,则内容是"COMMON_NOTICE_DANMAKU" | +| data | obj | 直播间在所属分区排名提升的祝福的信息 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| biz_id | num | 待调查 | | +| content_segments | array | 文本分段 | | +| danmaku_style | obj | 文本样式信息 | | +| danmaku_url | str | 待调查 | | +| dmscore | num | 待调查 | | +| terminals | array | 待调查 | | + +content_segments数组中的对象 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| font_color | str | text字段的十六进制颜色值 | | +| font_color_dark | str | text字段的十六进制颜色值 | APP端设置为深色模式时使用 | +| text | str | 祝贺文本 | | +| type | num | 待调查 | | + +danmaku_style字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| background_color | str | 文本背景颜色的十六进制颜色值 | | +| background_color_dark | str | 文本背景颜色的十六进制颜色值 | APP端设置为深色模式时使用 | + +
+查看消息示例: + +第一条数据: +```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": { + "biz_id": 0, + "content_segments": [ + { + "font_color": "#99A5AE", + "font_color_dark": "#99A5AE", + "text": "恭喜主播 时雨ioo 成为手游航海当前第5名", + "type": 1 + } + ], + "danmaku_style": { + "background_color": null, + "background_color_dark": null + }, + "danmaku_uri": "", + "dmscore": 144, + "terminals": [ + 5 + ] + } +} +``` +第三条数据: +```json +{ + "cmd": "COMMON_NOTICE_DANMAKU", + "data": { + "biz_id": 0, + "content_segments": [ + { + "font_color": "#998EFF", + "font_color_dark": "#998EFF", + "text": "恭喜主播 时雨ioo 成为手游航海第5名", + "type": 1 + } + ], + "danmaku_style": { + "background_color": null, + "background_color_dark": null + }, + "danmaku_uri": "", + "dmscore": 144, + "terminals": [ + 4 + ] + } +} +``` + +
+ + +#### 直播间信息更改 + +json格式 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "ROOM_CHANGE" | 例如直播间标题更改、直播间分区更改 | +| data | obj | | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| title | str | 直播间标题 | | +| area_id | num | 当前直播间所属分区的ID | | +| parent_area_id | num | 待调查 | | +| area_name | str | 当前直播间所属分区的名称 | | +| parent_area_name | str | 待调查 | | +| live_key | str | 待调查 | | +| sub_session_key | str | 待调查 | | + +
+查看消息示例: + +```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 | str | "SUPER_CHAT_ENTRANCE" | 不知道有什么意义 | +| data | obj | 醒目留言按钮的信息 | | +| roomid | num | 直播间ID | 未知是短号还是真实ID | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | --- | ------ | --------- | +| status | num | 待调查 | | +| jump_url | str | 按下“醒目留言”按钮后弹出小窗的页面URL | | +| icon | str | “醒目留言”按钮图标的URL | | +| broadcast_type | num | 待调查 | | + +
+查看消息示例: + +```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" +} +``` +
+ +#### 顶部横幅 + +网页端在直播间标题下面的横幅 + +例如“限时任务”等 + +json格式 + + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "WIDGET_BANNER" | | +| data | obj | 横幅信息 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| timestamp | num | 服务器发送数据包时的Unix时间戳 | | +| widget_list | obj | 横幅信息 | 待调查 | + +widget_list字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| 横幅ID | obj | 横幅信息 | | +| ... | obj | | | + +横幅ID 字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| 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 | 待调查 | | + +
+查看消息示例: + +```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 + } + } + } +} +``` + +
+ +#### 下播的直播间 + +json格式 + + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| cmd | str | "STOP_LIVE_ROOM_LIST" | | +| data | obj | 下播的直播间ID列表 | | + +data字段 + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------ | --------- | +| room_id_list | array | 下播的直播间ID | | + +room_id_list数组中的数字 + +| 类型 | 内容 | 备注 | +| --- | ---- | ---- | +| num | 下播的直播间ID | 未知是真实ID还是短号 | +| num | ... | | + + +
+查看消息示例: + +```json +{ + "cmd": "STOP_LIVE_ROOM_LIST", + "data": { + "room_id_list": [ + 22629205, + 23130005, + 25963791, + 5532805, + 668631, + 21409011, + 21559541, + 23499952, + 26700301, + 26785971, + 11673798, + 13766041, + 22980849, + 23719726, + 23865141, + 24984476, + 6134501, + 13782552, + 22276717, + 24107587, + 25023546, + 25404621, + 25516925, + 26527626, + 3392341, + 34027, + 502153, + 6479194, + 7636554, + 12237172, + 22821330, + 24484883, + 25641623, + 26230536, + 26792222, + 3642143, + 21774100, + 22797418, + 23698420, + 24020165, + 23969235, + 24207417, + 24541492, + 24900566, + 25385044, + 4484938, + 11113452, + 21442530, + 22046176, + 22184897, + 22386835, + 23499007, + 26129631, + 26866037, + 5971876, + 22779750, + 24132482, + 25789722, + 26251362, + 26822052, + 26835655, + 5122088, + 6668191, + 12439052, + 23690850, + 24458365, + 26189089, + 26676322, + 26872742, + 4917898, + 826723, + 22886872, + 24752347, + 25108137, + 5796786, + 6176498, + 6208022, + 7578115, + 14218725, + 22659435, + 23774701, + 24804876, + 25081572, + 25275744, + 26430916, + 730392, + 9505076, + 25467274, + 3015372, + 5764087, + 9407015, + 21356836, + 24302940, + 25469360, + 25666252, + 26564899, + 26574306, + 9391864, + 136707, + 15163029, + 22001560, + 22642183, + 24168773, + 24197349, + 26750190, + 59670, + 6545138, + 7538431, + 12568128, + 22865116, + 26566675, + 26658222, + 26778289, + 26856746, + 3386215, + 1270737, + 1856866, + 22371951, + 22953580, + 23026533, + 9316759, + 13628231, + 25166176, + 6736476, + 7745491, + 893989, + 25349228, + 25684996, + 26835833, + 763132, + 1282353, + 14333573, + 26677056, + 5553188, + 1549629, + 22807502, + 25633167, + 26062956, + 26558451, + 9312947, + 14366742, + 1864809, + 25581444, + 26656406, + 11454847, + 13507879, + 187331, + 22626880, + 23187177, + 23481929, + 24042533, + 24501754, + 26776408, + 2315619, + 24320832, + 24708829, + 26236176, + 26575516, + 3105045, + 6164089, + 21145740, + 21258252, + 23211964, + 23610573, + 26873451, + 10452273, + 21300836, + 26076163, + 26510266, + 933508, + 21751571, + 24043374, + 26045578, + 26784723, + 26811618, + 22836140, + 23558501, + 24429614, + 24476599, + 2681976, + 26867816, + 7802886, + 13617926, + 2049112, + 26233820, + 6868338, + 23458654, + 24370731, + 26126954, + 5070119, + 24416075 + ] + } +} +``` + +
+ +#### 未知消息 + +`PLAY_TOGETHER` +
+查看消息示例: + +示例1: +```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 + } +} +``` +示例2 +```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 + } +} +``` +
+ + diff --git a/docs/live/redpocket.md b/docs/live/redpocket.md new file mode 100644 index 0000000..15a8430 --- /dev/null +++ b/docs/live/redpocket.md @@ -0,0 +1,130 @@ +# 直播间人气红包 + +- [获取指定直播间的红包信息](#获取指定直播间的红包信息) + +--- + +## 获取指定直播间的红包信息 + +> 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' +``` + +
+查看响应示例: + +```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 + } +} +``` + +
diff --git a/docs/live/user.md b/docs/live/user.md new file mode 100644 index 0000000..6f3fa5b --- /dev/null +++ b/docs/live/user.md @@ -0,0 +1,363 @@ +# 直播间用户实用 API + +- [直播间用户实用 API](#直播间用户实用-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:成功
-1002002:参数异常
-500:服务器异常 | +| message | str | 错误信息 | 默认为 "0" | +| ttl | str | 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:未点亮
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" +``` + +
+查看响应示例: + +```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 + } +} +``` + +
+ +## 佩戴勋章 + +> 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 | str | 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 (){ + + } +}) +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "佩戴成功", + "ttl": 1, + "data": {} +} +``` + +
+ +## 直播签到 + +> https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign + +_请求方式:GET_ + +认证方式:Cookie(SESSDATA)或 APP + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------- | +| code | num | 返回值 | 0:成功
1:参数错误 | +| ttl | str | 1 | | +| message | str | 错误信息 | 默认为当日签到奖励内容 | +| data | obj | 信息本体 | 默认为空 | + +## 本月直播签到信息 + +> https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/WebGetSignInfo + +_请求方式:GET_ + +认证方式:Cookie(SESSDATA)或 APP + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------- | +| code | num | 返回值 | 0:成功 | +| ttl | str | 1 | | +| message | str | 错误信息 | 默认为0 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ---------------------------- | ---------------------- | +| text | str | 今日签到奖励信息 | 默认为空 | +| specialText | str | 连续签到奖励信息 | 默认为空 | +| status | num | 签到状态 | 0:未签到
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 | 当月已签到且有特殊奖励日列表 | 默认为空 | + +
+查看响应示例: + +```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 + ] + } +} +``` + +
+ +## 上月直播签到信息 + +> https://api.live.bilibili.com/sign/getLastMonthSignDays + +_请求方式:GET_ + +认证方式:Cookie(SESSDATA)或 APP + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---------------------- | +| code | num | 返回值 | 0:成功 | +| ttl | str | 1 | | +| message | str | 错误信息 | 默认为0 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------------- | ----- | ---------------------------- | -------- | +| days | num | 上月天数 | | +| month | num | 上月月份值 | | +| hadSignDays | num | 上月已签到天数 | 默认为0 | +| signDaysList | array | 上月已签到日列表 | 默认为空 | +| signBonusDaysList | array | 上月已签到且有特殊奖励日列表 | 默认为空 | + +
+查看响应示例: + +```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 + ] + } +} +``` + +
diff --git a/docs/login/exit.md b/docs/login/exit.md new file mode 100644 index 0000000..1fed409 --- /dev/null +++ b/docs/login/exit.md @@ -0,0 +1,72 @@ +# 退出账号登录 + +- [退出登录(web 端)](#退出登录web端) + +--- + +## 退出登录(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..a4ec5c7 --- /dev/null +++ b/docs/login/login_action/QR.md @@ -0,0 +1,636 @@ +# 二维码登录 + + + +- [扫码登录流程(伪代码)](#扫码登录流程伪代码) +- [web端扫码登录](#web端扫码登录) + - [申请二维码(web端)](#申请二维码web端) + - [扫码登录(web端)](#扫码登录web端) +- [web端扫码登录-旧版](#web端扫码登录-旧版) + - [申请二维码(web端-旧版)](#申请二维码web端-旧版) + - [扫码登录(web端-旧版)](#扫码登录web端-旧版) +- [TV端扫码登录](#TV端扫码登录) + - [申请二维码(TV端)](#申请二维码TV端) + - [扫码登录(TV端)](#扫码登录TV端) + +--- + +## 扫码登录流程(伪代码) + +```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* + +密钥超时为180秒 + +验证登录成功后会进行设置以下cookie项: + +`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct` + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------------|-----|--------|-----|-----| +| qrcode_key | str | 扫码登录秘钥 | 非必要 | | + +**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端-旧版) + +> 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:成功 | +| 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 方式必要 | 仅可用`4409e2ce8ffd12b8` | +| local_id | str | 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方式必要 | 仅可用`4409e2ce8ffd12b8` | +| auth_code | str | 扫码秘钥 | 必要 | | +| local_id | str | 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" + ] + } +} +``` + +
diff --git a/docs/login/login_action/SMS.md b/docs/login/login_action/SMS.md new file mode 100644 index 0000000..112dc62 --- /dev/null +++ b/docs/login/login_action/SMS.md @@ -0,0 +1,258 @@ +# 短信登录 + +- [获取国际冠字码_web端](#获取国际冠字码_web端) +- [发送短信验证码_web端](#发送短信验证码_web端) +- [使用短信验证码登录_web端](#使用短信验证码登录_web端) + +--- + +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" + }, + ………… + ] + } +} +``` + +
+ +## 发送短信验证码_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" + } +} +``` + +
+ +## 使用短信验证码登录_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..d0def6f --- /dev/null +++ b/docs/login/login_action/password.md @@ -0,0 +1,499 @@ +# 密码登录 + +- [密码登录流程(伪代码)](#密码登录流程伪代码) +- [web端密码登录](#web端密码登录) + - [获取公钥&盐(web端)](#获取公钥&盐web端) + - [登录操作(web端)](#登录操作web端) +- [web端密码登录-旧版](#web端密码登录-旧版) + - [获取公钥&盐(web端-旧版)](#获取公钥&盐web端-旧版) + - [登录操作(web端-旧版)](#登录操作web端-旧版) +- [APP端密码登录](#APP端密码登录) + - [获取公钥&盐(APP端)](#获取公钥&盐APP端) + - TODO:登录操作(APP端) +- [登录密码的加密实例](#登录密码的加密实例) + +--- + +## 密码登录流程(伪代码) + +```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); + } +} + +``` \ No newline at end of file diff --git a/docs/login/login_action/readme.md b/docs/login/login_action/readme.md new file mode 100644 index 0000000..d89ac14 --- /dev/null +++ b/docs/login/login_action/readme.md @@ -0,0 +1,99 @@ +# 登录操作 + +人机验证方式登录包含**账号密码登录**与手**机短信验证码登录** + +**注:扫码登录**不需要进行**人机验证**,故**不使用**以下接口 + +## 扫码登录 + +- [扫码登录](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* + +**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": "" + } + } +} +``` + +
+ +### 进行验证 + +本文档为Bilibili文档,验证码为geetest极验提供,故不提供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..b306a8b --- /dev/null +++ b/docs/login/login_info.md @@ -0,0 +1,569 @@ +# 登录基本信息 + +- [导航栏用户信息](#导航栏用户信息) +- [~~登录用户信息仅部分(已弃用)~~](#~~登录用户信息仅部分(已弃用)~~) +- [登录用户信息(APP端)](#登录用户信息APP端) +- [登录用户状态数(双端)](#登录用户状态数双端) +- [获取硬币数](#获取硬币数) + +--- + +## 导航栏用户信息 + +> 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 | 0 | 作用尚不明确 | +| uname | str | 用户昵称 | | +| vipDueDate | num | 会员到期时间 | 毫秒 时间戳 | +| vipStatus | num | 会员开通状态 | 0:无
1:有 | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度及以上大会员 | +| vip_pay_type | num | 会员开通状态 | 0:无
1:有 | +| vip_theme_type | num | 0 | 作用尚不明确 | +| 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 | 0 | 作用尚不明确 | +| answer_status | num | 0 | 作用尚不明确 | + +`data`中的`level_info`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------------------ | ---- | +| current_level | num | 当前等级 | | +| current_min | num | 当前等级经验最低值 | | +| current_exp | num | 当前经验 | | +| next_exp | 小于6级时:num
6级时:str | 升级下一等级需达到的经验 |当用户等级为Lv6时,值为`--`,代表无穷大 | + +`data`中的`official`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ------------------------------------------------- | +| role | num | 认证类型 | 0:无
1 2 7:个人认证
3 4 5 6:机构认证 | +| 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 | 0 | 作用尚不明确 | + +`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 | 0 | 作用尚不明确 | + +**示例:** + +```shell +curl 'https://api.bilibili.com/nav' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "isLogin":true, + "email_verified":1, + "face":"http://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "level_info":{ + "current_level":5, + "current_min":10800, + "current_exp":17065, + "next_exp":28800 + }, + "mid":293793435, + "mobile_verified":1, + "money":33.4, + "moral":70, + "official":{ + "role":0, + "title":"", + "desc":"", + "type":-1 + }, + "officialVerify":{ + "type":-1, + "desc":"" + }, + "pendant":{ + "pid":0, + "name":"", + "image":"", + "expire":0, + "image_enhance":"" + }, + "scores":0, + "uname":"社会易姐QwQ", + "vipDueDate":1612454400000, + "vipStatus":1, + "vipType":2, + "vip_pay_type":1, + "vip_theme_type":0, + "vip_label":{ + "path":"", + "text":"年度大会员", + "label_theme":"annual_vip" + }, + "vip_avatar_subscript":1, + "vip_nickname_color":"#FB7299", + "wallet":{ + "mid":293793435, + "bcoin_balance":8, + "coupon_balance":5, + "coupon_due_time":0 + }, + "has_shop":false, + "shop_url":"", + "allowance_count":0, + "answer_status":0 + } +} +``` + +
+ +## ~~登录用户信息仅部分(已弃用)~~ + +
+查看折叠内容 + +> 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 + } +} +``` + +
\ No newline at end of file diff --git a/docs/login/login_notice.md b/docs/login/login_notice.md new file mode 100644 index 0000000..250327e --- /dev/null +++ b/docs/login/login_notice.md @@ -0,0 +1,74 @@ +# 登录记录 + +- [查询登录记录](#查询登录记录) + +--- + +## 查询登录记录 + +> https://api.bilibili.com/x/safecenter/login_notice + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ---------- | ------ | ------------------------------------------------------------ | +| mid | num | 用户mid | 必要 | | +| buvid | str | 设备虚拟id | 非必要 | web端为操作登录接口时Cookie中的`buvid3`
若登录设备无`buvid`则留空 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| 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.***.**" + } +} +``` + +
diff --git a/docs/login/member_center.md b/docs/login/member_center.md new file mode 100644 index 0000000..bd91629 --- /dev/null +++ b/docs/login/member_center.md @@ -0,0 +1,675 @@ +# 个人中心 + +- [获取我的信息](#获取我的信息) +- [查询每日奖励状态](#查询每日奖励状态) +- [查询每日投币获得经验数](#查询每日投币获得经验数) +- [查询大会员状态](#查询大会员状态) +- [查询账号安全情况](#查询账号安全情况) +- [查询账号实名认证状态](#查询账号实名认证状态) +- [查询实名认证详细信息](#查询实名认证详细信息) +- [查询硬币变化情况](#查询硬币变化情况) +- [修改个人签名](#修改个人签名) + +--- + +## 获取我的信息 + +> 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:已完成 | +| tel | bool | 绑定手机号 | false:未完成
true:已完成
首次完成完成奖励100经验 | +| safe_question | bool | 设置密保问题 | false:未完成
true:已完成 | +| 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 + +*请求方式:GET* + +认证方式:仅可Cookie(SESSDATA) + +鉴权方式:Cookie中`DedeUserID`存在且不为0 + +该接口实时更新,未发现延迟 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------------------- | ----------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| number | num | 每日投币所奖励的经验 | 上限为50
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "number": 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 + } +} +``` + +
+ +## 查询硬币变化情况 + +> httpsss://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 +} +``` + +
+ + diff --git a/docs/manga/Activity.md b/docs/manga/Activity.md new file mode 100644 index 0000000..afc25ec --- /dev/null +++ b/docs/manga/Activity.md @@ -0,0 +1,79 @@ +# 漫画任务操作 + +- [漫画任务操作](#漫画任务操作) + - [分享漫画](#分享漫画) + +## 分享漫画 + +> 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..07b0a97 --- /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 文件路径 | 解密详见[此处](./unlock_index_data.md) | +| 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 +``` + +备注:若访问 `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..225144c --- /dev/null +++ b/docs/manga/Season.md @@ -0,0 +1,439 @@ +# 漫画赛季 + +- [漫画赛季](#漫画赛季) + - [获取赛季信息](#获取赛季信息) + - [赛季奖励领取](#赛季奖励领取) + +_漫画赛季仅在 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..e8d3e4a --- /dev/null +++ b/docs/manga/User.md @@ -0,0 +1,730 @@ +# 获取拥有的漫读券列表 + +> https://manga.bilibili.com/twirp/user.v1.User/GetCoupons + +*请求方式: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 ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- | +| 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..e6f9c39 --- /dev/null +++ b/docs/manga/index_file.md @@ -0,0 +1,277 @@ +# data.index + +- [data.index文件解析](#data.index文件解析) + - [获取data.index](#获取data.index) + - [文件解密算法](#文件解密算法) + - [进行解密操作](#进行解密操作) +- [data.index内容](#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..c4409c4 --- /dev/null +++ b/docs/manga/light_card.md @@ -0,0 +1,204 @@ +# 获取轻享卡信息 + +> https://manga.bilibili.com/twirp/card.v1.Card/GetUserLightCard + +*请求方式:POST* + +是否需要登录:`是` + +认证方式:Cookie(SESSDATA)/ APP + +Content-Type:`application/x-www-form-urlencoded` + +**URL参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------------|-----|----------------|-----|-----------------| +| 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`开始 | + +**json回复:** + +根对象: + +| 字段名 | 类型 | 内容 | 备注 | +|------|-----|-----|----------------------------------------------------| +| code | num | 响应码 | 0:成功
3:今日已领取,请明日再来
3:还未满足领取条件
4:找不到数据~ | +| 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..4d121f6 --- /dev/null +++ b/docs/manga/point_shop.md @@ -0,0 +1,451 @@ +# 积分商城 + +- [获取当前持有点数](#获取当前持有点数) +- [获取兑换奖品列表](#获取兑换奖品列表) +- [兑换物品](#兑换物品) +- [获取兑换历史记录](#获取兑换历史记录) +- [获取玩法说明](#获取玩法说明) + +*积分商城由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..4753391 --- /dev/null +++ b/docs/message/msg.md @@ -0,0 +1,65 @@ +# 通知消息 + +- [未读消息数](#未读消息数) + +--- + +## 未读消息数 + +> https://api.bilibili.com/x/msgfeed/unread + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +data 对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------------- | ------------ | +| at | num | 未读at数 | | +| chat | num | 0 | 作用尚不明确 | +| like | num | 未读点赞数 | | +| reply | num | 未读回复数 | | +| sys_msg | num | 未读系统通知数 | | +| up | num | UP主助手信息数 | | + +**示例:** + +以下信息代表了未读点赞数为10,未读回复数为4,未读at消息数为3,未读系统通知数为2,UP主助手信息数为1 + +```shell +curl 'https://api.bilibili.com/x/msgfeed/unread' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "at": 3, + "chat": 0, + "like": 10, + "reply": 4, + "sys_msg": 2, + "up": 1 + } +} +``` + +
diff --git a/docs/message/private_msg.md b/docs/message/private_msg.md new file mode 100644 index 0000000..598e17f --- /dev/null +++ b/docs/message/private_msg.md @@ -0,0 +1,374 @@ +# 私信 + +- [未读私信数](#未读私信数) +- [发送私信(web端)](#发送私信web端) +- [私信消息记录](#私信消息记录) +--- + +## 未读私信数 + +> https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-6:账号未登录 | +| message | str | 错误信息 | 默认为ok | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data` 对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | -------------------- | ---- | +| unfollow_unread | num | 未关注用户未读私信数 | | +| follow_unread | num | 已关注用户未读私信数 | | +| _gt_ | num | 0 | | + +**示例:** + +以下信息代表了为未关注用户未读私信数为`1`条,已关注用户未读私信数为`6`条 + +```shell +curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "ok", + "message": "ok", + "data": { + "unfollow_unread": 1, + "follow_unread": 6, + "_gt_": 0 + } +} +``` + +
+ +## 发送私信(web端) + +> https://api.vc.bilibili.com/web_im/v1/web_im/send_msg + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数(application/x-www-form-urlencoded):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------------------ | ------------------------------------ | ------------------------ | ------ | -------------------------------------- | +| msg[sender_uid] | num | 发送者mid | 必要 | | +| msg[receiver_id] | num | 接收者mid | 必要 | | +| msg[receiver_type] | num | 1 | 必要 | 固定为1 | +| msg[msg_type] | num | 消息类型 | 必要 | 1:发送文字
2:发送图片
5:撤回消息 | +| msg[msg_status] | num | 0 | 非必要 | | +| msg[dev_id] | string | 372778FD-E359-461D-86A3-EA2BCC6FF52A | 必要 | **获取方式在下面** | +| msg[timestamp] | num | 时间戳(秒) | 必要 | | +| msg[content] | 发送文字时:str
撤回消息时:num | 消息内容 | 必要 | **详见下表** | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +--- + +**dev_id的获取** + +以JS为例: + +```javascript +const deviceid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function (name) { + let randomInt = 16 * Math.random() | 0; + return ("x" === name ? randomInt : 3 & randomInt | 8).toString(16).toUpperCase() +})); +``` + +代码来自 [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) + +以Java为例 + +```java +public class Util{ + private String getDevId() { + char[] b = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + char[] s = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".toCharArray(); + for (int i = 0; i < s.length; i++) { + if ('-' == s[i] || '4' == s[i]) { + continue; + } + int randomInt = (int) (16 * Math.random()); + if ('x' == s[i]) { + s[i] = b[randomInt]; + } else { + s[i] = b[3 & randomInt | 8]; + } + } + return new String(s); + } +} +``` +--- + +`msg[content]`消息内容: + +当发送文字时(`msg[msg_type]=1`): + +该参数为json序列字串 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ---- | +| content | str | 私信内容 | | + +当发送图片时(`msg[msg_type]=2`): + +该参数为json序列字串 + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ---- | -------- | :-------------------------------------------- | +| url | str | 图片url | 默认为B站相簿图片上传通道
也可用三方图床 | +| width | num | 图片的宽 | 单位:像素(非必要) | +| height | num | 图片的高 | 单位:像素(非必要) | +| type | str | 图片格式 | (非必要) | +| original | num | 1 | **作用未知**(非必要) | +| size | num | 文件大小 | 单位:千字节(非必要)
__向上取整__ | + +当撤回消息时(`msg[msg_type]=5`): + +该参数为数值,为目标消息的` msg_key ` + +**json回复:** + +根对象: +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ----------- | +| code | num | 返回值 | 0:成功
| +| message | str | 错误信息 | 默认为ok | +| ttl | num | | 默认为1 | +| data | obj | 主体 | 出错时为空 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ---------- | ------------ | +| msg_key| num | 消息唯一id | | +| msg_content | str | 发送的消息 | | +| key_hit_infos | 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[dev_id] =372778FD-E359-461D-86A3-EA2BCC6FF52A' \ +--data-urlencode 'msg[timestamp] =1626181379' \ +--data-urlencode 'msg[content]={"content":"up主你好,\n催更[doge]"}' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{"code":0, +"message":"0", +"ttl":1, +"data":{"msg_key":6984393491767669026, + "msg_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[content]={"url":https://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg}' \ +--data-urlencode 'csrf_token=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code":0, + "msg":"ok", + "message":"ok", + "data":{ + "msg_key":6852570013146024354, + "_gt_":0 + } +} +``` + +
+ +## 私信消息记录 + +> https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs + +*请求方式:GET* + +此接口有设计缺陷,能够获取已经撤回,无法显示(如 发送私信 中msg[msg_type]:3)的消息 + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------------ | ------------------ | +| sender_device_id | num | 发送者设备 | 可选 | 1 | +| talker_id | num | 聊天对象的UID | 必要 | -------------- | +| session_type | num | 聊天对象的类型 | 必要 | 1为用户,2为粉丝团 | +| size | num | 列出消息条数 | 可选 | 默认是20 | +| build | num | 未知 | 可选 | 默认是0 | +| mobi_app | str | 设备 | 可选 | web | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ------ | -------- | ---------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| msg | str | 错误信息 | 默认为0 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 数据列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| messages | array | 聊天记录列表 | | +| has_more | num | 0 | | +| min_seqno | num | 未知 | | +| max_seqno | num | 未知 | | +| e_infos | array | 聊天表情列表 | | + +`messages`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| sender_uid | num | 发送者uid | 注意名称是sender_uid | +| receiver_type | num | 与session_type对应 | 1为用户,2为粉丝团 | +| receiver_id | num | 接收者uid | 注意名称是receiver_id | +| msg_type | num | 消息类型 | 1:文字消息
2:图片消息
5:撤回的消息
12、13:通知 | +| content | str | 消息内容 | 此处存在设计缺陷 | +| msg_seqno | num | 未知 | | +| timestamp | num | 消息发送时间戳 | | +| at_uids | array | 未知 | | +| msg_key | num | 未知 | | +| msg_status | num | 消息状态 | 0 | +| notify_code |str | 未知 | | +| new_face_version |num | 未知 | 疑似只在粉丝团消息中出现 | + +`e_infos`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| text | str | 表情名称 | | +| uri | str | 表情链接 | | +| size | num | 表情尺寸 | 1 | + +**示例:** + +获取与目标用户`mid=123`私信记录: + +```shell +curl 'https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs?sender_device_id=1&talker_id=123&session_type=1&size=20&build=0&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 + }, + { + "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": "" + }, + ], + "has_more": 0, + "min_seqno": 308188515844097, + "max_seqno": 309675413389322, + "e_infos": [ + { + "text": "[口罩]", + "url": "http://i0.hdslb.com/bfs/emote/3ad2f66b151496d2a5fb0a8ea75f32265d778dd3.png", + "size": 1 + } + ] + } +} +``` + +
+ diff --git a/docs/newbie_exam/action.md b/docs/newbie_exam/action.md new file mode 100644 index 0000000..738a6a4 --- /dev/null +++ b/docs/newbie_exam/action.md @@ -0,0 +1,456 @@ +# 操作 + +- [提交答题](#提交答题) + - [提交基础题](#提交基础题) + - [提交附加题](#提交附加题) + - [提交自选题](#提交自选题) +- [获取验证码](#获取验证码) +- [提交验证码](#提交验证码) +- [提交自选题分类](#提交自选题分类) +- [提前交卷](#提前交卷) + +--- + +## 提交答题 + +### 提交基础题 + +> 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..5b52e27 --- /dev/null +++ b/docs/newbie_exam/fetch.md @@ -0,0 +1,263 @@ +# 拉取题目 + +- [拉取基础题](#拉取基础题) +- [拉取附加题](#拉取附加题) +- [拉取自选题](#拉取自选题) + +--- + +## 拉取基础题 + +> 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..135d6c3 --- /dev/null +++ b/docs/newbie_exam/info.md @@ -0,0 +1,556 @@ +# 查询信息 + +- [查询答题状态](#查询答题状态) +- [查询自选题分类](#查询自选题分类) +- [查询答题结果](#查询答题结果) + +--- + +## 查询答题状态 + +> 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..33dbaba --- /dev/null +++ b/docs/note/action.md @@ -0,0 +1,135 @@ +# 笔记操作 + +- [保存视频笔记](#保存视频笔记) +- [删除视频笔记](#删除视频笔记) + +--- + +## 保存视频笔记 + +> 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..2014a05 --- /dev/null +++ b/docs/note/info.md @@ -0,0 +1,315 @@ +# 笔记详细信息 + +- [查询该稿件是否禁止笔记](#查询该稿件是否禁止笔记) +- [查询私有笔记内容](#查询私有笔记内容) +- [查询公开笔记内容](#查询公开笔记内容) + +--- + +## 查询该稿件是否禁止笔记 + +> 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..0efe584 --- /dev/null +++ b/docs/note/list.md @@ -0,0 +1,660 @@ +# 笔记列表 + +- [查询稿件私有笔记](#查询稿件私有笔记) +- [查询用户私有笔记](#查询用户私有笔记) +- [查询稿件公开笔记](#查询稿件公开笔记) +- [查询用户公开笔记](#查询用户公开笔记) + +--- + +## 查询稿件私有笔记 + +> 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/other/API_sign.md b/docs/other/API_sign.md new file mode 100644 index 0000000..767b12d --- /dev/null +++ b/docs/other/API_sign.md @@ -0,0 +1,84 @@ +# API 签名与鉴权 + +部分客户端专用的 rest api 存在基于 sign 的鉴权,需要使用规定的`appkey`及其对应的`appsec`与原始请求参数进行签名计算 + +不同`appkey`对应不同的 app (如客户端、概念版、必剪、漫画、bililink等) + +不同平台同 app 也会存在不同的 `appkey`(如安卓端、ios端、TV端等) + +同平台同 app 下不同功能也会存在不同的 `appkey`(如登录专用、取流专用等) + +**appkey与appsec一一对应** + +- [API签名的计算方式](#API签名的计算方式) +- [已知的APPKey](#已知的APPKey) + +--- + +## API签名的计算方式 + +首先为参数中添加`appkey`字段,然后按照参数的 key 重新排序,再将重排序后的参数使用 url query 格式序列化拼接与该 appkey 相对应的 appsec (盐值) 进行**md5 hash计算**(32位小写),该 hash 便是 API 签名 + +为参数尾部增添`sign`字段,它的值为上一步计算所得的 hash,一并作为表单提交 + +**实例:** + +使用 appkey = `1d8b6e7d45233436`, appsec = `560c52ccd288fed045859ed18bffd973` 对如下 `params` 参数进行签名 + +```python +import hashlib +import urllib.parse + +def appsign(params, appkey, appsec): + '为请求参数进行 api 签名' + 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) +``` + +输出以下内容,分别是进行 api 签名后参数的 dict 以及 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 +``` + +## 已知的APPKey + +| appkey | appsec(sign盐值) | 平台 | 应用 | 备注 | +|------------------|----------------------------------|-----|----------|------| +| 07da50c9a0bf829f | 25bdede4e1581c836cab73a48790ca6e | 安卓 | 概念版 | | +| 1d8b6e7d45233436 | 560c52ccd288fed045859ed18bffd973 | 安卓 | 客户端 | 一般用途 | +| 178cf125136ca8ea | 34381a26236dd1171185c0beb042e1c6 | 安卓 | 概念版 | | +| 27eb53fc9058f8c3 | c2ed53a74eeefe3cf99fbd01d8c9c375 | ios | 客户端 | 一般用途 | +| 37207f2beaebf8d7 | e988e794d4d4b6dd43bc0e89d6e90c43 | 安卓 | biliLink | | +| 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | TV | 客户端 | | +| 57263273bc6b67f6 | a0488e488d1567960d3a765e8d129f90 | 安卓 | 客户端 | | +| 8d23902c1688a798 | 710f0212e62bd499b8d3ac6e1db9302a | 安卓 | 车机版 | | +| 5dce947fe22167f9 | | 安卓 | 必剪 | | +| 7d336ec01856996b | a1ce6983bc89e20a36c37f40c4f1a0dd | 安卓 | 概念版 | | +| 85eb6835b0a1034e | 2ad42749773c441109bdc0191257a664 | | | | +| 8e16697a1b4f8121 | f5dd03b752426f2e623d7badb28d190a | 安卓 | 国际版 | | +| aae92bc66f3edfab | af125a0d5279fd576c1b4418a3e8276d | PC | 投稿工具 | | +| ae57252b0c09105d | c75875c596a69eb55bd119e74b07cfe3 | 安卓 | 国际版 | | +| bb3101000e232e27 | 36efcfed79309338ced0380abd824ac1 | 安卓 | 国际版 | | +| bca7e84c2d947ac6 | 60698ba2f68e01ce44738920a0ffe768 | 安卓 | 客户端 | 登录专用 | +| cc578d267072c94d | ffb6bb4c4edae2566584dbcacfc6a6ad | 安卓 | 轻视频 | | +| cc8617fd6961e070 | 3131924b941aac971e45189f265262be | 安卓 | 漫画 | | +| iVGUTjsxvpLeuDCf | aHRmhWMLkdeMuILqORnYZocwMBpMEOdt | 安卓 | 客户端 | 取流专用 | +| YvirImLGlLANCLvM | JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM | ios | 客户端 | 取流专用 | diff --git a/docs/other/bvid_desc.md b/docs/other/bvid_desc.md new file mode 100644 index 0000000..8fd476b --- /dev/null +++ b/docs/other/bvid_desc.md @@ -0,0 +1,389 @@ +# 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) + +--- + +- [概述](#概述) + - [格式](#格式) + - [实质](#实质) + - [avid发号方式的变化](#avid发号方式的变化) + +- [算法概述](#算法概述) + - [av->bv算法](#av->bv算法) + - [bv->av算法](#bv->av算法) + +- [编程实现](#编程实现) + + - [Python](#Python) + + - [C](#C) + + - [TypeScript](#TypeScript) + + - [Java](#Java) + + - [Kotlin](#Kotlin) + + - [Golang](#Golang) + +--- + +## 概述 + +### 格式 + +“bvid”恒为长度为12的字符串,前两个字母为大写“BV”,后10个为base58计算结果 + +### 实质 + +“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算法 + +注:本算法及示例程序仅能编码及解码avid<` 29460791296 `,无法验证avid>=` 29460791296 `的正确性 + +1. a=(avid⊕177451812)+8728348608 +2. 以i为循环变量循环6次b[i]=(a/58^i)%58 +3. 将b[i]中各个数字转换为以下码表中的字符 + +码表: + +> fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF + +4. 初始化字符串b[i]=`BV1 4 1 7 ` + +5. 按照以下字符顺序编码表编码并填充至b[i] + +字符顺序编码表: + +> 0 -> 11 +> +> 1 -> 10 +> +> 2 -> 3 +> +> 3 -> 8 +> +> 4 -> 4 +> +> 5 -> 6 + + +### bv->av算法 + +为以上算法的逆运算 + +## 编程实现 + +使用Python、C、TypeScript、Java、Kotlin以及Golang作为示例,欢迎社区提交更多例程 + +### Python + +```python +table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF' # 码表 +tr = {} # 反查码表 +# 初始化反查码表 +for i in range(58): + tr[table[i]] = i +s = [11, 10, 3, 8, 4, 6] # 位置编码表 +XOR = 177451812 # 固定异或值 +ADD = 8728348608 # 固定加法值 + +def bv2av(x): + r = 0 + for i in range(6): + r += tr[x[s[i]]] * 58 ** i + return (r - ADD) ^ XOR + +def av2bv(x): + x = (x ^ XOR) + ADD + r = list('BV1 4 1 7 ') + for i in range(6): + r[s[i]] = table[x // 58 ** i % 58] + return ''. join(r) + +print(av2bv(170001)) +print(bv2av('BV17x411w7KC')) +``` + +输出为: + +``` +BV17x411w7KC +170001 +``` + +### 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 +``` diff --git a/docs/other/errcode.md b/docs/other/errcode.md new file mode 100644 index 0000000..534f39d --- /dev/null +++ b/docs/other/errcode.md @@ -0,0 +1,65 @@ +# 公共错误码 + +下表为大部分接口返回值中`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 | 撞车跳转 | +| -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 | 扣节操失败 | +|-8888|对不起,服务器开小差了~ (ಥ﹏ಥ)| diff --git a/docs/other/picture.md b/docs/other/picture.md new file mode 100644 index 0000000..2b1aaad --- /dev/null +++ b/docs/other/picture.md @@ -0,0 +1,44 @@ +# 图片格式化 + +对于\*.hdslb.com/bfs下的图片文件都可以使用以下格式化参数 + +> \*.hdslb.com/bfs/\*/\*.\[jpg/png/gif\]@{width}w\_{high}h\_{quality}q.{format} + +| 可选参数 | 含义 | 备注 | +| -------- | ---------------- | ---------------- | +| width | 图片最大限制宽度 | | +| high | 图片最大限制高度 | | +| quality | 图片质量百分比 | 仅限webp | +| format | 图片格式 | 仅限png/jpg/webp | + +**示例:** + +原始图片 + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg + +![](https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg) + +高度限制为100 + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100h + +![](https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100h) + +宽度限制为100 + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100w + +![](https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100w) + +转换格式为webp + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.webp + +![](https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.webp) + +转换为webp图片质量为1% + +https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q.webp + +![](https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q.webp) \ No newline at end of file diff --git a/docs/other/time_stamp.md b/docs/other/time_stamp.md new file mode 100644 index 0000000..eff0881 --- /dev/null +++ b/docs/other/time_stamp.md @@ -0,0 +1,79 @@ +# 获取当前时间戳 + +- [获取当前时间戳](#获取当前时间戳) + - [获取当前时间戳](#获取当前时间戳-1) + - [获取服务器端UTC时间](#获取服务器端utc时间) + +--- + +## 获取当前时间戳 + +> https://api.bilibili.com/x/report/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 + } +} +``` + +
+ +## 获取服务器端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/ranking&dynamic/85videos.md b/docs/ranking&dynamic/85videos.md new file mode 100644 index 0000000..206f844 --- /dev/null +++ b/docs/ranking&dynamic/85videos.md @@ -0,0 +1,199 @@ + + +# 入站必刷 + +[获取入站必刷85个视频](#85videos) + +## 获取入站必刷85个视频 + +> https://api.bilibili.com/x/web-interface/popular/precious + +**url参数** + +| 字段 | 类型 | 内容 | 必要性 | 备注 | +| ------- | ----- | -------- | --------------------------- | +| page | int | 第几页 | 不必要 | 默认为1 | +| page_size | int | 每一页的视频数 | 不必要 | 可以设为 85 获取所有的视频 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 视频列表 | | + +`data` 字段: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| title | string | 标题 | 入站必刷 | +| media_id | int | media_id | | +| explain | string | 解释(概括)| 我不允许还有人没看过这85个宝藏视频! | +| list | list | 列表 | | + +`data` 中的 `list` 字段: + +| 字段 | 类型 | 内容 | 备注 | +| - | - | - | - | +| aid | int | aid | | +| videos | int | 视频数? | | +| tid | int | 分区 id | | +| tname | string | 分区名称 | | +| copyright | int | 版权 | | +| pic | url | 封面 url | | +| title | string | 标题 | | +| pubdate | int | 发布时间 | 时间戳 | +| ctime | int | 暂不清楚 | 时间戳 | +| desc | string | 简介 | | +| state | int | 暂不清楚 | | +| duration | int | 视频时长 | 单位为秒 | +| mission_id | int | 暂不清楚 | | +| rights | dict | 暂不清楚 | 好像没啥么用 | +| owner | dict | 作者 | | +| stat | dict | 状态 | | +| dynamic | string | 动态发布时写的文字 | | +| cid | int | cid | | +| dimension | dict | 视频的一些属性 | | +| season_id | int | 暂不清楚 | | +| short_link | string | 短链 | | +| short_link_v2 | string | 短链 | 第二版 | +| bvid | string | bvid | | +| season_type | int | 分区 tid? | | +| is_ogv | bool | 暂不清楚 | | +| ogv_info | dict/null? | 暂不清楚 | | +| rcmd_reason | string? | 暂不清楚 | | +| achievement | string | 荣誉概述 | | + +**示例:** + +``` shell +curl 'https://api.bilibili.com/x/web-interface/popular/precious' +``` +
+查看响应事例: + +``` json +{ + "code":0, + "message":"0", + "ttl":1, + "data":{ + "title":"入站必刷", + "media_id":496307088, + "explain":"我不允许还有人没看过这85个宝藏视频!", + "list":[ + { + "aid":715024588, + "videos":1, + "tid":233, + "tname":"极客DIY", + "copyright":1, + "pic":"http://i1.hdslb.com/bfs/archive/55ce9a4d1797ec56a0d4ed727f1a279b89ec3664.jpg", + "title":"【才浅】15天花20万元用500克黄金敲数万锤纯手工打造三星堆黄金面具", + "pubdate":1618207101, + "ctime":1618207101, + "desc":"倾家荡产求三连支持!!!请大家帮忙给新系列想个名字,点赞一百万的话制作三星堆黄金权杖,不会真的可以点到一百万吧\nbgm:\n-Old-B - 【Free Beat】侠之道 、于剑飞 - 01 片头曲 帝陵、AniFace - 夜辞秋江", + "state":0, + "duration":717, + "mission_id":16881, + "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":2200736, + "name":"才疏学浅的才浅", + "face":"http://i2.hdslb.com/bfs/face/1f4819b224cd882025a9a6a5f2c6680c332f37bc.jpg" + }, + "stat":{ + "aid":715024588, + "view":13833908, + "danmaku":215105, + "reply":39792, + "favorite":619513, + "coin":2484204, + "share":122302, + "now_rank":0, + "his_rank":1, + "like":2338710, + "dislike":0 + }, + "dynamic":"倾家荡产求三连!!", + "cid":323723441, + "dimension":{ + "width":1920, + "height":1080, + "rotate":0 + }, + "season_id":19992, + "short_link":"https://b23.tv/BV16X4y1g7wT", + "short_link_v2":"https://b23.tv/BV16X4y1g7wT", + "bvid":"BV16X4y1g7wT", + "season_type":0, + "is_ogv":false, + "ogv_info":null, + "rcmd_reason":"", + "achievement":"央视新华社点赞,博物馆喊话来上班!" + }, + ... and more + ] + } +} +``` +
diff --git a/docs/ranking&dynamic/dynamic.md b/docs/ranking&dynamic/dynamic.md new file mode 100644 index 0000000..941a0b1 --- /dev/null +++ b/docs/ranking&dynamic/dynamic.md @@ -0,0 +1,199 @@ +# 分区最新视频 + +- [获取分区最新视频列表](#获取分区最新视频列表) + +--- + +## 获取分区最新视频列表 + +> https://api.bilibili.com/x/web-interface/dynamic/region + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ------- | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | 默认为5 | +| rid | num | 目标分区tid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ------ | -------- | ---- | +| archives | array | 视频列表 | | +| page | obj | 页面信息 | | + +`data`中的`archives`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 视频1 | | +| n | obj | 视频(n+1) | | +| …… | obj | …… | …… | + +`data`中的`archives`数组中的对象: + +基本同[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的data对象 + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ---- | +| count | num | 总计视频数 | | +| num | num | 当前页码 | | +| size | num | 每页项数 | | + +**示例:** + +获取`tid=21`(生活->日常)分区中的2条最新动态视频信息 + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/dynamic/region' \ +--data-urlencode 'rid=21' \ +--data-urlencode 'ps=2' \ +--data-urlencode 'pn=1' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "page": { + "num": 1, + "size": 2, + "count": 189 + }, + "archives": [{ + "aid": 56998612, + "videos": 24, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/76536be425ed98ba1f1b9aef1ada3a09f94c9f04.jpg", + "title": "操控百万UP主的一天!", + "pubdate": 1562568733, + "ctime": 1561624175, + "desc": "拍这个视频还挺辛苦的,希望大家喜欢的话给个三连叭!", + "state": 0, + "attribute": 536887424, + "duration": 1864, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 0, + "ugc_pay": 0, + "is_cooperation": 0, + "ugc_pay_preview": 0, + "no_background": 0 + }, + "owner": { + "mid": 2206456, + "name": "花少北丶", + "face": "http://i1.hdslb.com/bfs/face/86ef6895a8f88c80f2885e7eb9ba7989db437b93.jpg" + }, + "stat": { + "aid": 56998612, + "view": 2863604, + "danmaku": 82588, + "reply": 5502, + "favorite": 65471, + "coin": 104905, + "share": 5815, + "now_rank": 0, + "his_rank": 12, + "like": 165638, + "dislike": 0 + }, + "dynamic": "你想看的这里都有!", + "cid": 99548502, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV1Wx411d7jX" + }, { + "aid": 837503204, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/7025827d8dbfc6139a2d066daa51a08897282534.jpg", + "title": "“都是小人物,就别说什么大话了,活着就行”", + "pubdate": 1585264054, + "ctime": 1585264054, + "desc": "每一位用心生活的小人物,都是各自生活中不平凡的英雄!", + "state": 0, + "attribute": 16512, + "duration": 295, + "mission_id": 12868, + "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": 350928606, + "name": "彼岸的岛", + "face": "http://i2.hdslb.com/bfs/face/9814b8b6defc045aa07c3bb08e8a30e63afd9f3e.jpg" + }, + "stat": { + "aid": 837503204, + "view": 142239, + "danmaku": 602, + "reply": 702, + "favorite": 4728, + "coin": 4712, + "share": 917, + "now_rank": 0, + "his_rank": 0, + "like": 7700, + "dislike": 0 + }, + "dynamic": "#全能打卡挑战##正能量##感人#", + "cid": 169901162, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "bvid": "BV1cg4y1a7tB" + }] + } +} +``` + +
diff --git a/docs/ranking&dynamic/popular.md b/docs/ranking&dynamic/popular.md new file mode 100644 index 0000000..f849eb4 --- /dev/null +++ b/docs/ranking&dynamic/popular.md @@ -0,0 +1,1298 @@ +# 热门视频 + +- [获取当前热门视频列表](#获取当前热门视频列表) + +--- + +## 获取当前热门视频列表 + +> https://api.bilibili.com/x/web-interface/popular + +_请求方式:GET_ + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | -------- | ------ | --------- | +| pn | num | 页码 | 非必要 | 默认为 1 | +| ps | num | 每页项数 | 非必要 | 默认为 20 | + +>> 注意:当携带Cookie时返回的数据的排行是个性化的 + +**json 回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为 0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------------- | ---- | +| list | array | 视频列表 | | +| no_more | bool | 是否有更多数据 | false:下页还有数据
true:下页没有数据 | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 视频1 | | +| n | obj | 视频(n+1) | | +| …… | obj | …… | …… | + +`data`中的`list`数组中的对象: + +基本同[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的data对象 + + +**示例:** + +获取当前热门视频列表(不携带 Cookie) + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/popular' \ +--data-urlencode 'ps=20' \ +--data-urlencode 'pn=1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "aid": 260200041, + "videos": 1, + "tid": 212, + "tname": "美食侦探", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/02641bbfadc63f5224834b096cc6c440e14f385f.jpg", + "title": "街头碳水大师:当北方人看到 南方那么多面食…", + "pubdate": 1662198796, + "ctime": 1662198796, + "desc": "想不到这个南方街头,竟把我俩吃到深夜…", + "state": 0, + "duration": 803, + "mission_id": 873400, + "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": 99157282, + "name": "盗月社食遇记", + "face": "http://i1.hdslb.com/bfs/face/c7fb5da587c2ec6b56ad47579933fda34c000457.jpg" + }, + "stat": { + "aid": 260200041, + "view": 295188, + "danmaku": 3590, + "reply": 1465, + "favorite": 3651, + "coin": 12006, + "share": 2039, + "now_rank": 0, + "his_rank": 0, + "like": 39568, + "dislike": 0 + }, + "dynamic": "这玩意怎么可能不好吃呢?!", + "cid": 822798408, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1fe411g7F5", + "short_link_v2": "https://b23.tv/BV1fe411g7F5", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220903a22ujdxvylswyat3oqlkj8wax_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1fe411g7F5", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "很多人点赞", "corner_mark": 0 } + }, + { + "aid": 472731550, + "videos": 1, + "tid": 17, + "tname": "单机游戏", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/7ebaad047fb96e5d14b8ebb2eabf4b39a4ef10a6.jpg", + "title": "卸载!!!!!", + "pubdate": 1662177000, + "ctime": 1662093287, + "desc": "再见!!!!!", + "state": 0, + "duration": 1090, + "mission_id": 899516, + "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": 546195, + "name": "老番茄", + "face": "http://i0.hdslb.com/bfs/face/bc5ca101313d4db223c395d64779e76eb3482d60.jpg" + }, + "stat": { + "aid": 472731550, + "view": 997762, + "danmaku": 19350, + "reply": 4339, + "favorite": 44208, + "coin": 113024, + "share": 2172, + "now_rank": 0, + "his_rank": 7, + "like": 205331, + "dislike": 0 + }, + "dynamic": "", + "cid": 821658341, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1AK411f7KR", + "short_link_v2": "https://b23.tv/BV1AK411f7KR", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220902a23i8b6s8004xd62mg3z2ol72_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1AK411f7KR", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "20万点赞", "corner_mark": 0 } + }, + { + "aid": 730159604, + "videos": 1, + "tid": 173, + "tname": "桌游棋牌", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/524de9769a0c06d8300950e24b52dbdd7a192613.jpg", + "title": "老板?架空啦!", + "pubdate": 1662188531, + "ctime": 1662184216, + "desc": "希望你喜欢这次的视频,这次玩的是《我是大老板》。\n游戏的规则不算简单:\n轮到你时,你可以选择发起生意;\n当然你也可以选择补充手牌。\n做成生意会需要一些字母,相当于需要有人投资,ABCDEF就是各位投资人;\n身份类的字母是永久的,除非别人用招募牌给挖走;\n手牌中的字母是一次性的。\n为了成功完成生意,你作为老板需要和你的合伙人商量好价钱,完成后按约定分给合伙人。\n当然,失败的生意是挣不到钱的;\n并且,你作为老板可以 决定是否做这单生意。\n数个回合后,摇骰子决定游戏是否结束;\n游戏结束时,钱最多的人就赢了。\n注意", + "state": 0, + "duration": 941, + "mission_id": 917790, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 3913194, + "name": "高斯Goh", + "face": "http://i0.hdslb.com/bfs/face/d4c65b5c6be3f9d845c15401173f98b130728851.jpg" + }, + "stat": { + "aid": 730159604, + "view": 603101, + "danmaku": 6535, + "reply": 3197, + "favorite": 13123, + "coin": 22361, + "share": 1587, + "now_rank": 0, + "his_rank": 68, + "like": 87913, + "dislike": 0 + }, + "dynamic": "", + "cid": 822547268, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1BD4y1B7ji", + "short_link_v2": "https://b23.tv/BV1BD4y1B7ji", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220903a21dbowrqfua2zw3hxxeffqtt_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1BD4y1B7ji", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "8万点赞", "corner_mark": 1 } + }, + { + "aid": 942708210, + "videos": 1, + "tid": 85, + "tname": "小剧 场", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/fc453b388f94300e69134a67f2f02d3136462c60.jpg", + "title": "【火焰醉枪】卧槽!这火焰枪竟然不是特效,30个小时匠心制作……", + "pubdate": 1662087586, + "ctime": 1662087587, + "desc": "上期做了火焰醉剑后,大家都说想看火焰醉枪,这次熬了两个大夜拍完啦,制作不易,希望大家多多支持啊!", + "state": 0, + "duration": 156, + "mission_id": 926961, + "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": 432083444, + "name": "俩大叔的功夫梦", + "face": "http://i2.hdslb.com/bfs/face/40bfa8df7854402bdecd21a9c7a67bc1bb891637.jpg" + }, + "stat": { + "aid": 942708210, + "view": 1583053, + "danmaku": 2300, + "reply": 1596, + "favorite": 21206, + "coin": 48190, + "share": 3088, + "now_rank": 0, + "his_rank": 13, + "like": 219810, + "dislike": 0 + }, + "dynamic": "【火焰醉枪】卧槽!这火焰枪竟然不是特效,30个小时匠心制作……", + "cid": 821595336, + "dimension": { "width": 3840, "height": 2160, "rotate": 0 }, + "short_link": "https://b23.tv/BV1yW4y1q78t", + "short_link_v2": "https://b23.tv/BV1yW4y1q78t", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220902a2uf2p36okkkd5tj0koh3jk17_firsti.jpg", + "pub_location": "四川", + "bvid": "BV1yW4y1q78t", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "百万播放", "corner_mark": 1 } + }, + { + "aid": 985156462, + "videos": 1, + "tid": 137, + "tname": "明星综合", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/ee633bc1f33e88a08240cb5df19a768c007871fd.jpg", + "title": "【时代少年团】《哪吒》练习室版", + "pubdate": 1662199200, + "ctime": 1662133574, + "desc": "", + "state": 0, + "duration": 254, + "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": 3670216, + "name": "TF家族", + "face": "http://i1.hdslb.com/bfs/face/1c74336b9060d40d0ccf5e8bce7c0de34526b1e3.jpg" + }, + "stat": { + "aid": 985156462, + "view": 180284, + "danmaku": 20822, + "reply": 6925, + "favorite": 4740, + "coin": 6962, + "share": 1052, + "now_rank": 0, + "his_rank": 0, + "like": 28324, + "dislike": 0 + }, + "dynamic": "", + "cid": 822227418, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1yt4y1j7RW", + "short_link_v2": "https://b23.tv/BV1yt4y1j7RW", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220902a23cnqomtt52rac3gi8wbif37_firsti.jpg", + "pub_location": "北京", + "bvid": "BV1yt4y1j7RW", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "明星综合·人气飙升", "corner_mark": 1 } + }, + { + "aid": 857527108, + "videos": 1, + "tid": 230, + "tname": "软件应用", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/9f495c058d7825b8d45f2701b4271affbf17442b.jpg", + "title": "【苏星河】我的这个微信,你们没人用过", + "pubdate": 1661953525, + "ctime": 1661952710, + "desc": "结尾有惊喜!", + "state": 0, + "duration": 654, + "mission_id": 668476, + "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": 598464467, + "name": "苏星河牛通", + "face": "http://i2.hdslb.com/bfs/face/836a17376b6d1c21200310137256c91731045d1b.jpg" + }, + "stat": { + "aid": 857527108, + "view": 6031262, + "danmaku": 10807, + "reply": 7949, + "favorite": 252749, + "coin": 111985, + "share": 20700, + "now_rank": 0, + "his_rank": 1, + "like": 413858, + "dislike": 0 + }, + "dynamic": "", + "cid": 820274225, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1tV4y1H72k", + "short_link_v2": "https://b23.tv/BV1tV4y1H72k", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220831qn3fp342hh8svfbtvora7zon7_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1tV4y1H72k", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "百万播放", "corner_mark": 1 } + }, + { + "aid": 857678378, + "videos": 1, + "tid": 76, + "tname": "美食制作", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/5007b350acb31aa5f4a14c96190273d5590a6cb2.jpg", + "title": "《 中 式 炸 鸡 》", + "pubdate": 1662197400, + "ctime": 1662135610, + "desc": "三连吗\n谢谢", + "state": 0, + "duration": 248, + "mission_id": 816705, + "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": 337521240, + "name": "记录生活的蛋黄派", + "face": "http://i0.hdslb.com/bfs/face/9ba6c7a0d3a2ebfe9db2f46219ece98e210d0269.jpg" + }, + "stat": { + "aid": 857678378, + "view": 285421, + "danmaku": 5138, + "reply": 1694, + "favorite": 2757, + "coin": 9736, + "share": 763, + "now_rank": 0, + "his_rank": 0, + "like": 56170, + "dislike": 0 + }, + "dynamic": "谢谢", + "cid": 822249262, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1sV4y1p7hB", + "short_link_v2": "https://b23.tv/BV1sV4y1p7hB", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220903qn1naqorns10fx528qp3fucqw_firsti.jpg", + "pub_location": "广东", + "bvid": "BV1sV4y1p7hB", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "5万点赞", "corner_mark": 1 } + }, + { + "aid": 602403491, + "videos": 1, + "tid": 161, + "tname": "手工", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/01bf653fd89126740b02c421207eb2519ee26f0c.jpg", + "title": "用超轻黏土捏一个小奶牛", + "pubdate": 1661607234, + "ctime": 1661607235, + "desc": "-", + "state": 0, + "duration": 60, + "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": 1160308896, + "name": "大米的摆摊日常", + "face": "http://i0.hdslb.com/bfs/face/2766a97e274c77166d208293c391b08e93cd7793.jpg" + }, + "stat": { + "aid": 602403491, + "view": 1055453, + "danmaku": 3500, + "reply": 2575, + "favorite": 23732, + "coin": 144083, + "share": 3469, + "now_rank": 0, + "his_rank": 42, + "like": 340294, + "dislike": 0 + }, + "dynamic": "", + "cid": 816374904, + "dimension": { "width": 1080, "height": 1920, "rotate": 0 }, + "short_link": "https://b23.tv/BV1pB4y157Bh", + "short_link_v2": "https://b23.tv/BV1pB4y157Bh", + "up_from_v2": 35, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220827a21lg9szf96xk8r3l38i3jet5_firsti.jpg", + "pub_location": "四川", + "bvid": "BV1pB4y157Bh", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "百万播放", "corner_mark": 1 } + }, + { + "aid": 217678690, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/1b96235f6b4736f79430362f070f96f76741b8a5.jpg", + "title": "离谱到家了!两社恐挑战去7个UP主家零元购!", + "pubdate": 1662177000, + "ctime": 1662154182, + "desc": "感谢大家的观看,这期视频剪了一个月了。希望大家喜 欢\n三十六贱笑说:这期如果点赞40W,直接拍成系列。", + "state": 0, + "duration": 1918, + "mission_id": 753163, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 285499073, + "name": "东尼ookii", + "face": "http://i2.hdslb.com/bfs/face/456b2bff7e41ab212b74e9019fda1f26362e8723.jpg" + }, + "stat": { + "aid": 217678690, + "view": 976493, + "danmaku": 11559, + "reply": 1995, + "favorite": 8791, + "coin": 37190, + "share": 1776, + "now_rank": 0, + "his_rank": 31, + "like": 133451, + "dislike": 0 + }, + "dynamic": "超 级 离 谱 新 系 列 !!!", + "cid": 822326594, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1Ja41137BA", + "short_link_v2": "https://b23.tv/BV1Ja41137BA", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220903qn2sc6o94iasldc2uix7nw6kz_firsti.jpg", + "pub_location": "广东", + "bvid": "BV1Ja41137BA", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "13万点赞", "corner_mark": 1 } + }, + { + "aid": 857726292, + "videos": 1, + "tid": 76, + "tname": "美食制作", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/1a9fe65a51c03d69fd1d4d50cff621e7b9112e29.jpg", + "title": "羊 肉 天 花 板", + "pubdate": 1662192000, + "ctime": 1662184515, + "desc": "羊肉串:\n其实我对羊肉串还是有些研究和追求的\n羊肉记得提前泡30分钟淡盐水去 膻味\n腌肉配方:2勺生抽 1勺蚝油 2勺白胡椒粉\n香料配方:半勺白糖 3勺孜然 2勺辣椒面\n同样的配方腌羊肉和香料也可以在家里炒 着着吃", + "state": 0, + "duration": 434, + "mission_id": 912283, + "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": 473524263, + "name": "澳洲阿彭", + "face": "http://i0.hdslb.com/bfs/face/954547cf631e4f986e5f9e3bfd65328600184b6f.jpg" + }, + "stat": { + "aid": 857726292, + "view": 335725, + "danmaku": 951, + "reply": 429, + "favorite": 3672, + "coin": 15611, + "share": 867, + "now_rank": 0, + "his_rank": 0, + "like": 45838, + "dislike": 0 + }, + "dynamic": "千万不要让猫进厨房", + "cid": 822587296, + "dimension": { "width": 3840, "height": 2160, "rotate": 0 }, + "season_id": 28525, + "short_link": "https://b23.tv/BV1tV4y1p7ux", + "short_link_v2": "https://b23.tv/BV1tV4y1p7ux", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220903a21elu6y2vu085u1gh47kqbdb_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1tV4y1p7ux", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "", "corner_mark": 0 } + }, + { + "aid": 815203242, + "videos": 1, + "tid": 216, + "tname": "鬼畜剧场", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/04a85276faffd2f4bd59a4a7f36cf69833af0fc2.jpg", + "title": "科目三:作毙", + "pubdate": 1662114430, + "ctime": 1662114430, + "desc": "看来你 是真想跟我拼一下子", + "state": 0, + "duration": 72, + "mission_id": 870359, + "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": 7518140, + "name": "暂离二度", + "face": "http://i2.hdslb.com/bfs/face/3d31d41810f12de173515f83b150234bb08a6e72.jpg" + }, + "stat": { + "aid": 815203242, + "view": 892126, + "danmaku": 596, + "reply": 877, + "favorite": 13100, + "coin": 13068, + "share": 19249, + "now_rank": 0, + "his_rank": 92, + "like": 57099, + "dislike": 0 + }, + "dynamic": "", + "cid": 821964961, + "dimension": { "width": 1280, "height": 720, "rotate": 0 }, + "short_link": "https://b23.tv/BV1PG4y1r7JX", + "short_link_v2": "https://b23.tv/BV1PG4y1r7JX", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220902a21fhpl3fapghr9lxcwblqxu0_firsti.jpg", + "pub_location": "浙江", + "bvid": "BV1PG4y1r7JX", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "5万点赞", "corner_mark": 1 } + }, + { + "aid": 302736065, + "videos": 1, + "tid": 251, + "tname": "三农", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/a37fd6ed038127d2336d67c7e5726b9c016a0bae.jpg", + "title": "我又开始玩梗了,而且还进去了。", + "pubdate": 1662095667, + "ctime": 1662095667, + "desc": "-", + "state": 0, + "duration": 53, + "mission_id": 840062, + "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": 50316381, + "name": "疆域阿力木", + "face": "http://i0.hdslb.com/bfs/face/05626e28bbbb34f944f28791a75a2cef4f396a6e.jpg" + }, + "stat": { + "aid": 302736065, + "view": 3078837, + "danmaku": 2722, + "reply": 3193, + "favorite": 15765, + "coin": 22301, + "share": 3463, + "now_rank": 0, + "his_rank": 3, + "like": 461326, + "dislike": 0 + }, + "dynamic": "", + "cid": 821690665, + "dimension": { "width": 1080, "height": 1920, "rotate": 0 }, + "short_link": "https://b23.tv/BV19P411V7Kz", + "short_link_v2": "https://b23.tv/BV19P411V7Kz", + "up_from_v2": 36, + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220902qn2fba1mpclsphj2deu0cb5hg_firsti.jpg", + "pub_location": "新疆", + "bvid": "BV19P411V7Kz", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "百万播放", "corner_mark": 1 } + }, + { + "aid": 557636142, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/ff263e883790351a81caa336c372807a8aabd76c.jpg", + "title": "家里有游乐园?【杜海皇】", + "pubdate": 1662180876, + "ctime": 1662180434, + "desc": "希望各位观众老爷们喜欢这期视频!\n喜欢记得点赞/投币/收藏/分享!", + "state": 0, + "duration": 905, + "mission_id": 753163, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 178029850, + "name": "杜海皇", + "face": "http://i1.hdslb.com/bfs/face/133111338ef9d6ca04515a0b517b2e837bc41e2b.jpg" + }, + "stat": { + "aid": 557636142, + "view": 692389, + "danmaku": 17406, + "reply": 3198, + "favorite": 14095, + "coin": 24362, + "share": 1470, + "now_rank": 0, + "his_rank": 44, + "like": 98582, + "dislike": 0 + }, + "dynamic": "家里有游乐园?", + "cid": 822513886, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1ae4y1d7z8", + "short_link_v2": "https://b23.tv/BV1ae4y1d7z8", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220903a2vmxll1f3m5f532fzheru0f6_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1ae4y1d7z8", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "9万点赞", "corner_mark": 1 } + }, + { + "aid": 217653051, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/f6e7436fc136c6e824d0cdcc527b366417c238b5.jpg", + "title": "不行了,我们真的土飞天了!!!", + "pubdate": 1662197177, + "ctime": 1662195861, + "desc": "宝剑嫂说点赞20W,立马开始学习究极无敌宇宙SSS难度土味舞蹈!!!\n我就不信她能学会!??\n\n邮箱:baojiansao@163.com\n记得投稿!!等你!!!", + "state": 0, + "duration": 564, + "mission_id": 753163, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 147166910, + "name": "雨哥到处跑", + "face": "http://i2.hdslb.com/bfs/face/5717b696a212199679c31857b46c3ba5c465ee06.jpg" + }, + "stat": { + "aid": 217653051, + "view": 186234, + "danmaku": 2498, + "reply": 745, + "favorite": 2573, + "coin": 7170, + "share": 1162, + "now_rank": 0, + "his_rank": 0, + "like": 34817, + "dislike": 0 + }, + "dynamic": "究!极!无!敌!宇!宙!\n土!味!之!王!!!", + "cid": 822750256, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1ga41137Gs", + "short_link_v2": "https://b23.tv/BV1ga41137Gs", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220903a21l7ofzzwi97zg23eqr7n2ur_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1ga41137Gs", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "", "corner_mark": 0 } + }, + { + "aid": 472678228, + "videos": 1, + "tid": 76, + "tname": "美食制作", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/e92f638626a4e7bfff43f0ff72faf35ff914d851.jpg", + "title": "谁能吃空这一盆,立马入职!", + "pubdate": 1662111000, + "ctime": 1662099066, + "desc": "想知道小胖说什么的看到最后!", + "state": 0, + "duration": 220, + "mission_id": 816705, + "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": 11452660, + "name": "p老板开饭了", + "face": "http://i1.hdslb.com/bfs/face/b1c8a639f1773284b3a7ceb00d62c54de1c8f470.jpg" + }, + "stat": { + "aid": 472678228, + "view": 1136045, + "danmaku": 541, + "reply": 1002, + "favorite": 7157, + "coin": 2192, + "share": 1122, + "now_rank": 0, + "his_rank": 65, + "like": 107942, + "dislike": 0 + }, + "dynamic": "完了,暴露了", + "cid": 821731282, + "dimension": { "width": 2160, "height": 3840, "rotate": 0 }, + "season_id": 619430, + "short_link": "https://b23.tv/BV12K411Z7ET", + "short_link_v2": "https://b23.tv/BV12K411Z7ET", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220902a21767eiq3pz6kpdf47u3h6c5_firsti.jpg", + "pub_location": "四川", + "bvid": "BV12K411Z7ET", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "百万播放", "corner_mark": 1 } + }, + { + "aid": 900009457, + "videos": 1, + "tid": 182, + "tname": "影视杂谈", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/533cb2685bcf5e64b29772dc87347466950710bd.jpg", + "title": "别抬头!天上的东西会吃人!2022最新科幻电影!", + "pubdate": 1661943707, + "ctime": 1661943707, + "desc": "《不》", + "state": 0, + "duration": 349, + "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": 688872987, + "name": "侃片大师兄", + "face": "http://i0.hdslb.com/bfs/face/8935b194271d1dac8ce4c99bdbbd80f682d4a939.jpg" + }, + "stat": { + "aid": 900009457, + "view": 2142899, + "danmaku": 763, + "reply": 687, + "favorite": 5943, + "coin": 587, + "share": 238, + "now_rank": 0, + "his_rank": 85, + "like": 77420, + "dislike": 0 + }, + "dynamic": "", + "cid": 819990856, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1EP4y1f71v", + "short_link_v2": "https://b23.tv/BV1EP4y1f71v", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220831qn23b5noftuzwf87zp2nxkfin_firsti.jpg", + "pub_location": "山东", + "bvid": "BV1EP4y1f71v", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "", "corner_mark": 0 } + }, + { + "aid": 645144956, + "videos": 1, + "tid": 208, + "tname": " 校园学习", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/4caba77c0ea7d95292c4e52dcfc1a2807318f068.jpg", + "title": "耗时一个月制作!不想任何学生错过这个视频啊啊!学习方法/中学/大学/研究生/考证/留学/成长/求职 | 开学解惑图鉴", + "pubdate": 1662177900, + "ctime": 1662127479, + "desc": "开学季啦,框框作为B站辅导员,为大家整理实用知识和经验参考,视频中所有的链接如下,如果 有帮助还请大家三连支持一波!!!!\n一、学习干货\n1、学习方法:\nBV1LU4y1g7no、BV14b411h7FM、BV1QX4y157mJ、BV1Ya4y1W7iT 、BV1X3411k7CX、BV1p741127kM\n2、中学学科:\n语文:BV1ZT4113744、BV1zB4y1w7Sk、BV1oE411K7Qq、BV18U4y1m7iV、BV16L4y157iZ\n数学:BV147411K7xu、BV1fJ411R", + "state": 0, + "duration": 439, + "mission_id": 895731, + "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": 40427625, + "name": "取景框看世界", + "face": "http://i0.hdslb.com/bfs/face/0d671560a6dd7f28247b3b7501d404a5b01280ea.jpg" + }, + "stat": { + "aid": 645144956, + "view": 137130, + "danmaku": 1686, + "reply": 597, + "favorite": 23723, + "coin": 10164, + "share": 1411, + "now_rank": 0, + "his_rank": 0, + "like": 20994, + "dislike": 0 + }, + "dynamic": "这是框框给所有学生党送上的开学礼物,你一定会喜欢的(=・ω・=)", + "cid": 822546678, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "season_id": 682687, + "short_link": "https://b23.tv/BV1rY4y1T7Lk", + "short_link_v2": "https://b23.tv/BV1rY4y1T7Lk", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220903a2204tfiy965tnt32zfgxjhwn_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1rY4y1T7Lk", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "", "corner_mark": 0 } + }, + { + "aid": 302509227, + "videos": 1, + "tid": 183, + "tname": "影视剪辑", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/72695f92333cc5c5dcdc5161ba98fa89a8ad081a.jpg", + "title": "“从不拍烂片的导演”", + "pubdate": 1661986407, + "ctime": 1661986407, + "desc": "-", + "state": 0, + "duration": 20, + "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": 241973789, + "name": "柯基剪辑c", + "face": "http://i2.hdslb.com/bfs/face/515688d6b0406ac9c242b3e0fbb36a5feabd50c8.jpg" + }, + "stat": { + "aid": 302509227, + "view": 169278, + "danmaku": 98, + "reply": 285, + "favorite": 9330, + "coin": 2736, + "share": 396, + "now_rank": 0, + "his_rank": 0, + "like": 34129, + "dislike": 0 + }, + "dynamic": "", + "cid": 820560843, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1pP411L7yw", + "short_link_v2": "https://b23.tv/BV1pP411L7yw", + "up_from_v2": 8, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220901a232uv0w65umpau1641kk1ktt_firsti.jpg", + "pub_location": "江苏", + "bvid": "BV1pP411L7yw", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "", "corner_mark": 0 } + }, + { + "aid": 815038949, + "videos": 1, + "tid": 250, + "tname": "出行", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/f66582af3f5ea12b04d6f2bec1298fca308d33ce.jpg", + "title": "那天,我看到了54岁最帅的模样", + "pubdate": 1661769000, + "ctime": 1661756898, + "desc": "-", + "state": 0, + "duration": 91, + "mission_id": 834125, + "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": 2041168605, + "name": "他叫阿园", + "face": "http://i0.hdslb.com/bfs/face/ee0cee6afda83588c938a5279d47ce66633379e6.jpg" + }, + "stat": { + "aid": 815038949, + "view": 4203035, + "danmaku": 1797, + "reply": 3724, + "favorite": 69671, + "coin": 150880, + "share": 6483, + "now_rank": 0, + "his_rank": 1, + "like": 732835, + "dislike": 0 + }, + "dynamic": "", + "cid": 817949474, + "dimension": { "width": 1080, "height": 1920, "rotate": 0 }, + "short_link": "https://b23.tv/BV1VG4y167tn", + "short_link_v2": "https://b23.tv/BV1VG4y167tn", + "up_from_v2": 36, + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220829a2246h1eks5qvfw17msnqjkun_firsti.jpg", + "pub_location": "浙江", + "bvid": "BV1VG4y167tn", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": " 百万播放", "corner_mark": 1 } + }, + { + "aid": 900245725, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/8e842aef4241d2f0971bfbf8289919f9417a2054.jpg", + "title": "我们管这叫军训,外国人管这叫实兵演习!", + "pubdate": 1662092612, + "ctime": 1662092612, + "desc": "素材来源:各大高校军训名场面!\nBGM:Wake (Live)", + "state": 0, + "duration": 185, + "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": 626297715, + "name": "荒草音乐", + "face": "http://i0.hdslb.com/bfs/face/d7b9ec37a9b159318cbf09d9d2ce43eba6cfaa12.jpg" + }, + "stat": { + "aid": 900245725, + "view": 792824, + "danmaku": 1603, + "reply": 2508, + "favorite": 11174, + "coin": 3072, + "share": 6911, + "now_rank": 0, + "his_rank": 0, + "like": 37460, + "dislike": 0 + }, + "dynamic": "", + "cid": 821649493, + "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, + "short_link": "https://b23.tv/BV1DP4y1o7y1", + "short_link_v2": "https://b23.tv/BV1DP4y1o7y1", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220902a226id1e9dpruvu1a3ni88cad_firsti.jpg", + "pub_location": "四川", + "bvid": "BV1DP4y1o7y1", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": { "content": "", "corner_mark": 0 } + } + ], + "no_more": false + } +} +``` +
\ No newline at end of file diff --git a/docs/ranking&dynamic/ranking.md b/docs/ranking&dynamic/ranking.md new file mode 100644 index 0000000..7381362 --- /dev/null +++ b/docs/ranking&dynamic/ranking.md @@ -0,0 +1,959 @@ +# 视频排行榜 + + + +- [视频排行榜](#视频排行榜) + - [获取分区视频排行榜列表](#获取分区视频排行榜列表) + +--- + +## 获取分区视频排行榜列表 + +> https://api.bilibili.com/x/web-interface/ranking/v2 + +*请求方式:GET* + +获取稿件内容质量,近期的数据前100个稿件,动态更新。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ------------------------------------- | +| rid | num | 目标分区tid | 非必要 | | +| type | str | 未知 | 非必要 | 默认为:all,且为目前唯一已知值。怀疑为稿件类型,但没有找到其他值佐证。 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 视频列表 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --- | --- | --- | --- | +| note | str | “根据稿件内容质量、近期的数据综合展示,动态更新” | 目前恒为此结果 | +| list | list | 视频列表 | 暂无 | + +`list`列表: + +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | --------------- | ---- | +| 0 | obj | 排行榜第1名 | | +| n | obj | 排行榜第(n+1)名 | | +| …… | obj | …… | …… | +| 99 | obj | 排行榜第100名 | | + +`data`列表中的对象: + +可参考[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的data对象。本API对象中所有字段,均可在链接对象中找到。 + +**示例:** + +获取`tid=1`(动画)分区中所有稿件排行榜排行榜 + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/ranking/v2' \ +--data-urlencode 'tid=1' \ +--data-urlencode 'type=all' +``` + +
+因本API返回对象过多(100个),故不全部展示,使用者可自行尝试。查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "note": "根据稿件内容质量、近期的数据综合展示,动态更新", + "list": [ + { + "aid": 517751921, + "videos": 1, + "tid": 253, + "tname": "动漫杂谈", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/c70d89ce459eb4a501885f7050ee37d94a5944e4.jpg", + "title": "神作之月!十年前的奇迹!新番时光机「2012年10月篇」", + "pubdate": 1668856639, + "ctime": 1668856639, + "desc": "新番时光机,回顾十年前的动画!本期为2012年10月\n\n往期:\nBV1Br4y1y7ri\nBV1Ly4y1s7wp\nBV16r4y1A7w4\nBV1c64y1f7ff\nBV1sA411A7JD\nBV1wT4y1D729\nBV1mR4y1A7Ey\nBV1gB4y1V7sz", + "state": 0, + "duration": 752, + "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": 63231, + "name": "泛式", + "face": "https://i0.hdslb.com/bfs/face/2608aaa45309c77ac88fbfaa40e160b8c7892985.jpg" + }, + "stat": { + "aid": 517751921, + "view": 1156543, + "danmaku": 14224, + "reply": 5601, + "favorite": 28753, + "coin": 58324, + "share": 6548, + "now_rank": 0, + "his_rank": 11, + "like": 136884, + "dislike": 0 + }, + "dynamic": "泛式队长,时光机更新!", + "cid": 896512490, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 21183, + "short_link": "https://b23.tv/BV1Eg411v7a1", + "short_link_v2": "https://b23.tv/BV1Eg411v7a1", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n221119a29spw3xihz66g3aeuae34t8i_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1Eg411v7a1", + "score": 0 + }, + { + "aid": 987795979, + "videos": 1, + "tid": 27, + "tname": "综合", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/6045782867b5dd91196d93324028f3346eed663a.jpg", + "title": "看海贼的和看火影的都沉默了......", + "pubdate": 1668830400, + "ctime": 1668780416, + "desc": "这一期我把之前十多期的火影加海贼王的内容做了个合集,把做得还可以的片段浓缩成这3分钟,有部分重制了,下一次这类型的视频等着绿牛和尼卡路飞出场,在做多一期—。—感觉还可以的话就给我个三连……或者一个免费的赞,谢谢了", + "state": 0, + "duration": 196, + "mission_id": 1074046, + "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": 601674546, + "name": "-夏秋冬-", + "face": "https://i0.hdslb.com/bfs/face/83b4dd8830c24ee73fbc59f0bd974ea37b0a9470.jpg" + }, + "stat": { + "aid": 987795979, + "view": 2098359, + "danmaku": 3460, + "reply": 2393, + "favorite": 33358, + "coin": 54977, + "share": 45656, + "now_rank": 0, + "his_rank": 15, + "like": 116834, + "dislike": 0 + }, + "dynamic": "", + "cid": 895657562, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1D44y1Q7im", + "short_link_v2": "https://b23.tv/BV1D44y1Q7im", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n221118qn157llqyqytou2d6cypvute8_firsti.jpg", + "pub_location": "广东", + "bvid": "BV1D44y1Q7im", + "score": 0 + }, + { + "aid": 690264225, + "videos": 1, + "tid": 86, + "tname": "特摄", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/f1ff369250c5fa72106e32e3d7862740ba6a3ab9.jpg", + "title": "评分7.0!风评不佳?诚实吐槽特摄电影《新奥特曼》", + "pubdate": 1668860302, + "ctime": 1668860302, + "desc": "点个关注再走哦~", + "state": 0, + "duration": 832, + "mission_id": 1028236, + "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": 730732, + "name": "瓶子君152", + "face": "https://i1.hdslb.com/bfs/face/951d0a41b33e0c73a0460d20ee83c4c62b0da45f.jpg" + }, + "stat": { + "aid": 690264225, + "view": 1503667, + "danmaku": 4718, + "reply": 3816, + "favorite": 20847, + "coin": 49980, + "share": 4100, + "now_rank": 0, + "his_rank": 18, + "like": 131574, + "dislike": 0 + }, + "dynamic": "#动漫杂谈# #新奥特曼# \n新奥特曼这部电影终于也是借着在你B的推出全网首播\n我也终于是蹭到一回热度了\n这次电影其实评价十分的两极化,那么他究竟讲了什么,我又觉得他怎么样呢,答案就在视频中\n本期视频点赞10w投币4w后面做德凯完结吐槽", + "cid": 896556696, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1S24y1y7yn", + "short_link_v2": "https://b23.tv/BV1S24y1y7yn", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a23dw30m9rx43073w439ptba1_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1S24y1y7yn", + "score": 0 + }, + { + "aid": 690367853, + "videos": 1, + "tid": 47, + "tname": "短片·手书·配音", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/a79fc307134273460bcc2ebcf56569097dcf5537.jpg", + "title": "”B 站 用 户 精 神 现 状 Ⅱ “", + "pubdate": 1668829018, + "ctime": 1668829019, + "desc": "耶 熬夜之后\n准备看柯南去!\n希望这个视频能带给你快乐!\n☆··☆··☆··☆··☆··☆··☆··☆··☆··☆··☆\n\n文案/绘画/配音/剪辑:鸽一品 \n本节目基本保持1-2周1更!如果喜欢的话请一定要多多三连互动哦!\n\n平时我也会在直播间和大家互动发\n直播时间会在动态中发布周表 大概一周五播\n从0开始做V! 请多多支持!\n\n ☆··☆··☆··☆··☆··☆··☆··☆··☆··☆··☆\n\n感谢你的支持!鸽子也有自己贩售周边的桃宝店啦~\n一品鸽子窝:https://shop409788748.tao", + "state": 0, + "duration": 122, + "mission_id": 1074046, + "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": 11399495, + "name": "鸽一品", + "face": "https://i2.hdslb.com/bfs/face/87f1fca837a16d6bbae552861454b45b1519301e.jpg" + }, + "stat": { + "aid": 690367853, + "view": 1158451, + "danmaku": 2596, + "reply": 338, + "favorite": 11617, + "coin": 3685, + "share": 429, + "now_rank": 0, + "his_rank": 45, + "like": 132542, + "dislike": 0 + }, + "dynamic": "耶 熬夜之后\n准备看柯南去!\n希望这个视频能带给你快乐!", + "cid": 896076372, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 174909, + "short_link": "https://b23.tv/BV1n24y117Zz", + "short_link_v2": "https://b23.tv/BV1n24y117Zz", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n221119a23psu3qlqb6ssz3rae8wrk8s_firsti.jpg", + "pub_location": "浙江", + "bvid": "BV1n24y117Zz", + "score": 0 + }, + { + "aid": 605336408, + "videos": 1, + "tid": 47, + "tname": "短片·手书·配音", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/69ce5bd3ab899d2212e6dab962c8cfa7f41ad5af.jpg", + "title": "【封号斗罗】哔哩哔哩,来封我朋友的号呀!", + "pubdate": 1668830400, + "ctime": 1668823531, + "desc": "我好坏~\n\n后期 可大师 / 桥和你\n封号斗罗 CV 海盐奶糖白露\nBGM Girls Generation-Gee (Instrumental)", + "state": 0, + "duration": 64, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 0, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 20603745, + "name": "其人", + "face": "https://i0.hdslb.com/bfs/face/f5eb49deb5e87dde3f143c5d2d95d3338060ab93.jpg" + }, + "stat": { + "aid": 605336408, + "view": 652606, + "danmaku": 1527, + "reply": 757, + "favorite": 17896, + "coin": 5787, + "share": 762, + "now_rank": 0, + "his_rank": 49, + "like": 118886, + "dislike": 0 + }, + "dynamic": "", + "cid": 895984408, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 780987, + "short_link": "https://b23.tv/BV1u84y1C7w3", + "short_link_v2": "https://b23.tv/BV1u84y1C7w3", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n221119a2tl68uyltrxucgeyufpd33gz_firsti.jpg", + "pub_location": "广东", + "bvid": "BV1u84y1C7w3", + "score": 0 + }, + { + "aid": 220294467, + "videos": 1, + "tid": 24, + "tname": "MAD·AMV", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/f18d4ecf7578e997d870f0aaf83a26e4fc379d2f.jpg", + "title": "【原神夜店风】深 夜 邂 逅~", + "pubdate": 1668827100, + "ctime": 1668770318, + "desc": "希望大家希望 做了蛮久的", + "state": 0, + "duration": 77, + "mission_id": 1060142, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 1542136, + "name": "三笠・阿克曼", + "face": "http://i1.hdslb.com/bfs/face/871d3db6a329d2b0e1a67c546301a65f9752d62a.jpg" + }, + "stat": { + "aid": 220294467, + "view": 353464, + "danmaku": 594, + "reply": 474, + "favorite": 34617, + "coin": 11816, + "share": 2647, + "now_rank": 0, + "his_rank": 66, + "like": 88222, + "dislike": 0 + }, + "dynamic": "大的来了!#原神##MAD#", + "cid": 895467115, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 330790, + "short_link": "https://b23.tv/BV1d8411j7xK", + "short_link_v2": "https://b23.tv/BV1d8411j7xK", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n221118qntcb67e8mcic613b3frykpxn_firsti.jpg", + "pub_location": "陕西", + "bvid": "BV1d8411j7xK", + "score": 0 + }, + { + "aid": 562862605, + "videos": 1, + "tid": 47, + "tname": "短片·手书·配音", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/1cd7cb6cf45cdbd65b5b2cb85ac48bd045a110bf.jpg", + "title": "【孤独摇滚/手书】给波奇酱穿新衣服~", + "pubdate": 1668816600, + "ctime": 1668798123, + "desc": "小波奇那么漂亮!快给她买新衣服!!\n感谢原画姐姐们把波奇画得那么可爱!!!", + "state": 0, + "duration": 105, + "mission_id": 1074046, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 1992514, + "name": "纸欣Dream", + "face": "https://i1.hdslb.com/bfs/face/2c09ba55a475fafa1e82eff79869a9580774f1b0.jpg" + }, + "stat": { + "aid": 562862605, + "view": 428030, + "danmaku": 793, + "reply": 854, + "favorite": 24869, + "coin": 25730, + "share": 6026, + "now_rank": 0, + "his_rank": 96, + "like": 48593, + "dislike": 0 + }, + "dynamic": "#孤独摇滚# 给波奇酱换新衣服!!", + "cid": 896737541, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1fv4y117Qh", + "short_link_v2": "https://b23.tv/BV1fv4y117Qh", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a2usulbe9u89fy3g0479v48y0_firsti.jpg", + "pub_location": "广东", + "bvid": "BV1fv4y117Qh", + "score": 0 + }, + { + "aid": 945304847, + "videos": 1, + "tid": 47, + "tname": "短片·手书·配音", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/76026f6a6d7698fcc5656fb2d7c151dcb4b4ea65.jpg", + "title": "【丧病中配】如果2077的CV来配音《赛博朋克:边缘行者》(第五话)", + "pubdate": 1668843300, + "ctime": 1668836610, + "desc": "本作品为剪辑二创,非商业用途仅供娱乐,喜欢的朋友欢迎去看完整版原片!\n有幸邀请到CV大佬们一起配《赛博朋克:边缘行者》玩,希望大家喜欢。本视频点赞过5万,继续更新第六话,谢谢大家的支持啦!\nCAST:\n大卫:@刘照坤Jock \n露西:CV张琦@Kii崽 \n曼恩:嘟督\n吉米黑咲:@配音演员虞晓旭 \n琦薇:@楼倾司 \n多莉欧:CV张琦@Kii崽 \n田中:@黑石稔 \n校长:@黑石稔 \n葛洛莉亚:CV张琦@Kii崽 \nNCPD(全):@是没有风的内个无风吖 \n义体医生:嘟督\n夹暴机动队:@菇力", + "state": 0, + "duration": 1034, + "mission_id": 1089377, + "rights": { + "bp": 0, + "elec": 0, + "download": 0, + "movie": 0, + "pay": 0, + "hd5": 1, + "no_reprint": 1, + "autoplay": 1, + "ugc_pay": 0, + "is_cooperation": 1, + "ugc_pay_preview": 0, + "no_background": 0, + "arc_pay": 0, + "pay_free_watch": 0 + }, + "owner": { + "mid": 2403047, + "name": "嘟督不噶油", + "face": "https://i2.hdslb.com/bfs/face/74738ef7c1ff743959908029b4c9d2dd8b5827c6.jpg" + }, + "stat": { + "aid": 945304847, + "view": 397714, + "danmaku": 2559, + "reply": 1513, + "favorite": 16296, + "coin": 39497, + "share": 3686, + "now_rank": 0, + "his_rank": 0, + "like": 54893, + "dislike": 0 + }, + "dynamic": "久等了!丧病中配《赛博朋克:边缘行者》第五话参上!做个好梦,大卫~", + "cid": 896151792, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 751347, + "short_link": "https://b23.tv/BV1gW4y1W7f4", + "short_link_v2": "https://b23.tv/BV1gW4y1W7f4", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a23injccl1ujog874rrzkgjbq_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1gW4y1W7f4", + "score": 0 + }, + { + "aid": 432692681, + "videos": 1, + "tid": 47, + "tname": "短片·手书·配音", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/13b14a9003bd55b842e3d956f951719e37d4698d.jpg", + "title": "✨踏入白色殿堂,你选择谁?✨", + "pubdate": 1668679200, + "ctime": 1668669686, + "desc": "听说国内人均白毛控?\n小狐兔粉毛MEME指路:BV17B4y1J7vW\nBGM:Di Young-Pixel Pig", + "state": 0, + "duration": 45, + "mission_id": 1074046, + "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": 1118188465, + "name": "在下小狐兔", + "face": "https://i1.hdslb.com/bfs/face/182be1a72202ae348f9d39f047d7b13e32798f80.jpg" + }, + "stat": { + "aid": 432692681, + "view": 1167712, + "danmaku": 3754, + "reply": 2080, + "favorite": 88688, + "coin": 53575, + "share": 5869, + "now_rank": 0, + "his_rank": 5, + "like": 170078, + "dislike": 0 + }, + "dynamic": "染头白毛,直接少走60年弯路~", + "cid": 894207559, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 73722, + "short_link": "https://b23.tv/BV1oG411F7B9", + "short_link_v2": "https://b23.tv/BV1oG411F7B9", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n221117a2a2f8je8qiu2724qkdbgwjch_firsti.jpg", + "pub_location": "浙江", + "bvid": "BV1oG411F7B9", + "score": 0 + }, + { + "aid": 262671873, + "videos": 1, + "tid": 47, + "tname": "短片·手书·配音", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/0d03863e63cc426bbc579bcb54433e3c2f412686.jpg", + "title": "《不做》", + "pubdate": 1668598143, + "ctime": 1668598143, + "desc": "咸鱼日常", + "state": 0, + "duration": 40, + "mission_id": 1074046, + "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": 357538100, + "name": "懒小熊_LXX", + "face": "https://i2.hdslb.com/bfs/face/7cc145cb9831c319f4a20dc560915478561110a8.jpg" + }, + "stat": { + "aid": 262671873, + "view": 1682548, + "danmaku": 384, + "reply": 1984, + "favorite": 51955, + "coin": 21220, + "share": 49865, + "now_rank": 0, + "his_rank": 11, + "like": 231688, + "dislike": 0 + }, + "dynamic": "", + "cid": 893540811, + "dimension": { + "width": 1440, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1RY411d7Sp", + "short_link_v2": "https://b23.tv/BV1RY411d7Sp", + "up_from_v2": 8, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n221116a2qu5s05btpwu93sv0xig9hx5_firsti.jpg", + "pub_location": "湖南", + "bvid": "BV1RY411d7Sp", + "score": 0 + }, + { + "aid": 432645631, + "videos": 1, + "tid": 253, + "tname": "动漫杂谈", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/976382dd53576cc1af0926a31103e5d179cd26b3.jpg", + "title": "童年引爆全国的动画!《小鲤鱼》的最终结局和剧情究竟是什么?【拾荒记#29】", + "pubdate": 1668741505, + "ctime": 1668741505, + "desc": "相关动画:《小鲤鱼历险记》\n关于拾荒记这个栏目,我将在这个系列节目和大家一起在记忆的杂物堆里翻点什么出来\n\n大家还有什么想看我解读的,欢迎在评论区指出,说不定我下期就做了呢", + "state": 0, + "duration": 1945, + "mission_id": 993288, + "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": 3078223, + "name": "野灿baka", + "face": "https://i1.hdslb.com/bfs/face/db80dbe62245bd35b32c293670190bf8ccd47975.jpg" + }, + "stat": { + "aid": 432645631, + "view": 1901441, + "danmaku": 14422, + "reply": 2815, + "favorite": 20903, + "coin": 26252, + "share": 6618, + "now_rank": 0, + "his_rank": 39, + "like": 97232, + "dislike": 0 + }, + "dynamic": "这期下饭很足,做了一个月呢,看个饱!", + "cid": 895004016, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 210289, + "short_link": "https://b23.tv/BV19G411F7iz", + "short_link_v2": "https://b23.tv/BV19G411F7iz", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n221118a23ee03atvk7k4525jkiqwvxo_firsti.jpg", + "pub_location": "广西", + "bvid": "BV19G411F7iz", + "score": 0 + }, + { + "aid": 732840638, + "videos": 1, + "tid": 24, + "tname": "MAD·AMV", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/5bf52f12ed2eb3d3576f6eb4931e82a4f0aec9ce.jpg", + "title": "“ 现 在 开 始 ,电 锯 人 也 要 起 飞 了 ”", + "pubdate": 1668826313, + "ctime": 1668826313, + "desc": "是我低估了特效向MAD的难度,这次做了快一个月才做好(大概是累到很久都不想剪mad的程度。。)\n灵感来自林逸大佬的MAD视频\nbgm:16shots\n这次真的花费巨多心思,希望大家多多三连哇", + "state": 0, + "duration": 121, + "mission_id": 1074046, + "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": 13458092, + "name": "笔龙XDDD", + "face": "https://i2.hdslb.com/bfs/face/fda9b8f0fb9d42c3ed90190b49b7478c87684078.jpg" + }, + "stat": { + "aid": 732840638, + "view": 456933, + "danmaku": 474, + "reply": 497, + "favorite": 16240, + "coin": 20333, + "share": 2288, + "now_rank": 0, + "his_rank": 0, + "like": 42301, + "dislike": 0 + }, + "dynamic": "叩", + "cid": 896032916, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 861825, + "short_link": "https://b23.tv/BV1hD4y1s7fJ", + "short_link_v2": "https://b23.tv/BV1hD4y1s7fJ", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a23flpz3l68ol27195z5warrj_firsti.jpg", + "pub_location": "浙江", + "bvid": "BV1hD4y1s7fJ", + "score": 0 + }, + { + "aid": 520311091, + "videos": 1, + "tid": 25, + "tname": "MMD·3D", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/0b15fe71c25d0c226a96a4ef253cfb946dda3a15.jpg", + "title": "万叶:哥把你揣兜里,你把哥踹沟里", + "pubdate": 1668871911, + "ctime": 1668871911, + "desc": "模型:米哈游/观海子\n渲染:小二今天吃啥啊、克里斯提亚娜\n动作/镜头:CME6大神犬\n原声:伤心欲茄", + "state": 0, + "duration": 16, + "mission_id": 1060142, + "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": 403425503, + "name": "甜甜草酿鸡", + "face": "https://i2.hdslb.com/bfs/face/66eb2201458e7bf1875c6a1da629cf1c887e30fd.jpg" + }, + "stat": { + "aid": 520311091, + "view": 401135, + "danmaku": 206, + "reply": 597, + "favorite": 15559, + "coin": 2623, + "share": 12448, + "now_rank": 0, + "his_rank": 0, + "like": 64094, + "dislike": 0 + }, + "dynamic": "", + "cid": 896780848, + "dimension": { + "width": 1080, + "height": 1920, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1hM411C7ez", + "short_link_v2": "https://b23.tv/BV1hM411C7ez", + "up_from_v2": 35, + "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a213u50mtr1xje1pmh9ufufp1_firsti.jpg", + "pub_location": "广东", + "bvid": "BV1hM411C7ez", + "score": 0 + }, + { + "aid": 775289285, + "videos": 1, + "tid": 210, + "tname": "手办·模玩", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/8defd33e5c2dd860ecb46dfef3445aad14a1f7fa.jpg", + "title": "“最帅最强”的“究极体”?万代 MGEX 强袭自由高达 拼装模型【评头论足】", + "pubdate": 1668830154, + "ctime": 1668830154, + "desc": "大家喜欢视频的话多多点赞关注投币哦~\n《评头论足》主要以第一人称的方式去介绍最新上市的模玩产品,给人以把玩在手中最真实的直观感受,为广大模型爱好者选购模型玩具产品提供方便。合作油箱 pinggaoda@qq.com", + "state": 0, + "duration": 1120, + "mission_id": 1080009, + "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": 2029306, + "name": "-评头论足-", + "face": "https://i1.hdslb.com/bfs/face/c20b5d1f044448ff2c5f4dbafc5dc464fdcdbca5.jpg" + }, + "stat": { + "aid": 775289285, + "view": 422301, + "danmaku": 12251, + "reply": 4824, + "favorite": 11219, + "coin": 26475, + "share": 10777, + "now_rank": 0, + "his_rank": 0, + "like": 37206, + "dislike": 0 + }, + "dynamic": "年度关注度超高的MGEX强袭自由,他来了!", + "cid": 896057755, + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "season_id": 573806, + "short_link": "https://b23.tv/BV1h14y1H7Ls", + "short_link_v2": "https://b23.tv/BV1h14y1H7Ls", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n221119a21mwd5z96o6l7q1tg8gqhh6m_firsti.jpg", + "pub_location": "辽宁", + "bvid": "BV1h14y1H7Ls", + "score": 0 + }, + ] + } +} +``` + +
diff --git a/docs/search/hot.md b/docs/search/hot.md new file mode 100644 index 0000000..049ad9c --- /dev/null +++ b/docs/search/hot.md @@ -0,0 +1,569 @@ +# 默认搜索&热搜 + +- [获取默认搜索内容(web端)](#获取默认搜索内容web端) +- [获取热搜列表(web端)](#获取热搜列表web端) +- [获取热搜列表(手机端)](#获取热搜列表手机端) + +--- + +## 获取默认搜索内容(web端) + +> https://api.bilibili.com/x/web-interface/search/default + +*请求方式:GET* + +默认搜索为搜索框中默认填充内容,用于官方推荐内容,若不输入点击搜索按钮跳转为`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" + } +} +``` + +
+ +## 获取热搜列表(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 | 条目属性 | 均返回8 | +| 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* + +榜单每隔固定时间统计一次,请求后返回搜索前20的关键词 + +带有转义 + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ----- | ------------ | ------------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 返回值 | 默认为1 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------ | +| trackid | num | | 不知用途 | +| list | array | 热搜列表 | | + +`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------- | ------------ | +| 0 | obj | 榜单第1名 | | +| n | obj | 榜单第(n+1)名 | 按照名次顺序 | +| 20 | obj | 榜单第20名 | 最后一项 | + +`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | -------- | ------- | +| position | num | 名次 | 1-20 | +| keyword | str | 关键词 | | +| show_name | str | 完整关键词| | +| word_type | num | 条目属性 | 均返回8 | +| 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": "12666380188451258075", + "list": [ + { + "position": 1, + "keyword": "流浪地球2刘德华", + "show_name": "流浪地球2刘德华造型", + "word_type": 8, + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png", + "hot_id": 11003 + }, + { + "position": 2, + "keyword": "QQ飞车手游飞跃黄河", + "show_name": "QQ飞车手游飞跃黄河", + "word_type": 8, + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png", + "hot_id": 11012 + }, + { + "position": 3, + "keyword": "西工大遭网络攻击最新调查", + "show_name": "西工大遭网络攻击最新调查", + "word_type": 8, + "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png", + "hot_id": 10996 + }, + { + "position": 4, + "keyword": "EDG 起诉", + "show_name": "EDGJieJie已起诉多家企业", + "word_type": 8, + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png", + "hot_id": 11004 + }, + { + "position": 5, + "keyword": "隐入尘烟", + "show_name": "隐入尘烟全平台下架", + "word_type": 8, + "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png", + "hot_id": 10992 + }, + { + "position": 6, + "keyword": "原神半年内最良心封神池", + "show_name": "原神半年内最良心封神池", + "word_type": 8, + "hot_id": 10987 + }, + { + "position": 7, + "keyword": "高校回应设国内首个元宇宙院系", + "show_name": "高校回应设国内首个元宇宙院系", + "word_type": 8, + "hot_id": 10988 + }, + { + "position": 8, + "keyword": "美宇宙飞船成功撞击小行星", + "show_name": "美宇宙飞船成功撞击小行星", + "word_type": 8, + "hot_id": 10994 + }, + { + "position": 9, + "keyword": "你薅的羊毛可能已违法", + "show_name": "你薅的羊毛可能已违法", + "word_type": 8, + "hot_id": 10991 + }, + { + "position": 10, + "keyword": "火锅店剩锅底重新给顾客", + "show_name": "火锅店剩锅底重新给顾客", + "word_type": 1, + "hot_id": 11014 + }, + { + "position": 11, + "keyword": "海月", + "show_name": "王者海月逆天", + "word_type": 8, + "hot_id": 10999 + }, + { + "position": 12, + "keyword": "周琦重返NBL", + "show_name": "徐静雨评周琦重返NBL", + "word_type": 8, + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png", + "hot_id": 11007 + }, + { + "position": 13, + "keyword": "小超梦剑魔连招", + "show_name": "小超梦剑魔QA连招", + "word_type": 8, + "hot_id": 11006 + }, + { + "position": 14, + "keyword": "东八区的先生们已下架", + "show_name": "东八区的先生们已下架", + "word_type": 8, + "hot_id": 10955 + }, + { + "position": 15, + "keyword": "三国杀新武将全惠解", + "show_name": "三国杀新武将全惠解", + "word_type": 8, + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png", + "hot_id": 11009 + }, + { + "position": 16, + "keyword": "ALGS训练赛", + "show_name": "ALGS训练赛", + "word_type": 8, + "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png", + "hot_id": 11011 + }, + { + "position": 17, + "keyword": "王者青白蛇皮肤优化", + "show_name": "王者青白蛇皮肤优化", + "word_type": 8, + "hot_id": 11000 + }, + { + "position": 18, + "keyword": "普京授予斯诺登俄公民身份", + "show_name": "普京授予斯诺登俄公民身份", + "word_type": 1, + "hot_id": 10977 + }, + { + "position": 19, + "keyword": "赛诺角色演示", + "show_name": "原神赛诺角色演示", + "word_type": 8, + "hot_id": 10998 + }, + { + "position": 20, + "keyword": "COD19被玩坏了", + "show_name": "COD19被玩坏了", + "word_type": 8, + "hot_id": 10971 + } + ], + "exp_str": "8000#5509#6605#7708" + } +} +``` + +
diff --git a/docs/search/search_request.md b/docs/search/search_request.md new file mode 100644 index 0000000..9f32448 --- /dev/null +++ b/docs/search/search_request.md @@ -0,0 +1,1443 @@ +# 搜索 + +- [综合搜索(web端)](#综合搜索web端) +- [分类搜索(web端)](#分类搜索web端) + +--- + +> **B站于2022年8月24日更新了搜索api,增加了一大堆Cookies的校验,如果Cookies不足会返回-412搜索被拦截。如果没有cookies的话,请在搜索之前先GET一遍 https://bilibili.com 以获取cookies** + +## 综合搜索(web端) + +> https://api.bilibili.com/x/web-interface/search/all/v2 + +*方式:GET* + +认证方式:Cookie(SESSDATA) + +返回和关键字相关的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 | +| 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 | 分类页数信息 | | +| 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/search/type + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +根据关键词进行搜索,返回结果每页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:请求被拦截 | +| 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..ed064d2 --- /dev/null +++ b/docs/search/search_response.md @@ -0,0 +1,778 @@ +# 搜索响应条目 + +本页为搜索结果数组`result`中的对象的说明 + +--- + +- [对象类型1-结果为视频](#对象类型1-结果为视频) +- [对象类型2-结果为番剧&影视](#对象类型2-结果为番剧&影视) +- [对象类型3-结果为直播间](#对象类型3-结果为直播间) +- [对象类型4-结果为主播](#对象类型4-结果为主播) +- [对象类型5-结果为专栏](#对象类型5-结果为专栏) +- [对象类型6-结果为话题](#对象类型6-结果为话题) +- [对象类型7-结果为用户](#对象类型7-结果为用户) +- [对象类型8-结果为相簿](#对象类型8-结果为相簿) + +--- + +## 对象类型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..441054f --- /dev/null +++ b/docs/search/suggest.md @@ -0,0 +1,185 @@ +# 搜索建议 + +- [获取搜索建议关键词(web端)](#获取搜索建议关键词web端) + +--- + +## 获取搜索建议关键词(web端) + +> https://s.search.bilibili.com/main/suggest + +*请求方式:GET* + +搜索建议最多提供10个候选关键词 + +搜索建议内容可为任意语言(中 英 日等....),中文拼音支持全拼联想词 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| --------- | ---- | ---------------------- | ------ | ------------------------ | +| term | str | 需要获得建议的输入内容 | 必要 | | +| main_ver | str | v1 | 非必要 | 固定为`v1` | +| highlight | str | 任意 | 非必要 | 有此项开启关键词高亮标签 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------ | ------------ | +| code | num | 返回值 | 0:成功 | +| cost | obj | 详细搜索用时 | 大概是吧? | +| result | obj | 搜索建议结果 | | +| page caches | obj | ??? | 作用尚不明确 | +| sengine | obj | ??? | 作用尚不明确 | +| stoken | str | ??? | 作用尚不明确 | + +`cost`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | -------- | ---- | +| about | obj | 套了个娃 | | + +`cost`中的`about`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------ | ---- | ---- | ---- | +| params_check | str | | | +| total | str | | | +| main_handler | str | | | + +`result`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ----- | -------- | ---- | +| tag | array | 套了个娃 | | + +`result`中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------- | ---------------------- | +| 0 | obj | 第1建议关键词 | | +| n | obj | 第(n+1)建议关键词 | 按照相关程度与热度顺序 | +| 9 | obj | 第10建议关键词 | 最后一项 | + +`tag`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ------------------------------------------------------------ | +| value | str | 关键词内容 | | +| ref | num | 0 | 作用尚不明确 | +| name | str | 显示内容 | 在无高亮显示时与`value`相同
有高亮显示时带有``的xml标签 | +| spid | num | ??? | 作用尚不明确 | + +`page caches`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ---- | ------------ | +| save cache | str | no | 作用尚不明确 | + +`sengine`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---- | ------------ | +| usage | num | 0 | 作用尚不明确 | + +**示例:** + +获取关于`lei`的搜索建议,关键词带有高亮 + +```shell +curl -G 'https://s.search.bilibili.com/main/suggest' \ +--data-urlencode 'term=lei' \ +--data-urlencode 'main_ver=v1' \ +--data-urlencode 'highlight=' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "cost": { + "about": { + "params_check": "0.000103", + "total": "0.011644", + "main_handler": "0.011472" + } + }, + "result": { + "tag": [ + { + "value": "雷军", + "ref": 0, + "name": "雷军", + "spid": 1 + }, + { + "value": "雷之律者", + "ref": 0, + "name": "雷之律者", + "spid": 5 + }, + { + "value": "LEI神", + "ref": 0, + "name": "LEI神", + "spid": 5 + }, + { + "value": "LEIGH ELLEXSON", + "ref": 0, + "name": "LEIGH ELLEXSON", + "spid": 5 + }, + { + "value": "LEICA Q2", + "ref": 0, + "name": "LEICA Q2", + "spid": 5 + }, + { + "value": "LEIGHANNE", + "ref": 0, + "name": "LEIGHANNE", + "spid": 0 + }, + { + "value": "雷达探测姬", + "ref": 0, + "name": "雷达探测姬", + "spid": 5 + }, + { + "value": "雷律", + "ref": 0, + "name": "雷律", + "spid": 5 + }, + { + "value": "雷霆嘎巴", + "ref": 0, + "name": "雷霆嘎巴", + "spid": 5 + }, + { + "value": "雷霆沙赞", + "ref": 0, + "name": "雷霆沙赞", + "spid": 5 + } + ] + }, + "page caches": { + "save cache": "no" + }, + "sengine": { + "usage": 0 + }, + "stoken": "12344377692164099019" +} +``` + +
diff --git a/docs/user/check_nickname.md b/docs/user/check_nickname.md new file mode 100644 index 0000000..add987e --- /dev/null +++ b/docs/user/check_nickname.md @@ -0,0 +1,137 @@ +# 检查昵称是否可注册 + +- [检查昵称](#检查昵称) + +--- + +## 检查昵称 + +> 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":"昵称已存在" +} +``` + +
diff --git a/docs/user/contract.md b/docs/user/contract.md new file mode 100644 index 0000000..7080164 --- /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主已收到留言~" + } +} +``` + +
\ No newline at end of file diff --git a/docs/user/info.md b/docs/user/info.md new file mode 100644 index 0000000..ecd4263 --- /dev/null +++ b/docs/user/info.md @@ -0,0 +1,1229 @@ +# 用户基本信息 + + + +- [用户空间详细信息](#用户空间详细信息) +- [用户名片信息](#用户名片信息) +- [登录用户空间详细信息](#登录用户空间详细信息) +- [多用户详细信息](#多用户详细信息) + +--- + +## 用户空间详细信息 + +> https://api.bilibili.com/x/space/acc/info + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|---------|-----|-----| +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|---------------------| +| code | num | 返回值 | 0:成功
-400:请求错误 | +| 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 | | 0,1 | +| 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 | 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 | 是否显示老粉计划 | | + +`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 | 认证类型 | 0:无
1 2 7 9:个人认证
3 4 5 6:机构认证 | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无
0:个人认证
1:机构认证 | + +`data`中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------------|-----|-----------|----------------------------------------------| +| type | num | 会员类型 | 0:无
1:月大会员
2:年度及以上大会员 | +| status | num | 会员状态 | 0:无
1:有 | +| due_date | num | 会员过期时间 | Unix时间戳(毫秒) | +| 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 | 电视大会员支付类型 | | + +`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 | 大会员牌子图片 | 繁体版 | + + +`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 | | + +`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 | url | notice_type | 示例用户 | +|-----|-------------------------------------------------|-----|-------------|-------------------------------------------------------------------------------------------------| +| 5 | 该用户存在争议行为,已冻结其帐号功能的使用 | | 1 | [82385070](https://space.bilibili.com/82385070) | +| 8 | 该用户存在较大争议,请谨慎甄别其内容 | | 1 | [28062215](https://space.bilibili.com/28062215) | +| 11 | 该账号涉及合约争议,暂冻结其账号功能使用。详见公告-> | | 1 | +| 16 | 该UP主内容存在争议,请注意甄别视频内信息 | | 1 | [382534165](https://space.bilibili.com/382534165) | +| 20 | 请允许我们在此献上最后的告别,以此纪念其在哔哩哔哩留下的回忆与足迹。请点此查看纪念账号相关说明 | | 2 | +| 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 | [198297](https://space.bilibili.com/198297)
[18149131](https://space.bilibili.com/18149131) | + +`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:已开通 | +| title | str | `空串` | | +| icon | str | `空串` | | +| jump_url | str | `空串` | | + +`data`中的`contract`对象: + +| 字段名 | 类型 | 内容 | 备注 | +|-------------------|------|-----------|---------------------------| +| is_display | bool | | true/false
在页面中未使用此字段 | +| is_follow_display | bool | 是否在显示老粉计划 | true:显示
false:不显示 | + +**示例:** + +查询用户`mid=2`的详细信息 + +```shell +curl -G 'https://api.bilibili.com/x/space/acc/info' \ +--data-urlencode 'mid=2' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```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": 335115, + "medal_id": 45408, + "level": 21, + "medal_name": "伍千万", + "medal_color": 1725515, + "intimacy": 1980, + "next_intimacy": 2000, + "day_limit": 250000, + "medal_color_start": 1725515, + "medal_color_end": 5414290, + "medal_color_border": 1725515, + "is_lighted": 1, + "light_status": 1, + "wearing_status": 1, + "score": 50001980 + } + }, + "official": { + "role": 2, + "title": "bilibili创始人(站长)", + "desc": "", + "type": 0 + }, + "vip": { + "type": 2, + "status": 1, + "due_date": 3909916800000, + "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": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/activity-plat/static/20221008/0597543265563f522fad443825cff578/O9l2i8GdaZ.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": 0 + }, + "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" + }, + "nameplate": { + "nid": 10, + "name": "见习偶像", + "image": "https://i1.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png", + "image_small": "https://i1.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png", + "level": "普通勋章", + "condition": "所有自制视频总播放数>=10万" + }, + "user_honour_info": { + "mid": 0, + "colour": null, + "tags": [] + }, + "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": 14, + "text_small": "14", + "text_large": "14人看过", + "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": 1, + "mcn_info": null, + "gaia_res_type": 0, + "gaia_data": null, + "is_risk": false, + "elec": { + "show_info": { + "show": true, + "state": 1, + "title": "", + "icon": "", + "jump_url": "" + } + } + } +} +``` + +
+ +**查询到的信息解析如下:** + +**用户昵称为**:碧诗 + +**性别**:男 + +**用户的头像为**: + +https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg + + + +**等级**:6级 + +**生日**:09-19 + +**粉丝勋章状态**:拥有 + +**认证**:个人认证 + +**认证名称**: bilibili创始人(站长) + +**大会员类型**:年度 + +**大会员状态**:已开通 + +**电视大会员状态**:已开通 + +**头像框**:EveOneCat2 + +https://i2.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp + + + +**粉丝勋章**: 见习偶像 + +https://i1.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png + + + +**空间头图**: + +https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png + +![](https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png) + +## 用户名片信息 + +> https://api.bilibili.com/x/web-interface/card + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**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 | **作用尚不明确** | +| birthday | str | 空 | **作用尚不明确** | +| place | str | 空 | **作用尚不明确** | +| description | str | 空 | **作用尚不明确** | +| article | num | 0 | **作用尚不明确** | +| attentions | array | 空 | **作用尚不明确** | +| fans | num | 粉丝数 | | +| friend | num | 关注数 | | +| attention | num | 关注数 | | +| 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 | 认证类型 | 0:无
1 2 7:个人认证
3 4 5 6:机构认证 | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无
0:认证 | + +`card`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | -------- | ------------------- | +| type | num | 是否认证 | -1:无
0:认证 | +| 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 'api.bilibili.com/x/web-interface/card' \ +--data-urlencode 'mid=2' \ +--data-urlencode 'photo=true' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```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 | 认证类型 | 0:无
1 2 7:个人认证
3 4 5 6:机构认证 | +| 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 '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.vc.bilibili.com/account/v1/user/cards + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------------- | ------ | --------------------------------- | +| uids | nums | 目标用户的UID列表 | 必要 | 每个成员间用`,`分隔,最多50个成员 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | -------- | ----------------------------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
600007:超出批量获取用户信息限制 | +| msg | str | 错误信息 | 默认为空 | +| message | str | 错误信息 | 默认为空 | +| data | array | 信息本体 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------- | ---- | +| 0 | obj | 用户1 | | +| n | obj | 用户(n+1) | | +| …… | obj | …… | …… | + +`data`数组中的对象: + +基本同「[用户空间详细信息](#用户空间详细信息)」中的data对象 + +**示例:** + +查询用户`uids=1,2,3`的详细信息 + +```shell +curl -G 'https://api.vc.bilibili.com/account/v1/user/cards' \ +--data-urlencode 'uids=1,2,3' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "msg": "", + "message": "", + "data": [{ + "mid": 1, + "name": "bishi", + "sex": "男", + "face": "https://i1.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif", + "sign": "", + "rank": 10000, + "level": 4, + "silence": 0, + "vip": { + "type": 2, + "status": 1, + "due_date": 1754496000000, + "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": 1633622400 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "birthday": 622137600, + "is_fake_account": 0, + "is_deleted": 0, + "in_reg_audit": 0, + "face_nft": 0, + "face_nft_new": 0, + "is_senior_member": 0 + }, { + "mid": 2, + "name": "碧诗", + "sex": "男", + "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg", + "sign": "https://kami.im 直男过气网红 # av362830 “We Are Star Dust”", + "rank": 20000, + "level": 6, + "silence": 0, + "vip": { + "type": 2, + "status": 1, + "due_date": 3901881600000, + "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": "", + "img_label_uri_hant": "", + "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png", + "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png" + }, + "avatar_subscript": 1, + "nickname_color": "#FB7299", + "role": 7, + "avatar_subscript_url": "", + "tv_vip_status": 0, + "tv_vip_pay_type": 0, + "tv_due_date": 1655481600 + }, + "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" + }, + "nameplate": { + "nid": 10, + "name": "见习偶像", + "image": "https://i0.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png", + "image_small": "https://i1.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png", + "level": "普通勋章", + "condition": "所有自制视频总播放数>=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": 1 + }, { + "mid": 3, + "name": "囧囧倉", + "sex": "男", + "face": "https://i0.hdslb.com/bfs/face/d4de6a84557eea8f18510a3f61115d96832aa071.jpg", + "sign": "富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善。", + "rank": 10000, + "level": 5, + "silence": 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": 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 + }, + "pendant": { + "pid": 0, + "name": "", + "image": "", + "expire": 0, + "image_enhance": "", + "image_enhance_frame": "" + }, + "nameplate": { + "nid": 0, + "name": "", + "image": "", + "image_small": "", + "level": "", + "condition": "" + }, + "official": { + "role": 0, + "title": "", + "desc": "", + "type": -1 + }, + "birthday": 1262275200, + "is_fake_account": 0, + "is_deleted": 0, + "in_reg_audit": 0, + "face_nft": 0, + "face_nft_new": 0, + "is_senior_member": 0 + }] +} +``` + +
diff --git a/docs/user/register.md b/docs/user/register.md new file mode 100644 index 0000000..daea592 --- /dev/null +++ b/docs/user/register.md @@ -0,0 +1,102 @@ +# 用户注册 + + +## 人机验证 + +[完成人机验证(参考验证登录)](../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..f333a90 --- /dev/null +++ b/docs/user/relation.md @@ -0,0 +1,2450 @@ +# 用户关系相关 + +- [查询用户粉丝明细](#查询用户粉丝明细) +- [查询用户关注明细](#查询用户关注明细) +- [查询用户关注明细2](#查询用户关注明细2) +- [搜索关注明细](#搜索关注明细) +- [查询共同关注明细](#查询共同关注明细) +- [查询悄悄关注明细](#查询悄悄关注明细) +- [查询互相关注明细](#查询互相关注明细) +- [查询黑名单明细](#查询黑名单明细) +- [操作用户关系](#操作用户关系) +- [批量操作用户关系](#批量操作用户关系) +- [查询用户与自己关系_仅查关注](#查询用户与自己关系_仅查关注) +- [查询用户与自己关系_互相](#查询用户与自己关系_互相) +- [批量查询用户与自己关系](#批量查询用户与自己关系) +- [关注分组相关](#关注分组相关) + - [查询关注分组列表](#查询关注分组列表) + - [查询关注分组明细](#查询关注分组明细) + - [查询目标用户所在的分组](#查询目标用户所在的分组) + - [查询所有特别关注的mid](#查询所有特别关注的mid) + - [创建分组](#创建分组) + - [重命名分组](#重命名分组) + - [删除分组](#删除分组) + - [修改分组成员](#修改分组成员) + - [复制关注到分组](#复制关注到分组) + - [移动关注到分组](#移动关注到分组) + +--- + +## 查询用户粉丝明细 + + + +> https://api.bilibili.com/x/relation/followers + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +登录可看自己前1000名,其他用户可查看前250名(网页端请求时ps为20,所以直接查看只能看到前100名) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| vmid | num | 目标用户mid | 必要 | | +| 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 | | | +| special | num | 0 | | +| uname | str | 用户昵称 | | +| face | str | 用户头像url | | +| sign | str | 用户签名 | | +| official_verify | obj | 认证信息 | | +| vip | obj | 会员信息 | | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
0:个人认证
1:机构认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ??? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +**示例:** + +获取用户`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": 387195656, + "attribute": 0, + "mtime": 1583839793, + "tag": null, + "special": 0, + "uname": "L_E_M_O_H_E", + "face": "https://i1.hdslb.com/bfs/face/8ec537db75eeb292faa8dc85a9ff8aba83148c86.jpg", + "sign": "暂时断更。。Back later", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + }, { + "mid": 175989424, + "attribute": 0, + "mtime": 1583822019, + "tag": null, + "special": 0, + "uname": "哥本哈根iii", + "face": "https://i1.hdslb.com/bfs/face/e53c0fe9315176d48bd294b1f381f0da70131cd7.jpg", + "sign": "", + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 0, + "vipDueDate": 0, + "dueRemark": "", + "accessStatus": 0, + "vipStatus": 0, + "vipStatusWarn": "", + "themeType": 0, + "label": { + "path": "" + } + } + }], + "re_version": 3857745402, + "total": 365 + } +} +``` + +
+ +## 查询用户关注明细 + + + +> https://api.bilibili.com/x/relation/followings + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +登录可看自己全部,其他用户仅可查看前5页 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ------------------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| vmid | num | 目标用户mid | 必要 | | +| order_type | str | 排序方式 | 非必要 | 按照关注顺序排列:留空
按照最常访问排列:attention | +| ps | num | 每页项数 | 非必要 | 默认为50 | +| pn | num | 页码 | 非必要 | 默认为1
其他用户仅可查看前5页 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-400:请求错误
22007:访问超过5页
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 | …… | …… | + +数组`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 | 会员信息 | | + +数组`list`中的对象中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | ---- | +| 0 | num | 位于分组1的分组id | | +| n | num | 位于分组(n+1)的分组id | | +| …… | num | …… | …… | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
1:认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ??? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +**示例:** + +获取用户`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, + "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": "" + } + } + }, { + "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": "" + } + } + }], + "re_version": 3228575555, + "total": 699 + } +} +``` + +
+ +## 查询用户关注明细2 + + + +> https://app.biliapi.net/x/v2/relation/followings + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +登录可看自己全部,其他用户仅可查看前5页,可以获取已设置可见性隐私的关注列表 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ------------------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| vmid | num | 目标用户mid | 必要 | | +| order_type | str | 排序方式 | 非必要 | 按照关注顺序排列:留空
按照最常访问排列:attention | +| 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 | 会员信息 | | + +数组`list`中的对象中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | ---- | +| 0 | num | 位于分组1的分组id | | +| n | num | 位于分组(n+1)的分组id | | +| …… | num | …… | …… | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
1:认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| 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 '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, + "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": "" + } + } + }, { + "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": "" + } + } + }], + "re_version": 3228575555, + "total": 699 + } +} +``` + +
+ +## 搜索关注明细 + + + +> https://api.bilibili.com/x/relation/followings/search + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | -------- | +| access_key | str | APP登录Token | APP方式必要 | | +| vmid | str | 目标用户mid | 必要 | | +| name | str | 搜索关键词 | 必要 | | +| ps | num | 每页项数 | 非必要 | 默认为50 | +| pn | num | 页码 | 非必要 | 默认为1 | + +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 | 会员信息 | | + +数组`list`中的对象中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | ---- | +| 0 | num | 位于分组1的分组id | | +| n | num | 位于分组(n+1)的分组id | | +| …… | num | …… | …… | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
1:认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ??? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +**示例:** + +搜索我的关注列表中关键词`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 + } +} +``` + +
+ +## 查询共同关注明细 + + + +> https://api.bilibili.com/x/relation/same/followings + +*请求方式: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 | …… | …… | + +数组`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 | 会员信息 | | + +数组`list`中的对象中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | ---- | +| 0 | num | 位于分组1的分组id | | +| n | num | 位于分组(n+1)的分组id | | +| …… | num | …… | …… | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
1:认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ??? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +**示例:** + +获取自己与用户`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 + } +} +``` + +
+ +## 查询悄悄关注明细 + + + +> https://api.bilibili.com/x/relation/whispers + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | -------- | +| access_key | str | APP登录Token | APP方式必要 | | +| 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 | ??? | 作用尚不明确 | + +`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 | 会员信息 | | + +数组`list`中的对象中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | ---- | +| 0 | num | 位于分组1的分组id | | +| n | num | 位于分组(n+1)的分组id | | +| …… | num | …… | …… | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
1:认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ??? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +**示例:** + +获取悄悄关注明细 + +```shell +curl -G 'https://api.bilibili.com/x/relation/whispers' \ +--data-urlencode 'ps=2' \ +--data-urlencode 'pn=1' \ +-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 + } +} +``` + +
+ +## 查询互相关注明细 + + + +> https://api.bilibili.com/x/relation/friends + +*请求方式: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 | …… | …… | + +数组`list`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ------------------------------------------- | ------------ | --------------------------------------- | +| mid | num | 用户mid | | +| attribute | num | 关注属性 | 6:已互粉 | +| mtime | num | 关注对方时间 | 时间戳
互关后刷新 | +| tag | 默认分组:null
存在至少一个分组:array | 分组id | | +| special | num | 特别关注标志 | 0:否
1:是 | +| uname | str | 用户昵称 | | +| face | str | 用户头像url | | +| sign | str | 用户签名 | | +| official_verify | obj | 认证信息 | | +| vip | obj | 会员信息 | | + +数组`list`中的对象中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | ---- | +| 0 | num | 位于分组1的分组id | | +| n | num | 位于分组(n+1)的分组id | | +| …… | num | …… | …… | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
1:认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ??? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +**示例:** + +获取互相关注明细 + +```shell +curl -G 'https://api.bilibili.com/x/relation/friends' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "mid": 293793435, + "attribute": 6, + "mtime": 1583817598, + "tag": [-10], + "special": 1, + "uname": "社会易姐QwQ", + "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg", + "sign": "BAC项目负责人 | 带砖技术宅 | MC 编程 电子 | 车万众\u0026术术人 | 粉丝群1136462265 博客shakaianee.top", + "face_nft": 0, + "official_verify": { + "type": -1, + "desc": "" + }, + "vip": { + "vipType": 2, + "vipDueDate": 1675872000000, + "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": "" + } + ], + "re_version": 0 + } +} +``` + +
+ +## 查询黑名单明细 + +> https://api.bilibili.com/x/relation/blacks + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | -------- | +| access_key | str | APP登录Token | APP方式必要 | | +| 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 | …… | …… | + +数组`list`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------------- | ---- | ------------ | ---------------------- | +| mid | num | 用户mid | | +| attribute | num | 关注属性 | 128:已拉黑 | +| mtime | num | 关注对方时间 | 时间戳
互关后刷新 | +| tag | null | | | +| special | num | 0 | | +| uname | str | 用户昵称 | | +| face | str | 用户头像url | | +| sign | str | 用户签名 | | +| official_verify | obj | 认证信息 | | +| vip | obj | 会员信息 | | + +`list`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
1:认证 | +| desc | str | 用户认证信息 | 无为空 | + +`list`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------------------- | +| vipType | num | 会员类型 | 0:无
1:月度大会员
2:年度以上大会员 | +| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0:无
1:有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ??? | 作用尚不明确 | + +`vip`中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +**示例:** + +获取黑名单明细 + +```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 + } +} +``` + +
+ +## 操作用户关系 + + + +> https://api.bilibili.com/x/relation/modify + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ---------------------- | -------------- | -------------------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| fid | num | 目标用户mid | 必要 | | +| act | num | 操作代码 | 必要 | **操作代码见下表** | +| re_src | num | 关注来源代码 | 必要 | 空间:11
视频:14
文章:115
活动页面:222 | +| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | | + +操作代码`act`: + +| 代码 | 含义 | +| ---- | ------------ | +| 1 | 关注 | +| 2 | 取关 | +| 3 | 悄悄关注 | +| 4 | 取消悄悄关注 | +| 5 | 拉黑 | +| 6 | 取消拉黑 | +| 7 | 踢出粉丝 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-102:账号被封停
-111:csrf校验失败
-400:请求错误
22001:不能对自己进行此操作
22003:用户位于黑名单 | +| 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 +} +``` + +
+ +## 批量操作用户关系 + +> https://api.bilibili.com/x/relation/batch/modify + +*请求方式:POST* + +认证方式:Cookie(SESSDATA)或APP + +此接口只支持关注和拉黑操作 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ---------------------- | -------------- | ---------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| fids | nums | 目标用户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": [] + } +} +``` + +
+ +## 查询用户与自己关系_仅查关注 + +> https://api.bilibili.com/x/relation + +*请求方式: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`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---------------------------------------- | ------------ | --------------------------------------- | +| mid | num | 目标用户mid | | +| attribute | num | 关注属性 | 0:未关注
2:已关注
6:已互粉
128:拉黑 | +| mtime | num | 关注对方时间 | 时间戳
未关注为0 | +| tag | null默认分组
array存在至少一个分组 | 分组id | | +| special | num | 特别关注标志 | 0:否
1:是 | + +`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------------------- | ---- | +| 0 | num | 位于分组1的分组 | | +| n | num | 位于分组(n+1)的分组 | | +| …… | num | …… | …… | + +**示例:** + +可得对于`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 + } +} +``` + +
+ +## 查询用户与自己关系_互相 + +> https://api.bilibili.com/x/space/acc/relation + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ---- | +| access_key | str | APP登录Token | APP方式必要 | | +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------- | +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------------------ | ---- | +| relation | obj | 目标用户对于本用户的属性 | | +| be_relation | obj | 本用户对于目标用户的属性 | | + +`data`中的`relation`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---------------------------------------- | ------------ | -------------- | +| mid | num | 对方用户mid | | +| attribute | num | 关注属性 | 0:未关注
1:悄悄关注
2:已关注
6:已互粉
128:拉黑 | +| mtime | num | 关注对方时间 | 互关后刷新时间 | +| tag | null默认分组
array存在至少一个分组 | 分组id | | +| special | num | 特别关注标志 | 0:否
1:是 | + +`data`中的`be_relation`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | ---------------------------------------- | ------------ | -------------- | +| mid | num | 自己的mid | | +| attribute | num | 关注属性 | 0:未关注
1:悄悄关注
2:已关注
6:已互粉
128:拉黑 | +| mtime | num | 成为粉丝时间 | 互关后刷新时间 | +| tag | null默认分组
array存在至少一个分组 | 分组id | | +| special | num | 特别关注标志 | 0:否
1:是 | + +`be_relation`与`relation`中的`tag`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | --------------------- | ---- | +| 0 | num | 位于分组1的分组id | | +| n | num | 位于分组(n+1)的分组id | | +| …… | num | …… | …… | + +**示例:** + +可得对于`mid=15858903`的用户,在`2019/1/24 14:24:19`时关注了对方,且互相关注,自己将对方特别关注,并同时位于为`-10`和`194110`的分组中,对方也将自己设为特别关注,并同时位于为`-10`和`56502`的分组中(虽然我看不到) + +```shell +curl -G 'https://api.bilibili.com/x/space/acc/relation' \ +--data-urlencode 'mid=15858903' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "relation": { + "mid": 15858903, + "attribute": 6, + "mtime": 1548311059, + "tag": [-10, 194110], + "special": 1, + "is_followed": false + }, + "be_relation": { + "mid": 293793435, + "attribute": 6, + "mtime": 1548311059, + "tag": [56502, -10], + "special": 1, + "is_followed": false + } + } +} +``` + +
+ +## 批量查询用户与自己关系 + +> https://api.bilibili.com/x/relation/relations + +*请求方式: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}`对象: + +| 字段 | 类型 | 内容 | 备注 | +| --------- | --------------------------------------- | ------------ | ------------------------------------------------------------ | +| 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的分组id | | +| n | num | 位于分组(n+1)的分组id | | +| …… | num | …… | …… | + +**示例:** + +批量查询`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 + } + } +} +``` + +
+ +## 关注分组相关 + +### 查询关注分组列表 + +> https://api.bilibili.com/x/relation/tags + +*请求方式: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 | obj | 默认分组 | | +| n | obj | 其他分组 | | +| …… | num | …… | …… | + +数组`data`中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ---------------------------------- | +| tagid | num | 分组id | 特别关注恒为-10
默认分组恒为0 | +| name | str | 分组名称 | | +| count | num | 分组成员数 | | + +**示例:** + +查询所有的分组的名字以及id + +```shell +curl 'https://api.bilibili.com/x/relation/tags' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [{ + "tagid": -10, + "name": "特别关注", + "count": 16 + }, { + "tagid": 0, + "name": "默认分组", + "count": 536 + },{ + "tagid": 194111, + "name": "我的同学", + "count": 16 + }, + ………… + ] +} +``` + +
+ +### 查询关注分组明细 + +> https://api.bilibili.com/x/relation/tag + +*请求方式:GET* + +认证方式:Cookie(SESSDATA)或APP + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ---- | ------------ | ----------- | ------------------------------------------------------- | +| access_key | str | APP登录Token | APP方式必要 | | +| tagid | num | 分组id | 必要 | 特别关注恒为-10
默认分组恒为0 | +| order_type | str | 排序方式 | 非必要 | 按照关注顺序排列:留空
按照最常访问排列:attention | +| ps | num | 每页项数 | 非必要 | 默认为50 | +| 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 | | +| uname | str | 用户昵称 | | +| face | str | 用户头像url | | +| sign | str | 用户签名 | | +| official_verify | obj | 认证信息 | | +| vip | obj | 会员信息 | | + +数组`data`中的对象中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------- | +| type | num | 用户认证类型 | -1:无
1:认证 | +| desc | str | 用户认证信息 | 无为空 | + +数组`data`中的对象中的`vip`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ---- | ------------ | ----------------------------------- | +| vipType | num | 大会员类型 | 0:无
1:月会员
2:年会员 | +| vipDueDate | num | 会员到期时间 | 毫秒 时间戳 | +| dueRemark | str | 空 | 作用尚不明确 | +| accessStatus | num | 0 | 作用尚不明确 | +| vipStatus | num | 大会员状态 | 0无
1有 | +| vipStatusWarn | str | 空 | 作用尚不明确 | +| themeType | num | 0 | 作用尚不明确 | +| label | obj | ??? | 作用尚不明确 | + +数组`data`中的对象中的`label`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ------------ | +| path | str | 空 | 作用尚不明确 | + +**示例:** + +以每页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": "" + } + } + }] +} +``` + +
+ +### 查询目标用户所在的分组 + +> https://api.bilibili.com/x/relation/tag/user + +*请求方式: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 1} | str | 分组1名称 | | +| {加入的分组id n} | str | 分组n名称 | | +| …… | 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 + +> https://api.bilibili.com/x/relation/tag/special + +*请求方式: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 | 成员1mid | | +| 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 + ] +} +``` + +
+ +### 创建分组 + + + +> https://api.bilibili.com/x/relation/tag/create + +*请求方式: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:请求错误
22106:该分组已经存在
22103:分组名过长 | +| 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 + } +} +``` + +
+ +### 重命名分组 + +> https://api.bilibili.com/x/relation/tag/update + +*请求方式: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:请求错误
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 +} +``` + +
+ +### 删除分组 + + + +> https://api.bilibili.com/x/relation/tag/del + +*请求方式: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 +} +``` + +
+ +### 修改分组成员 + + + +> https://api.bilibili.com/x/relation/tags/addUsers + +*请求方式: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 +} +``` + +
+ +### 复制关注到分组 + +> https://api.bilibili.com/x/relation/tags/copyUsers + +*请求方式: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 +} +``` + +
+ +### 移动关注到分组 + +> https://api.bilibili.com/x/relation/tags/moveUsers + +*请求方式: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..4b2a683 --- /dev/null +++ b/docs/user/space.md @@ -0,0 +1,4832 @@ +# 用户空间相关 + +- [主页](#主页) + - [置顶视频](#置顶视频) + - [查询用户置顶视频](#查询用户置顶视频) + - [设置置顶视频](#设置置顶视频) + - [取消置顶视频](#取消置顶视频) + - [代表作视频](#代表作视频) + - [查询用户代表作视频列表](#查询用户代表作视频列表) + - [添加代表作视频](#添加代表作视频) + - [删除代表作视频](#删除代表作视频) + - [个人TAG](#个人TAG) + - [查看用户个人TAG](#查看用户个人TAG) + - [修改个人TAG](#修改个人TAG) + - [空间公告](#空间公告) + - [查看用户空间公告](#查看用户空间公告) + - [修改空间公告](#修改空间公告) + - [主页板块布局与权限](#主页板块布局与权限) + - [查询空间设置](#查询空间设置) + - [调整空间板块布局](#调整空间板块布局) + - [修改空间隐私权限](#修改空间隐私权限) + - [查询用户最近玩过的游戏](#查询用户最近玩过的游戏) + - [获取用户最近投币的视频明细](#获取用户最近投币的视频明细) + - [获取用户最近点赞的视频明细](#获取用户最近点赞的视频明细) +- [投稿](#投稿) + - [查询用户投稿视频明细](#查询用户投稿视频明细) + - [查询用户投稿相簿预览](#查询用户投稿相簿预览) + - [查询用户投稿相簿明细](#查询用户投稿相簿明细) +- [频道](#频道) + - [查询用户频道列表](#查询用户频道列表) + - [查询用户频道中的视频](#查询用户频道中的视频) + - [创建频道](#创建频道) + - [修改频道](#修改频道) + - [删除频道](#删除频道) + - [频道添加视频](#频道添加视频) + - [频道删除视频](#频道删除视频) + - [调整频道视频排序](#调整频道视频排序) + - [检查频道中有无失效视频](#检查频道中有无失效视频) +- [收藏](#收藏) + - [查询用户创建的视频收藏夹](#查询用户创建的视频收藏夹) + - [查询用户收藏的视频收藏夹](#查询用户收藏的视频收藏夹) +- [课程](#课程) + - [查询用户发布的课程列表](#查询用户发布的课程列表) +- [订阅](#订阅) + - [查询用户追番预览列表](#查询用户追番预览列表) + - [查询用户追番(追剧)明细](#查询用户追番(追剧)明细) + - [查询用户关注的TAG(话题)](#查询用户关注的TAG话题) + +--- + +## 主页 + + + +### 置顶视频 + +#### 查询用户置顶视频 + +>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:转载 | +| 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 '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 +} +``` + +
+ +### 主页板块布局与权限 + +#### 查询空间设置 + +> https://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为`https://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 'https://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 + } + } +} +``` + +
+ +#### 调整空间板块布局 + +> https://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回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------|------|------|---------------------------| +| ststus | bool | 操作结果 | true:操作成功
false:操作失败 | +| data | str | 错误信息 | 正确时无此项 | + +**示例:** + +调整空间布局为: + +>我的稿件 直播间 +>我的专栏 个人资料 +>订阅番剧 公告 +>我的收藏夹 官方活动 +>我的相簿 最近玩的游戏 +>最近投币的视频 +>订阅标签 +>我的频道 + +```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 +} +``` + +
+ +#### 修改空间隐私权限 + +> https://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回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------|------|------|---------------------------| +| ststus | 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* + +**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": "明日方舟" + } + ] +} +``` + +
+ +### 获取用户最近投币的视频明细 + +> https://api.bilibili.com/x/space/coin/video + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 仅包含最近投币的20个视频,如超过指定时间未投币(也许一个月),列表将为空 + +**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 -L -X GET 'https://api.bilibili.com/x/space/coin/video?vmid=15858903' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [ + { + "aid": 259434557, + "videos": 1, + "tid": 218, + "tname": "喵星人", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/47d46ad72bf1898ebbfe7d82a9d972d4b53e61fc.jpg", + "title": "42度在家造溜冰场降温,猫上去直呼脚滑!", + "pubdate": 1660361400, + "ctime": 1660361407, + "desc": "刚开始真的觉得很难,不可能,学会理论知识后觉得,就这?太简单了,所以随便做做是成立的。就是学费有点贵,1w多……,我现在空调随便修!希望日后修空调能把这钱在挣回来!(溜冰场上期指路:BV1ga411f79y)\n萌宠区手工up主往期发明指路: \n猫力跑步发电机:BV1iy4y1a7Cb \n电动撸毛器:BV1H64y1v7gq\n戒烟头盔:BV1H64y1k7tz \n猫热能暖床器:BV1xF411i7tw \n全透明赏猫床:BV1Qb4y1C7sn \n写不完啦 还有很多,就要靠各位慢慢挖掘啦!", + "state": 0, + "duration": 501, + "mission_id": 859937, + "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": 20951119, + "name": "蒂姆嘟嘟Tim", + "face": "http://i1.hdslb.com/bfs/face/9860c4c559fd2517b1fa92e592d3d71b95bb3ec2.jpg" + }, + "stat": { + "aid": 259434557, + "view": 1403311, + "danmaku": 5762, + "reply": 1295, + "favorite": 26633, + "coin": 100847, + "share": 4502, + "now_rank": 0, + "his_rank": 64, + "like": 130944, + "dislike": 0 + }, + "dynamic": "猫确实会两条腿滑冰!猫和老鼠诚不欺我", + "cid": 800970167, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 3702, + "short_link_v2": "https://b23.tv/BV1wa411Z77n", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220812a228chhkmeci9f0hizo6ivhzv_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1wa411Z77n", + "coins": 2, + "time": 1662182649, + "ip": "", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + } + ] +} +``` + +
+ +### 获取用户最近点赞的视频明细 + +> https://api.bilibili.com/x/space/like/video + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 仅包含最近点赞的20个视频,也可能为空 + +**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 -L -X GET 'https://api.bilibili.com/x/space/like/video?vmid=15858903' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": [ + { + "aid": 53516907, + "videos": 1, + "tid": 26, + "tname": "音MAD", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/3653400bb9a5996c9f0702d20fc431210dca0c5e.jpg", + "title": "喵内我回来了Brain Power", + "pubdate": 1558756227, + "ctime": 1558756227, + "desc": "在准备一个合作,所以一直没更新,O-oooooooooo AAAAE-A-A-I-A-U- JO-oooooooooooo AAE-O-A-A-U-U-A- E-eee-ee-eee AAAAE-A-E-I-E-A- JO-ooo-oo-oo-oo EEEEO-A-AAA-AAAA", + "state": 0, + "duration": 48, + "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": 12466098, + "name": "不知道4576", + "face": "http://i0.hdslb.com/bfs/face/1361b4a2e686e9efa89fc0f1024985d0c44345c6.jpg" + }, + "stat": { + "aid": 53516907, + "view": 125484, + "danmaku": 258, + "reply": 441, + "favorite": 4268, + "coin": 3132, + "share": 859, + "now_rank": 0, + "his_rank": 0, + "like": 5767, + "dislike": 0 + }, + "dynamic": "#BRAIN POWER##音MAD##天使降临到我身边#", + "cid": 93639076, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1V4411s7Qr", + "bvid": "BV1V4411s7Qr", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 557851916, + "videos": 1, + "tid": 122, + "tname": "野生技能协会", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/fea0d9efa7e2dc8cd9960bd466f78b2ed84d907d.jpg", + "title": "请问:「宁可在屎山上不断堆代码,也不愿意优化项目需求」❓", + "pubdate": 1662441923, + "ctime": 1662441923, + "desc": "https://fishc.com.cn/thread-217312-1-1.html\n⬆️关于产品迭代的3个关键⬆️", + "state": 0, + "duration": 312, + "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": 314076440, + "name": "鱼C-小甲鱼", + "face": "http://i2.hdslb.com/bfs/face/4543ce186f9b74e60a85e66c010187bd3be3d0e1.jpg" + }, + "stat": { + "aid": 557851916, + "view": 89834, + "danmaku": 245, + "reply": 164, + "favorite": 490, + "coin": 265, + "share": 570, + "now_rank": 0, + "his_rank": 0, + "like": 1601, + "dislike": 0 + }, + "dynamic": "【遇山开路 逢水搭桥】超完美产品是如何「迭代」出来的❓", + "cid": 825277912, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 4830, + "short_link_v2": "https://b23.tv/BV1pe4y1C7XD", + "up_from_v2": 20, + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220906qn22r4a6hff6vie1bodoftvgi_firsti.jpg", + "pub_location": "广东", + "bvid": "BV1pe4y1C7XD", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 730007618, + "videos": 1, + "tid": 27, + "tname": "综合", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/1f65fd131db7eb81fd270e6ccb7257b68dfd60c4.jpg", + "title": "细!《猫和老鼠》中的小穿帮竟然有这么多!画师偷懒?", + "pubdate": 1661862565, + "ctime": 1661862565, + "desc": "BGM:超级马里奥世界\n 匈牙利狂想曲-李斯特\n Used to-James Carter", + "state": 0, + "duration": 338, + "mission_id": 779615, + "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": 38968617, + "name": "大福咕咕", + "face": "http://i0.hdslb.com/bfs/face/e4a00d5409f1888c10e7382bf15df0fbd9f78ae8.jpg" + }, + "stat": { + "aid": 730007618, + "view": 8052558, + "danmaku": 6994, + "reply": 1905, + "favorite": 181436, + "coin": 113827, + "share": 5447, + "now_rank": 0, + "his_rank": 2, + "like": 698492, + "dislike": 0 + }, + "dynamic": "考虑到广大朋友们要开学了 直接提前更新!", + "cid": 819285197, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 371093, + "short_link_v2": "https://b23.tv/BV1kD4y1672t", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220830a238owa0pg6docs2wak8t6tg2_firsti.jpg", + "pub_location": "北京", + "bvid": "BV1kD4y1672t", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 886537437, + "videos": 2, + "tid": 22, + "tname": "鬼畜调教", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/db9314a8b2730ee95cb9cac7fc5054c770ea9c9f.jpg", + "title": "电棍:向♿奔去(修复版)", + "pubdate": 1612420280, + "ctime": 1612420280, + "desc": "原作@_Karasu_ \n拙劣的模仿 歌词有修改", + "state": 0, + "duration": 448, + "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": 12771348, + "name": "DJRicher", + "face": "http://i0.hdslb.com/bfs/face/4a033640048238cb039add4e064804e227e87082.jpg" + }, + "stat": { + "aid": 886537437, + "view": 8790816, + "danmaku": 11516, + "reply": 50330, + "favorite": 106746, + "coin": 157098, + "share": 66553, + "now_rank": 0, + "his_rank": 0, + "like": 155180, + "dislike": 0 + }, + "dynamic": "", + "cid": 312766707, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1vK4y1p7F5", + "bvid": "BV1vK4y1p7F5", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 514421957, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/8570e2264c585ec47fa2f90f0fb41fcbe24082c1.jpg", + "title": "女子“巨乳症” 至Q杯,医生切除26斤赘乳", + "pubdate": 1660436958, + "ctime": 1660436958, + "desc": "网络", + "state": 0, + "duration": 157, + "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": 153362257, + "name": "微胖委员会", + "face": "http://i1.hdslb.com/bfs/face/7bce12b8b5fef2f31d215dec94fc5fc18cdd41a2.jpg" + }, + "stat": { + "aid": 514421957, + "view": 1863705, + "danmaku": 1357, + "reply": 2953, + "favorite": 3091, + "coin": 95, + "share": 25867, + "now_rank": 0, + "his_rank": 0, + "like": 16315, + "dislike": 0 + }, + "dynamic": "", + "cid": 802910768, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1xg411k7L1", + "up_from_v2": 8, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220814qn1cm2zo6jetqmu2nvlcxssy1_firsti.jpg", + "pub_location": "江苏", + "bvid": "BV1xg411k7L1", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 259434557, + "videos": 1, + "tid": 218, + "tname": "喵星人", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/47d46ad72bf1898ebbfe7d82a9d972d4b53e61fc.jpg", + "title": "42度在家造溜冰场降温,猫上去直呼脚滑!", + "pubdate": 1660361400, + "ctime": 1660361407, + "desc": "刚开始真的觉得很难,不可能,学会理论知识后觉得,就这?太简单了,所以随便做做是成立的。就是学费有点贵,1w多……,我现在空调随便修!希望日后修空调能把这钱在挣回来!(溜冰场上期指路:BV1ga411f79y)\n萌宠区手工up主往期发明指路: \n猫力跑步发电机:BV1iy4y1a7Cb \n电动撸毛器:BV1H64y1v7gq\n戒烟头盔:BV1H64y1k7tz \n猫热能暖床器:BV1xF411i7tw \n全透明赏猫床:BV1Qb4y1C7sn \n写不完啦 还有很多,就要靠各位慢慢挖掘啦!", + "state": 0, + "duration": 501, + "mission_id": 859937, + "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": 20951119, + "name": "蒂姆嘟嘟Tim", + "face": "http://i1.hdslb.com/bfs/face/9860c4c559fd2517b1fa92e592d3d71b95bb3ec2.jpg" + }, + "stat": { + "aid": 259434557, + "view": 1403315, + "danmaku": 5762, + "reply": 1295, + "favorite": 26633, + "coin": 100847, + "share": 4502, + "now_rank": 0, + "his_rank": 64, + "like": 130944, + "dislike": 0 + }, + "dynamic": "猫确实会两条腿滑冰!猫和老鼠诚不欺我", + "cid": 800970167, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 3702, + "short_link_v2": "https://b23.tv/BV1wa411Z77n", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220812a228chhkmeci9f0hizo6ivhzv_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1wa411Z77n", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 765765040, + "videos": 1, + "tid": 26, + "tname": "音MAD", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/f92297d237bc330e4c70bd7cb4b6a5988a4a35df.jpg", + "title": "向 先 辈 奔 去", + "pubdate": 1642843003, + "ctime": 1642843003, + "desc": "远野说大家听不出他的和声所以不愿意来了(迫真)\nBGM:夜に駆ける\nPV:BV1Ph411C7S5\n封面:@十人比白 \n其他作品:\n病 名 为 臭 BV1W3411Y7R3\nHomo KING BV1p3411Y7Qf\n先 辈 の 名 は BV1bF411p7W7\n野兽先辈的消失 BV1XL4y147KK", + "state": 0, + "duration": 119, + "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": 26540403, + "name": "小王子擎天", + "face": "http://i0.hdslb.com/bfs/face/70723d05c4fcd3af47ac7e453bee06feea48b804.jpg" + }, + "stat": { + "aid": 765765040, + "view": 125123, + "danmaku": 168, + "reply": 384, + "favorite": 3518, + "coin": 878, + "share": 858, + "now_rank": 0, + "his_rank": 0, + "like": 6224, + "dislike": 0 + }, + "dynamic": "", + "cid": 490015078, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 185827, + "short_link_v2": "https://b23.tv/BV19r4y1Y7De", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220122a26mtv7cs4x1ga3329ew4cqhb_firsti.jpg", + "bvid": "BV19r4y1Y7De", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 599348400, + "videos": 1, + "tid": 218, + "tname": "喵星人", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/6c0b56f7b2a378e32c40c2ec7cf4a34cf6e42ad2.jpg", + "title": "打开前请先降低音量哦!!", + "pubdate": 1660007700, + "ctime": 1660007701, + "desc": "日常投食小猫咪\n视频里的是两个窝次的15只崽崽\n5月30日和6月1日出生\nliliya和Tessa的宝宝", + "state": 0, + "duration": 203, + "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": 43099315, + "name": "颖姥姥的小猪喵", + "face": "http://i1.hdslb.com/bfs/face/6261098e074624891f5f1cdf35b4df64401c4307.jpg" + }, + "stat": { + "aid": 599348400, + "view": 5611104, + "danmaku": 14300, + "reply": 8180, + "favorite": 122270, + "coin": 45195, + "share": 126333, + "now_rank": 0, + "his_rank": 5, + "like": 536114, + "dislike": 0 + }, + "dynamic": "日常投食小猫咪\n视频里的是两个窝次的15只崽崽\n5月30日和6月1日出生\nliliya和Tessa的宝宝", + "cid": 797762429, + "dimension": { + "width": 1080, + "height": 1920, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1cB4y167B8", + "up_from_v2": 9, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220809a2ku7vu7oisum1632zs07p7dg_firsti.jpg", + "pub_location": "山东", + "bvid": "BV1cB4y167B8", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 472194944, + "videos": 1, + "tid": 162, + "tname": "绘画", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/aee4307632ecad127f60ae556cc5981f1a329c15.jpg", + "title": "有些画,不需要太清晰", + "pubdate": 1660817303, + "ctime": 1660817303, + "desc": "先画个狗头保命", + "state": 0, + "duration": 147, + "mission_id": 761022, + "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": 28330240, + "name": "叶无趣", + "face": "http://i1.hdslb.com/bfs/face/9416d6dd723d271bdd805ccf2e44dc47436c5a07.jpg" + }, + "stat": { + "aid": 472194944, + "view": 2378719, + "danmaku": 6517, + "reply": 2815, + "favorite": 33778, + "coin": 24411, + "share": 11461, + "now_rank": 0, + "his_rank": 0, + "like": 209110, + "dislike": 0 + }, + "dynamic": "", + "cid": 807922809, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1DT411c7AD", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220819a213lvuk7uqfgh91m9lv1esx1_firsti.jpg", + "pub_location": "湖南", + "bvid": "BV1DT411c7AD", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 599779624, + "videos": 1, + "tid": 173, + "tname": "桌游棋牌", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/70800347ccbd019b678b41318c203b8fecb9aaec.jpg", + "title": "【雀魂汪汪录】第196期 谁能给我翻译翻译 什么叫做惊喜", + "pubdate": 1661394900, + "ctime": 1661252218, + "desc": "BGM可以通过网易云搜索【雀魂汪汪录BGM】就可以找到啦!\n雀魂汪汪录 周四中午见\n微博 @雀魂麻将majsoul\n——————————————————————————\n想要投稿的玩家~务必请通过邮箱来进行投稿~【请不要在评论区或是私信投稿,谢谢】\n邮箱地址:tg@catfoodstudio.com\n投稿最少需要注明【局目、内容、牌谱链接】哦!", + "state": 0, + "duration": 575, + "mission_id": 808212, + "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": 353240497, + "name": "雀魂麻将majsoul", + "face": "http://i1.hdslb.com/bfs/face/053f02d2a7eb96884b1020ca20d6d02241df6099.jpg" + }, + "stat": { + "aid": 599779624, + "view": 187150, + "danmaku": 1958, + "reply": 516, + "favorite": 342, + "coin": 787, + "share": 646, + "now_rank": 0, + "his_rank": 0, + "like": 7429, + "dislike": 0 + }, + "dynamic": "#雀魂# #雀魂汪汪录# #立直麻将#", + "cid": 812183140, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 2739, + "short_link_v2": "https://b23.tv/BV1aB4y1z74J", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220823qn266np8ftodq2t2m2paam9xj_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1aB4y1z74J", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 685619632, + "videos": 1, + "tid": 17, + "tname": "单机游戏", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/750b5fabea1ff363d775ba58f95a23b5cb890be9.jpg", + "title": "多人群峦传说联机3:用木炭炉做出铜溶液,浇筑出铜镐和探矿镐!", + "pubdate": 1656756676, + "ctime": 1656756677, + "desc": "-", + "state": 0, + "duration": 268, + "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": 1771879421, + "name": "方块局安神", + "face": "http://i2.hdslb.com/bfs/face/c3781165f41f2b4d99e7beb1356105f624cc424e.jpg" + }, + "stat": { + "aid": 685619632, + "view": 215, + "danmaku": 0, + "reply": 2, + "favorite": 1, + "coin": 0, + "share": 0, + "now_rank": 0, + "his_rank": 0, + "like": 8, + "dislike": 0 + }, + "dynamic": "", + "cid": 761921385, + "dimension": { + "width": 1920, + "height": 864, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1MU4y1D7ND", + "up_from_v2": 35, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220702qndfrow9p4eq991lyl8em2v9w_firsti.jpg", + "pub_location": "宁夏", + "bvid": "BV1MU4y1D7ND", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 427974127, + "videos": 1, + "tid": 17, + "tname": "单机游戏", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/1f81be8fd2eec800e3134f24928b66b75c25a078.jpg", + "title": "多人群峦传说联机1:开局做出篝火和木炭窑!很快的进入陶器时代!", + "pubdate": 1656660681, + "ctime": 1656660682, + "desc": "-", + "state": 0, + "duration": 313, + "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": 1771879421, + "name": "方块局安神", + "face": "http://i2.hdslb.com/bfs/face/c3781165f41f2b4d99e7beb1356105f624cc424e.jpg" + }, + "stat": { + "aid": 427974127, + "view": 186, + "danmaku": 0, + "reply": 7, + "favorite": 1, + "coin": 2, + "share": 0, + "now_rank": 0, + "his_rank": 0, + "like": 7, + "dislike": 0 + }, + "dynamic": "", + "cid": 760818007, + "dimension": { + "width": 1920, + "height": 864, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1MG411x7Jh", + "up_from_v2": 35, + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220701qn3ejknxipb82r1a0hut5chj5_firsti.jpg", + "pub_location": "宁夏", + "bvid": "BV1MG411x7Jh", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 602112213, + "videos": 1, + "tid": 22, + "tname": "鬼畜调教", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/5edabb39c8ac3a3202111e8e60f8e45b8b3c180d.jpg", + "title": "你被百度骗了,呵呵", + "pubdate": 1660561467, + "ctime": 1660561467, + "desc": "分区和参与活动真的合理吗()\n很草的点子\n烂活", + "state": 0, + "duration": 62, + "mission_id": 738105, + "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": 361685930, + "name": "啰嗦_Losso", + "face": "http://i2.hdslb.com/bfs/face/e26253ff660c19fdb953825aef990c30ad08c8dc.jpg" + }, + "stat": { + "aid": 602112213, + "view": 58957, + "danmaku": 112, + "reply": 231, + "favorite": 1401, + "coin": 514, + "share": 117, + "now_rank": 0, + "his_rank": 0, + "like": 9353, + "dislike": 0 + }, + "dynamic": "", + "cid": 804462941, + "dimension": { + "width": 828, + "height": 1792, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1yB4y1L7iG", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220815qn31gxoi0spl1yr35uq27n3u4_firsti.jpg", + "pub_location": "美国", + "bvid": "BV1yB4y1L7iG", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 856393020, + "videos": 1, + "tid": 238, + "tname": "运动综合", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/d7edbba4eb63bb9ceed978ae46e676cb3fdbaf6a.jpg", + "title": "极限难度!不碰其他球把45颗球打入洞中!海外知名桌球博主来B站啦!", + "pubdate": 1659105213, + "ctime": 1659105213, + "desc": "", + "state": 0, + "duration": 756, + "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": 1954176521, + "name": "桌球小哥genipool官方", + "face": "http://i2.hdslb.com/bfs/face/90ca22fa8c79d0d5042c7c24daf1ec574679a740.jpg" + }, + "stat": { + "aid": 856393020, + "view": 342876, + "danmaku": 365, + "reply": 159, + "favorite": 809, + "coin": 800, + "share": 283, + "now_rank": 0, + "his_rank": 0, + "like": 4266, + "dislike": 0 + }, + "dynamic": "", + "cid": 788065599, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV18V4y1E7zo", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220729qn15m1fxzexlmvq1j541qvx6r_firsti.jpg", + "pub_location": "福建", + "bvid": "BV18V4y1E7zo", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 728238452, + "videos": 1, + "tid": 232, + "tname": "科工机械", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/6613ccabbf0828d0071efbb2351818c3cab62725.jpg", + "title": "烧脑故障,家庭漏电维修图解", + "pubdate": 1657075740, + "ctime": 1657075740, + "desc": "-", + "state": 0, + "duration": 433, + "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": 1985127693, + "name": "城阳电工电路", + "face": "http://i0.hdslb.com/bfs/face/faae5daababbf652d97faedab1a25d78b654fc44.jpg" + }, + "stat": { + "aid": 728238452, + "view": 138664, + "danmaku": 277, + "reply": 263, + "favorite": 681, + "coin": 601, + "share": 85, + "now_rank": 0, + "his_rank": 0, + "like": 9567, + "dislike": 0 + }, + "dynamic": "", + "cid": 765013281, + "dimension": { + "width": 1080, + "height": 1920, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV12S4y1E7rt", + "up_from_v2": 8, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220706qn257g5ymn00jrq1tbc2y0k4s_firsti.jpg", + "pub_location": "山东", + "bvid": "BV12S4y1E7rt", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 556671285, + "videos": 1, + "tid": 173, + "tname": "桌游棋牌", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/02aa212793ebfdc5bd2b243109961d01ef74015f.jpg", + "title": "【整活向】麻将新手不常见错误示范——偷换牌山", + "pubdate": 1659761706, + "ctime": 1659761706, + "desc": "大家千万不要学习@肉目 的反面教材噢\n不然胡萝卜很快就被切光了", + "state": 0, + "duration": 61, + "mission_id": 808212, + "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": 5256791, + "name": "凤鸣麻雀社", + "face": "http://i2.hdslb.com/bfs/face/79c578d5a00dc25498913187f1e2e7b63463b027.jpg" + }, + "stat": { + "aid": 556671285, + "view": 28016, + "danmaku": 17, + "reply": 62, + "favorite": 25, + "coin": 34, + "share": 22, + "now_rank": 0, + "his_rank": 0, + "like": 845, + "dislike": 0 + }, + "dynamic": "健康麻将 保护胡萝卜 从@肉目 做起\n玩儿花的手法是越来越熟练了 危险危险", + "cid": 795200966, + "dimension": { + "width": 1080, + "height": 1440, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV12e4y1D7mp", + "up_from_v2": 8, + "first_frame": "http://i0.hdslb.com/bfs/storyff/n220806a21h7h5icb0b5fv1v71d6cwu7_firsti.jpg", + "pub_location": "广东", + "bvid": "BV12e4y1D7mp", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 471592118, + "videos": 1, + "tid": 59, + "tname": "演奏", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/3f1fcd0461235f8881a86faaa1321744b251b26f.jpg", + "title": "有仪式感的植物大战僵尸", + "pubdate": 1659409876, + "ctime": 1659409876, + "desc": "-", + "state": 0, + "duration": 150, + "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": 523219895, + "name": "上官画画", + "face": "http://i2.hdslb.com/bfs/face/a69355ca44c5343e202e1e1294245ba588e92e96.jpg" + }, + "stat": { + "aid": 471592118, + "view": 314596, + "danmaku": 302, + "reply": 630, + "favorite": 2532, + "coin": 2648, + "share": 1294, + "now_rank": 0, + "his_rank": 0, + "like": 20552, + "dislike": 0 + }, + "dynamic": "", + "cid": 791291889, + "dimension": { + "width": 960, + "height": 540, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1WT41177PD", + "up_from_v2": 36, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220802qn3bbryqe32dploiilb7xtqft_firsti.jpg", + "pub_location": "浙江", + "bvid": "BV1WT41177PD", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 599162361, + "videos": 1, + "tid": 238, + "tname": "运动综合", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/bc086df16873a9bc619d625bc176359220062d79.jpg", + "title": "张镇辉台球正经教学【6个不太建议使用的技巧】15.0版本", + "pubdate": 1659690000, + "ctime": 1659690022, + "desc": "靓仔,用一句话证明你是老粉!!\n \n \n \n长按点赞,有彩蛋哟~", + "state": 0, + "duration": 119, + "mission_id": 846900, + "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": 88895225, + "name": "张镇辉台球教学", + "face": "http://i2.hdslb.com/bfs/face/2af69641c86d3915440b28ef64214e112390c15c.jpg" + }, + "stat": { + "aid": 599162361, + "view": 2275313, + "danmaku": 23143, + "reply": 2608, + "favorite": 22825, + "coin": 15344, + "share": 3584, + "now_rank": 0, + "his_rank": 73, + "like": 243787, + "dislike": 0 + }, + "dynamic": "", + "cid": 794017093, + "dimension": { + "width": 2160, + "height": 3840, + "rotate": 0 + }, + "season_id": 39377, + "short_link_v2": "https://b23.tv/BV1CB4y1r7d5", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220805qn1xjr322hy7j1tc0t7ntj0r3_firsti.jpg", + "pub_location": "广东", + "bvid": "BV1CB4y1r7d5", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + }, + { + "aid": 729057411, + "videos": 1, + "tid": 59, + "tname": "演奏", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/365e41383e10a774d54b908c018e66a0f90bcc65.jpg", + "title": "今天练练脚下钢琴", + "pubdate": 1659322244, + "ctime": 1659322244, + "desc": "-", + "state": 0, + "duration": 16, + "mission_id": 741439, + "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": 397865300, + "name": "Rhythm梦龙", + "face": "http://i2.hdslb.com/bfs/face/297f26c89a43d60619e552d5606e575d2a8406aa.jpg" + }, + "stat": { + "aid": 729057411, + "view": 17740, + "danmaku": 8, + "reply": 27, + "favorite": 74, + "coin": 37, + "share": 20, + "now_rank": 0, + "his_rank": 0, + "like": 1878, + "dislike": 0 + }, + "dynamic": "", + "cid": 790320365, + "dimension": { + "width": 1080, + "height": 1920, + "rotate": 0 + }, + "short_link_v2": "https://b23.tv/BV1zS4y1x7ZM", + "up_from_v2": 9, + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220801qn337b2rig3v6l23kyehiinaa_firsti.jpg", + "pub_location": "上海", + "bvid": "BV1zS4y1x7ZM", + "inter_video": false, + "resource_type": "ugc", + "subtitle": "" + } + ] + } +} +``` + +
+ +## 投稿 + + + +### 查询用户投稿视频明细 + +> https://api.bilibili.com/x/space/wbi/arc/search + +> https://api.bilibili.com/x/space/arc/search (旧) + +PS:旧 api 存在一些不同,比如某些情况下,例如 mid=2 时如果没有设置 Cookie 则出现非法访问(-401),但新 api 不会。 + + +*请求方式:GET* + +**header字段:** + +必须要有 `user-agent`,且不能为 `空字符串`,以及含有 `python`、`node`、`curl` 等的字符串。 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|---------|-----|---------|-----|-------------------------------------------------------------| +| mid | num | 目标用户mid | 必要 | | +| order | str | 排序方式 | 非必要 | 默认为pubdate
最新发布:pubdate
最多播放:click
最多收藏:stow | +| tid | num | 筛选目标分区 | 非必要 | 默认为0
0:不进行分区筛选
分区tid为所筛选的分区 | +| keyword | str | 关键词筛选 | 非必要 | 用于使用关键词搜索该UP主视频稿件 | +| pn | num | 页码 | 非必要 | | +| ps | num | 每页项数 | 非必要 | 最小1,最大50,默认30 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|----------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-412:请求被拦截
-1200:被降级过滤的请求(一种意义不明的偶发状况) | +| 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 | | | | + +`data`中的`list`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-------|----------|-----| +| 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 | | +| author | str | 视频UP主 | 不一定为目标用户(合作视频) | +| bvid | str | 稿件bvid | | +| comment | num | 视频评论数 | | +| copyright | str | 空 | 作用尚不明确 | +| created | num | 投稿时间 | 时间戳 | +| description | str | 视频简介 | | +| hide_click | bool | false | 作用尚不明确 | +| is_pay | num | 0 | 作用尚不明确 | +| is_union_video | num | 是否为合作视频 | 0:否
1:是 | +| length | str | 视频长度 | MM:SS | +| mid | num | 视频UP主mid | 不一定为目标用户(合作视频) | +| pic | str | 视频封面 | | +| play | num | 视频播放次数 | 如果视频基本信息API对应的状态为-403视频访问权限不足,数据类型将变为str,如("play": "--",),于mid79发表的av5132474可见 | +| review | num | 0 | 作用尚不明确 | +| subtitle | str | 空 | 作用尚不明确 | +| title | str | 视频标题 | | +| typeid | num | 视频分区tid | | +| video_review | num | 视频弹幕数 | | +| is_steins_gate | num | 0 | | +| is_live_playback | num | 0 | | +| meta | | | | +| is_avoided | num | 0 | | +| attribute | 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/wbi/arc/search' \ +--data-urlencode 'mid=53456' \ +--data-urlencode 'ps=2' \ +--data-urlencode 'pn=1' \ +--user-agent 'go' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": { + "tlist": { + "1": { + "tid": 1, + "count": 41, + "name": "动画" + }, + "3": { + "tid": 3, + "count": 36, + "name": "音乐" + }, + "4": { + "tid": 4, + "count": 82, + "name": "游戏" + }, + "36": { + "tid": 36, + "count": 1, + "name": "知识" + }, + "160": { + "tid": 160, + "count": 49, + "name": "生活" + }, + "211": { + "tid": 211, + "count": 3, + "name": "美食" + }, + "217": { + "tid": 217, + "count": 2, + "name": "动物圈" + } + }, + "vlist": [ + { + "comment": 6729, + "typeid": 172, + "play": 2171260, + "pic": "http://i2.hdslb.com/bfs/archive/9fe04c2acb6678c9a8d1547db211e458ea70982c.jpg", + "subtitle": "", + "description": "好开心能和几千人一起看音乐会!真的震撼到我了,它给我带来的冲击感远超出了我的想象……光遇这场音乐会会一直持续到元旦哦,大家感兴趣的话也可以来试试吧~\n祝看得开心啦!", + "copyright": "1", + "title": "【warma】我尝试学习交朋友", + "review": 0, + "author": "Warma", + "mid": 53456, + "created": 1671163200, + "length": "23:58", + "video_review": 7931, + "aid": 433873134, + "bvid": "BV1nG411P7hf", + "hide_click": false, + "is_pay": 0, + "is_union_video": 0, + "is_steins_gate": 0, + "is_live_playback": 0, + "meta": null, + "is_avoided": 0, + "attribute": 0 + }, + { + "comment": 3380, + "typeid": 31, + "play": 811600, + "pic": "http://i2.hdslb.com/bfs/archive/7e6c6ec32a0db8684abd660d599644e9d1c43ee4.jpg", + "subtitle": "", + "description": "原曲:BV1iR4y1X7V9\n这首歌是今年生日的时候收到的礼物,真的太好听了!我也想翻唱试试~\n在翻唱中录了一些不一样的小音效,比如卡祖笛和竖笛,还录了些小配音……大家来听听看!\n谢谢原曲staff老师们做出这么有趣的作品,谢谢在这次翻唱中staff老师们的帮助(PV老师甚至根据翻唱版本把曲子的PV做了些修改,加了好多小细节,真的超用心!)\n祝听得开心啦~\n \n【staff表】\n原曲staff:详见BV1iR4y1X7V9\n翻唱:warma\n混音:白萝卜音乐工作室\nPV修改:@颜一bot \n封面:是根", + "copyright": "1", + "title": "【warma】来唱大家送我的歌!《夏天幻游日记》", + "review": 0, + "author": "Warma", + "mid": 53456, + "created": 1670558400, + "length": "02:59", + "video_review": 2343, + "aid": 733323002, + "bvid": "BV18D4y1Y7o6", + "hide_click": false, + "is_pay": 0, + "is_union_video": 0, + "is_steins_gate": 0, + "is_live_playback": 0, + "meta": null, + "is_avoided": 0, + "attribute": 0 + } + ] + }, + "page": { + "pn": 1, + "ps": 2, + "count": 214 + }, + "episodic_button": { + "text": "播放全部", + "uri": "//www.bilibili.com/medialist/play/53456?from=space" + }, + "is_risk": false, + "gaia_res_type": 0, + "gaia_data": null + } +} +``` + +
+ +### 查询用户投稿相簿预览 + +> 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 + +*请求方式: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/channel/list + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|---------|-----|-----| +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|----------------------------| +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | 无则为空 所有频道内均无视频则为空,此时code为0 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-------|-------|-----| +| count | num | 总计频道数 | | +| list | array | 频道列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|---------|----------------| +| 0 | obj | 频道1 | | +| n | obj | 频道(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | …… | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----|---------|------| +| cid | num | 频道id | | +| count | num | 频道内含视频数 | | +| cover | str | 封面图片url | | +| intro | str | 简介 | 无则为空 | +| mid | num | 创建用户mid | | +| mtime | num | 创建时间 | 时间戳 | +| name | str | 标题 | | + +**示例:** + +查询用户`mid=53456`的频道列表 + +```shell +curl -G 'https://api.bilibili.com/x/space/channel/list' \ +--data-urlencode 'mid=53456' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 6, + "list": [{ + "cid": 100249, + "mid": 53456, + "name": "【实况】动物之森", + "intro": "", + "mtime": 1579898830, + "count": 2, + "cover": "http://i1.hdslb.com/bfs/archive/6a7ed9483c34e839dfca981b9e2b94cd4c4efa0a.jpg" + }, { + "cid": 79323, + "mid": 53456, + "name": "忆雨", + "intro": "忆雨出现过的视频", + "mtime": 1562535222, + "count": 7, + "cover": "http://i2.hdslb.com/bfs/archive/1783e4f03042b282495799adda1cb56270cea647.jpg" + }, { + "cid": 79322, + "mid": 53456, + "name": "大画家", + "intro": "", + "mtime": 1562535122, + "count": 6, + "cover": "http://i0.hdslb.com/bfs/archive/9c85a14e805c6c23cb7a42e1dbef97821bb68960.jpg" + }, { + "cid": 77758, + "mid": 53456, + "name": "灭火器", + "intro": "", + "mtime": 1561270856, + "count": 4, + "cover": "http://i2.hdslb.com/bfs/archive/0073208d086b4ebe9cdc540e7664aa74b483aeb6.jpg" + }, { + "cid": 75696, + "mid": 53456, + "name": "沃玛小剧场", + "intro": "", + "mtime": 1559129460, + "count": 5, + "cover": "http://i2.hdslb.com/bfs/archive/db2b20ecdb6ed013fc3780b0e741ea88d46b5b40.jpg" + }, { + "cid": 170, + "mid": 53456, + "name": "爆炸电台", + "intro": "闲聊的电台", + "mtime": 1503298893, + "count": 7, + "cover": "http://i2.hdslb.com/bfs/archive/73d77bc6bb0d44b239fd4f5a2682fe3144e81692.jpg" + }] + } +} +``` + +
+ + + +### 查询用户频道中的视频 + +> https://api.bilibili.com/x/space/channel/video + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|---------|-----|--------| +| mid | num | 目标用户mid | 必要 | | +| cid | num | 目标频道id | 必要 | | +| pn | num | 页码 | 非必要 | 默认为1 | +| ps | num | 每页项数 | 非必要 | 默认为100 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|----------------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无用户对应的频道 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|------|-----| +| list | obj | 频道信息 | | +| page | obj | 页面信息 | | + +`data`中的`list`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------|-------|---------|------| +| archives | array | 包含的视频列表 | | +| cid | num | 频道id | | +| count | num | 频道内含视频数 | | +| cover | str | 封面图片url | | +| intro | str | 简介 | 无则为空 | +| mid | num | 创建用户mid | | +| mtime | num | 创建时间 | 时间戳 | +| name | str | 标题 | | + +`list`中的`archives`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|---------|----------------| +| 0 | obj | 视频1 | | +| n | obj | 视频(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | …… | + +`list`中的`archives`数组中的对象: + +基本同「[视频详细信息](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/video/info.md#视频详细信息(avid/bvid互转))」中的data对象 + +`data`中的`page`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---- | ---------- | ---- | +| count | num | 总计视频数 | | +| num | num | 当前页码 | | +| size | num | 每页项数 | | + +**示例:** + +查询用户`mid=53456`的频道`170`中的视频 + +```shell +curl -G 'https://api.bilibili.com/x/space/channel/video' \ +--data-urlencode 'mid=53456' \ +--data-urlencode 'cid=170' \ +--data-urlencode 'ps=2' \ +--data-urlencode 'pn=1' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "list": { + "cid": 170, + "mid": 53456, + "name": "爆炸电台", + "intro": "闲聊的电台", + "mtime": 1503298893, + "count": 7, + "cover": "http://i2.hdslb.com/bfs/archive/73d77bc6bb0d44b239fd4f5a2682fe3144e81692.jpg", + "archives": [{ + "aid": 87673204, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/5387bdcbbe4d5551adbf0ee2e607e4b7d3d8f2f0.jpg", + "title": "【warma爆炸电台】迟来的自我介绍【第八期】", + "pubdate": 1581244539, + "ctime": 1581244540, + "desc": "时隔半年的新的一期爆炸电台来啦,这是我的一系列杂谈聊天电台,这次因为多了很多新关注的朋友们,所以来做个自我介绍吧!\n画师:Dr-H_喵_ 动画:K_Lacid\n结尾提到的壁纸稍后在动态发原图,动态壁纸在steam那个壁纸软件的创意工坊里搜warma能找到\n\n往期的电台:\n第一期:av6786024 \n第三期:av13619263\n第四期:av18862091\n第五期:av25092410\n第六期:av42492515\n第七期:av62910468", + "state": 0, + "attribute": 16512, + "duration": 2388, + "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": 53456, + "name": "Warma", + "face": "http://i1.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg" + }, + "stat": { + "aid": 87673204, + "view": 1383542, + "danmaku": 88908, + "reply": 9237, + "favorite": 32929, + "coin": 68849, + "share": 5140, + "now_rank": 0, + "his_rank": 52, + "like": 116164, + "dislike": 0 + }, + "dynamic": "来做个自我介绍吧! #warma##沃玛##爆炸电台#", + "cid": 149793525, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV1D7411t7Be", + "inter_video": false + }, { + "aid": 62910468, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/4bd598f71a144d4505e259b143c0de0bf27968b2.jpg", + "title": "【warma爆炸电台】居然收到了几千条问题!【第七期】", + "pubdate": 1565345410, + "ctime": 1565338559, + "desc": "时隔半年的爆炸电台第七期终于来啦!在这一期里回答了很多问题,祝看得开心!此外,就在昨天,50万订阅了…真的谢谢大家!\n也欢迎来看往期的电台:\n第一期:av6786024 (2016年10月)\n第二期:av10373352(2017年5月)\n第三期:av13619263(2017年8月)\n第四期:av18862091(2018年1月)\n第五期:av25092410(2018年6月)\n第六期:av42492515(2019年2月)", + "state": 0, + "attribute": 16512, + "duration": 1987, + "mission_id": 11740, + "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": 53456, + "name": "Warma", + "face": "http://i1.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg" + }, + "stat": { + "aid": 62910468, + "view": 455277, + "danmaku": 19383, + "reply": 2108, + "favorite": 10507, + "coin": 19422, + "share": 1208, + "now_rank": 0, + "his_rank": 0, + "like": 31515, + "dislike": 0 + }, + "dynamic": "爆炸电台 第七期 来啦!", + "cid": 109284065, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "bvid": "BV1gt411K7Ga", + "inter_video": false + }] + }, + "page": { + "count": 7, + "num": 1, + "size": 2 + } + } +} +``` + +
+ +### 创建频道 + +> https://api.bilibili.com/x/space/channel/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +创建成功后会返回新建频道的id + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-------|-----|----------------------|-----|-----| +| name | str | 频道名 | 必要 | | +| intro | str | 频道简介 | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
53001:频道名字数超过限制
53002:频道简介字数超过限制
53004:创建的频道已经满额
53007:频道名称已经存在
53024:编辑内容命中敏感信息 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 数据本体 | 成功有此项 | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----|-----|------|-----| +| cid | num | 频道id | | + +**示例:** + +创建名为`test1`的频道,简介为空 + +```shell +curl 'https://api.bilibili.com/x/space/channel/add' \ +--data-urlencode 'name=test1' \ +--data-urlencode 'intro=' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "cid": 138996 + } +} +``` + +
+ +### 修改频道 + +> https://api.bilibili.com/x/space/channel/edit + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-------|-----|----------------------|-----|-----| +| cid | num | 频道id | 必要 | | +| name | str | 频道名 | 必要 | | +| intro | str | 频道简介 | 非必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|---------------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
53001:频道名字数超过限制
53002:频道简介字数超过限制
53007:频道名称已经存在
53024:编辑内容命中敏感信息 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +修改频道`138996`名称为`测试`,简介为`123456` + +```shell +curl 'https://api.bilibili.com/x/space/channel/edit' \ +--data-urlencode 'cid=138996' \ +--data-urlencode 'name=测试' \ +--data-urlencode 'intro=123456' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 删除频道 + +> https://api.bilibili.com/x/space/channel/del + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ---- | +| cid | num | 需要删除的频道id | 必要 | | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +删除频道`138996` + +```shell +curl 'https://api.bilibili.com/x/space/channel/del' \ +--data-urlencode 'cid=138996' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 频道添加视频 + +> https://api.bilibili.com/x/space/channel/video/add + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +仅能添加自己是UP主的视频 + +如添加多个视频,仅会添加正确的 + +**注:完成后需要使用接口「查询用户频道中的视频」刷新** + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|------|----------------------|-----|----------------| +| cid | num | 频道id | 必要 | | +| aids | nums | 要添加的目标稿件avid | 必要 | 多个使用","(%2C)分隔 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-------|------------|----------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-404:无此项
53003:本频道里的视频已满
53006:提交视频已失效或频道里有(非该视频UP主) | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | array | 出错稿件avid列表 | | + +`data`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|---------------|-----| +| 0 | num | 出错稿件avid1 | | +| n | num | 出错稿件avid(n+1) | | +| …… | num | …… | …… | + +**示例:** + +向频道`138995`中添加视频`av583785685`和`av243322853` + +```shell +curl 'https://api.bilibili.com/x/space/channel/video/add' \ +--data-urlencode 'cid=138995' \ +--data-urlencode 'aids=583785685,243322853' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": [] +} +``` + +
+ +### 频道删除视频 + +> https://api.bilibili.com/x/space/channel/video/del + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**注:完成后需要使用接口「查询用户频道中的视频」刷新** + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|--------------|-----|-----| +| cid | num | 频道id | 必要 | | +| aid | num | 要删除的目标稿件avid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误
-404:无此项
53008:频道内没有视频
53009:频道内没有该视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +删除频道`138995`中的视频`av583785685` + +```shell +curl 'https://api.bilibili.com/x/space/channel/video/del' \ +--data-urlencode 'cid=138995' \ +--data-urlencode 'aid=583785685' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 调整频道视频排序 + +> https://api.bilibili.com/x/space/channel/video/sort + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|-----|----------------------|-----|-----------------------------------------| +| cid | num | 频道id | 必要 | | +| aid | num | 要移动的目标稿件avid | 必要 | | +| to | num | 视频排序倒数位置 | 非必要 | 默认为1
1为列表底部,视频总数为首端
与显示顺序恰好相反 | +| csrf | str | CSRF Token(位于cookie) | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|--------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +调整`138995`中的视频`av583785685`位置为倒数第2 + +```shell +curl 'https://api.bilibili.com/x/space/channel/video/sort' \ +--data-urlencode 'cid=138995' \ +--data-urlencode 'aid=583785685' \ +--data-urlencode 'to=2' \ +--data-urlencode 'csrf=xxx' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +### 检查频道中有无失效视频 + +> https://api.bilibili.com/x/space/channel/video/check + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|--------|-----|-----| +| cid | num | 目标频道id | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|-----------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误
-404:无此项
53005:频道内有失效视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +检查频道`138995` + +```shell +curl -G 'https://api.bilibili.com/x/space/channel/video/check +--data-urlencode 'cid=138995' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1 +} +``` + +
+ +## 收藏 + + + +### 查询用户创建的视频收藏夹 + +> https://api.bilibili.com/x/v3/fav/folder/created/list-all + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +查看私有收藏夹时需要认证 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-----|---------|-----|-----| +| up_mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----------------------|------|---------------------| +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 隐藏时:null
公开时:obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----------------------------|---------|-----| +| count | num | 创建的收藏夹数 | | +| list | 无收藏夹时:null
有收藏夹时:array | 收藏夹列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +|-----|-----|----------|----------------| +| 0 | obj | 收藏夹1 | | +| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|-----------|-----------| +| id | num | 收藏夹mlid | | +| fid | num | 原始收藏夹mlid | 去除两位mid尾号 | +| mid | num | 创建用户mid | | +| attr | num | 收藏夹属性位配置 | | +| title | str | 收藏夹标题 | | +| fav_state | num | 0 | 作用尚不明确 | +| media_count | num | 收藏夹总计视频数 | | + +`attr`属性位二进制值表: + +| 位 | 内容 | 备注 | +|-----------|----------|----------------------| +| 0 | 是否为默认收藏夹 | 0:默认收藏夹
1:其他收藏夹 | +| 1 | 私有收藏夹 | 0:公开
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' +``` + +
+查看响应示例: + +```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 + }] + } +} +``` + +
+ +### 查询用户收藏的视频收藏夹 + +> https://api.bilibili.com/x/v3/fav/folder/collected/list + +*请求方式:GET* + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-----|---------|-----|--------------| +| ps | num | 每页项数 | 必要 | 定义域 1 - 大于70 | +| pn | num | 页码 | 必要 | | +| up_mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----------------------|------|---------------------------------------------------------| +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
40022:签名过长 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 隐藏时:null
公开时:obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----------------------------|---------|-----| +| count | num | 创建的收藏夹数 | | +| list | 无收藏夹时:null
有收藏夹时: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 | 收藏夹属性 | 转换成8-bit二进制处理
详细说明见下表 | +| title | str | 收藏夹标题 | | +| cover | str | 收藏夹封面图片url | | +| upper | obj | 收藏夹创建用户信息 | | +| cover_type | num | 2 | 作用尚不明确 | +| intro | str | 空 | 作用尚不明确 | +| ctime | num | 创建时间 | 时间戳 | +| mtime | num | 审核时间 | 时间戳 | +| state | num | 0 | 作用尚不明确 | +| fav_state | num | 0 | 作用尚不明确 | +| media_count | num | 收藏夹总计视频数 | | + +`attr`属性二进制值表: + +| 其他有待补充... | 1:默认收藏夹 | 0:公开性 | +|-----------|----------------------|----------------| +| | 0:默认收藏夹
1:其他收藏夹 | 0:公开
1:私有 | + +`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' +``` + +
+查看响应示例: + +```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 + }] + } +} +``` + +
+ +## 课程 + + + +### 查询用户发布的课程列表 + +> 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" +} +``` + +
+ +## 订阅 + + + +### 查询用户追番预览列表 + +> https://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 'https://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": "https:\/\/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(话题) + +> https://space.bilibili.com/ajax/tags/getSubList + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +如设置隐私查看自己的需要认证 + +带有转义 + +只显示前100个 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|-----|-----|---------|-----|-----| +| mid | num | 目标用户mid | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|--------|----------------------|------------------------|-----------------------| +| ststus | 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 'https://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..ec56fe3 --- /dev/null +++ b/docs/user/status_number.md @@ -0,0 +1,311 @@ +# 用户状态数 + +- [关系状态数](#关系状态数) +- [UP主状态数](#UP主状态数) +- [~~订阅&投稿状态数(已弃用)~~](#~~订阅&投稿状态数(已弃用)~~) +- [相簿投稿数](#相簿投稿数) + +--- + +## 关系状态数 +> 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 | 必要 | | + +**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 | 投稿课程数 | | + +`data`中的`channel`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----- | ---------- | ------------ | +| master | num | 频道数 | | +| guest | num | 频道数 | | + +`data`中的`favourite`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------ | ---- | ------------ | --------------------------------------- | +| master | num | 全部收藏夹数 | 需要登录(SESSDATA)
只能查看自己的 | +| guest | num | 公开收藏夹数 | 无视隐私设置 | + +**示例:** + +查询用户`mid=239202390`的订阅&投稿状态数 + +```shell +curl -G 'https://api.bilibili.com/x/space/navnum' \ +--data-urlencode 'mid=239202390' \ +-b 'SESSDATA=xxx' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "video": 290, + "bangumi": 25, + "cinema": 13, + "channel": { + "master": 2, + "guest": 2 + }, + "favourite": { + "master": 6, + "guest": 6 + }, + "tag": 0, + "article": 1, + "playlist": 0, + "album": 150, + "audio": 4, + "pugv": 0 + } +} +``` + +
+
+ +## 相簿投稿数 + +> 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..db733ce --- /dev/null +++ b/docs/video/action.md @@ -0,0 +1,830 @@ +# 视频点赞&投币&收藏&分享 + +- [视频点赞&投币&收藏&分享](#视频点赞投币收藏分享) + - [点赞](#点赞) + - [点赞视频(web端)](#点赞视频web端) + - [点赞视频(APP端)](#点赞视频app端) + - [判断视频是否被点赞(双端)](#判断视频是否被点赞双端) + - [点踩](#点踩)点赞 + - [点踩视频(APP端)](#点踩视频app端) + - [投币](#投币) + - [投币视频(web端)](#投币视频web端) + - [投币视频(APP端)](#投币视频app端) + - [判断视频是否被投币(双端)](#判断视频是否被投币双端) + - [收藏](#收藏) + - [收藏视频(双端)](#收藏视频双端) + - [判断视频是否被收藏(双端)](#判断视频是否被收藏双端) + - [一键三连](#一键三连) + - [一键三连视频(web端)](#一键三连视频web端) + - [一键三连视频(APP端)](#一键三连视频app端) + - [分享](#分享) + - [分享视频 (Web端)](#分享视频-web端) + +--- + +## 点赞 + + + +### 点赞视频(web端) + +> https://api.bilibili.com/x/web-interface/archive/like + +*请求方式:POST* + +认证方式:仅可Cookie(SESSDATA) + +**正文参数( 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:请求错误
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:请求错误
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) + +**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 '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) + +**正文参数( 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:请求错误
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 'api.bilibili.com/x/web-interface/archive/coins' \ +--data-urlencode 'aid=37896701' \ +-b 'SESSDATA=xxx' +``` + +bvid方式: + +```shell +curl -G '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 +> +> https://api.bilibili.com/x/v3/fav/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:不存在该稿件
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" +} +``` + +
+ +### 判断视频是否被收藏(双端) + +> 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) + +同时点赞投币收藏视频,收藏于默认收藏夹中 + +**正文参数( 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:不存在该稿件 | +| 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* + +认证方式 csrf token + +**正文参数( 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:请求错误 | +| 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..f3b4e65 --- /dev/null +++ b/docs/video/appeal.md @@ -0,0 +1,306 @@ +# 稿件投诉 + +--- + +- [附件上传](#附件上传) +- [获取投诉类型](#获取投诉类型) +- [投诉稿件](#投诉稿件) + +--- + +## 附件上传 + +> 附件上传与视频封面上传共用一个api。 + +## 获取投诉类型 + +> https://api.bilibili.com/x/web-interface/archive/appeal/tags + +*请求类型:GET* + +**json回复:** + +| 参数名 | 类型 | 内容 | 备注 | +| ------- | ------------- | ---- | ------- | +| code | num | | 成功为0 | +| message | str | | 成功为0 | +| ttl | num | 1 | | +| data | List\ | | | + +`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 | 拥有时:object
没有时:null | 详细信息填写提示 | | + +`data`数组中的对象中的`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": "2018-08-13T15:41:20+08:00", + "controls": null + }, + { + "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": "2018-08-13T15:41:20+08:00", + "controls": [ + { + "tid": 52, + "bid": 1, + "name": "出处", + "title": "原创视频出处", + "component": "link", + "placeholder": "请填写链接", + "required": 1 + } + ] + }, + { + "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": "2018-08-13T15:41:20+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": 8, + "business": 1, + "weight": 40, + "round": 1, + "state": 1, + "name": "与站内其他视频撞车", + "remark": "为帮助审核人员更快处理, 请描述撞车信息", + "ctime": "2018-08-13T15:41:20+08:00", + "mtime": "2018-08-23T00:30:04+08:00", + "controls": [ + { + "tid": 8, + "bid": 1, + "name": "撞车对象", + "title": "撞车对象", + "component": "input", + "placeholder": "BVID", + "required": 1 + } + ] + }, + { + "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 + } + ] +} +``` +
+ +## 投诉稿件 + +> https://api.bilibili.com/x/web-interface/archive/appeal + +*请求方式:POST* + +认证方式:Cookie(SESSDATA) + +**正文参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ------------------------ | ------ | ------------------------ | +| csrf | str | csrf token(位于cookie) | 必要 | 在url params中 | +| jsonp | str | jsonp | 必要? | 意义不明,位于url params | +| aid | num | 稿件aid | 必要 | 位于request body | +| tid | num | 投诉理由tid | 必要 | 位于request body | +| desc | str | 投诉理由详细描述 | 必要 | 位于request body | +| attach | str | 附件(多个附件用逗号隔开 | 非必要 | 位于request body | + +**json回复:** + +| 参数名 | 类型 | 内容 | 备注 | +| ------- | ---- | ------ | ------- | +| code | num | 返回码 | 成功为0 | +| message | str | | 成功为0 | +| ttl | | 1 | | + +**示例:举报av号为61080066的视频,理由为人身攻击,描述为“xxxxx”,并附带了一个图片附件 + +```bash +curl --location --request POST 'https://api.bilibili.com/x/web-interface/archive/appeal?jsonp=jsonp&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..2fd1665 --- /dev/null +++ b/docs/video/attribute_data.md @@ -0,0 +1,71 @@ +# 视频属性数据说明 + +(PS:以下部分内容来源不明,且部分值前端不可见,有待验证) + +- [attribute字段值(视频属性位)](#attribute字段值视频属性位) +- [state字段值(稿件状态)](#state字段值稿件状态) + +## attribute字段值(稿件属性位) + +该字段为二进制标志位,多个标志请用`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站访问http://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 | 定时发布 | | +| -100 | 用户删除 | | + diff --git a/docs/video/info.md b/docs/video/info.md new file mode 100644 index 0000000..ea29a0b --- /dev/null +++ b/docs/video/info.md @@ -0,0 +1,3373 @@ +# 视频基本信息 + + + +- [获取视频详细信息(web端)](#获取视频详细信息web端) +- [获取视频超详细信息(web端)](#获取视频超详细信息web端) +- [获取视频简介](#获取视频简介) +- [查询视频分P列表 (avid/bvid转cid)](#查询视频分p列表-avidbvid转cid) + +--- + +## 获取视频详细信息(web端) + +> 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:稿件审核中 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +|----------------------|---------|-----------------|----------------------------------------------------| +| bvid | str | 稿件bvid | | +| aid | num | 稿件avid | | +| videos | num | 稿件分P总数 | 默认为1 | +| tid | num | 分区tid | | +| tname | str | 子分区名称 | | +| copyright | num | 视频类型 | 1:原创
2:转载 | +| pic | str | 稿件封面图片url | | +| title | str | 稿件标题 | | +| pubdate | num | 稿件发布时间 | 秒级时间戳 | +| ctime | num | 用户投稿时间 | 秒级时间戳 | +| desc | str | 视频简介 | | +| desc_v2 | array | 新版视频简介 | | +| state | num | 视频状态 | 详情见[属性数据文档](attribute_data.md#attribute字段值(稿件属性位)) | +| ~~attribute~~(已经弃用) | ~~num~~ | ~~稿件属性位配置~~ | 详情见[属性数据文档](attribute_data.md#state字段值(稿件状态)) | +| duration | num | 稿件总时长(所有分P) | 单位为秒 | +| forward | num | 撞车视频跳转avid | 仅撞车视频存在此字段 | +| mission_id | num | 稿件参与的活动id | | +| redirect_url | str | 重定向url | 仅番剧或影视视频存在此字段
用于番剧&影视的av/bv->ep | +| rights | obj | 视频属性标志 | | +| owner | obj | 视频UP主信息 | | +| stat | obj | 视频状态数 | | +| dynamic | str | 视频同步发布的的动态的文字内容 | | +| cid | num | 视频1P cid | | +| dimension | obj | 视频1P分辨率 | | +| premiere | | null | | +| teenage_mode | num | | | +| is_chargeable_season | bool | | | +| is_story | bool | | | +| no_cache | bool | | 作用尚不明确 | +| pages | array | 视频分P列表 | | +| subtitle | obj | 视频CC字幕信息 | | +| staff | array | 合作成员列表 | 非合作视频无此项 | +| is_season_display | bool | | | +| user_garb | obj | 用户装扮信息 | | +| honor_reply | obj | | | +| like_icon | str | | | + +`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 | 视频评分 | | +| argue_msg | str | 警告/争议提示信息 | | + +`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 | 作用尚不明确 | + +`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:有 | +| theme_type | num | 0 | | + +`staff`数组中的对象中的`official`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-------|-----|--------|---------------------------------------| +| role | num | 成员认证级别 | 0:无
1 2 7:个人认证
3 4 5 6:机构认证 | +| 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, + "tname": "原创音乐", + "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": "Crazy_Bucket_陈楒潼", + "face": "http://i2.hdslb.com/bfs/face/c9af3b32cf74baec5a4b65af8ca18ae5ff571f77.jpg" + }, + "stat": { + "aid": 85440373, + "view": 2270927, + "danmaku": 11839, + "reply": 2619, + "favorite": 58725, + "coin": 71048, + "share": 9398, + "now_rank": 0, + "his_rank": 55, + "like": 155954, + "dislike": 0, + "evaluation": "", + "argue_msg": "" + }, + "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, + "no_cache": false, + "pages": [ + { + "cid": 146044693, + "page": 1, + "from": "vupload", + "part": "建议改成:建议改成:诸 神 的 电 音 节(不是)", + "duration": 486, + "vid": "", + "weblink": "", + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + } + } + ], + "subtitle": { + "allow_submit": false, + "list": [] + }, + "staff": [ + { + "mid": 66606350, + "title": "UP主", + "name": "Crazy_Bucket_陈楒潼", + "face": "http://i2.hdslb.com/bfs/face/c9af3b32cf74baec5a4b65af8ca18ae5ff571f77.jpg", + "vip": { + "type": 2, + "status": 1, + "due_date": 1674403200000, + "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 + }, + "official": { + "role": 1, + "title": "bilibili 知名音乐UP主", + "desc": "", + "type": 0 + }, + "follower": 646111, + "label_style": 0 + }, + { + "mid": 53456, + "title": "曲绘", + "name": "Warma", + "face": "http://i2.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg", + "vip": { + "type": 2, + "status": 1, + "due_date": 1706198400000, + "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 + }, + "official": { + "role": 1, + "title": "bilibili 知名UP主", + "desc": "", + "type": 0 + }, + "follower": 3670591, + "label_style": 0 + } + ], + "is_season_display": false, + "user_garb": { + "url_image_ani_cut": "" + }, + "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 + } + ] + }, + "like_icon": "" + } +} +``` + +
+ +视频标题为:`当我给拜年祭的快板加了电音配乐…` + +视频分区为:`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 + +![](https://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg) + +## 获取视频超详细信息(web端) + +> https://api.bilibili.com/x/web-interface/view/detail + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +限制游客访问的视频需要登录 + +**url参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|------|-----|--------|--------|---------------| +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-403:权限不足
-404:无视频
62002:稿件不可见
62004:稿件审核中 | +| 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 | null | ? | 作用尚不明确 | +| recommend | null | ? | 作用尚不明确 | +| view_addit | obj | ? | 作用尚不明确 | + +`data`中的`View`对象: + +基本同「[获取视频详细信息(web端)](#获取视频详细信息(web端))」中的data对象 + +`data`中的`Card`对象: + +| 字段 | 类型 | 内容 | 备注 | +|---------------|------|---------|-----------------------------------------------------------| +| card | obj | UP主名片信息 | | +| space | obj | 主页头图 | | +| following | bool | 是否关注此用户 | true:已关注
false:未关注
需要登录(Cookie)
未登录为false | +| archive_count | num | 用户稿件数 | | +| article_count | num | 用户专栏数 | | +| follower | num | 粉丝数 | | +| like_num | num | UP主获赞次数 | | + +`Card`中的`card`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------------------|-------|------------|-----------------------------| +| mid | str | 用户mid | | +| name | str | 用户昵称 | | +| approve | bool | false | 作用尚不明确 | +| sex | str | 用户性别 | 男 女 保密 | +| rank | str | 10000 | 作用尚不明确 | +| face | str | 用户头像链接 | | +| face_nft | num | 是否为 nft 头像 | `0`不是nft头像
`1`是 nft 头像 | +| DisplayRank | str | 0 | 作用尚不明确 | +| regtime | num | 0 | 作用尚不明确 | +| spacesta | num | 0 | 作用尚不明确 | +| 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 | 大会员状态 | | +| is_senior_member | num | 是否为硬核会员 | 0:否
1:是 | + +`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 | 认证类型 | 0:无
1 2 7:个人认证
3 4 5 6:机构认证 | +| title | str | 认证信息 | 无为空 | +| desc | str | 认证备注 | 无为空 | +| type | num | 是否认证 | -1:无
0:认证 | + +`card`中的`official_verify`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-----|------|----------------| +| type | num | 是否认证 | -1:无
0:认证 | +| 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 正常 | | + +`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对象 + +`data`中的`hot_share`对象: + +| 字段 | 类型 | 内容 | 备注 | +|------|-------|-------|--------| +| show | bool | false | 作用尚不明确 | +| list | array | 空 | 作用尚不明确 | + +`data`中的`view_addit`对象: + +| 字段 | 类型 | 内容 | 备注 | +|-----|------|-------|--------| +| 63 | bool | false | 作用尚不明确 | +| 64 | bool | false | 作用尚不明确 | + +**示例:** + +获取视频`av170001`/`BV17x411w7KC`的详细信息 + +avid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view/detail' \ +--data-urlencode 'aid=170001' +``` + +bvid方式: + +```shell +curl -G 'https://api.bilibili.com/x/web-interface/view/detail' \ +--data-urlencode 'bvid=BV17x411w7KC' +``` + +
+查看响应示例: + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "View": { + "bvid": "BV17x411w7KC", + "aid": 170001, + "videos": 10, + "tid": 193, + "tname": "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": 42987414, + "danmaku": 908915, + "reply": 176677, + "favorite": 892097, + "coin": 276446, + "share": 619090, + "now_rank": 0, + "his_rank": 13, + "like": 861939, + "dislike": 0, + "evaluation": "", + "argue_msg": "" + }, + "dynamic": "", + "cid": 279786, + "dimension": { + "width": 512, + "height": 288, + "rotate": 0 + }, + "premiere": null, + "teenage_mode": 0, + "is_chargeable_season": false, + "is_story": false, + "no_cache": false, + "pages": [ + { + "cid": 279786, + "page": 1, + "from": "vupload", + "part": "Хоп", + "duration": 199, + "vid": "", + "weblink": "", + "dimension": { + "width": 512, + "height": 288, + "rotate": 0 + } + }, + { + "cid": 275431, + "page": 2, + "from": "vupload", + "part": "Imash li surce", + "duration": 205, + "vid": "", + "weblink": "", + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + } + }, + { + "cid": 279787, + "page": 3, + "from": "vupload", + "part": "No Kazvam Ti Stiga", + "duration": 308, + "vid": "", + "weblink": "", + "dimension": { + "width": 432, + "height": 324, + "rotate": 0 + } + }, + { + "cid": 280467, + "page": 4, + "from": "vupload", + "part": "Samo za teb", + "duration": 273, + "vid": "", + "weblink": "", + "dimension": { + "width": 360, + "height": 288, + "rotate": 0 + } + }, + { + "cid": 280468, + "page": 5, + "from": "vupload", + "part": "Tochno sega", + "duration": 241, + "vid": "", + "weblink": "", + "dimension": { + "width": 584, + "height": 360, + "rotate": 0 + } + }, + { + "cid": 280469, + "page": 6, + "from": "vupload", + "part": "Kak boli", + "duration": 336, + "vid": "", + "weblink": "", + "dimension": { + "width": 384, + "height": 288, + "rotate": 0 + } + }, + { + "cid": 274491, + "page": 7, + "from": "vupload", + "part": "Obicham Te", + "duration": 250, + "vid": "", + "weblink": "", + "dimension": { + "width": 402, + "height": 208, + "rotate": 0 + } + }, + { + "cid": 267410, + "page": 8, + "from": "vupload", + "part": "Mrazish", + "duration": 201, + "vid": "", + "weblink": "", + "dimension": { + "width": 540, + "height": 360, + "rotate": 0 + } + }, + { + "cid": 267714, + "page": 9, + "from": "vupload", + "part": "Няма накъде", + "duration": 201, + "vid": "", + "weblink": "", + "dimension": { + "width": 450, + "height": 360, + "rotate": 0 + } + }, + { + "cid": 270380, + "page": 10, + "from": "vupload", + "part": "Gadna poroda", + "duration": 198, + "vid": "", + "weblink": "", + "dimension": { + "width": 432, + "height": 324, + "rotate": 0 + } + } + ], + "subtitle": { + "allow_submit": false, + "list": [] + }, + "is_season_display": false, + "user_garb": { + "url_image_ani_cut": "" + }, + "honor_reply": { + "honor": [ + { + "aid": 170001, + "type": 3, + "desc": "全站排行榜最高第13名", + "weekly_recommend_num": 0 + } + ] + }, + "like_icon": "" + }, + "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": 66620, + "friend": 35, + "attention": 35, + "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": "" + }, + "nameplate": { + "nid": 9, + "name": "出道偶像", + "image": "http://i1.hdslb.com/bfs/face/3f2d64f048b39fb6c26f3db39df47e6080ec0f9c.png", + "image_small": "http://i2.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, + "vipType": 1, + "vipStatus": 0 + }, + "is_senior_member": 0 + }, + "space": { + "s_img": "http://i1.hdslb.com/bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png", + "l_img": "http://i1.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png" + }, + "following": false, + "archive_count": 387, + "article_count": 0, + "follower": 66620, + "like_num": 964504 + }, + "Tags": [ + { + "tag_id": 117552, + "tag_name": "保加利亚妖王", + "cover": "http://i0.hdslb.com/bfs/tag/6828dc0fe5037e1c483d55704f529135d961cb2b.jpg", + "head_cover": "", + "content": "  保加利亚超级天王 Azis\r\n  Azis生于1978年3月7日,1999年正式出道。他的音乐融合保加利亚名族曲风chalga和pop、rap等元素,不过他惊艳的易装秀与浮夸的角色诠释才是他最为出名的地方。", + "short_content": "", + "type": 3, + "state": 0, + "ctime": 1436866637, + "count": { + "view": 0, + "use": 9033, + "atten": 5573 + }, + "is_atten": 0, + "likes": 1161, + "hates": 0, + "attribute": 1, + "liked": 0, + "hated": 0, + "extra_attr": 0, + "music_id": "", + "tag_type": "old_channel", + "is_activity": false, + "color": "", + "alpha": 0, + "is_season": false, + "subscribed_count": 5573, + "archive_count": "-", + "featured_count": 0, + "jump_url": "" + }, + { + "tag_id": 112503, + "tag_name": "保加利亚", + "cover": "", + "head_cover": "", + "content": "", + "short_content": "", + "type": 0, + "state": 0, + "ctime": 1436866637, + "count": { + "view": 0, + "use": 5350, + "atten": 161 + }, + "is_atten": 0, + "likes": 645, + "hates": 0, + "attribute": 1, + "liked": 0, + "hated": 0, + "extra_attr": 0, + "music_id": "", + "tag_type": "old_channel", + "is_activity": false, + "color": "", + "alpha": 0, + "is_season": false, + "subscribed_count": 161, + "archive_count": "-", + "featured_count": 0, + "jump_url": "" + }, + { + "tag_id": 2958988, + "tag_name": "Азис", + "cover": "", + "head_cover": "", + "content": "", + "short_content": "", + "type": 1, + "state": 0, + "ctime": 1482071386, + "count": { + "view": 0, + "use": 35, + "atten": 59 + }, + "is_atten": 0, + "likes": 485, + "hates": 0, + "attribute": 1, + "liked": 0, + "hated": 0, + "extra_attr": 0, + "music_id": "", + "tag_type": "old_channel", + "is_activity": false, + "color": "", + "alpha": 0, + "is_season": false, + "subscribed_count": 59, + "archive_count": "-", + "featured_count": 0, + "jump_url": "" + }, + { + "tag_id": 2622213, + "tag_name": "azis", + "cover": "", + "head_cover": "", + "content": "", + "short_content": "", + "type": 0, + "state": 0, + "ctime": 1473763704, + "count": { + "view": 0, + "use": 274, + "atten": 86 + }, + "is_atten": 0, + "likes": 420, + "hates": 0, + "attribute": 1, + "liked": 0, + "hated": 0, + "extra_attr": 0, + "music_id": "", + "tag_type": "old_channel", + "is_activity": false, + "color": "", + "alpha": 0, + "is_season": false, + "subscribed_count": 86, + "archive_count": "-", + "featured_count": 0, + "jump_url": "" + }, + { + "tag_id": 2512079, + "tag_name": "mv", + "cover": "", + "head_cover": "", + "content": "", + "short_content": "", + "type": 0, + "state": 0, + "ctime": 1471434073, + "count": { + "view": 0, + "use": 73766, + "atten": 282 + }, + "is_atten": 0, + "likes": 384, + "hates": 0, + "attribute": 1, + "liked": 0, + "hated": 0, + "extra_attr": 0, + "music_id": "", + "tag_type": "old_channel", + "is_activity": false, + "color": "", + "alpha": 0, + "is_season": false, + "subscribed_count": 282, + "archive_count": "-", + "featured_count": 0, + "jump_url": "" + } + ], + "Reply": { + "page": { + "acount": 176677, + "count": 148385, + "num": 1, + "size": 3 + }, + "replies": [ + { + "rpid": 2509627306, + "oid": 170001, + "type": 1, + "mid": 7827964, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 148, + "rcount": 105, + "floor": 78866, + "state": 0, + "fansgrade": 0, + "attr": 1024, + "ctime": 1583941947, + "like": 8120, + "action": 0, + "content": { + "message": "刻在dna里的av号", + "plat": 0, + "device": "" + }, + "replies": null, + "assist": 0, + "show_follow": false + }, + { + "rpid": 1057984105, + "oid": 170001, + "type": 1, + "mid": 241215549, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 51, + "rcount": 43, + "floor": 62770, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1536388260, + "like": 11437, + "action": 0, + "content": { + "message": "这首歌的mv讲的是在未来的2050年,世界水资源缺乏,洗个澡都要缴纳大量的金钱并且还有预约,但有几个男人有幸掌握了部分水资源,为了节约水资源,他们洗澡的时候都在一起洗,哪怕这会让自己难堪,于是其中的妖王突然灵光一现创造出了这首《hop》来警示后人。", + "plat": 0, + "device": "" + }, + "replies": null, + "assist": 0, + "show_follow": false + }, + { + "rpid": 29939707, + "oid": 170001, + "type": 1, + "mid": 2923193, + "root": 0, + "parent": 0, + "dialog": 0, + "count": 41, + "rcount": 33, + "floor": 3125, + "state": 0, + "fansgrade": 0, + "attr": 0, + "ctime": 1430309717, + "like": 7924, + "action": 0, + "content": { + "message": "感觉好棒……女人都演绎不出来的那种妩媚……azis这种不分性别的妩媚真称得上艺术了虽然一般人接受起来很难", + "plat": 0, + "device": "" + }, + "replies": null, + "assist": 0, + "show_follow": false + } + ] + }, + "Related": [ + { + "aid": 34812433, + "videos": 1, + "tid": 130, + "tname": "音乐综合", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/149aed759c1231948c468c412f67c634e05a4974.jpg", + "title": "怎么办,妖王开始男人了", + "pubdate": 1540723612, + "ctime": 1540723612, + "desc": "QQ音乐", + "state": 0, + "duration": 303, + "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": 229574099, + "name": "清尘埃落定", + "face": "http://i2.hdslb.com/bfs/face/4b34377580cf12eabe6bc568967dfe22f981c042.jpg" + }, + "stat": { + "aid": 34812433, + "view": 1053726, + "danmaku": 501, + "reply": 497, + "favorite": 4591, + "coin": 273, + "share": 732, + "now_rank": 0, + "his_rank": 0, + "like": 23321, + "dislike": 0 + }, + "dynamic": "#音乐选集##保加利亚#", + "cid": 60984624, + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1Qb411N7Ez", + "short_link_v2": "https://b23.tv/BV1Qb411N7Ez", + "up_from_v2": 8, + "bvid": "BV1Qb411N7Ez", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 543744396, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 2, + "pic": "http://i0.hdslb.com/bfs/archive/36f77d7478c18c95f50b9d9c22ba86fb58d0b760.jpg", + "title": "当van听到了hop会发生什么?", + "pubdate": 1610800809, + "ctime": 1610800809, + "desc": "vanbilibili直播间\nvan一边看mv一边把歌听完的……说这mv太奇怪猎奇了", + "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": 390902077, + "name": "花街----", + "face": "http://i1.hdslb.com/bfs/face/54221846311730ce79129ba3c1f3580c7f072182.jpg" + }, + "stat": { + "aid": 543744396, + "view": 483187, + "danmaku": 336, + "reply": 466, + "favorite": 4281, + "coin": 289, + "share": 3316, + "now_rank": 0, + "his_rank": 0, + "like": 14116, + "dislike": 0 + }, + "dynamic": "", + "cid": 283284930, + "dimension": { + "width": 720, + "height": 1520, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1wv4y1f7wX", + "short_link_v2": "https://b23.tv/BV1wv4y1f7wX", + "bvid": "BV1wv4y1f7wX", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 54864793, + "videos": 2, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/c3231251ade65cdb35f40f96b9651f13d4355fc4.jpg", + "title": "全B站模仿保加利亚妖王最像的人", + "pubdate": 1559913751, + "ctime": 1559913020, + "desc": "求点赞! 求关注! 求投币! \n模型:平安夜的噩梦&@i-fox\n动作自制(做的太渣了,想要的就拿走吧)\n 链接:https://pan.baidu.com/s/1kZZHiAY4_pIwds1F_CCj1A \n 提取码:g1yp", + "state": 0, + "duration": 218, + "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": 93755540, + "name": "空梦゛", + "face": "http://i2.hdslb.com/bfs/face/00ac5eec49917b23353a015a3af5af109f82721f.jpg" + }, + "stat": { + "aid": 54864793, + "view": 904172, + "danmaku": 1863, + "reply": 574, + "favorite": 2390, + "coin": 646, + "share": 400, + "now_rank": 0, + "his_rank": 0, + "like": 14770, + "dislike": 0 + }, + "dynamic": "#搞笑视频##恶搞##保加利亚妖王#", + "cid": 95953526, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1o4411K7Sp", + "short_link_v2": "https://b23.tv/BV1o4411K7Sp", + "bvid": "BV1o4411K7Sp", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 98749955, + "videos": 1, + "tid": 122, + "tname": "野生技能协会", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/ff7765a1b049b72dd5acf1f74c8897f4807fd03d.png", + "title": "【打脸01】AV号为啥改成BV号?AV170001为例!AV号BV号有啥区别?", + "pubdate": 1585046601, + "ctime": 1585046601, + "desc": "欢迎收看lzr的打脸频道(雾)\n三连三连三连 \r\nUP为了这个视频连杭盖作业都没写\r\n球球你们了QAQ\r\n附:这个视频av号 av98749955", + "state": 0, + "duration": 335, + "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": 24644307, + "name": "阿穆尔的小熊", + "face": "http://i0.hdslb.com/bfs/face/bff7059fcf5455e57c608a71522dab3e19220b59.jpg" + }, + "stat": { + "aid": 98749955, + "view": 18610, + "danmaku": 53, + "reply": 119, + "favorite": 121, + "coin": 27, + "share": 15, + "now_rank": 0, + "his_rank": 0, + "like": 500, + "dislike": 0 + }, + "dynamic": "", + "cid": 168567572, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1f7411m7XK", + "short_link_v2": "https://b23.tv/BV1f7411m7XK", + "bvid": "BV1f7411m7XK", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "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": 60997787, + "danmaku": 448899, + "reply": 47839, + "favorite": 982387, + "coin": 422190, + "share": 763221, + "now_rank": 0, + "his_rank": 2, + "like": 1769280, + "dislike": 0 + }, + "dynamic": "", + "cid": 172423516, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1NZ4y1j7nw", + "short_link_v2": "https://b23.tv/BV1NZ4y1j7nw", + "bvid": "BV1NZ4y1j7nw", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 7250151, + "videos": 1, + "tid": 130, + "tname": "音乐综合", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/86af45f48db9f136411d11362870394787779d93.jpg", + "title": "我要唤醒你们曾一度被170001所支配的恐惧", + "pubdate": 1480076771, + "ctime": 1497436787, + "desc": "视频的一段脱节了 嗯 没了", + "state": 0, + "duration": 211, + "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": 37333418, + "name": "ZLYHX", + "face": "http://i2.hdslb.com/bfs/face/69e68acd37fc2a5085f44fdf9982029ec85e8abe.jpg" + }, + "stat": { + "aid": 7250151, + "view": 170228, + "danmaku": 244, + "reply": 84, + "favorite": 561, + "coin": 80, + "share": 1806, + "now_rank": 0, + "his_rank": 0, + "like": 1572, + "dislike": 0 + }, + "dynamic": "", + "cid": 11852714, + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1ws411s7Xz", + "short_link_v2": "https://b23.tv/BV1ws411s7Xz", + "bvid": "BV1ws411s7Xz", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 668672894, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/78376377b1db7026dc63a6f6a8c41cba7992c5cc.jpg", + "title": "有人跟我要网站,我把AV170001给了他", + "pubdate": 1593448525, + "ctime": 1593448525, + "desc": "有人跟我要网站,我让他下了个B站,还让他去搜AV170001", + "state": 0, + "duration": 23, + "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": 488613042, + "name": "蒹葭3588", + "face": "http://i0.hdslb.com/bfs/face/475c9add5bc619091d8979cfe7f4a7ab5af2c865.jpg" + }, + "stat": { + "aid": 668672894, + "view": 37693, + "danmaku": 4, + "reply": 54, + "favorite": 16, + "coin": 2, + "share": 3, + "now_rank": 0, + "his_rank": 0, + "like": 296, + "dislike": 0 + }, + "dynamic": "#哲学##AV##妖王#", + "cid": 207235285, + "dimension": { + "width": 1080, + "height": 1920, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1Ka4y1e7k3", + "short_link_v2": "https://b23.tv/BV1Ka4y1e7k3", + "bvid": "BV1Ka4y1e7k3", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 631557307, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/eafb857ea914589e3830a218d3820e063fb1751c.jpg", + "title": "Hop(高清无水印)", + "pubdate": 1625921694, + "ctime": 1625920960, + "desc": "https://m.youtube.com/watch?v=P9sQZLtsfp8", + "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": 404880090, + "name": "忆-画", + "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg" + }, + "stat": { + "aid": 631557307, + "view": 600212, + "danmaku": 5332, + "reply": 627, + "favorite": 7258, + "coin": 1405, + "share": 16012, + "now_rank": 0, + "his_rank": 0, + "like": 13572, + "dislike": 0 + }, + "dynamic": "", + "cid": 367618065, + "dimension": { + "width": 1280, + "height": 576, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1Qb4y1r7ig", + "short_link_v2": "https://b23.tv/BV1Qb4y1r7ig", + "up_from_v2": 35, + "bvid": "BV1Qb4y1r7ig", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "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": "http://i2.hdslb.com/bfs/face/edf6a0ae7dfe9adb5e8d5e813a69455554931c73.jpg" + }, + "stat": { + "aid": 456093155, + "view": 1268344, + "danmaku": 3608, + "reply": 1772, + "favorite": 14046, + "coin": 7240, + "share": 4737, + "now_rank": 0, + "his_rank": 0, + "like": 70590, + "dislike": 0 + }, + "dynamic": "", + "cid": 204234033, + "dimension": { + "width": 3840, + "height": 2160, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1r5411W71r", + "short_link_v2": "https://b23.tv/BV1r5411W71r", + "bvid": "BV1r5411W71r", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 56261839, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/2ecd40c61c6031fda0ece8c098724b9bc88ff89d.jpg", + "title": "当你开启了青少年模式并搜索av170001会发生什么事", + "pubdate": 1561080121, + "ctime": 1561080121, + "desc": "我莫得简介", + "state": 0, + "duration": 80, + "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": 305523767, + "name": "空城玄亦", + "face": "http://i2.hdslb.com/bfs/face/a5838c33eeb1b19f04a2967d26bb8b323834ca5e.jpg" + }, + "stat": { + "aid": 56261839, + "view": 553812, + "danmaku": 728, + "reply": 593, + "favorite": 754, + "coin": 386, + "share": 78, + "now_rank": 0, + "his_rank": 0, + "like": 6616, + "dislike": 0 + }, + "dynamic": "#AV170001##妖王##HOP#", + "cid": 98331390, + "dimension": { + "width": 1920, + "height": 960, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV15441137Xd", + "short_link_v2": "https://b23.tv/BV15441137Xd", + "up_from_v2": 8, + "pub_location": "浙江", + "bvid": "BV15441137Xd", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 88606863, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/f6d607625938ba5bdada81f7ae4c59e43852d57c.jpg", + "title": "妖王被黑得最惨的一次!用营销号的方式打开av170001", + "pubdate": 1581565668, + "ctime": 1581565669, + "desc": "素材:av170001\n点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞点赞", + "state": 0, + "duration": 60, + "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": 322628997, + "name": "湖畔者_Lynn", + "face": "http://i0.hdslb.com/bfs/face/a43fffdd14e81e992e570fce859351e7bace0ee8.jpg" + }, + "stat": { + "aid": 88606863, + "view": 826873, + "danmaku": 3047, + "reply": 5059, + "favorite": 6072, + "coin": 3274, + "share": 3742, + "now_rank": 0, + "his_rank": 0, + "like": 83644, + "dislike": 0 + }, + "dynamic": "#bilibili新星计划##HOP##AV170001#", + "cid": 151362415, + "dimension": { + "width": 1920, + "height": 1072, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1E741137Pb", + "short_link_v2": "https://b23.tv/BV1E741137Pb", + "bvid": "BV1E741137Pb", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 200010082, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/588c51ca3f8f309abeab0e5aaa4ab60dcb3e15a6.jpg", + "title": "还记得AV17001的内容吗?", + "pubdate": 1585492555, + "ctime": 1585492555, + "desc": "-", + "state": 0, + "duration": 428, + "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": 243683327, + "name": "可爱的豹二A6", + "face": "http://i2.hdslb.com/bfs/face/1b8debc465485bc84db4d0c0936ed7692b185b5b.jpg" + }, + "stat": { + "aid": 200010082, + "view": 30797, + "danmaku": 4, + "reply": 31, + "favorite": 19, + "coin": 6, + "share": 15, + "now_rank": 0, + "his_rank": 0, + "like": 282, + "dislike": 0 + }, + "dynamic": "#AV170001##保加利亚妖王##全程高能#", + "cid": 171166760, + "dimension": { + "width": 2160, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1hz411h7KH", + "short_link_v2": "https://b23.tv/BV1hz411h7KH", + "bvid": "BV1hz411h7KH", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 5164105, + "videos": 1, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/149aed759c1231948c468c412f67c634e05a4974.jpg", + "title": "保加利亚妖王AZIS单曲HABIBI新版MV", + "pubdate": 1467381090, + "ctime": 1497380583, + "desc": "www.youtube.com/watch?v=ZmyVZRLOw3M AZIS - HABIBI (latino version) _ Азис - Хабиби (латино версия)", + "state": 0, + "duration": 266, + "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": 122541, + "name": "冰封.虾子", + "face": "http://i0.hdslb.com/bfs/face/40c46ee74dd6ea33d46c38cd6083e6a1286aa482.gif" + }, + "stat": { + "aid": 5164105, + "view": 633795, + "danmaku": 2134, + "reply": 811, + "favorite": 7371, + "coin": 1639, + "share": 3328, + "now_rank": 0, + "his_rank": 0, + "like": 9908, + "dislike": 0 + }, + "dynamic": "", + "cid": 8392273, + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1zs411v7K5", + "short_link_v2": "https://b23.tv/BV1zs411v7K5", + "bvid": "BV1zs411v7K5", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 85804489, + "videos": 1, + "tid": 27, + "tname": "综合", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/d513318c0e5fa55580b7a1f47b6ce5c8fd8959d2.jpg", + "title": "av170001回来了!'!", + "pubdate": 1580391994, + "ctime": 1580391994, + "desc": "-", + "state": 0, + "duration": 20, + "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": 251852454, + "name": "胡桃老婆赛高哒", + "face": "http://i0.hdslb.com/bfs/face/b91aa1a2c50d9273d6c4c8cbf340ca34e8829642.jpg" + }, + "stat": { + "aid": 85804489, + "view": 54551, + "danmaku": 5, + "reply": 83, + "favorite": 31, + "coin": 6, + "share": 5, + "now_rank": 0, + "his_rank": 0, + "like": 190, + "dislike": 0 + }, + "dynamic": "#bilibili新星计划##AV170001##保加利亚妖王#", + "cid": 146661863, + "dimension": { + "width": 720, + "height": 1440, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1N7411B7Bq", + "short_link_v2": "https://b23.tv/BV1N7411B7Bq", + "bvid": "BV1N7411B7Bq", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 626849708, + "videos": 1, + "tid": 26, + "tname": "音MAD", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/701dd594c9060c7f6aaffc634ba8694288f02e45.jpg", + "title": "调音师的准确率已达170001%", + "pubdate": 1598149834, + "ctime": 1598102271, + "desc": "自制【猫鼠电音】Hop\n原曲:Hop-Azis(其音乐融合保加利亚名族曲风chalga和pop、rap等元素)\n感觉以前做音mad只为了还原原曲 太呆板无趣\n于是就做了这样一次尝试以求改观\n使用此标题已经过 @球球特别大 允许\n\n#猫鼠电音#5", + "state": 0, + "duration": 91, + "mission_id": 14023, + "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": 34611143, + "name": "致明笑笑", + "face": "http://i2.hdslb.com/bfs/face/b8fd466c7a64a2f2baf0f38f1ff5a1ab8fc1e1fb.jpg" + }, + "stat": { + "aid": 626849708, + "view": 144490, + "danmaku": 370, + "reply": 388, + "favorite": 2865, + "coin": 1616, + "share": 387, + "now_rank": 0, + "his_rank": 0, + "like": 11937, + "dislike": 0 + }, + "dynamic": "#鬼畜大赏2020-音MAD##猫和老鼠##保加利亚妖王#", + "cid": 227521154, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1Xt4y1U79t", + "short_link_v2": "https://b23.tv/BV1Xt4y1U79t", + "bvid": "BV1Xt4y1U79t", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 257143502, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/105015bbeab86dd32e8341ff2a53276f1ab5d7a2.jpg", + "title": "在b站最没存在感的国家是谁?各国相关最高播放的视频是什么?", + "pubdate": 1654327813, + "ctime": 1654327813, + "desc": "本来视频是按播放统计,但撒贝宁/马里奥/黑山大叔 比 贝宁/马里/黑山 还火2333333,所以以标签为准。\n估计视频播放过不了1万5 ;)", + "state": 0, + "duration": 661, + "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": 544503411, + "name": "沙琪玛er", + "face": "http://i0.hdslb.com/bfs/face/b03c633eb227556b38930aab4d6cb94ab463cd2f.jpg" + }, + "stat": { + "aid": 257143502, + "view": 163449, + "danmaku": 1384, + "reply": 572, + "favorite": 2073, + "coin": 769, + "share": 111, + "now_rank": 0, + "his_rank": 0, + "like": 9576, + "dislike": 0 + }, + "dynamic": "估计播放过不了1万5 ;)", + "cid": 737740549, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 462986, + "short_link": "https://b23.tv/BV18Y411g7co", + "short_link_v2": "https://b23.tv/BV18Y411g7co", + "first_frame": "http://i1.hdslb.com/bfs/storyff/n220604a23d6t17is08tz01wjsgiyhzg_firsti.jpg", + "bvid": "BV18Y411g7co", + "season_type": 1, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 627815773, + "videos": 1, + "tid": 27, + "tname": "综合", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/0d16d4fb0ec25f0c4dd2fff7f0a7de3ac789e5b7.jpg", + "title": "【开启新世界的大门】整活派派反被整——被「HOP」震惊到神隐", + "pubdate": 1605237196, + "ctime": 1605237196, + "desc": "20201112B限\n--\n翻译:長門準\n时轴:PY\n校对:長門準\n剪辑:PY\n------------------------------------------------------\n箱推粉丝7群:1132670270\n审核群:685228392", + "state": 0, + "duration": 392, + "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": 421347849, + "name": "白百合リリィOfficial", + "face": "http://i0.hdslb.com/bfs/face/236f74251b9ac820908db1e0d2f09d46057cb7fe.jpg" + }, + "stat": { + "aid": 627815773, + "view": 270692, + "danmaku": 711, + "reply": 227, + "favorite": 2203, + "coin": 1044, + "share": 250, + "now_rank": 0, + "his_rank": 0, + "like": 9924, + "dislike": 0 + }, + "dynamic": "", + "cid": 255272814, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV13t4y1v7XG", + "short_link_v2": "https://b23.tv/BV13t4y1v7XG", + "bvid": "BV13t4y1v7XG", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 91287627, + "videos": 1, + "tid": 22, + "tname": "鬼畜调教", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/07e972b7324b68facb2e3139821b477ab9f0e792.jpg", + "title": "我不信这么高♂雅的作品破不了100播放量?!", + "pubdate": 1582518913, + "ctime": 1582518913, + "desc": "爱咋咋地!!!!!!!不限流就烧高香了!!!!!!", + "state": 0, + "duration": 107, + "mission_id": 12868, + "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": 4915107, + "name": "初音ミつ", + "face": "http://i0.hdslb.com/bfs/face/14887f1d272b1417484a109509c25835e6b0c0d5.jpg" + }, + "stat": { + "aid": 91287627, + "view": 5231099, + "danmaku": 9183, + "reply": 11975, + "favorite": 82502, + "coin": 69857, + "share": 8328, + "now_rank": 0, + "his_rank": 38, + "like": 397712, + "dislike": 0 + }, + "dynamic": "#鬼畜调教##VAN##罗西尼#", + "cid": 155876336, + "dimension": { + "width": 720, + "height": 576, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV127411M7HC", + "short_link_v2": "https://b23.tv/BV127411M7HC", + "bvid": "BV127411M7HC", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 327580733, + "videos": 1, + "tid": 17, + "tname": "单机游戏", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/014591d2f7f129c660bca88e6c5d38638a2a1ea7.jpg", + "title": "当我的世界种子输入AV170001会怎么样?", + "pubdate": 1585207605, + "ctime": 1585207605, + "desc": "给三连啊!\n\n♂♂♂♂\n♂♂♂♂\n♂♂♂♂\n♂♂♂♂♂♂♂♂\n♂♂♂♂", + "state": 0, + "duration": 102, + "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": 416313100, + "name": "永不言弃的电路猫", + "face": "http://i1.hdslb.com/bfs/face/d70d22d6edc68bfc5d9c6a644de4513a8751eace.jpg" + }, + "stat": { + "aid": 327580733, + "view": 154520, + "danmaku": 329, + "reply": 424, + "favorite": 743, + "coin": 55, + "share": 30, + "now_rank": 0, + "his_rank": 0, + "like": 10134, + "dislike": 0 + }, + "dynamic": "#AV170001##我的世界##HOP#", + "cid": 169645787, + "dimension": { + "width": 640, + "height": 480, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1RA41187Tq", + "short_link_v2": "https://b23.tv/BV1RA41187Tq", + "bvid": "BV1RA41187Tq", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 4033926, + "videos": 1, + "tid": 22, + "tname": "鬼畜调教", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/f004d589847c604f5e3800ce99bced09ec7e20af.jpg", + "title": "【电音单曲】我是papi酱", + "pubdate": 1457267935, + "ctime": 1497423784, + "desc": "自制 这个集鬼畜与才华于一身的女人,成功地引起了我的注意。", + "state": 0, + "duration": 156, + "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": 375375, + "name": "伊丽莎白鼠", + "face": "http://i0.hdslb.com/bfs/face/6c36ec15f6d7ddd9bdb558511521bd0256779e1c.jpg" + }, + "stat": { + "aid": 4033926, + "view": 43805807, + "danmaku": 468795, + "reply": 91630, + "favorite": 680262, + "coin": 716611, + "share": 194916, + "now_rank": 0, + "his_rank": 1, + "like": 882426, + "dislike": 0 + }, + "dynamic": "", + "cid": 6505773, + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1hs411Q7zf", + "short_link_v2": "https://b23.tv/BV1hs411Q7zf", + "bvid": "BV1hs411Q7zf", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 497521129, + "videos": 1, + "tid": 138, + "tname": "搞笑", + "copyright": 1, + "pic": "http://i0.hdslb.com/bfs/archive/593078d6f292fc241f6b68437976b74b5d601365.jpg", + "title": "当老师在钉钉放起hop♂", + "pubdate": 1586053391, + "ctime": 1586050521, + "desc": "妖王的直播: hop已结束。在直播过程中,观看人的摄像头全程关闭(仅连麦功能时可选择开启),感谢观看直播。直播回放正在生成中,稍后在“群设置-直播回放”中查看, 查看详情", + "state": 0, + "duration": 166, + "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": 353603699, + "name": "群束竹令", + "face": "http://i2.hdslb.com/bfs/face/34b63faea602e0cd212f874de9db9ad4e01df9dc.jpg" + }, + "stat": { + "aid": 497521129, + "view": 286263, + "danmaku": 1269, + "reply": 306, + "favorite": 1682, + "coin": 165, + "share": 620, + "now_rank": 0, + "his_rank": 0, + "like": 13048, + "dislike": 0 + }, + "dynamic": "#HOP##钉钉#", + "cid": 174065931, + "dimension": { + "width": 1536, + "height": 720, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1rK41177Qd", + "short_link_v2": "https://b23.tv/BV1rK41177Qd", + "bvid": "BV1rK41177Qd", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 3904091, + "videos": 1, + "tid": 238, + "tname": "运动综合", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/2cccf431ac5677c38535ac421daa5818443e258b.jpg", + "title": "冬钓250磅重的巨型鲶鱼", + "pubdate": 1455981826, + "ctime": 1497380578, + "desc": "youtube GOLIATH CATFISH 250 POUND 8 FEET IN WINTER DRIFT AND LIVE BAIT", + "state": 0, + "duration": 406, + "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": 122541, + "name": "冰封.虾子", + "face": "http://i0.hdslb.com/bfs/face/40c46ee74dd6ea33d46c38cd6083e6a1286aa482.gif" + }, + "stat": { + "aid": 3904091, + "view": 1655057, + "danmaku": 2747, + "reply": 1810, + "favorite": 3206, + "coin": 204, + "share": 2175, + "now_rank": 0, + "his_rank": 0, + "like": 15779, + "dislike": 0 + }, + "dynamic": "", + "cid": 6280020, + "dimension": { + "width": 640, + "height": 360, + "rotate": 0 + }, + "season_id": 627981, + "short_link": "https://b23.tv/BV1es411972g", + "short_link_v2": "https://b23.tv/BV1es411972g", + "bvid": "BV1es411972g", + "season_type": 1, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 926574462, + "videos": 1, + "tid": 65, + "tname": "网络游戏", + "copyright": 2, + "pic": "http://i2.hdslb.com/bfs/archive/4449df3efd8d007176a9eedb5dfb35a1dc89af48.jpg", + "title": "当毛子遇到混血超模(2)", + "pubdate": 1596097538, + "ctime": 1596097539, + "desc": "抖音\n抖音...", + "state": 0, + "duration": 30, + "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": 543863677, + "name": "DJStevenAV", + "face": "http://i1.hdslb.com/bfs/face/b88800a78b68eacb48e9b48421b6c39c1bc9dc5b.jpg" + }, + "stat": { + "aid": 926574462, + "view": 565826, + "danmaku": 168, + "reply": 310, + "favorite": 4240, + "coin": 475, + "share": 2877, + "now_rank": 0, + "his_rank": 0, + "like": 9847, + "dislike": 0 + }, + "dynamic": "#茄子##吃鸡##美女#", + "cid": 218351947, + "dimension": { + "width": 720, + "height": 1280, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1BT4y1j7EV", + "short_link_v2": "https://b23.tv/BV1BT4y1j7EV", + "bvid": "BV1BT4y1j7EV", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "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": "http://i1.hdslb.com/bfs/face/5566e3a4786959527a72545f908b5664693a2945.jpg" + }, + "stat": { + "aid": 718913090, + "view": 289956, + "danmaku": 188, + "reply": 455, + "favorite": 2984, + "coin": 679, + "share": 195, + "now_rank": 0, + "his_rank": 0, + "like": 14988, + "dislike": 0 + }, + "dynamic": "咩栗,不可以。", + "cid": 436835160, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV14Q4y1S7HU", + "short_link_v2": "https://b23.tv/BV14Q4y1S7HU", + "first_frame": "http://i0.hdslb.com/bfs/storyff/n211105a23d8ue6bh0m1ed1cu6yztac5_firsti.jpg", + "bvid": "BV14Q4y1S7HU", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 243979418, + "videos": 1, + "tid": 17, + "tname": "单机游戏", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/4be3a91598103a9d599d62ac77659b75c1d2c54b.jpg", + "title": "[缝合怪]HOP?哈哈哈奇怪的缝合生物增加了!(二)", + "pubdate": 1594986846, + "ctime": 1594986846, + "desc": "奇怪的生物...增加了??!\n这期连更几个创意搞笑小视频,连载上个视频的creeper用到的奥利奥的梗\n反正开心就对啦,之后明天再更一期这类似的小视频,然后这周视频时长就算达标咯\n狐圈:201928737\n“快来养老qwq”", + "state": 0, + "duration": 23, + "mission_id": 13752, + "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": 289475254, + "name": "碧月狐", + "face": "http://i1.hdslb.com/bfs/face/4492716a1211a20b63015d84a9860b3424e9eca7.jpg" + }, + "stat": { + "aid": 243979418, + "view": 886939, + "danmaku": 516, + "reply": 301, + "favorite": 9412, + "coin": 1819, + "share": 2487, + "now_rank": 0, + "his_rank": 0, + "like": 41875, + "dislike": 0 + }, + "dynamic": "#沙雕日常##Minecraft##我的世界#", + "cid": 213532895, + "dimension": { + "width": 1280, + "height": 720, + "rotate": 0 + }, + "season_id": 11746, + "short_link": "https://b23.tv/BV1xv411q7fJ", + "short_link_v2": "https://b23.tv/BV1xv411q7fJ", + "bvid": "BV1xv411q7fJ", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 590060816, + "videos": 1, + "tid": 22, + "tname": "鬼畜调教", + "copyright": 1, + "pic": "http://i1.hdslb.com/bfs/archive/509fda71291eda10687fa839a5f89c6054bed167.png", + "title": "保 加 利 亚 瓜 王", + "pubdate": 1629954067, + "ctime": 1629954067, + "desc": "哥儿俩生妖王", + "state": 0, + "duration": 79, + "mission_id": 105577, + "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": 64827416, + "name": "城之悠二", + "face": "http://i2.hdslb.com/bfs/face/032a0ec32dcd880eeb0850e7a03d0990445c9697.jpg" + }, + "stat": { + "aid": 590060816, + "view": 858513, + "danmaku": 1487, + "reply": 1282, + "favorite": 17119, + "coin": 13288, + "share": 7838, + "now_rank": 0, + "his_rank": 0, + "like": 67325, + "dislike": 0 + }, + "dynamic": "", + "cid": 396779777, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1eq4y1D7H8", + "short_link_v2": "https://b23.tv/BV1eq4y1D7H8", + "up_from_v2": 2, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n210826139etterlwdx0a2fsl8bfjlk7_firsti.jpg", + "bvid": "BV1eq4y1D7H8", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 74910522, + "videos": 1, + "tid": 21, + "tname": "日常", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/89dcc6be0083463aab31b22d31032270e363c019.jpg", + "title": "保加利亚妖王用中文数数", + "pubdate": 1573152882, + "ctime": 1573152882, + "desc": "https://www.youtube.com/watch?v=E68duawIQ7I\n一个意义不明的视频?", + "state": 0, + "duration": 10, + "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": 122541, + "name": "冰封.虾子", + "face": "http://i0.hdslb.com/bfs/face/40c46ee74dd6ea33d46c38cd6083e6a1286aa482.gif" + }, + "stat": { + "aid": 74910522, + "view": 88597, + "danmaku": 20, + "reply": 223, + "favorite": 314, + "coin": 54, + "share": 90, + "now_rank": 0, + "his_rank": 0, + "like": 2426, + "dislike": 0 + }, + "dynamic": "迷之更新? #azis##保加利亚妖王##中文#", + "cid": 128148307, + "dimension": { + "width": 608, + "height": 1080, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1jE411q77T", + "short_link_v2": "https://b23.tv/BV1jE411q77T", + "bvid": "BV1jE411q77T", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 755494777, + "videos": 2, + "tid": 193, + "tname": "MV", + "copyright": 2, + "pic": "http://i1.hdslb.com/bfs/archive/e3986406217f03ce31ca46852164c0279a406ecd.png", + "title": "Rick Astley - Never Gonna Give You Up", + "pubdate": 1606492404, + "ctime": 1606492405, + "desc": "ISRC CN-E20-20-453-08/V.J6 XVCD-20153\n出自于BV1nW4y1C7T5的P9", + "state": 0, + "duration": 427, + "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": 313290585, + "name": "作死君-", + "face": "http://i0.hdslb.com/bfs/face/f917350f82a8cb1ba4c211a28d0e281cb3457206.jpg" + }, + "stat": { + "aid": 755494777, + "view": 628308, + "danmaku": 328, + "reply": 501, + "favorite": 6767, + "coin": 682, + "share": 498, + "now_rank": 0, + "his_rank": 0, + "like": 30748, + "dislike": 0 + }, + "dynamic": "", + "cid": 425587380, + "dimension": { + "width": 960, + "height": 720, + "rotate": 0 + }, + "short_link": "https://b23.tv/BV1er4y1c7yZ", + "short_link_v2": "https://b23.tv/BV1er4y1c7yZ", + "up_from_v2": 2, + "first_frame": "http://i2.hdslb.com/bfs/storyff/n2110151395pbo9g2l5ka1arlotq4yxi_firsti.jpg", + "bvid": "BV1er4y1c7yZ", + "season_type": 0, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + }, + { + "aid": 299723213, + "videos": 1, + "tid": 171, + "tname": "电子竞技", + "copyright": 1, + "pic": "http://i2.hdslb.com/bfs/archive/5eb1a2b31854985136c140403db76bd915af8168.jpg", + "title": "⚡️内 格 夫 の 嘲 讽⚡️", + "pubdate": 1654141500, + "ctime": 1654141501, + "desc": "", + "state": 0, + "duration": 89, + "mission_id": 683731, + "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": 91542133, + "name": "邪神_Karasu_", + "face": "http://i1.hdslb.com/bfs/face/e1684c4d561628ca2baa326caefe9c7cc88e6b7d.jpg" + }, + "stat": { + "aid": 299723213, + "view": 307870, + "danmaku": 232, + "reply": 192, + "favorite": 1759, + "coin": 596, + "share": 352, + "now_rank": 0, + "his_rank": 0, + "like": 18974, + "dislike": 0 + }, + "dynamic": "", + "cid": 735728100, + "dimension": { + "width": 1920, + "height": 1080, + "rotate": 0 + }, + "season_id": 223572, + "short_link": "https://b23.tv/BV12F411G7GC", + "short_link_v2": "https://b23.tv/BV12F411G7GC", + "first_frame": "http://i2.hdslb.com/bfs/storyff/n220601a23cewjt7ozvrxwifaipjgy3m_firsti.jpg", + "pub_location": "贵州", + "bvid": "BV12F411G7GC", + "season_type": 1, + "is_ogv": false, + "ogv_info": null, + "rcmd_reason": "" + } + ], + "Spec": null, + "hot_share": { + "show": false, + "list": [] + }, + "elec": null, + "recommend": null, + "view_addit": { + "63": false, + "64": 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..2d5bb63 --- /dev/null +++ b/docs/video/interact_video.md @@ -0,0 +1,375 @@ +# 互动视频信息 + +注:互动视频分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 | 必要 | 位于`player.so`中 | +| 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 + } +} +``` + +
\ No newline at end of file diff --git a/docs/video/online.md b/docs/video/online.md new file mode 100644 index 0000000..c4623c3 --- /dev/null +++ b/docs/video/online.md @@ -0,0 +1,146 @@ +# 视频在线人数 + +- [获取视频在线人数_web端](#获取视频在线人数_web端) +- [获取视频在线人数_APP端](#获取视频在线人数_APP端) + +## 获取视频在线人数_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..b6b34a3 --- /dev/null +++ b/docs/video/pbp.md @@ -0,0 +1,75 @@ +# 高能进度条 + +高能进度条反应了在时域上,单位时间内弹幕发送量的变化趋势 + +并用曲线顶点表示在进度条上,实现可视化 + +--- + +- [获取弹幕趋势顶点列表](#获取弹幕趋势顶点列表) + +--- + +## 获取弹幕趋势顶点列表 + +> 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/recommend.md b/docs/video/recommend.md new file mode 100644 index 0000000..d02e3c8 --- /dev/null +++ b/docs/video/recommend.md @@ -0,0 +1,294 @@ +# 视频推荐 + +- [获取单视频推荐列表(web端)](#获取单视频推荐列表web端) + +--- + +## 获取单视频推荐列表(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对象 + +**示例:** + +查询视频`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": "" + }, + ………… + ] +} +``` + +
diff --git a/docs/video/report.md b/docs/video/report.md new file mode 100644 index 0000000..9ae8f91 --- /dev/null +++ b/docs/video/report.md @@ -0,0 +1,149 @@ +# 视频观看数据上报 + +- [上报观看进度(双端)](#上报观看进度双端) +- [上报视频播放心跳(web端)](#上报视频播放心跳web端) + +--- + +## 上报观看进度(双端) + +> 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秒一次 + +亦可记录播放历史 + +**正文参数( application/x-www-form-urlencoded ):** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ----------- | ---- | ------------------------ | ------------ | ------------------------------------------------------------ | +| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 | +| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 | +| cid | num | 视频cid | 非必要 | 用于识别分P | +| epid | num | 番剧epid | 非必要 | | +| sid | num | 番剧ssid | 非必要 | | +| mid | num | 当前用户mid | 非必要 | | +| played_time | num | 视频播放进度 | 非必要 | 单位为秒
默认为0 | +| realtime | num | 总计播放时间 | 非必要 | 单位为秒 | +| start_ts | num | 开始播放时刻 | 非必要 | 时间戳 | +| type | num | 视频类型 | 非必要 | 3:投稿视频
4:剧集
10:课程 | +| sub_type | num | 剧集副类型 | 非必要 | 当`type=4`时本参数有效
1:番剧
2:电影
3:纪录片
4:国创
5:电视剧
7:综艺 | +| dt | num | 2 | 非必要 | | +| play_type | num | 播放动作 | 非必要 | 0:播放中
1:开始播放
2:暂停
3:继续播放 | +| csrf | str | CSRF Token(位于cookie) | 非必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | + +**示例:** + +上报一次视频`av2`/`BV1xx411c7mD`的心跳数据 + +```shell +curl '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 +} +``` + +
diff --git a/docs/video/snapshot.md b/docs/video/snapshot.md new file mode 100644 index 0000000..a596c42 --- /dev/null +++ b/docs/video/snapshot.md @@ -0,0 +1,329 @@ +# 视频快照 + +快照的截取时间根据视频画面变化程度决定,各视频不相同 + +截取时间表的时间根据视频画面变化程度决定,各每个视频不相同 + +截取时间表的时间和快照一一对应,并按照从左到右 从上到下的顺序排布 + +--- + +- [获取视频快照(web端)](#获取视频快照web端) +- [获取视频快照(APP端)](#获取视频快照app端) +- [获取视频快照(web端)(用于封面预览)](#获取视频快照web端用于封面预览) +- [图片拼版](#图片拼版) +- [bin格式截取时间表](#bin格式截取时间表) + +--- + +## 获取视频快照(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 + +![](https://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..222c5a1 --- /dev/null +++ b/docs/video/status_number.md @@ -0,0 +1,202 @@ +# 视频状态数 + +- [视频状态数(仅avid)](#视频状态数仅avid) +- [视频状态数(bvid/avid)](#视频状态数bvid/avid) + +--- + +## 视频状态数(仅avid) +> 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) + +> 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/tags.md b/docs/video/tags.md new file mode 100644 index 0000000..bd911bd --- /dev/null +++ b/docs/video/tags.md @@ -0,0 +1,316 @@ +# 视频TAG + +- [获取视频TAG信息](#获取视频TAG信息) +- [点赞&取消点赞视频TAG](#点赞&取消点赞视频TAG) +- [点踩&取消点踩视频TAG](#点踩&取消点踩视频TAG) + +--- + +## 获取视频TAG信息 + +> https://api.bilibili.com/x/tag/archive/tags + +*请求方式: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 + +> https://api.bilibili.com/x/tag/archive/like2 + +*请求方式: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 + +> https://api.bilibili.com/x/tag/archive/hate2 + +*请求方式: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..cbf2387 --- /dev/null +++ b/docs/video/video_zone.md @@ -0,0 +1,322 @@ +# 视频分区一览 + +用于通过稿件 avid 判断所在的分区,或推荐分区视频等....... + +亦可用于更深♂入了解B站的分区 + +--- + +## 动画 + + + +| 名称 | 代号 | 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) | +| 短片·手书·配音 | voice | 47 | 追求个人特色和创意表达的自制动画短片、手书(绘)及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 | 以动画/轻小说/漫画/杂志为主的资讯内容,PV/CM/特报/冒头/映像/预告 | [/v/anime/information](https://www.bilibili.com/v/anime/information) | +| 官方延伸 | offical | 152 | 以动画番剧及声优为主的EVENT/生放送/DRAMA/RADIO/LIVE/特典/冒头等 | [/v/anime/offical](https://www.bilibili.com/v/anime/offical) | +| 完结动画 | finish | 32 | 已完结TV/WEB动画及其独立系列,旧剧场版/OVA/SP/未放送 | [/v/anime/finish](https://www.bilibili.com/v/anime/finish) | +| 连载动画 | serial | 33 | 连载中TV/WEB动画,新剧场版/OVA/SP/未放送/小剧场 | [/v/anime/serial](https://www.bilibili.com/v/anime/serial) | + +## 国创 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|---------|-------------|-----|----------------------|------------------------------------------------------------------------------| +| 国创(主分区) | guochuang | 167 | | [/guochuang](https://www.bilibili.com/guochuang) | +| 国产动画 | chinese | 153 | 国产连载动画,国产完结动画 | [/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) | +| 翻唱 | cover | 31 | 对曲目的人声再演绎视频 | [/v/music/cover](https://www.bilibili.com/v/music/cover) | +| VOCALOID·UTAU | vocaloid | 30 | 以vocaloid等歌声合成引擎为基础,运用各类音源进行的创作 | [/v/music/vocaloid](https://www.bilibili.com/v/music/vocaloid) | +| 演奏 | perform | 59 | 乐器和非传统乐器器材的演奏作品 | [/v/music/perform](https://www.bilibili.com/v/music/perform) | +| MV | mv | 193 | 为音乐作品配合拍摄或制作的音乐录影带(music video),以及自制拍摄、剪辑、翻拍mv | [/v/music/mv](https://www.bilibili.com/v/music/mv) | +| 音乐现场 | live | 29 | 音乐表演的实况视频,包括官方/个人拍摄的综艺节目、音乐剧、音乐节、演唱会等 | [/v/music/live](https://www.bilibili.com/v/music/live) | +| 音乐综合 | other | 130 | 所有无法被收纳到其他音乐二级分区的音乐类视频 | [/v/music/other](https://www.bilibili.com/v/music/other) | +| 乐评盘点 | commentary | 243 | 音乐类新闻、盘点、点评、reaction、榜单、采访、幕后故事、唱片开箱等 | [/v/music/commentary](https://www.bilibili.com/v/music/commentary) | +| 音乐教学 | tutorial | 244 | 以音乐教学为目的的内容 | [/v/music/tutorial](https://www.bilibili.com/v/music/tutorial) | +| ~~电音~~(已下线) | ~~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) | +| 舞蹈综合 | 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) | +| 街舞 | 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) | + +## 游戏 + + + +| 名称 | 代号 | 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) | +| 赛车 | 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) | +| 新能源车 | newenergyvehicle | 247 | 新能源汽车相关内容,包括电动汽车、混合动力汽车等车型种类,包含不限于新车资讯、试驾体验、专业评测、技术解读、知识科普等内容 | [/v/car/newenergyvehicle](https://www.bilibili.com/v/car/newenergyvehicle) | +| 房车 | touringcar | 248 | 房车及营地相关内容,包括不限于产品介绍、驾驶体验、房车生活和房车旅行等内容 | [/v/car/touringcar](https://www.bilibili.com/v/car/touringcar) | +| 摩托车 | motorcycle | 240 | 骑士们集合啦 | [/v/car/motorcycle](https://www.bilibili.com/v/car/motorcycle) | +| 购车攻略 | strategy | 227 | 丰富详实的购车建议和新车体验 | [/v/car/strategy](https://www.bilibili.com/v/car/strategy) | +| 汽车生活 | 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) | +| 出行 | 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) | +| 大熊猫 | panda | 220 | 芝麻汤圆营业中 | [/v/animal/panda](https://www.bilibili.com/v/animal/panda) | +| 野生动物 | wild_animal | 221 | 内有“猛兽”出没 | [/v/animal/wild_animal](https://www.bilibili.com/v/animal/wild_animal) | +| 爬宠 | reptiles | 222 | 鳞甲有灵 | [/v/animal/reptiles](https://www.bilibili.com/v/animal/reptiles) | +| 动物综合 | 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) | +| 综艺 | variety | 71 | 所有综艺相关,全部一手掌握! | [/v/ent/variety](https://www.bilibili.com/v/ent/variety) | +| 娱乐杂谈 | talker | 241 | 娱乐人物解读、娱乐热点点评、娱乐行业分析 | [/v/ent/talker](https://www.bilibili.com/v/ent/talker) | +| 粉丝创作 | fans | 242 | 粉丝向创作视频 | [/v/ent/fans](https://www.bilibili.com/v/ent/fans) | +| 明星综合 | celebrity | 137 | 娱乐圈动态、明星资讯相关 | [/v/ent/celebrity](https://www.bilibili.com/v/ent/celebrity) | +| ~~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) | +| 小剧场 | shortfilm | 85 | 有场景、有剧情的演绎类内容 | [/v/cinephile/shortfilm](https://www.bilibili.com/v/cinephile/shortfilm) | +| 预告·资讯 | trailer_info | 184 | 影视类相关资讯,预告,花絮等视频 | [/v/cinephile/trailer_info](https://www.bilibili.com/v/cinephile/trailer_info) | + +## 纪录片 + + + +| 名称 | 代号 | tid | 简介 | url路由 | +|----------|-------------|-----|-----------------------------------------------|----------------------------------------------------------------------------| +| 纪录片(主分区) | documentary | 177 | | [/documentary](https://www.bilibili.com/documentary) | +| 人文·历史 | history | 37 | 除宣传片、影视剪辑外的,人文艺术历史纪录剧集或电影、预告、花絮、二创、5分钟以上纪录短片 | [/v/documentary/history](https://www.bilibili.com/v/documentary/history) | +| 科学·探索·自然 | science | 178 | 除演讲、网课、教程外的,科学探索自然纪录剧集或电影、预告、花絮、二创、5分钟以上纪录短片 | [/v/documentary/science](https://www.bilibili.com/v/documentary/science) | +| 军事 | military | 179 | 除时政军事新闻外的,军事纪录剧集或电影、预告、花絮、二创、5分钟以上纪录短片 | [/v/documentary/military](https://www.bilibili.com/v/documentary/military) | +| 社会·美食·旅行 | travel | 180 | 除VLOG、风光摄影外的,社会美食旅行纪录剧集或电影、预告、花絮、二创、5分钟以上纪录短片 | [/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/videostream_url.md b/docs/video/videostream_url.md new file mode 100644 index 0000000..ed85ac4 --- /dev/null +++ b/docs/video/videostream_url.md @@ -0,0 +1,1288 @@ +# 视频流URL + + + +视频为 DASH 或 MP4 流媒体,需调用取流 API 传参视频 id 获取 + +- [qn视频清晰度标识](#qn视频清晰度标识) +- [fnver视频流版本标识](#fnver视频流版本标识) +- [fnval视频流格式标识](#fnval视频流格式标识) +- [视频伴音音质代码](#视频伴音音质代码) +- [获取视频流地址_web端](#获取视频流地址_web端) +- [视频取流说明](#视频取流说明) + +--- + +## qn视频清晰度标识 + +**注:该值在 DASH 格式下无效,因为 DASH 格式会取到所有分辨率的流地址** + +| 值 | 含义 | 备注 | +| ---- | -------------- | ------------------------------------------------------------ | +| 6 | 240P 极速 | 仅 MP4 格式支持
仅`platform=html5`时有效 | +| 16 | 360P 流畅 | | +| 32 | 480P 清晰 | | +| 64 | 720P 高清 | WEB 端默认值
B站前端需要登录才能选择,但是直接发送请求可以不登录就拿到 720P 的取流地址
**无 720P 时则为 720P60** | +| 74 | 720P60 高帧率 | 登录认证 | +| 80 | 1080P 高清 | TV 端与 APP 端默认值
登录认证 | +| 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`
大会员认证 | + +例如:请求 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 格式 | + +例如:请求 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/playurl + +*请求方式:GET* + +认证方式:Cookie(SESSDATA) + +--- + +关于视频流会员鉴权: + +- 获取 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 | 必要 | | +| 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 中获取 | +| otype | str | | 非必要 | 固定为`json` | +| type | str | | 非必要 | 目前为空 | +| platform | str | | 非必要 | pc:web播放(默认值,视频流存在 referer鉴权)
html5:移动端 HTML5 播放(仅支持 MP4 格式,清晰度最高 360P,无 referer 鉴权可以直接使用`video`标签播放) | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ---------------------------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误
-404:无视频 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | | +| data | 有效时:obj
无效时:null | 数据本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------------ | ----- | ----------------------------------------------- | ----------------------------------------------- | +| 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 | | + +`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编码 | + +由于 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 | 伴音流信息 | | +| dolby | obj | 杜比全景声伴音信息 | | +| flac | obj | 无损音轨伴音信息 | | + +`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 'qn=0' \ + --data-urlencode 'fnval=80' \ + --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 'qn=0' \ + --data-urlencode 'fnval=80' \ + --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_p60", + "timelength": 346410, + "accept_format": "hdflv2,hdflv2,flv_p60,flv,flv720_p60,flv480,mp4", + "accept_description": [ + "真彩 HDR", + "超清 4K", + "高清 1080P60", + "高清 1080P", + "高清 720P60", + "清晰 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": 125, + "baseUrl": "https://cn-jxjj-ct-01-01.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=bcache&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=f144133cabdfca56ae3cb14e208aebe1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=4261&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=1726751&logo=80000000", + "base_url": "https://cn-jxjj-ct-01-01.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=bcache&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=f144133cabdfca56ae3cb14e208aebe1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=4261&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=1726751&logo=80000000", + "backupUrl": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=adf8ac03ae8aaf0e18c0f4c3f0ff267c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=1726751&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=cffdcf6daf7f55c58bdb97737694363f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=1726751&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=adf8ac03ae8aaf0e18c0f4c3f0ff267c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=1726751&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=cffdcf6daf7f55c58bdb97737694363f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=1726751&logo=40000000" + ], + "bandwidth": 13799375, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.2.4.L156.90", + "width": 3840, + "height": 1920, + "frameRate": "125", + "frame_rate": "125", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1066", + "indexRange": "1067-1926" + }, + "segment_base": { + "initialization": "0-1066", + "index_range": "1067-1926" + }, + "codecid": 12 + }, + { + "id": 120, + "baseUrl": "https://cn-jxjj-ct-01-01.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=bcache&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=704c0a56e544a9e5ba42813960780304&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=4261&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=2124046&logo=80000000", + "base_url": "https://cn-jxjj-ct-01-01.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=bcache&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=704c0a56e544a9e5ba42813960780304&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=4261&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=2124046&logo=80000000", + "backupUrl": [ + "https://upos-sz-mirrorcoso1.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=coso1bv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=56ddf7293e93985ff0abdc8de74ddbea&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=2124046&logo=40000000", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=cosbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=e35a421cf5209011191984cab0336ade&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=2124046&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirrorcoso1.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=coso1bv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=56ddf7293e93985ff0abdc8de74ddbea&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=2124046&logo=40000000", + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=cosbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=e35a421cf5209011191984cab0336ade&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=2124046&logo=40000000" + ], + "bandwidth": 16974415, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640034", + "width": 3840, + "height": 1920, + "frameRate": "111.111", + "frame_rate": "111.111", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-995", + "indexRange": "996-1855" + }, + "segment_base": { + "initialization": "0-995", + "index_range": "996-1855" + }, + "codecid": 7 + }, + { + "id": 120, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=3d82b0f3589f2bde1d020c19a050aca8&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=594581&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=3d82b0f3589f2bde1d020c19a050aca8&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=594581&logo=A0000001", + "backupUrl": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=05403d92efb1f978bf95b03375760ee2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=594581&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=21828db787701f87944fd56a27b0ed06&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=594581&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=05403d92efb1f978bf95b03375760ee2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=594581&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=21828db787701f87944fd56a27b0ed06&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=594581&logo=40000000" + ], + "bandwidth": 4751624, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L156.90", + "width": 3840, + "height": 1920, + "frameRate": "111.111", + "frame_rate": "111.111", + "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": 116, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=4437f5c280e855acb05fbbc32f895574&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=651301&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=4437f5c280e855acb05fbbc32f895574&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=651301&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=874e438aebbead2b5a379f6c57d5501d&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=651301&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=874e438aebbead2b5a379f6c57d5501d&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=651301&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=874e438aebbead2b5a379f6c57d5501d&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=651301&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=874e438aebbead2b5a379f6c57d5501d&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=651301&logo=40000000" + ], + "bandwidth": 5204909, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640032", + "width": 2160, + "height": 1080, + "frameRate": "62.500", + "frame_rate": "62.500", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-996", + "indexRange": "997-1856" + }, + "segment_base": { + "initialization": "0-996", + "index_range": "997-1856" + }, + "codecid": 7 + }, + { + "id": 116, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=12dc56f1d7f019826fb120c6e0be1670&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=129647&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=12dc56f1d7f019826fb120c6e0be1670&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=129647&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=bc2f8140b3ef558b5982b71f2cef2c47&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=129647&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=bc2f8140b3ef558b5982b71f2cef2c47&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=129647&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=bc2f8140b3ef558b5982b71f2cef2c47&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=129647&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=bc2f8140b3ef558b5982b71f2cef2c47&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=129647&logo=40000000" + ], + "bandwidth": 1036030, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L150.90", + "width": 2160, + "height": 1080, + "frameRate": "58.824", + "frame_rate": "58.824", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1158", + "indexRange": "1159-2018" + }, + "segment_base": { + "initialization": "0-1158", + "index_range": "1159-2018" + }, + "codecid": 12 + }, + { + "id": 80, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=377af91003514e9563155a4c87d21fca&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=329117&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=377af91003514e9563155a4c87d21fca&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=329117&logo=A0000001", + "backupUrl": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=aa662c302ff974b8a7ff24f48688465a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=329117&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=c652d684ccbccee35432aa2c77f551d3&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=329117&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=aa662c302ff974b8a7ff24f48688465a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=329117&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=c652d684ccbccee35432aa2c77f551d3&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=329117&logo=40000000" + ], + "bandwidth": 2630160, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640032", + "width": 2160, + "height": 1080, + "frameRate": "29.412", + "frame_rate": "29.412", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-996", + "indexRange": "997-1856" + }, + "segment_base": { + "initialization": "0-996", + "index_range": "997-1856" + }, + "codecid": 7 + }, + { + "id": 80, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=64cffd4fb74b13f6bc0a2467a151e998&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=120853&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=64cffd4fb74b13f6bc0a2467a151e998&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=120853&logo=A0000001", + "backupUrl": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=d02def5348a0cc0c76eadf6c323c0cb2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=120853&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=da259f0651e828005700c6cc57d9b4b7&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=120853&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=d02def5348a0cc0c76eadf6c323c0cb2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=120853&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=da259f0651e828005700c6cc57d9b4b7&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=120853&logo=40000000" + ], + "bandwidth": 965710, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L150.90", + "width": 2160, + "height": 1080, + "frameRate": "30.303", + "frame_rate": "30.303", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1158", + "indexRange": "1159-2018" + }, + "segment_base": { + "initialization": "0-1158", + "index_range": "1159-2018" + }, + "codecid": 12 + }, + { + "id": 64, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=046aefbf748f9a2cfb1f6319e35952ae&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=219847&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=046aefbf748f9a2cfb1f6319e35952ae&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=219847&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=028507c6f34713e9300e367ce0ef574f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=219847&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=028507c6f34713e9300e367ce0ef574f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=219847&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=028507c6f34713e9300e367ce0ef574f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=219847&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=028507c6f34713e9300e367ce0ef574f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=219847&logo=40000000" + ], + "bandwidth": 1756920, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.640028", + "width": 1440, + "height": 720, + "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": 64, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=764e4d4e7bc28c908a7da3ad741b2b53&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=126306&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=764e4d4e7bc28c908a7da3ad741b2b53&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=126306&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=1702a3c8c1e1a4d309e39b196465e903&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=126306&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=1702a3c8c1e1a4d309e39b196465e903&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=126306&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=1702a3c8c1e1a4d309e39b196465e903&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=126306&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=1702a3c8c1e1a4d309e39b196465e903&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=126306&logo=40000000" + ], + "bandwidth": 1009331, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 1440, + "height": 720, + "frameRate": "58.824", + "frame_rate": "58.824", + "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": 32, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=e251d9fa3d4369ace719b082eba78280&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=98889&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=e251d9fa3d4369ace719b082eba78280&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=98889&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=5d48dd328f14b134c11d278c7d901794&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=98889&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=5d48dd328f14b134c11d278c7d901794&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=98889&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=5d48dd328f14b134c11d278c7d901794&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=98889&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=5d48dd328f14b134c11d278c7d901794&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=98889&logo=40000000" + ], + "bandwidth": 790280, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.64001F", + "width": 960, + "height": 480, + "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": 32, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=6b4c4b1192085276a29f276a1acd1bc9&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=36592&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=6b4c4b1192085276a29f276a1acd1bc9&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=36592&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=ade18a577cc6f16f39396e9275939846&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=36592&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=ade18a577cc6f16f39396e9275939846&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=36592&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=ade18a577cc6f16f39396e9275939846&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=36592&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=ade18a577cc6f16f39396e9275939846&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=36592&logo=40000000" + ], + "bandwidth": 292405, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 960, + "height": 480, + "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://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=c6bf79e46e41fbf9e0792028448796b2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=25561&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9x2-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=c6bf79e46e41fbf9e0792028448796b2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=25561&logo=A0000001", + "backupUrl": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=c2ac7e3dfb9ea6506b0f7b6abee76b21&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=25561&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=25d5ffbb285c281922818dfce1c46351&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=25561&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=c2ac7e3dfb9ea6506b0f7b6abee76b21&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=25561&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9x2-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=25d5ffbb285c281922818dfce1c46351&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=25561&logo=40000000" + ], + "bandwidth": 204255, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "hev1.1.6.L120.90", + "width": 720, + "height": 360, + "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://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=84e198e866f75a6eda22a54e869c9c19&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=44249&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=84e198e866f75a6eda22a54e869c9c19&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=44249&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=3fc57769d6f587c3c62db6406b2dea71&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=44249&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=3fc57769d6f587c3c62db6406b2dea71&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=44249&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=3fc57769d6f587c3c62db6406b2dea71&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=44249&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=3fc57769d6f587c3c62db6406b2dea71&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=44249&logo=40000000" + ], + "bandwidth": 353623, + "mimeType": "video/mp4", + "mime_type": "video/mp4", + "codecs": "avc1.64001E", + "width": 720, + "height": 360, + "frameRate": "29.412", + "frame_rate": "29.412", + "sar": "1:1", + "startWithSap": 1, + "start_with_sap": 1, + "SegmentBase": { + "Initialization": "0-1003", + "indexRange": "1004-1863" + }, + "segment_base": { + "initialization": "0-1003", + "index_range": "1004-1863" + }, + "codecid": 7 + } + ], + "audio": [ + { + "id": 30280, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=e983f8b4dc35aa8469dc0742d0371e19&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=41220&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=e983f8b4dc35aa8469dc0742d0371e19&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=41220&logo=A0000001", + "backupUrl": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=71b057cb7399c7f7e94932446696c479&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=41220&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=e876c0a1b414c68f1e8a8c986e9de72e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=41220&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=upos&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=71b057cb7399c7f7e94932446696c479&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=41220&logo=40000000", + "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=alibv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=e876c0a1b414c68f1e8a8c986e9de72e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=41220&logo=40000000" + ], + "bandwidth": 329376, + "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-907", + "indexRange": "908-1779" + }, + "segment_base": { + "initialization": "0-907", + "index_range": "908-1779" + }, + "codecid": 0 + }, + { + "id": 30216, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=c61129748923407b50d98357e2925ec5&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=8419&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=c61129748923407b50d98357e2925ec5&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=8419&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=733c928a078ae018899ebf9de87eecf4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=8419&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=733c928a078ae018899ebf9de87eecf4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=8419&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=733c928a078ae018899ebf9de87eecf4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=8419&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=733c928a078ae018899ebf9de87eecf4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=8419&logo=40000000" + ], + "bandwidth": 67279, + "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-941", + "indexRange": "942-1813" + }, + "segment_base": { + "initialization": "0-941", + "index_range": "942-1813" + }, + "codecid": 0 + }, + { + "id": 30232, + "baseUrl": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=6682acc0dc48f4ac7d397861c537feab&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=16615&logo=A0000001", + "base_url": "https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=mcdn&oi=606633952&trid=000077eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=6682acc0dc48f4ac7d397861c537feab&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=16615&logo=A0000001", + "backupUrl": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=80a5d0e507dddbe424c2394593bd9324&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=16615&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=80a5d0e507dddbe424c2394593bd9324&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=16615&logo=40000000" + ], + "backup_url": [ + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=80a5d0e507dddbe424c2394593bd9324&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=16615&logo=40000000", + "https://upos-sz-mirror08ct.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674133321&gen=playurlv2&os=08ctbv&oi=606633952&trid=77eca41ddc4a4dc6926e971dfacc597cu&mid=293793435&platform=pc&upsig=80a5d0e507dddbe424c2394593bd9324&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=16615&logo=40000000" + ], + "bandwidth": 132768, + "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-907", + "indexRange": "908-1779" + }, + "segment_base": { + "initialization": "0-907", + "index_range": "908-1779" + }, + "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_p60", + "new_description": "720P 60帧", + "display_desc": "720P", + "superscript": "60帧", + "codecs": [ + "avc1.640028", + "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 + } +} +``` + +
+ +## 视频取流说明 + +关于拉流: + +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 标签`