From c184b7896e6248324d722774f52e063794453df6 Mon Sep 17 00:00:00 2001 From: ocean <503259349@qq.com> Date: Mon, 24 Jun 2024 15:15:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=93=E8=BE=91=E7=AD=89=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=E5=8F=91=E7=94=9F=E5=8F=98?= =?UTF-8?q?=E5=8C=96=E3=80=82=E9=87=8D=E6=96=B0=E8=8E=B7=E5=8F=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../music/innertube/models/BrowseResponse.kt | 12 +++++ .../innertube/models/SectionListRenderer.kt | 27 +++++++---- .../innertube/requests/MoPlaylistPage.kt | 48 ++++++++++++++----- 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/melody/offline/music/innertube/models/BrowseResponse.kt b/app/src/main/java/melody/offline/music/innertube/models/BrowseResponse.kt index 8f32b0c..ba2f39c 100644 --- a/app/src/main/java/melody/offline/music/innertube/models/BrowseResponse.kt +++ b/app/src/main/java/melody/offline/music/innertube/models/BrowseResponse.kt @@ -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?, + ){ + @Serializable + data class SecondaryContents( + val sectionListRenderer: SectionListRenderer? + ) + } + @Serializable data class Header @OptIn(ExperimentalSerializationApi::class) constructor( @JsonNames("musicVisualHeaderRenderer") diff --git a/app/src/main/java/melody/offline/music/innertube/models/SectionListRenderer.kt b/app/src/main/java/melody/offline/music/innertube/models/SectionListRenderer.kt index 146ce5d..0839f39 100644 --- a/app/src/main/java/melody/offline/music/innertube/models/SectionListRenderer.kt +++ b/app/src/main/java/melody/offline/music/innertube/models/SectionListRenderer.kt @@ -7,25 +7,36 @@ import kotlinx.serialization.json.JsonNames @OptIn(ExperimentalSerializationApi::class) @Serializable data class SectionListRenderer( - val contents: List?, - val continuations: List? + val contents: List?, val continuations: List? ) { @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? + ) + } } } diff --git a/app/src/main/java/melody/offline/music/innertube/requests/MoPlaylistPage.kt b/app/src/main/java/melody/offline/music/innertube/requests/MoPlaylistPage.kt index e5738d6..c0698fe 100644 --- a/app/src/main/java/melody/offline/music/innertube/requests/MoPlaylistPage.kt +++ b/app/src/main/java/melody/offline/music/innertube/requests/MoPlaylistPage.kt @@ -15,19 +15,41 @@ suspend fun Innertube.moPlaylistPage(browseId: String): Result() - 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