diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 602074838..7ef6836e7 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -15,6 +15,24 @@ * 阿里云语音自动登录 * 修复一些bug +* 优化阿里云登录,需重新登录 + +``` +source登录相关方法,可在js内通过source.调用,可以参考阿里云语音登录 +login() +getHeaderMap(hasLoginHeader: Boolean = false) +getLoginHeader(): String? +getLoginHeaderMap(): Map? +putLoginHeader(header: String) +removeLoginHeader() +setVariable(variable: String?) +getVariable(): String? +AnalyzeUrl相关函数,js中通过java.调用 +initUrl() //重新解析url,可以用于登录检测js登录后重新解析url重新访问 +getHeaderMap().putAll(source.getHeaderMap(true)) //重新设置登录头 +getStrResponse( jsStr: String? = null, sourceRegex: String? = null) //返回访问结果,文本类型,书源内部重新登录后可调用此方法重新返回结果 +getResponse(): Response //返回访问结果,网络朗读引擎采用的是这个,调用登录后在调用这方法可以重新访问,参考阿里云登录检测 +``` **2021/10/07** diff --git a/app/src/main/java/io/legado/app/help/BookHelp.kt b/app/src/main/java/io/legado/app/help/BookHelp.kt index c3cbc9c4b..617828374 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -116,7 +116,7 @@ object BookHelp { downloadImages.add(src) val analyzeUrl = AnalyzeUrl(src, source = bookSource) try { - analyzeUrl.getByteArray().let { + analyzeUrl.getByteArrayAwait().let { FileUtils.createFileIfNotExist( downloadDir, cacheFolderName, diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt index 95a734432..9d901c1c9 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -46,7 +46,7 @@ interface JsExtensions { return runBlocking { kotlin.runCatching { val analyzeUrl = AnalyzeUrl(urlStr, source = getSource()) - analyzeUrl.getStrResponse().body + analyzeUrl.getStrResponseAwait().body }.onFailure { log("ajax(${urlStr}) error\n${it.stackTraceToString()}") it.printOnDebug() @@ -65,7 +65,7 @@ interface JsExtensions { async(IO) { val url = urlList[it] val analyzeUrl = AnalyzeUrl(url, source = getSource()) - analyzeUrl.getStrResponse() + analyzeUrl.getStrResponseAwait() } } val resArray = Array(urlList.size) { @@ -82,7 +82,7 @@ interface JsExtensions { return runBlocking { val analyzeUrl = AnalyzeUrl(urlStr, source = getSource()) kotlin.runCatching { - analyzeUrl.getStrResponse() + analyzeUrl.getStrResponseAwait() }.onFailure { log("connect(${urlStr}) error\n${it.stackTraceToString()}") it.printOnDebug() @@ -97,7 +97,7 @@ interface JsExtensions { val headerMap = GSON.fromJsonObject>(header) val analyzeUrl = AnalyzeUrl(urlStr, headerMapF = headerMap, source = getSource()) kotlin.runCatching { - analyzeUrl.getStrResponse() + analyzeUrl.getStrResponseAwait() }.onFailure { log("ajax($urlStr,$header) error\n${it.stackTraceToString()}") it.printOnDebug() diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index d95b950fc..acd036e4b 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -655,7 +655,7 @@ class AnalyzeRule( return runBlocking { kotlin.runCatching { val analyzeUrl = AnalyzeUrl(urlStr, source = source, ruleData = book) - analyzeUrl.getStrResponse().body + analyzeUrl.getStrResponseAwait().body }.onFailure { log("ajax(${urlStr}) error\n${it.stackTraceToString()}") it.printOnDebug() diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index ffb733632..afce393e0 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -16,6 +16,7 @@ import io.legado.app.help.JsExtensions import io.legado.app.help.http.* import io.legado.app.model.ConcurrentException import io.legado.app.utils.* +import kotlinx.coroutines.runBlocking import okhttp3.Response import java.net.URLEncoder import java.util.* @@ -328,13 +329,13 @@ class AnalyzeUrl( /** * 访问网站,返回StrResponse */ - suspend fun getStrResponse( + suspend fun getStrResponseAwait( jsStr: String? = null, sourceRegex: String? = null, useWebView: Boolean = true, ): StrResponse { if (type != null) { - return StrResponse(url, StringUtils.byteToHexString(getByteArray())) + return StrResponse(url, StringUtils.byteToHexString(getByteArrayAwait())) } judgmentConcurrent() setCookie(source?.getKey()) @@ -384,10 +385,21 @@ class AnalyzeUrl( } } + @JvmOverloads + fun getStrResponse( + jsStr: String? = null, + sourceRegex: String? = null, + useWebView: Boolean = true, + ): StrResponse { + return runBlocking { + getStrResponseAwait(jsStr, sourceRegex, useWebView) + } + } + /** * 访问网站,返回Response */ - suspend fun getResponse(): Response { + suspend fun getResponseAwait(): Response { judgmentConcurrent() setCookie(source?.getKey()) @Suppress("BlockingMethodInNonBlockingContext") @@ -407,10 +419,16 @@ class AnalyzeUrl( } } + fun getResponse(): Response { + return runBlocking { + getResponseAwait() + } + } + /** * 访问网站,返回ByteArray */ - suspend fun getByteArray(): ByteArray { + suspend fun getByteArrayAwait(): ByteArray { judgmentConcurrent() setCookie(source?.getKey()) @Suppress("BlockingMethodInNonBlockingContext") @@ -430,6 +448,12 @@ class AnalyzeUrl( }.bytes() } + fun getByteArray(): ByteArray { + return runBlocking { + getByteArrayAwait() + } + } + /** * 上传文件 */ diff --git a/app/src/main/java/io/legado/app/model/rss/Rss.kt b/app/src/main/java/io/legado/app/model/rss/Rss.kt index 72e353009..25a989cd6 100644 --- a/app/src/main/java/io/legado/app/model/rss/Rss.kt +++ b/app/src/main/java/io/legado/app/model/rss/Rss.kt @@ -42,7 +42,7 @@ object Rss { ruleData = ruleData, headerMapF = rssSource.getHeaderMap() ) - val body = analyzeUrl.getStrResponse().body + val body = analyzeUrl.getStrResponseAwait().body return RssParserByRule.parseXML(sortName, sortUrl, body, rssSource, ruleData) } @@ -70,7 +70,7 @@ object Rss { ruleData = rssArticle, headerMapF = rssSource.getHeaderMap() ) - val body = analyzeUrl.getStrResponse().body + val body = analyzeUrl.getStrResponseAwait().body Debug.log(rssSource.sourceUrl, "≡获取成功:${rssSource.sourceUrl}") Debug.log(rssSource.sourceUrl, body, state = 20) val analyzeRule = AnalyzeRule(rssArticle, rssSource) diff --git a/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt b/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt index 7353dd33d..ee74215e6 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt @@ -67,7 +67,7 @@ object BookChapterList { source = bookSource, ruleData = book, headerMapF = bookSource.getHeaderMap() - ).getStrResponse().body?.let { nextBody -> + ).getStrResponseAwait().body?.let { nextBody -> chapterData = analyzeChapterList( scope, book, nextUrl, nextUrl, nextBody, tocRule, listRule, bookSource @@ -90,7 +90,7 @@ object BookChapterList { ruleData = book, headerMapF = bookSource.getHeaderMap() ) - val res = analyzeUrl.getStrResponse() + val res = analyzeUrl.getStrResponseAwait() analyzeChapterList( this, book, urlStr, res.url, res.body!!, tocRule, listRule, bookSource, false diff --git a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt index de4698d6c..e3ed695f0 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt @@ -72,7 +72,7 @@ object BookContent { source = bookSource, ruleData = book, headerMapF = bookSource.getHeaderMap() - ).getStrResponse() + ).getStrResponseAwait() res.body?.let { nextBody -> contentData = analyzeContent( book, nextUrl, res.url, nextBody, contentRule, @@ -96,7 +96,7 @@ object BookContent { ruleData = book, headerMapF = bookSource.getHeaderMap() ) - val res = analyzeUrl.getStrResponse() + val res = analyzeUrl.getStrResponseAwait() analyzeContent( book, urlStr, res.url, res.body!!, contentRule, bookChapter, bookSource, mNextChapterUrl, false diff --git a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt index 167f32a4a..f69b520c1 100644 --- a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt @@ -74,7 +74,7 @@ object WebBook { source = bookSource, ruleData = variableBook, ) - var res = analyzeUrl.getStrResponse() + var res = analyzeUrl.getStrResponseAwait() //检测书源是否已登录 bookSource.loginCheckJs?.let { checkJs -> if (checkJs.isNotBlank()) { @@ -124,7 +124,7 @@ object WebBook { ruleData = variableBook, headerMapF = bookSource.getHeaderMap(true) ) - var res = analyzeUrl.getStrResponse() + var res = analyzeUrl.getStrResponseAwait() //检测书源是否已登录 bookSource.loginCheckJs?.let { checkJs -> if (checkJs.isNotBlank()) { @@ -182,7 +182,7 @@ object WebBook { ruleData = book, headerMapF = bookSource.getHeaderMap(true) ) - var res = analyzeUrl.getStrResponse() + var res = analyzeUrl.getStrResponseAwait() //检测书源是否已登录 bookSource.loginCheckJs?.let { checkJs -> if (checkJs.isNotBlank()) { @@ -239,7 +239,7 @@ object WebBook { ruleData = book, headerMapF = bookSource.getHeaderMap(true) ) - var res = analyzeUrl.getStrResponse() + var res = analyzeUrl.getStrResponseAwait() //检测书源是否已登录 bookSource.loginCheckJs?.let { checkJs -> if (checkJs.isNotBlank()) { @@ -304,7 +304,7 @@ object WebBook { chapter = bookChapter, headerMapF = bookSource.getHeaderMap(true) ) - var res = analyzeUrl.getStrResponse( + var res = analyzeUrl.getStrResponseAwait( jsStr = bookSource.getContentRule().webJs, sourceRegex = bookSource.getContentRule().sourceRegex ) diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 2f1c37f57..e4c386f60 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -111,7 +111,7 @@ class HttpReadAloudService : BaseReadAloudService(), source = httpTts, headerMapF = httpTts.getHeaderMap(true) ) - var response = analyzeUrl.getResponse() + var response = analyzeUrl.getResponseAwait() httpTts.loginCheckJs?.let { checkJs -> if (checkJs.isNotBlank()) { response = analyzeUrl.evalJS(checkJs, response) as Response diff --git a/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt b/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt index 39c5b500b..bcd77ad43 100644 --- a/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt @@ -34,7 +34,7 @@ class WebViewModel(application: Application) : BaseViewModel(application) { baseUrl = analyzeUrl.url headerMap.putAll(analyzeUrl.headerMap) if (analyzeUrl.isPost()) { - html = analyzeUrl.getStrResponse(useWebView = false).body + html = analyzeUrl.getStrResponseAwait(useWebView = false).body } }.onSuccess { success.invoke()