BiliApi v1.0 – 让 Bilibili 的开发更简单

文章目录 [隐藏]

BiliApi

大家好这里是 KAAAsS。这次给大家带来的是一个 API,这个 API 可以极大的简化 Bilibili 相关的应用的开发负担。

WHY??

开发这个 API 的起因很简单 —— 自己在开发 B 站兴趣圈的时候,深感麻烦。遂开发了 API 解决一些,比如登录什么的麻烦事。部分方便的 Bilibili 小工具也挂在上面。

怎么调用

所有的 BiliApi 全部都位于:http://api.kaaass.net/biliapi 下。只需要简单的 POST 或者 GET 就可以调用并获得 json 返回。

本 API 暂时不设置调用限制。

隐私政策

请参见 API 文档中 “简介” 的 “隐私政策” 段落。

API 文档

所有有关 API 的调用方式都会编辑成 API 文档并放到这里:BiliApi – KAAAsS Doc

分享到

KAAAsS

喜欢二次元的程序员,喜欢发发教程,或者偶尔开坑。(←然而并不打算填)

相关日志

  1. 没有图片
  2. 没有图片
  3. 没有图片
  4. 没有图片
  5. 没有图片

评论

  1. 林唯心 2019.02.23 12:02 上午

    大佬 api 文档 404?

    • KAAAsS 2019.02.23 7:47 下午

      正确链接已经更新~

  2. KClO3 2019.02.27 4:17 下午

    大佬,似乎 appkey 在视频链接获取时用不了,报
    {
    "code": 10003,
    "result": "error",
    "message": "Invalid appkey parameter."
    }

    • KAAAsS 2019.02.27 5:26 下午

      旧 ak、sk 对过期了,稍后我会先部署个临时版本。
      一直说着更新(去年八月)结果就鸽了 23333

      • KClO3 2019.02.27 8:30 下午

        非常感谢,修的太快了
        但关于视频链接的 api 好像还有问题,
        普通视频没有问题,但如果尝试番剧就会报
        "code": 10004,
        "message": "Video is hidden."
        我是使用大会员的 access_key, 也试过转 cookie 后用浏览器登录,是可以的

        • KAAAsS 2019.02.27 9:37 下午

          番剧解析将会独立至 video/resolveBangumi,目前这个解析已经是两年前的旧代码了,已经脱节太远了 Orz
          另外,刚刚已经部署了支持目前所有清晰度的 video/resolve,详细变化会在文档中说明。

          • KClO3 2019.02.27 10:12 下午

            如果不介意的话,可以看一下这个脚本的 1809 – 1813
            https://greasyfork.org/zh-CN/scripts/372516-bilibili-merged-flv-mp4-ass-enhance
            但不太清楚 cid 怎么获得,之前你的 api 返回的 cid 倒是可以用,我试了试,似乎十分神奇地不用带 cookie, 就可以获得正确的视频地址

          • KAAAsS 2019.02.28 3:05 下午

            非会员限定视频当然不用 cookie 就能解析,但是大会员清晰度或相关视频的解析是需要登录凭据的。

  3. 路人 A 2019.04.02 2:53 上午

    大佬,这个 API 还能用么?随便试了一下视频解析的 api,400 无法解析

    400 Bad Request

    Cannot resolve this video, code -400, message: 请求错误.

    • KAAAsS 2019.04.02 5:33 下午

      似由接口变动引起。目前已经上线了备用接口,一会儿分析完成之后会上线正式接口。

      P.S. 已修复,是我沙雕了。

  4. Chris Xu 2019.05.05 3:16 下午

    想问一下大神,API doc 里的 utils API 是不是无法使用了,就是自动生成 B 站 API 的 URL 包括 sign 之类的。用它生成的 URL 无法访问,不知道是不是我使用方法错了
    另外 accessKey 和 sign 是同一类东西么,感觉自己有点混淆了

    • KAAAsS 2019.05.06 11:32 上午

      只要 BiliAPI 其它接口在正常运行,那 urlgene 就应该是正常的。
      accessKey 是 ak、sk 对中需要显式放在请求参数里的,用于标记这个请求的 app,而 sign 是通过请求参数和 ak、sk 进行计算得到的,用于校验请求。

      • Chris Xu 2019.05.08 5:41 下午

        谢谢大神解释,试了一下 BiliAPI 里的 Bilibili 登录 (access_key) API,似乎也无法使用了,填好参数发送请求后显示 Invalid URL。不知道是不是我使用错误,还是它和 utils API 确实一同失效了?
        使用 utils API 的请求返回结果,会显示 403 access denied

        • KAAAsS 2019.05.09 12:42 下午

          我看了一眼,API 运行应该没问题,测试了下也能正确返回。推测可能还是参数有误?具体使用还请参阅:http://docs.kaaass.net/showdoc/web/#/2?page_id=3。
          如果还是不行,可以发邮件给我:admin@kaaass.net。

  5. coral 2019.05.25 10:28 下午

    想问一下大神,我刚刚好像调用多了被 503 了,大概好久能够解封啊 QAQ

    • KAAAsS 2019.05.25 11:22 下午

      这个其实是 B 站接口在要求验证码,具体时间不明……
      v2 接口会提供用户提交验证码的方法,但是对 v1 来说,目前没办法,毕竟写这个接口的时候是不要求验证码的。

      • coral 2019.05.29 12:52 上午

        大佬,你这个工程有没有 GitHub 啊,想学习一下这个。

        • KAAAsS 2019.05.29 12:58 下午

          Web 版暂未开源,但坑里的 v2 有计划开源
          Python 版在重构,目前绝赞拖坑中 2333:https://gitee.com/kaaass/biliapi_python

          • coral 2019.05.29 1:23 下午

            大佬真的又可爱ớ ₃ờ,又巨呀!
            抱紧大腿

  6. 林唯心 2019.05.26 11:41 下午

    AccessKey 生成器 好像不行了获取不了?

    • KAAAsS 2019.05.27 1:32 上午

      我刚刚测试了下是可以用的。
      由于调用的是 v1 的 biliapi,于是错误次数过多或访问频繁就会要求验证码。

  7. 王四 2019.07.19 1:33 下午

    说声抱歉啊,今天调用登录 api 过多导致后面报错用不了
    还有,博主是否考虑提供一个专门 “登录” 的库,只调用博主给的 sign 加密的 api,其他 getKey 和 login 由大家在各自的本地端执行(与 b 站 api 交互),这样就避免使用博主提供的 “登录” 的 api 调用过多导致 ip 被封需要验证码的问题。

    • 王四 2019.07.19 2:11 下午

      博主,这边反映一个问题,https://api.kaaass.net/biliapi/urlgene,这个 api 因为通过 get 方式请求,对特殊字符会进行 URL 转码,导致你后台进行计算 sign 时与我传入的实际参数不一样,实际导致错误。例子就是,我打算进行登录时,hash + 密码的 rsa 加密后的字符串含有特殊字符 "/"、"=",这样我这边就登录不来
      能不能提供一个 post 的?
      还有,感谢博主大神,帮了大忙

    • KAAAsS 2019.07.19 3:49 下午

      其实 biliapi 一直是打算提供其他语言的 sdk 的。16 年的时候我就开始着手写 biliapi 的 python 和 java 版本,但是由于各种原因(懒),并没有写完。去年开始重构 biliapi_python,但是仍然没有写完(还是懒)。目前进度可以在 Gitee 上看到:https://gitee.com/kaaass/biliapi_python

      关于 POST 的接口,可以使用 /urlgenePost,将所有参数转为使用 Post body 发送即可。

      • 王四 2019.07.19 8:17 下午

        多谢博主,但是我发现我没必要多此一举,b 站仅仅对登录进行限制,刷新 token 却没有限制,登录仅仅只是一次性的,我还是偷懒用博主的登录接口吧~
        就是还有一个疑问,不知道刷新 token 时,cookie 有没有跟着一起刷

        • KAAAsS 2019.07.19 9:02 下午

          如果指的是 sso 接口获得的 cookie 的话,那个按照我以前的开发经验来看似乎失效的很频繁。

          建议每次一系列操作前调用诸如个人空间接口来检测是否过期,或者失败时直接调用 sso。

          • 王四 2019.07.19 9:24 下午

            ok 多谢博主

  8. 挽歌 2019.08.02 5:20 上午

    博主大佬,我是个新手 折腾了半天到了调用您的 https://api.kaaass.net/biliapi/urlgene 这一步了 返回的 url 访问提示无法校验 sign 又或者是访问被拒… 用了上面您提到的 urlgenePost 好像也无法解决,这是什么问题呢…

    Map<String,String> map = new HashMap<>();
    map.put("host", "http://api.bilibili.cn/friend/fans&quot;);
    map.put("access_key", "452641319aad8c28b091be**********");
    map.put("page", "1");
    map.put("pagesize", "10");
    map.put("android", "false");
    JSONObject object = HttpUtil.httpClientPost("https://api.kaaass.net/biliapi/urlgenePost&quot;, map);

    返回
    {"host":"http://api.bilibili.cn/friend/fans&quot;,"url":"http://api.bilibili.cn/friend/fans?access_key=452641319aad8c28b091be**********&appkey=1d8b6e**********&page=1&pagesize=10&ts=1564694187&sign=5853a36ad9e6b130bfef037d276227ee&quot;,"ts":1564694187,"status":"OK"}

    访问 url 返回
    {"code":-403,"message":"Access denied.","ts":1564694340}

    • KAAAsS 2019.08.02 1:20 下午

      biliapi 接口状态我看了下是没问题的。

      不过这个接口 api.bilibili.cn/friend/fans 我不是很清楚,无论怎么拼接也无法返回正确的内容。看了下接口文档,这个接口貌似是很久以前的接口了。猜测可能这个接口已经过时了?

      另外,目前粉丝列表在 app 是采用 hybrid 的形式,所以相关接口也是 web 的。

      • 挽歌 2019.08.03 5:19 上午

        谢谢博主大佬,我试了下 hybrid 确实可以返回 但是没有内容
        {"code":0,"list":[],"results":0,"pages":0}
        我想应该是参数定义也变了,我现在也翻了很久也只能翻到这个 fans 的 api 文档,这些新 api 有没有文档之类的呢…

        • KAAAsS 2019.08.03 11:01 上午

          可惜的是,目前 B 站接口并没有一份公开的完善的文档。若干年前我尝试收集一份,但是由于工作量实在是大,所以也没有完成。如今接口已有诸多变化,接口大概只能现用现找了。

  9. 今夕何夕 2019.08.03 10:40 下午

    "url":"http:\/\/upos-hz-mirrorkodou.acgvideo.com\/upgcxcode\/43\/40\/107534043\/107534043-1-32.flv?e=ig8euxZM2rNcNbN37WdVhoMgnwUVhwdEto8g5X10ugNcXBlqNCNEto8g5gNvNE3DN0B5tZlqNxTEto8BTrNvN05fqx6S5ahE9IMvXBvE2ENvNCImNEVEK9GVqJIwqa80WXIekXRE9IB5QK==&deadline=1564849364&gen=playurl&nbs=1&oi=1877347901&os=kodou&platform=android&trid=04ac458a1a3c4549a8b7b70deaca3a79&uipk=5&upsig=424c83506bfaf948a2c16887c0d0e000&uparams=e,deadline,gen,nbs,oi,os,platform,trid,uipk&mid=14095780"
    请教博主,我调用函数获得了 bilibili 视频的直链 (以上),可是在打开后(已将 “\/” 转为 “/”)得到如下所述:
    403 Forbidden
    You don’t have permission to access the URL on this server.
    Powered by Tengine
    已添加 access_key 参数,非大会员账户;解析的视频不需要大会员。
    是需要在解析后的 url 中添加什么参数么?我用 parsevideo 解析出来的直链似乎和上述链接有所不同,限于现无 vpn,无法提供。
    谢谢
    2019/08/03

    • KAAAsS 2019.08.04 2:10 下午

      需要特殊的请求头。详细可以参考文档 “返回地址相关” 节:http://docs.kaaass.net/showdoc/web/#/2?page_id=6。

      • 今夕何夕 2019.08.04 10:07 下午

        谢谢,问题解决了,用了 Postman 中的参数就可以了。

  10. 希羽 2019.08.08 1:10 下午

    请问,登录请求返回了 <h1>503 Service Unavailable</h1><p>Error code: -105, message: 验证码错误.</p><hr><i>KAAAsS BiliAPI v1.0</i > 怎么办?

    • KAAAsS 2019.08.08 1:14 下午

      短时内请求(主要是登录失败)过多…… 对于 BiliAPI 的 v1 接口来说,方法就是稍候再试。
      曾经有个 patch 是允许附上 direct=true 来直接返回请求地址的,可以由调用方本地请求,但是后来服务器迁移代码版本回溯了。一会儿我试试能不能找到,或者直接写一个。

      • 希羽 2019.08.08 1:21 下午

        如果可以做成调用方本地请求那更好了,另外问一下 "使用 rsa 加密 hash 接上明文密码" 意思是 用取回的 public key 使用 rsc 加密 hash 然后后面再接上明文密码吗?

        • KAAAsS 2019.08.08 1:27 下午

          先确认下,你现在使用的登录方式是 access key 生成器的 encrypted=true 么?如果是的话,那就是调用 getKey,在 passwd 参数传入 hash + 明文密码后使用公钥加密的结果。如果不是的话,就没有必要这样了。

  11. 希羽 2019.08.08 4:30 下午

    请求了 https://account.bilibili.com/api/login/v2,返回 code-400,然后等了三个小时了还是接口用不了,新接口弄好了后告诉我一下哦,祝大佬每天生活愉快~

    • KAAAsS 2019.08.08 8:48 下午

      接口已经更新,现在请求 https://api.kaaass.net/biliapi/user/login?direct=true,其它不变即可。

      • 希羽 2019.08.08 9:42 下午

        {"code":-3,"message":"API sign invalid","ts":1565271732}
        用的是请求 biliapi/user/login?direct=true 返回的,但是好像 Sign 值不对?

  12. km 2019.08.15 9:51 上午

    请问有获取用户粉丝数这种的接口吗

    • KAAAsS 2019.08.15 1:44 下午

      刚刚写了个空间信息接口,地址 user/space。需要 GET 传入参数 id,即用户 uid。粉丝数在 data-card 那一块。文档稍后上线。

      • km 2019.08.26 9:55 上午

        谢谢 dalao

  13. BobLiu 2019.08.17 5:19 下午

    巨佬,想问个问题!如果我想统计一个账户 (提供 mid) 的视频总播放量和总时长,我应该用什么接口呢 QAQ,文档里翻了一下只找到获取用户空间信息,但是似乎只有前 20 个视频的信息 (〃’▽’〃)

    • KAAAsS 2019.08.18 5:00 下午

      现在是没有。
      我一会儿写一个用户投稿查询的接口好了。

      • BobLiu 2019.08.20 12:45 下午

        好的!感谢巨佬!!!

    • KAAAsS 2019.08.28 12:53 下午

      前一阵子有点忙,迟来很久的接口 QAQ
      接口地址在 user/contribute,get 请求,必选参数 id 为用户 id,page 和 pageCount 可选。需要注意的是返回数量 <=pageCount。文档稍后上线。

      • BobLiu 2019.08.28 4:04 下午

        啊啊啊谢谢巨佬!!!万分感谢!!!(๑╹◡╹)ノ"""

  14. 杀手阿一 2019.09.11 12:42 上午

    大佬您好,我试了一下您的 api ,真不错,所有的视频的都能放,但是有个问题,视频品质最多只能到 480p,我设置 80 的品质还是 480p,不知道是我哪里做错了?

    • KAAAsS 2019.09.11 4:57 下午

      1080p 属于会员清晰度,一般需要传入 access_key 鉴权才会解析。

  15. 滂薄 2019.10.30 10:56 下午

    大佬,文档中获取登录用公钥的 Python 示例,把 password = str (base64.urlsafe_b64encode (rsa.encrypt ((pwd_hash + pwd).encode ("utf-8"), key)))[2:-1],改为 password = base64.urlsafe_b64encode (rsa.encrypt ((pwd_hash + pwd).encode ("utf-8"), key)).decode () 可能会更好一些。
    base64.urlsafe_b64encode 返回的那个带 b 的字符串其实是 bytes 类型,使用 decode 内置方法可以直接转化为 str 类型而没有前面的 b

    • KAAAsS 2019.10.30 11:19 下午

      感谢提醒,不过这段代码其实并不是我写的(手动笑哭)
      你不提醒我还不知道原来它的转型那么硬核。

  16. Mr YouZi 2019.11.24 7:17 下午

    大佬,你 API 出问题了,我的程序调用 Bilibili 登录出现 "Error code: -105, message: 验证码错误.", 包括 AccessKey 生成器也是出现了这个问题

    • KAAAsS 2019.11.24 10:12 下午

      这个是因为调用频繁,稍候即可。生成器也是调用登录接口的。

  17. lakalaka 2019.11.30 10:59 下午

    我编程萌新,大佬,我通过你的 API 获取到了视频 URL, 那我该怎么去下载它呢

    • KAAAsS 2019.12.01 8:46 下午

      使用可以指定请求头的下载工具就行了,当然也可以用 python 的 request 库。
      如果是 dash 流,可能会分别下载到音频和视频,需要时候混流。

  18. ws02874137 2019.12.17 8:45 上午

    dalao, 我使用了 https://api.kaaass.net/biliapi/video/resolve?id=79295206 获取到了地址 打开是 403 也加了请求头,还是一样 403 是不是接口过期了?

    • KAAAsS 2019.12.17 4:46 下午

      我检查了下,接口还是可用的。请求头请参考 wiki,现在不是加 Referer 了,而是检查 Accept 和 UA。

      • ws02874137 2019.12.18 1:14 上午

        能否给一个简单的 php 示例,试了很多次还是 403

  19. Nworm 2019.12.25 7:09 下午

    关于验证码的问题
    https://passport.bilibili.com/captcha
    在请求 b 站登录 api 时,它会返回一个 cookies, 名称为 sid
    带着 sid 请求上面的链接,得到验证码图片,和名为 JSESSIONID 的 session
    最后带着上面的 cookies ,再加个请求参数 captcha(要参与 sign),值就是验证码
    就行了
    (如果 api 是 https://passport.bilibili.com/api/v2/oauth2/login 的话)

    • KAAAsS 2019.12.25 10:33 下午

      v2、v3 的接口我都有研究,验证码部分大致如是。
      captcha 需要带着 cookie 请求而不能直接用返回的数据很重要,这个您也有提到。
      biliapi 最早在观察到这个接口要求验证码的时候是有开发识别的,并且也短暂上线的一段时间。但是由于包括服务器负担的考虑等等,如今面对验证码已经是放弃治疗状态了(所以也没有做回传验证码的流程)。
      原定 biliapi v2 再上线验证码识别,或者是提供一套返回验证码图片的流程,但是由于我咕了,所以咕了,然后咕咕咕咕咕咕

  20. Tonwed 2020.01.10 5:45 下午

    用请求
    https://api.kaaass.net/biliapi/user/login?direct=true
    之后获得的参数再去请求
    https://passport.bilibili.com/api/v2/oauth2/login
    会返回
    {"code":-449,"message":"服务繁忙,请稍后再试","ts":1578649334}
    这个错误,之前还可以用的,现在等了两三天还是这样

    • KAAAsS 2020.01.10 6:13 下午

      检查了下,原因是 B 站开始检查 UA 了。具体只需要将 User-Agent 设置为 Bilibili Freedoooooom/MarkII。
      稍后我会更新下接口,接口增加返回 headers 来存放请求可能需要的头。

在此评论中不能使用 HTML 标签。