mirror of
https://github.com/czp3009/bilibili-api.git
synced 2025-02-19 20:50:28 +08:00
优化代码
This commit is contained in:
parent
b0bff448f9
commit
a63698c381
@ -7,10 +7,10 @@ object BaseUrl {
|
||||
/**
|
||||
* passport 站, 用于登录
|
||||
*/
|
||||
val passport = "https://passport.bilibili.com"
|
||||
const val passport = "https://passport.bilibili.com"
|
||||
|
||||
/**
|
||||
* 直播站
|
||||
*/
|
||||
val live = "https://api.live.bilibili.com"
|
||||
const val live = "https://api.live.bilibili.com"
|
||||
}
|
||||
|
@ -125,12 +125,12 @@ class BilibiliClient(
|
||||
* 这个方法不一定是线程安全的, 登出的同时如果进行登陆操作可能引发错误
|
||||
*/
|
||||
suspend fun logout() {
|
||||
val data = loginResponse?.data ?: return
|
||||
val cookieMap = data.cookieInfo.cookies
|
||||
val response = loginResponse ?: return
|
||||
val cookieMap = response.data.cookieInfo.cookies
|
||||
.associate {
|
||||
it.name to it.value
|
||||
}
|
||||
passportAPI.revoke(cookieMap, data.tokenInfo.accessToken).await()
|
||||
passportAPI.revoke(cookieMap, response.token).await()
|
||||
loginResponse = null
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
package com.hiczp.bilibili.api.passport
|
||||
|
||||
import com.hiczp.bilibili.api.CommonResponse
|
||||
import com.hiczp.bilibili.api.passport.model.GetKeyResponse
|
||||
import com.hiczp.bilibili.api.passport.model.LoginResponse
|
||||
import com.hiczp.bilibili.api.retrofit.CommonResponse
|
||||
import kotlinx.coroutines.Deferred
|
||||
import retrofit2.http.Field
|
||||
import retrofit2.http.FieldMap
|
||||
|
@ -51,4 +51,8 @@ data class LoginResponse(
|
||||
var refreshToken: String // 6a333ebded3c3dbdde65d136b3190d21
|
||||
)
|
||||
}
|
||||
|
||||
//快捷方式
|
||||
val userId get() = data.tokenInfo.mid
|
||||
val token get() = data.tokenInfo.accessToken
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.hiczp.bilibili.api
|
||||
package com.hiczp.bilibili.api.retrofit
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
@ -2,9 +2,9 @@ package com.hiczp.bilibili.api.retrofit
|
||||
|
||||
import okhttp3.FormBody
|
||||
|
||||
inline fun FormBody.forEach(block: (Pair<String, String>) -> Unit) {
|
||||
inline fun FormBody.forEach(block: (String, String) -> Unit) {
|
||||
repeat(size()) {
|
||||
block(encodedName(it) to encodedValue(it))
|
||||
block(encodedName(it), encodedValue(it))
|
||||
}
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ fun FormBody.sortedRaw(): String {
|
||||
return nameAndValue.sorted().joinToString(separator = "&")
|
||||
}
|
||||
|
||||
fun FormBody.Builder.addAll(formBody: FormBody): FormBody.Builder {
|
||||
fun FormBody.Builder.addAllEncoded(formBody: FormBody): FormBody.Builder {
|
||||
with(formBody) {
|
||||
repeat(size()) {
|
||||
addEncoded(encodedName(it), encodedValue(it))
|
||||
@ -34,3 +34,12 @@ fun FormBody.Builder.addAll(formBody: FormBody): FormBody.Builder {
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
internal inline fun Array<out Pair<String, () -> String?>>.forEachNonNull(action: (String, String) -> Unit) {
|
||||
forEach { (name, valueExpression) ->
|
||||
val value = valueExpression()
|
||||
if (value != null) {
|
||||
action(name, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.hiczp.bilibili.api.retrofit.interceptor
|
||||
|
||||
import com.hiczp.bilibili.api.retrofit.forEachNonNull
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
|
||||
@ -8,11 +9,11 @@ import okhttp3.Response
|
||||
*
|
||||
* @param additionHeaders HeaderName to HeaderValueExpression
|
||||
*/
|
||||
class CommonHeaderInterceptor(private vararg val additionHeaders: Pair<String, () -> String>) : Interceptor {
|
||||
class CommonHeaderInterceptor(private vararg val additionHeaders: Pair<String, () -> String?>) : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request().newBuilder().apply {
|
||||
additionHeaders.forEach { (headerName, headerValueExpression) ->
|
||||
addHeader(headerName, headerValueExpression())
|
||||
additionHeaders.forEachNonNull { name, value ->
|
||||
addHeader(name, value)
|
||||
}
|
||||
}.build()
|
||||
return chain.proceed(request)
|
||||
|
@ -2,7 +2,8 @@ package com.hiczp.bilibili.api.retrofit.interceptor
|
||||
|
||||
import com.hiczp.bilibili.api.retrofit.Method
|
||||
import com.hiczp.bilibili.api.retrofit.ParamType
|
||||
import com.hiczp.bilibili.api.retrofit.addAll
|
||||
import com.hiczp.bilibili.api.retrofit.addAllEncoded
|
||||
import com.hiczp.bilibili.api.retrofit.forEachNonNull
|
||||
import mu.KotlinLogging
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Interceptor
|
||||
@ -18,7 +19,7 @@ private val logger = KotlinLogging.logger {}
|
||||
*/
|
||||
class CommonParamInterceptor(
|
||||
private val paramType: ParamType,
|
||||
private vararg val additionParams: Pair<String, () -> String>
|
||||
private vararg val additionParams: Pair<String, () -> String?>
|
||||
) : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request()
|
||||
@ -26,8 +27,8 @@ class CommonParamInterceptor(
|
||||
//如果欲添加的参数类型为 Query 则直接添加
|
||||
if (paramType == ParamType.QUERY) {
|
||||
val httpUrl = request.url().newBuilder().apply {
|
||||
additionParams.forEach { (paramName, paramValueExpression) ->
|
||||
addQueryParameter(paramName, paramValueExpression())
|
||||
additionParams.forEachNonNull { name, value ->
|
||||
addQueryParameter(name, value)
|
||||
}
|
||||
}.build()
|
||||
return chain.proceed(
|
||||
@ -40,8 +41,8 @@ class CommonParamInterceptor(
|
||||
val body = request.body()!!
|
||||
val newFormBody = {
|
||||
FormBody.Builder().apply {
|
||||
additionParams.forEach { (paramName, paramValueExpression) ->
|
||||
add(paramName, paramValueExpression())
|
||||
additionParams.forEachNonNull { name, value ->
|
||||
add(name, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -51,7 +52,7 @@ class CommonParamInterceptor(
|
||||
)
|
||||
} else if (body is FormBody) { //如果 body 为 FormBody
|
||||
return chain.proceed(
|
||||
request.newBuilder().post(newFormBody().addAll(body).build()).build()
|
||||
request.newBuilder().post(newFormBody().addAllEncoded(body).build()).build()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ class SortAndSignInterceptor(private val paramType: ParamType, private val appSe
|
||||
MessageDigest.getInstance("MD5")
|
||||
.digest((string + appSecret).toByteArray())
|
||||
.joinToString(separator = "") {
|
||||
String.format("%02x", it)
|
||||
"%02x".format(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user