feat(en/dramacool): Add StreamWishExtractor (#2034)
This commit is contained in:
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'DramaCool'
|
extName = 'DramaCool'
|
||||||
pkgNameSuffix = 'en.dramacool'
|
pkgNameSuffix = 'en.dramacool'
|
||||||
extClass = '.DramaCool'
|
extClass = '.DramaCool'
|
||||||
extVersionCode = 38
|
extVersionCode = 39
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13,6 +13,8 @@ dependencies {
|
|||||||
implementation(project(':lib-streamtape-extractor'))
|
implementation(project(':lib-streamtape-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
implementation(project(':lib-streamsb-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
|
implementation(project(':lib-playlist-utils'))
|
||||||
|
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -7,6 +7,7 @@ import androidx.preference.EditTextPreference
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.AppInfo
|
import eu.kanade.tachiyomi.AppInfo
|
||||||
|
import eu.kanade.tachiyomi.animeextension.en.dramacool.extractors.StreamWishExtractor
|
||||||
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
|
||||||
@ -169,6 +170,11 @@ class DramaCool : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
url.contains("dwish") -> {
|
||||||
|
val video = StreamWishExtractor(client, headers).videosFromUrl(url)
|
||||||
|
videoList.addAll(video)
|
||||||
|
}
|
||||||
|
|
||||||
url.contains("streamtape") -> {
|
url.contains("streamtape") -> {
|
||||||
val video = StreamTapeExtractor(client).videoFromUrl(url)
|
val video = StreamTapeExtractor(client).videoFromUrl(url)
|
||||||
if (video != null) {
|
if (video != null) {
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package eu.kanade.tachiyomi.animeextension.en.dramacool.extractors
|
||||||
|
|
||||||
|
import dev.datlag.jsunpacker.JsUnpacker
|
||||||
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
|
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
|
||||||
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
import okhttp3.Headers
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
|
||||||
|
class StreamWishExtractor(private val client: OkHttpClient, private val headers: Headers) {
|
||||||
|
fun videosFromUrl(url: String, videoNameGen: (String) -> String = { quality -> "StreamWish - $quality" }): List<Video> {
|
||||||
|
val doc = client.newCall(GET(url, headers = headers)).execute().asJsoup()
|
||||||
|
val jsEval = doc.selectFirst("script:containsData(m3u8)")?.data() ?: return emptyList()
|
||||||
|
|
||||||
|
val masterUrl = JsUnpacker.unpackAndCombine(jsEval)
|
||||||
|
?.substringAfter("source")
|
||||||
|
?.substringAfter("file:\"")
|
||||||
|
?.substringBefore("\"")
|
||||||
|
?: return emptyList()
|
||||||
|
|
||||||
|
return PlaylistUtils(client, headers).extractFromHls(masterUrl, videoNameGen = videoNameGen)
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user