mirror of
https://github.com/czp3009/bilibili-api.git
synced 2025-02-19 20:50:28 +08:00
实现评论发送
This commit is contained in:
parent
e196b5b141
commit
553db03d4d
@ -1,6 +1,7 @@
|
||||
package com.hiczp.bilibili.api.main
|
||||
|
||||
import com.hiczp.bilibili.api.main.model.*
|
||||
import com.hiczp.bilibili.api.retrofit.Header
|
||||
import kotlinx.coroutines.Deferred
|
||||
import retrofit2.http.*
|
||||
|
||||
@ -152,6 +153,7 @@ interface MainAPI {
|
||||
*/
|
||||
@POST("/x/v2/reply/add")
|
||||
@FormUrlEncoded
|
||||
@Headers(Header.FORCE_FORM_BODY)
|
||||
fun sendReply(
|
||||
@Field("from") from: Int? = null,
|
||||
@Field("message") message: String,
|
||||
|
@ -20,6 +20,10 @@ object Header {
|
||||
const val ACCEPT = "Accept"
|
||||
const val ACCEPT_LANGUAGE = "Accept-Language"
|
||||
const val ACCEPT_ENCODING = "Accept-Encoding"
|
||||
|
||||
//强制将公共参数加到 FormBody 上
|
||||
const val FORCE_FORM_BODY_NAME = "Force-Form-Body"
|
||||
const val FORCE_FORM_BODY = "$FORCE_FORM_BODY_NAME: true"
|
||||
}
|
||||
|
||||
object Param {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.hiczp.bilibili.api.retrofit.interceptor
|
||||
|
||||
import com.hiczp.bilibili.api.retrofit.Header
|
||||
import com.hiczp.bilibili.api.retrofit.ParamType
|
||||
import com.hiczp.bilibili.api.retrofit.addAllEncoded
|
||||
import com.hiczp.bilibili.api.retrofit.forEachNonNull
|
||||
@ -17,53 +18,62 @@ private val logger = KotlinLogging.logger {}
|
||||
* @param additionParams ParamName to ParamValueExpression
|
||||
*/
|
||||
class CommonParamInterceptor(
|
||||
private val paramType: ParamType,
|
||||
private var paramType: ParamType,
|
||||
private vararg val additionParams: Pair<String, () -> String?>
|
||||
) : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
var request = chain.request()
|
||||
val body = request.body()
|
||||
val request = chain.request()
|
||||
var headers = request.headers()
|
||||
var httpUrl = request.url()
|
||||
var body = request.body()
|
||||
|
||||
request = when {
|
||||
//是否强制加到 FormBody
|
||||
if (headers[Header.FORCE_FORM_BODY_NAME] != null) {
|
||||
paramType = ParamType.FORM_URL_ENCODED
|
||||
headers = headers.newBuilder().removeAll(Header.FORCE_FORM_BODY_NAME).build()
|
||||
}
|
||||
|
||||
when {
|
||||
//如果欲添加参数的位置为 Query 则直接添加, paramType 为 FORM_URL_ENCODED 则继续下面的判断
|
||||
paramType == ParamType.QUERY -> {
|
||||
val httpUrl = request.url().newBuilder().apply {
|
||||
httpUrl = request.url().newBuilder().apply {
|
||||
additionParams.forEachNonNull { name, value ->
|
||||
addQueryParameter(name, value)
|
||||
}
|
||||
}.build()
|
||||
request.newBuilder().url(httpUrl).build()
|
||||
}
|
||||
|
||||
//BODY 不存在或者是空的
|
||||
body == null || body.contentLength() == 0L -> {
|
||||
val formBody = FormBody.Builder().apply {
|
||||
body = FormBody.Builder().apply {
|
||||
additionParams.forEachNonNull { name, value ->
|
||||
add(name, value)
|
||||
}
|
||||
}.build()
|
||||
request.newBuilder().method(request.method(), formBody).build()
|
||||
}
|
||||
|
||||
//只要 BODY 为 FormBody, 那么里面一定有内容
|
||||
body is FormBody -> {
|
||||
val formBody = FormBody.Builder().apply {
|
||||
addAllEncoded(body)
|
||||
body = FormBody.Builder().addAllEncoded(body).apply {
|
||||
additionParams.forEachNonNull { name, value ->
|
||||
add(name, value)
|
||||
}
|
||||
}.build()
|
||||
request.newBuilder().method(request.method(), formBody).build()
|
||||
}
|
||||
|
||||
else -> {
|
||||
logger.error {
|
||||
"Cannot add params to request: ${request.method()} ${request.url()} ${body.javaClass.simpleName}"
|
||||
}
|
||||
request
|
||||
}
|
||||
}
|
||||
|
||||
return chain.proceed(request)
|
||||
return chain.proceed(
|
||||
request.newBuilder()
|
||||
.headers(headers)
|
||||
.url(httpUrl)
|
||||
.method(request.method(), body)
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.hiczp.bilibili.api.test
|
||||
|
||||
import com.hiczp.bilibili.api.BilibiliClient
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
import org.junit.jupiter.api.Test
|
||||
@ -12,6 +13,7 @@ class LoginTest {
|
||||
BilibiliClient(logLevel = HttpLoggingInterceptor.Level.BODY)
|
||||
.run {
|
||||
login(Config.username, Config.password)
|
||||
delay(1000)
|
||||
logout()
|
||||
}
|
||||
}
|
||||
|
16
src/test/kotlin/com/hiczp/bilibili/api/test/SendReplyTest.kt
Normal file
16
src/test/kotlin/com/hiczp/bilibili/api/test/SendReplyTest.kt
Normal file
@ -0,0 +1,16 @@
|
||||
package com.hiczp.bilibili.api.test
|
||||
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class SendReplyTest {
|
||||
@Test
|
||||
fun sendRootReply() {
|
||||
runBlocking {
|
||||
bilibiliClient.mainAPI.sendReply(
|
||||
oid = 9498716,
|
||||
message = "这是自动发送的评论 ${System.currentTimeMillis()}"
|
||||
).await()
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user