feat(multisrc/dooplay): New source: AnimePlayer(pt) (#1566)

* feat(multisrc/dooplay): Add animeplayer override base

* fix: Fix popular animes page

* fix: Fix latest animes page

* fix: Fix genres filter

* feat: Add video extractor

* chore: Add source icon
This commit is contained in:
Claudemirovsky
2023-05-01 04:25:06 -03:00
committed by GitHub
parent f25ae53fa2
commit cdb1fbeaec
8 changed files with 63 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,36 @@
package eu.kanade.tachiyomi.animeextension.pt.animeplayer
import eu.kanade.tachiyomi.animeextension.pt.animeplayer.extractors.BloggerExtractor
import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.Response
class AnimePlayer : DooPlay(
"pt-BR",
"AnimePlayer",
"https://animeplayer.com.br",
) {
// ============================== Popular ===============================
override fun popularAnimeSelector() = "div#featured-titles article div.poster"
override fun popularAnimeRequest(page: Int) = GET("$baseUrl/animes/")
// =============================== Latest ===============================
override val latestUpdatesPath = "episodios"
override fun latestUpdatesNextPageSelector() = "a > i#nextpagination"
// ============================ Video Links =============================
override val PREF_QUALITY_VALUES = arrayOf("360p", "720p")
override val PREF_QUALITY_ENTRIES = PREF_QUALITY_VALUES
override fun videoListParse(response: Response): List<Video> {
val player = response.asJsoup().selectFirst("div.playex iframe") ?: return emptyList()
return BloggerExtractor(client).videosFromUrl(player.attr("src"), headers)
}
// ============================== Filters ===============================
override fun genresListSelector() = "ul.genres a"
}

View File

@ -0,0 +1,26 @@
package eu.kanade.tachiyomi.animeextension.pt.animeplayer.extractors
import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.network.GET
import okhttp3.Headers
import okhttp3.OkHttpClient
class BloggerExtractor(private val client: OkHttpClient) {
fun videosFromUrl(url: String, headers: Headers): List<Video> {
return client.newCall(GET(url)).execute()
.use { it.body.string() }
.substringAfter("\"streams\":[")
.substringBefore("]")
.split("},")
.map {
val url = it.substringAfter("{\"play_url\":\"").substringBefore('"')
val format = it.substringAfter("\"format_id\":").substringBefore("}")
val quality = when (format) {
"18" -> "360p"
"22" -> "720p"
else -> "Unknown"
}
Video(url, quality, url, headers = headers)
}
}
}

View File

@ -12,6 +12,7 @@ class DooPlayGenerator : ThemeSourceGenerator {
override val sources = listOf(
SingleLang("Animes House", "https://animeshouse.net", "pt-BR", isNsfw = false, overrideVersionCode = 4),
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true),
SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 11),
SingleLang("CineVision", "https://cinevision.vc", "pt-BR", isNsfw = true, overrideVersionCode = 4),
SingleLang("GoAnimes", "https://goanimes.net", "pt-BR", isNsfw = true),