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" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
|
||||||
<data
|
<data
|
||||||
android:host="www.hdfilmcehennemi.life"
|
android:host="www.hdfilmcehennemi.de"
|
||||||
android:pathPattern="/..*"
|
android:pathPattern="/..*"
|
||||||
android:scheme="https" />
|
android:scheme="https" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
@ -8,7 +8,7 @@ ext {
|
|||||||
extName = 'HDFilmCehennemi'
|
extName = 'HDFilmCehennemi'
|
||||||
pkgNameSuffix = 'tr.hdfilmcehennemi'
|
pkgNameSuffix = 'tr.hdfilmcehennemi'
|
||||||
extClass = '.HDFilmCehennemi'
|
extClass = '.HDFilmCehennemi'
|
||||||
extVersionCode = 3
|
extVersionCode = 4
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import androidx.preference.ListPreference
|
|||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.tr.hdfilmcehennemi.extractors.RapidrameExtractor
|
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.VidmolyExtractor
|
||||||
|
import eu.kanade.tachiyomi.animeextension.tr.hdfilmcehennemi.extractors.XBetExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||||
@ -37,7 +38,7 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override val name = "HDFilmCehennemi"
|
override val name = "HDFilmCehennemi"
|
||||||
|
|
||||||
override val baseUrl = "https://www.hdfilmcehennemi.life"
|
override val baseUrl = "https://www.hdfilmcehennemi.de"
|
||||||
|
|
||||||
override val lang = "tr"
|
override val lang = "tr"
|
||||||
|
|
||||||
@ -96,8 +97,6 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
|
||||||
val headers = headersBuilder()
|
val headers = headersBuilder()
|
||||||
.add("Referer", "$baseUrl/")
|
|
||||||
.add("Origin", baseUrl)
|
|
||||||
.add("X-Requested-With", "XMLHttpRequest")
|
.add("X-Requested-With", "XMLHttpRequest")
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
@ -175,6 +174,7 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
// ============================ Video Links =============================
|
// ============================ Video Links =============================
|
||||||
private val vidmolyExtractor by lazy { VidmolyExtractor(client, headers) }
|
private val vidmolyExtractor by lazy { VidmolyExtractor(client, headers) }
|
||||||
private val rapidrameExtractor by lazy { RapidrameExtractor(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> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val doc = response.use { it.asJsoup() }
|
val doc = response.use { it.asJsoup() }
|
||||||
@ -190,9 +190,10 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
when {
|
when {
|
||||||
url.contains("vidmoly") -> vidmolyExtractor.videosFromUrl(url)
|
url.contains("vidmoly") -> vidmolyExtractor.videosFromUrl(url)
|
||||||
url.contains("$baseUrl/playerr") -> rapidrameExtractor.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") }
|
}.flatten().ifEmpty { throw Exception("No videos available xD") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import android.util.Log
|
|||||||
import kotlin.system.exitProcess
|
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.
|
* and redirects them to the main Aniyomi process.
|
||||||
*/
|
*/
|
||||||
class HDFilmCehennemiUrlActivity : Activity() {
|
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