Fix ReaperComics close #816
close #699 Fix GuildaTierDraw close #786 Fix Truyenqq close #793 Fix JiangzaiToon close #783 Fix MangaPark close #734 Fix ScanIta close #670 Add MangaPeak close #888 Fix ArvenComics close #660
parent
cd468df9ad
commit
11c1eafa0d
@ -0,0 +1,10 @@
|
|||||||
|
package org.koitharu.kotatsu.parsers.site.madara.ar
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
|
@MangaSourceParser("MANGAPEAK", "MangaPeak", "ar")
|
||||||
|
internal class MangaPeak(context: MangaLoaderContext) :
|
||||||
|
MadaraParser(context, MangaSource.MANGAPEAK, "mangapeak.org")
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
package org.koitharu.kotatsu.parsers.site.madara.tr
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
|
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||||
|
|
||||||
|
//Images blocked by ReCAPTCHA
|
||||||
|
@MangaSourceParser("MERLINSCANS", "MerlinScans", "tr")
|
||||||
|
internal class MerlinScans(context: MangaLoaderContext) :
|
||||||
|
MadaraParser(context, MangaSource.MERLINSCANS, "merlinscans.com", 10)
|
||||||
@ -1,12 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.mangareader.tr
|
|
||||||
|
|
||||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
|
||||||
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
|
||||||
|
|
||||||
@MangaSourceParser("MERLINSCANS", "MerlinScans", "tr")
|
|
||||||
internal class MerlinScans(context: MangaLoaderContext) :
|
|
||||||
MangaReaderParser(context, MangaSource.MERLINSCANS, "merlinscans.com", pageSize = 25, searchPageSize = 20) {
|
|
||||||
override val isTagsExclusionSupported = false
|
|
||||||
}
|
|
||||||
@ -1,10 +1,58 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.scan.it
|
package org.koitharu.kotatsu.parsers.site.scan.it
|
||||||
|
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import org.jsoup.nodes.Document
|
||||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
|
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
|
import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN
|
||||||
import org.koitharu.kotatsu.parsers.site.scan.ScanParser
|
import org.koitharu.kotatsu.parsers.site.scan.ScanParser
|
||||||
|
import org.koitharu.kotatsu.parsers.util.*
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import kotlinx.coroutines.coroutineScope
|
||||||
|
|
||||||
@MangaSourceParser("SCANITA", "ScanIta.org", "it")
|
@MangaSourceParser("SCANITA", "ScanIta.org", "it")
|
||||||
internal class ScanIta(context: MangaLoaderContext) :
|
internal class ScanIta(context: MangaLoaderContext) :
|
||||||
ScanParser(context, MangaSource.SCANITA, "scanita.org")
|
ScanParser(context, MangaSource.SCANITA, "scanita.org") {
|
||||||
|
|
||||||
|
override suspend fun getDetails(manga: Manga): Manga = coroutineScope {
|
||||||
|
val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
|
||||||
|
val tagMap = getOrCreateTagMap()
|
||||||
|
val selectTag = doc.select(".card-series-detail .col-6:contains(Categorie) div")
|
||||||
|
val tags = selectTag.mapNotNullToSet { tagMap[it.text()] }
|
||||||
|
val chaptersDeferred = async { loadChapters(doc) }
|
||||||
|
manga.copy(
|
||||||
|
rating = doc.selectFirst(".card-series-detail .rate-value span")?.ownText()?.toFloatOrNull()?.div(5f)
|
||||||
|
?: RATING_UNKNOWN,
|
||||||
|
tags = tags,
|
||||||
|
author = doc.selectFirst(".card-series-detail .col-6:contains(Autore) div")?.text(),
|
||||||
|
altTitle = doc.selectFirst(".card div.col-12.mb-4 h2")?.text().orEmpty(),
|
||||||
|
description = doc.selectFirst(".card div.col-12.mb-4 p")?.html().orEmpty(),
|
||||||
|
chapters = chaptersDeferred.await(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun loadChapters(document: Document): List<MangaChapter> {
|
||||||
|
val id = document.selectFirstOrThrow(".container-fluid button.w-100").attr("data-path")
|
||||||
|
.substringAfter("/manga/").substringBefore("/books")
|
||||||
|
val url = "https://$domain/manga/$id/books"
|
||||||
|
val doc = webClient.httpGet(url).parseHtml()
|
||||||
|
val dateFormat = SimpleDateFormat("MM-dd-yyyy", sourceLocale)
|
||||||
|
return doc.select(".chapters-list .col-chapter").mapChapters(reversed = true) { i, div ->
|
||||||
|
val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href")
|
||||||
|
MangaChapter(
|
||||||
|
id = generateUid(href),
|
||||||
|
name = div.selectFirstOrThrow("h5").html().substringBefore("<div").substringAfter("</span>"),
|
||||||
|
number = i + 1f,
|
||||||
|
volume = 0,
|
||||||
|
url = href,
|
||||||
|
scanlator = null,
|
||||||
|
uploadDate = dateFormat.tryParse(doc.selectFirstOrThrow("h5 div").text()),
|
||||||
|
branch = null,
|
||||||
|
source = source,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue