From 1e98104ecae3b7e5f5c0908cbd7f58b6a87e539b Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 1 Jul 2023 21:02:20 +0200 Subject: [PATCH] Add new source and add new scrapper for Chapter on theme madara --- .../parsers/site/madara/MadaraParser.kt | 23 +++++++++++++++---- .../parsers/site/madara/ar/Azoranov.kt | 2 +- .../parsers/site/madara/en/AdultWebtoon.kt | 18 +++++++++++++++ .../parsers/site/madara/en/AnshScans.kt | 3 ++- .../parsers/site/madara/en/Astrallibrary.kt | 16 +++++++++++++ .../parsers/site/madara/en/BlogManga.kt | 16 +++++++++++++ .../parsers/site/madara/en/BoysLove.kt | 18 +++++++++++++++ .../parsers/site/madara/en/CoffeeManga.kt | 3 ++- .../parsers/site/madara/en/ColoredManga.kt | 3 ++- .../parsers/site/madara/fr/Hentaizone.kt | 3 ++- .../parsers/site/madara/pt/CafecomYaoi.kt | 15 ++++++++++++ .../parsers/site/madara/ru/BestManga.kt | 16 +++++++++++++ .../kotatsu/parsers/site/madara/tr/Anikiga.kt | 19 +++++++++++++++ .../parsers/site/madara/tr/AnisaManga.kt | 17 ++++++++++++++ .../parsers/site/madara/tr/ArazNovel.kt | 18 +++++++++++++++ .../parsers/site/madara/tr/Webtoontr.kt | 3 ++- 16 files changed, 182 insertions(+), 11 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index bb87d2a2..eb3b0a33 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -33,6 +33,8 @@ internal abstract class MadaraParser( protected open val isNsfwSource = false protected open val datePattern = "MMMM dd, yyyy" + protected open val postreq = false + init { paginator.firstPage = 0 searchPaginator.firstPage = 0 @@ -202,8 +204,7 @@ internal abstract class MadaraParser( val testchekasync = doc.body().select("div.listing-chapters_wrap") val chaptersDeferred = if (testchekasync.isNullOrEmpty()) { - async { loadChapters(manga.url) } - + async { loadChapters(manga.url, doc) } } else { async { getChapters(manga, doc) } } @@ -277,10 +278,20 @@ internal abstract class MadaraParser( } } - protected open suspend fun loadChapters(mangaUrl: String): List { - val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" + protected open suspend fun loadChapters(mangaUrl: String, document: Document): List { + + val doc = if (postreq == false) { + val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" + webClient.httpPost(url, emptyMap()).parseHtml() + } else { + val mangaId = document.select("div#manga-chapters-holder").attr("data-id") + val url = "https://$domain/wp-admin/admin-ajax.php" + val postdata = "action=manga_get_chapters&manga=$mangaId" + + webClient.httpPost(url, postdata).parseHtml() + } val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - val doc = webClient.httpPost(url, emptyMap()).parseHtml() + return doc.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li -> val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") @@ -340,9 +351,11 @@ internal abstract class MadaraParser( date.endsWith(" h", ignoreCase = true) -> { parseRelativeDate(date) } + date.endsWith(" d", ignoreCase = true) -> { parseRelativeDate(date) } + date.endsWith(" mins", ignoreCase = true) -> { parseRelativeDate(date) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt index e0f90815..911cdcee 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt @@ -9,7 +9,7 @@ import java.util.Locale @MangaSourceParser("AZORANOV", "Azoranov", "ar") internal class Azoranov(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.AZORANOV, "azoranov.com", pageSize = 10,) { + MadaraParser(context, MangaSource.AZORANOV, "azoranov.com", pageSize = 10) { override val tagPrefix = "novel-genre/" override val datePattern = "MMMM d, yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt new file mode 100644 index 00000000..0a98cf75 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +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("ADULT_WEBTOON", "Adult Webtoon", "en") +internal class AdultWebtoon(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ADULT_WEBTOON, "adultwebtoon.com") { + + override val isNsfwSource = true + override val tagPrefix = "adult-webtoon-genre/" + override val datePattern = "MMMM d, yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt index 1b8463ae..32ef0bda 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ANSHSCANS", "Ansh Scans", "en") -internal class AnshScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ANSHSCANS, "anshscans.org", 10){ +internal class AnshScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ANSHSCANS, "anshscans.org", 10) { override val tagPrefix = "genre/" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt new file mode 100644 index 00000000..5e3b4094 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +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("ASTRALLIBRARY", "Astrallibrary", "en") +internal class Astrallibrary(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ASTRALLIBRARY, "astrallibrary.net", 18) { + + override val datePattern = "dd MMM" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt new file mode 100644 index 00000000..7f8ca4ac --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +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("BLOG_MANGA", "Blog Manga", "en") +internal class BlogManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BLOG_MANGA, "blogmanga.net") { + + override val datePattern = "MMMM d, yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt new file mode 100644 index 00000000..420cb168 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +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("BOYS_LOVE", "Boys Love", "en") +internal class BoysLove(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BOYS_LOVE, "boyslove.me", 20) { + + override val isNsfwSource = true + override val tagPrefix = "boyslove-genre/" + override val datePattern = "MMMM d, yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt index 87d7374d..03f680bc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("COFFEE_MANGA", "Coffee Manga", "en") -internal class CoffeeManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.COFFEE_MANGA, "coffeemanga.io") { +internal class CoffeeManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.COFFEE_MANGA, "coffeemanga.io") { override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt index 2e4d181b..34e2e537 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("COLORED_MANGA", "Colored Manga", "en") -internal class ColoredManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.COLORED_MANGA, "coloredmanga.com") { +internal class ColoredManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.COLORED_MANGA, "coloredmanga.com") { override val tagPrefix = "manga-tag" override val datePattern = "dd-MMM" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt index 09a64cab..eae757e6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.madara.fr +import org.jsoup.nodes.Document import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaChapter @@ -20,7 +21,7 @@ internal class Hentaizone(context: MangaLoaderContext) : override val isNsfwSource = true - override suspend fun loadChapters(mangaUrl: String): List { + override suspend fun loadChapters(mangaUrl: String, document: Document): List { val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" val dateFormat = SimpleDateFormat(datePattern, sourceLocale) val doc = webClient.httpPost(url, emptyMap()).parseHtml() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt new file mode 100644 index 00000000..bcd5623d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +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("CAFECOMYAOI", "Cafecom Yaoi", "pt") +internal class CafecomYaoi(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.CAFECOMYAOI, "cafecomyaoi.com.br") { + + override val datePattern = "dd/MM/yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt new file mode 100644 index 00000000..41666ea2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.ru + + +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("BEST_MANGA", "best manga", "ru") +internal class BestManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BEST_MANGA, "bestmanga.club") { + + override val datePattern = "dd.MM.yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt new file mode 100644 index 00000000..04176069 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt @@ -0,0 +1,19 @@ +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 +import java.util.Locale + + +@MangaSourceParser("ANIKIGA", "Anikiga", "tr") +internal class Anikiga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ANIKIGA, "anikiga.com") { + + override val tagPrefix = "manga-tur" + override val datePattern = "d MMMM yyyy" + override val sourceLocale: Locale = Locale("tr") + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt new file mode 100644 index 00000000..5fd765eb --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt @@ -0,0 +1,17 @@ +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 +import java.util.Locale + + +@MangaSourceParser("ANISA_MANGA", "Anisa Manga", "tr") +internal class AnisaManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ANISA_MANGA, "anisamanga.com") { + + override val datePattern = "MMMM d, yyyy" + override val sourceLocale: Locale = Locale("tr") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt new file mode 100644 index 00000000..bef1fafa --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt @@ -0,0 +1,18 @@ +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 +import java.util.Locale + + +@MangaSourceParser("ARAZNOVEL", "Araz Novel", "tr") +internal class ArazNovel(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ARAZNOVEL, "araznovel.com", 10) { + + override val datePattern = "d MMMM yyyy" + override val sourceLocale: Locale = Locale("tr") + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt index 35d7fc09..37d6a5cc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("WEBTOONTR", "Webtoontr", "tr") -internal class Webtoontr(context: MangaLoaderContext) : MadaraParser(context, MangaSource.WEBTOONTR, "webtoon-tr.com", 16) { +internal class Webtoontr(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.WEBTOONTR, "webtoon-tr.com", 16) { override val tagPrefix = "webtoon-kategori/" override val datePattern = "dd/MM/yyyy" }