genoanime: fix video loading (#229)

This commit is contained in:
Hitagi Senjougahara
2022-01-08 01:16:18 +08:00
committed by GitHub
parent 349962dbd1
commit 0d1153fd0c
2 changed files with 21 additions and 43 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'GenoAnime' extName = 'GenoAnime'
pkgNameSuffix = 'en.genoanime' pkgNameSuffix = 'en.genoanime'
extClass = '.GenoAnime' extClass = '.GenoAnime'
extVersionCode = 2 extVersionCode = 3
libVersion = '12' libVersion = '12'
} }

View File

@ -22,36 +22,26 @@ class GenoAnime : ParsedAnimeHttpSource() {
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient override val client: OkHttpClient = network.cloudflareClient
private val weserv = "https://images.weserv.nl/?w=400&q=60&url="
// Popular Anime // Popular Anime
override fun popularAnimeRequest(page: Int): Request = override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/browse?sort=top_rated&page=$page")
GET("$baseUrl/browse?sort=top_rated&page=$page")
override fun popularAnimeSelector(): String = "div.trending__product div.col-lg-10 div.row div.col-lg-3.col-6" override fun popularAnimeSelector(): String = "div.trending__product div.col-lg-10 div.row div.col-lg-3.col-6"
override fun popularAnimeNextPageSelector(): String = override fun popularAnimeNextPageSelector(): String = "div.text-center a i.fa.fa-angle-double-right"
"div.text-center a i.fa.fa-angle-double-right"
override fun popularAnimeFromElement(element: Element): SAnime { override fun popularAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create() val anime = SAnime.create()
val tempurl = anime.setUrlWithoutDomain("$baseUrl/${element.select("div.product__item a").attr("href").removePrefix("./")}")
"$baseUrl/" + element.select("div.product__item a").attr("href").removePrefix("./")
anime.setUrlWithoutDomain(tempurl)
anime.title = element.select("div.product__item__text h5 a:nth-of-type(2)").first().text() anime.title = element.select("div.product__item__text h5 a:nth-of-type(2)").first().text()
val thumburl = anime.thumbnail_url = "$baseUrl/${element.select("div.product__item__pic").attr("data-setbg").removePrefix("./")}"
element.select("div.product__item__pic").attr("data-setbg").removePrefix("./")
anime.thumbnail_url = "$weserv$baseUrl/$thumburl"
return anime return anime
} }
// Latest Anime // Latest Anime
override fun latestUpdatesRequest(page: Int): Request = override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/browse?sort=latest&page=$page", headers)
GET("$baseUrl/browse?sort=latest&page=$page", headers)
override fun latestUpdatesSelector(): String = popularAnimeSelector() override fun latestUpdatesSelector(): String = popularAnimeSelector()
override fun latestUpdatesNextPageSelector(): String = popularAnimeNextPageSelector() override fun latestUpdatesNextPageSelector(): String = popularAnimeNextPageSelector()
override fun latestUpdatesFromElement(element: Element): SAnime = override fun latestUpdatesFromElement(element: Element): SAnime = popularAnimeFromElement(element)
popularAnimeFromElement(element)
// Search Anime // Search Anime
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
@ -66,18 +56,13 @@ class GenoAnime : ParsedAnimeHttpSource() {
} }
override fun searchAnimeSelector(): String = "div.col-lg-3" override fun searchAnimeSelector(): String = "div.col-lg-3"
override fun searchAnimeNextPageSelector(): String = override fun searchAnimeNextPageSelector(): String = "div.text-center.product__pagination a.search-page i.fa.fa-angle-double-left"
"div.text-center.product__pagination a.search-page i.fa.fa-angle-double-left"
override fun searchAnimeFromElement(element: Element): SAnime { override fun searchAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create() val anime = SAnime.create()
val tempurl = "$baseUrl/" + element.select("a").attr("href").removePrefix("./") anime.setUrlWithoutDomain("$baseUrl/${element.select("a").attr("href").removePrefix("./")}")
val thumburl =
element.select("div.product__item div.product__item__pic.set-bg").attr("data-setbg")
.removePrefix("./")
anime.setUrlWithoutDomain(tempurl)
anime.title = element.select("div.product__item__text h5 a:nth-of-type(2)").text() anime.title = element.select("div.product__item__text h5 a:nth-of-type(2)").text()
anime.thumbnail_url = "$weserv$baseUrl/$thumburl" anime.thumbnail_url = "$baseUrl/${element.select("div.product__item div.product__item__pic.set-bg").attr("data-setbg").removePrefix("./")}"
return anime return anime
} }
@ -87,28 +72,26 @@ class GenoAnime : ParsedAnimeHttpSource() {
val episode = SEpisode.create() val episode = SEpisode.create()
episode.setUrlWithoutDomain(element.attr("href")) episode.setUrlWithoutDomain(element.attr("href"))
episode.name = element.select("a").text() episode.name = element.select("a").text()
val episodeNumberString = element.text().removePrefix("Ep ") episode.episode_number = element.text().removePrefix("Ep ").toFloat()
episode.episode_number = episodeNumberString.toFloat()
episode.date_upload = System.currentTimeMillis() episode.date_upload = System.currentTimeMillis()
return episode return episode
} }
// Video // Video
override fun videoUrlParse(document: Document): String = throw Exception("Not used.") override fun videoUrlParse(document: Document): String = throw Exception("Not used.")
override fun videoListSelector() = override fun videoListSelector() = "section.details.spad div.container div.row:nth-of-type(1) div.col-lg-12:nth-of-type(1)"
"section.details.spad div.container div.row:nth-of-type(1) div.col-lg-12:nth-of-type(1)"
override fun videoFromElement(element: Element): Video { override fun videoFromElement(element: Element): Video {
val baaseurl = element.select("div#video iframe#iframe-to-load").attr("src") val vidsrc = element.select("div#video iframe#iframe-to-load").attr("src")
if (baaseurl.contains("https://genoanime.com/doodplayer.php")) { if (vidsrc.contains("https://genoanime.com/doodplayer.php")) {
val baseurl = videoidgrab(element.select("div#video iframe#iframe-to-load").attr("src")) val url = videoidgrab(element.select("div#video iframe#iframe-to-load").attr("src"))
val a = doodUrlParse(baseurl) val a = doodUrlParse(url)
return Video( return Video(
baseurl, url,
"Doodstream", "Doodstream",
a, a,
null, null,
Headers.headersOf("Referer", baseurl) Headers.headersOf("Referer", url)
) )
} else { } else {
return Video( return Video(
@ -124,13 +107,11 @@ class GenoAnime : ParsedAnimeHttpSource() {
// Anime window // Anime window
override fun animeDetailsParse(document: Document): SAnime { override fun animeDetailsParse(document: Document): SAnime {
val anime = SAnime.create() val anime = SAnime.create()
val thumburl = anime.thumbnail_url = "$baseUrl/${document.select("div.anime__details__pic").attr("data-setbg").removePrefix("./")}"
document.select("div.anime__details__pic").attr("data-setbg").removePrefix("./")
anime.thumbnail_url = "$baseUrl/$thumburl"
anime.title = document.select("div.anime__details__title h3").text() anime.title = document.select("div.anime__details__title h3").text()
anime.genre = document.select("div.col-lg-6.col-md-6:nth-of-type(1) ul li:nth-of-type(3)") anime.genre = document.select("div.col-lg-6.col-md-6:nth-of-type(1) ul li:nth-of-type(3)")
.joinToString(", ") { it.text() }.replace("Genre:", "") .joinToString(", ") { it.text() }.replace("Genre:", "")
anime.description = document.select("div.anime__details__title span").text() anime.description = document.select("div.anime__details__text > p").text()
document.select("div.col-lg-6.col-md-6:nth-of-type(2) ul li:nth-of-type(2)").text() document.select("div.col-lg-6.col-md-6:nth-of-type(2) ul li:nth-of-type(2)").text()
?.also { statusText -> ?.also { statusText ->
when { when {
@ -139,10 +120,6 @@ class GenoAnime : ParsedAnimeHttpSource() {
else -> anime.status = SAnime.UNKNOWN else -> anime.status = SAnime.UNKNOWN
} }
} }
// if (anime.status == SAnime.ONGOING) {
// val(aiiringat, epiisode, animeid) = next_ep_ween(anime.title)
// anime.next_ep_wen = airingmsg(epiisode, aiiringat)
// }
return anime return anime
} }
@ -151,6 +128,7 @@ class GenoAnime : ParsedAnimeHttpSource() {
val response = client.newCall(GET(url.replace("/e/", "/d/"))).execute() val response = client.newCall(GET(url.replace("/e/", "/d/"))).execute()
val content = response.body!!.string() val content = response.body!!.string()
val md5 = content.substringAfter("/download/").substringBefore("\"") val md5 = content.substringAfter("/download/").substringBefore("\"")
if (md5.contains("<!doctype html>")) { throw Exception("video not found") }
var abc = doodreq(url, md5) var abc = doodreq(url, md5)
while (abc.contains("""<b class="err">Security error</b>""")) { while (abc.contains("""<b class="err">Security error</b>""")) {
abc = doodreq(url, md5) abc = doodreq(url, md5)