大家好这里是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来存放请求可能需要的头。