[EleceedTurkiye] Add source (#2006)
parent
63f37d159a
commit
3c55b68beb
@ -1 +1 @@
|
|||||||
total: 1237
|
total: 1238
|
||||||
@ -0,0 +1 @@
|
|||||||
|
kotatsu-parsers
|
||||||
@ -0,0 +1,117 @@
|
|||||||
|
package org.koitharu.kotatsu.parsers.site.tr
|
||||||
|
|
||||||
|
import org.json.JSONObject
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
|
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
||||||
|
import org.koitharu.kotatsu.parsers.core.SinglePageMangaParser
|
||||||
|
import org.koitharu.kotatsu.parsers.model.*
|
||||||
|
import org.koitharu.kotatsu.parsers.util.*
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
@MangaSourceParser("ELECEEDTURKIYE", "Eleceed Türkiye", "tr")
|
||||||
|
internal class EleceedTurkiye(context: MangaLoaderContext):
|
||||||
|
SinglePageMangaParser(context, MangaParserSource.ELECEEDTURKIYE) {
|
||||||
|
|
||||||
|
override val configKeyDomain = ConfigKey.Domain(
|
||||||
|
"eleceedturkiye.com",
|
||||||
|
"www.eleceedturkiye.com"
|
||||||
|
)
|
||||||
|
|
||||||
|
override val availableSortOrders: Set<SortOrder> = EnumSet.of(SortOrder.UPDATED)
|
||||||
|
|
||||||
|
override val filterCapabilities: MangaListFilterCapabilities
|
||||||
|
get() = MangaListFilterCapabilities()
|
||||||
|
|
||||||
|
override suspend fun getFilterOptions() = MangaListFilterOptions()
|
||||||
|
|
||||||
|
override suspend fun getList(order: SortOrder, filter: MangaListFilter): List<Manga> {
|
||||||
|
val raw = webClient.httpGet("https://$domain").parseHtml()
|
||||||
|
val coverUrl = raw.select("div.thumb img").attr("src")
|
||||||
|
return listOf(
|
||||||
|
Manga(
|
||||||
|
id = generateUid(mangaId),
|
||||||
|
url = "https://$domain/",
|
||||||
|
publicUrl = "https://$domain/",
|
||||||
|
coverUrl = coverUrl,
|
||||||
|
title = "Eleceed",
|
||||||
|
altTitles = emptySet(),
|
||||||
|
rating = RATING_UNKNOWN,
|
||||||
|
tags = emptySet(),
|
||||||
|
authors = setOf("Son Jae Ho", "ZHENA"),
|
||||||
|
state = MangaState.ONGOING,
|
||||||
|
source = source,
|
||||||
|
contentRating = ContentRating.ADULT
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getDetails(manga: Manga): Manga {
|
||||||
|
val doc = webClient.httpGet(manga.url).parseHtml()
|
||||||
|
return manga.copy(
|
||||||
|
description = doc.selectFirst("div.entry-content")?.html(),
|
||||||
|
tags = setOf(
|
||||||
|
MangaTag("Aksiyon", "", source),
|
||||||
|
MangaTag("Drama", "", source),
|
||||||
|
MangaTag("Komedi", "", source),
|
||||||
|
MangaTag("Süper Güçler", "", source)
|
||||||
|
),
|
||||||
|
chapters = doc.select("div.eph-num").map { div ->
|
||||||
|
val href = div.selectFirstOrThrow("a").attr("href")
|
||||||
|
val title = div.selectFirst("span.chapternum").text()
|
||||||
|
MangaChapter(
|
||||||
|
id = generateUid(href),
|
||||||
|
title = title,
|
||||||
|
number = Regex("\\d+").find(title)?.value?.toFloatOrNull() ?: 0f,
|
||||||
|
url = href,
|
||||||
|
uploadDate = parseChapterDate(div.selectFirst("span.chapterdate")?.text()),
|
||||||
|
scanlator = null,
|
||||||
|
branch = null,
|
||||||
|
source = source,
|
||||||
|
volume = 0,
|
||||||
|
)
|
||||||
|
}.reversed()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||||
|
val doc = webClient.httpGet(chapter.url).parseHtml()
|
||||||
|
val scriptData = doc.select("script")
|
||||||
|
.firstOrNull { it.data().contains("ts_reader.run(") }
|
||||||
|
?.data()
|
||||||
|
?.substringAfter("ts_reader.run(")
|
||||||
|
?.substringBeforeLast(");")
|
||||||
|
?: error("Script data not found")
|
||||||
|
|
||||||
|
val json = JSONObject(scriptData)
|
||||||
|
val sources = json.getJSONArray("sources")
|
||||||
|
if (sources.length() == 0) error("No sources found")
|
||||||
|
|
||||||
|
val firstSource = sources.getJSONObject(0)
|
||||||
|
val images = firstSource.getJSONArray("images")
|
||||||
|
|
||||||
|
return List(images.length()) { index ->
|
||||||
|
val imageUrl = images.getString(index)
|
||||||
|
MangaPage(
|
||||||
|
id = generateUid(imageUrl),
|
||||||
|
url = imageUrl.toAbsoluteUrl(domain),
|
||||||
|
preview = null,
|
||||||
|
source = source,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val mangaId = "eleceed"
|
||||||
|
private val dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("tr"))
|
||||||
|
|
||||||
|
private fun parseChapterDate(dateString: String?): Long {
|
||||||
|
return dateString?.let {
|
||||||
|
try {
|
||||||
|
dateFormat.parse(it)?.time ?: 0
|
||||||
|
} catch (e: Exception) {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
} ?: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue