专辑等列表数据结构发生变化。重新获取数据。
This commit is contained in:
parent
6fe4b96b4e
commit
c184b7896e
@ -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")
|
||||
|
||||
@ -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?
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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
|
||||
)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user