GocTruyenTranhVui: Using the token of a level 1 account. Login is no longer required. (#9855)
* Currently using token of a lv1 account. Will not require login anymore Helps read most manga, manhua, manhwa. Manga/manhua/manhwa above level 1 will only be read on the web. * Apply suggestion
This commit is contained in:
parent
ca348c78eb
commit
e18a2f732c
@ -1,7 +1,7 @@
|
|||||||
ext {
|
ext {
|
||||||
extName = 'Goc Truyen Tranh Vui'
|
extName = 'Goc Truyen Tranh Vui'
|
||||||
extClass = '.GocTruyenTranhVui'
|
extClass = '.GocTruyenTranhVui'
|
||||||
extVersionCode = 1
|
extVersionCode = 2
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.extension.vi.goctruyentranhvui
|
package eu.kanade.tachiyomi.extension.vi.goctruyentranhvui
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||||
@ -10,6 +11,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
|||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import keiyoushi.utils.parseAs
|
import keiyoushi.utils.parseAs
|
||||||
|
import okhttp3.FormBody
|
||||||
import okhttp3.Headers
|
import okhttp3.Headers
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
@ -94,18 +96,31 @@ class GocTruyenTranhVui : HttpSource() {
|
|||||||
val pattern = Regex("chapterJson:\\s*`(.*?)`")
|
val pattern = Regex("chapterJson:\\s*`(.*?)`")
|
||||||
val match = pattern.find(html) ?: throw Exception("Không tìm thấy Json") // find json
|
val match = pattern.find(html) ?: throw Exception("Không tìm thấy Json") // find json
|
||||||
val jsonPage = match.groups[1]!!.value
|
val jsonPage = match.groups[1]!!.value
|
||||||
if (jsonPage.isEmpty()) throw Exception("Không có nội dung. Hãy đăng nhập trong WebView") // loginRequired
|
|
||||||
val result = jsonPage.parseAs<ImageListWrapper>()
|
val imageUrls = if (jsonPage.isEmpty()) {
|
||||||
val imageList = result.body.result.data
|
val regexMangaId = Regex("""comic\s*=\s*\{\s*id:\s*"(\d{10})"""")
|
||||||
return imageList.mapIndexed { i, url ->
|
val matchId = regexMangaId.find(html) ?: throw Exception("Không tìm thấy mangaId") // find mangaId
|
||||||
val finalUrl = if (url.startsWith("/image/")) {
|
val mangaId = matchId.groups[1]!!.value
|
||||||
baseUrl + url
|
val nameEn = response.request.url.toString().substringAfter("/truyen/").substringBefore("/")
|
||||||
} else {
|
val chapterNumber = response.request.url.toString().substringAfterLast("chuong-")
|
||||||
url
|
val body = FormBody.Builder().add("comicId", mangaId)
|
||||||
}
|
.add("chapterNumber", chapterNumber).add("nameEn", nameEn).build()
|
||||||
|
val request = POST("$baseUrl/api/chapter/auth", pageHeaders, body)
|
||||||
|
client.newCall(request).execute().parseAs<ResultDto<ImageListDto>>().result.data
|
||||||
|
} else {
|
||||||
|
jsonPage.parseAs<ImageListWrapper>().body.result.data
|
||||||
|
}
|
||||||
|
return imageUrls.mapIndexed { i, url ->
|
||||||
|
val finalUrl = if (url.startsWith("/image/")) { baseUrl + url } else { url }
|
||||||
Page(i, imageUrl = finalUrl)
|
Page(i, imageUrl = finalUrl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private val pageHeaders by lazy {
|
||||||
|
headersBuilder()
|
||||||
|
.add("X-Requested-With", "XMLHttpRequest")
|
||||||
|
.add("Authorization", TOKEN_KEY)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException()
|
override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException()
|
||||||
|
|
||||||
@ -136,3 +151,4 @@ class GocTruyenTranhVui : HttpSource() {
|
|||||||
GenreList(getGenreList()),
|
GenreList(getGenreList()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
private const val TOKEN_KEY = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJBbG9uZSBGb3JldmVyIiwiY29taWNJZHMiOltdLCJyb2xlSWQiOm51bGwsImdyb3VwSWQiOm51bGwsImFkbWluIjpmYWxzZSwicmFuayI6MCwicGVybWlzc2lvbiI6W10sImlkIjoiMDAwMTA4NDQyNSIsInRlYW0iOmZhbHNlLCJpYXQiOjE3NTM2OTgyOTAsImVtYWlsIjoibnVsbCJ9.HT080LGjvzfh6XAPmdDZhf5vhnzUhXI4GU8U6tzwlnXWjgMO4VdYL1_jsSFWd-s3NBGt-OAt89XnzaQ03iqDyA"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user