faselhd: fix video extractor (#317)
* Update build.gradle * faselhd: fix videos extractor * Update FASELHD.kt
This commit is contained in:
@ -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'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user