B站视频列表与详情数据API调用完全指南

在数字化内容生态中,B站作为国内领先的视频平台,其海量视频数据具有极高的应用价值。无论是构建视频数据分析工具、开发第三方应用,还是实现视频内容聚合,都离不开对视频列表及详情数据的高效获取。本文将系统梳理B站相关API的调用流程,涵盖官方开放平台接口与Web端实用接口,结合认证机制、参数说明、实战示例与避坑指南,帮助开发者快速掌握数据获取能力。

一、前置准备:开发者认证与环境配置

在调用B站API前,需完成基础准备工作,核心包括开发者身份认证、权限申请及环境搭建,不同接口类型的准备要求略有差异。

1.1 开放平台开发者认证(官方接口必备)

B站开放平台(https://member.bilibili.com/open)是官方API的唯一合法获取渠道,适用于需要稳定、合规数据服务的场景。具体步骤如下:

  1. 注册与认证:访问开放平台,完成账号注册后,进入"开发者中心"提交企业或个人开发者认证材料,审核通过后获得开发者资质。

  2. 创建应用:在开发者中心创建应用,填写应用名称、用途、场景等信息,获取核心凭证——AccessKeyIdAccessKeySecret(后续签名认证需用到)。

1.2 环境与工具准备

推荐使用以下工具与环境提升开发效率:

  • 开发语言:Python(推荐,拥有丰富的HTTP请求库如requests)、Java、JavaScript等均可。

  • 调试工具:Apifox、Postman(快速验证接口参数与响应)、浏览器开发者工具(分析Web端接口交互)。

  • 依赖库:Python环境需安装requests库(pip install requests),用于发送HTTP请求;若需处理JSON数据,可使用内置json库。

二、核心API详解:视频列表与详情获取

B站提供两类获取视频数据的API:一是开放平台官方接口(稳定、合规,需授权),二是Web端非官方接口(无需平台审核,适用于轻量需求,需注意稳定性)。以下分别详解两类接口的调用规范。

2.1 开放平台官方接口

官方接口主要用于获取授权用户的视频数据(如自身账号或第三方授权账号的稿件),需严格遵循签名认证机制,核心包括视频列表查询与单一视频详情查询两个接口。

2.1.1 视频列表查询接口

该接口用于查询授权用户的稿件列表,支持按页码、每页数量、稿件状态筛选。

  • 接口地址:https://member.bilibili.com/arcopen/fn/archive/viewlist

  • 请求方式:GET

  • 认证方式:签名版本2.0(需添加公共请求头)+ Access-Token

  • 请求参数(URL参数):

参数名

必传

类型

说明

备注

pn

int

页码

最小为1

ps

int

每页数量

最小1,最大50

status

string

稿件状态

可选值:all(全部)、is_pubing(发布中)、pubed(已发布)、not_pubed(未发布),默认查询全部

  • 请求头(核心公共请求头):

请求头字段

说明

X-Bili-Accesskeyid

开放平台获取的AccessKeyId

X-Bili-Signature-Version

签名版本,固定为2.0

X-Bili-Signature-Method

签名算法,固定为HMAC-SHA256

X-Bili-Timestamp

当前时间戳(秒级)

X-Bili-Signature-Nonce

随机字符串(需保证唯一性)

X-Bili-Content-Md5

请求体MD5值(GET请求无请求体时为d41d8cd98f00b204e9800998ecf8427e)

Authorization

签名结果(计算方式见2.3节)

Access-Token

用户授权凭证

  • 响应参数(核心字段):

参数名

类型

说明

resource_id

string

稿件ID(可用于查询视频详情)

title

string

视频标题

cover

string

封面图片URL

video_info.duration

int

视频时长(秒)

video_info.share_url

string

视频播放页链接

ctime/ptime

int

创建时间/发布时间(UTC时间戳)

2.1.2 视频详情查询接口

该接口用于查询授权用户的单一稿件详情,需传入稿件唯一ID(resource_id)。

  • 接口地址:https://member.bilibili.com/arcopen/fn/archive/view

  • 请求方式:GET

  • 认证方式:与视频列表接口一致(签名2.0+Access-Token)

  • 请求参数(URL参数):

参数名

必传

类型

说明

resource_id

string

稿件唯一ID(从视频列表接口获取)

响应参数与视频列表接口的单条稿件信息一致,额外包含审核状态(addit_info.state)、审核打回理由(addit_info.reject_reason)等详情字段。

2.2 Web端实用接口(非官方)

此类接口无需开放平台审核,可直接调用,适用于获取公开视频数据(如任意UP主的公开视频列表、公开视频详情),但需注意:接口可能随时调整,稳定性不如官方接口,且需遵守B站用户协议,避免高频调用。

2.2.1 公开视频详情接口

通过视频BV号或AV号获取公开视频的详细信息(播放量、弹幕数、UP主信息等)。

  • 接口地址:https://api.bilibili.com/x/web-interface/wbi/view

  • 请求方式:GET

  • 认证方式:Cookie认证(需携带sessdata,用于访问需登录可见的视频)

  • 请求参数(URL参数):

参数名

必传

类型

说明

bvid

可选(二选一)

string

视频BV号(如BV1MW421X7gM)

aid

可选(二选一)

num

视频AV号(如123456)

响应参数丰富,核心字段包括:

  • 基础信息:bvid/aid(视频编号)、title(标题)、pic(封面URL)、duration(总时长);

  • UP主信息:owner(包含mid、name等);

  • 数据统计:stat(包含play播放量、comment评论数、like点赞数等);

  • 其他信息:desc(视频简介)、pubdate(发布时间戳)、pages(分P列表)。

2.2.2 UP主公开视频列表接口

通过UP主mid(用户ID)获取其公开视频列表。

  • 接口地址:http://space.bilibili.com/ajax/member/getSubmitVideos

  • 请求方式:GET

  • 认证方式:可选Cookie认证(获取需登录可见的视频)

  • 请求参数(URL参数):

参数名

必传

类型

说明

mid

num

UP主用户ID(从用户主页URL获取)

pn

int

页码,默认1

ps

int

每页数量,默认10

三、关键技术:签名认证实现(官方接口必备)

B站开放平台官方接口采用2.0版本签名机制,核心目的是防止请求参数被篡改,保障接口调用安全。签名计算步骤如下(以Python为例):

3.1 签名计算规则

  1. 收集所有请求参数(包括URL参数和公共参数),不包含请求头中的字段;

  2. 将参数按Key的ASCII码升序排序;

  3. 将排序后的参数拼接为"key1=value1&key2=value2"的字符串;

  4. 将拼接后的字符串与AccessKeySecret(开放平台获取)拼接,使用HMAC-SHA256算法计算哈希值,得到签名结果(小写);

  5. 将签名结果放入请求头的Authorization字段。

3.2 Python签名实现代码

import hmac import hashlib import time import uuid def calculate_signature(params, access_key_secret): # 1. 按Key升序排序 sorted_params = sorted(params.items(), key=lambda x: x[0]) # 2. 拼接参数字符串 param_str = "&".join([f"{k}={v}" for k, v in sorted_params]) # 3. HMAC-SHA256计算签名 hmac_obj = hmac.new(access_key_secret.encode("utf-8"), param_str.encode("utf-8"), hashlib.sha256) signature = hmac_obj.hexdigest() return signature # 示例:构造请求参数与请求头 access_key_id = "你的AccessKeyId" access_key_secret = "你的AccessKeySecret" params = { "pn": 1, "ps": 10, "status": "all" } # 生成必要的公共参数 timestamp = str(int(time.time())) nonce = str(uuid.uuid4().int) # 随机字符串 content_md5 = "d41d8cd98f00b204e9800998ecf8427e" # GET请求无请求体时固定此值 # 计算签名 signature = calculate_signature(params, access_key_secret) # 构造请求头 headers = { "X-Bili-Accesskeyid": access_key_id, "X-Bili-Signature-Version": "2.0", "X-Bili-Signature-Method": "HMAC-SHA256", "X-Bili-Timestamp": timestamp, "X-Bili-Signature-Nonce": nonce, "X-Bili-Content-Md5": content_md5, "Authorization": signature, "Access-Token": "你的用户授权Token", "Content-Type": "application/json" }

四、实战示例:完整API调用流程

以下提供两类接口的完整Python调用示例,涵盖参数构造、请求发送、响应解析全流程。

4.1 官方接口示例:查询授权用户视频列表

import requests from typing import Dict, Any # 复用3.2节的签名计算函数 def calculate_signature(params, access_key_secret): sorted_params = sorted(params.items(), key=lambda x: x[0]) param_str = "&".join([f"{k}={v}" for k, v in sorted_params]) hmac_obj = hmac.new(access_key_secret.encode("utf-8"), param_str.encode("utf-8"), hashlib.sha256) return hmac_obj.hexdigest() def get_authorized_video_list(access_key_id: str, access_key_secret: str, access_token: str, pn: int = 1, ps: int = 10) -> Dict[str, Any]: url = "https://member.bilibili.com/arcopen/fn/archive/viewlist" # 构造请求参数 params = { "pn": pn, "ps": ps, "status": "all" } # 生成公共参数与签名 timestamp = str(int(time.time())) nonce = str(uuid.uuid4().int) content_md5 = "d41d8cd98f00b204e9800998ecf8427e" signature = calculate_signature(params, access_key_secret) # 构造请求头 headers = { "X-Bili-Accesskeyid": access_key_id, "X-Bili-Signature-Version": "2.0", "X-Bili-Signature-Method": "HMAC-SHA256", "X-Bili-Timestamp": timestamp, "X-Bili-Signature-Nonce": nonce, "X-Bili-Content-Md5": content_md5, "Authorization": signature, "Access-Token": access_token, "Content-Type": "application/json" } # 发送请求 response = requests.get(url, params=params, headers=headers) # 解析响应 if response.status_code == 200: result = response.json() if result.get("code") == 0: return result.get("data", {}) else: print(f"接口调用失败:{result.get('message')}") else: print(f"HTTP请求失败:状态码{response.status_code}") return {} # 调用示例 if __name__ == "__main__": ACCESS_KEY_ID = "你的AccessKeyId" ACCESS_KEY_SECRET = "你的AccessKeySecret" ACCESS_TOKEN = "你的Access-Token" video_list = get_authorized_video_list(ACCESS_KEY_ID, ACCESS_KEY_SECRET, ACCESS_TOKEN, pn=1, ps=10) print("授权用户视频列表:", video_list)

4.2 Web端接口示例:查询公开视频详情

import requests def get_public_video_detail(bvid: str) -> Dict[str, Any]: url = "https://api.bilibili.com/x/web-interface/wbi/view" params = { "bvid": bvid } # 构造请求头(添加Cookie以访问需登录可见的视频) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Cookie": "SESSDATA=你的SESSDATA值; bili_jct=你的bili_jct值" # 从浏览器开发者工具获取 } response = requests.get(url, params=params, headers=headers) if response.status_code == 200: result = response.json() if result.get("code") == 0: return result.get("data", {}) else: print(f"接口调用失败:{result.get('message')}") else: print(f"HTTP请求失败:状态码{response.status_code}") return {} # 调用示例(查询BV1MW421X7gM的视频详情) if __name__ == "__main__": video_detail = get_public_video_detail("BV1MW421X7gM") print("视频标题:", video_detail.get("title")) print("播放量:", video_detail.get("stat", {}).get("play")) print("UP主:", video_detail.get("owner", {}).get("name"))

五、常见问题与避坑指南

5.1 认证相关错误

  • 错误码401/签名验证失败:检查AccessKeyId、AccessKeySecret是否正确;确认签名计算时参数排序、拼接格式正确;检查timestamp与当前时间是否一致(误差不超过5分钟)。

  • 错误码403/权限不足:确认已申请ARC_BASE权限;检查Access-Token是否有效(用户授权过期需重新获取)。

5.2 接口调用限制

  • 官方接口:存在QPS限制(具体以开放平台文档为准),高频调用需做好限流处理,避免账号被封禁。

  • Web端接口:无明确QPS限制,但建议添加请求间隔(如time.sleep(1)),避免触发B站反爬机制;Cookie中的SESSDATA过期后需重新获取。

5.3 数据解析问题

  • 时间戳转换:响应中的ctime、ptime为UTC时间戳,需转换为本地时间(Python可使用datetime模块:datetime.fromtimestamp(时间戳))。

  • 分P视频信息:Web端接口的pages字段包含分P列表,需遍历获取各分P的cid、时长等信息。

5.4 合规性提醒

1. 调用官方接口需严格遵守《哔哩哔哩开放平台开发者服务协议》,不得用于非法用途;

2. Web端非官方接口仅用于个人学习研究,商业用途需通过开放平台申请官方权限;

3. 不得爬取B站非公开数据,不得侵犯用户隐私与知识产权。

六、总结与扩展

本文详细讲解了B站视频列表与详情数据的两类获取方式:官方开放平台接口(稳定合规,适用于商业开发)与Web端非官方接口(轻量便捷,适用于个人学习),涵盖前置准备、接口详情、签名实现、实战示例与避坑指南。开发者可根据自身需求选择合适的接口方案,同时需注重接口调用的合规性与稳定性。

扩展方向:

  • 批量数据获取:结合分页参数实现多页视频列表抓取,添加异常重试机制提升稳定性;

  • 数据可视化:将获取的播放量、点赞数等数据通过Matplotlib、ECharts生成图表;

  • 其他接口探索:B站开放平台还提供视频发布、评论管理等接口,可进一步扩展功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

告别本地渲染:云端GPU助力AI图像批量生成

告别本地渲染:云端GPU助力AI图像批量生成 作为一名3D动画师,你是否经常遇到这样的困境:需要渲染大量场景概念图,但本地电脑性能捉襟见肘,等待渲染的过程让人焦躁不已?本文将介绍如何利用云端GPU资源&#x…

信创背景下企业可观测平台选型指南

随着“十五五”数字经济规划开局与数字中国建设向纵深推进,信创产业已从“政策驱动”转向“政策市场”双轮驱动,企业IT架构国产化、自主可控、安全合规成为不可逆转的趋势。可观测平台作为IT运维的核心中枢,其选型不再仅聚焦功能完备性&#…

基于Springboo和vue开发的企业批量排班系统人脸识别考勤打卡系统

企业批量排班人脸识别考勤系统 演示视频 https://www.bilibili.com/video/BV1KU9iYsEBU/ 角色 管理员、普通员工 技术 SpringBoot、MySQL、Vue.js、ArcSoft人脸识别SDK、Maven、Lombok、PageHelper、Apache POI 核心功能 本系统是一款企业级批量排班与人脸识别考勤管理…

阿里通义Z-Image-Turbo WebUI在教育中的应用:快速搭建AI艺术课堂

阿里通义Z-Image-Turbo WebUI在教育中的应用:快速搭建AI艺术课堂 引言:当艺术教学遇上AI创作 作为一名艺术教师,你是否想过将AI绘画技术引入课堂?通过阿里通义Z-Image-Turbo WebUI,我们可以轻松搭建一个云端AI艺术课堂…

低成本实验:用按量付费GPU尝试Z-Image-Turbo的N种玩法

低成本实验:用按量付费GPU尝试Z-Image-Turbo的N种玩法 作为一名个人开发者,你是否对AI图像生成的各种应用场景充满好奇,但又担心云服务成本失控?本文将介绍如何利用Z-Image-Turbo镜像,在按量付费的GPU环境下低成本探索…

Z-Image-Turbo模型蒸馏实践:轻量化部署的云端实验环境

Z-Image-Turbo模型蒸馏实践:轻量化部署的云端实验环境 如果你是一名移动端开发者,希望将Z-Image-Turbo这样的强大图像生成模型蒸馏后部署到手机端,那么你可能会遇到一个棘手的问题:蒸馏实验对环境配置要求特殊,本地搭建…

inline内联函数两个特性

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言详细解释1. 类内定义函数的隐式inline特性2. inline的两个独立特性(新手易混淆)3. 类内定义 vs 类外inline定义(头文件场景&a…

2026必备!10个AI论文平台,自考毕业论文轻松搞定!

2026必备!10个AI论文平台,自考毕业论文轻松搞定! AI 工具,让论文写作不再难 随着人工智能技术的不断发展,越来越多的自考学生开始借助 AI 工具来提升论文写作效率。尤其是在当前 AIGC(人工智能生成内容&…

艺术治疗新工具:无障碍AI绘画环境搭建指南

艺术治疗新工具:无障碍AI绘画环境搭建指南 AI绘画技术正在改变艺术治疗的实践方式,但对于电脑技能有限的患者群体来说,复杂的安装和操作流程往往成为使用障碍。本文将介绍如何通过预置镜像快速搭建一个极度简化的AI绘画环境,支持…

使用 Selenium 爬取京东手机销量与评分数据 (1)

在电商数据分析场景中,京东作为头部电商平台,其手机品类的销量、评分数据是洞察市场趋势、分析用户偏好的核心依据。相较于静态网页爬取,京东采用动态渲染技术加载商品数据,传统的 RequestsBeautifulSoup 组合难以获取完整信息&am…

算法题 递增顺序搜索树

递增顺序搜索树 问题描述 给你一个二叉搜索树(BST)的根节点 root,请将其重新排列为一棵只有右子节点的递增顺序搜索树。 要求: 树中每个节点没有左子节点只有右子节点节点按照中序遍历的顺序排列 返回新树的根节点。 示例&#xf…

inline内联函数双重语义

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、先理清:inline的两个核心作用(容易混淆)二、头文件中写类成员函数的两种场景场景1:类体内部直接写函数实现&a…

导师严选2026 AI论文网站TOP10:本科生毕业论文写作全攻略

导师严选2026 AI论文网站TOP10:本科生毕业论文写作全攻略 2026年AI论文写作工具测评:为何需要一份权威榜单? 在人工智能技术不断渗透学术领域的今天,AI论文写作工具已成为本科生完成毕业论文的重要辅助。然而,面对市场…

容器开篇复制弱智问题答案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、QVector/QMap 是否属于 STL?二、std::string:是否属于 STL?是否是容器?1. 是否属于 STL?2. 是否是容器…

AI+设计:用预置镜像快速构建创意辅助工具

AI设计:用预置镜像快速构建创意辅助工具 为什么设计工作室需要AI创意辅助工具 在设计行业,创意产出往往需要耗费大量时间和人力成本。传统设计流程中,从构思到成品需要反复修改,效率较低。而AI技术的出现,特别是图像生…

LLM动态调药糖尿病副作用砍半

📝 博客主页:Jax的CSDN主页 LLM动态调药:糖尿病副作用减少50%的临床实践与未来展望目录LLM动态调药:糖尿病副作用减少50%的临床实践与未来展望 引言:糖尿病管理的痛点与技术拐点 一、糖尿病副作用的根源:为…

算法题 水果成篮

水果成篮 问题描述 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树产生的水果种类。 你有两个篮子,每个篮子只能装单一类型的水果,但你可以选择任意两棵树开始收集…

零成本体验:免费GPU资源+预装镜像玩转AI绘画

零成本体验:免费GPU资源预装镜像玩转AI绘画 作为一名对AI绘画感兴趣的大学生,你是否曾因高昂的GPU云服务费用和复杂的本地部署流程而望而却步?本文将介绍如何利用免费GPU资源和预装镜像,零门槛体验Stable Diffusion等AI绘画技术&a…

科哥手把手教学:1小时掌握Z-Image-Turbo二次开发

科哥手把手教学:1小时掌握Z-Image-Turbo二次开发 作为一名全栈开发者,当我接到集成Z-Image-Turbo的任务时,内心是有些忐忑的。虽然我对传统开发流程轻车熟路,但AI模型开发领域对我来说还是一片未知的领域。幸运的是,经…

技术创业者必看:低成本搭建AI图像生成SaaS

技术创业者必看:低成本搭建AI图像生成SaaS 为什么选择AI图像生成SaaS? 作为一名技术创业者,你可能已经注意到AI图像生成技术的巨大潜力。从营销海报到产品设计,Stable Diffusion等开源模型正在改变内容创作的方式。但传统部署方案…