Music_Player3/relax.offline.mp3.music/MP/MPPositive/Models/JsonStructs(js文件结构)/MPPositive_JsonBrowse.swift
2024-11-18 21:29:29 +08:00

1163 lines
67 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Foundation
///IP
struct JsonIPInfo: Codable {
let ip:String?
let country:String?
enum CodingKeys: String, CodingKey {
case ip = "ip"
case country = "country"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
ip = try values.decodeIfPresent(String.self, forKey: .ip)
country = try values.decodeIfPresent(String.self, forKey: .country)
}
}
///
struct JsonBrowses: Codable {
///访
let responseContext:ResponseContext?
///_
let contents:Contents?
///_
let continuationContents:ContinuationContents?
enum CodingKeys: String, CodingKey {
case responseContext = "responseContext"
case contents = "contents"
case continuationContents = "continuationContents"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
responseContext = try values.decodeIfPresent(ResponseContext.self, forKey: .responseContext)
contents = try values.decodeIfPresent(Contents.self, forKey: .contents)
continuationContents = try values.decodeIfPresent(ContinuationContents.self, forKey: .continuationContents)
}
//MARK: -
///访
struct ResponseContext: Codable {
let visitorData:String?
enum CodingKeys: String, CodingKey {
case visitorData = "visitorData"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
visitorData = try values.decodeIfPresent(String.self, forKey: .visitorData)
}
}
///
struct Contents: Codable {
let singleColumnBrowseResultsRenderer : SingleColumnBrowseResultsRenderer?
enum CodingKeys: String, CodingKey {
case singleColumnBrowseResultsRenderer = "singleColumnBrowseResultsRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
singleColumnBrowseResultsRenderer = try values.decodeIfPresent(SingleColumnBrowseResultsRenderer.self, forKey: .singleColumnBrowseResultsRenderer)
}
struct SingleColumnBrowseResultsRenderer: Codable {
///1
let tabs : [Tab]?
enum CodingKeys: String, CodingKey {
case tabs = "tabs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
tabs = try values.decodeIfPresent([Tab].self, forKey: .tabs)
}
struct Tab : Codable {
let tabRenderer : TabRenderer?
enum CodingKeys: String, CodingKey {
case tabRenderer = "tabRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
tabRenderer = try values.decodeIfPresent(TabRenderer.self, forKey: .tabRenderer)
}
struct TabRenderer : Codable {
///contentctoke
let content : Content?
enum CodingKeys: String, CodingKey {
case content = "content"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
content = try values.decodeIfPresent(Content.self, forKey: .content)
}
struct Content : Codable {
let sectionListRenderer : SectionListRenderer?
enum CodingKeys: String, CodingKey {
case sectionListRenderer = "sectionListRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
sectionListRenderer = try values.decodeIfPresent(SectionListRenderer.self, forKey: .sectionListRenderer)
}
//MARK: -
struct SectionListRenderer : Codable {
///
let contents : [Content]?
///
let continuations : [Continuation]?
let trackingParams : String?
enum CodingKeys: String, CodingKey {
case contents = "contents"
case continuations = "continuations"
case trackingParams = "trackingParams"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
contents = try values.decodeIfPresent([Content].self, forKey: .contents)
continuations = try values.decodeIfPresent([Continuation].self, forKey: .continuations)
trackingParams = try values.decodeIfPresent(String.self, forKey: .trackingParams)
}
///
struct Content: Codable {
///
let musicCarouselShelfRenderer:MusicCarouselShelfRenderer?
///
let gridRenderer:GridRenderer?
enum CodingKeys: String, CodingKey {
case musicCarouselShelfRenderer = "musicCarouselShelfRenderer"
case gridRenderer = "gridRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicCarouselShelfRenderer = try values.decodeIfPresent(MusicCarouselShelfRenderer.self, forKey: .musicCarouselShelfRenderer)
gridRenderer = try values.decodeIfPresent(GridRenderer.self, forKey: .gridRenderer)
}
struct MusicCarouselShelfRenderer: Codable {
///
let header:Header?
///
let contents:[Content]?
enum CodingKeys: String, CodingKey {
case header = "header"
case contents = "contents"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
header = try values.decodeIfPresent(Header.self, forKey: .header)
contents = try values.decodeIfPresent([Content].self, forKey: .contents)
}
///
struct Header: Codable {
let musicCarouselShelfBasicHeaderRenderer:MusicCarouselShelfBasicHeaderRenderer?
enum CodingKeys: String, CodingKey {
case musicCarouselShelfBasicHeaderRenderer = "musicCarouselShelfBasicHeaderRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicCarouselShelfBasicHeaderRenderer = try values.decodeIfPresent(MusicCarouselShelfBasicHeaderRenderer.self, forKey: .musicCarouselShelfBasicHeaderRenderer)
}
struct MusicCarouselShelfBasicHeaderRenderer: Codable {
let title:Title?
enum CodingKeys: String, CodingKey {
case title = "title"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
title = try values.decodeIfPresent(Title.self, forKey: .title)
}
struct Title: Codable {
///0
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
//MARK: - //
struct Run: Codable {
///
let text:String?
enum CodingKeys: String, CodingKey {
case text = "text"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
}
}
}
}
}
///
struct Content: Codable {
///(ID)
let musicResponsiveListItemRenderer:RootMusicResponsiveListItemRenderer?
///(ID)
let musicTwoRowItemRenderer:RootMusicTwoRowItemRenderer?
enum CodingKeys: String, CodingKey {
case musicResponsiveListItemRenderer = "musicResponsiveListItemRenderer"
case musicTwoRowItemRenderer = "musicTwoRowItemRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicResponsiveListItemRenderer = try values.decodeIfPresent(RootMusicResponsiveListItemRenderer.self, forKey: .musicResponsiveListItemRenderer)
musicTwoRowItemRenderer = try values.decodeIfPresent(RootMusicTwoRowItemRenderer.self, forKey: .musicTwoRowItemRenderer)
}
}
}
struct GridRenderer: Codable {
let items:[Item]?
let header:Header?
enum CodingKeys: String, CodingKey {
case items = "items"
case header = "header"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
items = try values.decodeIfPresent([Item].self, forKey: .items)
header = try values.decodeIfPresent(Header.self, forKey: .header)
}
struct Item: Codable {
///(ID)
let musicResponsiveListItemRenderer:RootMusicResponsiveListItemRenderer?
///(ID)
let musicTwoRowItemRenderer:RootMusicTwoRowItemRenderer?
enum CodingKeys: String, CodingKey {
case musicResponsiveListItemRenderer = "musicResponsiveListItemRenderer"
case musicTwoRowItemRenderer = "musicTwoRowItemRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicResponsiveListItemRenderer = try values.decodeIfPresent(RootMusicResponsiveListItemRenderer.self, forKey: .musicResponsiveListItemRenderer)
musicTwoRowItemRenderer = try values.decodeIfPresent(RootMusicTwoRowItemRenderer.self, forKey: .musicTwoRowItemRenderer)
}
}
struct Header: Codable {
let gridHeaderRenderer:GridHeaderRenderer?
enum CodingKeys: String, CodingKey {
case gridHeaderRenderer = "gridHeaderRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
gridHeaderRenderer = try values.decodeIfPresent(GridHeaderRenderer.self, forKey: .gridHeaderRenderer)
}
struct GridHeaderRenderer: Codable {
let title:Title?
enum CodingKeys: String, CodingKey {
case title = "title"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
title = try values.decodeIfPresent(Title.self, forKey: .title)
}
struct Title: Codable {
///0
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
//MARK: - //
struct Run: Codable {
///
let text:String?
enum CodingKeys: String, CodingKey {
case text = "text"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
}
}
}
}
}
}
}
///
struct Continuation: Codable {
let nextContinuationData:NextContinuationData?
enum CodingKeys: String, CodingKey {
case nextContinuationData = "nextContinuationData"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
nextContinuationData = try values.decodeIfPresent(NextContinuationData.self, forKey: .nextContinuationData)
}
//MARK: -
struct NextContinuationData: Codable {
let continuation:String?
let clickTrackingParams:String?
enum CodingKeys: String, CodingKey {
case continuation = "continuation"
case clickTrackingParams = "clickTrackingParams"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
continuation = try values.decodeIfPresent(String.self, forKey: .continuation)
clickTrackingParams = try values.decodeIfPresent(String.self, forKey: .clickTrackingParams)
}
}
}
}
}
}
}
}
}
///
struct ContinuationContents: Codable {
let sectionListContinuation:SectionListContinuation?
enum CodingKeys: String, CodingKey {
case sectionListContinuation = "sectionListContinuation"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
sectionListContinuation = try values.decodeIfPresent(SectionListContinuation.self, forKey: .sectionListContinuation)
}
//MARK: -
struct SectionListContinuation : Codable {
///
let contents : [Content]?
///
let continuations : [Continuation]?
let trackingParams : String?
enum CodingKeys: String, CodingKey {
case contents = "contents"
case continuations = "continuations"
case trackingParams = "trackingParams"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
contents = try values.decodeIfPresent([Content].self, forKey: .contents)
continuations = try values.decodeIfPresent([Continuation].self, forKey: .continuations)
trackingParams = try values.decodeIfPresent(String.self, forKey: .trackingParams)
}
///
struct Content: Codable {
let musicCarouselShelfRenderer:MusicCarouselShelfRenderer?
enum CodingKeys: String, CodingKey {
case musicCarouselShelfRenderer = "musicCarouselShelfRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicCarouselShelfRenderer = try values.decodeIfPresent(MusicCarouselShelfRenderer.self, forKey: .musicCarouselShelfRenderer)
}
struct MusicCarouselShelfRenderer: Codable {
///
let header:Header?
///
let contents:[Content]?
enum CodingKeys: String, CodingKey {
case header = "header"
case contents = "contents"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
header = try values.decodeIfPresent(Header.self, forKey: .header)
contents = try values.decodeIfPresent([Content].self, forKey: .contents)
}
///
struct Header: Codable {
let musicCarouselShelfBasicHeaderRenderer:MusicCarouselShelfBasicHeaderRenderer?
enum CodingKeys: String, CodingKey {
case musicCarouselShelfBasicHeaderRenderer = "musicCarouselShelfBasicHeaderRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicCarouselShelfBasicHeaderRenderer = try values.decodeIfPresent(MusicCarouselShelfBasicHeaderRenderer.self, forKey: .musicCarouselShelfBasicHeaderRenderer)
}
struct MusicCarouselShelfBasicHeaderRenderer: Codable {
let title:Title?
enum CodingKeys: String, CodingKey {
case title = "title"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
title = try values.decodeIfPresent(Title.self, forKey: .title)
}
struct Title: Codable {
///0
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
//MARK: - //
struct Run: Codable {
///
let text:String?
///ID
let navigationEndpoint: NavigationEndpoint?
enum CodingKeys: String, CodingKey {
case text = "text"
case navigationEndpoint = "navigationEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
}
struct NavigationEndpoint: Codable {
let browseEndpoint:BrowseEndpoint?
enum CodingKeys: String, CodingKey {
case browseEndpoint = "browseEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
}
//MARK: -
struct BrowseEndpoint: Codable {
///ID//
let browseId:String?
/////
let params:String?
///
let browseEndpointContextSupportedConfigs:BrowseEndpointContextSupportedConfigs?
enum CodingKeys: String, CodingKey {
case browseId = "browseId"
case params = "params"
case browseEndpointContextSupportedConfigs = "browseEndpointContextSupportedConfigs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
params = try values.decodeIfPresent(String.self, forKey: .params)
browseEndpointContextSupportedConfigs = try values.decodeIfPresent(BrowseEndpointContextSupportedConfigs.self, forKey: .browseEndpointContextSupportedConfigs)
}
struct BrowseEndpointContextSupportedConfigs: Codable {
let browseEndpointContextMusicConfig:BrowseEndpointContextMusicConfig?
enum CodingKeys: String, CodingKey {
case browseEndpointContextMusicConfig = "browseEndpointContextMusicConfig"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpointContextMusicConfig = try values.decodeIfPresent(BrowseEndpointContextMusicConfig.self, forKey: .browseEndpointContextMusicConfig)
}
//MARK: - Browse //
struct BrowseEndpointContextMusicConfig: Codable {
let pageType:String?
enum CodingKeys: String, CodingKey {
case pageType = "pageType"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
pageType = try values.decodeIfPresent(String.self, forKey: .pageType)
}
}
}
}
}
}
}
}
}
///
struct Content: Codable {
///(ID)
let musicResponsiveListItemRenderer:RootMusicResponsiveListItemRenderer?
///(ID)
let musicTwoRowItemRenderer:RootMusicTwoRowItemRenderer?
enum CodingKeys: String, CodingKey {
case musicResponsiveListItemRenderer = "musicResponsiveListItemRenderer"
case musicTwoRowItemRenderer = "musicTwoRowItemRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicResponsiveListItemRenderer = try values.decodeIfPresent(RootMusicResponsiveListItemRenderer.self, forKey: .musicResponsiveListItemRenderer)
musicTwoRowItemRenderer = try values.decodeIfPresent(RootMusicTwoRowItemRenderer.self, forKey: .musicTwoRowItemRenderer)
}
}
}
}
///
struct Continuation: Codable {
let nextContinuationData:NextContinuationData?
enum CodingKeys: String, CodingKey {
case nextContinuationData = "nextContinuationData"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
nextContinuationData = try values.decodeIfPresent(NextContinuationData.self, forKey: .nextContinuationData)
}
//MARK: -
struct NextContinuationData: Codable {
let continuation:String?
let clickTrackingParams:String?
enum CodingKeys: String, CodingKey {
case continuation = "continuation"
case clickTrackingParams = "clickTrackingParams"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
continuation = try values.decodeIfPresent(String.self, forKey: .continuation)
clickTrackingParams = try values.decodeIfPresent(String.self, forKey: .clickTrackingParams)
}
}
}
}
}
}
//MARK: -
///(ID)playlistItemDatanavigationEndpoint/
struct RootMusicResponsiveListItemRenderer: Codable {
let trackingParams:String?
///
let thumbnail:Thumbnail?
///(0)
let flexColumns:[FlexColumn]?
////IDplaylistItemData/
let playlistItemData:PlaylistItemData?
///(navigationEndpoint)
let navigationEndpoint:NavigationEndpoint?
///playlistItemDataflexColumnsPlayListIDplayListId
let menu:Menu?
enum CodingKeys: String, CodingKey {
case trackingParams = "trackingParams"
case thumbnail = "thumbnail"
case flexColumns = "flexColumns"
case playlistItemData = "playlistItemData"
case navigationEndpoint = "navigationEndpoint"
case menu = "menu"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
trackingParams = try values.decodeIfPresent(String.self, forKey: .trackingParams)
thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
flexColumns = try values.decodeIfPresent([FlexColumn].self, forKey: .flexColumns)
playlistItemData = try values.decodeIfPresent(PlaylistItemData.self, forKey: .playlistItemData)
navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
menu = try values.decodeIfPresent(Menu.self, forKey: .menu)
}
//
struct Thumbnail: Codable {
let musicThumbnailRenderer:MusicThumbnailRenderer?
enum CodingKeys: String, CodingKey {
case musicThumbnailRenderer = "musicThumbnailRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicThumbnailRenderer = try values.decodeIfPresent(MusicThumbnailRenderer.self, forKey: .musicThumbnailRenderer)
}
struct MusicThumbnailRenderer: Codable {
let thumbnail:Thumbnail?
enum CodingKeys: String, CodingKey {
case thumbnail = "thumbnail"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
self.thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
}
struct Thumbnail: Codable {
///
let thumbnails:[Thumbnails]?
enum CodingKeys: String, CodingKey {
case thumbnails = "thumbnails"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
self.thumbnails = try values.decodeIfPresent([Thumbnails].self, forKey: .thumbnails)
}
//MARK: -
///
struct Thumbnails: Codable {
///
let url:String?
enum CodingKeys: String, CodingKey {
case url = "url"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
url = try values.decodeIfPresent(String.self, forKey: .url)
}
}
}
}
}
//
struct FlexColumn: Codable {
let musicResponsiveListItemFlexColumnRenderer:MusicResponsiveListItemFlexColumnRenderer?
enum CodingKeys: String, CodingKey {
case musicResponsiveListItemFlexColumnRenderer = "musicResponsiveListItemFlexColumnRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicResponsiveListItemFlexColumnRenderer = try values.decodeIfPresent(MusicResponsiveListItemFlexColumnRenderer.self, forKey: .musicResponsiveListItemFlexColumnRenderer)
}
struct MusicResponsiveListItemFlexColumnRenderer: Codable {
let text:Text?
enum CodingKeys: String, CodingKey {
case text = "text"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(Text.self, forKey: .text)
}
struct Text: Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
///
let text:String?
///
let navigationEndpoint:NavigationEndpoint?
enum CodingKeys: String, CodingKey {
case text = "text"
case navigationEndpoint = "navigationEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
}
//
struct NavigationEndpoint: Codable {
///
let clickTrackingParams:String?
///
let watchEndpoint:WatchEndpoint?
///
let browseEndpoint:BrowseEndpoint?
enum CodingKeys: String, CodingKey {
case clickTrackingParams = "clickTrackingParams"
case watchEndpoint = "watchEndpoint"
case browseEndpoint = "browseEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
clickTrackingParams = try values.decodeIfPresent(String.self, forKey: .clickTrackingParams)
watchEndpoint = try values.decodeIfPresent(WatchEndpoint.self, forKey: .watchEndpoint)
browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
}
//
struct WatchEndpoint: Codable {
///ID
let videoId:String?
///ID
let playlistId:String?
///
let watchEndpointMusicSupportedConfigs:WatchEndpointMusicSupportedConfigs?
enum CodingKeys: String, CodingKey {
case videoId = "videoId"
case playlistId = "playlistId"
case watchEndpointMusicSupportedConfigs = "watchEndpointMusicSupportedConfigs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
videoId = try values.decodeIfPresent(String.self, forKey: .videoId)
playlistId = try values.decodeIfPresent(String.self, forKey: .playlistId)
watchEndpointMusicSupportedConfigs = try values.decodeIfPresent(WatchEndpointMusicSupportedConfigs.self, forKey: .watchEndpointMusicSupportedConfigs)
}
struct WatchEndpointMusicSupportedConfigs: Codable {
let watchEndpointMusicConfig:WatchEndpointMusicConfig?
enum CodingKeys: String, CodingKey {
case watchEndpointMusicConfig = "watchEndpointMusicConfig"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
watchEndpointMusicConfig = try values.decodeIfPresent(WatchEndpointMusicConfig.self, forKey: .watchEndpointMusicConfig)
}
struct WatchEndpointMusicConfig: Codable {
///
let musicVideoType:String?
enum CodingKeys: String, CodingKey {
case musicVideoType = "musicVideoType"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicVideoType = try values.decodeIfPresent(String.self, forKey: .musicVideoType)
}
}
}
}
//
struct BrowseEndpoint: Codable {
let browseId:String?
let browseEndpointContextSupportedConfigs:BrowseEndpointContextSupportedConfigs?
enum CodingKeys: String, CodingKey {
case browseId = "browseId"
case browseEndpointContextSupportedConfigs = "browseEndpointContextSupportedConfigs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
browseEndpointContextSupportedConfigs = try values.decodeIfPresent(BrowseEndpointContextSupportedConfigs.self, forKey: .browseEndpointContextSupportedConfigs)
}
struct BrowseEndpointContextSupportedConfigs: Codable {
let browseEndpointContextMusicConfig:BrowseEndpointContextMusicConfig?
enum CodingKeys: String, CodingKey {
case browseEndpointContextMusicConfig = "browseEndpointContextMusicConfig"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpointContextMusicConfig = try values.decodeIfPresent(BrowseEndpointContextMusicConfig.self, forKey: .browseEndpointContextMusicConfig)
}
struct BrowseEndpointContextMusicConfig: Codable {
let pageType:String?
enum CodingKeys: String, CodingKey {
case pageType = "pageType"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
pageType = try values.decodeIfPresent(String.self, forKey: .pageType)
}
}
}
}
}
}
}
}
}
//
struct PlaylistItemData: Codable {
let videoId:String?
enum CodingKeys: String, CodingKey {
case videoId = "videoId"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
videoId = try values.decodeIfPresent(String.self, forKey: .videoId)
}
}
//
struct NavigationEndpoint: Codable {
let clickTrackingParams:String?
let browseEndpoint:BrowseEndpoint?
enum CodingKeys: String, CodingKey {
case clickTrackingParams = "clickTrackingParams"
case browseEndpoint = "browseEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
clickTrackingParams = try values.decodeIfPresent(String.self, forKey: .clickTrackingParams)
browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
}
struct BrowseEndpoint: Codable {
///ID
let browseId:String?
let browseEndpointContextSupportedConfigs:BrowseEndpointContextSupportedConfigs?
enum CodingKeys: String, CodingKey {
case browseId = "browseId"
case browseEndpointContextSupportedConfigs = "browseEndpointContextSupportedConfigs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
browseEndpointContextSupportedConfigs = try values.decodeIfPresent(BrowseEndpointContextSupportedConfigs.self, forKey: .browseEndpointContextSupportedConfigs)
}
struct BrowseEndpointContextSupportedConfigs: Codable {
let browseEndpointContextMusicConfig:BrowseEndpointContextMusicConfig?
enum CodingKeys: String, CodingKey {
case browseEndpointContextMusicConfig = "browseEndpointContextMusicConfig"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpointContextMusicConfig = try values.decodeIfPresent(BrowseEndpointContextMusicConfig.self, forKey: .browseEndpointContextMusicConfig)
}
struct BrowseEndpointContextMusicConfig: Codable {
///
let pageType:String?
enum CodingKeys: String, CodingKey {
case pageType = "pageType"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
pageType = try values.decodeIfPresent(String.self, forKey: .pageType)
}
}
}
}
}
//
struct Menu: Codable {
let menuRenderer:MenuRenderer?
enum CodingKeys: String, CodingKey {
case menuRenderer = "menuRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
menuRenderer = try values.decodeIfPresent(MenuRenderer.self, forKey: .menuRenderer)
}
struct MenuRenderer: Codable {
///
let items:[Item]?
enum CodingKeys: String, CodingKey {
case items = "items"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
items = try values.decodeIfPresent([Item].self, forKey: .items)
}
struct Item: Codable {
///watchEndpoint
let menuNavigationItemRenderer:MenuNavigationItemRenderer?
enum CodingKeys: String, CodingKey {
case menuNavigationItemRenderer = "menuNavigationItemRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
menuNavigationItemRenderer = try values.decodeIfPresent(MenuNavigationItemRenderer.self, forKey: .menuNavigationItemRenderer)
}
struct MenuNavigationItemRenderer: Codable {
///
let navigationEndpoint:NavigationEndpoint?
enum CodingKeys: String, CodingKey {
case navigationEndpoint = "navigationEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
}
//
struct NavigationEndpoint: Codable {
///
let watchEndpoint:WatchEndpoint?
enum CodingKeys: String, CodingKey {
case watchEndpoint = "watchEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
watchEndpoint = try values.decodeIfPresent(WatchEndpoint.self, forKey: .watchEndpoint)
}
//
struct WatchEndpoint: Codable {
///ID
let videoId:String?
///ID
let playlistId:String?
///
let watchEndpointMusicSupportedConfigs:WatchEndpointMusicSupportedConfigs?
enum CodingKeys: String, CodingKey {
case videoId = "videoId"
case playlistId = "playlistId"
case watchEndpointMusicSupportedConfigs = "watchEndpointMusicSupportedConfigs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
videoId = try values.decodeIfPresent(String.self, forKey: .videoId)
playlistId = try values.decodeIfPresent(String.self, forKey: .playlistId)
watchEndpointMusicSupportedConfigs = try values.decodeIfPresent(WatchEndpointMusicSupportedConfigs.self, forKey: .watchEndpointMusicSupportedConfigs)
}
struct WatchEndpointMusicSupportedConfigs: Codable {
let watchEndpointMusicConfig:WatchEndpointMusicConfig?
enum CodingKeys: String, CodingKey {
case watchEndpointMusicConfig = "watchEndpointMusicConfig"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
watchEndpointMusicConfig = try values.decodeIfPresent(WatchEndpointMusicConfig.self, forKey: .watchEndpointMusicConfig)
}
struct WatchEndpointMusicConfig: Codable {
///
let musicVideoType:String?
enum CodingKeys: String, CodingKey {
case musicVideoType = "musicVideoType"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicVideoType = try values.decodeIfPresent(String.self, forKey: .musicVideoType)
}
}
}
}
}
}
}
}
}
}
/////(ID)
struct RootMusicTwoRowItemRenderer: Codable {
///
let thumbnailRenderer:ThumbnailRenderer?
///
let title:Title?
///
let subtitle:Subtitle?
///iD
let navigationEndpoint:NavigationEndpoint?
enum CodingKeys: String, CodingKey {
case thumbnailRenderer = "thumbnailRenderer"
case title = "title"
case subtitle = "subtitle"
case navigationEndpoint = "navigationEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
thumbnailRenderer = try values.decodeIfPresent(ThumbnailRenderer.self, forKey: .thumbnailRenderer)
title = try values.decodeIfPresent(Title.self, forKey: .title)
subtitle = try values.decodeIfPresent(Subtitle.self, forKey: .subtitle)
navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
}
struct ThumbnailRenderer: Codable {
let musicThumbnailRenderer:MusicThumbnailRenderer?
enum CodingKeys: String, CodingKey {
case musicThumbnailRenderer = "musicThumbnailRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicThumbnailRenderer = try values.decodeIfPresent(MusicThumbnailRenderer.self, forKey: .musicThumbnailRenderer)
}
struct MusicThumbnailRenderer: Codable {
let thumbnail:Thumbnail?
enum CodingKeys: String, CodingKey {
case thumbnail = "thumbnail"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
}
struct Thumbnail: Codable {
let thumbnails:[Thumbnails]?
enum CodingKeys: String, CodingKey {
case thumbnails = "thumbnails"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
thumbnails = try values.decodeIfPresent([Thumbnails].self, forKey: .thumbnails)
}
struct Thumbnails: Codable {
let url:String?
enum CodingKeys: String, CodingKey {
case url = "url"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
url = try values.decodeIfPresent(String.self, forKey: .url)
}
}
}
}
}
struct Title: Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
let text:String?
enum CodingKeys: String, CodingKey {
case text = "text"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
}
}
}
struct Subtitle: Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
let text:String?
let navigationEndpoint:NavigationEndpoint?
enum CodingKeys: String, CodingKey {
case text = "text"
case navigationEndpoint = "navigationEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
}
struct NavigationEndpoint: Codable {
let browseEndpoint:BrowseEndpoint?
enum CodingKeys: String, CodingKey {
case browseEndpoint = "browseEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
}
struct BrowseEndpoint: Codable {
let browseId:String?
let browseEndpointContextSupportedConfigs:BrowseEndpointContextSupportedConfigs?
enum CodingKeys: String, CodingKey {
case browseId = "browseId"
case browseEndpointContextSupportedConfigs = "browseEndpointContextSupportedConfigs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
browseEndpointContextSupportedConfigs = try values.decodeIfPresent(BrowseEndpointContextSupportedConfigs.self, forKey: .browseEndpointContextSupportedConfigs)
}
struct BrowseEndpointContextSupportedConfigs: Codable {
let browseEndpointContextMusicConfig:BrowseEndpointContextMusicConfig?
enum CodingKeys: String, CodingKey {
case browseEndpointContextMusicConfig = "browseEndpointContextMusicConfig"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpointContextMusicConfig = try values.decodeIfPresent(BrowseEndpointContextMusicConfig.self, forKey: .browseEndpointContextMusicConfig)
}
struct BrowseEndpointContextMusicConfig: Codable {
let pageType:String?
enum CodingKeys: String, CodingKey {
case pageType = "pageType"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
pageType = try values.decodeIfPresent(String.self, forKey: .pageType)
}
}
}
}
}
}
}
struct NavigationEndpoint: Codable {
///
let clickTrackingParams:String?
////
let browseEndpoint:BrowseEndpoint?
///
let watchEndpoint:WatchEndpoint?
enum CodingKeys: String, CodingKey {
case clickTrackingParams = "clickTrackingParams"
case browseEndpoint = "browseEndpoint"
case watchEndpoint = "watchEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
clickTrackingParams = try values.decodeIfPresent(String.self, forKey: .clickTrackingParams)
browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
watchEndpoint = try values.decodeIfPresent(WatchEndpoint.self, forKey: .watchEndpoint)
}
struct BrowseEndpoint: Codable {
let browseId:String?
let params:String?
let browseEndpointContextSupportedConfigs:BrowseEndpointContextSupportedConfigs?
enum CodingKeys: String, CodingKey {
case browseId = "browseId"
case params = "params"
case browseEndpointContextSupportedConfigs = "browseEndpointContextSupportedConfigs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
params = try values.decodeIfPresent(String.self, forKey: .params)
browseEndpointContextSupportedConfigs = try values.decodeIfPresent(BrowseEndpointContextSupportedConfigs.self, forKey: .browseEndpointContextSupportedConfigs)
}
struct BrowseEndpointContextSupportedConfigs: Codable {
let browseEndpointContextMusicConfig:BrowseEndpointContextMusicConfig?
enum CodingKeys: String, CodingKey {
case browseEndpointContextMusicConfig = "browseEndpointContextMusicConfig"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpointContextMusicConfig = try values.decodeIfPresent(BrowseEndpointContextMusicConfig.self, forKey: .browseEndpointContextMusicConfig)
}
struct BrowseEndpointContextMusicConfig: Codable {
let pageType:String?
enum CodingKeys: String, CodingKey {
case pageType = "pageType"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
pageType = try values.decodeIfPresent(String.self, forKey: .pageType)
}
}
}
}
struct WatchEndpoint: Codable {
///ID
let videoId:String?
///ID
let playlistId:String?
///
let watchEndpointMusicSupportedConfigs:WatchEndpointMusicSupportedConfigs?
enum CodingKeys: String, CodingKey {
case videoId = "videoId"
case playlistId = "playlistId"
case watchEndpointMusicSupportedConfigs = "watchEndpointMusicSupportedConfigs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
videoId = try values.decodeIfPresent(String.self, forKey: .videoId)
playlistId = try values.decodeIfPresent(String.self, forKey: .playlistId)
watchEndpointMusicSupportedConfigs = try values.decodeIfPresent(WatchEndpointMusicSupportedConfigs.self, forKey: .watchEndpointMusicSupportedConfigs)
}
struct WatchEndpointMusicSupportedConfigs: Codable {
let watchEndpointMusicConfig:WatchEndpointMusicConfig?
enum CodingKeys: String, CodingKey {
case watchEndpointMusicConfig = "watchEndpointMusicConfig"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
watchEndpointMusicConfig = try values.decodeIfPresent(WatchEndpointMusicConfig.self, forKey: .watchEndpointMusicConfig)
}
struct WatchEndpointMusicConfig: Codable {
let musicVideoType:String?
enum CodingKeys: String, CodingKey {
case musicVideoType = "musicVideoType"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicVideoType = try values.decodeIfPresent(String.self, forKey: .musicVideoType)
}
}
}
}
}
}