From a63698c381d8352de8cb54eb784361507f194cd2 Mon Sep 17 00:00:00 2001 From: czp3009 Date: Tue, 19 Feb 2019 14:07:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/hiczp/bilibili/api/BaseUrl.kt | 4 ++-- .../com/hiczp/bilibili/api/BilibiliClient.kt | 6 +++--- .../hiczp/bilibili/api/passport/PassportAPI.kt | 2 +- .../bilibili/api/passport/model/LoginResponse.kt | 4 ++++ .../bilibili/api/{ => retrofit}/CommonResponse.kt | 2 +- .../bilibili/api/retrofit/RetrofitExtension.kt | 15 ++++++++++++--- .../interceptor/CommonHeaderInterceptor.kt | 7 ++++--- .../interceptor/CommonParamInterceptor.kt | 15 ++++++++------- .../interceptor/SortAndSignInterceptor.kt | 2 +- 9 files changed, 36 insertions(+), 21 deletions(-) rename src/main/kotlin/com/hiczp/bilibili/api/{ => retrofit}/CommonResponse.kt (87%) diff --git a/src/main/kotlin/com/hiczp/bilibili/api/BaseUrl.kt b/src/main/kotlin/com/hiczp/bilibili/api/BaseUrl.kt index b1e2ca2..a30d42e 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/BaseUrl.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/BaseUrl.kt @@ -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" } diff --git a/src/main/kotlin/com/hiczp/bilibili/api/BilibiliClient.kt b/src/main/kotlin/com/hiczp/bilibili/api/BilibiliClient.kt index e575ac5..d487687 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/BilibiliClient.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/BilibiliClient.kt @@ -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 } } diff --git a/src/main/kotlin/com/hiczp/bilibili/api/passport/PassportAPI.kt b/src/main/kotlin/com/hiczp/bilibili/api/passport/PassportAPI.kt index 6f82e32..7762e1a 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/passport/PassportAPI.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/passport/PassportAPI.kt @@ -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 diff --git a/src/main/kotlin/com/hiczp/bilibili/api/passport/model/LoginResponse.kt b/src/main/kotlin/com/hiczp/bilibili/api/passport/model/LoginResponse.kt index 3769eec..90edd75 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/passport/model/LoginResponse.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/passport/model/LoginResponse.kt @@ -51,4 +51,8 @@ data class LoginResponse( var refreshToken: String // 6a333ebded3c3dbdde65d136b3190d21 ) } + + //快捷方式 + val userId get() = data.tokenInfo.mid + val token get() = data.tokenInfo.accessToken } diff --git a/src/main/kotlin/com/hiczp/bilibili/api/CommonResponse.kt b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/CommonResponse.kt similarity index 87% rename from src/main/kotlin/com/hiczp/bilibili/api/CommonResponse.kt rename to src/main/kotlin/com/hiczp/bilibili/api/retrofit/CommonResponse.kt index 72b7d1f..e75eab7 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/CommonResponse.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/CommonResponse.kt @@ -1,4 +1,4 @@ -package com.hiczp.bilibili.api +package com.hiczp.bilibili.api.retrofit import com.google.gson.annotations.SerializedName diff --git a/src/main/kotlin/com/hiczp/bilibili/api/retrofit/RetrofitExtension.kt b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/RetrofitExtension.kt index a91b1c2..11f9e32 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/retrofit/RetrofitExtension.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/RetrofitExtension.kt @@ -2,9 +2,9 @@ package com.hiczp.bilibili.api.retrofit import okhttp3.FormBody -inline fun FormBody.forEach(block: (Pair) -> 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 String?>>.forEachNonNull(action: (String, String) -> Unit) { + forEach { (name, valueExpression) -> + val value = valueExpression() + if (value != null) { + action(name, value) + } + } +} diff --git a/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/CommonHeaderInterceptor.kt b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/CommonHeaderInterceptor.kt index fe9ffa0..69e08b8 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/CommonHeaderInterceptor.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/CommonHeaderInterceptor.kt @@ -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>) : Interceptor { +class CommonHeaderInterceptor(private vararg val additionHeaders: Pair 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) diff --git a/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/CommonParamInterceptor.kt b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/CommonParamInterceptor.kt index 89e6be2..458c256 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/CommonParamInterceptor.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/CommonParamInterceptor.kt @@ -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> + private vararg val additionParams: Pair 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() ) } } diff --git a/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/SortAndSignInterceptor.kt b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/SortAndSignInterceptor.kt index eaac47a..27a5b5c 100644 --- a/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/SortAndSignInterceptor.kt +++ b/src/main/kotlin/com/hiczp/bilibili/api/retrofit/interceptor/SortAndSignInterceptor.kt @@ -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) } } }