2019-02-15 18:14:27 +08:00
|
|
|
# Bilibili API JVM 调用库
|
|
|
|
该项目提供 Bilibili API 的 JVM 调用, 协议来自 Bilibili Android APP 的逆向工程以及截包分析.
|
2017-11-07 16:48:53 +08:00
|
|
|
|
2019-02-20 00:05:53 +08:00
|
|
|
# 登录和登出
|
2019-02-20 14:55:07 +08:00
|
|
|
https://passport.bilibili.com
|
|
|
|
|
2019-02-20 00:05:53 +08:00
|
|
|
登陆和登出均为异步方法, 需要在协程上下文中执行.
|
|
|
|
|
|
|
|
runBlocking {
|
|
|
|
BilibiliClient().run {
|
|
|
|
login(username, password)
|
|
|
|
logout()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
`login` 方法返回一个 `LoginResponse` 实例, 下次可以直接赋值到没有登陆的 `BilibiliClient` 实例中来恢复登陆状态.
|
|
|
|
|
|
|
|
BilibiliClient().apply {
|
|
|
|
this.loginResponse = loginResponse
|
|
|
|
}
|
|
|
|
|
|
|
|
`LoginResponse` 继承 `Serializable`, 可被序列化.
|
|
|
|
|
|
|
|
如果登录操作失败, 将抛出 `BilibiliApiException`(只要服务器返回的 code 不为 0 都将抛出异常), 通过以下代码获取服务器返回的 `code`
|
|
|
|
|
|
|
|
val code = bilibiliApiException.commonResponse.code
|
|
|
|
|
|
|
|
在登陆操作中, 如果服务器返回 `-105` 表明本次登陆需要验证码(通常是由于多次错误的登陆尝试导致的), 原始返回如下所示
|
|
|
|
|
|
|
|
{"ts":1550569982,"code":-105,"data":{"url":"https://passport.bilibili.com/register/verification.html?success=1>=b6e5b7fad7ecd37f465838689732e788&challenge=9a67afa4d42ede71a93aeaaa54a4b6fe&ct=1&hash=105af2e7cc6ea829c4a95205f2371dc5"},"message":"验证码错误!"}
|
|
|
|
|
2019-02-20 14:55:07 +08:00
|
|
|
自行访问 `commonResponse.data.obj.url.string` 将打开一个极验弹窗, 通过验证码后再次调用登陆接口:
|
2019-02-20 00:05:53 +08:00
|
|
|
|
|
|
|
login(username, password, challenge, secCode, validate)
|
|
|
|
|
|
|
|
`challenge` 为本次极验的唯一标识
|
|
|
|
|
|
|
|
`validate` 为极验返回值
|
|
|
|
|
|
|
|
`secCode` 为 `"$validate|jordan"`
|
|
|
|
|
|
|
|
注意, `BilibiliClient` 不能严格保证线程安全, 如果在登出的同时进行登录操作可能引发错误.
|
|
|
|
|
|
|
|
登陆后, 可以访问全部 API.
|
|
|
|
|
2019-02-20 18:24:47 +08:00
|
|
|
# message
|
|
|
|
https://message.bilibili.com
|
|
|
|
|
|
|
|
BilibiliClient().messageAPI
|
|
|
|
|
|
|
|
消息通知有关的接口.
|
|
|
|
|
2019-02-20 14:55:07 +08:00
|
|
|
# app
|
|
|
|
https://app.bilibili.com
|
|
|
|
|
2019-02-20 18:24:47 +08:00
|
|
|
BilibiliClient().appAPI
|
2019-02-20 14:55:07 +08:00
|
|
|
|
2019-02-21 00:09:25 +08:00
|
|
|
总站 API. 获取个人信息的完整示例如下:
|
2019-02-20 14:55:07 +08:00
|
|
|
|
|
|
|
runBlocking {
|
|
|
|
val bilibiliClient = BilibiliClient().apply {
|
|
|
|
login(username, password)
|
|
|
|
}
|
2019-02-20 18:24:47 +08:00
|
|
|
val myInfo = bilibiliClient.appAPI.myInfo().await()
|
2019-02-20 14:55:07 +08:00
|
|
|
println(myInfo)
|
|
|
|
}
|
|
|
|
|
2019-02-20 18:24:47 +08:00
|
|
|
# av
|
|
|
|
https://api.vc.bilibili.com
|
|
|
|
|
|
|
|
BilibiliClient().vcAPI
|
2019-02-20 00:05:53 +08:00
|
|
|
|
2019-02-21 00:09:25 +08:00
|
|
|
小视频.
|
|
|
|
|
|
|
|
# member
|
|
|
|
https://member.bilibili.com
|
|
|
|
|
|
|
|
BilibiliClient().memberAPI
|
|
|
|
|
|
|
|
创作中心.
|
2018-03-02 16:31:44 +08:00
|
|
|
|
2017-11-07 16:48:53 +08:00
|
|
|
# License
|
|
|
|
GPL V3
|