sora: added jmdkhMovie

This commit is contained in:
hexated 2023-02-20 02:57:29 +07:00
parent 7a9c41d2ab
commit 9654ff0cbe
4 changed files with 46 additions and 6 deletions

View file

@ -1,5 +1,5 @@
// use an integer for version numbers // use an integer for version numbers
version = 92 version = 93
cloudstream { cloudstream {

View file

@ -2249,6 +2249,26 @@ object SoraExtractor : SoraStream() {
) )
} }
suspend fun invokeJmdkhMovies(
apiUrl: String,
api: String,
title: String? = null,
year: Int? = null,
season: Int? = null,
episode: Int? = null,
callback: (ExtractorLink) -> Unit,
) {
invokeIndex(
apiUrl,
api,
title,
year,
season,
episode,
callback,
)
}
private suspend fun invokeIndex( private suspend fun invokeIndex(
apiUrl: String, apiUrl: String,
api: String, api: String,
@ -2361,9 +2381,8 @@ object SoraExtractor : SoraStream() {
val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode) val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode)
val files = app.get( val files = app.get(
"https://api.telegram.d1.zindex.eu.org/search?name=$query&page=1", "https://api.telegram.d1.zindex.eu.org/search?name=${encode(query)}&page=1",
referer = tgarMovieAPI, referer = tgarMovieAPI,
timeout = 120L
).parsedSafe<TgarData>()?.results?.filter { media -> ).parsedSafe<TgarData>()?.results?.filter { media ->
(if (season == null) { (if (season == null) {
media.name?.contains("$year") == true media.name?.contains("$year") == true

View file

@ -30,6 +30,7 @@ import com.hexated.SoraExtractor.invokeFlixon
import com.hexated.SoraExtractor.invokeFwatayako import com.hexated.SoraExtractor.invokeFwatayako
import com.hexated.SoraExtractor.invokeGMovies import com.hexated.SoraExtractor.invokeGMovies
import com.hexated.SoraExtractor.invokeGomovies import com.hexated.SoraExtractor.invokeGomovies
import com.hexated.SoraExtractor.invokeJmdkhMovies
import com.hexated.SoraExtractor.invokeJsmovies import com.hexated.SoraExtractor.invokeJsmovies
import com.hexated.SoraExtractor.invokeKisskh import com.hexated.SoraExtractor.invokeKisskh
import com.hexated.SoraExtractor.invokeLing import com.hexated.SoraExtractor.invokeLing
@ -127,6 +128,7 @@ open class SoraStream : TmdbProvider() {
const val papaonMovies2API = "https://m.papaonwork.workers.dev/1:" const val papaonMovies2API = "https://m.papaonwork.workers.dev/1:"
const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev" const val dahmerMoviesAPI = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev"
const val tgarMovieAPI = "https://tgarchive.eu.org" const val tgarMovieAPI = "https://tgarchive.eu.org"
const val jmdkhMovieAPI = "https://tg.jmdkh.eu.org/0:"
fun getType(t: String?): TvType { fun getType(t: String?): TvType {
return when (t) { return when (t) {
@ -720,6 +722,17 @@ open class SoraStream : TmdbProvider() {
{ {
if (!res.isAnime) invokeTgarMovies(res.title, res.year, res.season, res.episode, callback) if (!res.isAnime) invokeTgarMovies(res.title, res.year, res.season, res.episode, callback)
}, },
{
if (!res.isAnime) invokeJmdkhMovies(
jmdkhMovieAPI,
"JmdkhMovies",
res.title,
res.year,
res.season,
res.episode,
callback
)
},
) )
return true return true

View file

@ -24,6 +24,7 @@ import okhttp3.RequestBody.Companion.toRequestBody
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import java.net.URI import java.net.URI
import java.net.URL import java.net.URL
import java.net.URLEncoder
import java.security.MessageDigest import java.security.MessageDigest
import java.security.SecureRandom import java.security.SecureRandom
import java.util.* import java.util.*
@ -44,6 +45,7 @@ val encodedIndex = arrayOf(
"XtremeMovies", "XtremeMovies",
"PapaonMovies[1]", "PapaonMovies[1]",
"PapaonMovies[2]", "PapaonMovies[2]",
"JmdkhMovies",
) )
val lockedIndex = arrayOf( val lockedIndex = arrayOf(
@ -52,7 +54,8 @@ val lockedIndex = arrayOf(
) )
val mkvIndex = arrayOf( val mkvIndex = arrayOf(
"EdithxMovies" "EdithxMovies",
"JmdkhMovies",
) )
val untrimmedIndex = arrayOf( val untrimmedIndex = arrayOf(
@ -674,7 +677,7 @@ fun searchIndex(
response: String, response: String,
isTrimmed: Boolean = true, isTrimmed: Boolean = true,
): List<IndexMedia>? { ): List<IndexMedia>? {
val (dotSlug, spaceSlug) = getTitleSlug(title) val (dotSlug, spaceSlug, slashSlug) = getTitleSlug(title)
val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode) val (seasonSlug, episodeSlug) = getEpisodeSlug(season, episode)
val files = tryParseJson<IndexSearch>(response)?.data?.files?.filter { media -> val files = tryParseJson<IndexSearch>(response)?.data?.files?.filter { media ->
(if (season == null) { (if (season == null) {
@ -692,7 +695,10 @@ fun searchIndex(
) || media.name.replace( ) || media.name.replace(
"-", "-",
" " " "
).contains("$spaceSlug", true)) ).contains("$spaceSlug", true) || media.name.replace(
"-",
"_"
).contains("$slashSlug", true))
}?.distinctBy { it.name }?.sortedByDescending { it.size?.toLongOrNull() ?: 0 } ?: return null }?.distinctBy { it.name }?.sortedByDescending { it.size?.toLongOrNull() ?: 0 } ?: return null
return if (isTrimmed) { return if (isTrimmed) {
@ -844,6 +850,8 @@ fun getBaseUrl(url: String): String {
} }
} }
fun encode(input: String): String? = URLEncoder.encode(input, "utf-8")
fun decryptStreamUrl(data: String): String { fun decryptStreamUrl(data: String): String {
fun getTrash(arr: List<String>, item: Int): List<String> { fun getTrash(arr: List<String>, item: Int): List<String> {