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:
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 |
36
multisrc/overrides/dooplay/animeplayer/src/AnimePlayer.kt
Normal file
36
multisrc/overrides/dooplay/animeplayer/src/AnimePlayer.kt
Normal 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"
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@ -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),
|
||||
|
Reference in New Issue
Block a user