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 = 'فاصل اعلاني'
pkgNameSuffix = 'ar.faselhd'
extClass = '.FASELHD'
extVersionCode = 3
extVersionCode = 4
libVersion = '12'
}

View File

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

View File

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

View File

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