Make extensions use the OkruExtractor lib (#949)
This commit is contained in:
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
implementation(project(':lib-streamsb-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import android.app.Application
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.animelek.extractors.OkruExtractor
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.animelek.extractors.SharedExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.animelek.extractors.SharedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.animelek.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.animelek.extractors.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.animelek.extractors.VidBomExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.animelek.extractors.VidBomExtractor
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animelek.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
import java.lang.Exception
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String): List<Video> {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
if (document == null) {
|
|
||||||
throw Exception("Not used")
|
|
||||||
} else {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val videoQuality = "Okru: " + it.substringBefore("\\\"")
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
import java.lang.Exception
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String): List<Video> {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
if (document == null) {
|
|
||||||
throw Exception("Not used")
|
|
||||||
} else {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val videoQuality = "Okru: " + it.substringBefore("\\\"")
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.asia2tv.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.asia2tv.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.asia2tv.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.asia2tv.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.asia2tv.extractors.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||||
@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.asia2tv.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@ import android.app.Application
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.UQLoadExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.UQLoadExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.VidBomExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors.VidBomExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -15,6 +13,8 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.shahid4u.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.MoshahdaExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.MoshahdaExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.UQLoadExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.UQLoadExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.VidBomExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors.VidBomExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -16,6 +15,7 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.tuktukcinema.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.witanime.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
import java.lang.Exception
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String): List<Video> {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
if (document == null) {
|
|
||||||
throw Exception("Not used")
|
|
||||||
} else {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val videoQuality = "Okru: " + it.substringBefore("\\\"")
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
implementation(project(':lib-streamsb-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ import androidx.preference.ListPreference
|
|||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animefenix.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animefenix.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animefenix.extractors.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animefenix.extractors.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animefenix.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animefenix.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animefenix.extractors.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||||
@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -104,7 +104,8 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
when {
|
when {
|
||||||
realUrl.contains("ok.ru") -> {
|
realUrl.contains("ok.ru") -> {
|
||||||
OkruExtractor(client).videosFromUrl(realUrl).map { videoList.add(it) }
|
val okruVideos = OkruExtractor(client).videosFromUrl(realUrl)
|
||||||
|
videoList.addAll(okruVideos)
|
||||||
}
|
}
|
||||||
realUrl.contains("fembed") -> {
|
realUrl.contains("fembed") -> {
|
||||||
FembedExtractor().videosFromUrl(realUrl).map { videoList.add(it) }
|
FembedExtractor().videosFromUrl(realUrl).map { videoList.add(it) }
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.animefenix.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
implementation(project(':lib-streamsb-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animeflv.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animeflv.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animeflv.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animeflv.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animeflv.extractors.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animeflv.extractors.YourUploadExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animeflv.extractors.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -16,6 +15,7 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.animeflv.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
implementation(project(':lib-streamsb-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors.SolidFilesExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors.SolidFilesExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -17,6 +16,7 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
|||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.animeonlineninja.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-streamsb-extractor'))
|
implementation(project(':lib-streamsb-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.asialiveaction.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.asialiveaction.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.asialiveaction.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.asialiveaction.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,4 +9,9 @@ ext {
|
|||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
@ -6,7 +6,6 @@ import android.util.Log
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.SolidFilesExtractor
|
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.SolidFilesExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.StreamTapeExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.UqloadExtractor
|
import eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors.UqloadExtractor
|
||||||
@ -17,6 +16,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.doramasyt.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,4 +10,9 @@ ext {
|
|||||||
containsNsfw = true
|
containsNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.hentaijk.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.hentaijk.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.hentaijk.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
@ -14,6 +13,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.hentaijk.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.hentaila.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,4 +9,9 @@ ext {
|
|||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -6,7 +6,6 @@ import androidx.preference.ListPreference
|
|||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.jkanime.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.jkanime.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.jkanime.extractors.JkanimeExtractor
|
import eu.kanade.tachiyomi.animeextension.es.jkanime.extractors.JkanimeExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.jkanime.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.jkanime.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.jkhentai.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,4 +9,9 @@ ext {
|
|||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -7,7 +7,6 @@ import androidx.preference.ListPreference
|
|||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.Mp4uploadExtractor
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.Mp4uploadExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.SolidFilesExtractor
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.SolidFilesExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.UploadExtractor
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.UploadExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -17,6 +16,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,4 +9,9 @@ ext {
|
|||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences
|
|||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animeextension.es.tioanimeh.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.tioanimeh.extractors.FembedExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.es.tioanimeh.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.es.tioanimeh.extractors.YourUploadExtractor
|
import eu.kanade.tachiyomi.animeextension.es.tioanimeh.extractors.YourUploadExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||||
@ -14,6 +13,7 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.tioanimeh.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String, qualityPrefix: String = ""): List<Video> {
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
return try {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val qualities = listOf(
|
|
||||||
Pair("full", "1080p"),
|
|
||||||
Pair("hd", "720p"),
|
|
||||||
Pair("sd", "480p"),
|
|
||||||
Pair("low", "360p"),
|
|
||||||
Pair("lowest", "240p"),
|
|
||||||
Pair("mobile", "144p")
|
|
||||||
)
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val quality = try { qualities.find { q -> q.first == it.substringBefore("\\\"") }?.second } catch (e: Exception) { it.substringBefore("\\\"") }
|
|
||||||
val videoQuality = qualityPrefix + "Okru:" + quality
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl, headers = null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
videoList
|
|
||||||
} catch (e: Exception) {
|
|
||||||
videoList
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(':lib-okru-extractor'))
|
||||||
implementation(project(':lib-dood-extractor'))
|
implementation(project(':lib-dood-extractor'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,9 +4,7 @@ import android.app.Application
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors.MytvExtractor
|
import eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors.MytvExtractor
|
||||||
import eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors.OkruExtractor
|
|
||||||
import eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors.VudeoExtractor
|
import eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors.VudeoExtractor
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
||||||
@ -16,6 +14,8 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
|||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||||
|
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||||
|
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -115,7 +115,7 @@ class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
if (server.lowercase() == "ok") {
|
if (server.lowercase() == "ok") {
|
||||||
val playerId = it.attr("id")
|
val playerId = it.attr("id")
|
||||||
val url = "https://ok.ru/videoembed/" + document.select("div#player-tabs div.tab-blocks div.tab-content div div#content_$playerId").text()
|
val url = "https://ok.ru/videoembed/" + document.select("div#player-tabs div.tab-blocks div.tab-content div div#content_$playerId").text()
|
||||||
val video = OkruExtractor(client).videosFromUrl(url)
|
val video = OkruExtractor(client).videosFromUrl(url, "", false)
|
||||||
videoList.addAll(video)
|
videoList.addAll(video)
|
||||||
}
|
}
|
||||||
if (server.lowercase() == "doodstream") {
|
if (server.lowercase() == "doodstream") {
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
|
|
||||||
class OkruExtractor(private val client: OkHttpClient) {
|
|
||||||
fun videosFromUrl(url: String): List<Video> {
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
val videosString = document.select("div[data-options]").attr("data-options")
|
|
||||||
.substringAfter("\\\"videos\\\":[{\\\"name\\\":\\\"")
|
|
||||||
.substringBefore("]")
|
|
||||||
videosString.split("{\\\"name\\\":\\\"").reversed().forEach {
|
|
||||||
val videoUrl = it.substringAfter("url\\\":\\\"")
|
|
||||||
.substringBefore("\\\"")
|
|
||||||
.replace("\\\\u0026", "&")
|
|
||||||
val videoQuality = "Okru: " + it.substringBefore("\\\"")
|
|
||||||
if (videoUrl.startsWith("https://")) {
|
|
||||||
videoList.add(Video(videoUrl, videoQuality, videoUrl))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return videoList
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user