CineVision: Some improvements (#843)
* CineVision: Reduce requests amount on search * CineVision: add Streamlare extractor * CineVision: Remove useless headers * CineVision: bump version
This commit is contained in:
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'CineVision'
|
||||
pkgNameSuffix = 'pt.cinevision'
|
||||
extClass = '.CineVision'
|
||||
extVersionCode = 1
|
||||
extVersionCode = 2
|
||||
libVersion = '13'
|
||||
containsNsfw = true
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
package eu.kanade.tachiyomi.animeextension.pt.cinevision
|
||||
|
||||
object CVConstants {
|
||||
const val ACCEPT_LANGUAGE = "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7"
|
||||
const val USER_AGENT = "Mozilla/5.0 (Linux; Android 10; SM-A307GT Build/QP1A.190711.020;) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.71 Mobile Safari/537.36"
|
||||
|
||||
const val PREFIX_SEARCH = "slug:"
|
||||
|
||||
const val PREFERRED_QUALITY = "preferred_quality"
|
||||
|
@ -4,6 +4,7 @@ import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors.StreamlareExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors.VidmolyExtractor
|
||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
@ -19,7 +20,6 @@ import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -44,11 +44,6 @@ class CineVision : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override val client: OkHttpClient = network.client
|
||||
|
||||
override fun headersBuilder(): Headers.Builder = Headers.Builder()
|
||||
.add("Referer", baseUrl)
|
||||
.add("Accept-Language", CVConstants.ACCEPT_LANGUAGE)
|
||||
.add("User-Agent", CVConstants.USER_AGENT)
|
||||
|
||||
private val preferences: SharedPreferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
}
|
||||
@ -129,10 +124,11 @@ class CineVision : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
)
|
||||
val url = "https:" + json["embed_url"]!!.jsonPrimitive.content
|
||||
|
||||
// It may need more extractors, but i only saw it using vidmoly
|
||||
return when {
|
||||
"vidmoly.to" in url ->
|
||||
VidmolyExtractor(client).getVideoList(url, name)
|
||||
"streamlare.com" in url ->
|
||||
StreamlareExtractor(client).videosFromUrl(url, name)
|
||||
else -> emptyList<Video>()
|
||||
}
|
||||
}
|
||||
@ -206,13 +202,15 @@ class CineVision : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
override fun searchAnimeFromElement(element: Element): SAnime {
|
||||
val anime = SAnime.create()
|
||||
anime.setUrlWithoutDomain(element.attr("href"))
|
||||
anime.title = element.text()
|
||||
val img = element.selectFirst("img")
|
||||
anime.title = img.attr("alt")
|
||||
anime.thumbnail_url = img.attr("data-src").replace("/p/w92", "/p/w185")
|
||||
return anime
|
||||
}
|
||||
|
||||
override fun searchAnimeNextPageSelector(): String = latestUpdatesNextPageSelector()
|
||||
|
||||
override fun searchAnimeSelector(): String = "div.result-item div.details div.title a"
|
||||
override fun searchAnimeSelector(): String = "div.result-item div.image a"
|
||||
|
||||
// =========================== Anime Details ============================
|
||||
override fun animeDetailsParse(document: Document): SAnime {
|
||||
|
@ -0,0 +1,26 @@
|
||||
package eu.kanade.tachiyomi.animeextension.pt.cinevision.extractors
|
||||
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
|
||||
class StreamlareExtractor(private val client: OkHttpClient) {
|
||||
|
||||
fun videosFromUrl(url: String, name: String): List<Video> {
|
||||
val id = url.substringAfter("/e/").substringBefore("/")
|
||||
val body = "{\"id\":\"$id\"}".toRequestBody("application/json".toMediaType())
|
||||
val playlist = client.newCall(
|
||||
POST("https://sltube.org/api/video/stream/get", body = body)
|
||||
).execute().body!!.string()
|
||||
val separator = "\"label\":\""
|
||||
return playlist.substringAfter(separator).split(separator).map {
|
||||
val quality = "$name - " + it.substringAfter(separator).substringBefore("\",")
|
||||
val videoUrl = it.substringAfter("file\":\"").substringBefore("\",")
|
||||
.replace("\\", "")
|
||||
|
||||
Video(videoUrl, quality, videoUrl)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user