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