mirror of
https://github.com/zhaarey/AppleMusicDecrypt.git
synced 2025-10-23 15:11:06 +00:00
fix: validation error when missing some fields of metadata
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from src.api import get_cover
|
||||
@@ -6,27 +8,29 @@ from src.utils import ttml_convent_to_lrc
|
||||
|
||||
|
||||
class SongMetadata(BaseModel):
|
||||
title: str
|
||||
artist: str
|
||||
album_artist: str
|
||||
album: str
|
||||
composer: str
|
||||
genre: str
|
||||
created: str
|
||||
track: str
|
||||
tracknum: int
|
||||
disk: int
|
||||
lyrics: str
|
||||
title: Optional[str] = None
|
||||
artist: Optional[str] = None
|
||||
album_artist: Optional[str] = None
|
||||
album: Optional[str] = None
|
||||
composer: Optional[str] = None
|
||||
genre: Optional[str] = None
|
||||
created: Optional[str] = None
|
||||
track: Optional[str] = None
|
||||
tracknum: Optional[int] = None
|
||||
disk: Optional[int] = None
|
||||
lyrics: Optional[str] = None
|
||||
cover: bytes = None
|
||||
cover_url: str
|
||||
copyright: str
|
||||
record_company: str
|
||||
upc: str
|
||||
isrc: str
|
||||
cover_url: Optional[str] = None
|
||||
copyright: Optional[str] = None
|
||||
record_company: Optional[str] = None
|
||||
upc: Optional[str] = None
|
||||
isrc: Optional[str] = None
|
||||
|
||||
def to_itags_params(self, embed_metadata: list[str], cover_format: str):
|
||||
tags = []
|
||||
for key, value in self.model_dump().items():
|
||||
if not value:
|
||||
continue
|
||||
if key in embed_metadata and value:
|
||||
if key == "cover":
|
||||
continue
|
||||
|
||||
@@ -1,106 +1,106 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class Artwork(BaseModel):
|
||||
width: int
|
||||
url: str
|
||||
height: int
|
||||
textColor3: str
|
||||
textColor2: str
|
||||
textColor4: str
|
||||
textColor1: str
|
||||
bgColor: str
|
||||
hasP3: bool
|
||||
width: Optional[int] = None
|
||||
url: Optional[str] = None
|
||||
height: Optional[int] = None
|
||||
textColor3: Optional[str] = None
|
||||
textColor2: Optional[str] = None
|
||||
textColor4: Optional[str] = None
|
||||
textColor1: Optional[str] = None
|
||||
bgColor: Optional[str] = None
|
||||
hasP3: Optional[bool] = None
|
||||
|
||||
|
||||
class PlayParams(BaseModel):
|
||||
id: str
|
||||
kind: str
|
||||
id: Optional[str] = None
|
||||
kind: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes(BaseModel):
|
||||
copyright: str
|
||||
genreNames: List[str]
|
||||
releaseDate: str
|
||||
upc: str
|
||||
isMasteredForItunes: bool
|
||||
copyright: Optional[str] = None
|
||||
genreNames: List[Optional[str]] = None
|
||||
releaseDate: Optional[str] = None
|
||||
upc: Optional[str] = None
|
||||
isMasteredForItunes: Optional[bool] = None
|
||||
artwork: Artwork
|
||||
url: str
|
||||
url: Optional[str] = None
|
||||
playParams: PlayParams
|
||||
recordLabel: str
|
||||
isCompilation: bool
|
||||
trackCount: int
|
||||
isPrerelease: bool
|
||||
audioTraits: List[str]
|
||||
isSingle: bool
|
||||
name: str
|
||||
artistName: str
|
||||
isComplete: bool
|
||||
recordLabel: Optional[str] = None
|
||||
isCompilation: Optional[bool] = None
|
||||
trackCount: Optional[int] = None
|
||||
isPrerelease: Optional[bool] = None
|
||||
audioTraits: List[Optional[str]] = None
|
||||
isSingle: Optional[bool] = None
|
||||
name: Optional[str] = None
|
||||
artistName: Optional[str] = None
|
||||
isComplete: Optional[bool] = None
|
||||
|
||||
|
||||
class Artwork1(BaseModel):
|
||||
width: int
|
||||
url: str
|
||||
height: int
|
||||
textColor3: str
|
||||
textColor2: str
|
||||
textColor4: str
|
||||
textColor1: str
|
||||
bgColor: str
|
||||
hasP3: bool
|
||||
width: Optional[int] = None
|
||||
url: Optional[str] = None
|
||||
height: Optional[int] = None
|
||||
textColor3: Optional[str] = None
|
||||
textColor2: Optional[str] = None
|
||||
textColor4: Optional[str] = None
|
||||
textColor1: Optional[str] = None
|
||||
bgColor: Optional[str] = None
|
||||
hasP3: Optional[bool] = None
|
||||
|
||||
|
||||
class PlayParams1(BaseModel):
|
||||
id: str
|
||||
kind: str
|
||||
id: Optional[str] = None
|
||||
kind: Optional[str] = None
|
||||
|
||||
|
||||
class Preview(BaseModel):
|
||||
url: str
|
||||
url: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes1(BaseModel):
|
||||
hasTimeSyncedLyrics: bool
|
||||
albumName: str
|
||||
genreNames: List[str]
|
||||
trackNumber: int
|
||||
durationInMillis: int
|
||||
releaseDate: str
|
||||
isVocalAttenuationAllowed: bool
|
||||
isMasteredForItunes: bool
|
||||
isrc: str
|
||||
hasTimeSyncedLyrics: Optional[bool] = None
|
||||
albumName: Optional[str] = None
|
||||
genreNames: List[Optional[str]] = None
|
||||
trackNumber: Optional[int] = None
|
||||
durationInMillis: Optional[int] = None
|
||||
releaseDate: Optional[str] = None
|
||||
isVocalAttenuationAllowed: Optional[bool] = None
|
||||
isMasteredForItunes: Optional[bool] = None
|
||||
isrc: Optional[str] = None
|
||||
artwork: Artwork1
|
||||
composerName: str
|
||||
audioLocale: str
|
||||
composerName: Optional[str] = None
|
||||
audioLocale: Optional[str] = None
|
||||
playParams: PlayParams1
|
||||
url: str
|
||||
discNumber: int
|
||||
hasCredits: bool
|
||||
isAppleDigitalMaster: bool
|
||||
hasLyrics: bool
|
||||
audioTraits: List[str]
|
||||
name: str
|
||||
url: Optional[str] = None
|
||||
discNumber: Optional[int] = None
|
||||
hasCredits: Optional[bool] = None
|
||||
isAppleDigitalMaster: Optional[bool] = None
|
||||
hasLyrics: Optional[bool] = None
|
||||
audioTraits: List[Optional[str]] = None
|
||||
name: Optional[str] = None
|
||||
previews: List[Preview]
|
||||
artistName: str
|
||||
artistName: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes2(BaseModel):
|
||||
name: str
|
||||
name: Optional[str] = None
|
||||
|
||||
|
||||
class Datum2(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes2
|
||||
|
||||
|
||||
class Artists(BaseModel):
|
||||
href: str
|
||||
href: Optional[str] = None
|
||||
data: List[Datum2]
|
||||
|
||||
|
||||
@@ -109,36 +109,36 @@ class Relationships1(BaseModel):
|
||||
|
||||
|
||||
class Datum1(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes1
|
||||
relationships: Relationships1
|
||||
|
||||
|
||||
class Tracks(BaseModel):
|
||||
href: str
|
||||
href: Optional[str] = None
|
||||
data: List[Datum1]
|
||||
|
||||
|
||||
class Attributes3(BaseModel):
|
||||
name: str
|
||||
name: Optional[str] = None
|
||||
|
||||
|
||||
class Datum3(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes3
|
||||
|
||||
|
||||
class Artists1(BaseModel):
|
||||
href: str
|
||||
href: Optional[str] = None
|
||||
data: List[Datum3]
|
||||
|
||||
|
||||
class RecordLabels(BaseModel):
|
||||
href: str
|
||||
href: Optional[str] = None
|
||||
data: List
|
||||
|
||||
|
||||
@@ -149,9 +149,9 @@ class Relationships(BaseModel):
|
||||
|
||||
|
||||
class Datum(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes
|
||||
relationships: Relationships
|
||||
|
||||
|
||||
@@ -6,110 +6,110 @@ from pydantic import BaseModel
|
||||
|
||||
|
||||
class Description(BaseModel):
|
||||
standard: str
|
||||
short: str
|
||||
standard: Optional[str] = None
|
||||
short: Optional[str] = None
|
||||
|
||||
|
||||
class Artwork(BaseModel):
|
||||
width: int
|
||||
url: str
|
||||
height: int
|
||||
textColor3: str
|
||||
textColor2: str
|
||||
textColor4: str
|
||||
textColor1: str
|
||||
bgColor: str
|
||||
hasP3: bool
|
||||
width: Optional[int] = None
|
||||
url: Optional[str] = None
|
||||
height: Optional[int] = None
|
||||
textColor3: Optional[str] = None
|
||||
textColor2: Optional[str] = None
|
||||
textColor4: Optional[str] = None
|
||||
textColor1: Optional[str] = None
|
||||
bgColor: Optional[str] = None
|
||||
hasP3: Optional[bool] = None
|
||||
|
||||
|
||||
class PlayParams(BaseModel):
|
||||
id: str
|
||||
kind: str
|
||||
versionHash: str
|
||||
id: Optional[str] = None
|
||||
kind: Optional[str] = None
|
||||
versionHash: Optional[str] = None
|
||||
|
||||
|
||||
class EditorialNotes(BaseModel):
|
||||
name: str
|
||||
standard: str
|
||||
short: str
|
||||
name: Optional[str] = None
|
||||
standard: Optional[str] = None
|
||||
short: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes(BaseModel):
|
||||
lastModifiedDate: str
|
||||
supportsSing: bool
|
||||
lastModifiedDate: Optional[str] = None
|
||||
supportsSing: Optional[bool] = None
|
||||
description: Description
|
||||
artwork: Artwork
|
||||
playParams: PlayParams
|
||||
url: str
|
||||
hasCollaboration: bool
|
||||
curatorName: str
|
||||
url: Optional[str] = None
|
||||
hasCollaboration: Optional[bool] = None
|
||||
curatorName: Optional[str] = None
|
||||
audioTraits: List
|
||||
name: str
|
||||
isChart: bool
|
||||
playlistType: str
|
||||
name: Optional[str] = None
|
||||
isChart: Optional[bool] = None
|
||||
playlistType: Optional[str] = None
|
||||
editorialNotes: EditorialNotes
|
||||
artistName: Optional[str] = None
|
||||
|
||||
|
||||
class Artwork1(BaseModel):
|
||||
width: int
|
||||
url: str
|
||||
height: int
|
||||
textColor3: str
|
||||
textColor2: str
|
||||
textColor4: str
|
||||
textColor1: str
|
||||
bgColor: str
|
||||
hasP3: bool
|
||||
width: Optional[int] = None
|
||||
url: Optional[str] = None
|
||||
height: Optional[int] = None
|
||||
textColor3: Optional[str] = None
|
||||
textColor2: Optional[str] = None
|
||||
textColor4: Optional[str] = None
|
||||
textColor1: Optional[str] = None
|
||||
bgColor: Optional[str] = None
|
||||
hasP3: Optional[bool] = None
|
||||
|
||||
|
||||
class PlayParams1(BaseModel):
|
||||
id: str
|
||||
kind: str
|
||||
id: Optional[str] = None
|
||||
kind: Optional[str] = None
|
||||
|
||||
|
||||
class Preview(BaseModel):
|
||||
url: str
|
||||
url: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes1(BaseModel):
|
||||
albumName: str
|
||||
hasTimeSyncedLyrics: bool
|
||||
genreNames: List[str]
|
||||
trackNumber: int
|
||||
releaseDate: str
|
||||
durationInMillis: int
|
||||
isVocalAttenuationAllowed: bool
|
||||
isMasteredForItunes: bool
|
||||
isrc: str
|
||||
albumName: Optional[str] = None
|
||||
hasTimeSyncedLyrics: Optional[bool] = None
|
||||
genreNames: List[Optional[str]] = None
|
||||
trackNumber: Optional[int] = None
|
||||
releaseDate: Optional[str] = None
|
||||
durationInMillis: Optional[int] = None
|
||||
isVocalAttenuationAllowed: Optional[bool] = None
|
||||
isMasteredForItunes: Optional[bool] = None
|
||||
isrc: Optional[str] = None
|
||||
artwork: Artwork1
|
||||
composerName: str
|
||||
audioLocale: str
|
||||
url: str
|
||||
composerName: Optional[str] = None
|
||||
audioLocale: Optional[str] = None
|
||||
url: Optional[str] = None
|
||||
playParams: PlayParams1
|
||||
discNumber: int
|
||||
hasCredits: bool
|
||||
hasLyrics: bool
|
||||
isAppleDigitalMaster: bool
|
||||
audioTraits: List[str]
|
||||
name: str
|
||||
discNumber: Optional[int] = None
|
||||
hasCredits: Optional[bool] = None
|
||||
hasLyrics: Optional[bool] = None
|
||||
isAppleDigitalMaster: Optional[bool] = None
|
||||
audioTraits: List[Optional[str]] = None
|
||||
name: Optional[str] = None
|
||||
previews: List[Preview]
|
||||
artistName: str
|
||||
artistName: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes2(BaseModel):
|
||||
name: str
|
||||
name: Optional[str] = None
|
||||
|
||||
|
||||
class Datum2(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes2
|
||||
|
||||
|
||||
class Artists(BaseModel):
|
||||
href: str
|
||||
href: Optional[str] = None
|
||||
data: List[Datum2]
|
||||
|
||||
|
||||
@@ -118,16 +118,16 @@ class Relationships1(BaseModel):
|
||||
|
||||
|
||||
class Datum1(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes1
|
||||
relationships: Relationships1
|
||||
|
||||
|
||||
class Tracks(BaseModel):
|
||||
href: str
|
||||
next: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
next: Optional[Optional[str]] = None
|
||||
data: List[Datum1]
|
||||
|
||||
|
||||
@@ -136,9 +136,9 @@ class Relationships(BaseModel):
|
||||
|
||||
|
||||
class Datum(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes
|
||||
relationships: Relationships
|
||||
|
||||
|
||||
@@ -1,122 +1,122 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class Artwork(BaseModel):
|
||||
width: int
|
||||
url: str
|
||||
height: int
|
||||
textColor3: str
|
||||
textColor2: str
|
||||
textColor4: str
|
||||
textColor1: str
|
||||
bgColor: str
|
||||
hasP3: bool
|
||||
width: Optional[int] = None
|
||||
url: Optional[str] = None
|
||||
height: Optional[int] = None
|
||||
textColor3: Optional[str] = None
|
||||
textColor2: Optional[str] = None
|
||||
textColor4: Optional[str] = None
|
||||
textColor1: Optional[str] = None
|
||||
bgColor: Optional[str] = None
|
||||
hasP3: Optional[bool] = None
|
||||
|
||||
|
||||
class PlayParams(BaseModel):
|
||||
id: str
|
||||
kind: str
|
||||
id: Optional[str] = None
|
||||
kind: Optional[str] = None
|
||||
|
||||
|
||||
class Preview(BaseModel):
|
||||
url: str
|
||||
url: Optional[str] = None
|
||||
|
||||
|
||||
class ExtendedAssetUrls(BaseModel):
|
||||
plus: str
|
||||
lightweight: str
|
||||
superLightweight: str
|
||||
lightweightPlus: str
|
||||
enhancedHls: str
|
||||
plus: Optional[str] = None
|
||||
lightweight: Optional[str] = None
|
||||
superLightweight: Optional[str] = None
|
||||
lightweightPlus: Optional[str] = None
|
||||
enhancedHls: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes(BaseModel):
|
||||
hasTimeSyncedLyrics: bool
|
||||
albumName: str
|
||||
genreNames: List[str]
|
||||
trackNumber: int
|
||||
durationInMillis: int
|
||||
releaseDate: str
|
||||
isVocalAttenuationAllowed: bool
|
||||
isMasteredForItunes: bool
|
||||
isrc: str
|
||||
hasTimeSyncedLyrics: Optional[bool] = None
|
||||
albumName: Optional[str] = None
|
||||
genreNames: List[Optional[str]] = None
|
||||
trackNumber: Optional[int] = None
|
||||
durationInMillis: Optional[int] = None
|
||||
releaseDate: Optional[str] = None
|
||||
isVocalAttenuationAllowed: Optional[bool] = None
|
||||
isMasteredForItunes: Optional[bool] = None
|
||||
isrc: Optional[str] = None
|
||||
artwork: Artwork
|
||||
composerName: str
|
||||
audioLocale: str
|
||||
url: str
|
||||
composerName: Optional[str] = None
|
||||
audioLocale: Optional[str] = None
|
||||
url: Optional[str] = None
|
||||
playParams: PlayParams
|
||||
discNumber: int
|
||||
hasCredits: bool
|
||||
isAppleDigitalMaster: bool
|
||||
hasLyrics: bool
|
||||
audioTraits: List[str]
|
||||
name: str
|
||||
discNumber: Optional[int] = None
|
||||
hasCredits: Optional[bool] = None
|
||||
isAppleDigitalMaster: Optional[bool] = None
|
||||
hasLyrics: Optional[bool] = None
|
||||
audioTraits: List[Optional[str]] = None
|
||||
name: Optional[str] = None
|
||||
previews: List[Preview]
|
||||
artistName: str
|
||||
artistName: Optional[str] = None
|
||||
extendedAssetUrls: ExtendedAssetUrls
|
||||
|
||||
|
||||
class Artwork1(BaseModel):
|
||||
width: int
|
||||
url: str
|
||||
height: int
|
||||
textColor3: str
|
||||
textColor2: str
|
||||
textColor4: str
|
||||
textColor1: str
|
||||
bgColor: str
|
||||
hasP3: bool
|
||||
width: Optional[int] = None
|
||||
url: Optional[str] = None
|
||||
height: Optional[int] = None
|
||||
textColor3: Optional[str] = None
|
||||
textColor2: Optional[str] = None
|
||||
textColor4: Optional[str] = None
|
||||
textColor1: Optional[str] = None
|
||||
bgColor: Optional[str] = None
|
||||
hasP3: Optional[bool] = None
|
||||
|
||||
|
||||
class PlayParams1(BaseModel):
|
||||
id: str
|
||||
kind: str
|
||||
id: Optional[str] = None
|
||||
kind: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes1(BaseModel):
|
||||
copyright: str
|
||||
genreNames: List[str]
|
||||
releaseDate: str
|
||||
isMasteredForItunes: bool
|
||||
upc: str
|
||||
copyright: Optional[str] = None
|
||||
genreNames: List[Optional[str]] = None
|
||||
releaseDate: Optional[str] = None
|
||||
isMasteredForItunes: Optional[bool] = None
|
||||
upc: Optional[str] = None
|
||||
artwork: Artwork1
|
||||
url: str
|
||||
url: Optional[str] = None
|
||||
playParams: PlayParams1
|
||||
recordLabel: str
|
||||
isCompilation: bool
|
||||
trackCount: int
|
||||
isPrerelease: bool
|
||||
audioTraits: List[str]
|
||||
isSingle: bool
|
||||
name: str
|
||||
artistName: str
|
||||
isComplete: bool
|
||||
recordLabel: Optional[str] = None
|
||||
isCompilation: Optional[bool] = None
|
||||
trackCount: Optional[int] = None
|
||||
isPrerelease: Optional[bool] = None
|
||||
audioTraits: List[Optional[str]] = None
|
||||
isSingle: Optional[bool] = None
|
||||
name: Optional[str] = None
|
||||
artistName: Optional[str] = None
|
||||
isComplete: Optional[bool] = None
|
||||
|
||||
|
||||
class Datum1(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes1
|
||||
|
||||
|
||||
class Albums(BaseModel):
|
||||
href: str
|
||||
href: Optional[str] = None
|
||||
data: List[Datum1]
|
||||
|
||||
|
||||
class Datum2(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
|
||||
|
||||
class Artists(BaseModel):
|
||||
href: str
|
||||
href: Optional[str] = None
|
||||
data: List[Datum2]
|
||||
|
||||
|
||||
@@ -126,9 +126,9 @@ class Relationships(BaseModel):
|
||||
|
||||
|
||||
class Datum(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes
|
||||
relationships: Relationships
|
||||
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class PlayParams(BaseModel):
|
||||
id: str
|
||||
kind: str
|
||||
catalogId: str
|
||||
displayType: int
|
||||
id: Optional[str] = None
|
||||
kind: Optional[str] = None
|
||||
catalogId: Optional[str] = None
|
||||
displayType: Optional[int] = None
|
||||
|
||||
|
||||
class Attributes(BaseModel):
|
||||
ttml: str
|
||||
ttml: Optional[str] = None
|
||||
playParams: PlayParams
|
||||
|
||||
|
||||
class Datum(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
attributes: Attributes
|
||||
|
||||
|
||||
|
||||
@@ -6,55 +6,55 @@ from pydantic import BaseModel
|
||||
|
||||
|
||||
class Artwork(BaseModel):
|
||||
width: int
|
||||
url: str
|
||||
height: int
|
||||
textColor3: str
|
||||
textColor2: str
|
||||
textColor4: str
|
||||
textColor1: str
|
||||
bgColor: str
|
||||
hasP3: bool
|
||||
width: Optional[int] = None
|
||||
url: Optional[str] = None
|
||||
height: Optional[int] = None
|
||||
textColor3: Optional[str] = None
|
||||
textColor2: Optional[str] = None
|
||||
textColor4: Optional[str] = None
|
||||
textColor1: Optional[str] = None
|
||||
bgColor: Optional[str] = None
|
||||
hasP3: Optional[bool] = None
|
||||
|
||||
|
||||
class PlayParams(BaseModel):
|
||||
id: str
|
||||
kind: str
|
||||
id: Optional[str] = None
|
||||
kind: Optional[str] = None
|
||||
|
||||
|
||||
class Preview(BaseModel):
|
||||
url: str
|
||||
url: Optional[str] = None
|
||||
|
||||
|
||||
class Attributes(BaseModel):
|
||||
hasTimeSyncedLyrics: bool
|
||||
albumName: str
|
||||
genreNames: List[str]
|
||||
trackNumber: int
|
||||
releaseDate: str
|
||||
durationInMillis: int
|
||||
isVocalAttenuationAllowed: bool
|
||||
isMasteredForItunes: bool
|
||||
isrc: str
|
||||
hasTimeSyncedLyrics: Optional[bool] = None
|
||||
albumName: Optional[str] = None
|
||||
genreNames: List[Optional[str]] = None
|
||||
trackNumber: Optional[int] = None
|
||||
releaseDate: Optional[str] = None
|
||||
durationInMillis: Optional[int] = None
|
||||
isVocalAttenuationAllowed: Optional[bool] = None
|
||||
isMasteredForItunes: Optional[bool] = None
|
||||
isrc: Optional[str] = None
|
||||
artwork: Artwork
|
||||
composerName: Optional[str] = None
|
||||
audioLocale: str
|
||||
url: str
|
||||
audioLocale: Optional[str] = None
|
||||
url: Optional[str] = None
|
||||
playParams: PlayParams
|
||||
discNumber: int
|
||||
hasCredits: bool
|
||||
isAppleDigitalMaster: bool
|
||||
hasLyrics: bool
|
||||
audioTraits: List[str]
|
||||
name: str
|
||||
discNumber: Optional[int] = None
|
||||
hasCredits: Optional[bool] = None
|
||||
isAppleDigitalMaster: Optional[bool] = None
|
||||
hasLyrics: Optional[bool] = None
|
||||
audioTraits: Optional[str] = None
|
||||
name: Optional[str] = None
|
||||
previews: List[Preview]
|
||||
artistName: str
|
||||
artistName: Optional[str] = None
|
||||
|
||||
|
||||
class Datum(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
id: Optional[str] = None
|
||||
type: Optional[str] = None
|
||||
href: Optional[str] = None
|
||||
attributes: Attributes
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user