Обработка отсутствия информации об альбоме (#11)
This commit is contained in:
parent
4146f207bc
commit
9e81bdbb81
1 changed files with 21 additions and 17 deletions
38
main.py
38
main.py
|
|
@ -32,19 +32,20 @@ FILENAME_CLEAR_RE = re.compile(r'[^\w\-\'() ]+')
|
||||||
|
|
||||||
TITLE_FMT = '%(title)s (%(version)s)'
|
TITLE_FMT = '%(title)s (%(version)s)'
|
||||||
|
|
||||||
|
@dataclass
|
||||||
class CoverInfo:
|
class CoverInfo:
|
||||||
cover_url_template: Optional[str]
|
cover_url_template: Optional[str]
|
||||||
|
|
||||||
def __init__(self, json_data: dict):
|
|
||||||
og_image = json_data.get('ogImage')
|
|
||||||
if og_image is not None:
|
|
||||||
self.cover_url_template = 'https://' + og_image
|
|
||||||
|
|
||||||
def cover_url(self, resolution: int) -> Optional[str]:
|
def cover_url(self, resolution: int) -> Optional[str]:
|
||||||
if self.cover_url_template is not None:
|
if self.cover_url_template is not None:
|
||||||
return self.cover_url_template.replace('%%', f'{resolution}x{resolution}')
|
return self.cover_url_template.replace('%%', f'{resolution}x{resolution}')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_json(data: dict):
|
||||||
|
if og_image := data.get('ogImage'):
|
||||||
|
return CoverInfo('https://' + og_image)
|
||||||
|
return CoverInfo(None)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class PlaylistId:
|
class PlaylistId:
|
||||||
|
|
@ -85,8 +86,7 @@ class BasicAlbumInfo:
|
||||||
return None
|
return None
|
||||||
artists = parse_artists(data['artists'])
|
artists = parse_artists(data['artists'])
|
||||||
title = parse_title(data)
|
title = parse_title(data)
|
||||||
release_date = data.get('releaseDate')
|
if release_date := data.get('releaseDate'):
|
||||||
if release_date is not None:
|
|
||||||
release_date = dt.datetime.fromisoformat(release_date)
|
release_date = dt.datetime.fromisoformat(release_date)
|
||||||
return BasicAlbumInfo(id=data['id'], title=title, year=data.get('year'),
|
return BasicAlbumInfo(id=data['id'], title=title, year=data.get('year'),
|
||||||
artists=artists, release_date=release_date)
|
artists=artists, release_date=release_date)
|
||||||
|
|
@ -108,19 +108,23 @@ class BasicTrackInfo:
|
||||||
def from_json(data: dict):
|
def from_json(data: dict):
|
||||||
if not data['available']:
|
if not data['available']:
|
||||||
return None
|
return None
|
||||||
|
track_id = str(data['id'])
|
||||||
title = parse_title(data)
|
title = parse_title(data)
|
||||||
album_data = data['albums'][0]
|
albums_data = data['albums']
|
||||||
artists = parse_artists(data['artists'])
|
artists = parse_artists(data['artists'])
|
||||||
track_position = album_data.get('trackPosition')
|
track_position = {'index': 1, 'volume': 1}
|
||||||
if track_position is None:
|
if len(albums_data) != 0:
|
||||||
logging.warning('%s - %s не содержит информацию о позиции трека', artists[0], title)
|
album_data = data['albums'][0]
|
||||||
track_position = {'index': 1, 'volume': 1}
|
album = BasicAlbumInfo.from_json(album_data)
|
||||||
album = BasicAlbumInfo.from_json(album_data)
|
track_position = album_data.get('trackPosition', track_position)
|
||||||
|
else:
|
||||||
|
album = BasicAlbumInfo(id=track_id, title=title, release_date=None,
|
||||||
|
year=None, artists=artists)
|
||||||
if album is None:
|
if album is None:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
cover_info = CoverInfo(data)
|
cover_info = CoverInfo.from_json(data)
|
||||||
has_lyrics = data['lyricsInfo']['hasAvailableTextLyrics']
|
has_lyrics = data['lyricsInfo']['hasAvailableTextLyrics']
|
||||||
return BasicTrackInfo(title=title, id=str(data['id']), real_id=data['realId'],
|
return BasicTrackInfo(title=title, id=track_id, real_id=data['realId'],
|
||||||
number=track_position['index'], disc_number=track_position['volume'],
|
number=track_position['index'], disc_number=track_position['volume'],
|
||||||
artists=artists, album=album, has_lyrics=has_lyrics, cover_info=cover_info)
|
artists=artists, album=album, has_lyrics=has_lyrics, cover_info=cover_info)
|
||||||
|
|
||||||
|
|
@ -162,7 +166,7 @@ class ArtistInfo:
|
||||||
artist = data['artist']
|
artist = data['artist']
|
||||||
albums = map(BasicAlbumInfo.from_json, data.get('albums', []))
|
albums = map(BasicAlbumInfo.from_json, data.get('albums', []))
|
||||||
albums = [a for a in albums if a is not None]
|
albums = [a for a in albums if a is not None]
|
||||||
cover_info = CoverInfo(data)
|
cover_info = CoverInfo.from_json(data)
|
||||||
return ArtistInfo(id=str(artist['id']), name=artist['name'],
|
return ArtistInfo(id=str(artist['id']), name=artist['name'],
|
||||||
cover_info=cover_info, albums=albums)
|
cover_info=cover_info, albums=albums)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue