[RU]NudeMoon change domain and other fixes (#13914)

* update site url

* Parse mobile site version
Fix a lot if error
This commit is contained in:
abubaca4 2022-10-19 17:10:10 +03:00 committed by GitHub
parent 1c2bcee25e
commit 0a5202d84a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 36 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'Nude-Moon'
pkgNameSuffix = 'ru.nudemoon'
extClass = '.Nudemoon'
extVersionCode = 8
extVersionCode = 9
isNsfw = true
}

View File

@ -20,7 +20,7 @@ class Nudemoon : ParsedHttpSource() {
override val name = "Nude-Moon"
override val baseUrl = "https://nude-moon.net"
override val baseUrl = "https://nude-moon.me"
override val lang = "ru"
@ -29,6 +29,7 @@ class Nudemoon : ParsedHttpSource() {
private val cookiesHeader by lazy {
val cookies = mutableMapOf<String, String>()
cookies["NMfYa"] = "1"
cookies["nm_mobile"] = "1"
buildCookies(cookies)
}
@ -99,7 +100,7 @@ class Nudemoon : ParsedHttpSource() {
return GET(url, headers)
}
override fun popularMangaSelector() = "tr[valign=top]"
override fun popularMangaSelector() = "table.news_pic2"
override fun latestUpdatesSelector() = popularMangaSelector()
@ -108,7 +109,7 @@ class Nudemoon : ParsedHttpSource() {
override fun popularMangaFromElement(element: Element): SManga {
val manga = SManga.create()
manga.thumbnail_url = element.select("img[class^=news]").attr("abs:src")
manga.thumbnail_url = element.select("img.news_pic2").attr("abs:src")
element.select("a:has(h2)").let {
manga.title = it.text()
manga.setUrlWithoutDomain(it.attr("href"))
@ -123,7 +124,7 @@ class Nudemoon : ParsedHttpSource() {
override fun searchMangaFromElement(element: Element): SManga =
popularMangaFromElement(element)
override fun popularMangaNextPageSelector() = "a.small:contains(Следующая)"
override fun popularMangaNextPageSelector() = "a.small:contains(>)"
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
@ -131,18 +132,28 @@ class Nudemoon : ParsedHttpSource() {
override fun mangaDetailsParse(document: Document): SManga {
val manga = SManga.create()
manga.author = document.select("div.tbl1 a[href^=mangaka]").text()
manga.genre = document.select("div.tbl2 span.tag-links a").joinToString { it.text() }
manga.author = document.select("table.news_pic2 a[href*=mangaka]").text()
manga.genre = document.select("table.news_pic2 div.tag-links a").joinToString { it.text() }
manga.description = document.select(".description").text()
manga.thumbnail_url = document.select("tr[valign=top] img[class^=news]").attr("abs:src")
manga.thumbnail_url = document.selectFirst("div.gallery-item img.textbox").attr("abs:data-src")
return manga
}
override fun chapterListRequest(manga: SManga): Request {
val mangaDocument: Document
client.newCall(
GET(baseUrl + manga.url, headers)
).execute().run {
if (!isSuccessful) {
close()
throw Exception("HTTP error $code")
}
mangaDocument = this.asJsoup()
}
val chapterUrl = if (manga.title.contains("\\s#\\d+".toRegex()))
"/vse_glavy/" + manga.title.split("\\s#\\d+".toRegex())[0].replace("\\W".toRegex(), "_")
val chapterUrl = if (mangaDocument.select("td.button a:contains(Все главы)").isNotEmpty())
mangaDocument.select("td.button a:contains(Все главы)").attr("href")
else
manga.url
@ -151,39 +162,46 @@ class Nudemoon : ParsedHttpSource() {
override fun chapterListSelector() = popularMangaSelector()
override fun chapterListParse(response: Response): List<SChapter> {
override fun chapterListParse(response: Response): List<SChapter> = mutableListOf<SChapter>().apply {
val responseUrl = response.request.url.toString()
val document = response.asJsoup()
if (!responseUrl.contains("/vse_glavy/")) {
return listOf(chapterFromElement(document))
add(chapterFromElement(document))
} else {
document.select("table.news_pic2").forEach {
val chapter = SChapter.create()
val nameAndUrl = it.select("tr[valign=top] a:has(h2)")
chapter.name = nameAndUrl.select("h2").text()
chapter.setUrlWithoutDomain(nameAndUrl.attr("abs:href"))
chapter.scanlator = it.select("tr[valign=top] td[align=left] a[href*=perevod]").text()
chapter.date_upload = it.selectFirst("tr[valign=top] td[align=left] span.small2").text().let {
textDate ->
try {
SimpleDateFormat("dd MMMM yyyy", Locale("ru")).parse(textDate)?.time ?: 0L
} catch (e: Exception) {
0
}
}
val floatRegex = Regex("^([+-]?\\d*\\.?\\d*)\$")
chapter.chapter_number = floatRegex.find(chapter.name).toString().toFloatOrNull() ?: -1f
add(chapter)
}
}
// Order chapters by its number 'cause on the site they are in random order
return document.select(chapterListSelector()).sortedByDescending {
val regex = "#(\\d+)".toRegex()
val chapterName = it.select("img[class^=news]").first().parent().attr("title")
regex.find(chapterName)?.groupValues?.get(1)?.toInt() ?: 0
}.map { chapterFromElement(it) }
}
override fun chapterFromElement(element: Element): SChapter {
val chapter = SChapter.create()
val infoElem = element.select("tr[valign=top]").first().parent()
val chapterName = infoElem.select("h1, h2").text()
var chapterUrl = infoElem.select("a[title]:has(img)").attr("href")
if (!chapterUrl.contains("-online")) {
chapterUrl = chapterUrl.replace("/\\d+".toRegex(), "$0-online")
} else {
chapter.chapter_number = 1F
}
val chapterName = element.select("table td.bg_style1 h1").text()
var chapterUrl = element.baseUri()
chapter.setUrlWithoutDomain(if (!chapterUrl.startsWith("/")) "/$chapterUrl" else chapterUrl)
chapter.setUrlWithoutDomain(chapterUrl)
chapter.name = chapterName
chapter.date_upload = infoElem.text().substringAfter("Дата:").substringBefore("Просмотров").trim().let {
chapter.scanlator = element.select("table.news_pic2 a[href*=perevod]").text()
chapter.date_upload = element.select("table.news_pic2 span.small2:contains(/)").text().let {
try {
SimpleDateFormat("dd MMMM yyyy", Locale("ru")).parse(it)?.time ?: 0L
SimpleDateFormat("dd/MM/yyyy", Locale("ru")).parse(it)?.time ?: 0L
} catch (e: Exception) {
0
}
@ -192,12 +210,10 @@ class Nudemoon : ParsedHttpSource() {
return chapter
}
override fun pageListParse(response: Response): List<Page> {
val imgScript = response.asJsoup().select("script:containsData(var images)").first().data()
return Regex("""images\[(\d+)].src\s=\s'(http.*)'""").findAll(imgScript).map {
Page(it.groupValues[1].toInt(), imageUrl = it.groupValues[2])
}.toList()
override fun pageListParse(response: Response): List<Page> = mutableListOf<Page>().apply {
response.asJsoup().select("div.gallery-item img.textbox").mapIndexed { index, img ->
add(Page(index, imageUrl = img.attr("abs:data-src")))
}
}
override fun imageUrlParse(document: Document) = throw Exception("Not Used")