mirror of
https://github.com/czp3009/bilibili-api.git
synced 2025-02-19 20:50:28 +08:00
修正数据类型, 添加示例
This commit is contained in:
parent
f8f280e24d
commit
9dd36cff2e
45
README.md
45
README.md
@ -272,7 +272,7 @@ val childReply = bilibiliClient.mainAPI.childReply(oid = 16622855, root = 140560
|
||||
|
||||
假如一个人在一个评论的子评论里发布了一个评论并且 at 了其他人发的评论, 那么其 `parentId` 是他所 at 的评论, 其 `rootId` 为所在的根评论.
|
||||
|
||||
如果不满足对应的层级逻辑关系(例如本身为根评论), `parentId` 与 `rootId` 可能为 0.
|
||||
如果不满足对应的层级逻辑关系(例如本身为根评论), `parentId` 或 `rootId` 可能为 0.
|
||||
|
||||
用额外的 `minId` 参数来指定返回的起始子楼层.
|
||||
|
||||
@ -290,6 +290,49 @@ val chatList = bilibiliClient.mainAPI.chatList(oid = 34175504, root = 1136310360
|
||||
|
||||
番剧下面的评论用一样的方式获取.
|
||||
|
||||
以下给出一个获取一个视频下的全部评论(包括子评论)的示例
|
||||
|
||||
```kotlin
|
||||
fun printAllReplies() {
|
||||
val aid = 44651998L
|
||||
|
||||
val start = System.currentTimeMillis()
|
||||
|
||||
val bilibiliClient = BilibiliClient()
|
||||
runBlocking {
|
||||
val rootReplies = LinkedList<Reply.Data.Reply>()
|
||||
val childReplies = HashMap<Long, Deferred<ChildReply>>()
|
||||
var next: Long? = null
|
||||
while (true) {
|
||||
val reply = bilibiliClient.mainAPI.reply(oid = aid, next = next).await()
|
||||
reply.data.replies.also {
|
||||
rootReplies.addAll(it)
|
||||
}.asSequence().filterNot {
|
||||
it.rcount == 0 //去除没有子评论的根评论
|
||||
}.forEach {
|
||||
childReplies[it.rpid] = bilibiliClient.mainAPI.childReply(oid = aid, root = it.rpid, size = Int.MAX_VALUE)
|
||||
}
|
||||
//如果已经是最后一页
|
||||
if (reply.data.cursor.isEnd) break
|
||||
next = reply.data.cursor.next
|
||||
}
|
||||
|
||||
//输出
|
||||
rootReplies.forEach { rootReply ->
|
||||
println(rootReply.content.message)
|
||||
val childReply = childReplies[rootReply.rpid]
|
||||
childReply?.await()?.data?.root?.replies?.forEach {
|
||||
println("└──${it.content.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val end = System.currentTimeMillis()
|
||||
|
||||
println("Done in ${end - start} ms")
|
||||
}
|
||||
```
|
||||
|
||||
## 获得一个视频的弹幕
|
||||
看评论自然不够刺激, 我们想看到弹幕!
|
||||
|
||||
|
@ -30,7 +30,7 @@ data class Mine(
|
||||
@SerializedName("level")
|
||||
var level: Int, // 5
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 2866663
|
||||
var mid: Long, // 2866663
|
||||
@SerializedName("name")
|
||||
var name: String, // hyx5020
|
||||
@SerializedName("new_followers")
|
||||
|
@ -26,7 +26,7 @@ data class MyInfo(
|
||||
@SerializedName("level")
|
||||
var level: Int, // 4
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 20293030
|
||||
var mid: Long, // 20293030
|
||||
@SerializedName("name")
|
||||
var name: String, // czp3009
|
||||
@SerializedName("official")
|
||||
|
@ -96,7 +96,7 @@ data class View(
|
||||
@SerializedName("face")
|
||||
var face: String, // http://i1.hdslb.com/bfs/face/9a586d1ef659b322af150c925976a134ad046a74.jpg
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 393484294
|
||||
var mid: Long, // 393484294
|
||||
@SerializedName("name")
|
||||
var name: String // 娱乐酱鸭
|
||||
)
|
||||
@ -234,7 +234,7 @@ data class View(
|
||||
@SerializedName("face")
|
||||
var face: String, // http://i1.hdslb.com/bfs/face/9a586d1ef659b322af150c925976a134ad046a74.jpg
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 393484294
|
||||
var mid: Long, // 393484294
|
||||
@SerializedName("name")
|
||||
var name: String, // 娱乐酱鸭
|
||||
@SerializedName("official_verify")
|
||||
@ -314,7 +314,7 @@ data class View(
|
||||
@SerializedName("face")
|
||||
var face: String, // http://static.hdslb.com/images/member/noface.gif
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 334512441
|
||||
var mid: Long, // 334512441
|
||||
@SerializedName("name")
|
||||
var name: String // 达岸电影2018
|
||||
)
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.hiczp.bilibili.api.main.model
|
||||
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class BangumiPage(
|
||||
@ -20,7 +21,7 @@ data class BangumiPage(
|
||||
@SerializedName("attr")
|
||||
var attr: Attr,
|
||||
@SerializedName("headers")
|
||||
var headers: List<Any>,
|
||||
var headers: List<JsonElement>,
|
||||
@SerializedName("items")
|
||||
var items: List<Item>,
|
||||
@SerializedName("module_id")
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.hiczp.bilibili.api.main.model
|
||||
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class ChatList(
|
||||
@ -50,9 +51,9 @@ data class ChatList(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 161745277
|
||||
var mid: Long, // 161745277
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 34175504
|
||||
var oid: Long, // 34175504
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 1136656601
|
||||
@SerializedName("parent_str")
|
||||
@ -60,7 +61,7 @@ data class ChatList(
|
||||
@SerializedName("rcount")
|
||||
var rcount: Int, // 0
|
||||
@SerializedName("replies")
|
||||
var replies: Any?, // null
|
||||
var replies: JsonElement?, // null
|
||||
@SerializedName("root")
|
||||
var root: Int, // 1136310360
|
||||
@SerializedName("root_str")
|
||||
@ -89,7 +90,7 @@ data class ChatList(
|
||||
@SerializedName("avatar")
|
||||
var avatar: String, // http://static.hdslb.com/images/member/noface.gif
|
||||
@SerializedName("fans_detail")
|
||||
var fansDetail: Any?, // null
|
||||
var fansDetail: JsonElement?, // null
|
||||
@SerializedName("following")
|
||||
var following: Int, // 0
|
||||
@SerializedName("level_info")
|
||||
@ -115,7 +116,7 @@ data class ChatList(
|
||||
) {
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 0
|
||||
var expire: Long, // 0
|
||||
@SerializedName("image")
|
||||
var image: String,
|
||||
@SerializedName("name")
|
||||
@ -177,7 +178,7 @@ data class ChatList(
|
||||
@SerializedName("device")
|
||||
var device: String, // phone
|
||||
@SerializedName("members")
|
||||
var members: List<Any>,
|
||||
var members: List<JsonElement>,
|
||||
@SerializedName("message")
|
||||
var message: String, // 回复 @***全副武装 :耶酥是佛教徒
|
||||
@SerializedName("plat")
|
||||
|
@ -84,11 +84,11 @@ data class ChildReply(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 14363383
|
||||
var mid: Long, // 14363383
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 16622855
|
||||
var oid: Long, // 16622855
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 0
|
||||
var parent: Long, // 0
|
||||
@SerializedName("parent_str")
|
||||
var parentStr: String, // 0
|
||||
@SerializedName("rcount")
|
||||
@ -96,7 +96,7 @@ data class ChildReply(
|
||||
@SerializedName("replies")
|
||||
var replies: List<Reply>,
|
||||
@SerializedName("root")
|
||||
var root: Int, // 0
|
||||
var root: Long, // 0
|
||||
@SerializedName("root_str")
|
||||
var rootStr: String, // 0
|
||||
@SerializedName("rpid")
|
||||
@ -147,19 +147,19 @@ data class ChildReply(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 14363383
|
||||
var mid: Long, // 14363383
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 16622855
|
||||
var oid: Long, // 16622855
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 1405602348
|
||||
var parent: Long, // 1405602348
|
||||
@SerializedName("parent_str")
|
||||
var parentStr: String, // 1405602348
|
||||
@SerializedName("rcount")
|
||||
var rcount: Int, // 0
|
||||
@SerializedName("replies")
|
||||
var replies: List<JsonElement>,
|
||||
var replies: List<JsonElement>, // []
|
||||
@SerializedName("root")
|
||||
var root: Int, // 1405602348
|
||||
var root: Long, // 1405602348
|
||||
@SerializedName("root_str")
|
||||
var rootStr: String, // 1405602348
|
||||
@SerializedName("rpid")
|
||||
@ -223,7 +223,7 @@ data class ChildReply(
|
||||
) {
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 0
|
||||
var expire: Long, // 0
|
||||
@SerializedName("image")
|
||||
var image: String,
|
||||
@SerializedName("name")
|
||||
@ -341,7 +341,7 @@ data class ChildReply(
|
||||
) {
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 0
|
||||
var expire: Long, // 0
|
||||
@SerializedName("image")
|
||||
var image: String,
|
||||
@SerializedName("name")
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.hiczp.bilibili.api.main.model
|
||||
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class MyBangumiNews(
|
||||
@ -12,7 +13,7 @@ data class MyBangumiNews(
|
||||
) {
|
||||
data class Result(
|
||||
@SerializedName("delay")
|
||||
var delay: List<Any>,
|
||||
var delay: List<JsonElement>,
|
||||
@SerializedName("follow")
|
||||
var follow: Int, // 34
|
||||
@SerializedName("follows")
|
||||
|
@ -74,19 +74,25 @@ data class Reply(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 14028833
|
||||
var mid: Long, // 14028833
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 44012857
|
||||
var oid: Long, // 44012857
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 0
|
||||
var parent: Long, // 0
|
||||
@SerializedName("parent_str")
|
||||
var parentStr: String, // 0
|
||||
/**
|
||||
* 评论数量
|
||||
*/
|
||||
@SerializedName("rcount")
|
||||
var rcount: Int, // 1
|
||||
/**
|
||||
* 如果 replies 为 null 说明没有评论
|
||||
*/
|
||||
@SerializedName("replies")
|
||||
var replies: List<Reply>,
|
||||
var replies: List<Reply>?,
|
||||
@SerializedName("root")
|
||||
var root: Int, // 0
|
||||
var root: Long, // 0
|
||||
@SerializedName("root_str")
|
||||
var rootStr: String, // 0
|
||||
@SerializedName("rpid")
|
||||
@ -155,11 +161,11 @@ data class Reply(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 14674816
|
||||
var mid: Long, // 14674816
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 44012857
|
||||
var oid: Long, // 44012857
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 1405424731
|
||||
var parent: Long, // 1405424731
|
||||
@SerializedName("parent_str")
|
||||
var parentStr: String, // 1405424731
|
||||
@SerializedName("rcount")
|
||||
@ -167,7 +173,7 @@ data class Reply(
|
||||
@SerializedName("replies")
|
||||
var replies: List<JsonElement>,
|
||||
@SerializedName("root")
|
||||
var root: Int, // 1405424731
|
||||
var root: Long, // 1405424731
|
||||
@SerializedName("root_str")
|
||||
var rootStr: String, // 1405424731
|
||||
@SerializedName("rpid")
|
||||
@ -240,7 +246,7 @@ data class Reply(
|
||||
) {
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 0
|
||||
var expire: Long, // 0
|
||||
@SerializedName("image")
|
||||
var image: String,
|
||||
@SerializedName("name")
|
||||
@ -331,7 +337,7 @@ data class Reply(
|
||||
) {
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 0
|
||||
var expire: Long, // 0
|
||||
@SerializedName("image")
|
||||
var image: String,
|
||||
@SerializedName("name")
|
||||
@ -392,7 +398,7 @@ data class Reply(
|
||||
|
||||
data class Upper(
|
||||
@SerializedName("mid")
|
||||
var mid: Int // 11248627
|
||||
var mid: Long // 11248627
|
||||
)
|
||||
|
||||
data class Config(
|
||||
@ -418,7 +424,7 @@ data class Reply(
|
||||
@SerializedName("mode")
|
||||
var mode: Int, // 1
|
||||
@SerializedName("next")
|
||||
var next: Int, // 295
|
||||
var next: Long, // 295
|
||||
@SerializedName("prev")
|
||||
var prev: Int, // 314
|
||||
@SerializedName("support_mode")
|
||||
@ -453,11 +459,11 @@ data class Reply(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 7937795
|
||||
var mid: Long, // 7937795
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 44012857
|
||||
var oid: Long, // 44012857
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 0
|
||||
var parent: Long, // 0
|
||||
@SerializedName("parent_str")
|
||||
var parentStr: String, // 0
|
||||
@SerializedName("rcount")
|
||||
@ -465,7 +471,7 @@ data class Reply(
|
||||
@SerializedName("replies")
|
||||
var replies: List<Reply>,
|
||||
@SerializedName("root")
|
||||
var root: Int, // 0
|
||||
var root: Long, // 0
|
||||
@SerializedName("root_str")
|
||||
var rootStr: String, // 0
|
||||
@SerializedName("rpid")
|
||||
@ -531,7 +537,7 @@ data class Reply(
|
||||
) {
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 1565150481
|
||||
var expire: Long, // 1565150481
|
||||
@SerializedName("image")
|
||||
var image: String, // http://i2.hdslb.com/bfs/face/5ac24fa22208f48126bfacb42901e932946f6aa3.png
|
||||
@SerializedName("name")
|
||||
@ -643,11 +649,11 @@ data class Reply(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 27407505
|
||||
var mid: Long, // 27407505
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 44012857
|
||||
var oid: Long, // 44012857
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 1400028639
|
||||
var parent: Long, // 1400028639
|
||||
@SerializedName("parent_str")
|
||||
var parentStr: String, // 1400028639
|
||||
@SerializedName("rcount")
|
||||
@ -655,7 +661,7 @@ data class Reply(
|
||||
@SerializedName("replies")
|
||||
var replies: List<JsonElement>,
|
||||
@SerializedName("root")
|
||||
var root: Int, // 1400028639
|
||||
var root: Long, // 1400028639
|
||||
@SerializedName("root_str")
|
||||
var rootStr: String, // 1400028639
|
||||
@SerializedName("rpid")
|
||||
@ -738,7 +744,7 @@ data class Reply(
|
||||
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 1551514981
|
||||
var expire: Long, // 1551514981
|
||||
@SerializedName("image")
|
||||
var image: String, // http://i0.hdslb.com/bfs/face/ec152705d82f96381f1150058d55e057396f0576.png
|
||||
@SerializedName("name")
|
||||
@ -824,11 +830,11 @@ data class Reply(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 11248627
|
||||
var mid: Long, // 11248627
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 44012857
|
||||
var oid: Long, // 44012857
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 0
|
||||
var parent: Long, // 0
|
||||
@SerializedName("parent_str")
|
||||
var parentStr: String, // 0
|
||||
@SerializedName("rcount")
|
||||
@ -836,7 +842,7 @@ data class Reply(
|
||||
@SerializedName("replies")
|
||||
var replies: List<Reply>,
|
||||
@SerializedName("root")
|
||||
var root: Int, // 0
|
||||
var root: Long, // 0
|
||||
@SerializedName("root_str")
|
||||
var rootStr: String, // 0
|
||||
@SerializedName("rpid")
|
||||
@ -887,11 +893,11 @@ data class Reply(
|
||||
@SerializedName("member")
|
||||
var member: Member,
|
||||
@SerializedName("mid")
|
||||
var mid: Int, // 85049857
|
||||
var mid: Long, // 85049857
|
||||
@SerializedName("oid")
|
||||
var oid: Int, // 44012857
|
||||
var oid: Long, // 44012857
|
||||
@SerializedName("parent")
|
||||
var parent: Int, // 1401606362
|
||||
var parent: Long, // 1401606362
|
||||
@SerializedName("parent_str")
|
||||
var parentStr: String, // 1401606362
|
||||
@SerializedName("rcount")
|
||||
@ -899,7 +905,7 @@ data class Reply(
|
||||
@SerializedName("replies")
|
||||
var replies: List<JsonElement>,
|
||||
@SerializedName("root")
|
||||
var root: Int, // 1401074923
|
||||
var root: Long, // 1401074923
|
||||
@SerializedName("root_str")
|
||||
var rootStr: String, // 1401074923
|
||||
@SerializedName("rpid")
|
||||
@ -945,7 +951,7 @@ data class Reply(
|
||||
) {
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 0
|
||||
var expire: Long, // 0
|
||||
@SerializedName("image")
|
||||
var image: String,
|
||||
@SerializedName("name")
|
||||
@ -1048,7 +1054,7 @@ data class Reply(
|
||||
) {
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 0
|
||||
var expire: Long, // 0
|
||||
@SerializedName("image")
|
||||
var image: String,
|
||||
@SerializedName("name")
|
||||
@ -1200,7 +1206,7 @@ data class Reply(
|
||||
|
||||
data class Pendant(
|
||||
@SerializedName("expire")
|
||||
var expire: Int, // 1570032000
|
||||
var expire: Long, // 1570032000
|
||||
@SerializedName("image")
|
||||
var image: String, // http://i1.hdslb.com/bfs/face/14738b92760b90675d4bf35dd059b0a666113bae.png
|
||||
@SerializedName("name")
|
||||
|
@ -1,7 +1,13 @@
|
||||
package com.hiczp.bilibili.api.test
|
||||
|
||||
import com.hiczp.bilibili.api.BilibiliClient
|
||||
import com.hiczp.bilibili.api.main.model.ChildReply
|
||||
import com.hiczp.bilibili.api.main.model.Reply
|
||||
import kotlinx.coroutines.Deferred
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.util.*
|
||||
import kotlin.collections.HashMap
|
||||
|
||||
class FetchReplyTest {
|
||||
@Test
|
||||
@ -17,4 +23,45 @@ class FetchReplyTest {
|
||||
noLoginBilibiliClient.mainAPI.childReply(oid = 16622855, root = 1405602348).await()
|
||||
}
|
||||
}
|
||||
|
||||
//打印一个视频下全部的评论
|
||||
@Test
|
||||
fun printAllReplies() {
|
||||
val aid = 44651998L
|
||||
|
||||
val start = System.currentTimeMillis()
|
||||
|
||||
val bilibiliClient = BilibiliClient()
|
||||
runBlocking {
|
||||
val rootReplies = LinkedList<Reply.Data.Reply>()
|
||||
val childReplies = HashMap<Long, Deferred<ChildReply>>()
|
||||
var next: Long? = null
|
||||
while (true) {
|
||||
val reply = bilibiliClient.mainAPI.reply(oid = aid, next = next).await()
|
||||
reply.data.replies.also {
|
||||
rootReplies.addAll(it)
|
||||
}.asSequence().filterNot {
|
||||
it.rcount == 0 //去除没有子评论的根评论
|
||||
}.forEach {
|
||||
childReplies[it.rpid] = bilibiliClient.mainAPI.childReply(oid = aid, root = it.rpid, size = Int.MAX_VALUE)
|
||||
}
|
||||
//如果已经是最后一页
|
||||
if (reply.data.cursor.isEnd) break
|
||||
next = reply.data.cursor.next
|
||||
}
|
||||
|
||||
//输出
|
||||
rootReplies.forEach { rootReply ->
|
||||
println(rootReply.content.message)
|
||||
val childReply = childReplies[rootReply.rpid]
|
||||
childReply?.await()?.data?.root?.replies?.forEach {
|
||||
println("└──${it.content.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val end = System.currentTimeMillis()
|
||||
|
||||
println("Done in ${end - start} ms")
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user