fix(tr/hdfilmcehennemi): Update baseUrl + add another extractor (#2490)
This commit is contained in:
parent
b1cd92ca4e
commit
3b482c19db
@ -13,7 +13,7 @@
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="www.hdfilmcehennemi.life"
|
||||
android:host="www.hdfilmcehennemi.de"
|
||||
android:pathPattern="/..*"
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
|
@ -8,7 +8,7 @@ ext {
|
||||
extName = 'HDFilmCehennemi'
|
||||
pkgNameSuffix = 'tr.hdfilmcehennemi'
|
||||
extClass = '.HDFilmCehennemi'
|
||||
extVersionCode = 3
|
||||
extVersionCode = 4
|
||||
libVersion = '13'
|
||||
containsNsfw = true
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.animeextension.tr.hdfilmcehennemi.extractors.RapidrameExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.tr.hdfilmcehennemi.extractors.VidmolyExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.tr.hdfilmcehennemi.extractors.XBetExtractor
|
||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||
@ -37,7 +38,7 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override val name = "HDFilmCehennemi"
|
||||
|
||||
override val baseUrl = "https://www.hdfilmcehennemi.life"
|
||||
override val baseUrl = "https://www.hdfilmcehennemi.de"
|
||||
|
||||
override val lang = "tr"
|
||||
|
||||
@ -96,8 +97,6 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||
val headers = headersBuilder()
|
||||
.add("Referer", "$baseUrl/")
|
||||
.add("Origin", baseUrl)
|
||||
.add("X-Requested-With", "XMLHttpRequest")
|
||||
.build()
|
||||
|
||||
@ -175,6 +174,7 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
// ============================ Video Links =============================
|
||||
private val vidmolyExtractor by lazy { VidmolyExtractor(client, headers) }
|
||||
private val rapidrameExtractor by lazy { RapidrameExtractor(client, headers) }
|
||||
private val xbetExtractor by lazy { XBetExtractor(client, headers, json) }
|
||||
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
val doc = response.use { it.asJsoup() }
|
||||
@ -190,9 +190,10 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
when {
|
||||
url.contains("vidmoly") -> vidmolyExtractor.videosFromUrl(url)
|
||||
url.contains("$baseUrl/playerr") -> rapidrameExtractor.videosFromUrl(url)
|
||||
else -> emptyList<Video>()
|
||||
url.contains("trstx.org") -> xbetExtractor.videosFromUrl(url)
|
||||
else -> emptyList()
|
||||
}
|
||||
}.getOrNull() ?: emptyList<Video>()
|
||||
}.getOrNull().orEmpty()
|
||||
}.flatten().ifEmpty { throw Exception("No videos available xD") }
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ import android.util.Log
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
/**
|
||||
* Springboard that accepts https://www.hdfilmcehennemi.life/<item> intents
|
||||
* Springboard that accepts https://www.hdfilmcehennemi.de/<item> intents
|
||||
* and redirects them to the main Aniyomi process.
|
||||
*/
|
||||
class HDFilmCehennemiUrlActivity : Activity() {
|
||||
|
@ -0,0 +1,65 @@
|
||||
package eu.kanade.tachiyomi.animeextension.tr.hdfilmcehennemi.extractors
|
||||
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Response
|
||||
|
||||
class XBetExtractor(
|
||||
private val client: OkHttpClient,
|
||||
private val headers: Headers,
|
||||
private val json: Json,
|
||||
) {
|
||||
private val playlistUtils by lazy { PlaylistUtils(client, headers) }
|
||||
|
||||
fun videosFromUrl(url: String): List<Video> {
|
||||
val doc = client.newCall(GET(url, headers)).execute()
|
||||
.use { it.asJsoup() }
|
||||
|
||||
val script = doc.selectFirst("script:containsData(playerConfigs =)")?.data()
|
||||
?: return emptyList()
|
||||
|
||||
val host = "https://${url.toHttpUrl().host}"
|
||||
|
||||
val postPath = script.substringAfter("file\":\"").substringBefore('"')
|
||||
.replace("\\", "")
|
||||
|
||||
val postHeaders = headers.newBuilder()
|
||||
.set("Referer", url)
|
||||
.set("Origin", host)
|
||||
.build()
|
||||
|
||||
val postRes = client.newCall(POST(host + postPath, postHeaders)).execute()
|
||||
.parseAs<List<VideoItemDto>> { it.replace("[],", "") }
|
||||
|
||||
return postRes.flatMap { video ->
|
||||
runCatching {
|
||||
val playlistUrl = client.newCall(POST(host + video.path, postHeaders)).execute()
|
||||
.use { it.body.string() }
|
||||
|
||||
playlistUtils.extractFromHls(
|
||||
playlistUrl,
|
||||
url,
|
||||
videoNameGen = { "[${video.title}] XBet - $it" },
|
||||
)
|
||||
}.getOrElse { emptyList() }
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class VideoItemDto(val file: String, val title: String) {
|
||||
val path = "/playlist/${file.removeSuffix("~")}.txt"
|
||||
}
|
||||
|
||||
private inline fun <reified T> Response.parseAs(transform: (String) -> String = { it }): T {
|
||||
val responseBody = use { transform(it.body.string()) }
|
||||
return json.decodeFromString(responseBody)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user