mirror of
https://github.com/hexated/cloudstream-extensions-hexated.git
synced 2024-08-15 00:03:22 +00:00
Merge pull request #2 from KingLucius/hexated-master
Sync with Hexated master
This commit is contained in:
commit
6f01411570
11 changed files with 112 additions and 15 deletions
|
@ -1,7 +1,7 @@
|
||||||
import org.jetbrains.kotlin.konan.properties.Properties
|
import org.jetbrains.kotlin.konan.properties.Properties
|
||||||
|
|
||||||
// use an integer for version numbers
|
// use an integer for version numbers
|
||||||
version = 142
|
version = 143
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
|
|
|
@ -1017,14 +1017,14 @@ object SoraExtractor : SoraStream() {
|
||||||
"X-Requested-With" to "XMLHttpRequest",
|
"X-Requested-With" to "XMLHttpRequest",
|
||||||
)
|
)
|
||||||
animeId?.apmap { id ->
|
animeId?.apmap { id ->
|
||||||
val episodeId = app.get("$zoroAPI/ajax/v2/episode/list/${id ?: return@apmap}", headers = headers)
|
val episodeId = app.get("$zoroAPI/ajax/episode/list/${id ?: return@apmap}", headers = headers)
|
||||||
.parsedSafe<ZoroResponses>()?.html?.let {
|
.parsedSafe<ZoroResponses>()?.html?.let {
|
||||||
Jsoup.parse(it)
|
Jsoup.parse(it)
|
||||||
}?.select("div.ss-list a")?.find { it.attr("data-number") == "${episode ?: 1}" }
|
}?.select("div.ss-list a")?.find { it.attr("data-number") == "${episode ?: 1}" }
|
||||||
?.attr("data-id")
|
?.attr("data-id")
|
||||||
|
|
||||||
val servers =
|
val servers =
|
||||||
app.get("$zoroAPI/ajax/v2/episode/servers?episodeId=${episodeId ?: return@apmap}", headers = headers)
|
app.get("$zoroAPI/ajax/episode/servers?episodeId=${episodeId ?: return@apmap}", headers = headers)
|
||||||
.parsedSafe<ZoroResponses>()?.html?.let { Jsoup.parse(it) }
|
.parsedSafe<ZoroResponses>()?.html?.let { Jsoup.parse(it) }
|
||||||
?.select("div.item.server-item")?.map {
|
?.select("div.item.server-item")?.map {
|
||||||
Triple(
|
Triple(
|
||||||
|
@ -1036,10 +1036,10 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
servers?.apmap servers@{ server ->
|
servers?.apmap servers@{ server ->
|
||||||
val iframe =
|
val iframe =
|
||||||
app.get("$zoroAPI/ajax/v2/episode/sources?id=${server.second ?: return@servers}", headers = headers)
|
app.get("$zoroAPI/ajax/episode/sources?id=${server.second ?: return@servers}", headers = headers)
|
||||||
.parsedSafe<ZoroResponses>()?.link ?: return@servers
|
.parsedSafe<ZoroResponses>()?.link ?: return@servers
|
||||||
val audio = if (server.third == "sub") "Raw" else "English Dub"
|
val audio = if (server.third == "sub") "Raw" else "English Dub"
|
||||||
if (server.first == "Vidstreaming" || server.first == "MegaCloud") {
|
if (server.first.contains(Regex("Vidstreaming|MegaCloud|Vidcloud"))) {
|
||||||
extractRabbitStream(
|
extractRabbitStream(
|
||||||
"${server.first} [$audio]",
|
"${server.first} [$audio]",
|
||||||
iframe,
|
iframe,
|
||||||
|
@ -3163,6 +3163,54 @@ object SoraExtractor : SoraStream() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun invokeFourCartoon(
|
||||||
|
title: String? = null,
|
||||||
|
year: Int? = null,
|
||||||
|
season: Int? = null,
|
||||||
|
episode: Int? = null,
|
||||||
|
callback: (ExtractorLink) -> Unit
|
||||||
|
) {
|
||||||
|
val fixTitle = title.createSlug()
|
||||||
|
val headers = mapOf(
|
||||||
|
"X-Requested-With" to "XMLHttpRequest"
|
||||||
|
)
|
||||||
|
val url = if (season == null) {
|
||||||
|
"$fourCartoonAPI/movies/$fixTitle-$year"
|
||||||
|
} else {
|
||||||
|
"$fourCartoonAPI/episode/$fixTitle-season-$season-episode-$episode"
|
||||||
|
}
|
||||||
|
|
||||||
|
val document = app.get(url).document
|
||||||
|
val id = document.selectFirst("input[name=idpost]")?.attr("value")
|
||||||
|
val server = app.get(
|
||||||
|
"$fourCartoonAPI/ajax-get-link-stream/?server=streamango&filmId=${id ?: return}",
|
||||||
|
headers = headers
|
||||||
|
).text
|
||||||
|
val hash =
|
||||||
|
getAndUnpack(app.get(server, referer = fourCartoonAPI).text).substringAfter("(\"")
|
||||||
|
.substringBefore("\",")
|
||||||
|
val iframeUrl = getBaseUrl(server)
|
||||||
|
val source = app.post(
|
||||||
|
"$iframeUrl/player/index.php?data=$hash&do=getVideo", data = mapOf(
|
||||||
|
"hast" to hash,
|
||||||
|
"r" to "$fourCartoonAPI/",
|
||||||
|
),
|
||||||
|
headers = headers
|
||||||
|
).parsedSafe<FourCartoonSources>()?.videoSource
|
||||||
|
|
||||||
|
callback.invoke(
|
||||||
|
ExtractorLink(
|
||||||
|
"4Cartoon",
|
||||||
|
"4Cartoon",
|
||||||
|
source ?: return,
|
||||||
|
"$iframeUrl/",
|
||||||
|
Qualities.P720.value,
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -500,3 +500,7 @@ data class EMovieTraks(
|
||||||
@JsonProperty("file") val file: String? = null,
|
@JsonProperty("file") val file: String? = null,
|
||||||
@JsonProperty("label") val label: String? = null,
|
@JsonProperty("label") val label: String? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class FourCartoonSources(
|
||||||
|
@JsonProperty("videoSource") val videoSource: String? = null,
|
||||||
|
)
|
||||||
|
|
|
@ -50,6 +50,7 @@ import com.hexated.SoraExtractor.invokeShivamhw
|
||||||
import com.hexated.SoraExtractor.invokeSmashyStream
|
import com.hexated.SoraExtractor.invokeSmashyStream
|
||||||
import com.hexated.SoraExtractor.invokeDumpStream
|
import com.hexated.SoraExtractor.invokeDumpStream
|
||||||
import com.hexated.SoraExtractor.invokeEmovies
|
import com.hexated.SoraExtractor.invokeEmovies
|
||||||
|
import com.hexated.SoraExtractor.invokeFourCartoon
|
||||||
import com.hexated.SoraExtractor.invokePobmovies
|
import com.hexated.SoraExtractor.invokePobmovies
|
||||||
import com.hexated.SoraExtractor.invokeTvMovies
|
import com.hexated.SoraExtractor.invokeTvMovies
|
||||||
import com.hexated.SoraExtractor.invokeUhdmovies
|
import com.hexated.SoraExtractor.invokeUhdmovies
|
||||||
|
@ -99,11 +100,11 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val filmxyAPI = "https://www.filmxy.vip"
|
const val filmxyAPI = "https://www.filmxy.vip"
|
||||||
const val kimcartoonAPI = "https://kimcartoon.li"
|
const val kimcartoonAPI = "https://kimcartoon.li"
|
||||||
const val xMovieAPI = "https://xemovies.to"
|
const val xMovieAPI = "https://xemovies.to"
|
||||||
const val zoroAPI = "https://aniwatch.to"
|
const val zoroAPI = "https://kaido.to"
|
||||||
const val crunchyrollAPI = "https://beta-api.crunchyroll.com"
|
const val crunchyrollAPI = "https://beta-api.crunchyroll.com"
|
||||||
const val kissKhAPI = "https://kisskh.co"
|
const val kissKhAPI = "https://kisskh.co"
|
||||||
const val lingAPI = "https://ling-online.net"
|
const val lingAPI = "https://ling-online.net"
|
||||||
const val uhdmoviesAPI = "https://uhdmovies.cc"
|
const val uhdmoviesAPI = "https://uhdmovies.life"
|
||||||
const val fwatayakoAPI = "https://5100.svetacdn.in"
|
const val fwatayakoAPI = "https://5100.svetacdn.in"
|
||||||
const val gMoviesAPI = "https://gdrivemovies.xyz"
|
const val gMoviesAPI = "https://gdrivemovies.xyz"
|
||||||
const val fdMoviesAPI = "https://freedrivemovie.lol"
|
const val fdMoviesAPI = "https://freedrivemovie.lol"
|
||||||
|
@ -131,6 +132,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
const val navyAPI = "https://navy-issue-i-239.site"
|
const val navyAPI = "https://navy-issue-i-239.site"
|
||||||
const val emoviesAPI = "https://emovies.si"
|
const val emoviesAPI = "https://emovies.si"
|
||||||
const val pobmoviesAPI = "https://pobmovies.cam"
|
const val pobmoviesAPI = "https://pobmovies.cam"
|
||||||
|
const val fourCartoonAPI = "https://4cartoon.net"
|
||||||
|
|
||||||
// INDEX SITE
|
// INDEX SITE
|
||||||
const val blackMoviesAPI = "https://dl.blacklistedbois.workers.dev/0:"
|
const val blackMoviesAPI = "https://dl.blacklistedbois.workers.dev/0:"
|
||||||
|
@ -265,8 +267,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
val year = releaseDate?.split("-")?.first()?.toIntOrNull()
|
val year = releaseDate?.split("-")?.first()?.toIntOrNull()
|
||||||
val rating = res.vote_average.toString().toRatingInt()
|
val rating = res.vote_average.toString().toRatingInt()
|
||||||
val genres = res.genres?.mapNotNull { it.name }
|
val genres = res.genres?.mapNotNull { it.name }
|
||||||
val isAnime =
|
val isAnime = genres?.contains("Animation") == true && (res.original_language == "zh" || res.original_language == "ja")
|
||||||
genres?.contains("Animation") == true && (res.original_language == "zh" || res.original_language == "ja")
|
|
||||||
val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty()
|
val keywords = res.keywords?.results?.mapNotNull { it.name }.orEmpty()
|
||||||
.ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } }
|
.ifEmpty { res.keywords?.keywords?.mapNotNull { it.name } }
|
||||||
|
|
||||||
|
@ -306,7 +307,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
epsTitle = eps.name,
|
epsTitle = eps.name,
|
||||||
jpTitle = res.alternative_titles?.results?.find { it.iso_3166_1 == "JP" }?.title,
|
jpTitle = res.alternative_titles?.results?.find { it.iso_3166_1 == "JP" }?.title,
|
||||||
date = season.airDate,
|
date = season.airDate,
|
||||||
airedDate = res.releaseDate ?: res.firstAirDate
|
airedDate = res.releaseDate ?: res.firstAirDate,
|
||||||
).toJson(),
|
).toJson(),
|
||||||
name = eps.name + if(isUpcoming(eps.airDate)) " - [UPCOMING]" else "",
|
name = eps.name + if(isUpcoming(eps.airDate)) " - [UPCOMING]" else "",
|
||||||
season = eps.seasonNumber,
|
season = eps.seasonNumber,
|
||||||
|
@ -350,7 +351,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
orgTitle = orgTitle,
|
orgTitle = orgTitle,
|
||||||
isAnime = isAnime,
|
isAnime = isAnime,
|
||||||
jpTitle = res.alternative_titles?.results?.find { it.iso_3166_1 == "JP" }?.title,
|
jpTitle = res.alternative_titles?.results?.find { it.iso_3166_1 == "JP" }?.title,
|
||||||
airedDate = res.releaseDate ?: res.firstAirDate
|
airedDate = res.releaseDate ?: res.firstAirDate,
|
||||||
).toJson(),
|
).toJson(),
|
||||||
) {
|
) {
|
||||||
this.posterUrl = poster
|
this.posterUrl = poster
|
||||||
|
@ -497,7 +498,7 @@ open class SoraStream : TmdbProvider() {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeKimcartoon(res.title, res.season, res.episode, subtitleCallback, callback)
|
if(!res.isAnime) invokeKimcartoon(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeXmovies(
|
invokeXmovies(
|
||||||
|
@ -812,6 +813,9 @@ open class SoraStream : TmdbProvider() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
if(!res.isAnime && res.season == null) invokePobmovies(res.title, res.year, callback)
|
if(!res.isAnime && res.season == null) invokePobmovies(res.title, res.year, callback)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
if(!res.isAnime) invokeFourCartoon(res.title, res.year, res.season, res.episode, callback)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import com.hexated.SoraExtractor.invokeSeries9
|
||||||
import com.hexated.SoraExtractor.invokeSmashyStream
|
import com.hexated.SoraExtractor.invokeSmashyStream
|
||||||
import com.hexated.SoraExtractor.invokeDumpStream
|
import com.hexated.SoraExtractor.invokeDumpStream
|
||||||
import com.hexated.SoraExtractor.invokeEmovies
|
import com.hexated.SoraExtractor.invokeEmovies
|
||||||
|
import com.hexated.SoraExtractor.invokeFourCartoon
|
||||||
import com.hexated.SoraExtractor.invokeVidSrc
|
import com.hexated.SoraExtractor.invokeVidSrc
|
||||||
import com.hexated.SoraExtractor.invokeWatchOnline
|
import com.hexated.SoraExtractor.invokeWatchOnline
|
||||||
import com.hexated.SoraExtractor.invokeWatchsomuch
|
import com.hexated.SoraExtractor.invokeWatchsomuch
|
||||||
|
@ -187,7 +188,7 @@ class SoraStreamLite : SoraStream() {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeKimcartoon(res.title, res.season, res.episode, subtitleCallback, callback)
|
if(!res.isAnime) invokeKimcartoon(res.title, res.season, res.episode, subtitleCallback, callback)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
invokeSmashyStream(
|
invokeSmashyStream(
|
||||||
|
@ -299,6 +300,15 @@ class SoraStreamLite : SoraStream() {
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
if(!res.isAnime) invokeFourCartoon(
|
||||||
|
res.title,
|
||||||
|
res.year,
|
||||||
|
res.season,
|
||||||
|
res.episode,
|
||||||
|
callback
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -1952,7 +1952,7 @@ object RabbitStream {
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getZoroKey(): String {
|
suspend fun getZoroKey(): String {
|
||||||
return app.get("https://raw.githubusercontent.com/enimax-anime/key/e6/key.txt").text
|
return app.get("https://raw.githubusercontent.com/enimax-anime/key/e0/key.txt").text
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun <reified T> decryptMapped(input: String, key: String): T? {
|
private inline fun <reified T> decryptMapped(input: String, key: String): T? {
|
||||||
|
|
3
YacienTVProvider/.idea/.gitignore
generated
vendored
Normal file
3
YacienTVProvider/.idea/.gitignore
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
13
YacienTVProvider/.idea/gradle.xml
generated
Normal file
13
YacienTVProvider/.idea/gradle.xml
generated
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
|
<component name="GradleSettings">
|
||||||
|
<option name="linkedExternalProjectsSettings">
|
||||||
|
<GradleProjectSettings>
|
||||||
|
<option name="testRunner" value="GRADLE" />
|
||||||
|
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||||
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
|
</GradleProjectSettings>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
9
YacienTVProvider/.idea/misc.xml
generated
Normal file
9
YacienTVProvider/.idea/misc.xml
generated
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectType">
|
||||||
|
<option name="id" value="Android" />
|
||||||
|
</component>
|
||||||
|
</project>
|
6
YacienTVProvider/.idea/vcs.xml
generated
Normal file
6
YacienTVProvider/.idea/vcs.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
Loading…
Add table
Add a link
Reference in a new issue