专辑等列表数据结构发生变化。重新获取数据。

This commit is contained in:
ocean 2024-06-24 15:15:54 +08:00
parent 6fe4b96b4e
commit c184b7896e
3 changed files with 66 additions and 21 deletions

View File

@ -22,6 +22,7 @@ data class BrowseResponse(
data class Contents(
val singleColumnBrowseResultsRenderer: Tabs?,
val sectionListRenderer: SectionListRenderer?,
val twoColumnBrowseResultsRenderer: TwoColumnBrowseResultsRenderer?,
)
@Serializable
@ -29,6 +30,17 @@ data class BrowseResponse(
val sectionListContinuation: SectionListContinuation?
)
@Serializable
data class TwoColumnBrowseResultsRenderer(
val secondaryContents : SecondaryContents?,
val tabs: List<Tabs.Tab>?,
){
@Serializable
data class SecondaryContents(
val sectionListRenderer: SectionListRenderer?
)
}
@Serializable
data class Header @OptIn(ExperimentalSerializationApi::class) constructor(
@JsonNames("musicVisualHeaderRenderer")

View File

@ -7,25 +7,36 @@ import kotlinx.serialization.json.JsonNames
@OptIn(ExperimentalSerializationApi::class)
@Serializable
data class SectionListRenderer(
val contents: List<Content>?,
val continuations: List<Continuation>?
val contents: List<Content>?, val continuations: List<Continuation>?
) {
@Serializable
data class Content(
@JsonNames("musicImmersiveCarouselShelfRenderer")
val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?,
@JsonNames("musicPlaylistShelfRenderer")
val musicShelfRenderer: MusicShelfRenderer?,
@JsonNames("musicImmersiveCarouselShelfRenderer") val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?,
@JsonNames("musicPlaylistShelfRenderer") val musicShelfRenderer: MusicShelfRenderer?,
val gridRenderer: GridRenderer?,
val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer?,
@JsonNames("musicCardShelfRenderer")
val musicCardShelfRenderer: MusicCardShelfRenderer?
@JsonNames("musicCardShelfRenderer") val musicCardShelfRenderer: MusicCardShelfRenderer?,
val musicResponsiveHeaderRenderer: MusicResponsiveHeaderRenderer?,
) {
@Serializable
data class MusicDescriptionShelfRenderer(
val description: Runs?,
)
@Serializable
data class MusicResponsiveHeaderRenderer(
val title: Runs?,
val subtitle: Runs?,
val secondSubtitle: Runs?,
val thumbnail: ThumbnailRenderer?,
val description: Description?
) {
@Serializable
data class Description(
val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer?
)
}
}
}

View File

@ -15,19 +15,41 @@ suspend fun Innertube.moPlaylistPage(browseId: String): Result<Innertube.MoPlayl
setBody(BrowseBody(browseId = browseId))
}.body<BrowseResponse>()
val musicDetailHeaderRenderer = response
.header
?.musicDetailHeaderRenderer
//6月24日发现数据结构发生变化。
val sectionListRendererContents = response
// val musicDetailHeaderRenderer = response
// .header
// ?.musicDetailHeaderRenderer
val musicResponsiveHeaderRenderer = response
.contents
?.singleColumnBrowseResultsRenderer
?.twoColumnBrowseResultsRenderer
?.tabs
?.firstOrNull()
?.tabRenderer
?.content
?.sectionListRenderer
?.contents
?.firstOrNull()
?.musicResponsiveHeaderRenderer
// val sectionListRendererContents = response
// .contents
// ?.singleColumnBrowseResultsRenderer
// ?.tabs
// ?.firstOrNull()
// ?.tabRenderer
// ?.content
// ?.sectionListRenderer
// ?.contents
val sectionListRendererContents = response
.contents
?.twoColumnBrowseResultsRenderer
?.secondaryContents
?.sectionListRenderer
?.contents
val musicShelfRenderer = sectionListRendererContents
?.firstOrNull()
@ -79,7 +101,7 @@ suspend fun Innertube.moPlaylistPage(browseId: String): Result<Innertube.MoPlayl
val bean = Innertube.MoPlaylistOrAlbumPage.MoPlaylistOrAlbumListBean(
title = runs0?.text,
name = runs1?.text ?: musicDetailHeaderRenderer
name = runs1?.text ?: musicResponsiveHeaderRenderer
?.subtitle
?.runs
?.map { it.text }
@ -108,32 +130,32 @@ suspend fun Innertube.moPlaylistPage(browseId: String): Result<Innertube.MoPlayl
Innertube.MoPlaylistOrAlbumPage(
title = musicDetailHeaderRenderer
title = musicResponsiveHeaderRenderer
?.title
?.runs
?.firstOrNull()
?.text,
subtitle = musicDetailHeaderRenderer
subtitle = musicResponsiveHeaderRenderer
?.subtitle
?.runs
?.map { it.text }
?.joinToString(""),
thumbnail = musicDetailHeaderRenderer
thumbnail = musicResponsiveHeaderRenderer
?.thumbnail
?.musicThumbnailRenderer
?.thumbnail
?.thumbnails
?.let { it.getOrNull(3) ?: it.getOrNull(2) ?: it.getOrNull(1) ?: it.getOrNull(0) }
?.url,
secondSubtitle = musicDetailHeaderRenderer
secondSubtitle = musicResponsiveHeaderRenderer
?.secondSubtitle
?.runs
?.map { it.text }
?.joinToString(""),
description = musicDetailHeaderRenderer
description = musicResponsiveHeaderRenderer
?.description
?.musicDescriptionShelfRenderer
?.description
?.runs
?.firstOrNull()
?.text,
moPlaylistOrAlbumListBean = list
)