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

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

View File

@ -7,25 +7,36 @@ import kotlinx.serialization.json.JsonNames
@OptIn(ExperimentalSerializationApi::class) @OptIn(ExperimentalSerializationApi::class)
@Serializable @Serializable
data class SectionListRenderer( data class SectionListRenderer(
val contents: List<Content>?, val contents: List<Content>?, val continuations: List<Continuation>?
val continuations: List<Continuation>?
) { ) {
@Serializable @Serializable
data class Content( data class Content(
@JsonNames("musicImmersiveCarouselShelfRenderer") @JsonNames("musicImmersiveCarouselShelfRenderer") val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?,
val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?, @JsonNames("musicPlaylistShelfRenderer") val musicShelfRenderer: MusicShelfRenderer?,
@JsonNames("musicPlaylistShelfRenderer")
val musicShelfRenderer: MusicShelfRenderer?,
val gridRenderer: GridRenderer?, val gridRenderer: GridRenderer?,
val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer?, val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer?,
@JsonNames("musicCardShelfRenderer") @JsonNames("musicCardShelfRenderer") val musicCardShelfRenderer: MusicCardShelfRenderer?,
val musicCardShelfRenderer: MusicCardShelfRenderer? val musicResponsiveHeaderRenderer: MusicResponsiveHeaderRenderer?,
) { ) {
@Serializable @Serializable
data class MusicDescriptionShelfRenderer( data class MusicDescriptionShelfRenderer(
val description: Runs?, 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)) setBody(BrowseBody(browseId = browseId))
}.body<BrowseResponse>() }.body<BrowseResponse>()
val musicDetailHeaderRenderer = response //6月24日发现数据结构发生变化。
.header
?.musicDetailHeaderRenderer
val sectionListRendererContents = response // val musicDetailHeaderRenderer = response
// .header
// ?.musicDetailHeaderRenderer
val musicResponsiveHeaderRenderer = response
.contents .contents
?.singleColumnBrowseResultsRenderer ?.twoColumnBrowseResultsRenderer
?.tabs ?.tabs
?.firstOrNull() ?.firstOrNull()
?.tabRenderer ?.tabRenderer
?.content ?.content
?.sectionListRenderer ?.sectionListRenderer
?.contents ?.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 val musicShelfRenderer = sectionListRendererContents
?.firstOrNull() ?.firstOrNull()
@ -79,7 +101,7 @@ suspend fun Innertube.moPlaylistPage(browseId: String): Result<Innertube.MoPlayl
val bean = Innertube.MoPlaylistOrAlbumPage.MoPlaylistOrAlbumListBean( val bean = Innertube.MoPlaylistOrAlbumPage.MoPlaylistOrAlbumListBean(
title = runs0?.text, title = runs0?.text,
name = runs1?.text ?: musicDetailHeaderRenderer name = runs1?.text ?: musicResponsiveHeaderRenderer
?.subtitle ?.subtitle
?.runs ?.runs
?.map { it.text } ?.map { it.text }
@ -108,32 +130,32 @@ suspend fun Innertube.moPlaylistPage(browseId: String): Result<Innertube.MoPlayl
Innertube.MoPlaylistOrAlbumPage( Innertube.MoPlaylistOrAlbumPage(
title = musicDetailHeaderRenderer title = musicResponsiveHeaderRenderer
?.title ?.title
?.runs ?.runs
?.firstOrNull() ?.firstOrNull()
?.text, ?.text,
subtitle = musicDetailHeaderRenderer subtitle = musicResponsiveHeaderRenderer
?.subtitle ?.subtitle
?.runs ?.runs
?.map { it.text } ?.map { it.text }
?.joinToString(""), ?.joinToString(""),
thumbnail = musicDetailHeaderRenderer thumbnail = musicResponsiveHeaderRenderer
?.thumbnail ?.thumbnail
?.musicThumbnailRenderer ?.musicThumbnailRenderer
?.thumbnail ?.thumbnail
?.thumbnails ?.thumbnails
?.let { it.getOrNull(3) ?: it.getOrNull(2) ?: it.getOrNull(1) ?: it.getOrNull(0) } ?.let { it.getOrNull(3) ?: it.getOrNull(2) ?: it.getOrNull(1) ?: it.getOrNull(0) }
?.url, ?.url,
secondSubtitle = musicDetailHeaderRenderer secondSubtitle = musicResponsiveHeaderRenderer
?.secondSubtitle ?.secondSubtitle
?.runs ?.runs
?.map { it.text } ?.map { it.text }
?.joinToString(""), ?.joinToString(""),
description = musicDetailHeaderRenderer description = musicResponsiveHeaderRenderer
?.description
?.musicDescriptionShelfRenderer
?.description ?.description
?.runs
?.firstOrNull()
?.text, ?.text,
moPlaylistOrAlbumListBean = list moPlaylistOrAlbumListBean = list
) )