大家好这里是 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
大佬 api 文档 404?
正确链接已经更新~
大佬,似乎 appkey 在视频链接获取时用不了,报
{
"code": 10003,
"result": "error",
"message": "Invalid appkey parameter."
}
旧 ak、sk 对过期了,稍后我会先部署个临时版本。
一直说着更新(去年八月)结果就鸽了 23333
非常感谢,修的太快了
但关于视频链接的 api 好像还有问题,
普通视频没有问题,但如果尝试番剧就会报
"code": 10004,
"message": "Video is hidden."
我是使用大会员的 access_key, 也试过转 cookie 后用浏览器登录,是可以的
番剧解析将会独立至 video/resolveBangumi,目前这个解析已经是两年前的旧代码了,已经脱节太远了 Orz
另外,刚刚已经部署了支持目前所有清晰度的 video/resolve,详细变化会在文档中说明。
如果不介意的话,可以看一下这个脚本的 1809 – 1813
https://greasyfork.org/zh-CN/scripts/372516-bilibili-merged-flv-mp4-ass-enhance
但不太清楚 cid 怎么获得,之前你的 api 返回的 cid 倒是可以用,我试了试,似乎十分神奇地不用带 cookie, 就可以获得正确的视频地址
非会员限定视频当然不用 cookie 就能解析,但是大会员清晰度或相关视频的解析是需要登录凭据的。
大佬,这个 API 还能用么?随便试了一下视频解析的 api,400 无法解析
400 Bad Request
Cannot resolve this video, code -400, message: 请求错误.
似由接口变动引起。目前已经上线了备用接口,一会儿分析完成之后会上线正式接口。
P.S. 已修复,是我沙雕了。
想问一下大神,API doc 里的 utils API 是不是无法使用了,就是自动生成 B 站 API 的 URL 包括 sign 之类的。用它生成的 URL 无法访问,不知道是不是我使用方法错了
另外 accessKey 和 sign 是同一类东西么,感觉自己有点混淆了
只要 BiliAPI 其它接口在正常运行,那 urlgene 就应该是正常的。
accessKey 是 ak、sk 对中需要显式放在请求参数里的,用于标记这个请求的 app,而 sign 是通过请求参数和 ak、sk 进行计算得到的,用于校验请求。
谢谢大神解释,试了一下 BiliAPI 里的 Bilibili 登录 (access_key) API,似乎也无法使用了,填好参数发送请求后显示 Invalid URL。不知道是不是我使用错误,还是它和 utils API 确实一同失效了?
使用 utils API 的请求返回结果,会显示 403 access denied
我看了一眼,API 运行应该没问题,测试了下也能正确返回。推测可能还是参数有误?具体使用还请参阅:http://docs.kaaass.net/showdoc/web/#/2?page_id=3。
如果还是不行,可以发邮件给我:admin@kaaass.net。
想问一下大神,我刚刚好像调用多了被 503 了,大概好久能够解封啊 QAQ
这个其实是 B 站接口在要求验证码,具体时间不明……
v2 接口会提供用户提交验证码的方法,但是对 v1 来说,目前没办法,毕竟写这个接口的时候是不要求验证码的。
大佬,你这个工程有没有 GitHub 啊,想学习一下这个。
Web 版暂未开源,但坑里的 v2 有计划开源
Python 版在重构,目前绝赞拖坑中 2333:https://gitee.com/kaaass/biliapi_python
大佬真的又可爱ớ ₃ờ,又巨呀!
抱紧大腿
AccessKey 生成器 好像不行了获取不了?
我刚刚测试了下是可以用的。
由于调用的是 v1 的 biliapi,于是错误次数过多或访问频繁就会要求验证码。
说声抱歉啊,今天调用登录 api 过多导致后面报错用不了
还有,博主是否考虑提供一个专门 “登录” 的库,只调用博主给的 sign 加密的 api,其他 getKey 和 login 由大家在各自的本地端执行(与 b 站 api 交互),这样就避免使用博主提供的 “登录” 的 api 调用过多导致 ip 被封需要验证码的问题。
博主,这边反映一个问题,https://api.kaaass.net/biliapi/urlgene,这个 api 因为通过 get 方式请求,对特殊字符会进行 URL 转码,导致你后台进行计算 sign 时与我传入的实际参数不一样,实际导致错误。例子就是,我打算进行登录时,hash + 密码的 rsa 加密后的字符串含有特殊字符 "/"、"=",这样我这边就登录不来
能不能提供一个 post 的?
还有,感谢博主大神,帮了大忙
其实 biliapi 一直是打算提供其他语言的 sdk 的。16 年的时候我就开始着手写 biliapi 的 python 和 java 版本,但是由于各种原因(懒),并没有写完。去年开始重构 biliapi_python,但是仍然没有写完(还是懒)。目前进度可以在 Gitee 上看到:https://gitee.com/kaaass/biliapi_python
关于 POST 的接口,可以使用 /urlgenePost,将所有参数转为使用 Post body 发送即可。
多谢博主,但是我发现我没必要多此一举,b 站仅仅对登录进行限制,刷新 token 却没有限制,登录仅仅只是一次性的,我还是偷懒用博主的登录接口吧~
就是还有一个疑问,不知道刷新 token 时,cookie 有没有跟着一起刷
如果指的是 sso 接口获得的 cookie 的话,那个按照我以前的开发经验来看似乎失效的很频繁。
建议每次一系列操作前调用诸如个人空间接口来检测是否过期,或者失败时直接调用 sso。
ok 多谢博主
博主大佬,我是个新手 折腾了半天到了调用您的 https://api.kaaass.net/biliapi/urlgene 这一步了 返回的 url 访问提示无法校验 sign 又或者是访问被拒… 用了上面您提到的 urlgenePost 好像也无法解决,这是什么问题呢…
Map<String,String> map = new HashMap<>();
map.put("host", "http://api.bilibili.cn/friend/fans");
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", map);
返回
{"host":"http://api.bilibili.cn/friend/fans","url":"http://api.bilibili.cn/friend/fans?access_key=452641319aad8c28b091be**********&appkey=1d8b6e**********&page=1&pagesize=10&ts=1564694187&sign=5853a36ad9e6b130bfef037d276227ee","ts":1564694187,"status":"OK"}
访问 url 返回
{"code":-403,"message":"Access denied.","ts":1564694340}
biliapi 接口状态我看了下是没问题的。
不过这个接口 api.bilibili.cn/friend/fans 我不是很清楚,无论怎么拼接也无法返回正确的内容。看了下接口文档,这个接口貌似是很久以前的接口了。猜测可能这个接口已经过时了?
另外,目前粉丝列表在 app 是采用 hybrid 的形式,所以相关接口也是 web 的。
谢谢博主大佬,我试了下 hybrid 确实可以返回 但是没有内容
{"code":0,"list":[],"results":0,"pages":0}
我想应该是参数定义也变了,我现在也翻了很久也只能翻到这个 fans 的 api 文档,这些新 api 有没有文档之类的呢…
可惜的是,目前 B 站接口并没有一份公开的完善的文档。若干年前我尝试收集一份,但是由于工作量实在是大,所以也没有完成。如今接口已有诸多变化,接口大概只能现用现找了。
"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
需要特殊的请求头。详细可以参考文档 “返回地址相关” 节:http://docs.kaaass.net/showdoc/web/#/2?page_id=6。
谢谢,问题解决了,用了 Postman 中的参数就可以了。
请问,登录请求返回了 <h1>503 Service Unavailable</h1><p>Error code: -105, message: 验证码错误.</p><hr><i>KAAAsS BiliAPI v1.0</i > 怎么办?
短时内请求(主要是登录失败)过多…… 对于 BiliAPI 的 v1 接口来说,方法就是稍候再试。
曾经有个 patch 是允许附上 direct=true 来直接返回请求地址的,可以由调用方本地请求,但是后来服务器迁移代码版本回溯了。一会儿我试试能不能找到,或者直接写一个。
如果可以做成调用方本地请求那更好了,另外问一下 "使用 rsa 加密 hash 接上明文密码" 意思是 用取回的 public key 使用 rsc 加密 hash 然后后面再接上明文密码吗?
先确认下,你现在使用的登录方式是 access key 生成器的 encrypted=true 么?如果是的话,那就是调用 getKey,在 passwd 参数传入 hash + 明文密码后使用公钥加密的结果。如果不是的话,就没有必要这样了。
请求了 https://account.bilibili.com/api/login/v2,返回 code-400,然后等了三个小时了还是接口用不了,新接口弄好了后告诉我一下哦,祝大佬每天生活愉快~
接口已经更新,现在请求 https://api.kaaass.net/biliapi/user/login?direct=true,其它不变即可。
{"code":-3,"message":"API sign invalid","ts":1565271732}
用的是请求 biliapi/user/login?direct=true 返回的,但是好像 Sign 值不对?
请问有获取用户粉丝数这种的接口吗
刚刚写了个空间信息接口,地址 user/space。需要 GET 传入参数 id,即用户 uid。粉丝数在 data-card 那一块。文档稍后上线。
谢谢 dalao
巨佬,想问个问题!如果我想统计一个账户 (提供 mid) 的视频总播放量和总时长,我应该用什么接口呢 QAQ,文档里翻了一下只找到获取用户空间信息,但是似乎只有前 20 个视频的信息 (〃’▽’〃)
现在是没有。
我一会儿写一个用户投稿查询的接口好了。
好的!感谢巨佬!!!
前一阵子有点忙,迟来很久的接口 QAQ
接口地址在 user/contribute,get 请求,必选参数 id 为用户 id,page 和 pageCount 可选。需要注意的是返回数量 <=pageCount。文档稍后上线。
啊啊啊谢谢巨佬!!!万分感谢!!!(๑╹◡╹)ノ"""
大佬您好,我试了一下您的 api ,真不错,所有的视频的都能放,但是有个问题,视频品质最多只能到 480p,我设置 80 的品质还是 480p,不知道是我哪里做错了?
1080p 属于会员清晰度,一般需要传入 access_key 鉴权才会解析。
大佬,文档中获取登录用公钥的 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
感谢提醒,不过这段代码其实并不是我写的(手动笑哭)
你不提醒我还不知道原来它的转型那么硬核。
大佬,你 API 出问题了,我的程序调用 Bilibili 登录出现 "Error code: -105, message: 验证码错误.", 包括 AccessKey 生成器也是出现了这个问题
这个是因为调用频繁,稍候即可。生成器也是调用登录接口的。
我编程萌新,大佬,我通过你的 API 获取到了视频 URL, 那我该怎么去下载它呢
使用可以指定请求头的下载工具就行了,当然也可以用 python 的 request 库。
如果是 dash 流,可能会分别下载到音频和视频,需要时候混流。
dalao, 我使用了 https://api.kaaass.net/biliapi/video/resolve?id=79295206 获取到了地址 打开是 403 也加了请求头,还是一样 403 是不是接口过期了?
我检查了下,接口还是可用的。请求头请参考 wiki,现在不是加 Referer 了,而是检查 Accept 和 UA。
能否给一个简单的 php 示例,试了很多次还是 403
关于验证码的问题
https://passport.bilibili.com/captcha
在请求 b 站登录 api 时,它会返回一个 cookies, 名称为 sid
带着 sid 请求上面的链接,得到验证码图片,和名为 JSESSIONID 的 session
最后带着上面的 cookies ,再加个请求参数 captcha(要参与 sign),值就是验证码
就行了
(如果 api 是 https://passport.bilibili.com/api/v2/oauth2/login 的话)
v2、v3 的接口我都有研究,验证码部分大致如是。
captcha 需要带着 cookie 请求而不能直接用返回的数据很重要,这个您也有提到。
biliapi 最早在观察到这个接口要求验证码的时候是有开发识别的,并且也短暂上线的一段时间。但是由于包括服务器负担的考虑等等,如今面对验证码已经是放弃治疗状态了(所以也没有做回传验证码的流程)。
原定 biliapi v2 再上线验证码识别,或者是提供一套返回验证码图片的流程,但是由于我咕了,所以咕了,然后咕咕咕咕咕咕
用请求
https://api.kaaass.net/biliapi/user/login?direct=true
之后获得的参数再去请求
https://passport.bilibili.com/api/v2/oauth2/login
会返回
{"code":-449,"message":"服务繁忙,请稍后再试","ts":1578649334}
这个错误,之前还可以用的,现在等了两三天还是这样
检查了下,原因是 B 站开始检查 UA 了。具体只需要将 User-Agent 设置为 Bilibili Freedoooooom/MarkII。
稍后我会更新下接口,接口增加返回 headers 来存放请求可能需要的头。