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