优化代码

This commit is contained in:
czp3009 2019-02-19 14:07:12 +08:00
parent b0bff448f9
commit a63698c381
9 changed files with 36 additions and 21 deletions

View File

@ -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"
}

View File

@ -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
}
}

View File

@ -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

View File

@ -51,4 +51,8 @@ data class LoginResponse(
var refreshToken: String // 6a333ebded3c3dbdde65d136b3190d21
)
}
//快捷方式
val userId get() = data.tokenInfo.mid
val token get() = data.tokenInfo.accessToken
}

View File

@ -1,4 +1,4 @@
package com.hiczp.bilibili.api
package com.hiczp.bilibili.api.retrofit
import com.google.gson.annotations.SerializedName

View File

@ -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)
}
}
}

View File

@ -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)

View File

@ -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()
)
}
}

View File

@ -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)
}
}
}