forked from recloudstream/cloudstream
		
	NineAnime Recommendations (#725)
This commit is contained in:
		
							parent
							
								
									75472f5847
								
							
						
					
					
						commit
						ff868fe054
					
				
					 1 changed files with 35 additions and 12 deletions
				
			
		|  | @ -190,12 +190,9 @@ class NineAnimeProvider : MainAPI() { | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     override suspend fun load(url: String): LoadResponse? { |     override suspend fun load(url: String): LoadResponse? { | ||||||
|         val urlclean = url.substringAfter("watch/") |  | ||||||
|         val regexID = Regex("(\\.[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+)") |  | ||||||
|         val animeid = regexID.find(urlclean)?.value?.replace(".", "") ?: return null |  | ||||||
|         val animeidencoded = encode(getVrf(animeid) ?: return null) |  | ||||||
| 
 |  | ||||||
|         val doc = app.get(url).document |         val doc = app.get(url).document | ||||||
|  |         val animeid = doc.selectFirst("div.player-wrapper.watchpage").attr("data-id") ?: return null | ||||||
|  |         val animeidencoded = encode(getVrf(animeid) ?: return null) | ||||||
|         val poster = doc.selectFirst("aside.main div.thumb div img").attr("src") |         val poster = doc.selectFirst("aside.main div.thumb div img").attr("src") | ||||||
|         val title = doc.selectFirst(".info .title").text() |         val title = doc.selectFirst(".info .title").text() | ||||||
|         val description = doc.selectFirst("div.info p").text().replace("Ver menos", "").trim() |         val description = doc.selectFirst("div.info p").text().replace("Ver menos", "").trim() | ||||||
|  | @ -205,14 +202,42 @@ class NineAnimeProvider : MainAPI() { | ||||||
|             ).mapped<Response>().html |             ).mapped<Response>().html | ||||||
|         )?.select("ul.episodes li a")?.mapNotNull { |         )?.select("ul.episodes li a")?.mapNotNull { | ||||||
|             val link = it?.attr("href") ?: return@mapNotNull null |             val link = it?.attr("href") ?: return@mapNotNull null | ||||||
|             val epnum = it.attr("data-base")?.toIntOrNull() |             val name = "Episode ${it.text()}" | ||||||
|             AnimeEpisode(link, episode = epnum) |             AnimeEpisode(link, name) | ||||||
|         } ?: return null |         } ?: return null | ||||||
| 
 | 
 | ||||||
|         return newAnimeLoadResponse(title, url, TvType.Anime) { | 
 | ||||||
|  |         val recommendations = | ||||||
|  |             doc.select("div.container aside.main section div.body ul.anime-list li")?.mapNotNull { element -> | ||||||
|  |                 val recTitle = element.select("a.name").text() ?: return@mapNotNull null | ||||||
|  |                 val image = element.select("a.poster img")?.attr("src") | ||||||
|  |                 val recUrl = fixUrl(element.select("a").attr("href")) | ||||||
|  |                 AnimeSearchResponse( | ||||||
|  |                     recTitle, | ||||||
|  |                     fixUrl(recUrl), | ||||||
|  |                     this.name, | ||||||
|  |                     TvType.Anime, | ||||||
|  |                     image, | ||||||
|  |                     dubStatus = | ||||||
|  |                     if (recTitle.contains("(DUB)") || recTitle.contains("(Dub)")) EnumSet.of( | ||||||
|  |                         DubStatus.Dubbed | ||||||
|  |                     ) else EnumSet.of(DubStatus.Subbed), | ||||||
|  |                 ) | ||||||
|  |             } | ||||||
|  |         val infodoc = doc.selectFirst("div.info .meta .col1").text() | ||||||
|  |         val tvType = if (infodoc.contains("Movie")) TvType.AnimeMovie else TvType.Anime | ||||||
|  |         val status = | ||||||
|  |             if (infodoc.contains("Completed")) ShowStatus.Completed | ||||||
|  |             else if (infodoc.contains("Airing")) ShowStatus.Ongoing | ||||||
|  |             else null | ||||||
|  |         val tags = doc.select("div.info .meta .col1 div:contains(Genre) a").map { it.text() } | ||||||
|  |         return newAnimeLoadResponse(title, url, tvType) { | ||||||
|             posterUrl = poster |             posterUrl = poster | ||||||
|             addEpisodes(DubStatus.Subbed, episodes) |             addEpisodes(DubStatus.Subbed, episodes) | ||||||
|             plot = description |             plot = description | ||||||
|  |             this.recommendations = recommendations | ||||||
|  |             showStatus = status | ||||||
|  |             this.tags = tags | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -234,10 +259,8 @@ class NineAnimeProvider : MainAPI() { | ||||||
|         subtitleCallback: (SubtitleFile) -> Unit, |         subtitleCallback: (SubtitleFile) -> Unit, | ||||||
|         callback: (ExtractorLink) -> Unit |         callback: (ExtractorLink) -> Unit | ||||||
|     ): Boolean { |     ): Boolean { | ||||||
|         val urlclean = data.substringAfter("watch/") |         val document = app.get(data).document | ||||||
|         val regexID = Regex("(\\.[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+)") |         val animeid = document.selectFirst("div.player-wrapper.watchpage").attr("data-id") ?: return false | ||||||
|         val animeid = regexID.find(urlclean)?.value?.replace(".", "") ?: return false |  | ||||||
| 
 |  | ||||||
|         val animeidencoded = encode(getVrf(animeid) ?: return false) |         val animeidencoded = encode(getVrf(animeid) ?: return false) | ||||||
| 
 | 
 | ||||||
|         Jsoup.parse( |         Jsoup.parse( | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue