Music_Player3/MusicPlayer/MP/MPPositive/Models/JsonStructs(js文件结构)/MPPositive_JsonPlayer.swift
2024-05-29 13:20:07 +08:00

128 lines
5.0 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.

//
// MPPositive_JsonPlayer.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/4/30.
//
import Foundation
///
struct JsonPlayer: Codable {
///
let streamingData:StreamingData?
////
let videoDetails:VideoDetails?
enum CodingKeys: String, CodingKey {
case streamingData = "streamingData"
case videoDetails = "videoDetails"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
streamingData = try values.decodeIfPresent(StreamingData.self, forKey: .streamingData)
videoDetails = try values.decodeIfPresent(VideoDetails.self, forKey: .videoDetails)
}
//MARK: -
struct StreamingData: Codable {
///访
let expiresInSeconds:String?
///
let formats:[Format]?
///
let adaptiveFormats:[Format]?
enum CodingKeys: String, CodingKey {
case expiresInSeconds = "expiresInSeconds"
case formats = "formats"
case adaptiveFormats = "adaptiveFormats"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
expiresInSeconds = try values.decodeIfPresent(String.self, forKey: .expiresInSeconds)
formats = try values.decodeIfPresent([Format].self, forKey: .formats)
adaptiveFormats = try values.decodeIfPresent([Format].self, forKey: .adaptiveFormats)
}
///
struct Format: Codable {
///
let itag: Int?
///
let bitrate:Float?
///
let mimeType:String?
///
let qualityLabel:String?
///
let signatureCipher:String?
///
let approxDurationMs:String?
enum CodingKeys: String, CodingKey {
case itag = "itag"
case bitrate = "bitrate"
case mimeType = "mimeType"
case qualityLabel = "qualityLabel"
case signatureCipher = "signatureCipher"
case approxDurationMs = "approxDurationMs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
itag = try values.decodeIfPresent(Int.self, forKey: .itag)
bitrate = try values.decodeIfPresent(Float.self, forKey: .bitrate)
mimeType = try values.decodeIfPresent(String.self, forKey: .mimeType)
qualityLabel = try values.decodeIfPresent(String.self, forKey: .qualityLabel)
approxDurationMs = try values.decodeIfPresent(String.self, forKey: .approxDurationMs)
signatureCipher = try values.decodeIfPresent(String.self, forKey: .signatureCipher)
}
}
}
//MARK: - /
struct VideoDetails: Codable {
////videoId
let videoId:String?
///
let title:String?
///
let thumbnail:Thumbnail?
///
let author:String?
enum CodingKeys: String, CodingKey {
case videoId = "videoId"
case title = "title"
case thumbnail = "thumbnail"
case author = "author"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
videoId = try values.decodeIfPresent(String.self, forKey: .videoId)
title = try values.decodeIfPresent(String.self, forKey: .title)
thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
author = try values.decodeIfPresent(String.self, forKey: .author)
}
///
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)
}
}
}
}
}