Рефакторинг
This commit is contained in:
parent
7ba28fd5c3
commit
4c8c489742
1 changed files with 31 additions and 27 deletions
58
main.py
58
main.py
|
|
@ -37,7 +37,6 @@ PLAYLIST_RE = re.compile(r'([\w\-._]+)/playlists/(\d+)$')
|
|||
FILENAME_CLEAR_RE = re.compile(r'[^\w\-\'() ]+')
|
||||
|
||||
TITLE_TEMPLATE = '{title} ({version})'
|
||||
TRACK_URL_TEMPLATE = 'https://music.yandex.ru/album/{album_id}/track/{track_id}'
|
||||
|
||||
logger = logging.getLogger('yandex-music-downloader')
|
||||
|
||||
|
|
@ -89,24 +88,6 @@ class FullArtistInfo(BasicArtistInfo):
|
|||
return cls(**base.__dict__, cover_info=cover_info, albums=albums)
|
||||
|
||||
|
||||
def parse_artists(data: list) -> list[BasicArtistInfo]:
|
||||
artists = []
|
||||
for artist in data:
|
||||
artists.append(artist)
|
||||
if decomposed := artist.get('decomposed'):
|
||||
for d_artist in decomposed:
|
||||
if isinstance(d_artist, dict):
|
||||
artists.append(d_artist)
|
||||
return [BasicArtistInfo.from_json(a) for a in artists]
|
||||
|
||||
|
||||
def parse_title(data: dict) -> str:
|
||||
title = data['title']
|
||||
if version := data.get('version'):
|
||||
title = TITLE_TEMPLATE.format(title=title, version=version)
|
||||
return title
|
||||
|
||||
|
||||
@dataclass
|
||||
class BasicAlbumInfo:
|
||||
id: str
|
||||
|
|
@ -176,6 +157,10 @@ class BasicTrackInfo:
|
|||
has_lyrics=has_lyrics,
|
||||
cover_info=cover_info)
|
||||
|
||||
@property
|
||||
def url(self) -> str:
|
||||
return f'https://music.yandex.ru/album/{self.album.id}/track/{self.id}'
|
||||
|
||||
|
||||
@dataclass
|
||||
class FullTrackInfo(BasicTrackInfo):
|
||||
|
|
@ -202,6 +187,24 @@ class FullAlbumInfo(BasicAlbumInfo):
|
|||
return cls(**base.__dict__, tracks=tracks)
|
||||
|
||||
|
||||
def parse_artists(data: list) -> list[BasicArtistInfo]:
|
||||
artists = []
|
||||
for artist in data:
|
||||
artists.append(artist)
|
||||
if decomposed := artist.get('decomposed'):
|
||||
for d_artist in decomposed:
|
||||
if isinstance(d_artist, dict):
|
||||
artists.append(d_artist)
|
||||
return [BasicArtistInfo.from_json(a) for a in artists]
|
||||
|
||||
|
||||
def parse_title(data: dict) -> str:
|
||||
title = data['title']
|
||||
if version := data.get('version'):
|
||||
title = TITLE_TEMPLATE.format(title=title, version=version)
|
||||
return title
|
||||
|
||||
|
||||
def get_track_download_url(session: Session, track: BasicTrackInfo,
|
||||
hq: bool) -> str:
|
||||
resp = session.get('https://music.yandex.ru/api/v2.1/handlers/track'
|
||||
|
|
@ -266,16 +269,18 @@ def get_playlist(session: Session,
|
|||
def prepare_track_path(path: Path, prepare_path: bool,
|
||||
track: BasicTrackInfo) -> Path:
|
||||
path_str = str(path)
|
||||
album = track.album
|
||||
artist = album.artists[0]
|
||||
repl_dict = {
|
||||
'#album-artist': track.album.artists[0].name,
|
||||
'#artist-id': track.artists[0].id,
|
||||
'#album-id': track.album.id,
|
||||
'#album-artist': album.artists[0].name,
|
||||
'#artist-id': artist.name,
|
||||
'#album-id': album.id,
|
||||
'#track-id': track.id,
|
||||
'#number': track.number,
|
||||
'#artist': track.artists[0].name,
|
||||
'#artist': artist.name,
|
||||
'#title': track.title,
|
||||
'#album': track.album.title,
|
||||
'#year': track.album.year
|
||||
'#album': album.title,
|
||||
'#year': album.year
|
||||
}
|
||||
for placeholder, replacement in repl_dict.items():
|
||||
replacement = str(replacement)
|
||||
|
|
@ -306,8 +311,7 @@ def set_id3_tags(path: Path, track: BasicTrackInfo, lyrics: Optional[str],
|
|||
tag.disc_num = track.disc_number
|
||||
tag.release_date = tag.original_release_date = release_date
|
||||
tag.encoded_by = ENCODED_BY
|
||||
tag.audio_file_url = TRACK_URL_TEMPLATE.format(album_id=track.album.id,
|
||||
track_id=track.id)
|
||||
tag.audio_file_url = track.url
|
||||
|
||||
if lyrics is not None:
|
||||
tag.lyrics.set(lyrics)
|
||||
|
|
|
|||
Loading…
Reference in a new issue