增加在线数据源 nyafun (仅 Android)

This commit is contained in:
Him188
2024-05-25 12:52:02 +01:00
parent 087990e579
commit 742a39f8f4
29 changed files with 1910 additions and 19 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.html linguist-vendored

View File

@ -2,6 +2,11 @@ package me.him188.ani.android
import kotlinx.coroutines.CoroutineScope
import me.him188.ani.android.navigation.AndroidBrowserNavigator
import me.him188.ani.app.data.media.resolver.AndroidWebVideoSourceResolver
import me.him188.ani.app.data.media.resolver.HttpStreamingVideoSourceResolver
import me.him188.ani.app.data.media.resolver.LocalFileVideoSourceResolver
import me.him188.ani.app.data.media.resolver.TorrentVideoSourceResolver
import me.him188.ani.app.data.media.resolver.VideoSourceResolver
import me.him188.ani.app.navigation.BrowserNavigator
import me.him188.ani.app.tools.torrent.DefaultTorrentManager
import me.him188.ani.app.tools.torrent.TorrentManager
@ -22,4 +27,15 @@ fun getAndroidModules(
)
}
single<PlayerStateFactory> { ExoPlayerStateFactory() }
factory<VideoSourceResolver> {
VideoSourceResolver.from(
get<TorrentManager>().engines
.map { TorrentVideoSourceResolver(it) }
.plus(LocalFileVideoSourceResolver())
.plus(HttpStreamingVideoSourceResolver())
.plus(AndroidWebVideoSourceResolver())
)
}
}

View File

@ -39,6 +39,10 @@ import androidx.compose.ui.window.WindowState
import androidx.compose.ui.window.singleWindowApplication
import dev.dirs.ProjectDirectories
import kotlinx.coroutines.launch
import me.him188.ani.app.data.media.resolver.HttpStreamingVideoSourceResolver
import me.him188.ani.app.data.media.resolver.LocalFileVideoSourceResolver
import me.him188.ani.app.data.media.resolver.TorrentVideoSourceResolver
import me.him188.ani.app.data.media.resolver.VideoSourceResolver
import me.him188.ani.app.interaction.PlatformImplementations
import me.him188.ani.app.navigation.AniNavigator
import me.him188.ani.app.navigation.BrowserNavigator
@ -118,6 +122,14 @@ object AniDesktop {
}
}
single<BrowserNavigator> { DesktopBrowserNavigator() }
factory<VideoSourceResolver> {
VideoSourceResolver.from(
get<TorrentManager>().engines
.map { TorrentVideoSourceResolver(it) }
.plus(LocalFileVideoSourceResolver())
.plus(HttpStreamingVideoSourceResolver())
)
}
})
}.startCommonKoinModule(coroutineScope)

View File

@ -82,6 +82,7 @@ kotlin {
api(projects.dataSources.acgRip)
api(projects.dataSources.mikan)
api(projects.dataSources.bangumi)
api(projects.dataSources.nyafun)
// Danmaku
// api(projects.danmaku.api)

View File

@ -0,0 +1,127 @@
package me.him188.ani.app.data.media.resolver
import android.annotation.SuppressLint
import android.content.Context
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import me.him188.ani.app.platform.LocalContext
import me.him188.ani.app.videoplayer.data.VideoSource
import me.him188.ani.app.videoplayer.torrent.HttpStreamingVideoSource
import me.him188.ani.datasources.api.Media
import me.him188.ani.datasources.api.matcher.WebVideoMatcher
import me.him188.ani.datasources.api.matcher.WebVideoMatcherContext
import me.him188.ani.datasources.api.topic.ResourceLocation
import me.him188.ani.utils.logging.info
import me.him188.ani.utils.logging.logger
import java.io.ByteArrayInputStream
/**
* 用 WebView 加载网站, 拦截 WebView 加载资源, 用各数据源提供的 [WebVideoMatcher]
*/
class AndroidWebVideoSourceResolver : VideoSourceResolver {
private val matchers = java.util.ServiceLoader.load(WebVideoMatcher::class.java).filterNotNull()
override suspend fun supports(media: Media): Boolean = media.download is ResourceLocation.WebVideo
private var attached: Context? = null
@SuppressLint("SetJavaScriptEnabled")
@Composable
override fun ComposeContent() {
super.ComposeContent()
val context = LocalContext.current
DisposableEffect(true) {
attached = context
onDispose {
attached = null
}
}
}
override suspend fun resolve(media: Media, episode: EpisodeMetadata): VideoSource<*> {
if (!supports(media)) throw UnsupportedMediaException(media)
val matcherContext = WebVideoMatcherContext(media)
val webVideo = WebViewVideoExtractor().getVideoResourceUrl(
attached ?: throw IllegalStateException("WebVideoSourceResolver not attached"),
media.download.uri,
resourceMatcher = {
matchers.firstNotNullOfOrNull { matcher ->
matcher.match(it, matcherContext)
}
}
)
return HttpStreamingVideoSource(webVideo.m3u8Url, media.originalTitle, webVideo = webVideo)
}
}
class WebViewVideoExtractor {
private companion object {
private val logger = logger<WebViewVideoExtractor>()
}
@OptIn(DelicateCoroutinesApi::class)
@SuppressLint("SetJavaScriptEnabled")
suspend fun <R : Any> getVideoResourceUrl(
context: Context,
pageUrl: String,
resourceMatcher: (String) -> R?,
): R {
val deferred = CompletableDeferred<R>()
withContext(Dispatchers.Main) {
val webView = WebView(context)
deferred.invokeOnCompletion {
GlobalScope.launch(Dispatchers.Main.immediate) {
webView.destroy()
}
}
webView.settings.javaScriptEnabled = true
webView.webViewClient = object : WebViewClient() {
override fun shouldInterceptRequest(
view: WebView?,
request: WebResourceRequest?
): WebResourceResponse? {
if (request == null) return null
val url = request.url ?: return super.shouldInterceptRequest(view, request)
val matched = resourceMatcher(url.toString())
if (matched != null) {
logger.info { "Found video resource via shouldInterceptRequest: $url" }
deferred.complete(matched)
// 拦截, 以防资源只能加载一次
return WebResourceResponse(
"text/plain",
"UTF-8", 500,
"Internal Server Error",
mapOf(),
ByteArrayInputStream(ByteArray(0)),
)
}
return super.shouldInterceptRequest(view, request)
}
}
webView.loadUrl(pageUrl)
}
return try {
deferred.await()
} catch (e: Throwable) {
if (deferred.isActive) {
deferred.cancel()
}
throw e
}
}
}

View File

@ -3,6 +3,7 @@ package me.him188.ani.app.data.media.resolver
import me.him188.ani.app.videoplayer.data.VideoSource
import me.him188.ani.app.videoplayer.torrent.HttpStreamingVideoSource
import me.him188.ani.datasources.api.Media
import me.him188.ani.datasources.api.matcher.WebVideo
import me.him188.ani.datasources.api.topic.ResourceLocation
class HttpStreamingVideoSourceResolver : VideoSourceResolver {
@ -12,6 +13,10 @@ class HttpStreamingVideoSourceResolver : VideoSourceResolver {
override suspend fun resolve(media: Media, episode: EpisodeMetadata): VideoSource<*> {
if (!supports(media)) throw UnsupportedMediaException(media)
return HttpStreamingVideoSource(media.download.uri, media.originalTitle)
return HttpStreamingVideoSource(
media.download.uri,
media.originalTitle,
WebVideo(media.download.uri, emptyMap())
)
}
}

View File

@ -1,5 +1,6 @@
package me.him188.ani.app.data.media.resolver
import androidx.compose.runtime.Composable
import me.him188.ani.app.videoplayer.data.VideoSource
import me.him188.ani.datasources.api.EpisodeSort
import me.him188.ani.datasources.api.Media
@ -16,6 +17,13 @@ interface VideoSourceResolver {
*/
suspend fun supports(media: Media): Boolean
/**
* "挂载" 到 composable 中, 以便进行需要虚拟 UI 的操作, 例如 WebView
*/
@Composable
fun ComposeContent() {
}
/**
* 根据 [EpisodeMetadata] 中的集数信息和 [Media.location] 中的下载方式,
* 解析一个 [Media] 为可以播放的 [VideoSource].
@ -53,6 +61,13 @@ private class ChainedVideoSourceResolver(
return resolvers.any { it.supports(media) }
}
@Composable
override fun ComposeContent() {
this.resolvers.forEach {
it.ComposeContent()
}
}
override suspend fun resolve(media: Media, episode: EpisodeMetadata): VideoSource<*> {
return resolvers.firstOrNull { it.supports(media) }?.resolve(media, episode)
?: throw UnsupportedMediaException(media)

View File

@ -26,12 +26,17 @@ import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.remember
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import me.him188.ani.app.data.media.resolver.HttpStreamingVideoSourceResolver
import me.him188.ani.app.data.media.resolver.LocalFileVideoSourceResolver
import me.him188.ani.app.data.media.resolver.TorrentVideoSourceResolver
import me.him188.ani.app.data.media.resolver.VideoSourceResolver
import me.him188.ani.app.navigation.AniNavigator
import me.him188.ani.app.navigation.LocalNavigator
import me.him188.ani.app.platform.LocalContext
import me.him188.ani.app.platform.getCommonKoinModule
import me.him188.ani.app.session.SessionManager
import me.him188.ani.app.session.TestSessionManagers
import me.him188.ani.app.tools.torrent.TorrentManager
import me.him188.ani.app.ui.theme.aniColorScheme
import me.him188.ani.app.videoplayer.ui.state.DummyPlayerState
import me.him188.ani.app.videoplayer.ui.state.PlayerStateFactory
@ -66,6 +71,14 @@ fun ProvideCompositionLocalsForPreview(
playerStateFactory
}
single<SessionManager> { TestSessionManagers.Online }
factory<VideoSourceResolver> {
VideoSourceResolver.from(
get<TorrentManager>().engines
.map { TorrentVideoSourceResolver(it) }
.plus(LocalFileVideoSourceResolver())
.plus(HttpStreamingVideoSourceResolver())
)
}
module()
})
}

View File

@ -127,6 +127,8 @@ fun EpisodePageContent(
}
}
}
vm.videoSourceResolver.ComposeContent()
}
@Composable

View File

@ -127,6 +127,8 @@ class EpisodePresentation(
@Stable
interface EpisodeViewModel : HasBackgroundScope {
val videoSourceResolver: VideoSourceResolver
val subjectId: Int
val episodeId: Int
@ -205,7 +207,7 @@ private class EpisodeViewModelImpl(
private val playerStateFactory: PlayerStateFactory by inject()
private val subjectManager: SubjectManager by inject()
private val danmakuManager: DanmakuManager by inject()
private val videoSourceResolver: VideoSourceResolver by inject()
override val videoSourceResolver: VideoSourceResolver by inject()
private val settingsRepository: SettingsRepository by inject()
private val subjectInfo = flowOf(subjectId).mapLatest { subjectId ->

View File

@ -20,6 +20,7 @@ import me.him188.ani.datasources.bangumi.BangumiSubjectProvider
import me.him188.ani.datasources.dmhy.DmhyMediaSource
import me.him188.ani.datasources.mikan.MikanCNMediaSource
import me.him188.ani.datasources.mikan.MikanMediaSource
import me.him188.ani.datasources.nyafun.NyafunMediaSource
import org.jetbrains.compose.resources.painterResource
@Stable
@ -31,6 +32,7 @@ fun renderMediaSource(
MikanMediaSource.ID -> "Mikan"
MikanCNMediaSource.ID -> "Mikan (中国大陆)"
BangumiSubjectProvider.ID -> "Bangumi"
NyafunMediaSource.ID -> "Nyafun"
LOCAL_FS_MEDIA_SOURCE_ID -> "本地"
else -> id
}
@ -44,6 +46,7 @@ fun renderMediaSourceDescription(
MikanMediaSource.ID -> "mikanani.me"
MikanCNMediaSource.ID -> "mikanime.tv"
BangumiSubjectProvider.ID -> "bgm.tv"
NyafunMediaSource.ID -> "nyafun.net"
LOCAL_FS_MEDIA_SOURCE_ID -> null
else -> null
}

View File

@ -34,10 +34,6 @@ import me.him188.ani.app.data.media.MediaCacheManagerImpl
import me.him188.ani.app.data.media.MediaSourceManager
import me.him188.ani.app.data.media.MediaSourceManagerImpl
import me.him188.ani.app.data.media.TorrentMediaCacheEngine
import me.him188.ani.app.data.media.resolver.HttpStreamingVideoSourceResolver
import me.him188.ani.app.data.media.resolver.LocalFileVideoSourceResolver
import me.him188.ani.app.data.media.resolver.TorrentVideoSourceResolver
import me.him188.ani.app.data.media.resolver.VideoSourceResolver
import me.him188.ani.app.data.repositories.EpisodePreferencesRepository
import me.him188.ani.app.data.repositories.EpisodePreferencesRepositoryImpl
import me.him188.ani.app.data.repositories.EpisodeRepository
@ -151,14 +147,6 @@ fun KoinApplication.getCommonKoinModule(getContext: () -> Context, coroutineScop
}
single<VideoSourceResolver> {
VideoSourceResolver.from(
get<TorrentManager>().engines
.map { TorrentVideoSourceResolver(it) }
.plus(LocalFileVideoSourceResolver())
.plus(HttpStreamingVideoSourceResolver())
)
}
single<MediaSourceManager> {
MediaSourceManagerImpl(
additionalSources = {

View File

@ -13,7 +13,9 @@ import androidx.media3.common.TrackGroup
import androidx.media3.common.Tracks
import androidx.media3.common.VideoSize
import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.DefaultHttpDataSource
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory
import androidx.media3.exoplayer.source.ProgressiveMediaSource
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector
import androidx.media3.exoplayer.trackselection.ExoTrackSelection
@ -89,7 +91,23 @@ internal class ExoPlayerState @UiThread constructor(
emptyVideoData(),
releaseResource = {},
setMedia = {
player.setMediaItem(MediaItem.fromUri(source.uri))
player.setMediaSource(
DefaultMediaSourceFactory(
DefaultHttpDataSource.Factory()
.setUserAgent("""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3""")
.setDefaultRequestProperties(
mapOf(
"Referer" to "https://play.nyafun.net/",
"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",
)
)
.setConnectTimeoutMs(30_000),
).createMediaSource(MediaItem.fromUri(source.uri))
)
},
)
}

View File

@ -4,12 +4,14 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf
import me.him188.ani.app.videoplayer.data.VideoData
import me.him188.ani.app.videoplayer.data.VideoSource
import me.him188.ani.datasources.api.matcher.WebVideo
import me.him188.ani.datasources.api.topic.FileSize
import me.him188.ani.utils.io.SeekableInput
class HttpStreamingVideoSource(
override val uri: String,
private val filename: String,
val webVideo: WebVideo,
) : VideoSource<HttpStreamingVideoData> {
override suspend fun open(): HttpStreamingVideoData {
return HttpStreamingVideoData(uri, filename)

View File

@ -82,7 +82,7 @@ sealed interface Media {
*/
@Immutable
@Serializable
class DefaultMedia(
data class DefaultMedia(
override val mediaId: String,
override val mediaSourceId: String, // e.g. "dmhy"
override val originalUrl: String,
@ -143,6 +143,10 @@ class MediaProperties private constructor(
subtitleLanguageIds, resolution, alliance, size,
_primaryConstructorMarker = Unit
)
override fun toString(): String {
return "MediaProperties(subtitleLanguageIds=$subtitleLanguageIds, resolution='$resolution', alliance='$alliance', size=$size)"
}
}
/**

View File

@ -0,0 +1,28 @@
package me.him188.ani.datasources.api.matcher
import me.him188.ani.datasources.api.Media
/**
* 匹配 WebView 拦截到的资源.
*/
interface WebVideoMatcher {
fun match(
url: String,
context: WebVideoMatcherContext
): WebVideo?
}
class WebVideoMatcherContext(
val media: Media,
)
class WebVideo(
/**
* 视频数据地址
*/
val m3u8Url: String,
/**
* 请求视频数据时需要的 headers
*/
val headers: Map<String, String>
)

View File

@ -5,6 +5,7 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.merge
/**
@ -32,6 +33,24 @@ inline fun <T, R> SizedSource<T>.map(crossinline transform: suspend (T) -> R): S
}
}
inline fun <T, R> SizedSource<T>.mapNotNull(crossinline transform: suspend (T) -> R?): SizedSource<R> {
val self = this
return object : SizedSource<R> {
override val results = self.results.mapNotNull(transform)
override val finished = self.finished
override val totalSize = self.totalSize
}
}
inline fun <T> SizedSource<T>.filter(crossinline predicate: suspend (T) -> Boolean): SizedSource<T> {
val self = this
return object : SizedSource<T> {
override val results = self.results.filter(predicate)
override val finished = self.finished
override val totalSize = self.totalSize
}
}
/**
* Merge multiple [SizedSource] into one.
*

View File

@ -72,7 +72,7 @@ interface MediaSource {
/**
* A media matched from the source.
*/
class MediaMatch(
data class MediaMatch(
val media: Media,
val kind: MatchKind,
)
@ -192,6 +192,8 @@ enum class ConnectionStatus {
FAILED,
}
fun Boolean.toConnectionStatus() = if (this) ConnectionStatus.SUCCESS else ConnectionStatus.FAILED
interface SearchOrdering {
val id: String
val name: String

View File

@ -39,7 +39,24 @@ sealed class ResourceLocation {
data class HttpStreamingFile(override val uri: String) : ResourceLocation() {
init {
require(uri.startsWith("https://") || uri.startsWith("http://")) {
"HttpStreamingFile uri must start with http:// or https://"
"HttpStreamingFile uri must start with 'http://' or 'https://', but was $uri"
}
}
}
/**
* 需要 WebView 去里面解析视频链接
*/
@Serializable
data class WebVideo(
/**
* Web 页面地址
*/
override val uri: String,
) : ResourceLocation() {
init {
require(uri.startsWith("https://") || uri.startsWith("http://")) {
"WebVideo uri must start with 'http://' or 'https://', but was $uri"
}
}
}

View File

@ -21,9 +21,12 @@ import kotlinx.coroutines.flow.shareIn
import kotlinx.coroutines.flow.take
import me.him188.ani.datasources.api.Media
import me.him188.ani.datasources.api.paging.SizedSource
import me.him188.ani.datasources.api.paging.filter
import me.him188.ani.datasources.api.source.MatchKind
import me.him188.ani.datasources.api.source.MediaFetchRequest
import me.him188.ani.datasources.api.source.MediaMatch
import me.him188.ani.datasources.api.source.MediaSource
import me.him188.ani.datasources.api.topic.contains
import me.him188.ani.utils.logging.error
import me.him188.ani.utils.logging.logger
import kotlin.coroutines.CoroutineContext
@ -223,7 +226,9 @@ class MediaSourceMediaFetcher(
config,
pagedSources = flowOf(request)
.map {
provider.fetch(it)
provider.fetch(it).filter { media ->
media.matches(request)
}
}.shareIn(
scope, replay = 1, started = SharingStarted.Lazily,
).take(1) // so that the flow can normally complete
@ -282,3 +287,10 @@ class MediaSourceMediaFetcher(
val logger = logger<MediaSourceMediaFetcher>()
}
}
private fun MediaMatch.matches(request: MediaFetchRequest): Boolean {
if (this.kind == MatchKind.NONE) return false
val actualEpRange = this.media.episodeRange ?: return false
val expectedEp = request.episodeEp
return !(request.episodeSort !in actualEpRange && (expectedEp == null || expectedEp !in actualEpRange))
}

View File

@ -0,0 +1,28 @@
plugins {
kotlin("jvm")
kotlin("plugin.serialization")
id("kotlinx-atomicfu")
`flatten-source-sets`
}
dependencies {
api(projects.dataSources.api)
api(libs.kotlinx.coroutines.core)
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.content.negotiation)
implementation(libs.ktor.client.logging)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.kotlinx.serialization.json)
implementation(libs.jsoup)
implementation(libs.slf4j.api)
implementation(projects.utils.slf4jKt)
implementation(projects.utils.ktorClient)
runtimeOnly(libs.ktor.client.okhttp)
implementation(libs.slf4j.simple)
}
tasks.withType<Jar> {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE // why is there a duplicate?
}

View File

@ -0,0 +1 @@
me.him188.ani.datasources.nyafun.NyafunWebVideoMatcher

View File

@ -0,0 +1,19 @@
#
# 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 <https://www.gnu.org/licenses/>.
#
me.him188.ani.datasources.nyafun.NyafunMediaSource$Factory

View File

@ -0,0 +1,190 @@
package me.him188.ani.datasources.nyafun
import io.ktor.client.plugins.BrowserUserAgent
import io.ktor.client.plugins.logging.LogLevel
import io.ktor.client.plugins.logging.Logging
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.get
import io.ktor.client.request.parameter
import io.ktor.client.statement.bodyAsChannel
import io.ktor.http.isSuccess
import io.ktor.utils.io.jvm.javaio.toInputStream
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.flatMapMerge
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.retry
import me.him188.ani.datasources.api.DefaultMedia
import me.him188.ani.datasources.api.EpisodeSort
import me.him188.ani.datasources.api.MediaProperties
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.paging.SinglePagePagedSource
import me.him188.ani.datasources.api.paging.SizedSource
import me.him188.ani.datasources.api.source.ConnectionStatus
import me.him188.ani.datasources.api.source.MatchKind
import me.him188.ani.datasources.api.source.MediaFetchRequest
import me.him188.ani.datasources.api.source.MediaMatch
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.applyMediaSourceConfig
import me.him188.ani.datasources.api.source.toConnectionStatus
import me.him188.ani.datasources.api.topic.EpisodeRange
import me.him188.ani.datasources.api.topic.FileSize
import me.him188.ani.datasources.api.topic.ResourceLocation
import me.him188.ani.utils.ktor.createDefaultHttpClient
import me.him188.ani.utils.logging.info
import me.him188.ani.utils.logging.logger
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
data class NyafunBangumi(
val id: String,
val name: String,
val url: String,
)
data class NyafunEp(
val name: String,
val url: String,
)
class NyafunWebVideoMatcher : WebVideoMatcher {
override fun match(url: String, context: WebVideoMatcherContext): WebVideo? {
if (context.media.mediaSourceId != NyafunMediaSource.ID) return null
// we want https://vod.2bdm.cc/2024/04/gs8h/01.mp4?verify=1716675316-p3ScUWwQbHmMf5%2F63tM6%2FR2Ac8NydzYvECQ1XmTUhbU%3D
if ((url.contains(".mp4") || url.contains(".mkv") || url.contains(".m3u8"))
&& url.contains("verify=")
) {
return WebVideo(url, mapOf("Referer" to "https://www.nyafun.net/play"))
}
return null
}
}
class NyafunMediaSource(config: MediaSourceConfig) : MediaSource {
companion object {
val ID = "nyafun"
val logger = logger<NyafunMediaSource>()
internal const val BASE_URL = "https://www.nyafun.net"
// https://www.nyafun.net/search.html?wd=girls%20band%20cry
fun parseBangumiSearch(document: Document): List<NyafunBangumi> =
document.getElementsByClass("public-list-box").map { element ->
val a = element.select(".thumb-txt.cor4.hide").select("a")
val name = a.text()
val url = a.attr("href")
val id = url.substringBeforeLast(".html").substringAfterLast("/")
NyafunBangumi(
id = id,
name = name,
url = BASE_URL + url,
)
}
// https://www.nyafun.net/bangumi/7168.html
fun parseEpisodeList(document: Document): List<NyafunEp> {
return document.getElementsByClass("anthology-list-play").flatMap { element ->
element.select("a").map { a ->
val name = a.text() // "第1集"
val url = a.attr("href") // "/play/7168-1-1.html"
NyafunEp(name, BASE_URL + url)
}
}
}
private val subtitleLanguages = listOf("CHS")
fun createMediaMatch(
bangumi: NyafunBangumi,
ep: NyafunEp
): MediaMatch {
val sort = EpisodeSort(ep.name.removePrefix("").removeSuffix(""))
return MediaMatch(
DefaultMedia(
mediaId = "$ID.${bangumi.id}-${sort}",
mediaSourceId = ID,
originalUrl = bangumi.url,
download = ResourceLocation.WebVideo(ep.url),
originalTitle = """${bangumi.name} ${ep.name}""",
publishedTime = 0L,
properties = MediaProperties(
subtitleLanguageIds = subtitleLanguages,
resolution = "1080P",
alliance = ID,
size = FileSize.Unspecified,
),
episodeRange = EpisodeRange.single(sort),
), MatchKind.FUZZY
)
}
}
class Factory : MediaSourceFactory {
override val mediaSourceId: String get() = ID
override fun create(config: MediaSourceConfig): MediaSource = NyafunMediaSource(config)
}
internal val client = createDefaultHttpClient {
applyMediaSourceConfig(config)
Logging {
logger = object : io.ktor.client.plugins.logging.Logger {
override fun log(message: String) {
Companion.logger.info { message }
}
}
level = LogLevel.INFO
}
BrowserUserAgent()
expectSuccess = true
}
override val mediaSourceId: String get() = ID
override suspend fun checkConnection(): ConnectionStatus =
client.get(BASE_URL).status.isSuccess().toConnectionStatus()
override suspend fun fetch(query: MediaFetchRequest): SizedSource<MediaMatch> = SinglePagePagedSource {
query.subjectNames.asFlow().flatMapMerge { name ->
val bangumiList = flow {
emit(getDocument("$BASE_URL/search.html") {
parameter("wd", name)
})
}.map {
parseBangumiSearch(it)
}.retry(3) { e ->
logger.warn("Failed to search using name '$name'", e)
true
}.firstOrNull() ?: return@flatMapMerge emptyFlow()
bangumiList.asFlow()
.flatMapMerge { bangumi ->
flow {
emit(getDocument(bangumi.url))
}.map {
parseEpisodeList(it)
}.retry(3) { e ->
logger.warn("Failed to search using name '$name'", e)
true
}.firstOrNull()?.map { ep ->
createMediaMatch(bangumi, ep)
}.orEmpty().asFlow()
}
}
}
private suspend inline fun getDocument(
url: String,
block: HttpRequestBuilder.() -> Unit = {}
) = client.get(url, block).bodyAsChannel().toInputStream().use {
Jsoup.parse(it, "UTF-8", BASE_URL)
}
}

View File

@ -0,0 +1,17 @@
package me.him188.ani.datasources.nyafun
//suspend fun main() {
// val outFile = File("1.mp4")
// HttpClient {
// BrowserUserAgent()
// }.get("https://play.nyafun.net/player/ec.php?code=nya&if=1&url=https://vod.2bdm.cc/2024/04/gs8h/01.mp4") {
// header("referrer", "https://www.nyafun.net/play/7207-1-1.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)
//}

View File

@ -0,0 +1,77 @@
package me.him188.ani.datasources.nyafun
import me.him188.ani.datasources.api.DefaultMedia
import me.him188.ani.datasources.api.MediaProperties
import me.him188.ani.datasources.api.source.MatchKind
import me.him188.ani.datasources.api.source.MediaMatch
import me.him188.ani.datasources.api.topic.EpisodeRange
import me.him188.ani.datasources.api.topic.FileSize
import me.him188.ani.datasources.api.topic.ResourceLocation
import org.jsoup.Jsoup
import org.junit.jupiter.api.Test
import kotlin.test.assertEquals
class NyafunMediaSourceTest {
@Test
fun `parse search result`() {
val doc = Jsoup.parse(
this::class.java.classLoader.getResource("girls band cry/search.html")!!.readText(),
NyafunMediaSource.BASE_URL
)
val list = NyafunMediaSource.parseBangumiSearch(doc)
assertEquals(1, list.size)
list[0].run {
assertEquals("7168", id)
assertEquals("GIRLS BAND CRY", name)
assertEquals("https://www.nyafun.net/bangumi/7168.html", url)
}
}
@Test
fun `parse bangumi result`() {
val doc = Jsoup.parse(
this::class.java.classLoader.getResource("girls band cry/bangumi.html")!!.readText(),
NyafunMediaSource.BASE_URL
)
val list = NyafunMediaSource.parseEpisodeList(doc)
assertEquals(8, list.size)
list[0].run {
assertEquals("第01集", name)
assertEquals("https://www.nyafun.net/play/7168-1-1.html", url)
}
}
@Test
fun `create media`() {
assertEquals(
MediaMatch(
DefaultMedia(
mediaId = "nyafun.7168-01",
mediaSourceId = NyafunMediaSource.ID,
originalUrl = "https://www.nyafun.net/bangumi/7168.html",
download = ResourceLocation.WebVideo(
"https://www.nyafun.net/play/7168-1-1.html",
),
originalTitle = "GIRLS BAND CRY 第01集",
publishedTime = 0L,
properties = MediaProperties(
listOf("CHS"),
resolution = "1080P",
NyafunMediaSource.ID,
size = FileSize.Unspecified,
),
episodeRange = EpisodeRange.single("01"),
),
MatchKind.FUZZY
).toString(),
NyafunMediaSource.createMediaMatch(
NyafunBangumi(
"7168",
"GIRLS BAND CRY",
"https://www.nyafun.net/bangumi/7168.html"
),
NyafunEp("第01集", "https://www.nyafun.net/play/7168-1-1.html")
).toString()
)
}
}

View File

@ -0,0 +1,736 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no,viewport-fit=cover">
<title>《GIRLS BAND CRY》番剧高清1080P在线观看_GIRLS BAND CRY全集无修-NyaFun动漫</title>
<meta name="keywords"
content="GIRLS BAND CRY番剧,GIRLS BAND CRY高清完整版,GIRLS BAND CRY在线观看,GIRLS BAND CRY迅雷下载,GIRLS BAND CRY百度网盘,NyaFun动漫"/>
<meta name="description"
content="GIRLS BAND CRY剧情介绍  高中二年级辍学独自在东京工作并设定了上大学的目标的主人公。  被朋友背叛不知所措的少女。  被父母抛弃靠打工在大城市中勉强维生的女孩。  这个世界总是背叛我们。  事情总是无法按照我们的想法进行。  但是我们还是希望喜欢上什么。  因为我们相信自己的位置一定在某个地方。  所以我们歌唱。..."/>
<link href="/static/ds3/css/common.css?version=265" rel="stylesheet" type="text/css"/>
<script src="/static/ds3/js/jquery.js"></script>
<script src="/static/ds3/js/assembly.js"></script>
<script src="/static/ds3/js/swiper.min.js"></script>
<script>
const maccms={"vod_mask":"mask-1","path2":"/","day":"2","jx":"0","so_off":"1","bt-style":"","login-login":"/","path":"","mid":"1","aid":"14","url":"www.nyafun.net","wapurl":"www.nyafun.net","mob_status":"0","upload":{"protocol":"https","mode":"local","remoteurl":"http://img.test.com/","img_key":"","img_api":"",}};
</script>
<script src="/static/ds3/js/ecscript.js"></script>
<script>new WOW().init();</script>
<meta name="renderer" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta http-equiv="Cache-Control" content="no-siteapp"/>
<link rel="shortcut icon" href="https://pic1.imgdb.cn/item/6354c9b316f2c2beb1de5e2c.png"
type="image/x-icon"/>
<link rel="apple-touch-icon" href="https://pic1.imgdb.cn/item/6354c9b316f2c2beb1de5e2c.png">
<link rel="icon" sizes="192x192" type="image/png"
href="https://pic1.imgdb.cn/item/6354c9b316f2c2beb1de5e2c.png">
</head>
<body class="theme2">
<div class="gen-loading bj load-icon-on" data-time="100"><img class="loading1 none" data-ii="on"
src="https://www.nyafun.net/image/NyaFun_logo.png"
alt="NyaFun动漫"><img
class="loading2 none" src="https://www.nyafun.net/image/NyaFun_logo.png" alt="NyaFun动漫">
</div>
<div class="head flex between no-null header_nav0">
<div class="left flex">
<div class="logo"><a class="logo-brand" href="/"><img class="logo1 none"
src="https://pic.imgdb.cn/item/653fc9b6c458853aef19190d.png"
alt="NyaFun动漫"><img
class="logo2 none" src="https://pic.imgdb.cn/item/653fc9b6c458853aef19190d.png"
alt="NyaFun动漫"></a></div>
<div class="head-nav ft4 roll bold0 pc-show0 wap-show1">
<ul class="swiper-wrapper">
<li class="swiper-slide"><a target="_self" href="/" class=""><em
class="fa ds-zhuye"></em><em class="fa none ds-zhuye2"></em>首页</a></li>
<li class="swiper-slide"><a target="_self" href="/show/1.html" class="current cor6"><em
class="fa ds-dongman"></em><em class="fa none ds-dongman2"></em>番剧</a>
</li>
<li class="swiper-slide"><a target="_self" href="/show/2.html" class=""><em
class="fa ds-dianying"></em><em class="fa none ds-dianying2"></em>剧场</a>
</li>
<li class="swiper-slide"><a target="_self" href="/show/207.html" class=""><em
class="fa ds-dianshi"></em><em class="fa none ds-dianshi2"></em>特摄</a>
</li>
<li class="rel head-more-a"><a class="this-get" href="javascript:">更多<em
class="fa nav-more" style="font-size:18px">&#xe563;</em></a>
<div class="head-more none box size"><a target="_self" href="/"
class="nav-link none2"><em
class="fa ds-zhuye"></em><em class="fa none ds-zhuye2"></em>首页</a><a
target="_self" href="/show/1.html" class="nav-link none2 cor6"><em
class="fa ds-dongman"></em><em class="fa none ds-dongman2"></em>番剧</a><a
target="_self" href="/show/2.html" class="nav-link none2"><em
class="fa ds-dianying"></em><em
class="fa none ds-dianying2"></em>剧场</a><a target="_self"
href="/show/207.html"
class="nav-link none2"><em
class="fa ds-dianshi"></em><em class="fa none ds-dianshi2"></em>特摄</a><a
href="/label/weekday.html" class="nav-link"><em class="fa ds-zhou"></em><em
class="fa none ds-zhou2"></em>周番表</a><a href="/label/rank.html"
class="nav-link"><em
class="fa ds-pahang"></em><em class="fa none ds-pahang2"></em>排行榜</a><a
href="/gbook.html" class="nav-link"><em class="fa ds-pinglun"></em><em
class="fa none ds-pinglun2"></em>留言板</a></div>
</li>
</ul>
</div>
</div>
<div class="right flex">
<div class="this-search">
<form id="search2" name="search" class="flex-public" method="get" action="/search.html">
<a href="javascript:" data-id="1" class="this-select">视频<i class="fa">&#xe563;</i></a><input
type="text" name="wd" class="this-input flex-auto cor4" value=""
placeholder="想看些什么捏~" autocomplete="off">
<div class="flex"><a class="this-hot" href="/label/rank.html"><em
class="fa ds-pahang2 r3"></em>排行榜</a>
<button type="submit" class="fa ds-sousuo ol2"></button>
</div>
</form>
</div>
<div class="qiAnDao_bnt margin qd-noneon qd-bnt-off1"><a class="content-center"
href="javascript:"><i
class="fa ds-qiandao"></i><em>签到</em></a></div>
<div class="gen-search margin none"><a class="content-center" href="javascript:"><i
class="fa ds-sousuo"></i></a></div>
<div class="gen-history margin"><a class="content-center" href="javascript:"><i
class="fa ds-lishijilu"></i><em>播放记录</em></a></div>
<div class="margin down-none1"><a target="_blank" class="content-center"
href="/label/app.html"><i class="fa ds-yingyong"></i><em>客户端</em></a>
</div>
<div class="gen-left-list margin" style="padding-right:0"><a class="content-center"
href="javascript:"><i
class="fa ds-menu"></i></a></div>
<div class="margin wap-hide"><a class="this-user head-user" href="javascript:"
data-url="/user/index.html"><img
src="/static/ds3/img/default-head.jpg" alt="游客"/></a></div>
</div>
</div>
<div class="vod-detail style-detail rel cor1 hader0">
<div class="slide-time-img2"><img
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/75/c1/431767_bX7FZ.jpg"
alt="海报背景"/><span></span></div>
<div class="box-width flex between rel">
<div class="left flex">
<div class="wow fadeInLeft">
<div class="detail-pic"><img alt="GIRLS BAND CRY海报图片" class="lazy lazy1 mask-1"
referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/75/c1/431767_bX7FZ.jpg"/>
</div>
</div>
<div class="detail-info rel flex-auto wow lightSpeedIn"><h3
class="slide-info-title hide">GIRLS BAND CRY</h3>
<div class="slide-info hide"><span class="slide-info-remarks"><a
href="/search/year/2024.html" target="_blank">2024</a>&nbsp;</span><span
class="slide-info-remarks"><a href="/search/area/%E6%97%A5%E6%9C%AC.html"
target="_blank">日本</a>&nbsp;</span><span
class="slide-info-remarks"><a href="/show/1/class/%E5%8E%9F%E5%88%9B.html">原创</a></span><span
class="slide-info-remarks"><a href="/show/1/class/%E9%9F%B3%E4%B9%90.html">音乐</a></span><span
class="slide-info-remarks"><a href="/show/1/class/%E7%99%BE%E5%90%88.html">百合</a></span><span
class="slide-info-remarks"><a
href="/show/1/class/%E6%BC%AB%E7%94%BB%E6%94%B9.html">漫画改</a></span><span
class="slide-info-remarks"><a
href="/show/1/class/%E6%97%A5%E6%BC%AB%E7%95%AA%E5%89%A7.html">日漫番剧</a></span><span
class="slide-info-remarks"><a
href="/show/1/class/%E6%97%A5%E6%BC%AB%E7%95%AA.html">日漫番</a></span>
</div>
<div class="slide-info hide"><strong class="r6">备注 :</strong>更新至08</div>
<div class="slide-info hide"><strong class="r6">导演 :</strong><a
href="/search/director/%E9%85%92%E4%BA%95%E5%92%8C%E7%94%B7.html"
target="_blank">酒井和男</a><span class="slash">/</span></div>
<div class="slide-info hide"><strong class="r6">演员 :</strong><a
href="/search/actor/%E7%90%86%E5%90%8D.html" target="_blank">理名</a><span
class="slash">/</span><a href="/search/actor/%E7%BE%8E%E6%80%9C.html"
target="_blank">美怜</a><span
class="slash">/</span><a href="/search/actor/%E5%A4%95%E8%8E%89.html"
target="_blank">夕莉</a><span
class="slash">/</span><a href="/search/actor/%E6%9C%B1%E6%9D%8E.html"
target="_blank">朱李</a><span
class="slash">/</span><a href="/search/actor/%E5%87%AA%E9%83%BD.html"
target="_blank">凪都</a><span
class="slash">/</span></div>
<div class="slide-info hide"><strong class="r6">更新 :</strong>2024-05-25 10:40:02
</div>
<a class="deployment none cor5" href="javascript:"><span>2024</span><span
class="division">·</span><span>日本</span><span
class="division">·</span><span class="hl-ma0">原创&nbsp;音乐&nbsp;百合&nbsp;漫画改&nbsp;日漫番剧&nbsp;日漫番&nbsp;</span><span
class="division">·</span><span>2024-04-05上映</span><span
class="division">·</span><span>日语</span><span class="division">·</span>详情<i
class="fa ds-jiantouyou"></i></a>
<div class="vod-detail-bnt flex"><a href="javascript:" class="button ol2"
style="width:120px"><i
class="fa r6 ds-bofang1"></i>立即播放</a>
<div class="detail-get-box collection" data-type="2" data-mid="1"
data-id="7168"><span><i class="fa r3 ds-shoucang"></i>收藏</span></div>
<div class="detail-get-box rel vod-detail-share"><span><i
class="fa r3 ds-fenxiang"></i>分享</span>
<div class="share-box box cor5 radius topfadeInUp none">
<div class="share-qrcode"><p class="share-text">手机扫描访问</p>
<div class="hl-cans none"></div>
<p class="share-pic"></p></div>
<div class="share-links"><span
class="share-tips">复制下方链接,去粘贴给好友吧</span><span
id="bar" class="share-url bj cor5">https://www.nyafun.net/bangumi/7168.html</span>
<button type="button" class="share-copy bj2 ho radius copyBtn"
data-clipboard-action="copy" data-clipboard-target="#bar">
复制链接
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="right">
<div class="detail-score wow fadeInUp">
<div class="play-score cf">
<div class="fraction">9.7</div>
<div class="score-title l"><span class="text-site cor2">网友评分</span>
<div class="rating-sm">
<ul class="rating-s cf">
<li class="one current active" title="很差" val="1">很差</li>
<li class="two current active" title="较差" val="2">较差</li>
<li class="three current active" title="还行" val="3">还行</li>
<li class="four active" title="推荐" val="4">推荐</li>
<li class="five active" title="力荐" val="5">力荐</li>
</ul>
</div>
</div>
<span class="score-data r">45次评分</span></div>
<div id="rating" class="play-score" data-mid="1" data-id="7168" data-score="5">
<ul class="rating-s rating cf" id="fenshu">
<li class="one" title="很差" val="1">很差</li>
<li class="two" title="较差" val="2">较差</li>
<li class="three" title="还行" val="3">还行</li>
<li class="four" title="推荐" val="4">推荐</li>
<li class="five" title="力荐" val="5">力荐</li>
</ul>
</div>
<div class="weixin"><img alt="扫描观看" width="140" height="140" src="/">
<div class="top20"><p>扫描一扫app播放</p></div>
</div>
</div>
</div>
</div>
<div class="box-width rel wow fadeInUp">
<div class="title vod-news top40">
<div class="title-tab flex switch-button"><a class="selected" href="javascript:"
title="影片简介">简介</a><a id="role_a"
href="javascript:"
title="角色信息">角色</a>
</div>
</div>
<div class="switch-box top20">
<div class="check selected">
<div id="height_limit" class="text cor3">
  高中二年级,辍学独自在东京工作并设定了上大学的目标的主人公。  被朋友背叛,不知所措的少女。  被父母抛弃,靠打工在大城市中勉强维生的女孩。  这个世界总是背叛我们。  事情总是无法按照我们的想法进行。  但是,我们还是希望喜欢上什么。  因为我们相信自己的位置一定在某个地方。  所以,我们歌唱。
</div>
<div class="text-open"><span class="tim-bnt"><i class="fa r6 ease">&#xe563;</i>展开</span>
</div>
<div class="vod-tag" style="margin-top: 20px;"><a
href="/search/tag/%E5%8E%9F%E5%88%9B.html" class="cor5 r6">#原创</a><a
href="/search/tag/2024%E5%B9%B44%E6%9C%88.html"
class="cor5 r6">#2024年4月</a><a href="/search/tag/%E4%B9%90%E9%98%9F.html"
class="cor5 r6">#乐队</a><a
href="/search/tag/%E4%B8%9C%E6%98%A0%E5%8A%A8%E7%94%BB.html"
class="cor5 r6">#东映动画</a><a href="/search/tag/%E9%9F%B3%E4%B9%90.html"
class="cor5 r6">#音乐</a><a
href="/search/tag/TV.html" class="cor5 r6">#TV</a><a
href="/search/tag/2024.html" class="cor5 r6">#2024</a><a
href="/search/tag/%E6%9D%B1%E6%98%A0%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3.html"
class="cor5 r6">#東映アニメーション</a><a href="/search/tag/3D.html"
class="cor5 r6">#3D</a><a
href="/search/tag/%E7%99%BE%E5%90%88.html" class="cor5 r6">#百合</a><a
href="/search/tag/%E4%B8%9C%E6%98%A0.html" class="cor5 r6">#东映</a><a
href="/search/tag/%E9%85%92%E4%BA%95%E5%92%8C%E7%94%B7.html"
class="cor5 r6">#酒井和男</a><a
href="/search/tag/%E8%8A%B1%E7%94%B0%E5%8D%81%E8%BE%89.html"
class="cor5 r6">#花田十辉</a><a
href="/search/tag/%E6%97%A0%E6%B3%95%E9%A2%84%E6%B5%8B%E7%9A%84%E5%91%BD%E8%BF%90%E4%B9%8B%E8%88%9E%E5%8F%B0.html"
class="cor5 r6">#无法预测的命运之舞台</a><a
href="/search/tag/%E7%AC%AC%E4%B8%80%E5%AD%A3.html"
class="cor5 r6">#第一季</a><a
href="/search/tag/%E6%9C%AA%E5%BC%80%E6%92%AD.html"
class="cor5 r6">#未开播</a><a href="/search/tag/2024%E5%B9%B4.html"
class="cor5 r6">#2024年</a><a
href="/search/tag/%E6%BC%AB%E7%94%BB%E6%94%B9.html"
class="cor5 r6">#漫画改</a><a href="/search/tag/%E5%A7%9B.html"
class="cor5 r6">#姛</a><a
href="/search/tag/%E5%A4%A7%E4%B9%90%E9%98%9F%E6%97%B6%E4%BB%A3.html"
class="cor5 r6">#大乐队时代</a><a
href="/search/tag/%E8%8A%B1%E7%94%B0%E5%8D%81%E8%BC%9D.html"
class="cor5 r6">#花田十輝</a></div>
</div>
<div class="check">
<div class="shp public-r size">
<ul id="role" class="flex wrap"></ul>
</div>
</div>
</div>
</div>
</div>
<script>if($(".public-pic-e").length === 0){$("#role_a").hide();}</script>
<div class="box-width ec-ad ds-adif-a1 ds-adif-b1"><a style="padding-top:10px"
href="https://mimoe.su/" target="_blank"><img
class="slide-pc" src="https://pic.imgdb.cn/item/64a2231e1ddac507cc2afa9d.png"
alt="展示你的位置"><img class="slide-wap" style="display:none"
src="https://pic.imgdb.cn/item/64a2231e1ddac507cc2afa9d.png"
alt="展示你的位置"><span class="this-adicon"></span></a></div>
<div class="box-width cor5">
<div class="title-a flex top40 between"><h2 class="this-name cor4">资源列表</h2><a id="zxdaoxu"
href="javascript:"><i
class="fa r3 ds-daoxu"></i>排序</a></div>
<div class="anthology wow fadeInUp animated">
<div class="anthology-tab nav-swiper b-b br">
<div class="swiper-wrapper"><a class="swiper-slide"><i class="fa ds-dianying"></i>&nbsp;主线<span
class="badge">8</span></a></div>
</div>
<div class="anthology-list top20 select-c">
<div class="anthology-list-box none">
<div>
<ul class="anthology-list-play size">
<li class="box border"><a class="hide" href="/play/7168-1-1.html">第01集</a>
</li>
<li class="box border"><a class="hide" href="/play/7168-1-2.html">第02集</a>
</li>
<li class="box border"><a class="hide" href="/play/7168-1-3.html">第03集</a>
</li>
<li class="box border"><a class="hide" href="/play/7168-1-4.html">第04集</a>
</li>
<li class="box border"><a class="hide" href="/play/7168-1-5.html">第05集</a>
</li>
<li class="box border"><a class="hide" href="/play/7168-1-6.html">第06集</a>
</li>
<li class="box border"><a class="hide" href="/play/7168-1-7.html">第07集</a>
</li>
<li class="box border"><a class="hide" href="/play/7168-1-8.html">第08集</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<script>
$(".anthology-tab a").eq(0).addClass("on nav-dt");$(".anthology-list .anthology-list-box").eq(0).show().addClass("dx");
</script>
<div class="star-works overflow">
<div class="title-a flex top40 between"><h2 class="this-name cor4">相关明星</h2></div>
<div class="list-swiper public-r border-box rel star-works-top">
<div class="swiper-wrapper"></div>
<div class="vod-list-actor-page"><a class="swiper-button-prev" href="javascript:"><i
class="fa ds-fanhui"></i></a><a class="swiper-button-next" href="javascript:"><i
class="fa ds-jiantouyou"></i></a></div>
</div>
<div class="public-r list-swiper rel">
<div class="swiper-wrapper actor-api"></div>
<div class="vod-list-page"><a class="swiper-button-prev" href="javascript:"><i
class="fa ds-fanhui"></i></a><a class="swiper-button-next" href="javascript:"><i
class="fa ds-jiantouyou"></i></a></div>
</div>
</div>
</div>
<div class="box-width wow fadeInUp">
<div class="title-a flex top40"><h2 class="this-name cor4">相关视频</h2><a
class="this-get cor5 ds-line2" target="_self" href="#">更多<em
class="fa ds-jiantouyou"></em></a>
<div class="this-tab"></div>
</div>
<div class="flex wrap border-box public-r hide-b-10">
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/6242.html"
title="汤摇庄的幽奈同学 OAD"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="汤摇庄的幽奈同学 OAD封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/95/4c/232657_du556.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr8">后宫</span><span
class="public-list-prb hide ft2">已完结</span><span class="public-play"><i
class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/6242.html"
title="汤摇庄的幽奈同学 OAD">汤摇庄的幽奈同学 OAD</a>
<div class="public-list-subtitle cor5 hide ft2">井上ほの花</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/3257.html"
title="妖精的尾巴 第一季"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="妖精的尾巴 第一季封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/33/9a/2609_3ak4F.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr4">动画</span><span
class="public-list-prb hide ft2">已完结[1-175]</span><span
class="public-play"><i class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/3257.html" title="妖精的尾巴 第一季">妖精的尾巴
第一季</a>
<div class="public-list-subtitle cor5 hide ft2">Fairy Tail</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/7168.html"
title="GIRLS BAND CRY"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="GIRLS BAND CRY封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/75/c1/431767_bX7FZ.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr6">原创</span><span
class="public-list-prb hide ft2">更新至08</span><span class="public-play"><i
class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/7168.html" title="GIRLS BAND CRY">GIRLS
BAND CRY</a>
<div class="public-list-subtitle cor5 hide ft2">哭泣少女乐队</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/7207.html"
title="怪兽8号"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="怪兽8号封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/9c/d2/394623_BkSVB.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr5">漫画改</span><span
class="public-list-prb hide ft2">更新至07</span><span class="public-play"><i
class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/7207.html" title="怪兽8号">怪兽8号</a>
<div class="public-list-subtitle cor5 hide ft2">怪兽八号 / Kaiju No.8 / Kaijuu
8-gou
</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/5602.html"
title="没有黄段子的无聊世界"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="没有黄段子的无聊世界封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2249118651.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr2">校园</span><span
class="public-list-prb hide ft2">已完结</span><span class="public-play"><i
class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/5602.html"
title="没有黄段子的无聊世界">没有黄段子的无聊世界</a>
<div class="public-list-subtitle cor5 hide ft2">下流梗不存在的灰暗世界
下ネタという概念が存在しない退屈な世界
</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/7137.html"
title="关于我转生变成史莱姆这档事 第三季"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="关于我转生变成史莱姆这档事 第三季封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/f0/f4/407573_993Vy.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr3">异世界</span><span
class="public-list-prb hide ft2">更新至56</span><span class="public-play"><i
class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/7137.html"
title="关于我转生变成史莱姆这档事 第三季">关于我转生变成史莱姆这档事
第三季</a>
<div class="public-list-subtitle cor5 hide ft2">Tensei Shitara Slime Datta Ken 3rd
Season / That Time I Got Reincarnated as a Slime Season 3
</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/6146.html"
title="sin 七大罪"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="sin 七大罪封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/01/90/189784_Q31of.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr4">卖肉</span><span
class="public-list-prb hide ft2">已完结</span><span class="public-play"><i
class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/6146.html" title="sin 七大罪">sin
七大罪</a>
<div class="public-list-subtitle cor5 hide ft2">sin 七宗罪 / Seven Mortal Sins</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/5110.html"
title="排球少年"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="排球少年封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2178189911.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr3">运动</span><span
class="public-list-prb hide ft2">已完结</span><span class="public-play"><i
class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/5110.html"
title="排球少年">排球少年</a>
<div class="public-list-subtitle cor5 hide ft2">排球!! / Haikyuu</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/4417.html"
title="无职转生:到了异世界就拿出真本事 下部"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="无职转生:到了异世界就拿出真本事 下部封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2676948712.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr4">穿越</span><span
class="public-list-prb hide ft2">已完结</span><span class="public-play"><i
class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/4417.html"
title="无职转生:到了异世界就拿出真本事 下部">无职转生:到了异世界就拿出真本事
下部</a>
<div class="public-list-subtitle cor5 hide ft2">无职转生~到了异世界就拿出真本事~
下部
</div>
</div>
</div>
<div class="public-list-box public-pic-b [swiper]">
<div class="public-list-div public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/5226.html"
title="妖精的尾巴 第二季"><img
class="lazy lazy1 gen-movie-img mask-1" referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
alt="妖精的尾巴 第二季封面图"
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/65/f5/91946_qTQpV.jpg"/><span
class="public-bg"></span><span class="public-prt hide cr8">剧情</span><span
class="public-list-prb hide ft2">已完结[176-265]</span><span
class="public-play"><i class="fa">&#xe593;</i></span></a></div>
<div class="public-list-button"><a target="_self" class="time-title hide ft4"
href="/bangumi/5226.html" title="妖精的尾巴 第二季">妖精的尾巴
第二季</a>
<div class="public-list-subtitle cor5 hide ft2">フェアリーテール 第2期</div>
</div>
</div>
</div>
</div>
<div class="info-parameter none">
<div style="padding: 15px; width: 100%; height: 100%;">
<div class="wap-head">
<div class="l"><a class="fa drawer-of cor4" href="javascript:">&#xe566;</a></div>
<h2 class="hidden"><a class="cor4 b" href="javascript:">影片参数</a></h2></div>
<div class="wap-head-z"></div>
<div class="gen-search-form search-show drawer-scroll-list cor5" style="line-height:30px">
<ul>
<li><em class="cor4">片名:</em><span>GIRLS BAND CRY</span></li>
<li><em class="cor4">状态:</em><span>更新至4集</span></li>
<li><em class="cor4">主演:</em><a href="/search/actor/%E7%90%86%E5%90%8D.html"
target="_blank">理名</a>&nbsp;<a
href="/search/actor/%E7%BE%8E%E6%80%9C.html"
target="_blank">美怜</a>&nbsp;<a
href="/search/actor/%E5%A4%95%E8%8E%89.html"
target="_blank">夕莉</a>&nbsp;<a
href="/search/actor/%E6%9C%B1%E6%9D%8E.html"
target="_blank">朱李</a>&nbsp;<a
href="/search/actor/%E5%87%AA%E9%83%BD.html" target="_blank">凪都</a>&nbsp;
</li>
<li><em class="cor4">导演:</em><a
href="/search/director/%E9%85%92%E4%BA%95%E5%92%8C%E7%94%B7.html"
target="_blank">酒井和男</a>&nbsp;
</li>
<li><em class="cor4">年份:</em>2024</li>
<li><em class="cor4">地区:</em>日本</li>
<li><em class="cor4">类型:</em><a href="/search/class/%E5%8E%9F%E5%88%9B.html"
target="_blank">原创</a>&nbsp;<a
href="/search/class/%E9%9F%B3%E4%B9%90.html"
target="_blank">音乐</a>&nbsp;<a
href="/search/class/%E7%99%BE%E5%90%88.html"
target="_blank">百合</a>&nbsp;<a
href="/search/class/%E6%BC%AB%E7%94%BB%E6%94%B9.html"
target="_blank">漫画改</a>&nbsp;<a
href="/search/class/%E6%97%A5%E6%BC%AB%E7%95%AA%E5%89%A7.html"
target="_blank">日漫番剧</a>&nbsp;<a
href="/search/class/%E6%97%A5%E6%BC%AB%E7%95%AA.html"
target="_blank">日漫番</a>&nbsp;
</li>
<li><em class="cor4">频道:</em>内详</li>
<li><em class="cor4">上映:</em>2024-04-05</li>
<li><em class="cor4">语言:</em>日语</li>
<li><em class="cor4">更新:</em>2024-05-25 10:40</li>
<li class="top26"><em class="cor4">简介:</em>  高中二年级,辍学独自在东京工作并设定了上大学的目标的主人公。  被朋友背叛,不知所措的少女。  被父母抛弃,靠打工在大城市中勉强维生的女孩。  这个世界总是背叛我们。  事情总是无法按照我们的想法进行。  但是,我们还是希望喜欢上什么。  因为我们相信自己的位置一定在某个地方。  所以,我们歌唱。
</li>
</ul>
</div>
</div>
</div>
<div class="top-back"><a class="lang-bnt fa box" data-id="1" href="javascript:"></a>
<script src="/static/ds3/js/zh.js"></script>
<a class="theme-style fa box" data-id="2" href="javascript:">&#xe575;</a><a
class="bj2 top fa ds-jiantoushang" href="javascript:"></a></div>
<footer class="footer box top40 wap-hide"><p class="this-link"><a href="" target="_blank"
rel="nofollow">Telegram群</a><a
href="/gbook.html" target="_blank">问题反馈</a><a href="/rss/baidu.xml"
target="_blank">网站地图</a></p>
<p class="cor5">
本站所有资源信息均从互联网搜索而来本站不对显示的内容承担责任如您认为本站页面信息侵犯了您的权益请附上版权证明邮件告知在收到邮件后48小时内删除</p>
<p class="cor5">Copyright &copy;&nbsp;2021~2024&nbsp;<a href="/">www.nyafun.net</a>&nbsp;All
rights reservd.</p>
<p class="none">
<script>
var _paq = window._paq = window._paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//tongji.nyafun.net/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '1']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })();
</script>
</p>
</footer>
<div class="bottom-navigation none tab-off-1 tab-text-1">
<div class="foot-top-height"></div>
<div class="foot-table-box bj3">
<ul class="flex around">
<li><a target="_self" class="cor4" href="/"><em class="fa ds-zhuye"></em><em
class="fa none ds-zhuye2"></em>
<p class="time-title">首页</p></a></li>
<li><a target="_self" class="cor4" href="/show/1.html"><em
class="fa ds-dongman"></em><em class="fa none ds-dongman2"></em>
<p class="time-title">番剧</p></a></li>
<li><a target="_self" class="cor4" href="/label/rank.html"><em
class="fa ds-pahang"></em><em class="fa none ds-pahang2"></em>
<p class="time-title">排行榜</p></a></li>
<li><a target="_self" class="cor4" href="/label/app.html"><em class="fa ds-faxian"></em><em
class="fa none ds-faxian2"></em>
<p class="time-title">APP下载</p></a></li>
<li><a target="_self" class="cor4" href="/user/index.html"><em
class="fa ds-yonghu"></em><em class="fa none ds-yonghu2"></em>
<p class="time-title">我的</p></a></li>
</ul>
</div>
</div>
<div id="notice" class="ds-pop none">
<div class="box-bg"></div>
<div class="pop-box">
<div class="topfadeInUp animated bj3 cor4">
<div class="pop-top"></div>
<div class="pop-title">公告</div>
<div class="pop-content">
<div class="popup-main"><p class="popup-domain">
<span>NyaFun动漫APP已上线</span><strong><a
href="https://www.123pan.com/s/U0MbVv-SPWIh.html"
target="_red">🔥点我立即下载🔥</a></strong></p>
<p class="popup-domain"><span>英文域名</span><strong><a
href="https://www.nyafun.net"
target="_blank">www.nyafun.net</a></strong></p>
<p align="center">将以上域名加入Ctrl+D收藏夹回到NyaFun更方便</div>
</div>
<input type="button" class="button ol2" style="width:100%" value="我已了解"></div>
</div>
</div>
<script>
((function () { var callbacks = [], timeLimit = 50, open = false; setInterval(loop, 1); return {addListener: function (fn) {callbacks.push(fn);}, cancleListenr: function (fn) { callbacks = callbacks.filter(function (v) { return v !== fn; }); }}; function loop() { var startTime = new Date(); debugger; if (new Date() - startTime > timeLimit) { if (!open) { callbacks.forEach(function (fn) { fn.call(null); }); }open = true; window.stop(); $(location).attr('href', 'https://www.baidu.com/'); }else { open = false; } } })()).addListener(function () { window.location.reload(); }); window.document.keydown(function (event) { if (event.keyCode == 123) { $(location).attr('href', 'https://www.baidu.com/'); } });
</script>
<div class="box-bg2 pop-bj" style="display:none"></div>
<div class="pop-list-body bj pop-1">
<div class="wap-head" style="display:none">
<div class="l"><a class="fa pop-bj cor4" href="javascript:">&#xe566;</a></div>
<h2 class="hidden"><a class="cor4 b" href="javascript:">搜索</a></h2></div>
<div class="wap-head-z"></div>
<div class="head-search input bj br">
<form id="search" name="search" method="get" action="/search.html"><input type="text"
name="wd"
class="search-input mac_wd cor5"
value=""
placeholder="想看些什么捏~"
autocomplete="off"/>
<button type="submit" class="search-input-sub button fa ds-sousuo"></button>
<button type="button" class="select-name cor5" data-id="1">视频<i class="fa cor5">&#xe563;</i>
</button>
</form>
</div>
<div class="select-list bj radius br none">
<div class="flex between ease cor4"><span data-id="1" data-name="视频"
data-url="/search.html">视频</span></div>
</div>
<div class="completion cor5 ft3"></div>
<div class="public-list-new top30">
<div class="title-m cor4 flex between"><h5>搜索历史</h5><a id="re_del" class="cor6 ho"
style="font-size:14px"><i
class="fa r3 ds-shanchu"></i>删除</a></div>
<div class="records-list"></div>
</div>
<div class="wap-diy-vod-e search-hot top30">
<div class="title-m cor4 flex between"><h5>热门搜索</h5></div>
<div>
<ul>
<li><a href="/search/wd/%E5%BD%B1%E4%B9%8B%E5%AE%9E%E5%8A%9B%E8%80%85.html"
target="_blank" class="vod-link br b-b"><span
class="vod-no-style">NO</span><span
class="vod-on-e-styles key1 cor5">1</span>
<div class="vod-center hide">影之实力者</div>
</a></li>
</ul>
</div>
</div>
</div>
<div class="pop-list-body gen-history-list bj pop-2">
<div class="wap-head" style="display:none">
<div class="l"><a class="fa pop-bj cor4" href="javascript:">&#xe566;</a></div>
<h2 class="hidden"><a class="cor4 b" href="javascript:">播放记录</a></h2></div>
<div class="wap-head-z"></div>
<div class="play-catalog flex around ft4 b"><span class="rel on"><a
href="javascript:">本地记录</a></span><span class="rel"><a
href="javascript:">云端记录</a></span></div>
<div class="top30 mask-1-box">
<div class="locality-history history check">
<ul></ul>
<a id="l_history" href="javascript:" class="button top30 ol2"
style="width:100%">清空记录</a></div>
<div class="user-history history">
<ul>
<div class="loading">
<span></span><span></span><span></span><span></span><span></span></div>
</ul>
<a href="/user/plays.html" class="button top30 ol2" style="width:100%">查看更多</a>
</div>
</div>
</div>
<div class="gen-account-menu none">
<div class="head-user-info"
style="background-image: linear-gradient(to top,rgb(0 0 0 / 80%),transparent),url(/static/ds3/img/index_user.jpg);">
<a class="head-user" data-url="/user/index.html" href="javascript:">登录账号</a></div>
</div>
<div class="qiAnDao-con pop-box" style="display:none"><a class="qiAnDao-gz-bnt" href="javascript:">签到规则</a><a
class="qiAnDao-gz-off fa" href="javascript:">&#xe561;</a>
<div class="qiAnDao-con-bj"></div>
<div class="qiAnDao-title cor1"><h5>每日签到</h5><span>每日签到一次,连续签到奖励更多</span>
</div>
<div id="qiAnDao_1" class="qiAnDao-main"
style="display:none;text-align:center;color:#999;padding:60px 0"><i class="loading3"></i>加载中
</div>
<div id="qiAnDao_2" class="qiAnDao-main">
<div class="qiAnDao-bj"></div>
<ul class="qiAnDao-list days cor8 flex wrap">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<ul class="qiAnDao-list flex wrap" id="qiAnDao-list"></ul>
</div>
<div class="qiAnDao-top">立即签到</div>
<div class="qiAnDao-bottom"><a href="javascript:" class="fa">&#xe561;</a><h4>签到规则</h4>
<p>1.连续签到7天可以获得额外奖励5积分<br>2.连续签到15天可以获得额外奖励5积分<br>3.连续签到20天获得额外奖励10积分<br>4.连续签到25天获得额外奖励10积分<br>
</p></div>
</div>
</body>
</html>
<script>
// 兼容低版本浏览器插件
var um = document.createElement("script");
um.src = "https://cdn.polyfill.io/v3/polyfill.min.js?features=default";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(um, s);
</script>

View File

@ -0,0 +1,535 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no,viewport-fit=cover">
<title>搜索girls band-NyaFun动漫</title>
<meta name="keywords" content="girls band在线观看,girls band迅雷下载"/>
<meta name="description" content="girls band的搜索结果,NyaFun动漫"/>
<link href="/static/ds3/css/common.css?version=265" rel="stylesheet" type="text/css"/>
<script src="/static/ds3/js/jquery.js"></script>
<script src="/static/ds3/js/assembly.js"></script>
<script src="/static/ds3/js/swiper.min.js"></script>
<script>
const maccms={"vod_mask":"mask-1","path2":"/","day":"2","jx":"0","so_off":"1","bt-style":"","login-login":"/","path":"","mid":"1","aid":"13","url":"www.nyafun.net","wapurl":"www.nyafun.net","mob_status":"0","upload":{"protocol":"https","mode":"local","remoteurl":"http://img.test.com/","img_key":"","img_api":"",}};
</script>
<script src="/static/ds3/js/ecscript.js"></script>
<script>new WOW().init();</script>
<meta name="renderer" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta http-equiv="Cache-Control" content="no-siteapp"/>
<link rel="shortcut icon" href="https://pic1.imgdb.cn/item/6354c9b316f2c2beb1de5e2c.png"
type="image/x-icon"/>
<link rel="apple-touch-icon" href="https://pic1.imgdb.cn/item/6354c9b316f2c2beb1de5e2c.png">
<link rel="icon" sizes="192x192" type="image/png"
href="https://pic1.imgdb.cn/item/6354c9b316f2c2beb1de5e2c.png">
</head>
<body class="theme2">
<div class="gen-loading bj load-icon-on" data-time="100"><img class="loading1 none" data-ii="on"
src="https://www.nyafun.net/image/NyaFun_logo.png"
alt="NyaFun动漫"><img
class="loading2 none" src="https://www.nyafun.net/image/NyaFun_logo.png" alt="NyaFun动漫">
</div>
<div class="head flex between head-c header_nav0">
<div class="left flex">
<div class="logo"><a class="logo-brand" href="/"><img class="logo1 none"
src="https://pic.imgdb.cn/item/653fc9b6c458853aef19190d.png"
alt="NyaFun动漫"><img
class="logo2 none" src="https://pic.imgdb.cn/item/653fc9b6c458853aef19190d.png"
alt="NyaFun动漫"></a></div>
<div class="head-nav ft4 roll bold0 pc-show0 wap-show1">
<ul class="swiper-wrapper">
<li class="swiper-slide"><a target="_self" href="/" class=""><em
class="fa ds-zhuye"></em><em class="fa none ds-zhuye2"></em>首页</a></li>
<li class="swiper-slide"><a target="_self" href="/show/1.html" class=""><em
class="fa ds-dongman"></em><em class="fa none ds-dongman2"></em>番剧</a>
</li>
<li class="swiper-slide"><a target="_self" href="/show/2.html" class=""><em
class="fa ds-dianying"></em><em class="fa none ds-dianying2"></em>剧场</a>
</li>
<li class="swiper-slide"><a target="_self" href="/show/207.html" class=""><em
class="fa ds-dianshi"></em><em class="fa none ds-dianshi2"></em>特摄</a>
</li>
<li class="rel head-more-a"><a class="this-get" href="javascript:">更多<em
class="fa nav-more" style="font-size:18px">&#xe563;</em></a>
<div class="head-more none box size"><a target="_self" href="/"
class="nav-link none2"><em
class="fa ds-zhuye"></em><em class="fa none ds-zhuye2"></em>首页</a><a
target="_self" href="/show/1.html" class="nav-link none2"><em
class="fa ds-dongman"></em><em class="fa none ds-dongman2"></em>番剧</a><a
target="_self" href="/show/2.html" class="nav-link none2"><em
class="fa ds-dianying"></em><em
class="fa none ds-dianying2"></em>剧场</a><a target="_self"
href="/show/207.html"
class="nav-link none2"><em
class="fa ds-dianshi"></em><em class="fa none ds-dianshi2"></em>特摄</a><a
href="/label/weekday.html" class="nav-link"><em class="fa ds-zhou"></em><em
class="fa none ds-zhou2"></em>周番表</a><a href="/label/rank.html"
class="nav-link"><em
class="fa ds-pahang"></em><em class="fa none ds-pahang2"></em>排行榜</a><a
href="/gbook.html" class="nav-link"><em class="fa ds-pinglun"></em><em
class="fa none ds-pinglun2"></em>留言板</a></div>
</li>
</ul>
</div>
</div>
<div class="right flex">
<div class="this-search">
<form id="search2" name="search" class="flex-public" method="get" action="/search.html">
<a href="javascript:" data-id="1" class="this-select">视频<i class="fa">&#xe563;</i></a><input
type="text" name="wd" class="this-input flex-auto cor4" value=""
placeholder="想看些什么捏~" autocomplete="off">
<div class="flex"><a class="this-hot" href="/label/rank.html"><em
class="fa ds-pahang2 r3"></em>排行榜</a>
<button type="submit" class="fa ds-sousuo ol2"></button>
</div>
</form>
</div>
<div class="qiAnDao_bnt margin qd-noneon qd-bnt-off1"><a class="content-center"
href="javascript:"><i
class="fa ds-qiandao"></i><em>签到</em></a></div>
<div class="gen-search margin none"><a class="content-center" href="javascript:"><i
class="fa ds-sousuo"></i></a></div>
<div class="gen-history margin"><a class="content-center" href="javascript:"><i
class="fa ds-lishijilu"></i><em>播放记录</em></a></div>
<div class="margin down-none1"><a target="_blank" class="content-center"
href="/label/app.html"><i class="fa ds-yingyong"></i><em>客户端</em></a>
</div>
<div class="gen-left-list margin" style="padding-right:0"><a class="content-center"
href="javascript:"><i
class="fa ds-menu"></i></a></div>
<div class="margin wap-hide"><a class="this-user head-user" href="javascript:"
data-url="/user/index.html"><img
src="/static/ds3/img/default-head.jpg" alt="游客"/></a></div>
</div>
</div>
<div class="m-search">
<div class="sbg"></div>
<div class="m-search-case"><input type="text" name="wd" value="girls band"
placeholder="想看些什么捏~" class="input"></div>
<div class="m-search-card box-width">
<ul class="cf">
<li class="focus"><a href="/search.html?wd=girls band">视频</a><span
class="tips ol7"><strong class="mac-total"></strong></span></li>
</ul>
<a href="/label/rank.html" class="hotrank"><i class="fa icon-hot ds-pahang"></i>热搜榜</a>
</div>
</div>
<div class="box-width">
<div class="row flex wrap top40">
<div class="row-9">
<div class="row-right">
<div class="public-list-box search-box flex rel">
<div class="cover"
style="background-image: linear-gradient(180deg, rgb(17, 19, 25) 0%, rgba(25,26,33,0.90) 52%, rgb(17, 19, 25) 100%), url(https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/75/c1/431767_bX7FZ.jpg);"></div>
<div class="left public-list-bj"><a target="_self" class="public-list-exp"
href="/bangumi/7168.html"><img
class="lazy lazy1 gen-movie-img mask-1" alt="GIRLS BAND CRY封面图"
referrerpolicy="no-referrer"
src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="
data-src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/75/c1/431767_bX7FZ.jpg"/><span
class="public-list-prb hide ft2">更新至08</span><span
class="public-bg"></span><span class="public-play"><i class="fa">&#xe593;</i></span></a>
</div>
<div class="right rel flex-auto">
<div class="thumb-content">
<div class="thumb-txt cor4 hide"><a target="_self"
href="/bangumi/7168.html">GIRLS BAND
CRY</a></div>
<div class="thumb-else cor5 hide"><span><a href="/search/year/2024.html"
target="_blank">2024</a>&nbsp;</span><span><a
href="/search/area/%E6%97%A5%E6%9C%AC.html"
target="_blank">日本</a>&nbsp;</span><span><a
href="/search/class/%E5%8E%9F%E5%88%9B.html"
target="_blank">原创</a>&nbsp;<a
href="/search/class/%E9%9F%B3%E4%B9%90.html"
target="_blank">音乐</a>&nbsp;<a
href="/search/class/%E7%99%BE%E5%90%88.html"
target="_blank">百合</a>&nbsp;<a
href="/search/class/%E6%BC%AB%E7%94%BB%E6%94%B9.html"
target="_blank">漫画改</a>&nbsp;<a
href="/search/class/%E6%97%A5%E6%BC%AB%E7%95%AA%E5%89%A7.html"
target="_blank">日漫番剧</a>&nbsp;<a
href="/search/class/%E6%97%A5%E6%BC%AB%E7%95%AA.html"
target="_blank">日漫番</a>&nbsp;</span></div>
<div class="thumb-director cor5 hide"><a class="b" href="javascript:">导演:</a><a
href="/search/director/%E9%85%92%E4%BA%95%E5%92%8C%E7%94%B7.html"
target="_blank">酒井和男</a><em>/</em></div>
<div class="thumb-actor cor5 hide"><a class="b"
href="javascript:">主演:</a><a
href="/search/actor/%E7%90%86%E5%90%8D.html"
target="_blank">理名</a><em>/</em><a
href="/search/actor/%E7%BE%8E%E6%80%9C.html"
target="_blank">美怜</a><em>/</em><a
href="/search/actor/%E5%A4%95%E8%8E%89.html"
target="_blank">夕莉</a><em>/</em><a
href="/search/actor/%E6%9C%B1%E6%9D%8E.html"
target="_blank">朱李</a><em>/</em><a
href="/search/actor/%E5%87%AA%E9%83%BD.html"
target="_blank">凪都</a><em>/</em></div>
</div>
<span class="cor5 thumb-blurb hide2">  高中二年级,辍学独自在东京工作并设定了上大学的目标的主人公。  被朋友背叛,不知所措的少女。  被父母抛弃,靠打工在大城市中勉强维生的女孩。  这个世界总是背叛我们。  事情总是无法按照我们的想法进行。  但是,我们还是希望喜欢上什么。  因为我们相信自己的位置一定在某个地方。  所以,我们歌唱。</span>
<div class="thumb-menu flex"><a target="_self" href="/bangumi/7168.html"
class="button ol2"><i
class="fa r3 ds-bofang1"></i>播放正片</a><a
class="thumb-s collection fa ds-shoucang" data-type="2" data-mid="1"
data-id="7168"></a></div>
</div>
</div>
<script>$('.mac-total').html('1');</script>
</div>
</div>
<div class="row-1 wap-hide">
<div class="wap-diy-vod-e">
<div class="title-m cor4 flex between"><h5>热播影片</h5><a target="_self"
class="cor5"
href="/label/rank.html">更多<i
class="fa r3 ds-jiantouyou"></i></a></div>
<ul>
<li><a target="_self" href="/bangumi/3257.html" class="vod-link br b-b"><img
alt="妖精的尾巴 第一季"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/33/9a/2609_3ak4F.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key1 cor5 vod-no-dom-show">1</span>
<div class="vod-center"><span class="vod-title" title="妖精的尾巴 第一季">妖精的尾巴 第一季</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">已完结[1-175]</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>89447</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/7168.html" class="vod-link br b-b"><img
alt="GIRLS BAND CRY"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/75/c1/431767_bX7FZ.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key2 cor5 vod-no-dom-show">2</span>
<div class="vod-center"><span class="vod-title" title="GIRLS BAND CRY">GIRLS BAND CRY</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至08</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>49620</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/7140.html" class="vod-link br b-b"><img
alt="为美好的世界献上祝福!第三季"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/4c/8a/342667_0RfU8.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key3 cor5 vod-no-dom-show">3</span>
<div class="vod-center"><span class="vod-title"
title="为美好的世界献上祝福!第三季">为美好的世界献上祝福!第三季</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至07</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>50732</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/4841.html" class="vod-link br b-b"><img
alt="CLANNAD"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2221186392.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key4 cor5 vod-no-dom-show">4</span>
<div class="vod-center"><span class="vod-title"
title="CLANNAD">CLANNAD</span>
<div class="vod-sub-title"><span class="vod-sub-text cor5">已完结</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>91336</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/7187.html" class="vod-link br b-b"><img
alt="无职转生Ⅱ ~到了异世界就拿出真本事~ 第2部分"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/ad/25/444557_P66C6.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key5 cor5 vod-no-dom-show">5</span>
<div class="vod-center"><span class="vod-title"
title="无职转生Ⅱ ~到了异世界就拿出真本事~ 第2部分">无职转生Ⅱ ~到了异世界就拿出真本事~ 第2部分</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至18</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>47638</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/7137.html" class="vod-link br b-b"><img
alt="关于我转生变成史莱姆这档事 第三季"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/f0/f4/407573_993Vy.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key6 cor5 vod-no-dom-show">6</span>
<div class="vod-center"><span class="vod-title"
title="关于我转生变成史莱姆这档事 第三季">关于我转生变成史莱姆这档事 第三季</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至56</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>54854</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/6447.html" class="vod-link br b-b"><img
alt="欢迎来到实力至上主义教室 第三季"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/50/4d/373266_BiqQm.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key7 cor5 vod-no-dom-show">7</span>
<div class="vod-center"><span class="vod-title"
title="欢迎来到实力至上主义教室 第三季">欢迎来到实力至上主义教室 第三季</span>
<div class="vod-sub-title"><span class="vod-sub-text cor5">已完结</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>142611</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/7207.html" class="vod-link br b-b"><img
alt="怪兽8号"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/9c/d2/394623_BkSVB.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key8 cor5 vod-no-dom-show">8</span>
<div class="vod-center"><span class="vod-title"
title="怪兽8号">怪兽8号</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至07</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>30768</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/6452.html" class="vod-link br b-b"><img
alt="迷宫饭"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/c5/88/395378_1N3Zy.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key9 cor5 vod-no-dom-show">9</span>
<div class="vod-center"><span class="vod-title" title="迷宫饭">迷宫饭</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至21</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>77578</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/5734.html" class="vod-link br b-b"><img
alt="暴食狂战士"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/c/d0/9c/406180_zvAgW.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key10 cor5 vod-no-dom-show">10</span>
<div class="vod-center"><span class="vod-title"
title="暴食狂战士">暴食狂战士</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至12</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>204411</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/7143.html" class="vod-link br b-b"><img
alt="转生为第七王子,随心所欲的魔法学习之路"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://lain.bgm.tv/pic/cover/l/2b/b7/407133_hGMQM.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key11 cor5 vod-no-dom-show">11</span>
<div class="vod-center"><span class="vod-title"
title="转生为第七王子,随心所欲的魔法学习之路">转生为第七王子,随心所欲的魔法学习之路</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至08</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>35073</span></div>
</div>
</div>
</a></li>
<li><a target="_self" href="/bangumi/3337.html" class="vod-link br b-b"><img
alt="海贼王"
src="https://img02.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/95/crop/xy/ai/t/0/?appid=122&url=https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2197828404.jpg"
class="vod-img vod-no-dom radius"/><span
class="vod-no-style vod-no-dom-show">NO</span><span
class="vod-on-e-styles key12 cor5 vod-no-dom-show">12</span>
<div class="vod-center"><span class="vod-title" title="海贼王">海贼王</span>
<div class="vod-sub-title"><span
class="vod-sub-text cor5">更新至1105</span>
<div class="vod-hot-content flex"><span
class="fa">&#xe596;</span><span>178670</span></div>
</div>
</div>
</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="top-back"><a class="lang-bnt fa box" data-id="1" href="javascript:"></a>
<script src="/static/ds3/js/zh.js"></script>
<a class="theme-style fa box" data-id="2" href="javascript:">&#xe575;</a><a
class="bj2 top fa ds-jiantoushang" href="javascript:"></a></div>
<footer class="footer box top40 wap-hide"><p class="this-link"><a href="" target="_blank"
rel="nofollow">Telegram群</a><a
href="/gbook.html" target="_blank">问题反馈</a><a href="/rss/baidu.xml"
target="_blank">网站地图</a></p>
<p class="cor5">
本站所有资源信息均从互联网搜索而来本站不对显示的内容承担责任如您认为本站页面信息侵犯了您的权益请附上版权证明邮件告知在收到邮件后48小时内删除</p>
<p class="cor5">Copyright &copy;&nbsp;2021~2024&nbsp;<a href="/">www.nyafun.net</a>&nbsp;All
rights reservd.</p>
<p class="none">
<script>
var _paq = window._paq = window._paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//tongji.nyafun.net/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '1']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })();
</script>
</p>
</footer>
<div class="bottom-navigation none tab-off-1 tab-text-1">
<div class="foot-top-height"></div>
<div class="foot-table-box bj3">
<ul class="flex around">
<li><a target="_self" class="cor4" href="/"><em class="fa ds-zhuye"></em><em
class="fa none ds-zhuye2"></em>
<p class="time-title">首页</p></a></li>
<li><a target="_self" class="cor4" href="/show/1.html"><em
class="fa ds-dongman"></em><em class="fa none ds-dongman2"></em>
<p class="time-title">番剧</p></a></li>
<li><a target="_self" class="cor4" href="/label/rank.html"><em
class="fa ds-pahang"></em><em class="fa none ds-pahang2"></em>
<p class="time-title">排行榜</p></a></li>
<li><a target="_self" class="cor4" href="/label/app.html"><em class="fa ds-faxian"></em><em
class="fa none ds-faxian2"></em>
<p class="time-title">APP下载</p></a></li>
<li><a target="_self" class="cor4" href="/user/index.html"><em
class="fa ds-yonghu"></em><em class="fa none ds-yonghu2"></em>
<p class="time-title">我的</p></a></li>
</ul>
</div>
</div>
<div id="notice" class="ds-pop none">
<div class="box-bg"></div>
<div class="pop-box">
<div class="topfadeInUp animated bj3 cor4">
<div class="pop-top"></div>
<div class="pop-title">公告</div>
<div class="pop-content">
<div class="popup-main"><p class="popup-domain">
<span>NyaFun动漫APP已上线</span><strong><a
href="https://www.123pan.com/s/U0MbVv-SPWIh.html"
target="_red">🔥点我立即下载🔥</a></strong></p>
<p class="popup-domain"><span>英文域名</span><strong><a
href="https://www.nyafun.net"
target="_blank">www.nyafun.net</a></strong></p>
<p align="center">将以上域名加入Ctrl+D收藏夹回到NyaFun更方便</div>
</div>
<input type="button" class="button ol2" style="width:100%" value="我已了解"></div>
</div>
</div>
<script>
((function () { var callbacks = [], timeLimit = 50, open = false; setInterval(loop, 1); return {addListener: function (fn) {callbacks.push(fn);}, cancleListenr: function (fn) { callbacks = callbacks.filter(function (v) { return v !== fn; }); }}; function loop() { var startTime = new Date(); debugger; if (new Date() - startTime > timeLimit) { if (!open) { callbacks.forEach(function (fn) { fn.call(null); }); }open = true; window.stop(); $(location).attr('href', 'https://www.baidu.com/'); }else { open = false; } } })()).addListener(function () { window.location.reload(); }); window.document.keydown(function (event) { if (event.keyCode == 123) { $(location).attr('href', 'https://www.baidu.com/'); } });
</script>
<div class="box-bg2 pop-bj" style="display:none"></div>
<div class="pop-list-body bj pop-1">
<div class="wap-head" style="display:none">
<div class="l"><a class="fa pop-bj cor4" href="javascript:">&#xe566;</a></div>
<h2 class="hidden"><a class="cor4 b" href="javascript:">搜索</a></h2></div>
<div class="wap-head-z"></div>
<div class="head-search input bj br">
<form id="search" name="search" method="get" action="/search.html"><input type="text"
name="wd"
class="search-input mac_wd cor5"
value="girls band"
placeholder="想看些什么捏~"
autocomplete="off"/>
<button type="submit" class="search-input-sub button fa ds-sousuo"></button>
<button type="button" class="select-name cor5" data-id="1">视频<i class="fa cor5">&#xe563;</i>
</button>
</form>
</div>
<div class="select-list bj radius br none">
<div class="flex between ease cor4"><span data-id="1" data-name="视频"
data-url="/search.html">视频</span></div>
</div>
<div class="completion cor5 ft3"></div>
<div class="public-list-new top30">
<div class="title-m cor4 flex between"><h5>搜索历史</h5><a id="re_del" class="cor6 ho"
style="font-size:14px"><i
class="fa r3 ds-shanchu"></i>删除</a></div>
<div class="records-list"></div>
</div>
<div class="wap-diy-vod-e search-hot top30">
<div class="title-m cor4 flex between"><h5>热门搜索</h5></div>
<div>
<ul>
<li><a href="/search/wd/%E5%BD%B1%E4%B9%8B%E5%AE%9E%E5%8A%9B%E8%80%85.html"
target="_blank" class="vod-link br b-b"><span
class="vod-no-style">NO</span><span
class="vod-on-e-styles key1 cor5">1</span>
<div class="vod-center hide">影之实力者</div>
</a></li>
</ul>
</div>
</div>
</div>
<div class="pop-list-body gen-history-list bj pop-2">
<div class="wap-head" style="display:none">
<div class="l"><a class="fa pop-bj cor4" href="javascript:">&#xe566;</a></div>
<h2 class="hidden"><a class="cor4 b" href="javascript:">播放记录</a></h2></div>
<div class="wap-head-z"></div>
<div class="play-catalog flex around ft4 b"><span class="rel on"><a
href="javascript:">本地记录</a></span><span class="rel"><a
href="javascript:">云端记录</a></span></div>
<div class="top30 mask-1-box">
<div class="locality-history history check">
<ul></ul>
<a id="l_history" href="javascript:" class="button top30 ol2"
style="width:100%">清空记录</a></div>
<div class="user-history history">
<ul>
<div class="loading">
<span></span><span></span><span></span><span></span><span></span></div>
</ul>
<a href="/user/plays.html" class="button top30 ol2" style="width:100%">查看更多</a>
</div>
</div>
</div>
<div class="gen-account-menu none">
<div class="head-user-info"
style="background-image: linear-gradient(to top,rgb(0 0 0 / 80%),transparent),url(/static/ds3/img/index_user.jpg);">
<a class="head-user" data-url="/user/index.html" href="javascript:">登录账号</a></div>
</div>
<div class="qiAnDao-con pop-box" style="display:none"><a class="qiAnDao-gz-bnt" href="javascript:">签到规则</a><a
class="qiAnDao-gz-off fa" href="javascript:">&#xe561;</a>
<div class="qiAnDao-con-bj"></div>
<div class="qiAnDao-title cor1"><h5>每日签到</h5><span>每日签到一次,连续签到奖励更多</span>
</div>
<div id="qiAnDao_1" class="qiAnDao-main"
style="display:none;text-align:center;color:#999;padding:60px 0"><i class="loading3"></i>加载中
</div>
<div id="qiAnDao_2" class="qiAnDao-main">
<div class="qiAnDao-bj"></div>
<ul class="qiAnDao-list days cor8 flex wrap">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<ul class="qiAnDao-list flex wrap" id="qiAnDao-list"></ul>
</div>
<div class="qiAnDao-top">立即签到</div>
<div class="qiAnDao-bottom"><a href="javascript:" class="fa">&#xe561;</a><h4>签到规则</h4>
<p>1.连续签到7天可以获得额外奖励5积分<br>2.连续签到15天可以获得额外奖励5积分<br>3.连续签到20天获得额外奖励10积分<br>4.连续签到25天获得额外奖励10积分<br>
</p></div>
</div>
</body>
</html>
<script>
// 兼容低版本浏览器插件
var um = document.createElement("script");
um.src = "https://cdn.polyfill.io/v3/polyfill.min.js?features=default";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(um, s);
</script>

View File

@ -74,6 +74,7 @@ includeProject(":data-sources:core", "data-sources/core") // data source manager
includeProject(":data-sources:dmhy", "data-sources/dmhy") // data source from https://dmhy.org
includeProject(":data-sources:acg-rip", "data-sources/acg.rip") // data source from https://acg.rip
includeProject(":data-sources:mikan", "data-sources/mikan") // data source from https://mikanani.me/
includeProject(":data-sources:nyafun", "data-sources/nyafun") // data source from https://nyafun.net/
includeProject(
":data-sources:bangumi",
"data-sources/bangumi"