faselhd: fix video extractor (#317)

* Update build.gradle

* faselhd: fix videos extractor

* Update FASELHD.kt
This commit is contained in:
Ahmed gamal
2022-02-09 21:20:39 +02:00
committed by GitHub
parent 1bdaf8d7f9
commit 644f914eba
4 changed files with 37 additions and 35 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'فاصل اعلاني' extName = 'فاصل اعلاني'
pkgNameSuffix = 'ar.faselhd' pkgNameSuffix = 'ar.faselhd'
extClass = '.FASELHD' extClass = '.FASELHD'
extVersionCode = 3 extVersionCode = 4
libVersion = '12' libVersion = '12'
} }

View File

@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.animeextension.ar.faselhd
import android.app.Application import android.app.Application
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Log
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
@ -40,6 +41,11 @@ class FASELHD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000) Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
} }
override fun headersBuilder(): Headers.Builder {
return super.headersBuilder()
.add("Referer", "https://www.faselhd.top/")
}
// Popular Anime // Popular Anime
override fun popularAnimeSelector(): String = "div#postList div.col-xl-2 a" override fun popularAnimeSelector(): String = "div#postList div.col-xl-2 a"
@ -88,7 +94,7 @@ class FASELHD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
return episode return episode
} }
// Video urls // Video urls //test commit
override fun videoListParse(response: Response): List<Video> { override fun videoListParse(response: Response): List<Video> {
val document = response.asJsoup() val document = response.asJsoup()
@ -97,26 +103,21 @@ class FASELHD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val refererHeaders = Headers.headersOf("referer", referer) val refererHeaders = Headers.headersOf("referer", referer)
val iframeResponse = client.newCall(GET(iframe, refererHeaders)) val iframeResponse = client.newCall(GET(iframe, refererHeaders))
.execute().asJsoup() .execute().asJsoup()
return videosFromElement(iframeResponse.selectFirst(videoListSelector())) return videosFromElement(iframeResponse.selectFirst(videoListSelector()), refererHeaders)
} }
override fun videoListSelector() = "script:containsData(quality)" override fun videoListSelector() = "script:containsData(m3u8)"
private fun videosFromElement(element: Element): List<Video> { private fun videosFromElement(element: Element, headers: Headers): List<Video> {
val data = element.data().substringAfter("if (quality == \"auto\")").substringBefore(";") val masterUrl = element.data().substringAfter("setup({\"file\":\"").substringBefore("\"").replace("\\/", "/")
val sources = data.split("link = ").drop(1) Log.i("lol", masterUrl)
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
Log.i("lol", "$masterPlaylist")
val videoList = mutableListOf<Video>() val videoList = mutableListOf<Video>()
for (source in sources) { masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
val masterUrl = source.substringAfter("\"").substringBeforeLast("\";").replace("\\/", "/").replace("\"", "") val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body!!.string() val videoUrl = it.substringAfter("\n").substringBefore("\n").replace("https", "http")
val videoList = mutableListOf<Video>() videoList.add(Video(videoUrl, quality, videoUrl, null, headers))
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
val videoUrl = masterUrl.substringBeforeLast("/") + "/" + it.substringAfter("\n").substringBefore("\n")
videoList.add(Video(videoUrl, quality, videoUrl, null))
// val video = Video(videoUrl, quality, videoUrl, null)
}
return videoList
} }
return videoList return videoList
} }

View File

@ -5,7 +5,7 @@ ext {
extName = 'فاصل اعلاني افلام بس' extName = 'فاصل اعلاني افلام بس'
pkgNameSuffix = 'ar.faselhdmovies' pkgNameSuffix = 'ar.faselhdmovies'
extClass = '.FASELHDMOVIES' extClass = '.FASELHDMOVIES'
extVersionCode = 1 extVersionCode = 2
libVersion = '12' libVersion = '12'
} }

View File

@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.animeextension.ar.faselhdmovies
import android.app.Application import android.app.Application
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Log
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
@ -40,6 +41,11 @@ class FASELHDMOVIES : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000) Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
} }
override fun headersBuilder(): Headers.Builder {
return super.headersBuilder()
.add("Referer", "https://www.faselhd.top/")
}
// Popular Anime // Popular Anime
override fun popularAnimeSelector(): String = "div#postList div.col-xl-2 a" override fun popularAnimeSelector(): String = "div#postList div.col-xl-2 a"
@ -77,26 +83,21 @@ class FASELHDMOVIES : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val refererHeaders = Headers.headersOf("referer", referer) val refererHeaders = Headers.headersOf("referer", referer)
val iframeResponse = client.newCall(GET(iframe, refererHeaders)) val iframeResponse = client.newCall(GET(iframe, refererHeaders))
.execute().asJsoup() .execute().asJsoup()
return videosFromElement(iframeResponse.selectFirst(videoListSelector())) return videosFromElement(iframeResponse.selectFirst(videoListSelector()), refererHeaders)
} }
override fun videoListSelector() = "script:containsData(quality)" override fun videoListSelector() = "script:containsData(m3u8)"
private fun videosFromElement(element: Element): List<Video> { private fun videosFromElement(element: Element, headers: Headers): List<Video> {
val data = element.data().substringAfter("if (quality == \"auto\")").substringBefore(";") val masterUrl = element.data().substringAfter("setup({\"file\":\"").substringBefore("\"").replace("\\/", "/")
val sources = data.split("link = ").drop(1) Log.i("lol", masterUrl)
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body!!.string()
Log.i("lol", "$masterPlaylist")
val videoList = mutableListOf<Video>() val videoList = mutableListOf<Video>()
for (source in sources) { masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
val masterUrl = source.substringAfter("\"").substringBeforeLast("\";").replace("\\/", "/").replace("\"", "") val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
val masterPlaylist = client.newCall(GET(masterUrl)).execute().body!!.string() val videoUrl = it.substringAfter("\n").substringBefore("\n").replace("https", "http")
val videoList = mutableListOf<Video>() videoList.add(Video(videoUrl, quality, videoUrl, null, headers))
masterPlaylist.substringAfter("#EXT-X-STREAM-INF:").split("#EXT-X-STREAM-INF:").forEach {
val quality = it.substringAfter("RESOLUTION=").substringAfter("x").substringBefore(",") + "p"
val videoUrl = masterUrl.substringBeforeLast("/") + "/" + it.substringAfter("\n").substringBefore("\n")
videoList.add(Video(videoUrl, quality, videoUrl, null))
// val video = Video(videoUrl, quality, videoUrl, null)
}
return videoList
} }
return videoList return videoList
} }