{"id":13431516,"url":"https://github.com/Nemo2011/bilibili-api","last_synced_at":"2025-03-16T11:31:49.729Z","repository":{"id":37018372,"uuid":"486166210","full_name":"Nemo2011/bilibili-api","owner":"Nemo2011","description":"哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址：https://github.com/MoyuScript/bilibili-api","archived":false,"fork":false,"pushed_at":"2025-02-19T12:49:11.000Z","size":195386,"stargazers_count":2396,"open_issues_count":90,"forks_count":227,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-02-20T09:03:10.246Z","etag":null,"topics":["api","bilibili","bilibili-api","python","spider"],"latest_commit_sha":null,"homepage":"https://nemo2011.github.io/bilibili-api/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nemo2011.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOGS/v1.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-27T11:35:10.000Z","updated_at":"2025-02-20T06:08:10.000Z","dependencies_parsed_at":"2024-02-27T14:54:20.824Z","dependency_job_id":"dd399e27-cbec-4aed-bfef-c6bbcb82b5d0","html_url":"https://github.com/Nemo2011/bilibili-api","commit_stats":{"total_commits":1587,"total_committers":48,"mean_commits":33.0625,"dds":0.4253308128544423,"last_synced_commit":"183a01eac92ef6a225823364018f8711cf611011"},"previous_names":[],"tags_count":100,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nemo2011%2Fbilibili-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nemo2011%2Fbilibili-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nemo2011%2Fbilibili-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nemo2011%2Fbilibili-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nemo2011","download_url":"https://codeload.github.com/Nemo2011/bilibili-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243863195,"owners_count":20360280,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bilibili","bilibili-api","python","spider"],"created_at":"2024-07-31T02:01:03.746Z","updated_at":"2025-03-16T11:31:49.717Z","avatar_url":"https://github.com/Nemo2011.png","language":"Python","readme":"![bilibili-api logo](https://raw.githubusercontent.com/Nemo2011/bilibili-api/main/design/logo.png)\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\r\n# bilibili-api\r\n\r\n[![API 数量](https://img.shields.io/badge/API%20数量-400+-blue)][api.json]\r\n[![LICENSE](https://img.shields.io/badge/LICENSE-GPLv3+-red)][LICENSE]\r\n[![Python](https://img.shields.io/badge/python-3.13|3.12|3.11|3.10|3.9-blue)](https://www.python.org)\r\n[![Stable Version](https://img.shields.io/pypi/v/bilibili-api-python?label=stable)][pypi]\r\n[![Pre-release Version](https://img.shields.io/github/v/release/Nemo2011/bilibili-api?label=pre-release\u0026include_prereleases\u0026sort=semver)][pypi-dev]\r\n[![STARS](https://img.shields.io/github/stars/nemo2011/bilibili-api?color=yellow\u0026label=Github%20Stars)][stargazers]\r\n[![Testing](https://github.com/Nemo2011/bilibili-api/actions/workflows/testing.yml/badge.svg?branch=dev)](https://github.com/Nemo2011/bilibili-api/actions/workflows/testing.yml)\r\n\r\n**:warning: 接口可能改动，请及时更新最新版 [![Stable Version](https://img.shields.io/pypi/v/bilibili-api-python?label=stable)][pypi]**\r\n\r\n\u003c/div\u003e\r\n\r\n**注意事项：使用此模块时请仅用于学习和测试，禁止用于非法用途及其他恶劣的社区行为如：恶意刷屏、辱骂黄暴、各种形式的滥用等，违规此模块许可证 `GNU General Public License Version 3` 及此条注意事项而产生的任何后果自负，模块的所有贡献者不负任何责任。**\r\n\r\n开发文档: [bilibili_api 开发文档][docs] ([GitHub][docs-github]) \u003c!-- ([Gitee][docs-gitee]) --\u003e\r\n\r\n原仓库地址：[https://github.com/MoyuScript/bilibili-api](https://github.com/MoyuScript/bilibili-api)\r\n\r\nGithub 仓库：[https://github.com/nemo2011/bilibili-api](https://github.com/nemo2011/bilibili-api)\r\n\r\n\u003c!-- Gitee 仓库：[https://gitee.com/nemo2011/bilibili-api](https://gitee.com/nemo2011/bilibili-api) 长期未同步... --\u003e\r\n\r\n\u003e 此仓库是对原仓库 `bilibili-api` 的继续的维护。更多相关的信息请前往原仓库地址进行查看。\r\n\r\n# 简介\r\n\r\n这是一个用 Python 写的调用 [Bilibili](https://www.bilibili.com) 各种 API 的库，\r\n范围涵盖视频、音频、直播、动态、专栏、用户、番剧等[[1]](#脚注)。\r\n\r\n## 特色\r\n\r\n- 范围涵盖广，基本覆盖常用的爬虫，操作。\r\n- 可使用代理，绕过 b 站风控策略。\r\n- 全面支持 BV 号（bvid），同时也兼容 AV 号（aid）。\r\n- 调用简便，函数命名易懂，代码注释详细。\r\n- 不仅仅是官方提供的 API！还附加：AV 号与 BV 号互转[[2]](#脚注)、连接直播弹幕 Websocket 服务器、视频弹幕反查、下载弹幕、字幕文件[[3]](#脚注)、专栏内容爬取、cookies 刷新等[[4]](#脚注)。\r\n- 支持采用各种手段避免触发反爬虫风控[[5]](#脚注)。\r\n- **全部是异步操作**。\r\n- 默认支持 `aiohttp` / `httpx` / `curl_cffi`。\r\n\r\n# 快速上手\r\n\r\n首先使用以下指令安装本模块：\r\n\r\n```\r\n# 主版本\r\n$ pip3 install bilibili-api-python\r\n\r\n# 开发版本\r\n$ pip3 install bilibili-api-dev\r\n\r\n# 最新修改会在 dev 分支\r\n$ pip3 install git+https://github.com/Nemo2011/bilibili-api.git@dev\r\n```\r\n\r\n然后需要**自行安装**一个支持异步的第三方请求库，如 `aiohttp` / `httpx` / `curl_cffi`。\r\n\r\n```\r\n# aiohttp\r\n$ pip3 install aiohttp\r\n\r\n# httpx\r\n$ pip3 install httpx\r\n\r\n# curl_cffi\r\n$ pip3 install \"curl_cffi\"\r\n```\r\n\r\n接下来我们来获取视频的播放量等信息：\r\n\r\n```python\r\nimport asyncio\r\nfrom bilibili_api import video\r\n\r\n\r\nasync def main() -\u003e None:\r\n    # 实例化 Video 类\r\n    v = video.Video(bvid=\"BV1uv411q7Mv\")\r\n    # 获取信息\r\n    info = await v.get_info()\r\n    # 打印信息\r\n    print(info)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    asyncio.run(main())\r\n\r\n```\r\n\r\n输出（已格式化，已省略部分）：\r\n\r\n```json\r\n{\r\n    \"bvid\": \"BV1uv411q7Mv\",\r\n    \"aid\": 243922477,\r\n    \"videos\": 1,\r\n    \"tid\": 17,\r\n    \"tname\": \"单机游戏\",\r\n    \"copyright\": 1,\r\n    \"pic\": \"http://i2.hdslb.com/bfs/archive/82e52df9d0221836c260c82f2890e3761a46716b.jpg\",\r\n    \"title\": \"爆肝９８小时！在 MC 中还原糖调小镇\",\r\n    \"pubdate\": 1595203214,\r\n    \"ctime\": 1595168654,\r\n    ...and more\r\n}\r\n```\r\n\r\n如何给这个视频点赞？我们需要登录自己的账号。\r\n\r\n这里设计是传入一个 Credential 类，获取所需的信息参照：[获取 Credential 类所需信息][get-credential]\r\n\r\n下面的代码将会给视频点赞\r\n\r\n```python\r\nimport asyncio\r\nfrom bilibili_api import video, Credential\r\n\r\nasync def main() -\u003e None:\r\n    # 实例化 Credential 类\r\n    credential = Credential(sessdata=SESSDATA, bili_jct=BILI_JCT, buvid3=BUVID3)\r\n    # 实例化 Video 类\r\n    v = video.Video(bvid=\"BVxxxxxxxx\", credential=credential)\r\n    info = await v.get_info()\r\n    print(info)\r\n    # 给视频点赞\r\n    await v.like(True)\r\n\r\nif __name__ == '__main__':\r\n    asyncio.run(main())\r\n```\r\n\r\n如果没有报错，就代表调用 API 成功，你可以到视频页面确认是不是调用成功了。\r\n\r\n\u003e **Warning** 注意，请不要泄露这两个值给他人，否则你的账号将可能遭受盗号的风险！\r\n\r\n# 异步迁移\r\n\r\n由于从 v5 版本开始，基本全部改为异步，如果你不会异步，可以参考 [asyncio](https://docs.python.org/zh-cn/3/library/asyncio.html)\r\n\r\n异步可以进行并发请求，性能更高，不过如果请求过快仍然会导致被屏蔽。\r\n\r\n总的来说，异步比同步更有优势，所以不会的话可以去学一下，会发现新天地（误\r\n\r\n如果你仍然想继续使用同步代码，请参考 [同步执行异步代码](https://nemo2011.github.io/bilibili-api/#/sync-executor)\r\n\r\n# 模块使用的请求库\r\n\r\n模块在允许的条件下，按照 `curl_cffi` `aiohttp` `httpx` 的优先级选择第三方请求库。\r\n\r\n如果想要指定请求库，可以利用 `select_client` 进行切换。\r\n\r\n``` python\r\nfrom bilibili_api import select_client\r\n\r\nselect_client(\"curl_cffi\") # 选择 curl_cffi，支持伪装浏览器的 TLS / JA3 / Fingerprint\r\nselect_client(\"aiohttp\") # 选择 aiohttp\r\nselect_client(\"httpx\") # 选择 httpx，不支持 WebSocket\r\n```\r\n\r\ncurl_cffi 支持伪装浏览器的 TLS / JA3 / Fingerprint，但需要手动设置。\r\n\r\n``` python\r\nfrom bilibili_api import request_settings\r\n\r\nrequest_settings.set(\"impersonate\", \"chrome131\") # 第二参数数值参考 curl_cffi 文档\r\n# https://curl-cffi.readthedocs.io/en/latest/impersonate.html\r\n```\r\n\r\n# FA♂Q\r\n\r\n**Q: 关于 API 调用的正确姿势是什么？**\r\n\r\nA: 所有 API 调用，请尽量使用 **指名方式** 传参，\r\n因为 API 较多，可能不同函数的传参顺序不一样，例子：\r\n\r\n```python\r\n# 推荐\r\nvideo.get_info(bvid=\"BV1uv411q7Mv\")\r\n\r\n# 当然也可以这样\r\nkwargs = {\r\n    \"bvid\": \"BV1uv411q7Mv\"\r\n}\r\nvideo.get_info(**kwargs)\r\n\r\n# 不推荐\r\nvideo.get_info(\"BV1uv411q7Mv\")\r\n```\r\n\r\n**Q: 为什么会提示 412 Precondition Failed ？**\r\n\r\nA: 你的请求速度太快了。造成请求速度过快的原因可能是你写了高并发的代码。\r\n\r\n这种情况下，你的 IP 会暂时被封禁而无法使用，你可以设置代理绕过。\r\n\r\n```python\r\nfrom bilibili_api import request_settings\r\n\r\nrequest_settings.set_proxy(\"http://your-proxy.com\") # 里头填写你的代理地址\r\n\r\nrequest_settings.set_proxy(\"http://username:password@your-proxy.com\") # 如果需要用户名、密码\r\n```\r\n\r\n**Q: 我想在项目中使用这个模块，但是我的项目使用其他请求库进行网络请求（如 `pycurl`），想要模块也同时使用它（们），可以吗？**\r\n\r\nA: 可以，但是你可能要自己动手实现模块和具体请求库的适配。详见 [自定义请求库](https://nemo2011.github.io/bilibili-api/#/request_client)\r\n\r\n**Q: 怎么没有我想要的功能？**\r\n\r\nA: 你可以发 Issue 来提交你的需求，但是，最好的办法是自己写（懒）\r\n\r\n\u003cspan id=\"contribute\"\u003e**Q: 我有一个大胆的想法，如何给代码库贡献？**\u003c/span\u003e\r\n\r\nA: 请先 clone 本仓库一份，然后从 main 分支新建一个分支，在该分支上工作。\r\n如果你觉得已经可以了，请向项目仓库的 develop 分支发起 Pull request。\r\n如果你不明白这些操作的话，可以百度。完整指南：[CONTRIBUTING.md](https://github.com/nemo2011/bilibili-api/blob/main/.github/CONTRIBUTING.md)\r\n\r\n**Q: 稳定性怎么样？**\r\n\r\nA: 由于该模块比较特殊，是爬虫模块，如果 b 站的接口变更，可能会马上失效。因此请始终保证是最新版本。如果发现问题可以提 [Issues][issues-new]。\r\n\r\n# 脚注\r\n\r\n- \\[1\\] 这里只列出一部分，请以实际 API 为准。\r\n- \\[2\\] 代码来源：\u003chttps://www.zhihu.com/question/381784377/answer/1099438784\u003e (WTFPL)\r\n- \\[3\\] 部分代码来源：\u003chttps://github.com/m13253/danmaku2ass\u003e (GPLv3) \u003chttps://github.com/ewwink/python-srt2ass\u003e\r\n- \\[4\\] 思路来源：\u003chttps://socialsisteryi.github.io/bilibili-API-collect/docs/login/cookie_refresh.html\u003e (CC-BY-NC 4.0)\r\n- \\[5\\] 大量思路来源 \u003chttps://socialsisteryi.github.io/bilibili-API-collect\u003e 中相关讨论。\r\n\r\n[docs]: https://nemo2011.github.io/bilibili-api\r\n[docs-github]: https://github.com/nemo2011/bilibili-api/tree/main/docs\r\n[docs-gitee]: https://gitee.com/nemo2011/bilibili-api/tree/main/docs\r\n[api.json]: https://github.com/nemo2011/bilibili-api/tree/main/bilibili_api/data/api/\r\n[license]: https://github.com/nemo2011/bilibili-api/tree/main/LICENSE\r\n[stargazers]: https://github.com/nemo2011/bilibili-api/stargazers\r\n[issues-new]: https://github.com/Nemo2011/bilibili-api/issues/new/choose\r\n[get-credential]: https://nemo2011.github.io/bilibili-api/#/get-credential\r\n[pypi]: https://pypi.org/project/bilibili-api-python\r\n[pypi-dev]: https://pypi.org/project/bilibili-api-dev\r\n\r\n# Star History\r\n\r\n[![Star History Chart](https://api.star-history.com/svg?repos=Nemo2011/bilibili-api\u0026type=Date)](https://star-history.com/#Nemo2011/bilibili-api\u0026Date)\r\n","funding_links":[],"categories":["开发"],"sub_categories":["直播脚本"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNemo2011%2Fbilibili-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNemo2011%2Fbilibili-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNemo2011%2Fbilibili-api/lists"}