优化tts登录

This commit is contained in:
gedoor 2021-10-12 21:12:13 +08:00
parent 665a053101
commit 50385a8ce3
11 changed files with 65 additions and 23 deletions

View File

@ -15,6 +15,24 @@
* 阿里云语音自动登录
* 修复一些bug
* 优化阿里云登录,需重新登录
```
source登录相关方法,可在js内通过source.调用,可以参考阿里云语音登录
login()
getHeaderMap(hasLoginHeader: Boolean = false)
getLoginHeader(): String?
getLoginHeaderMap(): Map<String, String>?
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**

View File

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

View File

@ -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<StrResponse?>(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<Map<String, String>>(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()

View File

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

View File

@ -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()
}
}
/**
* 上传文件
*/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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