FrAnime Fix

This commit is contained in:
petit 2024-08-09 11:55:40 +02:00
parent f2ab3c6ee2
commit 0e49a80eea
6 changed files with 71 additions and 17 deletions

View file

@ -0,0 +1,7 @@
plugins {
id("lib-android")
}
dependencies {
implementation(project(":lib:playlist-utils"))
}

View file

@ -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.EMPTY_HEADERS
class VidMolyExtractor(private val client: OkHttpClient, headers: Headers = EMPTY_HEADERS) {
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,
)
}
}
}

View file

@ -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')
}

View file

@ -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
@ -101,7 +102,7 @@ class FrAnime : AnimeHttpSource() {
SEpisode.create().apply {
setUrlWithoutDomain(anime.url + "&ep=${index + 1}")
name = episode.title
name = episode.title ?: "Episode ${index + 1}"
episode_number = (index + 1).toFloat()
}
}
@ -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()
}
}

View file

@ -68,7 +68,7 @@ data class Season(
@Serializable
data class Episode(
@SerialName("title") val title: String,
@SerialName("title") val title: String?,
@SerialName("lang") val languages: EpisodeLanguages,
)