mirror of
https://github.com/Dark25/aniyomi-extensions.git
synced 2024-10-28 08:09:37 +01:00
feat(fr/franime,frenchanime)): add vidmoly extractor and missing players
This commit is contained in:
parent
62f4a7ae48
commit
c56e03abca
6 changed files with 90 additions and 16 deletions
7
lib/vidmoly-extractor/build.gradle.kts
Normal file
7
lib/vidmoly-extractor/build.gradle.kts
Normal file
|
@ -0,0 +1,7 @@
|
|||
plugins {
|
||||
id("lib-android")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":lib:playlist-utils"))
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package eu.kanade.tachiyomi.lib.vidmolyextractor
|
||||
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.internal.commonEmptyHeaders
|
||||
|
||||
class VidMolyExtractor(private val client: OkHttpClient, headers: Headers = commonEmptyHeaders) {
|
||||
|
||||
private val baseUrl = "https://vidmoly.to"
|
||||
|
||||
private val playlistUtils by lazy { PlaylistUtils(client) }
|
||||
|
||||
private val headers: Headers = headers.newBuilder()
|
||||
.set("Origin", baseUrl)
|
||||
.set("Referer", "$baseUrl/")
|
||||
.build()
|
||||
|
||||
private val sourcesRegex = Regex("sources: (.*?]),")
|
||||
private val urlsRegex = Regex("""file:"(.*?)"""")
|
||||
|
||||
fun videosFromUrl(url: String, prefix: String = ""): List<Video> {
|
||||
val document = client.newCall(
|
||||
GET(url, headers.newBuilder().set("Sec-Fetch-Dest", "iframe").build())
|
||||
).execute().asJsoup()
|
||||
val script = document.selectFirst("script:containsData(sources)")!!.data()
|
||||
val sources = sourcesRegex.find(script)!!.groupValues[1]
|
||||
val urls = urlsRegex.findAll(sources).map { it.groupValues[1] }.toList()
|
||||
return urls.flatMap {
|
||||
playlistUtils.extractFromHls(it,
|
||||
videoNameGen = { quality -> "${prefix}VidMoly - $quality" },
|
||||
masterHeaders = headers,
|
||||
videoHeaders = headers,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
ext {
|
||||
extName = 'FrAnime'
|
||||
extClass = '.FrAnime'
|
||||
extVersionCode = 11
|
||||
extVersionCode = 12
|
||||
isNsfw = true
|
||||
}
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -11,4 +11,5 @@ dependencies {
|
|||
implementation(project(':lib:vk-extractor'))
|
||||
implementation(project(':lib:sendvid-extractor'))
|
||||
implementation(project(':lib:sibnet-extractor'))
|
||||
implementation(project(':lib:vidmoly-extractor'))
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
|||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.sendvidextractor.SendvidExtractor
|
||||
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor
|
||||
import eu.kanade.tachiyomi.lib.vidmolyextractor.VidMolyExtractor
|
||||
import eu.kanade.tachiyomi.lib.vkextractor.VkExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.await
|
||||
|
@ -123,14 +124,19 @@ class FrAnime : AnimeHttpSource() {
|
|||
|
||||
val players = if (episodeLang == "vo") episodeData.languages.vo.players else episodeData.languages.vf.players
|
||||
|
||||
val sendvidExtractor by lazy { SendvidExtractor(client, headers) }
|
||||
val sibnetExtractor by lazy { SibnetExtractor(client) }
|
||||
val vkExtractor by lazy { VkExtractor(client, headers) }
|
||||
val vidMolyExtractor by lazy { VidMolyExtractor(client) }
|
||||
|
||||
val videos = players.withIndex().parallelCatchingFlatMap { (index, playerName) ->
|
||||
val apiUrl = "$videoBaseUrl/$episodeLang/$index"
|
||||
val playerUrl = client.newCall(GET(apiUrl, headers)).await().body.string()
|
||||
when (playerName) {
|
||||
"vido" -> listOf(Video(playerUrl, "FRAnime (Vido)", playerUrl))
|
||||
"sendvid" -> SendvidExtractor(client, headers).videosFromUrl(playerUrl)
|
||||
"sibnet" -> SibnetExtractor(client).videosFromUrl(playerUrl)
|
||||
"vk" -> VkExtractor(client, headers).videosFromUrl(playerUrl)
|
||||
"sendvid" -> sendvidExtractor.videosFromUrl(playerUrl)
|
||||
"sibnet" -> sibnetExtractor.videosFromUrl(playerUrl)
|
||||
"vk" -> vkExtractor.videosFromUrl(playerUrl)
|
||||
"vidmoly" -> vidMolyExtractor.videosFromUrl(playerUrl)
|
||||
else -> emptyList()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ ext {
|
|||
extClass = '.FrenchAnime'
|
||||
themePkg = 'datalifeengine'
|
||||
baseUrl = 'https://french-anime.com'
|
||||
overrideVersionCode = 8
|
||||
overrideVersionCode = 9
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -19,4 +19,6 @@ dependencies {
|
|||
implementation(project(':lib:sibnet-extractor'))
|
||||
implementation(project(':lib:okru-extractor'))
|
||||
implementation(project(':lib:streamhub-extractor'))
|
||||
implementation(project(':lib:vidmoly-extractor'))
|
||||
implementation(project(':lib:voe-extractor'))
|
||||
}
|
|
@ -10,7 +10,9 @@ import eu.kanade.tachiyomi.lib.streamhubextractor.StreamHubExtractor
|
|||
import eu.kanade.tachiyomi.lib.streamvidextractor.StreamVidExtractor
|
||||
import eu.kanade.tachiyomi.lib.upstreamextractor.UpstreamExtractor
|
||||
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor
|
||||
import eu.kanade.tachiyomi.lib.vidmolyextractor.VidMolyExtractor
|
||||
import eu.kanade.tachiyomi.lib.vidoextractor.VidoExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.lib.vudeoextractor.VudeoExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.datalifeengine.DataLifeEngine
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
|
@ -86,21 +88,37 @@ class FrenchAnime : DataLifeEngine(
|
|||
override fun episodeFromElement(element: Element): SEpisode = throw UnsupportedOperationException()
|
||||
|
||||
// ============================ Video Links =============================
|
||||
private val doodExtractor by lazy { DoodExtractor(client) }
|
||||
private val upstreamExtractor by lazy { UpstreamExtractor(client) }
|
||||
private val vudeoExtractor by lazy { VudeoExtractor(client) }
|
||||
private val uqloadExtractor by lazy { UqloadExtractor(client) }
|
||||
private val streamHideVidExtractor by lazy { StreamHideVidExtractor(client) }
|
||||
private val streamVidExtractor by lazy { StreamVidExtractor(client) }
|
||||
private val vidoExtractor by lazy { VidoExtractor(client) }
|
||||
private val sibnetExtractor by lazy { SibnetExtractor(client) }
|
||||
private val okruExtractor by lazy { OkruExtractor(client) }
|
||||
private val streamHubExtractor by lazy { StreamHubExtractor(client) }
|
||||
private val vidmolyExtractor by lazy { VidMolyExtractor(client) }
|
||||
private val voeExtractor by lazy { VoeExtractor(client) }
|
||||
|
||||
override suspend fun getVideoList(episode: SEpisode): List<Video> {
|
||||
val list = episode.url.split(",").filter { it.isNotBlank() }.parallelCatchingFlatMap {
|
||||
with(it) {
|
||||
when {
|
||||
contains("dood") -> DoodExtractor(client).videosFromUrl(this)
|
||||
contains("upstream") -> UpstreamExtractor(client).videosFromUrl(this)
|
||||
contains("vudeo") -> VudeoExtractor(client).videosFromUrl(this)
|
||||
contains("uqload") -> UqloadExtractor(client).videosFromUrl(this)
|
||||
contains("dood") ||
|
||||
contains("d0000d") -> doodExtractor.videosFromUrl(this)
|
||||
contains("upstream") -> upstreamExtractor.videosFromUrl(this)
|
||||
contains("vudeo") -> vudeoExtractor.videosFromUrl(this)
|
||||
contains("uqload") -> uqloadExtractor.videosFromUrl(this)
|
||||
contains("guccihide") ||
|
||||
contains("streamhide") -> StreamHideVidExtractor(client).videosFromUrl(this)
|
||||
contains("streamvid") -> StreamVidExtractor(client).videosFromUrl(this)
|
||||
contains("vido") -> VidoExtractor(client).videosFromUrl(this)
|
||||
contains("sibnet") -> SibnetExtractor(client).videosFromUrl(this)
|
||||
contains("ok.ru") -> OkruExtractor(client).videosFromUrl(this)
|
||||
contains("streamhub.gg") -> StreamHubExtractor(client).videosFromUrl(this)
|
||||
contains("streamhide") -> streamHideVidExtractor.videosFromUrl(this)
|
||||
contains("streamvid") -> streamVidExtractor.videosFromUrl(this)
|
||||
contains("vido") -> vidoExtractor.videosFromUrl(this)
|
||||
contains("sibnet") -> sibnetExtractor.videosFromUrl(this)
|
||||
contains("ok.ru") -> okruExtractor.videosFromUrl(this)
|
||||
contains("streamhub.gg") -> streamHubExtractor.videosFromUrl(this)
|
||||
contains("vidmoly") -> vidmolyExtractor.videosFromUrl(this)
|
||||
contains("voe.sx") -> voeExtractor.videosFromUrl(this)
|
||||
else -> emptyList()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue