New Template GuyaParser
Add DankeFursLesen, GuyaCubari, Hachirumi, MahouShoujobu, Olaoe Add local on sources GattsuParserpull/428/head
parent
a5219ceb6c
commit
edc07b5dbd
@ -0,0 +1,131 @@
|
||||
package org.koitharu.kotatsu.parsers.site.guya
|
||||
|
||||
import org.json.JSONObject
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.PagedMangaParser
|
||||
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
||||
import org.koitharu.kotatsu.parsers.model.*
|
||||
import org.koitharu.kotatsu.parsers.util.*
|
||||
import java.util.*
|
||||
|
||||
internal abstract class GuyaParser(
|
||||
context: MangaLoaderContext,
|
||||
source: MangaSource,
|
||||
domain: String,
|
||||
pageSize: Int = 0,
|
||||
) : PagedMangaParser(context, source, pageSize) {
|
||||
|
||||
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.ALPHABETICAL)
|
||||
|
||||
override val configKeyDomain = ConfigKey.Domain(domain)
|
||||
|
||||
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
|
||||
if (page > 1) return emptyList()
|
||||
val url = buildString {
|
||||
append("https://")
|
||||
append(domain)
|
||||
append("/api/get_all_series/")
|
||||
}
|
||||
when (filter) {
|
||||
|
||||
is MangaListFilter.Search -> {
|
||||
return parseMangaList(webClient.httpGet(url).parseJson(), filter.query)
|
||||
}
|
||||
|
||||
is MangaListFilter.Advanced -> {}
|
||||
|
||||
null -> {}
|
||||
}
|
||||
|
||||
return parseMangaList(webClient.httpGet(url).parseJson(), "")
|
||||
}
|
||||
|
||||
protected open fun parseMangaList(json: JSONObject, query: String): List<Manga> {
|
||||
val manga = ArrayList<Manga>(json.length())
|
||||
val keys: Iterator<String> = json.keys()
|
||||
while (keys.hasNext()) {
|
||||
val key = keys.next()
|
||||
if (json.get(key) is JSONObject) {
|
||||
if (query.isNotEmpty()) {
|
||||
if (key.lowercase().contains(query.lowercase())) manga.add(addManga(json.getJSONObject(key), key))
|
||||
} else manga.add(addManga(json.getJSONObject(key), key))
|
||||
}
|
||||
}
|
||||
return manga
|
||||
}
|
||||
|
||||
private fun addManga(j: JSONObject, name: String): Manga {
|
||||
val url = "https://$domain/read/manga/" + j.getString("slug")
|
||||
val apiUrl = "https://$domain/api/series/" + j.getString("slug")
|
||||
return Manga(
|
||||
id = generateUid(apiUrl),
|
||||
url = apiUrl,
|
||||
publicUrl = url,
|
||||
title = name,
|
||||
coverUrl = j.getString("cover").toAbsoluteUrl(domain),
|
||||
altTitle = null,
|
||||
rating = RATING_UNKNOWN,
|
||||
tags = emptySet(),
|
||||
description = j.getString("description"),
|
||||
state = null,
|
||||
author = j.getString("author"),
|
||||
isNsfw = isNsfwSource,
|
||||
source = source,
|
||||
)
|
||||
}
|
||||
|
||||
override suspend fun getAvailableTags(): Set<MangaTag> = emptySet()
|
||||
|
||||
override suspend fun getDetails(manga: Manga): Manga {
|
||||
val json = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseJson().getJSONObject("chapters")
|
||||
val slug = manga.url.removeSuffix('/').substringAfterLast('/')
|
||||
val keys: Iterator<String> = json.keys()
|
||||
val chapters = ArrayList<MangaChapter>()
|
||||
var i = 0
|
||||
while (keys.hasNext()) {
|
||||
val key = keys.next()
|
||||
++i
|
||||
val chapter = json.getJSONObject(key)
|
||||
val url = "https://$domain/api/series/$slug/$key"
|
||||
chapters.add(
|
||||
MangaChapter(
|
||||
id = generateUid(url),
|
||||
name = chapter.getString("title"),
|
||||
number = i,
|
||||
url = url,
|
||||
scanlator = null,
|
||||
uploadDate = 0,
|
||||
branch = null,
|
||||
source = source,
|
||||
),
|
||||
)
|
||||
}
|
||||
return manga.copy(chapters = chapters)
|
||||
}
|
||||
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
val key = chapter.url.substringAfterLast('/')
|
||||
val url = chapter.url.substringBeforeLast('/')
|
||||
val slug = url.substringAfterLast('/')
|
||||
val chapterPages = webClient.httpGet(url.toAbsoluteUrl(domain)).parseJson()
|
||||
.getJSONObject("chapters").getJSONObject(key)
|
||||
val images = chapterPages.getJSONObject("groups")
|
||||
val folder = chapterPages.getString("folder")
|
||||
val keysPages: Iterator<String> = images.keys()
|
||||
val firstKey = keysPages.next()
|
||||
val jsonPages = images.getJSONArray(firstKey)
|
||||
val pages = ArrayList<MangaPage>(jsonPages.length())
|
||||
for (i in 0 until jsonPages.length()) {
|
||||
val urlPage = "https://$domain/media/manga/$slug/chapters/$folder/$firstKey/" + jsonPages.getString(i)
|
||||
pages.add(
|
||||
MangaPage(
|
||||
id = generateUid(urlPage),
|
||||
url = urlPage,
|
||||
preview = null,
|
||||
source = source,
|
||||
),
|
||||
)
|
||||
}
|
||||
return pages
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package org.koitharu.kotatsu.parsers.site.guya.all
|
||||
|
||||
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.guya.GuyaParser
|
||||
|
||||
@MangaSourceParser("MAHOUSHOUJOBU", "MahouShoujobu")
|
||||
internal class MahouShoujobu(context: MangaLoaderContext) :
|
||||
GuyaParser(context, MangaSource.MAHOUSHOUJOBU, "mahoushoujobu.com")
|
||||
@ -0,0 +1,10 @@
|
||||
package org.koitharu.kotatsu.parsers.site.guya.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.guya.GuyaParser
|
||||
|
||||
@MangaSourceParser("DANKE", "DankeFursLesen", "en")
|
||||
internal class Danke(context: MangaLoaderContext) :
|
||||
GuyaParser(context, MangaSource.DANKE, "danke.moe")
|
||||
@ -0,0 +1,10 @@
|
||||
package org.koitharu.kotatsu.parsers.site.guya.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.guya.GuyaParser
|
||||
|
||||
@MangaSourceParser("GUYACUBARI", "GuyaCubari", "en")
|
||||
internal class GuyaCubari(context: MangaLoaderContext) :
|
||||
GuyaParser(context, MangaSource.GUYACUBARI, "guya.cubari.moe")
|
||||
@ -0,0 +1,11 @@
|
||||
package org.koitharu.kotatsu.parsers.site.guya.en
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.ContentType
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.guya.GuyaParser
|
||||
|
||||
@MangaSourceParser("HACHIRUMI", "Hachirumi", "en", ContentType.HENTAI)
|
||||
internal class Hachirumi(context: MangaLoaderContext) :
|
||||
GuyaParser(context, MangaSource.HACHIRUMI, "hachirumi.com")
|
||||
@ -0,0 +1,14 @@
|
||||
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("OLAOE", "Olaoe", "ar")
|
||||
internal class Olaoe(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.OLAOE, "olaoe.cyou") {
|
||||
override val datePattern = "dd-MM-yyyy"
|
||||
override val tagPrefix = "/شوجو"
|
||||
override val listUrl = "works/"
|
||||
}
|
||||
Loading…
Reference in New Issue