政务公开 网站建设滞后,如何自己做解析网站,怎么做的网站收录快,手机 网站开发软件有哪些哔哩哔哩#xff08;B 站#xff09;作为国内领先的视频社区#xff0c;其item_get_video接口是获取单条视频精细化详情的核心工具#xff0c;可返回视频播放地址、分集信息、互动数据、UP 主信息等关键内容#xff0c;广泛应用于视频聚合平台、内容数据分析、二次创作素材…哔哩哔哩B 站作为国内领先的视频社区其item_get_video接口是获取单条视频精细化详情的核心工具可返回视频播放地址、分集信息、互动数据、UP 主信息等关键内容广泛应用于视频聚合平台、内容数据分析、二次创作素材调研、舆情监测等场景。本攻略从接口认知、前置准备、实操对接、调试优化到合规上线提供全流程结构化指导兼顾入门易用性与生产级稳定性助力开发者高效完成对接。一、接口核心认知功能与适配场景1. 接口定位与核心价值核心功能输入 B 站视频 AV 号 / BV 号 / 视频 ID即可获取该视频的基础信息、播放数据、互动数据、UP 主信息、分集列表等全量详情部分接口还支持返回视频字幕、分 P 时长、版权信息等进阶字段。B 站平台特性数据覆盖支持番剧、国创、UP 主自制视频、直播回放等全品类视频新视频收录延迟 5-10 分钟专属字段包含 B 站独有的弹幕数、投币数、收藏数、充电数等互动指标以及分区标签、创作激励状态等平台特色字段权限分层基础字段标题、播放量支持普通权限进阶字段播放链接、字幕需企业级或专项权限多格式兼容支持 AV 号旧格式、BV 号新格式、video_id接口专用 ID三种标识查询。典型应用场景视频聚合工具接入 B 站视频详情为用户提供一站式视频检索与播放入口内容数据分析采集视频互动数据分析不同分区内容的用户偏好、爆款视频特征二次创作调研获取视频标签、简介等信息辅助创作者定位选题方向舆情监测追踪品牌 / 事件相关视频的传播数据播放量、评论数掌握舆论走向番剧运营分析获取番剧分集播放数据评估剧集热度与用户追更意愿。2. 核心参数与返回字段1请求参数必填 可选按优先级排序参数名称类型是否必填说明应用示例appkeystring是接口调用密钥由 B 站开放平台 / 合规服务商分配bilibili_123abcsecretstring是签名密钥用于请求合法性校验不可泄露bilibili_def456video_idstring是视频标识支持 AV 号av123456、BV 号BV1xx411c7m9、接口专用 video_idBV1xx411c7m9need_pageint否是否返回分 P 信息默认 1返回1返回分 P、0仅返回主视频need_danmuint否是否返回弹幕相关数据默认 0不返回1返回弹幕数 / 弹幕关键词need_up_infoint否是否返回 UP 主详细信息默认 1返回0仅返回 UP 主 ID / 昵称timestamplong是请求时间戳毫秒级有效期 5 分钟1735689600000signstring是签名值按 B 站规则生成核心校验项32 位 MD5 大写串注意事项视频标识优先级video_id传入 BV 号时接口会自动转换为内部 ID无需手动解析权限关联need_danmu1需额外申请弹幕数据权限普通账号默认不开放。2返回核心字段按业务场景分类字段分类核心字段说明视频基础信息bvid视频 BV 号对外唯一标识aid视频 AV 号旧标识部分场景兼容title视频标题含分区前缀 / 营销文案cover_url视频封面图 URL高清duration视频总时长秒分 P 视频为所有分 P 总和pubdate视频发布时间时间戳 / 格式化时间cid视频分 P 标识单 P 视频 cid 唯一多 P 视频每个分 P 对应一个 ciddesc视频简介UP 主自定义文案tags视频标签列表如 “原神”“教程”“搞笑”category视频分区如 “游戏 - 原神”“知识 - 科普”播放与互动数据view累计播放量danmaku累计弹幕数reply评论数favorite收藏数coin投币数like点赞数share转发数charge充电数用户对 UP 主的打赏current_rank全站实时排名部分热门视频有值分 P 信息need_page1 时返回pages分 P 列表包含分 P 标题、时长、cidpage_count分 P 总数UP 主信息midUP 主 IDnameUP 主昵称faceUP 主头像 URLfollowerUP 主粉丝数levelUP 主等级1-6 级official_verify认证类型个人 / 企业 / 官方其他字段copyright版权类型1 原创2 转载state视频状态0 正常-1 审核中-2 已下架play_url视频播放链接需权限部分接口仅返回跳转链接3. 接口限制与注意事项调用频率限制账号类型调用频率适用场景个人开发者5 次 / 分钟个人素材调研、小型分析工具企业开发者30 次 / 分钟商业数据分析、内容聚合平台数据缓存规则视频基础信息缓存 1 小时互动数据播放量 / 点赞数缓存 5 分钟热门视频缓存时效缩短至 1 分钟内容限制已下架 / 违规视频、隐私视频仅粉丝可见、未过审视频不会返回番剧等版权内容仅返回基础信息无播放链接合规要求禁止通过接口获取视频源文件进行盗播播放链接需跳转至 B 站站内二次创作需遵守 B 站版权规则。二、对接前准备权限与环境搭建1. 获取接口权限两种接入方式B 站item_get_video接口无公开免费接入渠道需通过官方开放平台或合规第三方服务商获取权限具体对比如下接入方式操作步骤优缺点B 站开放平台官方1. 登录B站开发平台2. 完成账号认证个人实名认证 / 企业营业执照认证3. 创建应用选择 “内容数据 / 视频服务” 类目4. 申请item_get_video接口权限提交业务用途说明5. 审核通过后在应用详情页获取appkey和secret优点数据权威、字段完整、合规性强缺点审核严格企业需提供业务证明、周期长3-7 个工作日、部分字段播放链接需专项授权第三方合规服务商1. 选择口碑合规的服务商如聚合数据、APISpace2. 注册账号并完成实名认证3. 购买 B 站视频接口套餐4. 在服务商后台获取appkey和接口调用地址优点接入快10 分钟完成、无需复杂资质、调试工具完善缺点部分进阶字段弹幕关键词需付费升级、调用次数有配额限制风险提示严禁使用非法爬虫接口违反 B 站用户协议及《网络安全法》存在账号封禁、法律追责风险。2. 技术环境准备1支持语言与协议协议HTTPS强制保障数据传输安全开发语言支持 Python、Java、PHP、Go 等所有主流语言推荐Python数据处理便捷适配多场景解析需求。2必备工具与依赖工具类型推荐工具用途调试工具Postman快速验证接口可用性排除代码逻辑干扰在线 MD5 工具校验签名生成正确性B 站 BV 号 / AV 号转换器验证视频标识有效性开发依赖requestsPython发送 HTTP 请求hashlibPython生成接口签名pandasPython批量整理视频数据jsonpath-ng快速解析嵌套 JSON 响应辅助工具Redis缓存视频详情减少重复请求logging记录接口调用日志便于问题追溯三、实操步骤接口对接全流程Python 示例步骤 1理解 B 站接口签名规则B 站官方接口签名采用MD5 加密第三方服务商通常沿用类似规则核心逻辑为参数排序 拼接密钥 MD5 加密具体步骤如下剔除参数中的sign字段若存在将剩余参数按参数名 ASCII 升序排序拼接为key1value1key2value2...的字符串在字符串末尾拼接secret你的secret对拼接后的字符串进行 MD5 加密生成 32 位大写字符串即为sign。签名示例假设参数appkeybilibili_123abc、video_idBV1xx411c7m9、timestamp1735689600000、secretbilibili_def456排序后参数appkey、timestamp、video_id拼接字符串appkeybilibili_123abc×tamp1735689600000video_idBV1xx411c7m9secretbilibili_def456MD5 加密后得到signA1B2C3D4E5F67890123456789ABCDEF0。步骤 2完整代码实现Python1依赖安装bashpip install requests pandas jsonpath-ng2核心代码含签名生成、接口调用、数据解析import requests import hashlib import time import json import pandas as pd from urllib.parse import urlencode from jsonpath_ng import parse import logging # 封装好API供应商demo urlhttps://console.open.onebound.cn/console/?iLex # 日志配置记录接口调用与错误信息 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[logging.FileHandler(bilibili_item_get_video.log), logging.StreamHandler()] ) # 接口配置替换为自身的appkey、secret、接口地址 CONFIG { appkey: 你的appkey, secret: 你的secret, api_url: https://api.example.com/bilibili/item_get_video, # 官方/服务商接口地址 save_path: B站视频详情.xlsx } def generate_sign(params: dict, secret: str) - str: 生成B站接口签名MD5 32位大写 # 移除sign字段若存在 params.pop(sign, None) # 按参数名ASCII升序排序 sorted_params sorted(params.items(), keylambda x: x[0]) # 拼接参数字符串并追加secret param_str urlencode(sorted_params, encodingutf-8) fsecret{secret} # MD5加密并转大写 md5 hashlib.md5() md5.update(param_str.encode(utf-8)) return md5.hexdigest().upper() def parse_bilibili_data(raw_data: dict) - dict: 解析B站视频原始数据标准化输出格式 # 提取UP主信息 up_info raw_data.get(owner, {}) or raw_data.get(up_info, {}) # 提取分P信息 page_info raw_data.get(pages, []) page_count len(page_info) if page_info else 1 page_titles [page.get(part, ) for page in page_info] if page_info else [raw_data.get(title, )] # 格式化时间 pubdate raw_data.get(pubdate, 0) pubdate_str time.strftime(%Y-%m-%d %H:%M:%S, time.localtime(pubdate)) if pubdate else return { BV号: raw_data.get(bvid, ), AV号: raw_data.get(aid, ), 视频标题: raw_data.get(title, ), 封面链接: raw_data.get(pic, raw_data.get(cover_url, )), 总时长(分:秒): f{raw_data.get(duration, 0)//60}:{raw_data.get(duration, 0)%60:02d}, 发布时间: pubdate_str, 视频分区: raw_data.get(tname, raw_data.get(category, )), 视频标签: ,.join(raw_data.get(tags, [])), 视频简介: raw_data.get(desc, ), 版权类型: 原创 if raw_data.get(copyright, 2) 1 else 转载, 视频状态: 正常 if raw_data.get(state, 0) 0 else 审核中 if raw_data.get(state) -1 else 已下架, 播放量: raw_data.get(view, 0), 弹幕数: raw_data.get(danmaku, 0), 评论数: raw_data.get(reply, 0), 收藏数: raw_data.get(favorite, 0), 投币数: raw_data.get(coin, 0), 点赞数: raw_data.get(like, 0), 转发数: raw_data.get(share, 0), 充电数: raw_data.get(charge, 0), 分P总数: page_count, 分P标题: |.join(page_titles), UP主ID: up_info.get(mid, ), UP主昵称: up_info.get(name, up_info.get(uname, )), UP主头像: up_info.get(face, ), UP主粉丝数: up_info.get(follower, 0), UP主等级: up_info.get(level, 0), 认证类型: up_info.get(official_verify, {}).get(type, -1), 播放链接: raw_data.get(play_url, 需跳转B站站内), 请求时间: time.strftime(%Y-%m-%d %H:%M:%S, time.localtime()) } def bilibili_item_get_video( video_id: str, need_page: int 1, need_up_info: int 1, need_danmu: int 0 ) - dict: 调用B站item_get_video接口获取视频详情 :param video_id: BV号/AV号/接口video_id :param need_page: 是否返回分P信息 :param need_up_info: 是否返回UP主详情 :param need_danmu: 是否返回弹幕数据 :return: 标准化的视频详情 # 1. 构建基础参数 params { appkey: CONFIG[appkey], video_id: video_id, need_page: need_page, need_up_info: need_up_info, need_danmu: need_danmu, timestamp: int(time.time() * 1000) } # 2. 生成签名 params[sign] generate_sign(params, CONFIG[secret]) try: # 3. 发送POST请求 response requests.post( urlCONFIG[api_url], datajson.dumps(params), headers{Content-Type: application/json}, timeout15, verifyTrue ) response.raise_for_status() # 抛出HTTP异常 result response.json() # 4. 解析响应 if result.get(code) 0 or result.get(status) success: raw_video result.get(data, result.get(result, {})) if not raw_video: logging.warning(f无视频数据返回视频ID{video_id}) return {success: False, error_msg: 无视频数据} standard_data parse_bilibili_data(raw_video) return { success: True, data: standard_data, error_msg: } else: error_msg result.get(msg, result.get(message, 接口调用失败)) logging.error(f接口返回错误视频ID{video_id}{error_msg}code{result.get(code)}) return {success: False, error_msg: error_msg} except requests.exceptions.RequestException as e: logging.error(f网络请求异常视频ID{video_id}{str(e)}) return {success: False, error_msg: f网络异常{str(e)}} except Exception as e: logging.error(f数据解析异常视频ID{video_id}{str(e)}) return {success: False, error_msg: f解析异常{str(e)}} def batch_get_video_detail(video_ids: list, **kwargs) - list: 批量获取多个视频的详情 all_videos [] for idx, vid in enumerate(video_ids): logging.info(f正在获取第{idx1}个视频ID{vid}) result bilibili_item_get_video(vid,** kwargs) if result[success]: all_videos.append(result[data]) logging.info(f视频{vid}获取成功) else: logging.error(f视频{vid}获取失败{result[error_msg]}) # 控制调用频率个人用户间隔12秒企业用户间隔2秒 time.sleep(12) return all_videos def save_video_detail(videos: list, save_path: str CONFIG[save_path]): 将视频详情保存为Excel if not videos: logging.warning(无视频数据可保存) return df pd.DataFrame(videos) # 增量保存避免覆盖历史数据 try: history_df pd.read_excel(save_path, engineopenpyxl) df pd.concat([history_df, df], ignore_indexTrue).drop_duplicates(subset[BV号]) except FileNotFoundError: pass df.to_excel(save_path, indexFalse, engineopenpyxl) logging.info(f视频详情已保存至{save_path}共{len(df)}条数据) # 封装好API供应商demo urlhttps://console.open.onebound.cn/console/?iLex # 调用示例 if __name__ __main__: # 单视频获取示例 single_video_result bilibili_item_get_video(video_idBV1xx411c7m9) if single_video_result[success]: print(B站视频详情) for k, v in single_video_result[data].items(): print(f{k}{v}) else: print(f获取失败{single_video_result[error_msg]}) # 批量获取示例 # video_list [BV1xx411c7m9, BV1yt411g7qK, av123456] # batch_result batch_get_video_detail(video_list) # save_video_detail(batch_result)四、调试与问题排查快速解决对接异常1. 优先用 Postman 调试排除代码干扰构造请求新建 POST 请求填写接口 URL请求头设置Content-Type: application/json填写参数在请求体中输入appkey、video_id、timestamp等必填项按需补充need_page等可选参数生成签名用在线 MD5 工具手动计算sign填入参数发送请求查看响应结果验证接口可用性。2. 高频问题排查表问题现象常见原因解决方案签名错误4011. 参数排序错误2.secret不匹配3. 时间戳过期4. 中文未 URL 编码1. 按 ASCII 升序排序参数2. 核对secret与后台一致3. 校准本地时间误差≤5 分钟4. 确保urlencode处理特殊字符权限不足4031. 未申请item_get_video接口权限2. 无分 P / 弹幕数据权限3. 调用频率超限1. 在开放平台确认接口已开通2. 申请对应进阶权限3. 增加请求间隔降低调用频率参数错误4001.video_id格式错误非 BV/AV 号2.need_page等参数非 0/13. 字段类型错误1. 验证video_id有效性B 站官网可查询2. 确保参数为 0/1 整数3. 检查参数类型如timestamp为数字无数据返回1. 视频 ID 无效 / 已下架2. 视频为隐私 / 版权受限内容3. 接口未收录该视频1. 核对视频 ID在 B 站官网确认视频状态2. 排除番剧等版权内容3. 更换服务商或申请官方专项权限字段缺失如无播放链接1. 无播放权限2. 番剧等版权内容限制3. 接口版本不支持1. 申请 B 站站内播放跳转权限2. 仅展示基础信息引导用户跳转 B 站3. 升级接口版本五、进阶优化生产级稳定性提升1. 性能优化异步并发请求批量获取多视频时使用aiohttp实现异步请求控制并发数≤5避免频率超限效率比同步提升 4-6 倍智能缓存策略用 Redis 缓存视频详情缓存 key 为bilibili_视频BV号基础信息缓存 1 小时互动数据缓存 5 分钟减少重复请求数据复用通过item_get_video获取的cid分 P 标识可联动 B 站其他接口获取分 P 播放数据避免重复调用。2. 数据质量优化数据去重按BV号去重避免同一视频多次入库异常值过滤过滤播放量为 0、状态为下架的无效数据字段补全对缺失的分区 / 标签字段通过视频标题关键词自动补充如标题含 “原神” 则补充分区 “游戏 - 原神”。3. 合规与安全密钥管理生产环境将appkey和secret存储在环境变量 / 配置中心如 Nacos禁止硬编码定期轮换密钥数据合规视频数据仅用于合规业务播放链接需跳转 B 站站内二次创作需获得 UP 主授权禁止盗播 / 商用日志审计详细记录接口调用的参数、响应、错误信息保留至少 7 天日志便于合规审计与问题追溯。六、扩展场景接口联动与功能升级联动item_search_video接口先通过关键词搜索获取视频 ID 列表再批量调用item_get_video获取详情实现 “搜索 - 详情” 全链路爆款视频分析模型结合播放量、点赞率点赞 / 播放、投币率等指标构建爆款评分公式自动筛选优质内容实时监控告警用APScheduler定时调用接口监控目标视频的播放量 / 评论数变化触发舆情 / 爆款告警。