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. 没有图片

评论

  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 标签。