[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:
parent
1c2bcee25e
commit
0a5202d84a
|
@ -5,7 +5,7 @@ ext {
|
|||
extName = 'Nude-Moon'
|
||||
pkgNameSuffix = 'ru.nudemoon'
|
||||
extClass = '.Nudemoon'
|
||||
extVersionCode = 8
|
||||
extVersionCode = 9
|
||||
isNsfw = true
|
||||
}
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue