bilibili-api/README.md
2019-02-20 00:05:53 +08:00

1.7 KiB

Bilibili API JVM 调用库

该项目提供 Bilibili API 的 JVM 调用, 协议来自 Bilibili Android APP 的逆向工程以及截包分析.

登录和登出

登陆和登出均为异步方法, 需要在协程上下文中执行.

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&gt=b6e5b7fad7ecd37f465838689732e788&challenge=9a67afa4d42ede71a93aeaaa54a4b6fe&ct=1&hash=105af2e7cc6ea829c4a95205f2371dc5"},"message":"验证码错误!"}

自行访问 data.url 将打开一个极验弹窗, 通过验证码后再次调用登陆接口:

login(username, password, challenge, secCode, validate)

challenge 为本次极验的唯一标识

validate 为极验返回值

secCode"$validate|jordan"

注意, BilibiliClient 不能严格保证线程安全, 如果在登出的同时进行登录操作可能引发错误.

登陆后, 可以访问全部 API.

主站

//TODO

直播站

//TODO

License

GPL V3