some refactoring & deleted all logpoints
This commit is contained in:
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.ar.animelek
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.ar.animelek.extractors.DoodExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.animelek.extractors.DoodExtractor
|
||||||
@ -100,9 +99,7 @@ class AnimeLek : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val elements = document.select(videoListSelector())
|
val elements = document.select(videoListSelector())
|
||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val url = element.attr("data-ep-url")
|
val url = element.attr("data-ep-url")
|
||||||
Log.i("lol", url)
|
|
||||||
val qualityy = element.text()
|
val qualityy = element.text()
|
||||||
Log.i("lol", qualityy)
|
|
||||||
val location = element.ownerDocument().location()
|
val location = element.ownerDocument().location()
|
||||||
val videoHeaders = Headers.headersOf("Referer", location)
|
val videoHeaders = Headers.headersOf("Referer", location)
|
||||||
when {
|
when {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animelek.extractors
|
package eu.kanade.tachiyomi.animeextension.ar.animelek.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -9,14 +8,12 @@ import okhttp3.OkHttpClient
|
|||||||
class SharedExtractor(private val client: OkHttpClient) {
|
class SharedExtractor(private val client: OkHttpClient) {
|
||||||
fun videoFromUrl(url: String, quality: String): Video? {
|
fun videoFromUrl(url: String, quality: String): Video? {
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
Log.i("lol", "$document")
|
|
||||||
val check = document.select("div.error4shared").text()
|
val check = document.select("div.error4shared").text()
|
||||||
val videoUrl = document.select("source").attr("src")
|
val videoUrl = document.select("source").attr("src")
|
||||||
Log.i("lill", videoUrl)
|
return if (check.contains("This file is not available any more")) {
|
||||||
if (check.contains("This file is not available any more")) {
|
Video(url, "no 1video", "https", null)
|
||||||
return Video(url, "no 1video", "https", null)
|
|
||||||
} else {
|
} else {
|
||||||
return Video(url, quality, videoUrl, null)
|
Video(url, quality, videoUrl, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animelek.extractors
|
package eu.kanade.tachiyomi.animeextension.ar.animelek.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -10,14 +9,11 @@ class VidBomExtractor(private val client: OkHttpClient) {
|
|||||||
fun videosFromUrl(url: String): List<Video> {
|
fun videosFromUrl(url: String): List<Video> {
|
||||||
val doc = client.newCall(GET(url)).execute().asJsoup()
|
val doc = client.newCall(GET(url)).execute().asJsoup()
|
||||||
val script = doc.selectFirst("script:containsData(sources)")
|
val script = doc.selectFirst("script:containsData(sources)")
|
||||||
Log.i("looool", "$script")
|
|
||||||
val data = script.data().substringAfter("sources: [").substringBefore("],")
|
val data = script.data().substringAfter("sources: [").substringBefore("],")
|
||||||
Log.i("loool", "$data")
|
|
||||||
val sources = data.split("file:\"").drop(1)
|
val sources = data.split("file:\"").drop(1)
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
for (source in sources) {
|
for (source in sources) {
|
||||||
val src = source.substringBefore("\"")
|
val src = source.substringBefore("\"")
|
||||||
Log.i("looo", src)
|
|
||||||
val quality = "Vidbom:" + source.substringAfter("label:\"").substringBefore("\"") // .substringAfter("format: '")
|
val quality = "Vidbom:" + source.substringAfter("label:\"").substringBefore("\"") // .substringAfter("format: '")
|
||||||
val video = Video(src, quality, src, null)
|
val video = Video(src, quality, src, null)
|
||||||
videoList.add(video)
|
videoList.add(video)
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.ar.animerco
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.ar.animerco.extractors.DoodExtractor
|
import eu.kanade.tachiyomi.animeextension.ar.animerco.extractors.DoodExtractor
|
||||||
@ -77,23 +76,16 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
val episodeList = mutableListOf<SEpisode>()
|
val episodeList = mutableListOf<SEpisode>()
|
||||||
val seriesLink1 = document.select("ol[itemscope] li:last-child a").attr("href")
|
val seriesLink1 = document.select("ol[itemscope] li:last-child a").attr("href")
|
||||||
Log.i("seriesLink1", "$seriesLink1")
|
|
||||||
val seriesLink = document.select("input[name=red]").attr("value")
|
val seriesLink = document.select("input[name=red]").attr("value")
|
||||||
Log.i("seriesLink", "$seriesLink")
|
|
||||||
val type = document.select("div.dtsingle").attr("itemtype").substringAfterLast("/")
|
val type = document.select("div.dtsingle").attr("itemtype").substringAfterLast("/")
|
||||||
Log.i("type", "$type")
|
|
||||||
if (type.contains("TVSeries")) {
|
if (type.contains("TVSeries")) {
|
||||||
val seasonUrl = seriesLink
|
|
||||||
Log.i("seasonUrl", seasonUrl)
|
|
||||||
val seasonsHtml = client.newCall(
|
val seasonsHtml = client.newCall(
|
||||||
GET(
|
GET(
|
||||||
seasonUrl
|
seriesLink
|
||||||
// headers = Headers.headersOf("Referer", document.location())
|
// headers = Headers.headersOf("Referer", document.location())
|
||||||
)
|
)
|
||||||
).execute().asJsoup()
|
).execute().asJsoup()
|
||||||
Log.i("seasonsHtml", "$seasonsHtml")
|
|
||||||
val seasonsElements = seasonsHtml.select("span.se-t a")
|
val seasonsElements = seasonsHtml.select("span.se-t a")
|
||||||
Log.i("seasonsElements", "$seasonsElements")
|
|
||||||
seasonsElements.forEach {
|
seasonsElements.forEach {
|
||||||
val seasonEpList = parseEpisodesFromSeries(it)
|
val seasonEpList = parseEpisodesFromSeries(it)
|
||||||
episodeList.addAll(seasonEpList)
|
episodeList.addAll(seasonEpList)
|
||||||
@ -136,7 +128,6 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
// val SeasonNum = element.ownerDocument().select("div.Title span").text()
|
// val SeasonNum = element.ownerDocument().select("div.Title span").text()
|
||||||
val seasonName = element.ownerDocument().select("span.tagline").text()
|
val seasonName = element.ownerDocument().select("span.tagline").text()
|
||||||
episode.name = "$seasonName : " + element.select("div.episodiotitle a").text()
|
episode.name = "$seasonName : " + element.select("div.episodiotitle a").text()
|
||||||
Log.i("episodelink", element.select("div.episodiotitle a").attr("abs:href"))
|
|
||||||
episode.setUrlWithoutDomain(element.select("div.episodiotitle a").attr("abs:href"))
|
episode.setUrlWithoutDomain(element.select("div.episodiotitle a").attr("abs:href"))
|
||||||
return episode
|
return episode
|
||||||
}
|
}
|
||||||
@ -149,15 +140,12 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun videoListRequest(episode: SEpisode): Request {
|
override fun videoListRequest(episode: SEpisode): Request {
|
||||||
val document = client.newCall(GET(baseUrl + episode.url)).execute().asJsoup()
|
val document = client.newCall(GET(baseUrl + episode.url)).execute().asJsoup()
|
||||||
Log.i("episodelink2", "$document")
|
|
||||||
val iframe = baseUrl + episode.url
|
val iframe = baseUrl + episode.url
|
||||||
Log.i("episodelink1", iframe)
|
|
||||||
return GET(iframe)
|
return GET(iframe)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
Log.i("loooo", "$document")
|
|
||||||
return videosFromElement(document)
|
return videosFromElement(document)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,26 +154,21 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
private fun videosFromElement(document: Document): List<Video> {
|
private fun videosFromElement(document: Document): List<Video> {
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
val elements = document.select(videoListSelector())
|
val elements = document.select(videoListSelector())
|
||||||
Log.i("elements", "$elements")
|
|
||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val location = element.ownerDocument().location()
|
val location = element.ownerDocument().location()
|
||||||
val videoHeaders = Headers.headersOf("Referer", location)
|
val videoHeaders = Headers.headersOf("Referer", location)
|
||||||
val qualityy = element.text()
|
val qualityy = element.text()
|
||||||
val post = element.attr("data-post")
|
val post = element.attr("data-post")
|
||||||
Log.i("lol1", post)
|
|
||||||
val num = element.attr("data-nume")
|
val num = element.attr("data-nume")
|
||||||
Log.i("lol1", num)
|
|
||||||
val type = element.attr("data-type")
|
val type = element.attr("data-type")
|
||||||
Log.i("lol1", type)
|
|
||||||
val pageData = FormBody.Builder()
|
val pageData = FormBody.Builder()
|
||||||
.add("action", "doo_player_ajax")
|
.add("action", "doo_player_ajax")
|
||||||
.add("nume", "$num")
|
.add("nume", num)
|
||||||
.add("post", "$post")
|
.add("post", post)
|
||||||
.add("type", "$type")
|
.add("type", type)
|
||||||
.build()
|
.build()
|
||||||
val url = "https://animerco.com/wp-json/dooplayer/v1/post/$post?type=$type&source=$num"
|
val url = "https://animerco.com/wp-json/dooplayer/v1/post/$post?type=$type&source=$num"
|
||||||
val ajax1 = "https://animerco.com/wp-admin/admin-ajax.php"
|
val ajax1 = "https://animerco.com/wp-admin/admin-ajax.php"
|
||||||
Log.i("lol1", url)
|
|
||||||
// val json = Json.decodeFromString<JsonObject>(Jsoup.connect(url).header("X-Requested-With", "XMLHttpRequest").ignoreContentType(true).execute().body())
|
// val json = Json.decodeFromString<JsonObject>(Jsoup.connect(url).header("X-Requested-With", "XMLHttpRequest").ignoreContentType(true).execute().body())
|
||||||
/*val json = Json.decodeFromString<JsonObject>(
|
/*val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(url))
|
client.newCall(GET(url))
|
||||||
@ -195,11 +178,9 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val ajax = client.newCall(POST(ajax1, videoHeaders, pageData)).execute().asJsoup()
|
val ajax = client.newCall(POST(ajax1, videoHeaders, pageData)).execute().asJsoup()
|
||||||
// client.newCall(GET(url)).execute().body!!.string()
|
// client.newCall(GET(url)).execute().body!!.string()
|
||||||
|
|
||||||
Log.i("lol1", "$ajax")
|
|
||||||
val embedUrlT = ajax.text().substringAfter("embed_url\":\"").substringBefore("\"")
|
val embedUrlT = ajax.text().substringAfter("embed_url\":\"").substringBefore("\"")
|
||||||
val embedUrl = embedUrlT.replace("\\/", "/")
|
val embedUrl = embedUrlT.replace("\\/", "/")
|
||||||
// json!!.jsonArray[0].jsonObject["embed_url"].toString().trim('"')
|
// json!!.jsonArray[0].jsonObject["embed_url"].toString().trim('"')
|
||||||
Log.i("lol1", embedUrl)
|
|
||||||
|
|
||||||
when {
|
when {
|
||||||
embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
@ -13,7 +12,6 @@ import okhttp3.OkHttpClient
|
|||||||
class FembedExtractor(private val client: OkHttpClient) {
|
class FembedExtractor(private val client: OkHttpClient) {
|
||||||
fun videosFromUrl(url: String): List<Video> {
|
fun videosFromUrl(url: String): List<Video> {
|
||||||
val videoApi = url.replace("/v/", "/api/source/").replace("https://www.fembed.com", "https://suzihaza.com")
|
val videoApi = url.replace("/v/", "/api/source/").replace("https://www.fembed.com", "https://suzihaza.com")
|
||||||
Log.i("jsoo", "$videoApi")
|
|
||||||
// val jsonR = Json.decodeFromString<JSONObject>(client.newCall(POST(videoApi)).execute().body!!.string())
|
// val jsonR = Json.decodeFromString<JSONObject>(client.newCall(POST(videoApi)).execute().body!!.string())
|
||||||
/*val jsonR = Json.decodeFromString<JsonObject>(
|
/*val jsonR = Json.decodeFromString<JsonObject>(
|
||||||
Jsoup.connect(videoApi).ignoreContentType(true)
|
Jsoup.connect(videoApi).ignoreContentType(true)
|
||||||
@ -22,18 +20,14 @@ class FembedExtractor(private val client: OkHttpClient) {
|
|||||||
val jsonR = Json.decodeFromString<JsonObject>(
|
val jsonR = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(POST(videoApi)).execute().body!!.string()
|
client.newCall(POST(videoApi)).execute().body!!.string()
|
||||||
)
|
)
|
||||||
Log.i("jsoo", "$jsonR")
|
|
||||||
val jsonText = client.newCall(POST(videoApi)).execute().body!!.string()
|
val jsonText = client.newCall(POST(videoApi)).execute().body!!.string()
|
||||||
Log.i("jsoo", jsonR["success"].toString())
|
|
||||||
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
if (jsonR["success"].toString() == "true") {
|
if (jsonR["success"].toString() == "true") {
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
jsonR["data"]!!.jsonArray.forEach() {
|
jsonR["data"]!!.jsonArray.forEach() {
|
||||||
val videoUrl = it.jsonObject["file"].toString().trim('"')
|
val videoUrl = it.jsonObject["file"].toString().trim('"')
|
||||||
Log.i("jsoon", "$videoUrl")
|
|
||||||
val quality = "Fembed:" + it.jsonObject["label"].toString().trim('"')
|
val quality = "Fembed:" + it.jsonObject["label"].toString().trim('"')
|
||||||
Log.i("jsoon", "$quality")
|
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
||||||
}
|
}
|
||||||
/*val jsonArray = json.getJSONArray("data")
|
/*val jsonArray = json.getJSONArray("data")
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -9,14 +8,12 @@ import okhttp3.OkHttpClient
|
|||||||
class MpforuploadExtractor(private val client: OkHttpClient) {
|
class MpforuploadExtractor(private val client: OkHttpClient) {
|
||||||
fun videoFromUrl(url: String, quality: String): Video? {
|
fun videoFromUrl(url: String, quality: String): Video? {
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
Log.i("lol", "$document")
|
|
||||||
val check = document.select("div.error4shared").text()
|
val check = document.select("div.error4shared").text()
|
||||||
val videoUrl = document.select("source").attr("src")
|
val videoUrl = document.select("source").attr("src")
|
||||||
Log.i("lill", videoUrl)
|
return if (check.contains("This file is not available any more")) {
|
||||||
if (check.contains("This file is not available any more")) {
|
Video(url, "no 1video", "https", null)
|
||||||
return Video(url, "no 1video", "https", null)
|
|
||||||
} else {
|
} else {
|
||||||
return Video(url, quality, videoUrl, null)
|
Video(url, quality, videoUrl, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -9,14 +8,12 @@ import okhttp3.OkHttpClient
|
|||||||
class SharedExtractor(private val client: OkHttpClient) {
|
class SharedExtractor(private val client: OkHttpClient) {
|
||||||
fun videoFromUrl(url: String, quality: String): Video? {
|
fun videoFromUrl(url: String, quality: String): Video? {
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
Log.i("lol", "$document")
|
|
||||||
val check = document.select("div.error4shared").text()
|
val check = document.select("div.error4shared").text()
|
||||||
val videoUrl = document.select("source").attr("src")
|
val videoUrl = document.select("source").attr("src")
|
||||||
Log.i("lill", videoUrl)
|
return if (check.contains("This file is not available any more")) {
|
||||||
if (check.contains("This file is not available any more")) {
|
Video(url, "no 1video", "https", null)
|
||||||
return Video(url, "no 1video", "https", null)
|
|
||||||
} else {
|
} else {
|
||||||
return Video(url, quality, videoUrl, null)
|
Video(url, quality, videoUrl, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -9,14 +8,12 @@ import okhttp3.OkHttpClient
|
|||||||
class UQLoadExtractor(private val client: OkHttpClient) {
|
class UQLoadExtractor(private val client: OkHttpClient) {
|
||||||
fun videoFromUrl(url: String, quality: String): Video? {
|
fun videoFromUrl(url: String, quality: String): Video? {
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
Log.i("lol", "$document")
|
|
||||||
val check = document.selectFirst("script:containsData(sources)").data()
|
val check = document.selectFirst("script:containsData(sources)").data()
|
||||||
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
||||||
Log.i("lill", videoUrl)
|
return if (check.contains("sources")) {
|
||||||
if (check.contains("sources")) {
|
Video(url, quality, videoUrl, null)
|
||||||
return Video(url, quality, videoUrl, null)
|
|
||||||
} else {
|
} else {
|
||||||
return Video(url, "no 1video", "https", null)
|
Video(url, "no 1video", "https", null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
package eu.kanade.tachiyomi.animeextension.ar.animerco.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -10,14 +9,11 @@ class VidBomExtractor(private val client: OkHttpClient) {
|
|||||||
fun videosFromUrl(url: String): List<Video> {
|
fun videosFromUrl(url: String): List<Video> {
|
||||||
val doc = client.newCall(GET(url)).execute().asJsoup()
|
val doc = client.newCall(GET(url)).execute().asJsoup()
|
||||||
val script = doc.selectFirst("script:containsData(sources)")
|
val script = doc.selectFirst("script:containsData(sources)")
|
||||||
Log.i("looool", "$script")
|
|
||||||
val data = script.data().substringAfter("sources: [").substringBefore("],")
|
val data = script.data().substringAfter("sources: [").substringBefore("],")
|
||||||
Log.i("loool", "$data")
|
|
||||||
val sources = data.split("file:\"").drop(1)
|
val sources = data.split("file:\"").drop(1)
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
for (source in sources) {
|
for (source in sources) {
|
||||||
val src = source.substringBefore("\"")
|
val src = source.substringBefore("\"")
|
||||||
Log.i("looo", src)
|
|
||||||
val quality = "Vidbom:" + source.substringAfter("label:\"").substringBefore("\"") // .substringAfter("format: '")
|
val quality = "Vidbom:" + source.substringAfter("label:\"").substringBefore("\"") // .substringAfter("format: '")
|
||||||
val video = Video(src, quality, src, null)
|
val video = Video(src, quality, src, null)
|
||||||
videoList.add(video)
|
videoList.add(video)
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.ar.arabseed
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -71,10 +70,6 @@ class ArabSeed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
val srcVid = preferences.getString("preferred_quality", "سيرفر عرب سيد - 720p")!!
|
val srcVid = preferences.getString("preferred_quality", "سيرفر عرب سيد - 720p")!!
|
||||||
Log.i(
|
|
||||||
"plsWork",
|
|
||||||
document.select("li:contains($srcVid) noscript iframe").attr("src") // :contains($srcVid)
|
|
||||||
)
|
|
||||||
val iframe = document.select("li:contains($srcVid) noscript iframe").attr("src")
|
val iframe = document.select("li:contains($srcVid) noscript iframe").attr("src")
|
||||||
val referer = response.request.url.encodedPath
|
val referer = response.request.url.encodedPath
|
||||||
val newHeaders = Headers.headersOf("referer", baseUrl + referer)
|
val newHeaders = Headers.headersOf("referer", baseUrl + referer)
|
||||||
@ -86,7 +81,6 @@ class ArabSeed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun videoListSelector() = "source" // , video"
|
override fun videoListSelector() = "source" // , video"
|
||||||
|
|
||||||
override fun videoFromElement(element: Element): Video {
|
override fun videoFromElement(element: Element): Video {
|
||||||
Log.i("plsWork", element.attr("src"))
|
|
||||||
return Video(element.attr("src").replace("https", "http"), "Default: If you want to change the quality go to extension settings", element.attr("src").replace("https", "http"), null)
|
return Video(element.attr("src").replace("https", "http"), "Default: If you want to change the quality go to extension settings", element.attr("src").replace("https", "http"), null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.ar.asia2tv
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -109,18 +108,14 @@ class Asia2TV : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
url.contains("https://www.fembed.com") -> {
|
url.contains("https://www.fembed.com") -> {
|
||||||
val apiCall = client.newCall(POST(url.replace("https://www.fembed.com/v", "http://diasfem.com/api/source"))).execute().body!!.string()
|
val apiCall = client.newCall(POST(url.replace("https://www.fembed.com/v", "http://diasfem.com/api/source"))).execute().body!!.string()
|
||||||
Log.i("lol", "$apiCall")
|
|
||||||
val data = apiCall.substringAfter("\"data\":[").substringBefore("],")
|
val data = apiCall.substringAfter("\"data\":[").substringBefore("],")
|
||||||
val sources = data.split("\"file\":\"").drop(1)
|
val sources = data.split("\"file\":\"").drop(1)
|
||||||
val videoList = mutableListOf<Video>()
|
|
||||||
for (source in sources) {
|
for (source in sources) {
|
||||||
val src = source.substringAfter("\"file\":\"").substringBefore("\"").replace("\\/", "/")
|
val src = source.substringAfter("\"file\":\"").substringBefore("\"").replace("\\/", "/")
|
||||||
Log.i("lol", "$src")
|
|
||||||
val quality = source.substringAfter("\"label\":\"").substringBefore("\"")
|
val quality = source.substringAfter("\"label\":\"").substringBefore("\"")
|
||||||
val video = Video(url, quality, src, null)
|
val video = Video(url, quality, src, null)
|
||||||
videoList.add(video)
|
videoList.add(video)
|
||||||
}
|
}
|
||||||
return videoList
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -146,7 +141,6 @@ class Asia2TV : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
Headers.headersOf("referer", url)
|
Headers.headersOf("referer", url)
|
||||||
)
|
)
|
||||||
).execute().body!!.string()
|
).execute().body!!.string()
|
||||||
Log.i("lol", "$videoUrlStart$randomString?token=$token&expiry=$expiry")
|
|
||||||
return "$videoUrlStart$randomString?token=$token&expiry=$expiry"
|
return "$videoUrlStart$randomString?token=$token&expiry=$expiry"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilter
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||||
@ -139,7 +138,6 @@ class Cartoons4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
return GET(url.build().toString(), headers)
|
return GET(url.build().toString(), headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Anime Details
|
// Anime Details
|
||||||
|
|
||||||
override fun animeDetailsParse(document: Document): SAnime {
|
override fun animeDetailsParse(document: Document): SAnime {
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.ar.egybest
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -62,36 +61,29 @@ class EgyBest : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
val episodeList = mutableListOf<SEpisode>()
|
val episodeList = mutableListOf<SEpisode>()
|
||||||
val seriesLink = document.select("div.movie_img a").attr("href")
|
val seriesLink = document.select("div.movie_img a").attr("href")
|
||||||
Log.i("seriesLink", "$seriesLink")
|
|
||||||
if (seriesLink.contains("series")) {
|
if (seriesLink.contains("series")) {
|
||||||
val seasonUrl = seriesLink
|
|
||||||
Log.i("seasonUrl", seasonUrl)
|
|
||||||
val seasonsHtml = client.newCall(
|
val seasonsHtml = client.newCall(
|
||||||
GET(
|
GET(
|
||||||
seasonUrl
|
seriesLink
|
||||||
// headers = Headers.headersOf("Referer", document.location())
|
// headers = Headers.headersOf("Referer", document.location())
|
||||||
)
|
)
|
||||||
).execute().asJsoup()
|
).execute().asJsoup()
|
||||||
Log.i("seasonsHtml", "$seasonsHtml")
|
|
||||||
val seasonP = seasonsHtml.selectFirst("div.contents.movies_small")
|
val seasonP = seasonsHtml.selectFirst("div.contents.movies_small")
|
||||||
val seasonsElements = seasonP.select("a.movie")
|
val seasonsElements = seasonP.select("a.movie")
|
||||||
Log.i("seasonsElements", "$seasonsElements")
|
|
||||||
seasonsElements.forEach {
|
seasonsElements.forEach {
|
||||||
val seasonEpList = parseEpisodesFromSeries(it)
|
val seasonEpList = parseEpisodesFromSeries(it)
|
||||||
episodeList.addAll(seasonEpList)
|
episodeList.addAll(seasonEpList)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val movieUrl = seriesLink
|
|
||||||
val episode = SEpisode.create()
|
val episode = SEpisode.create()
|
||||||
episode.name = document.select("div.movie_title h1 span").text()
|
episode.name = document.select("div.movie_title h1 span").text()
|
||||||
episode.episode_number = 1F
|
episode.episode_number = 1F
|
||||||
episode.setUrlWithoutDomain(movieUrl)
|
episode.setUrlWithoutDomain(seriesLink)
|
||||||
episodeList.add(episode)
|
episodeList.add(episode)
|
||||||
}
|
}
|
||||||
return episodeList
|
return episodeList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
|
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
|
||||||
val episodesUrl = element.attr("abs:href")
|
val episodesUrl = element.attr("abs:href")
|
||||||
val episodesHtml = client.newCall(
|
val episodesHtml = client.newCall(
|
||||||
@ -112,7 +104,6 @@ class EgyBest : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
val seasonName = element.ownerDocument().select("div.movie_title h1").text().replace(" مسلسل ", "")
|
val seasonName = element.ownerDocument().select("div.movie_title h1").text().replace(" مسلسل ", "")
|
||||||
episode.name = "$seasonName : " + element.select("span.title").text()
|
episode.name = "$seasonName : " + element.select("span.title").text()
|
||||||
Log.i("episodelink", element.select("div.episodiotitle a").attr("abs:href"))
|
|
||||||
episode.setUrlWithoutDomain(element.attr("abs:href"))
|
episode.setUrlWithoutDomain(element.attr("abs:href"))
|
||||||
return episode
|
return episode
|
||||||
}
|
}
|
||||||
@ -125,9 +116,7 @@ class EgyBest : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
Log.i("loooo", "$document")
|
|
||||||
val movUrl = document.select("div.movie_img a").attr("href")
|
val movUrl = document.select("div.movie_img a").attr("href")
|
||||||
Log.i("looo", movUrl)
|
|
||||||
val apiUrl = "https://zawmedia-api.herokuapp.com/egybest?url=$movUrl"
|
val apiUrl = "https://zawmedia-api.herokuapp.com/egybest?url=$movUrl"
|
||||||
return videosFromElement(apiUrl)
|
return videosFromElement(apiUrl)
|
||||||
}
|
}
|
||||||
@ -139,16 +128,12 @@ class EgyBest : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
.set("Sec-Fetch-Dest", "document")
|
.set("Sec-Fetch-Dest", "document")
|
||||||
.build()
|
.build()
|
||||||
val document = client.newCall(GET(url, newHeaders)).execute().asJsoup()
|
val document = client.newCall(GET(url, newHeaders)).execute().asJsoup()
|
||||||
Log.i("tessst", "$document")
|
|
||||||
val jjson = document.text()
|
val jjson = document.text()
|
||||||
Log.i("text", jjson)
|
|
||||||
val data = document.text().substringAfter("[").substringBeforeLast("]")
|
val data = document.text().substringAfter("[").substringBeforeLast("]")
|
||||||
Log.i("loool", "$data")
|
|
||||||
val sources = data.split("\"link\":\"").drop(1)
|
val sources = data.split("\"link\":\"").drop(1)
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
for (source in sources) {
|
for (source in sources) {
|
||||||
val src = source.substringBefore("\"")
|
val src = source.substringBefore("\"")
|
||||||
Log.i("looo", src)
|
|
||||||
val quality = source.substringAfter("quality\":").substringBefore("}")
|
val quality = source.substringAfter("quality\":").substringBefore("}")
|
||||||
val video = Video(src, quality, src, null)
|
val video = Video(src, quality, src, null)
|
||||||
videoList.add(video)
|
videoList.add(video)
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.ar.faselhd
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -109,11 +108,9 @@ class FASELHD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun videoListSelector() = "button.hd_btn:contains(auto)"
|
override fun videoListSelector() = "button.hd_btn:contains(auto)"
|
||||||
|
|
||||||
private fun videosFromElement(element: Element, headers: Headers): List<Video> {
|
private fun videosFromElement(element: Element, headers: Headers): List<Video> {
|
||||||
//val masterUrl = element.data().substringAfter("setup({\"file\":\"").substringBefore("\"").replace("\\/", "/")
|
// val masterUrl = element.data().substringAfter("setup({\"file\":\"").substringBefore("\"").replace("\\/", "/")
|
||||||
val masterUrl = element.attr("data-url")
|
val masterUrl = element.attr("data-url")
|
||||||
Log.i("lol", masterUrl)
|
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
||||||
Log.i("lol", "$masterPlaylist")
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.ar.faselhdmovies
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -89,11 +88,9 @@ class FASELHDMOVIES : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun videoListSelector() = "button.hd_btn:contains(auto)"
|
override fun videoListSelector() = "button.hd_btn:contains(auto)"
|
||||||
|
|
||||||
private fun videosFromElement(element: Element, headers: Headers): List<Video> {
|
private fun videosFromElement(element: Element, headers: Headers): List<Video> {
|
||||||
//val masterUrl = element.data().substringAfter("setup({\"file\":\"").substringBefore("\"").replace("\\/", "/")
|
// val masterUrl = element.data().substringAfter("setup({\"file\":\"").substringBefore("\"").replace("\\/", "/")
|
||||||
val masterUrl = element.attr("data-url")
|
val masterUrl = element.attr("data-url")
|
||||||
Log.i("lol", masterUrl)
|
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
||||||
Log.i("lol", "$masterPlaylist")
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.ar.movies4u
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -99,11 +98,9 @@ class Movies4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
|
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
|
||||||
val seasonId = element.select("div.card__content h3.card__title a").attr("href")
|
val seasonId = element.select("div.card__content h3.card__title a").attr("href")
|
||||||
val seasonName = element.select("div.card__content h3.card__title a").text()
|
val seasonName = element.select("div.card__content h3.card__title a").text()
|
||||||
Log.i("seasonname", seasonName)
|
|
||||||
val episodesUrl = seasonId
|
|
||||||
val episodesHtml = client.newCall(
|
val episodesHtml = client.newCall(
|
||||||
GET(
|
GET(
|
||||||
episodesUrl,
|
seasonId,
|
||||||
)
|
)
|
||||||
).execute().asJsoup()
|
).execute().asJsoup()
|
||||||
val episodeElements = episodesHtml.select("div.col-6.col-sm-4.col-md-3.col-xl-2")
|
val episodeElements = episodesHtml.select("div.col-6.col-sm-4.col-md-3.col-xl-2")
|
||||||
@ -125,15 +122,12 @@ class Movies4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
val iframe1 = client.newCall(GET(document.selectFirst("iframe#video").attr("data-src")))
|
val iframe1 = client.newCall(GET(document.selectFirst("iframe#video").attr("data-src")))
|
||||||
.execute().asJsoup()
|
.execute().asJsoup()
|
||||||
Log.i("lol", "$iframe1")
|
|
||||||
val iframe = iframe1.selectFirst("iframe").attr("src")
|
val iframe = iframe1.selectFirst("iframe").attr("src")
|
||||||
|
|
||||||
Log.i("lol", "$iframe")
|
|
||||||
val referer = response.request.url.encodedPath
|
val referer = response.request.url.encodedPath
|
||||||
val newHeaders = Headers.headersOf("referer", baseUrl + referer)
|
val newHeaders = Headers.headersOf("referer", baseUrl + referer)
|
||||||
val iframeResponse = client.newCall(GET(iframe, newHeaders))
|
val iframeResponse = client.newCall(GET(iframe, newHeaders))
|
||||||
.execute().asJsoup()
|
.execute().asJsoup()
|
||||||
Log.i("lol", "$iframeResponse")
|
|
||||||
return videosFromElement(iframeResponse.selectFirst(videoListSelector()))
|
return videosFromElement(iframeResponse.selectFirst(videoListSelector()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,7 +174,6 @@ class Movies4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val tokenUrl = client.newCall(GET(baseUrl))
|
val tokenUrl = client.newCall(GET(baseUrl))
|
||||||
.execute().asJsoup()
|
.execute().asJsoup()
|
||||||
val token = tokenUrl.select("meta[name=csrf-token]").attr("content")
|
val token = tokenUrl.select("meta[name=csrf-token]").attr("content")
|
||||||
Log.i("token", "$token")
|
|
||||||
return token
|
return token
|
||||||
}
|
}
|
||||||
/*private fun loadToken(): String? {
|
/*private fun loadToken(): String? {
|
||||||
@ -212,17 +205,15 @@ class Movies4U : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
when (filter) {
|
when (filter) {
|
||||||
is GenreList -> {
|
is GenreList -> {
|
||||||
if (filter.state > 0) {
|
if (filter.state > 0) {
|
||||||
val GenreN = getGenreList()[filter.state].query
|
val genreN = getGenreList()[filter.state].query
|
||||||
val genreUrl = "$baseUrl/movies?category=$GenreN&quality=&imdb=0.0|10.0&year=1900|2021&page=$page"
|
val genreUrl = "$baseUrl/movies?category=$genreN&quality=&imdb=0.0|10.0&year=1900|2021&page=$page"
|
||||||
Log.i("lol", genreUrl)
|
|
||||||
return GET(genreUrl, headers)
|
return GET(genreUrl, headers)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is GenreList2 -> {
|
is GenreList2 -> {
|
||||||
if (filter.state > 0) {
|
if (filter.state > 0) {
|
||||||
val GenreN = getGenreList()[filter.state].query
|
val genreN = getGenreList()[filter.state].query
|
||||||
val genreUrl = "$baseUrl/series?category=$GenreN&quality=undefined&imdb=0.0|10.0&year=1900|2021&page=$page"
|
val genreUrl = "$baseUrl/series?category=$genreN&quality=undefined&imdb=0.0|10.0&year=1900|2021&page=$page"
|
||||||
Log.i("lol", genreUrl)
|
|
||||||
return GET(genreUrl, headers)
|
return GET(genreUrl, headers)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.en.allmovies
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -95,7 +94,6 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
|
private fun parseEpisodesFromSeries(element: Element): List<SEpisode> {
|
||||||
val seasonId = element.attr("abs:href")
|
val seasonId = element.attr("abs:href")
|
||||||
val seasonName = element.text()
|
val seasonName = element.text()
|
||||||
Log.i("seasonname", seasonName)
|
|
||||||
val episodesUrl = seasonId
|
val episodesUrl = seasonId
|
||||||
val episodesHtml = client.newCall(
|
val episodesHtml = client.newCall(
|
||||||
GET(
|
GET(
|
||||||
@ -135,7 +133,6 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val elements = document.select(videoListSelector())
|
val elements = document.select(videoListSelector())
|
||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val url = element.attr("abs:src")
|
val url = element.attr("abs:src")
|
||||||
Log.i("lol", url)
|
|
||||||
val location = element.ownerDocument().location()
|
val location = element.ownerDocument().location()
|
||||||
val videoHeaders = Headers.headersOf("Referer", location)
|
val videoHeaders = Headers.headersOf("Referer", location)
|
||||||
when {
|
when {
|
||||||
@ -149,9 +146,7 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val script = response.selectFirst("script:containsData(m3u8)")
|
val script = response.selectFirst("script:containsData(m3u8)")
|
||||||
val data = script.data()
|
val data = script.data()
|
||||||
val masterUrl = masterExtractor(data)
|
val masterUrl = masterExtractor(data)
|
||||||
Log.i("lol1", masterUrl)
|
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body!!.string()
|
||||||
Log.i("lol2", masterPlaylist)
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
||||||
@ -205,7 +200,6 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
Headers.headersOf("referer", url)
|
Headers.headersOf("referer", url)
|
||||||
)
|
)
|
||||||
).execute().body!!.string()
|
).execute().body!!.string()
|
||||||
Log.i("lol", "$videoUrlStart$randomString?token=$token&expiry=$expiry")
|
|
||||||
return "$videoUrlStart$randomString?token=$token&expiry=$expiry"
|
return "$videoUrlStart$randomString?token=$token&expiry=$expiry"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,7 +268,6 @@ class AllMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
anime.title = document.select("div.TPMvCn h1.Title").text()
|
anime.title = document.select("div.TPMvCn h1.Title").text()
|
||||||
anime.genre = document.select("p.Genre a").joinToString(", ") { it.text() }
|
anime.genre = document.select("p.Genre a").joinToString(", ") { it.text() }
|
||||||
Log.i("status", document.select("div.Info").text())
|
|
||||||
anime.status = parseStatus(document.select("div.Info").text()) // span.Qlty
|
anime.status = parseStatus(document.select("div.Info").text()) // span.Qlty
|
||||||
anime.author = document.select("p.Director span a").joinToString(", ") { it.text() }
|
anime.author = document.select("p.Director span a").joinToString(", ") { it.text() }
|
||||||
anime.description = document.select("div.TPMvCn div.Description p:first-of-type").text()
|
anime.description = document.select("div.TPMvCn div.Description p:first-of-type").text()
|
||||||
|
@ -60,7 +60,7 @@ class AnimeKisa : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun popularAnimeNextPageSelector(): String = "ul.pagination li.page-item a[rel=next]"
|
override fun popularAnimeNextPageSelector(): String = "ul.pagination li.page-item a[rel=next]"
|
||||||
|
|
||||||
// episodes
|
// episodes
|
||||||
|
|
||||||
override fun episodeListParse(response: Response): List<SEpisode> {
|
override fun episodeListParse(response: Response): List<SEpisode> {
|
||||||
return super.episodeListParse(response).reversed()
|
return super.episodeListParse(response).reversed()
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.en.animepahe
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import androidx.preference.SwitchPreferenceCompat
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
@ -175,7 +174,6 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() {
|
|||||||
override fun episodeListRequest(anime: SAnime): Request {
|
override fun episodeListRequest(anime: SAnime): Request {
|
||||||
val animeId = anime.url.substringAfterLast("?anime_id=")
|
val animeId = anime.url.substringAfterLast("?anime_id=")
|
||||||
val session = getSession(anime.title, animeId)
|
val session = getSession(anime.title, animeId)
|
||||||
Log.i("bruh", session)
|
|
||||||
return GET("$baseUrl/api?m=release&id=$session&sort=episode_desc&page=1")
|
return GET("$baseUrl/api?m=release&id=$session&sort=episode_desc&page=1")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.en.asianload
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.en.asianload.extractors.DoodExtractor
|
import eu.kanade.tachiyomi.animeextension.en.asianload.extractors.DoodExtractor
|
||||||
@ -106,7 +105,6 @@ class AsianLoad : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val elements = document.select(videoListSelector())
|
val elements = document.select(videoListSelector())
|
||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val url = element.attr("data-video")
|
val url = element.attr("data-video")
|
||||||
Log.i("lol", url)
|
|
||||||
val location = element.ownerDocument().location()
|
val location = element.ownerDocument().location()
|
||||||
val videoHeaders = Headers.headersOf("Referer", location)
|
val videoHeaders = Headers.headersOf("Referer", location)
|
||||||
when {
|
when {
|
||||||
|
@ -29,7 +29,7 @@ class StreamSBExtractor(private val client: OkHttpClient) {
|
|||||||
val bytes = id.toByteArray()
|
val bytes = id.toByteArray()
|
||||||
val bytesToHex = bytesToHex(bytes)
|
val bytesToHex = bytesToHex(bytes)
|
||||||
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
||||||
//"https://sbplay2.com/sourcesx38/4f395a53447166635a3836787c7c${bytesToHex}7c7c7965344f61436d467845586c7c7c73747265616d7362/6e56314c77564e6a6c6631737c7c333735383537363836633662373635323636376133343637376337633335346334343332353735343333366633343635346336383763376334313561373633343761346133303665363837363537353937633763373337343732363536313664373336327c7c395239444c3961626d634e6a7c7c73747265616d7362"
|
// "https://sbplay2.com/sourcesx38/4f395a53447166635a3836787c7c${bytesToHex}7c7c7965344f61436d467845586c7c7c73747265616d7362/6e56314c77564e6a6c6631737c7c333735383537363836633662373635323636376133343637376337633335346334343332353735343333366633343635346336383763376334313561373633343761346133303665363837363537353937633763373337343732363536313664373336327c7c395239444c3961626d634e6a7c7c73747265616d7362"
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(master, headers))
|
client.newCall(GET(master, headers))
|
||||||
.execute().body!!.string()
|
.execute().body!!.string()
|
||||||
|
@ -4,7 +4,6 @@ import android.app.Application
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -85,7 +84,7 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val seasonsElements = seasonsHtml.select("a.dropdown-item.ss-item")
|
val seasonsElements = seasonsHtml.select("a.dropdown-item.ss-item")
|
||||||
seasonsElements.forEach {
|
seasonsElements.forEach {
|
||||||
val seasonEpList = parseEpisodesFromSeries(it)
|
val seasonEpList = parseEpisodesFromSeries(it)
|
||||||
episodeList.addAll(seasonEpList)
|
episodeList.addAll(seasonEpList)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val movieUrl = "https://dopebox.to/ajax/movie/episodes/$id"
|
val movieUrl = "https://dopebox.to/ajax/movie/episodes/$id"
|
||||||
@ -139,14 +138,11 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
// get embed id
|
// get embed id
|
||||||
val getVidID = document.selectFirst("a").attr("data-id")
|
val getVidID = document.selectFirst("a").attr("data-id")
|
||||||
Log.i("lol2", "$getVidID")
|
|
||||||
val getVidApi = client.newCall(GET("https://dopebox.to/ajax/get_link/" + getVidID)).execute().asJsoup()
|
val getVidApi = client.newCall(GET("https://dopebox.to/ajax/get_link/" + getVidID)).execute().asJsoup()
|
||||||
|
|
||||||
// streamrapid URL
|
// streamrapid URL
|
||||||
val getVideoEmbed = getVidApi.text().substringAfter("link\":\"").substringBefore("\"")
|
val getVideoEmbed = getVidApi.text().substringAfter("link\":\"").substringBefore("\"")
|
||||||
Log.i("lol3", "$getVideoEmbed")
|
|
||||||
val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?")
|
val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?")
|
||||||
Log.i("videoEmbedId", "$videoEmbedUrlId")
|
|
||||||
val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup()
|
val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup()
|
||||||
val uri = Uri.parse(getVideoEmbed)
|
val uri = Uri.parse(getVideoEmbed)
|
||||||
val domain = (Base64.encodeToString((uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), Base64.NO_PADDING) + ".").replace("\n", "")
|
val domain = (Base64.encodeToString((uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), Base64.NO_PADDING) + ".").replace("\n", "")
|
||||||
@ -167,7 +163,6 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
.build()
|
.build()
|
||||||
val iframeResponse = client.newCall(GET(jsonLink, reloadHeaderss))
|
val iframeResponse = client.newCall(GET(jsonLink, reloadHeaderss))
|
||||||
.execute().asJsoup()
|
.execute().asJsoup()
|
||||||
Log.i("iframere", "$iframeResponse")
|
|
||||||
|
|
||||||
return videosFromElement(iframeResponse)
|
return videosFromElement(iframeResponse)
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.en.dramacool
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.en.dramacool.extractors.DoodExtractor
|
import eu.kanade.tachiyomi.animeextension.en.dramacool.extractors.DoodExtractor
|
||||||
@ -104,7 +103,6 @@ class DramaCool : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val elements = document.select(videoListSelector())
|
val elements = document.select(videoListSelector())
|
||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val url = element.attr("data-video")
|
val url = element.attr("data-video")
|
||||||
Log.i("lol", url)
|
|
||||||
val location = element.ownerDocument().location()
|
val location = element.ownerDocument().location()
|
||||||
val videoHeaders = Headers.headersOf("Referer", location)
|
val videoHeaders = Headers.headersOf("Referer", location)
|
||||||
when {
|
when {
|
||||||
|
@ -29,7 +29,7 @@ class StreamSBExtractor(private val client: OkHttpClient) {
|
|||||||
val bytes = id.toByteArray()
|
val bytes = id.toByteArray()
|
||||||
val bytesToHex = bytesToHex(bytes)
|
val bytesToHex = bytesToHex(bytes)
|
||||||
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
||||||
//"https://sbplay2.com/sourcesx38/4f395a53447166635a3836787c7c${bytesToHex}7c7c7965344f61436d467845586c7c7c73747265616d7362/6e56314c77564e6a6c6631737c7c333735383537363836633662373635323636376133343637376337633335346334343332353735343333366633343635346336383763376334313561373633343761346133303665363837363537353937633763373337343732363536313664373336327c7c395239444c3961626d634e6a7c7c73747265616d7362"
|
// "https://sbplay2.com/sourcesx38/4f395a53447166635a3836787c7c${bytesToHex}7c7c7965344f61436d467845586c7c7c73747265616d7362/6e56314c77564e6a6c6631737c7c333735383537363836633662373635323636376133343637376337633335346334343332353735343333366633343635346336383763376334313561373633343761346133303665363837363537353937633763373337343732363536313664373336327c7c395239444c3961626d634e6a7c7c73747265616d7362"
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(master, headers))
|
client.newCall(GET(master, headers))
|
||||||
.execute().body!!.string()
|
.execute().body!!.string()
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.en.genoanime
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.en.genoanime.extractors.DoodExtractor
|
import eu.kanade.tachiyomi.animeextension.en.genoanime.extractors.DoodExtractor
|
||||||
@ -121,7 +120,6 @@ class GenoAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val elements = document.select(videoListSelector())
|
val elements = document.select(videoListSelector())
|
||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val url = element.attr("data-video")
|
val url = element.attr("data-video")
|
||||||
Log.i("lol", url)
|
|
||||||
val location = element.ownerDocument().location()
|
val location = element.ownerDocument().location()
|
||||||
val videoHeaders = Headers.headersOf("Referer", location)
|
val videoHeaders = Headers.headersOf("Referer", location)
|
||||||
when {
|
when {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.en.genoanime.extractors
|
package eu.kanade.tachiyomi.animeextension.en.genoanime.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
@ -27,21 +26,15 @@ class StreamSBExtractor(private val client: OkHttpClient) {
|
|||||||
|
|
||||||
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
||||||
val id = url.substringAfter("e/")
|
val id = url.substringAfter("e/")
|
||||||
Log.i("id", id)
|
|
||||||
val bytes = id.toByteArray()
|
val bytes = id.toByteArray()
|
||||||
Log.i("bytes", "$bytes")
|
|
||||||
val bytesToHex = bytesToHex(bytes)
|
val bytesToHex = bytesToHex(bytes)
|
||||||
Log.i("bytesToHex", bytesToHex)
|
|
||||||
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
||||||
Log.i("master", master)
|
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(master, headers))
|
client.newCall(GET(master, headers))
|
||||||
.execute().body!!.string()
|
.execute().body!!.string()
|
||||||
)
|
)
|
||||||
Log.i("json", "$json")
|
|
||||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
||||||
Log.i("masterplayl", masterPlaylist)
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.en.gogoanime.extractors
|
package eu.kanade.tachiyomi.animeextension.en.gogoanime.extractors
|
||||||
|
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -25,7 +24,6 @@ import javax.crypto.spec.SecretKeySpec
|
|||||||
class GogoCdnExtractor(private val client: OkHttpClient, private val json: Json) {
|
class GogoCdnExtractor(private val client: OkHttpClient, private val json: Json) {
|
||||||
fun videosFromUrl(serverUrl: String): List<Video> {
|
fun videosFromUrl(serverUrl: String): List<Video> {
|
||||||
try {
|
try {
|
||||||
Log.i("bruh", serverUrl)
|
|
||||||
val document = client.newCall(GET(serverUrl)).execute().asJsoup()
|
val document = client.newCall(GET(serverUrl)).execute().asJsoup()
|
||||||
val iv = document.select("div.wrapper")
|
val iv = document.select("div.wrapper")
|
||||||
.attr("class").substringAfter("container-")
|
.attr("class").substringAfter("container-")
|
||||||
@ -41,13 +39,11 @@ class GogoCdnExtractor(private val client: OkHttpClient, private val json: Json)
|
|||||||
.attr("data-value"),
|
.attr("data-value"),
|
||||||
iv, secretKey, false
|
iv, secretKey, false
|
||||||
).substringAfter("&")
|
).substringAfter("&")
|
||||||
Log.i("bruh", encryptAjaxParams)
|
|
||||||
|
|
||||||
val httpUrl = serverUrl.toHttpUrl()
|
val httpUrl = serverUrl.toHttpUrl()
|
||||||
val host = "https://" + httpUrl.host + "/"
|
val host = "https://" + httpUrl.host + "/"
|
||||||
val id = httpUrl.queryParameter("id") ?: throw Exception("error getting id")
|
val id = httpUrl.queryParameter("id") ?: throw Exception("error getting id")
|
||||||
val encryptedId = cryptoHandler(id, iv, secretKey)
|
val encryptedId = cryptoHandler(id, iv, secretKey)
|
||||||
Log.i("bruh", "${host}encrypt-ajax.php?id=$encryptedId&$encryptAjaxParams&alias=$id")
|
|
||||||
val token = httpUrl.queryParameter("token")
|
val token = httpUrl.queryParameter("token")
|
||||||
val qualityPrefix = if (token != null) "Gogostream: " else "Vidstreaming: "
|
val qualityPrefix = if (token != null) "Gogostream: " else "Vidstreaming: "
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ import android.app.Application
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -40,7 +39,7 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override val client: OkHttpClient = network.cloudflareClient
|
override val client: OkHttpClient = network.cloudflareClient
|
||||||
|
|
||||||
//private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.."
|
// private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.."
|
||||||
|
|
||||||
private val preferences: SharedPreferences by lazy {
|
private val preferences: SharedPreferences by lazy {
|
||||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||||
@ -139,14 +138,11 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
// get embed id
|
// get embed id
|
||||||
val getVidID = document.selectFirst("a").attr("data-id")
|
val getVidID = document.selectFirst("a").attr("data-id")
|
||||||
Log.i("lol2", "$getVidID")
|
|
||||||
val getVidApi = client.newCall(GET("https://dopebox.to/ajax/get_link/" + getVidID)).execute().asJsoup()
|
val getVidApi = client.newCall(GET("https://dopebox.to/ajax/get_link/" + getVidID)).execute().asJsoup()
|
||||||
|
|
||||||
// streamrapid URL
|
// streamrapid URL
|
||||||
val getVideoEmbed = getVidApi.text().substringAfter("link\":\"").substringBefore("\"")
|
val getVideoEmbed = getVidApi.text().substringAfter("link\":\"").substringBefore("\"")
|
||||||
Log.i("lol3", "$getVideoEmbed")
|
|
||||||
val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?")
|
val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?")
|
||||||
Log.i("videoEmbedId", "$videoEmbedUrlId")
|
|
||||||
val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup()
|
val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup()
|
||||||
val uri = Uri.parse(getVideoEmbed)
|
val uri = Uri.parse(getVideoEmbed)
|
||||||
val domain = (Base64.encodeToString((uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), Base64.NO_PADDING) + ".").replace("\n", "")
|
val domain = (Base64.encodeToString((uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), Base64.NO_PADDING) + ".").replace("\n", "")
|
||||||
@ -167,7 +163,6 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
.build()
|
.build()
|
||||||
val iframeResponse = client.newCall(GET(jsonLink, reloadHeaderss))
|
val iframeResponse = client.newCall(GET(jsonLink, reloadHeaderss))
|
||||||
.execute().asJsoup()
|
.execute().asJsoup()
|
||||||
Log.i("iframere", "$iframeResponse")
|
|
||||||
|
|
||||||
return videosFromElement(iframeResponse)
|
return videosFromElement(iframeResponse)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.en.vidembed.extractors
|
package eu.kanade.tachiyomi.animeextension.en.vidembed.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
@ -27,21 +26,15 @@ class StreamSBExtractor(private val client: OkHttpClient) {
|
|||||||
|
|
||||||
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
||||||
val id = url.substringAfter("e/").substringBefore("?")
|
val id = url.substringAfter("e/").substringBefore("?")
|
||||||
Log.i("id", id)
|
|
||||||
val bytes = id.toByteArray()
|
val bytes = id.toByteArray()
|
||||||
Log.i("bytes", "$bytes")
|
|
||||||
val bytesToHex = bytesToHex(bytes)
|
val bytesToHex = bytesToHex(bytes)
|
||||||
Log.i("bytesToHex", bytesToHex)
|
|
||||||
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
||||||
Log.i("master", master)
|
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(master, headers))
|
client.newCall(GET(master, headers))
|
||||||
.execute().body!!.string()
|
.execute().body!!.string()
|
||||||
)
|
)
|
||||||
Log.i("json", "$json")
|
|
||||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
||||||
Log.i("masterplayl", masterPlaylist)
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.en.wcostream
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||||
@ -92,21 +91,16 @@ class WCOStream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val referer = response.request.url.encodedPath
|
val referer = response.request.url.encodedPath
|
||||||
val newHeaders = Headers.headersOf("referer", baseUrl + referer)
|
val newHeaders = Headers.headersOf("referer", baseUrl + referer)
|
||||||
val iframe = document.selectFirst("div#servers-list ul.nav li a:contains(VidStream)").attr("data-embed")
|
val iframe = document.selectFirst("div#servers-list ul.nav li a:contains(VidStream)").attr("data-embed")
|
||||||
Log.i("lol0", iframe)
|
|
||||||
val getSKey = client.newCall(GET(iframe, newHeaders)).execute().body!!.string() // .asJsoup()
|
val getSKey = client.newCall(GET(iframe, newHeaders)).execute().body!!.string() // .asJsoup()
|
||||||
Log.i("lol1", "$getSKey")
|
|
||||||
val sKey = getSKey.substringAfter("window.skey = '").substringBefore("'")
|
val sKey = getSKey.substringAfter("window.skey = '").substringBefore("'")
|
||||||
Log.i("lol2", sKey)
|
|
||||||
val apiHeaders = headers.newBuilder()
|
val apiHeaders = headers.newBuilder()
|
||||||
.set("referer1", "$iframe")
|
.set("referer1", "$iframe")
|
||||||
.build()
|
.build()
|
||||||
val apiLink = iframe.replace("/e/", "/info/") + "&skey=" + sKey
|
val apiLink = iframe.replace("/e/", "/info/") + "&skey=" + sKey
|
||||||
Log.i("lol3", apiLink)
|
|
||||||
/*val referer = response.request.url.toString()
|
/*val referer = response.request.url.toString()
|
||||||
val refererHeaders = Headers.headersOf("referer", referer)*/
|
val refererHeaders = Headers.headersOf("referer", referer)*/
|
||||||
val iframeResponse = client.newCall(GET(apiLink, apiHeaders))
|
val iframeResponse = client.newCall(GET(apiLink, apiHeaders))
|
||||||
.execute().asJsoup()
|
.execute().asJsoup()
|
||||||
Log.i("lol4", "$iframeResponse")
|
|
||||||
return videosFromElement(iframeResponse) // .selectFirst(videoListSelector())
|
return videosFromElement(iframeResponse) // .selectFirst(videoListSelector())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,9 +108,7 @@ class WCOStream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
private fun videosFromElement(element: Element): List<Video> {
|
private fun videosFromElement(element: Element): List<Video> {
|
||||||
val masterUrl = element.text().substringAfterLast("file\":\"").substringBeforeLast("\"}").replace("\\/", "/")
|
val masterUrl = element.text().substringAfterLast("file\":\"").substringBeforeLast("\"}").replace("\\/", "/")
|
||||||
Log.i("lol5", masterUrl)
|
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body!!.string()
|
||||||
Log.i("lol6", "$masterPlaylist")
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore("hls").replace("\n", "") + "p"
|
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore("hls").replace("\n", "") + "p"
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.es.animefenix
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.animefenix.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.animefenix.extractors.FembedExtractor
|
||||||
@ -66,7 +65,6 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
jsoup.select("ul.anime-page__episode-list.is-size-6 li").forEach { it ->
|
jsoup.select("ul.anime-page__episode-list.is-size-6 li").forEach { it ->
|
||||||
|
|
||||||
val epNum = it.select("a span").text().replace("Episodio", "")
|
val epNum = it.select("a span").text().replace("Episodio", "")
|
||||||
Log.i("bruh", "Episode-$epNum")
|
|
||||||
val episode = SEpisode.create().apply {
|
val episode = SEpisode.create().apply {
|
||||||
episode_number = epNum.toFloat()
|
episode_number = epNum.toFloat()
|
||||||
name = "Episodio $epNum"
|
name = "Episodio $epNum"
|
||||||
@ -95,8 +93,6 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
.substringAfter("code=")
|
.substringAfter("code=")
|
||||||
.substringBefore("&")
|
.substringBefore("&")
|
||||||
|
|
||||||
Log.i("bruh", "1Server:$server, ServerId:$serverId")
|
|
||||||
|
|
||||||
if (server == "Fembed" || server == "fembed") {
|
if (server == "Fembed" || server == "fembed") {
|
||||||
val fembedUrl = "https://www.fembed.com/v/$serverCode"
|
val fembedUrl = "https://www.fembed.com/v/$serverCode"
|
||||||
val video = FembedExtractor().videosFromUrl(fembedUrl)
|
val video = FembedExtractor().videosFromUrl(fembedUrl)
|
||||||
@ -126,7 +122,6 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val videoUrl = jsoup.select("body script").toString()
|
val videoUrl = jsoup.select("body script").toString()
|
||||||
.substringAfter("[{\"file\":\"")
|
.substringAfter("[{\"file\":\"")
|
||||||
.substringBefore("\",").replace("\\", "")
|
.substringBefore("\",").replace("\\", "")
|
||||||
Log.i("bruh", videoUrl)
|
|
||||||
return videoUrl
|
return videoUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.animefenix.extractors
|
package eu.kanade.tachiyomi.animeextension.es.animefenix.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -14,7 +13,6 @@ class SolidFilesExtractor(private val client: OkHttpClient) {
|
|||||||
if (script.data().contains("\"downloadUrl\":")) {
|
if (script.data().contains("\"downloadUrl\":")) {
|
||||||
val data = script.data().substringAfter("\"downloadUrl\":").substringBefore(",")
|
val data = script.data().substringAfter("\"downloadUrl\":").substringBefore(",")
|
||||||
val url = data.replace("\"", "")
|
val url = data.replace("\"", "")
|
||||||
Log.i("bruh", "$url")
|
|
||||||
val videoUrl = url
|
val videoUrl = url
|
||||||
val quality = "SolidFiles"
|
val quality = "SolidFiles"
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.animeflv.extractors
|
package eu.kanade.tachiyomi.animeextension.es.animeflv.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
@ -27,22 +26,16 @@ class StreamSBExtractor(private val client: OkHttpClient) {
|
|||||||
|
|
||||||
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
||||||
val id = url.substringAfter("e/").substringBefore(".html")
|
val id = url.substringAfter("e/").substringBefore(".html")
|
||||||
Log.i("id", id)
|
|
||||||
val bytes = id.toByteArray()
|
val bytes = id.toByteArray()
|
||||||
Log.i("bytes", "$bytes")
|
|
||||||
val bytesToHex = bytesToHex(bytes)
|
val bytesToHex = bytesToHex(bytes)
|
||||||
Log.i("bytesToHex", bytesToHex)
|
|
||||||
val master =
|
val master =
|
||||||
"https://embedsb.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
"https://embedsb.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
||||||
Log.i("master", master)
|
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(master, headers))
|
client.newCall(GET(master, headers))
|
||||||
.execute().body!!.string()
|
.execute().body!!.string()
|
||||||
)
|
)
|
||||||
Log.i("json", "$json")
|
|
||||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
||||||
Log.i("masterplayl", masterPlaylist)
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x")
|
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x")
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.es.hentaila
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.hentaila.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.hentaila.extractors.FembedExtractor
|
||||||
@ -69,14 +68,11 @@ class Hentaila : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun episodeListParse(response: Response): List<SEpisode> {
|
override fun episodeListParse(response: Response): List<SEpisode> {
|
||||||
val episodes = mutableListOf<SEpisode>()
|
val episodes = mutableListOf<SEpisode>()
|
||||||
val animeId = response.request.url.toString().replace("https://hentaila.com/hentai-", "").toLowerCase()
|
val animeId = response.request.url.toString().replace("https://hentaila.com/hentai-", "").toLowerCase()
|
||||||
Log.i("bruh", "AnimeID: $animeId")
|
|
||||||
val jsoup = response.asJsoup()
|
val jsoup = response.asJsoup()
|
||||||
|
|
||||||
jsoup.select("div.episodes-list article").forEach { it ->
|
jsoup.select("div.episodes-list article").forEach { it ->
|
||||||
val epNum = it.select("a").attr("href").replace("/ver/$animeId-", "")
|
val epNum = it.select("a").attr("href").replace("/ver/$animeId-", "")
|
||||||
val test = it.select("a").attr("href")
|
val test = it.select("a").attr("href")
|
||||||
Log.i("bruh", "TEST: $test")
|
|
||||||
Log.i("bruh", "Episode-$epNum")
|
|
||||||
val episode = SEpisode.create().apply {
|
val episode = SEpisode.create().apply {
|
||||||
episode_number = epNum.toFloat()
|
episode_number = epNum.toFloat()
|
||||||
name = "Episodio $epNum"
|
name = "Episodio $epNum"
|
||||||
@ -96,20 +92,15 @@ class Hentaila : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
Log.i("bruh", "${response.request.url}")
|
|
||||||
document.select("script").forEach { it ->
|
document.select("script").forEach { it ->
|
||||||
if (it.data().contains("var videos = [")) {
|
if (it.data().contains("var videos = [")) {
|
||||||
val data = it.data().substringAfter("var videos = [").substringBefore("];")
|
val data = it.data().substringAfter("var videos = [").substringBefore("];")
|
||||||
val arcUrl = data.substringAfter("[\"Arc\",\"").substringBefore("\",").replace("\\", "")
|
val arcUrl = data.substringAfter("[\"Arc\",\"").substringBefore("\",").replace("\\", "")
|
||||||
val fembedUrl = data.substringAfter("[\"Fembed\",\"").substringBefore("\",").replace("\\", "")
|
val fembedUrl = data.substringAfter("[\"Fembed\",\"").substringBefore("\",").replace("\\", "")
|
||||||
if (fembedUrl != null) {
|
val videos = FembedExtractor().videosFromUrl(fembedUrl)
|
||||||
val videos = FembedExtractor().videosFromUrl(fembedUrl)
|
videoList.addAll(videos)
|
||||||
videoList.addAll(videos)
|
val url = arcUrl.replace("/direct.html#", "")
|
||||||
}
|
videoList.add(Video(url, "Arc", url, null))
|
||||||
if (arcUrl != null) {
|
|
||||||
val url = arcUrl.replace("/direct.html#", "")
|
|
||||||
videoList.add(Video(url, "Arc", url, null))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return videoList
|
return videoList
|
||||||
@ -151,7 +142,6 @@ class Hentaila : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
// val animeSlug = anime["slug"]
|
// val animeSlug = anime["slug"]
|
||||||
|
|
||||||
// }
|
// }
|
||||||
Log.i("bruh", "$jsonObject.toString()")
|
|
||||||
return when {
|
return when {
|
||||||
query.isNotBlank() && jsonObject.toString() != "[]" -> GET("https://hentaila.com/hentai-${JSONObject(jsonObject[0].toString())["slug"]}")
|
query.isNotBlank() && jsonObject.toString() != "[]" -> GET("https://hentaila.com/hentai-${JSONObject(jsonObject[0].toString())["slug"]}")
|
||||||
genreFilter.state != 0 -> GET("$baseUrl/genero/${genreFilter.toUriPart()}?p=$page")
|
genreFilter.state != 0 -> GET("$baseUrl/genero/${genreFilter.toUriPart()}?p=$page")
|
||||||
@ -160,8 +150,6 @@ class Hentaila : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun searchAnimeFromElement(element: Element): SAnime {
|
override fun searchAnimeFromElement(element: Element): SAnime {
|
||||||
Log.i("bruh", "${element.select("article.hentai-single")}")
|
|
||||||
|
|
||||||
val animeId = element.select("article.hentai-single header.h-header h1").text().replace(" ", "-").replace("!", "")
|
val animeId = element.select("article.hentai-single header.h-header h1").text().replace(" ", "-").replace("!", "")
|
||||||
|
|
||||||
val animeSearch = SAnime.create()
|
val animeSearch = SAnime.create()
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.es.jkhentai
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.jkhentai.extractors.StreamTapeExtractor
|
import eu.kanade.tachiyomi.animeextension.es.jkhentai.extractors.StreamTapeExtractor
|
||||||
@ -61,12 +60,9 @@ class Jkhentai : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
val jsoup = response.asJsoup()
|
val jsoup = response.asJsoup()
|
||||||
val animeId = response.request.url.pathSegments.last().replace("-sub-espanol", "").replace("-080p", "-1080p")
|
val animeId = response.request.url.pathSegments.last().replace("-sub-espanol", "").replace("-080p", "-1080p")
|
||||||
Log.i("bruh", "$animeId")
|
|
||||||
jsoup.select("div#contenedor div.items.ptts div#movie div.post div#cssmenu ul li.has-sub.open ul li").forEach { it ->
|
jsoup.select("div#contenedor div.items.ptts div#movie div.post div#cssmenu ul li.has-sub.open ul li").forEach { it ->
|
||||||
Log.i("bruh", "e")
|
|
||||||
|
|
||||||
val epNum = it.select("a").attr("href").replace("https://www.jkhentai.net/ver/$animeId-", "")
|
val epNum = it.select("a").attr("href").replace("https://www.jkhentai.net/ver/$animeId-", "")
|
||||||
Log.i("bruh", "Episode-$epNum")
|
|
||||||
val episode = SEpisode.create().apply {
|
val episode = SEpisode.create().apply {
|
||||||
episode_number = epNum.toFloat()
|
episode_number = epNum.toFloat()
|
||||||
name = "Episodio $epNum"
|
name = "Episodio $epNum"
|
||||||
@ -88,7 +84,6 @@ class Jkhentai : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
document.select("div#contenedor div.items.ptts div#movie div.post div#player-container ul.player-menu li").forEach { it ->
|
document.select("div#contenedor div.items.ptts div#movie div.post div#player-container ul.player-menu li").forEach { it ->
|
||||||
val server = it.select("a").text()
|
val server = it.select("a").text()
|
||||||
Log.i("bruh", "1Server:$server")
|
|
||||||
document.select("div#contenedor div.items.ptts div#movie div.post div#player-container div.play-c").forEach() {
|
document.select("div#contenedor div.items.ptts div#movie div.post div#player-container div.play-c").forEach() {
|
||||||
if (server == "StreamTape") {
|
if (server == "StreamTape") {
|
||||||
val url = it.select("div.player-content iframe").attr("src")
|
val url = it.select("div.player-content iframe").attr("src")
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.jkhentai.extractors
|
package eu.kanade.tachiyomi.animeextension.es.jkhentai.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -14,7 +13,6 @@ class SolidFilesExtractor(private val client: OkHttpClient) {
|
|||||||
if (script.data().contains("\"downloadUrl\":")) {
|
if (script.data().contains("\"downloadUrl\":")) {
|
||||||
val data = script.data().substringAfter("\"downloadUrl\":").substringBefore(",")
|
val data = script.data().substringAfter("\"downloadUrl\":").substringBefore(",")
|
||||||
val url = data.replace("\"", "")
|
val url = data.replace("\"", "")
|
||||||
Log.i("bruh", "$url")
|
|
||||||
val videoUrl = url
|
val videoUrl = url
|
||||||
val quality = "SolidFiles"
|
val quality = "SolidFiles"
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
||||||
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.animeextension.es.monoschinos
|
|||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
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.monoschinos.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors.FembedExtractor
|
||||||
@ -64,11 +63,9 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
val jsoup = response.asJsoup()
|
val jsoup = response.asJsoup()
|
||||||
val animeId = response.request.url.pathSegments.last().replace("-sub-espanol", "").replace("-080p", "-1080p")
|
val animeId = response.request.url.pathSegments.last().replace("-sub-espanol", "").replace("-080p", "-1080p")
|
||||||
Log.i("bruh", "$animeId")
|
|
||||||
jsoup.select("div.heroarea2 div.heromain2 div.allanimes div.row.jpage.row-cols-md-6 div.col-item").forEach { it ->
|
jsoup.select("div.heroarea2 div.heromain2 div.allanimes div.row.jpage.row-cols-md-6 div.col-item").forEach { it ->
|
||||||
|
|
||||||
val epNum = it.attr("data-episode")
|
val epNum = it.attr("data-episode")
|
||||||
Log.i("bruh", "Episode-$epNum")
|
|
||||||
val episode = SEpisode.create().apply {
|
val episode = SEpisode.create().apply {
|
||||||
episode_number = epNum.toFloat()
|
episode_number = epNum.toFloat()
|
||||||
name = "Episodio $epNum"
|
name = "Episodio $epNum"
|
||||||
@ -92,9 +89,7 @@ class MonosChinos : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val server = it.select("a").text()
|
val server = it.select("a").text()
|
||||||
val urlBase64 = it.select("a").attr("data-player")
|
val urlBase64 = it.select("a").attr("data-player")
|
||||||
val url1 = Base64.decode(urlBase64, Base64.DEFAULT)
|
val url1 = Base64.decode(urlBase64, Base64.DEFAULT)
|
||||||
Log.i("bruh", "$url1")
|
|
||||||
val url = String(url1).replace("https://monoschinos2.com/reproductor?url=", "")
|
val url = String(url1).replace("https://monoschinos2.com/reproductor?url=", "")
|
||||||
Log.i("bruh", "$url")
|
|
||||||
|
|
||||||
if (server == "fembed" || server == "Fembed") {
|
if (server == "fembed" || server == "Fembed") {
|
||||||
val videos = FembedExtractor().videosFromUrl(url)
|
val videos = FembedExtractor().videosFromUrl(url)
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors
|
package eu.kanade.tachiyomi.animeextension.es.monoschinos.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -13,9 +12,7 @@ class SolidFilesExtractor(private val client: OkHttpClient) {
|
|||||||
document.select("script").forEach { script ->
|
document.select("script").forEach { script ->
|
||||||
if (script.data().contains("\"downloadUrl\":")) {
|
if (script.data().contains("\"downloadUrl\":")) {
|
||||||
val data = script.data().substringAfter("\"downloadUrl\":").substringBefore(",")
|
val data = script.data().substringAfter("\"downloadUrl\":").substringBefore(",")
|
||||||
val url = data.replace("\"", "")
|
val videoUrl = data.replace("\"", "")
|
||||||
Log.i("bruh", "$url")
|
|
||||||
val videoUrl = url
|
|
||||||
val quality = "SolidFiles"
|
val quality = "SolidFiles"
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.animeextension.es.pelisplushd
|
|||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
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.pelisplushd.extractors.FembedExtractor
|
import eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors.FembedExtractor
|
||||||
@ -71,14 +70,12 @@ class Pelisplushd : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
episodes.add(episode)
|
episodes.add(episode)
|
||||||
} else {
|
} else {
|
||||||
jsoup.select("div.tab-content div a").forEachIndexed { index, element ->
|
jsoup.select("div.tab-content div a").forEachIndexed { index, element ->
|
||||||
Log.i("bruh", "episodio:$index, nombre:${element.text()}")
|
|
||||||
val epNum = index + 1
|
val epNum = index + 1
|
||||||
val episode = SEpisode.create()
|
val episode = SEpisode.create()
|
||||||
episode.episode_number = epNum.toFloat()
|
episode.episode_number = epNum.toFloat()
|
||||||
episode.name = element.text()
|
episode.name = element.text()
|
||||||
episode.setUrlWithoutDomain(element.attr("href"))
|
episode.setUrlWithoutDomain(element.attr("href"))
|
||||||
episodes.add(episode)
|
episodes.add(episode)
|
||||||
Log.i("bruh", episodes[index].name)
|
|
||||||
}
|
}
|
||||||
episodes.removeLast()
|
episodes.removeLast()
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors
|
package eu.kanade.tachiyomi.animeextension.es.pelisplushd.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
@ -27,22 +26,16 @@ class StreamSBExtractor(private val client: OkHttpClient) {
|
|||||||
|
|
||||||
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
||||||
val id = url.substringAfter("embed-").substringBefore(".html").substringAfter("/e/")
|
val id = url.substringAfter("embed-").substringBefore(".html").substringAfter("/e/")
|
||||||
Log.i("id", id)
|
|
||||||
val bytes = id.toByteArray()
|
val bytes = id.toByteArray()
|
||||||
Log.i("bytes", "$bytes")
|
|
||||||
val bytesToHex = bytesToHex(bytes)
|
val bytesToHex = bytesToHex(bytes)
|
||||||
Log.i("bytesToHex", bytesToHex)
|
|
||||||
val master =
|
val master =
|
||||||
"https://embedsb.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
"https://embedsb.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
||||||
Log.i("master", master)
|
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(master, headers))
|
client.newCall(GET(master, headers))
|
||||||
.execute().body!!.string()
|
.execute().body!!.string()
|
||||||
)
|
)
|
||||||
Log.i("json", "$json")
|
|
||||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
||||||
Log.i("masterplayl", masterPlaylist)
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x")
|
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x")
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.fr.vostfree
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.fr.vostfree.extractors.DoodExtractor
|
import eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors.DoodExtractor
|
||||||
@ -57,7 +56,6 @@ class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun popularAnimeRequest(page: Int): Request = GET("https://vostfree.tv/films-vf-vostfr/page/$page/")
|
override fun popularAnimeRequest(page: Int): Request = GET("https://vostfree.tv/films-vf-vostfr/page/$page/")
|
||||||
|
|
||||||
override fun popularAnimeFromElement(element: Element): SAnime {
|
override fun popularAnimeFromElement(element: Element): SAnime {
|
||||||
Log.i("bruh", "${element.baseUri()}")
|
|
||||||
val anime = SAnime.create()
|
val anime = SAnime.create()
|
||||||
anime.setUrlWithoutDomain(
|
anime.setUrlWithoutDomain(
|
||||||
element.select("div.movie-poster div.play a").attr("href")
|
element.select("div.movie-poster div.play a").attr("href")
|
||||||
@ -74,8 +72,6 @@ class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val jsoup = response.asJsoup()
|
val jsoup = response.asJsoup()
|
||||||
jsoup.select("select.new_player_selector option").forEach { it ->
|
jsoup.select("select.new_player_selector option").forEach { it ->
|
||||||
val epNum = it.text().replace("Episode", "").drop(2)
|
val epNum = it.text().replace("Episode", "").drop(2)
|
||||||
Log.i("Bruh", "Episodio:$epNum")
|
|
||||||
Log.i("bruh", "${response.request.url}-episode:0;")
|
|
||||||
|
|
||||||
if (it.text() == "Film") {
|
if (it.text() == "Film") {
|
||||||
val episode = SEpisode.create().apply {
|
val episode = SEpisode.create().apply {
|
||||||
@ -104,10 +100,8 @@ class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun episodeFromElement(element: Element) = throw Exception("not used")
|
override fun episodeFromElement(element: Element) = throw Exception("not used")
|
||||||
|
|
||||||
override fun videoListParse(response: Response): List<Video> {
|
override fun videoListParse(response: Response): List<Video> {
|
||||||
Log.i("bruh", "aaa${response.request.url}")
|
|
||||||
val epNum = response.request.url.toString().substringAfter("https://vostfree.tv/?episode:").substringBefore("/")
|
val epNum = response.request.url.toString().substringAfter("https://vostfree.tv/?episode:").substringBefore("/")
|
||||||
val realUrl = response.request.url.toString().replace("https://vostfree.tv/?episode:$epNum/", "")
|
val realUrl = response.request.url.toString().replace("https://vostfree.tv/?episode:$epNum/", "")
|
||||||
Log.i("bruh", "RealURL: $realUrl")
|
|
||||||
val document = Jsoup.connect(realUrl).get()
|
val document = Jsoup.connect(realUrl).get()
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
val allPlayerIds = document.select("div.tab-content div div.new_player_top div.new_player_bottom div.button_box")[epNum.toInt()]
|
val allPlayerIds = document.select("div.tab-content div div.new_player_top div.new_player_bottom div.button_box")[epNum.toInt()]
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors
|
package eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -14,7 +13,6 @@ class MytvExtractor(private val client: OkHttpClient) {
|
|||||||
if (script.data().contains("CreatePlayer(\"v")) {
|
if (script.data().contains("CreatePlayer(\"v")) {
|
||||||
val videosString = script.data().toString()
|
val videosString = script.data().toString()
|
||||||
val videoUrl = videosString.substringAfter("\"v=").substringBefore("\\u0026tp=video").replace("%26", "&").replace("%3a", ":").replace("%2f", "/").replace("%3f", "?").replace("%3d", "=")
|
val videoUrl = videosString.substringAfter("\"v=").substringBefore("\\u0026tp=video").replace("%26", "&").replace("%3a", ":").replace("%2f", "/").replace("%3f", "?").replace("%3d", "=")
|
||||||
Log.i("bruh", "URL: $videoUrl")
|
|
||||||
if (!videoUrl.contains("https:")) {
|
if (!videoUrl.contains("https:")) {
|
||||||
val videoUrl = "https:$videoUrl"
|
val videoUrl = "https:$videoUrl"
|
||||||
videoList.add(Video(videoUrl, "Stream", videoUrl, null))
|
videoList.add(Video(videoUrl, "Stream", videoUrl, null))
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors
|
package eu.kanade.tachiyomi.animeextension.fr.vostfree.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
@ -8,15 +7,11 @@ import okhttp3.OkHttpClient
|
|||||||
|
|
||||||
class VudeoExtractor(private val client: OkHttpClient) {
|
class VudeoExtractor(private val client: OkHttpClient) {
|
||||||
fun videosFromUrl(url: String): List<Video> {
|
fun videosFromUrl(url: String): List<Video> {
|
||||||
Log.i("bruh", "test12")
|
|
||||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
document.select("script").forEach { script ->
|
document.select("script").forEach { script ->
|
||||||
if (script.data().contains("sources: [\"")) {
|
if (script.data().contains("sources: [\"")) {
|
||||||
val data = script.data().substringAfter("sources: [\"").substringBefore("\"],")
|
val videoUrl = script.data().substringAfter("sources: [\"").substringBefore("\"],")
|
||||||
val url = data
|
|
||||||
Log.i("bruh", "$url")
|
|
||||||
val videoUrl = url
|
|
||||||
val quality = "Vudeo"
|
val quality = "Vudeo"
|
||||||
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
videoList.add(Video(videoUrl, quality, videoUrl, null))
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.hi.animeWorld
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.hi.animeWorld.extractors.StreamSBExtractor
|
import eu.kanade.tachiyomi.animeextension.hi.animeWorld.extractors.StreamSBExtractor
|
||||||
@ -73,7 +72,6 @@ class AnimeWorld : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
episodeList
|
episodeList
|
||||||
} else {
|
} else {
|
||||||
val seasonDataElements = document.select("li.sel-temp")
|
val seasonDataElements = document.select("li.sel-temp")
|
||||||
Log.d("season", seasonDataElements.toString())
|
|
||||||
val episodesList = mutableListOf<SEpisode>()
|
val episodesList = mutableListOf<SEpisode>()
|
||||||
seasonDataElements.map {
|
seasonDataElements.map {
|
||||||
val epList = episodeFromSeason(it)
|
val epList = episodeFromSeason(it)
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.hi.animeWorld.extractors
|
package eu.kanade.tachiyomi.animeextension.hi.animeWorld.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
@ -28,21 +27,15 @@ class StreamSBExtractor(private val client: OkHttpClient) {
|
|||||||
|
|
||||||
fun videosFromUrl(url: String, headers: Headers, language: String): List<Video> {
|
fun videosFromUrl(url: String, headers: Headers, language: String): List<Video> {
|
||||||
val id = url.substringAfter("e/").substringBefore(".html")
|
val id = url.substringAfter("e/").substringBefore(".html")
|
||||||
Log.i("id", id)
|
|
||||||
val bytes = id.toByteArray()
|
val bytes = id.toByteArray()
|
||||||
Log.i("bytes", "$bytes")
|
|
||||||
val bytesToHex = bytesToHex(bytes)
|
val bytesToHex = bytesToHex(bytes)
|
||||||
Log.i("bytesToHex", bytesToHex)
|
|
||||||
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
val master = "https://sbplay2.com/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
||||||
Log.i("master", master)
|
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(master, headers))
|
client.newCall(GET(master, headers))
|
||||||
.execute().body!!.string()
|
.execute().body!!.string()
|
||||||
)
|
)
|
||||||
Log.i("json", "$json")
|
|
||||||
val masterUrl = json["stream_data"]!!.jsonObject["file"]!!.jsonPrimitive.content
|
val masterUrl = json["stream_data"]!!.jsonObject["file"]!!.jsonPrimitive.content
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
||||||
Log.i("masterplayl", masterPlaylist)
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = "$language :" + it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
val quality = "$language :" + it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
|
||||||
|
@ -19,10 +19,7 @@ import org.jsoup.nodes.Element
|
|||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.lang.Exception
|
import java.lang.Exception
|
||||||
import java.lang.RuntimeException
|
|
||||||
import java.lang.StringBuilder
|
|
||||||
import java.net.URLDecoder
|
import java.net.URLDecoder
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
class MiniOppai : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
class MiniOppai : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||||
@ -42,7 +39,7 @@ class MiniOppai : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
anime.title = infox.select("div.infox > h1").text().replace("Judul: ", "")
|
anime.title = infox.select("div.infox > h1").text().replace("Judul: ", "")
|
||||||
anime.genre = infox.select("div.spe > span:nth-child(1)").joinToString(", ") { it.text() }
|
anime.genre = infox.select("div.spe > span:nth-child(1)").joinToString(", ") { it.text() }
|
||||||
anime.status = status
|
anime.status = status
|
||||||
anime.artist = infox.select("div.spe > span:nth-child(3)").text().replace("Studio: ","")
|
anime.artist = infox.select("div.spe > span:nth-child(3)").text().replace("Studio: ", "")
|
||||||
anime.author = "UNKNOWN"
|
anime.author = "UNKNOWN"
|
||||||
anime.description = "Synopsis: \n" + document.select("div.desc > div > span").text()
|
anime.description = "Synopsis: \n" + document.select("div.desc > div > span").text()
|
||||||
return anime
|
return anime
|
||||||
@ -186,4 +183,4 @@ class MiniOppai : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
screen.addPreference(videoQualityPref)
|
screen.addPreference(videoQualityPref)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.it.animeworld
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.it.animeworld.extractors.DoodExtractor
|
import eu.kanade.tachiyomi.animeextension.it.animeworld.extractors.DoodExtractor
|
||||||
@ -93,7 +92,6 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val elements = document.select(videoListSelector())
|
val elements = document.select(videoListSelector())
|
||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
val url = element.attr("href")
|
val url = element.attr("href")
|
||||||
Log.i("lol", url)
|
|
||||||
val location = element.ownerDocument().location()
|
val location = element.ownerDocument().location()
|
||||||
val videoHeaders = Headers.headersOf("Referer", location)
|
val videoHeaders = Headers.headersOf("Referer", location)
|
||||||
when {
|
when {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.it.animeworld.extractors
|
package eu.kanade.tachiyomi.animeextension.it.animeworld.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import okhttp3.Headers
|
import okhttp3.Headers
|
||||||
@ -26,7 +25,6 @@ class DoodExtractor(private val client: OkHttpClient) {
|
|||||||
).execute().body!!.string()
|
).execute().body!!.string()
|
||||||
val videoUrl = "$videoUrlStart$randomString?token=$token&expiry=$expiry"
|
val videoUrl = "$videoUrlStart$randomString?token=$token&expiry=$expiry"
|
||||||
val newQuality = "Doodstream mirror"
|
val newQuality = "Doodstream mirror"
|
||||||
Log.i("lol", "$videoUrlStart$randomString?token=$token&expiry=$expiry")
|
|
||||||
|
|
||||||
return Video(url, newQuality, videoUrl, null, doodHeaders(doodTld))
|
return Video(url, newQuality, videoUrl, null, doodHeaders(doodTld))
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.it.animeworld.extractors
|
package eu.kanade.tachiyomi.animeextension.it.animeworld.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
@ -27,22 +26,16 @@ class StreamSBExtractor(private val client: OkHttpClient) {
|
|||||||
|
|
||||||
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
fun videosFromUrl(url: String, headers: Headers): List<Video> {
|
||||||
val id = url.substringAfter("e/").substringBefore(".html")
|
val id = url.substringAfter("e/").substringBefore(".html")
|
||||||
Log.i("id", id)
|
|
||||||
val bytes = id.toByteArray()
|
val bytes = id.toByteArray()
|
||||||
Log.i("bytes", "$bytes")
|
|
||||||
val bytesToHex = bytesToHex(bytes)
|
val bytesToHex = bytesToHex(bytes)
|
||||||
Log.i("bytesToHex", bytesToHex)
|
|
||||||
val master =
|
val master =
|
||||||
"https://animeworld.biz/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
"https://animeworld.biz/sources43/566d337678566f743674494a7c7c${bytesToHex}7c7c346b6767586d6934774855537c7c73747265616d7362/6565417268755339773461447c7c346133383438333436313335376136323337373433383634376337633465366534393338373136643732373736343735373237613763376334363733353737303533366236333463353333363534366137633763373337343732363536313664373336327c7c6b586c3163614468645a47617c7c73747265616d7362"
|
||||||
Log.i("master", master)
|
|
||||||
val json = Json.decodeFromString<JsonObject>(
|
val json = Json.decodeFromString<JsonObject>(
|
||||||
client.newCall(GET(master, headers))
|
client.newCall(GET(master, headers))
|
||||||
.execute().body!!.string()
|
.execute().body!!.string()
|
||||||
)
|
)
|
||||||
Log.i("json", "$json")
|
|
||||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
||||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
|
||||||
Log.i("masterplayl", masterPlaylist)
|
|
||||||
val videoList = mutableListOf<Video>()
|
val videoList = mutableListOf<Video>()
|
||||||
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
|
||||||
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x")
|
val quality = "StreamSB:" + it.substringAfter("RESOLUTION=").substringAfter("x")
|
||||||
|
@ -51,7 +51,7 @@ class AnimeFire : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
.add("Referer", baseUrl)
|
.add("Referer", baseUrl)
|
||||||
.add("Accept-Language", ACCEPT_LANGUAGE)
|
.add("Accept-Language", ACCEPT_LANGUAGE)
|
||||||
|
|
||||||
// ============================== Popular ===============================
|
// ============================== Popular ===============================
|
||||||
override fun popularAnimeSelector() = latestUpdatesSelector()
|
override fun popularAnimeSelector() = latestUpdatesSelector()
|
||||||
override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/top-animes/$page")
|
override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/top-animes/$page")
|
||||||
override fun popularAnimeFromElement(element: Element) = latestUpdatesFromElement(element)
|
override fun popularAnimeFromElement(element: Element) = latestUpdatesFromElement(element)
|
||||||
@ -102,11 +102,11 @@ class AnimeFire : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
private fun searchAnimeRequest(page: Int, query: String, filters: AFFilters.FilterSearchParams): Request {
|
private fun searchAnimeRequest(page: Int, query: String, filters: AFFilters.FilterSearchParams): Request {
|
||||||
if (query.isBlank()) {
|
if (query.isBlank()) {
|
||||||
return when {
|
return when {
|
||||||
!filters.season.isBlank() -> GET("$baseUrl/temporada/${filters.season}/$page")
|
filters.season.isNotBlank() -> GET("$baseUrl/temporada/${filters.season}/$page")
|
||||||
else -> GET("$baseUrl/genero/${filters.genre}/$page")
|
else -> GET("$baseUrl/genero/${filters.genre}/$page")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val fixedQuery = query.trim().replace(" ", "-").toLowerCase()
|
val fixedQuery = query.trim().replace(" ", "-").lowercase()
|
||||||
return GET("$baseUrl/pesquisar/$fixedQuery/$page")
|
return GET("$baseUrl/pesquisar/$fixedQuery/$page")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ class AnimeFire : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/home/$page")
|
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/home/$page")
|
||||||
|
|
||||||
// ============================== Settings ==============================
|
// ============================== Settings ==============================
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
key = PREFERRED_QUALITY
|
key = PREFERRED_QUALITY
|
||||||
@ -200,7 +200,7 @@ class AnimeFire : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val newList = mutableListOf<Video>()
|
val newList = mutableListOf<Video>()
|
||||||
var preferred = 0
|
var preferred = 0
|
||||||
for (video in this) {
|
for (video in this) {
|
||||||
if (video.quality.equals(quality)) {
|
if (video.quality == quality) {
|
||||||
newList.add(preferred, video)
|
newList.add(preferred, video)
|
||||||
preferred++
|
preferred++
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.pt.animesvision.extractors
|
package eu.kanade.tachiyomi.animeextension.pt.animesvision.extractors
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import eu.kanade.tachiyomi.animesource.model.Video
|
import eu.kanade.tachiyomi.animesource.model.Video
|
||||||
|
|
||||||
class VisionFreeExtractor {
|
class VisionFreeExtractor {
|
||||||
@ -12,7 +11,6 @@ class VisionFreeExtractor {
|
|||||||
return REGEX_VISION_PLAYER.findAll(html).map {
|
return REGEX_VISION_PLAYER.findAll(html).map {
|
||||||
val videoUrl = it.groupValues[1].replace("\\", "")
|
val videoUrl = it.groupValues[1].replace("\\", "")
|
||||||
val quality = it.groupValues[2]
|
val quality = it.groupValues[2]
|
||||||
Log.i(TAG, "$videoUrl -> $quality")
|
|
||||||
Video(videoUrl, quality, videoUrl, null)
|
Video(videoUrl, quality, videoUrl, null)
|
||||||
}.toList()
|
}.toList()
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.pt.animeyabu
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.pt.animeyabu.AYFilters.applyFilterParams
|
import eu.kanade.tachiyomi.animeextension.pt.animeyabu.AYFilters.applyFilterParams
|
||||||
@ -59,7 +58,7 @@ class AnimeYabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
.add("Accept-Language", AYConstants.ACCEPT_LANGUAGE)
|
.add("Accept-Language", AYConstants.ACCEPT_LANGUAGE)
|
||||||
.add("Referer", baseUrl)
|
.add("Referer", baseUrl)
|
||||||
|
|
||||||
// ============================== Popular ===============================
|
// ============================== Popular ===============================
|
||||||
override fun popularAnimeSelector(): String = "div.video-thumb > a.clip-link"
|
override fun popularAnimeSelector(): String = "div.video-thumb > a.clip-link"
|
||||||
override fun popularAnimeRequest(page: Int): Request = GET(baseUrl)
|
override fun popularAnimeRequest(page: Int): Request = GET(baseUrl)
|
||||||
|
|
||||||
@ -70,7 +69,6 @@ class AnimeYabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
anime.setUrlWithoutDomain(element.attr("href"))
|
anime.setUrlWithoutDomain(element.attr("href"))
|
||||||
anime.title = img.attr("title")
|
anime.title = img.attr("title")
|
||||||
anime.thumbnail_url = "$baseUrl/${img.attr("src")}"
|
anime.thumbnail_url = "$baseUrl/${img.attr("src")}"
|
||||||
Log.i("ID", "$id")
|
|
||||||
return anime
|
return anime
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +222,7 @@ class AnimeYabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page/")
|
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page/")
|
||||||
|
|
||||||
// ============================== Settings ==============================
|
// ============================== Settings ==============================
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
|
|
||||||
val videoPlayerPref = ListPreference(screen.context).apply {
|
val videoPlayerPref = ListPreference(screen.context).apply {
|
||||||
|
@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.animeextension.pt.betteranime
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
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.pt.betteranime.dto.LivewireResponseDto
|
import eu.kanade.tachiyomi.animeextension.pt.betteranime.dto.LivewireResponseDto
|
||||||
@ -62,7 +61,7 @@ class BetterAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
.add("Referer", baseUrl)
|
.add("Referer", baseUrl)
|
||||||
.add("Accept-Language", ACCEPT_LANGUAGE)
|
.add("Accept-Language", ACCEPT_LANGUAGE)
|
||||||
|
|
||||||
// ============================== Popular ===============================
|
// ============================== Popular ===============================
|
||||||
private fun nextPageSelector(): String = "ul.pagination li.page-item:contains(›)"
|
private fun nextPageSelector(): String = "ul.pagination li.page-item:contains(›)"
|
||||||
override fun popularAnimeNextPageSelector() = throw Exception("not used")
|
override fun popularAnimeNextPageSelector() = throw Exception("not used")
|
||||||
override fun popularAnimeSelector(): String = "div.list-animes article"
|
override fun popularAnimeSelector(): String = "div.list-animes article"
|
||||||
@ -215,7 +214,7 @@ class BetterAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override fun latestUpdatesParse(response: Response) = popularAnimeParse(response)
|
override fun latestUpdatesParse(response: Response) = popularAnimeParse(response)
|
||||||
|
|
||||||
// ============================== Settings ==============================
|
// ============================== Settings ==============================
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val videoQualityPref = ListPreference(screen.context).apply {
|
val videoQualityPref = ListPreference(screen.context).apply {
|
||||||
key = PREFERRED_QUALITY
|
key = PREFERRED_QUALITY
|
||||||
@ -274,7 +273,6 @@ class BetterAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val url = "$baseUrl/livewire/message/$path"
|
val url = "$baseUrl/livewire/message/$path"
|
||||||
val items = updates.joinToString(",") { json.encodeToString(it) }
|
val items = updates.joinToString(",") { json.encodeToString(it) }
|
||||||
val data = "$INITIAL_DATA, \"updates\": [$items]}"
|
val data = "$INITIAL_DATA, \"updates\": [$items]}"
|
||||||
Log.d("wireData", data)
|
|
||||||
val reqBody = data.toRequestBody("application/json".toMediaType())
|
val reqBody = data.toRequestBody("application/json".toMediaType())
|
||||||
val headers = headersBuilder()
|
val headers = headersBuilder()
|
||||||
.add("x-livewire", "true")
|
.add("x-livewire", "true")
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.animeextension.pt.betteranime.dto
|
package eu.kanade.tachiyomi.animeextension.pt.betteranime.dto
|
||||||
|
|
||||||
import kotlinx.serialization.EncodeDefault
|
import kotlinx.serialization.EncodeDefault
|
||||||
|
import kotlinx.serialization.ExperimentalSerializationApi
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.builtins.ListSerializer
|
import kotlinx.serialization.builtins.ListSerializer
|
||||||
import kotlinx.serialization.builtins.serializer
|
import kotlinx.serialization.builtins.serializer
|
||||||
@ -23,12 +24,14 @@ data class LivewireEffects(
|
|||||||
val html: String? = null
|
val html: String? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ExperimentalSerializationApi
|
||||||
@Serializable
|
@Serializable
|
||||||
data class PayloadItem(
|
data class PayloadItem(
|
||||||
val payload: PayloadData,
|
val payload: PayloadData,
|
||||||
val type: String
|
val type: String
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ExperimentalSerializationApi
|
||||||
@Serializable
|
@Serializable
|
||||||
data class PayloadData(
|
data class PayloadData(
|
||||||
val name: String = "",
|
val name: String = "",
|
||||||
|
@ -143,7 +143,7 @@ class AnimevostSource(override val name: String, override val baseUrl: String, p
|
|||||||
if (animeData.rating != null && animeData.votes != null) {
|
if (animeData.rating != null && animeData.votes != null) {
|
||||||
val rating = (animeData.rating.toDouble() / animeData.votes.toDouble()).roundToInt()
|
val rating = (animeData.rating.toDouble() / animeData.votes.toDouble()).roundToInt()
|
||||||
|
|
||||||
description += "Рейтинг: ${"★".repeat(rating)}${"☆".repeat(Math.max(5 - rating, 0))} (Голосов: ${animeData.votes})\n"
|
description += "Рейтинг: ${"★".repeat(rating)}${"☆".repeat((5 - rating).coerceAtLeast(0))} (Голосов: ${animeData.votes})\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (animeData.type != null) {
|
if (animeData.type != null) {
|
||||||
@ -256,6 +256,7 @@ class AnimevostSource(override val name: String, override val baseUrl: String, p
|
|||||||
sortDirection = if (filter.state!!.ascending) SortDirection.ASC else SortDirection.DESC
|
sortDirection = if (filter.state!!.ascending) SortDirection.ASC else SortDirection.DESC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user