diff --git a/src/ar/animerco/build.gradle b/src/ar/animerco/build.gradle index 5fb54ba9e..635582ca9 100644 --- a/src/ar/animerco/build.gradle +++ b/src/ar/animerco/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Animerco' pkgNameSuffix = 'ar.animerco' extClass = '.Animerco' - extVersionCode = 16 + extVersionCode = 17 libVersion = '13' } @@ -14,6 +14,7 @@ dependencies { implementation(project(':lib-streamtape-extractor')) implementation(project(':lib-streamsb-extractor')) implementation(project(':lib-dood-extractor')) + implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1" } apply from: "$rootDir/common.gradle" diff --git a/src/ar/animerco/src/eu/kanade/tachiyomi/animeextension/ar/animerco/Animerco.kt b/src/ar/animerco/src/eu/kanade/tachiyomi/animeextension/ar/animerco/Animerco.kt index 4a06a546d..fbac355a0 100644 --- a/src/ar/animerco/src/eu/kanade/tachiyomi/animeextension/ar/animerco/Animerco.kt +++ b/src/ar/animerco/src/eu/kanade/tachiyomi/animeextension/ar/animerco/Animerco.kt @@ -4,7 +4,7 @@ import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen -import eu.kanade.tachiyomi.animeextension.ar.animerco.extractors.MpforuploadExtractor +import eu.kanade.tachiyomi.animeextension.ar.animerco.extractors.GdrivePlayerExtractor import eu.kanade.tachiyomi.animeextension.ar.animerco.extractors.SharedExtractor import eu.kanade.tachiyomi.animeextension.ar.animerco.extractors.UQLoadExtractor import eu.kanade.tachiyomi.animeextension.ar.animerco.extractors.VidBomExtractor @@ -19,7 +19,9 @@ import eu.kanade.tachiyomi.lib.fembedextractor.FembedExtractor import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.FormBody import okhttp3.Headers import okhttp3.OkHttpClient import okhttp3.Request @@ -52,19 +54,19 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() { // Popular Anime - override fun popularAnimeSelector(): String = "div.items article.item" + override fun popularAnimeSelector(): String = "div.media-block" override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/animes/page/$page/") // page/$page override fun popularAnimeFromElement(element: Element): SAnime { val anime = SAnime.create() - anime.setUrlWithoutDomain(element.select("div.data a").attr("href")) - anime.thumbnail_url = element.select("div.poster img").attr("src") - anime.title = element.select("div.data a").text() + anime.setUrlWithoutDomain(element.select("a").attr("href")) + anime.thumbnail_url = element.select("a").attr("data-src") + anime.title = element.select("div.info a h3").text() return anime } - override fun popularAnimeNextPageSelector(): String = "i#nextpagination" + override fun popularAnimeNextPageSelector(): String = "a.ti-arrow-left-c" // Episodes @@ -73,60 +75,56 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun episodeListParse(response: Response): List { val document = response.asJsoup() val episodeList = mutableListOf() - val seriesLink1 = document.select("ol[itemscope] li:last-child a").attr("href") - val seriesLink = document.select("input[name=red]").attr("value") - val type = document.select("div.dtsingle").attr("itemtype").substringAfterLast("/") - if (type.contains("Series")) { + // val seriesLink1 = document.select("ol[itemscope] li:last-child a").attr("href") + val seriesLink = document.select("link[rel=canonical]").attr("href") + val type = document.select("link[rel=canonical]").attr("href") + if (type.contains("animes")) { val seasonsHtml = client.newCall( GET( seriesLink // headers = Headers.headersOf("Referer", document.location()) ) ).execute().asJsoup() - val seasonsElements = seasonsHtml.select("div.seasontitle a") - seasonsElements.forEach { + val seasonsElements = seasonsHtml.select("ul.chapters-list li a.title") + seasonsElements.reversed().forEach { val seasonEpList = parseEpisodesFromSeries(it) episodeList.addAll(seasonEpList) } } else { val movieUrl = seriesLink val episode = SEpisode.create() - episode.name = document.select("div.data h1").text() + episode.name = document.select("span.alt-title").text() episode.episode_number = 1F episode.setUrlWithoutDomain(movieUrl) episodeList.add(episode) } - return episodeList.reversed() + return episodeList } - // override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used") - private fun parseEpisodesFromSeries(element: Element): List { - // val seasonId = element.attr("abs:href") val seasonName = element.text() - // Log.i("seasonname", seasonName) val episodesUrl = element.attr("abs:href") val episodesHtml = client.newCall( GET( episodesUrl, ) ).execute().asJsoup() - val episodeElements = episodesHtml.select("ul.episodios li") + val episodeElements = episodesHtml.select("ul.chapters-list li") return episodeElements.map { episodeFromElement(it) } } override fun episodeFromElement(element: Element): SEpisode { val episode = SEpisode.create() - val epNum = getNumberFromEpsString(element.select("div.episodiotitle a").text()) + val epNum = getNumberFromEpsString(element.select("a.title h3").text()) episode.episode_number = when { (epNum.isNotEmpty()) -> epNum.toFloat() else -> 1F } // element.select("td > span.Num").text().toFloat() // 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() - episode.setUrlWithoutDomain(element.select("div.episodiotitle a").attr("abs:href")) + val seasonName = element.ownerDocument().select("div.media-title h1").text() + episode.name = "$seasonName : " + element.select("a.title h3").text() + episode.setUrlWithoutDomain(element.select("a.title").attr("abs:href")) return episode } @@ -136,18 +134,12 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() { // Video urls - override fun videoListRequest(episode: SEpisode): Request { - val document = client.newCall(GET(baseUrl + episode.url)).execute().asJsoup() - val iframe = baseUrl + episode.url - return GET(iframe) - } - override fun videoListParse(response: Response): List