From 9a1c647b60efbbe8de087f0d098a5c335c3086eb Mon Sep 17 00:00:00 2001 From: ringosham Date: Fri, 26 Nov 2021 12:19:07 +0000 Subject: [PATCH] Adding Nicovideo Seiga source (#9928) * Adding Nicovideo Seiga source * Storing date found to SharedPreferences --- src/ja/nicovideoseiga/AndroidManifest.xml | 2 + src/ja/nicovideoseiga/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3060 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1979 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4284 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6755 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9766 bytes src/ja/nicovideoseiga/res/web_hi_res_512.png | Bin 0 -> 30094 bytes .../ja/nicovideoseiga/NicovideoSeiga.kt | 286 ++++++++++++++++++ 9 files changed, 300 insertions(+) create mode 100644 src/ja/nicovideoseiga/AndroidManifest.xml create mode 100644 src/ja/nicovideoseiga/build.gradle create mode 100644 src/ja/nicovideoseiga/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ja/nicovideoseiga/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ja/nicovideoseiga/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ja/nicovideoseiga/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ja/nicovideoseiga/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ja/nicovideoseiga/res/web_hi_res_512.png create mode 100644 src/ja/nicovideoseiga/src/eu/kanade/tachiyomi/extension/ja/nicovideoseiga/NicovideoSeiga.kt diff --git a/src/ja/nicovideoseiga/AndroidManifest.xml b/src/ja/nicovideoseiga/AndroidManifest.xml new file mode 100644 index 000000000..30deb7f79 --- /dev/null +++ b/src/ja/nicovideoseiga/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/src/ja/nicovideoseiga/build.gradle b/src/ja/nicovideoseiga/build.gradle new file mode 100644 index 000000000..0fe6c56ff --- /dev/null +++ b/src/ja/nicovideoseiga/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'Nicovideo Seiga' + pkgNameSuffix = 'ja.nicovideoseiga' + extClass = '.NicovideoSeiga' + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" diff --git a/src/ja/nicovideoseiga/res/mipmap-hdpi/ic_launcher.png b/src/ja/nicovideoseiga/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ba9fdae13b7974e34669cb8703c3016988d574af GIT binary patch literal 3060 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 literal 0 HcmV?d00001 diff --git a/src/ja/nicovideoseiga/res/mipmap-xhdpi/ic_launcher.png b/src/ja/nicovideoseiga/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b807d5b81566558b8ff2eadf85abbfeb605630 GIT binary patch literal 4284 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 el%jNKr2hk-n+_oPW(pVp0000I?F6gTQIFlf17 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 literal 0 HcmV?d00001 diff --git a/src/ja/nicovideoseiga/res/mipmap-xxxhdpi/ic_launcher.png b/src/ja/nicovideoseiga/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d3bfb979012a99515d73599f4843db1050fed27d GIT binary patch literal 9766 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 VxbvWs0_wj&O7iM*l``fb{{zwBd42!@ literal 0 HcmV?d00001 diff --git a/src/ja/nicovideoseiga/res/web_hi_res_512.png b/src/ja/nicovideoseiga/res/web_hi_res_512.png new file mode 100644 index 0000000000000000000000000000000000000000..440ff4e317f6b6b35b8496a380b4e40ed7fe1a56 GIT binary patch literal 30094 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 GVgC;VQ!%6f literal 0 HcmV?d00001 diff --git a/src/ja/nicovideoseiga/src/eu/kanade/tachiyomi/extension/ja/nicovideoseiga/NicovideoSeiga.kt b/src/ja/nicovideoseiga/src/eu/kanade/tachiyomi/extension/ja/nicovideoseiga/NicovideoSeiga.kt new file mode 100644 index 000000000..35fc144b8 --- /dev/null +++ b/src/ja/nicovideoseiga/src/eu/kanade/tachiyomi/extension/ja/nicovideoseiga/NicovideoSeiga.kt @@ -0,0 +1,286 @@ +package eu.kanade.tachiyomi.extension.ja.nicovideoseiga + +import android.app.Application +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.HttpSource +import okhttp3.Interceptor +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import okhttp3.ResponseBody.Companion.toResponseBody +import org.jsoup.Jsoup +import uy.kohesive.injekt.injectLazy +import kotlin.experimental.xor + +class NicovideoSeiga : HttpSource() { + // Nicovideo Seiga contains illustrations, manga and books from Bookwalker. This extension will focus on manga only. + override val baseUrl: String = "https://seiga.nicovideo.jp" + override val lang: String = "ja" + override val name: String = "Nicovideo Seiga" + override val supportsLatest: Boolean = true + override val client: OkHttpClient = network.client.newBuilder() + .addInterceptor(::imageIntercept) + .build() + private val application: Application by injectLazy() + + override fun latestUpdatesParse(response: Response): MangasPage { + val currentPage = response.request.url.queryParameter("page")!!.toInt() + val doc = Jsoup.parse(response.body!!.string()) + val mangaCount = doc.select("#main_title > h2 > span").text().trim().dropLast(1).toInt() + val mangaPerPage = 20 + val mangaList = doc.select("#comic_list > ul > li") + val mangas = ArrayList() + for (manga in mangaList) { + val mangaElement = manga.select("div > .description > div > div") + mangas.add( + SManga.create().apply { + setUrlWithoutDomain( + baseUrl + mangaElement.select(".comic_icon > div > a").attr("href") + ) + title = mangaElement.select(".mg_body > .title > a").text() + // While the site does label who are the author and artists are, there is no formatting standard at all! + // It becomes impossible to parse the names and their specific roles + // So we are not going to process this at all + author = mangaElement.select(".mg_description_header > .mg_author > a").text() + // Nicovideo doesn't provide large thumbnails in their searches and manga listings unfortunately + // A larger thumbnail is only available after going into the details page + thumbnail_url = mangaElement.select(".comic_icon > div > a > img").attr("src") + val statusText = + mangaElement.select(".mg_description_header > .mg_icon > .content_status > span") + .text() + status = when (statusText) { + "連載" -> { + SManga.ONGOING + } + "完結" -> { + SManga.COMPLETED + } + else -> { + SManga.UNKNOWN + } + } + } + ) + } + return MangasPage(mangas, mangaCount - mangaPerPage * currentPage > 0) + } + + override fun latestUpdatesRequest(page: Int): Request = + GET("$baseUrl/manga/list?page=$page&sort=manga_updated") + + override fun popularMangaParse(response: Response): MangasPage = latestUpdatesParse(response) + + override fun popularMangaRequest(page: Int): Request = + GET("$baseUrl/manga/list?page=$page&sort=manga_view") + + override fun searchMangaParse(response: Response): MangasPage { + val currentPage = response.request.url.queryParameter("page")!!.toInt() + val doc = Jsoup.parse(response.body!!.string()) + val mangaCount = + doc.select("#mg_wrapper > div > div.header > div.header__result-summary").text().trim() + .split(":")[1].toInt() + val mangaPerPage = 20 + val mangaList = doc.select(".search_result__item") + val mangas = ArrayList() + for (manga in mangaList) { + mangas.add( + SManga.create().apply { + setUrlWithoutDomain( + baseUrl + manga.select(".search_result__item__thumbnail > a") + .attr("href") + ) + title = + manga.select(".search_result__item__info > .search_result__item__info--title > a") + .text().trim() + // While the site does label who the author and artists are, there is no formatting standard at all! + // It becomes impossible to parse the names and their specific roles + // So we are not going to process this at all + author = + manga.select(".search_result__item__info > .search_result__item__info--author") + .text() + // Nicovideo doesn't provide large thumbnails in their searches and manga listings unfortunately + // A larger thumbnail/cover art is only available after going into the chapter listings + thumbnail_url = manga.select(".search_result__item__thumbnail > a > img") + .attr("data-original") + } + ) + } + return MangasPage(mangas, mangaCount - mangaPerPage * currentPage > 0) + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = + GET("$baseUrl/manga/search/?q=$query&page=$page&sort=score") + + override fun mangaDetailsParse(response: Response): SManga = SManga.create().apply { + val doc = Jsoup.parse(response.body!!.string()) + // The description is a mix of synopsis and news announcements + // This is just how mangakas use this site + description = + doc.select("#contents > div.mg_work_detail > div > div.row > div.description_text") + .text() + // A better larger cover art is available here + thumbnail_url = + doc.select("#contents > div.primaries > div.main_visual > a > img").attr("src") + val statusText = + doc.select("#contents > div.mg_work_detail > div > div:nth-child(2) > div.tip.content_status.status_series > span") + .text() + status = when (statusText) { + "連載" -> { + SManga.ONGOING + } + "完結" -> { + SManga.COMPLETED + } + else -> { + SManga.UNKNOWN + } + } + } + + override fun chapterListParse(response: Response): List { + val doc = Jsoup.parse(response.body!!.string()) + val chapters = ArrayList() + val chapterList = doc.select("#episode_list > ul > li") + val mangaId = response.request.url.toUrl().toString().substringAfterLast('/').substringBefore('?') + val sharedPref = application.getSharedPreferences("source_${id}_time_found:$mangaId", 0) + val editor = sharedPref.edit() + // After logging in, any chapters bought should show up as well + // Users will need to refresh their chapter list after logging in + for (chapter in chapterList) { + chapters.add( + SChapter.create().apply { + // Unfortunately we cannot filter out promotional materials in the chapter list, + // nor we can determine the chapter number from the title + // That would require understanding the context of the title (See One Punch Man and Uzaki-chan for example) + // Unless we have a machine learning algorithm in place, it's simply not possible + name = chapter.select("div > div.description > div.title > a").text() + setUrlWithoutDomain( + baseUrl + chapter.select("div > div.description > div.title > a") + .attr("href") + ) + // The data-number attribute is the only way we can determine chapter orders, + // without that this extension would have been impossible to make + // Note: Promotional materials also count as "chapters" here, so auto tracking unfortunately does not work at all + chapter_number = chapter.select("div").attr("data-number").toFloat() + // We can't determine the upload date from the website + // Store date_upload when a chapter is found for the first time + val dateFound = System.currentTimeMillis() + if (!sharedPref.contains(chapter_number.toString())) { + editor.putLong(chapter_number.toString(), dateFound) + } + date_upload = sharedPref.getLong(chapter_number.toString(), dateFound) + } + ) + } + editor.apply() + chapters.sortByDescending { chapter -> chapter.chapter_number } + return chapters + } + + override fun pageListParse(response: Response): List { + val doc = Jsoup.parse(response.body!!.string()) + val pages = ArrayList() + // Nicovideo will refuse to serve any pages if the user has not logged in + if (!doc.select("#login_manga").isEmpty()) + throw SecurityException("Not logged in. Please login via WebView first") + val pageList = doc.select("#page_contents > li") + for (page in pageList) { + val pageNumber = page.attr("data-page-index").toInt() + val url = page.select("div > img").attr("data-original") + pages.add(Page(pageNumber, url, url)) + } + return pages + } + + override fun imageRequest(page: Page): Request { + // Headers are required to avoid cache miss from server side + val headers = headersBuilder() + .set("referer", "https://seiga.nicovideo.jp/") + .set("accept", "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8") + .set("pragma", "no-cache") + .set("cache-control", "no-cache") + .set("accept-encoding", "gzip, deflate, br") + .set( + "user-agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36" + ) + .set("sec-fetch-dest", "image") + .set("sec-fetch-mode", "no-cors") + .set("sec-fetch-site", "cross-site") + .set("sec-gpc", "1") + .build() + return GET(page.imageUrl!!, headers) + } + + override fun imageUrlParse(response: Response): String = + throw UnsupportedOperationException("Not used") + + private fun imageIntercept(chain: Interceptor.Chain): Response { + // Intercept requests for paid manga images only + // Manga images come from 2 sources + // drm.cdn.nicomanga.jp -> Paid manga (Encrypted) + // deliver.cdn.nicomanga.jp -> Free manga (Unencrypted) + val imageRegex = + Regex("https://drm.cdn.nicomanga.jp/image/([a-f0-9]+)_\\d{4}/\\d+p(\\.[a-z]+)?(\\?\\d+)?") + val match = imageRegex.find(chain.request().url.toUrl().toString()) + ?: return chain.proceed(chain.request()) + + // Decrypt the image + val key = match.destructured.component1() + val response = chain.proceed(chain.request()) + val encryptedImage = response.body!!.bytes() + val decryptedImage = decryptImage(key, encryptedImage) + + // Construct a new response + val contentType = response.header("Content-Type", "image/${getImageType(decryptedImage)}") + val body = decryptedImage.toResponseBody(contentType!!.toMediaTypeOrNull()) + return response.newBuilder().body(body).build() + } + + /** + * Paid images are xor encrypted in Nicovideo. + * The image url is displayed in the document in noscript environment + * It will look like the following: + * https://drm.cdn.nicomanga.jp/image/d952d4bc53ddcaafffb42d628239ebed4f66df0f_9477/12057916p.webp?1636382474 + * ^^^^^^^^^^^^^^^^ + * The encryption key is stored directly on the URL. Up there. Yes, it stops right there + * The key is then split into 8 separate bytes + * Then it cycles through each mini-key and xor with the encrypted image byte by byte + * key: d9 52 d4 ... af d9 52 ... + * xor + * e: ab cd ef ... 12 34 56 ... + * The result image is then base64 encoded loaded into the page using the data URI scheme + * There are additional checks to determine the image type, defaults to webp + */ + private fun decryptImage(key: String, image: ByteArray): ByteArray { + val keySet = IntArray(8) + for (i in 0..7) + keySet[i] = key.substring(2 * i).take(2).toInt(16) + for (i in image.indices) + image[i] = image[i] xor keySet[i % 8].toByte() + return image + } + + /** + * Determine the image type by looking at specific bytes for magic numbers + * This is also how Nicovideo does it + */ + private fun getImageType(image: ByteArray): String { + return if (image[0].toInt() == 0xff && image[1].toInt() == 0xd8 && image[image.size - 2].toInt() == 0xff && image[image.size - 1].toInt() == 0xd9) { + "jpeg" + } else if (image[0].toInt() == 0x89 && image[1].toInt() == 0x50 && image[2].toInt() == 0x4e && image[3].toInt() == 0x47) { + "png" + } else if (image[0].toInt() == 0x47 && image[1].toInt() == 0x49 && image[2].toInt() == 0x46 && image[3].toInt() == 0x38) { + "gif" + } else { + // It defaults to null in the site, but it's a webp image + "webp" + } + } +}