Fixed TITLE_TEMPLATE, change some moments to f-string, and little code changes
This commit is contained in:
parent
21678a8608
commit
531c8ce8a2
1 changed files with 15 additions and 17 deletions
28
main.py
28
main.py
|
|
@ -31,7 +31,7 @@ PLAYLIST_RE = re.compile(r'([\w\-._]+)/playlists/(\d+)$')
|
||||||
|
|
||||||
FILENAME_CLEAR_RE = re.compile(r'[^\w\-\'() ]+')
|
FILENAME_CLEAR_RE = re.compile(r'[^\w\-\'() ]+')
|
||||||
|
|
||||||
TITLE_TEMPLATE = '{tile} ({version})'
|
TITLE_TEMPLATE = '{title} ({version})'
|
||||||
TRACK_URL_TEMPLATE = 'https://music.yandex.ru/album/{album_id}/track/{track_id}'
|
TRACK_URL_TEMPLATE = 'https://music.yandex.ru/album/{album_id}/track/{track_id}'
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -40,15 +40,16 @@ class CoverInfo:
|
||||||
cover_url_template: Optional[str]
|
cover_url_template: Optional[str]
|
||||||
|
|
||||||
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 None:
|
||||||
|
return
|
||||||
|
|
||||||
return self.cover_url_template.replace(
|
return self.cover_url_template.replace(
|
||||||
'%%', f'{resolution}x{resolution}')
|
'%%', f'{resolution}x{resolution}')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_json(cls, data: dict) -> 'CoverInfo':
|
def from_json(cls, data: dict) -> 'CoverInfo':
|
||||||
if og_image := data.get('ogImage'):
|
og_image = data.get("ogImage")
|
||||||
return cls('https://' + og_image)
|
return cls(f'https://{og_image}' if og_image is not None else None)
|
||||||
return cls(None)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
@ -112,7 +113,7 @@ class BasicAlbumInfo:
|
||||||
if data['metaType'] != 'music':
|
if data['metaType'] != 'music':
|
||||||
logging.info('"%s" пропущен т.к. не является музыкальным альбомом',
|
logging.info('"%s" пропущен т.к. не является музыкальным альбомом',
|
||||||
data['title'])
|
data['title'])
|
||||||
return None
|
return
|
||||||
artists = parse_artists(data['artists'])
|
artists = parse_artists(data['artists'])
|
||||||
title = parse_title(data)
|
title = parse_title(data)
|
||||||
if release_date := data.get('releaseDate'):
|
if release_date := data.get('releaseDate'):
|
||||||
|
|
@ -145,7 +146,7 @@ class BasicTrackInfo:
|
||||||
albums_data = data['albums']
|
albums_data = data['albums']
|
||||||
artists = parse_artists(data['artists'])
|
artists = parse_artists(data['artists'])
|
||||||
track_position = {'index': 1, 'volume': 1}
|
track_position = {'index': 1, 'volume': 1}
|
||||||
if len(albums_data) != 0:
|
if len(albums_data):
|
||||||
album_data = albums_data[0]
|
album_data = albums_data[0]
|
||||||
album = BasicAlbumInfo.from_json(album_data)
|
album = BasicAlbumInfo.from_json(album_data)
|
||||||
track_position = album_data.get('trackPosition', track_position)
|
track_position = album_data.get('trackPosition', track_position)
|
||||||
|
|
@ -210,8 +211,7 @@ def get_track_download_url(session: Session, track: BasicTrackInfo,
|
||||||
ts = url_info.find('ts').text
|
ts = url_info.find('ts').text
|
||||||
host = url_info.find('host').text
|
host = url_info.find('host').text
|
||||||
path_hash = hashlib.md5((MD5_SALT + path + s).encode()).hexdigest()
|
path_hash = hashlib.md5((MD5_SALT + path + s).encode()).hexdigest()
|
||||||
return 'https://%s/get-mp3/%s/%s/%s?track-id=%s' \
|
return f'https://{host}/get-mp3/{path_hash}/{ts}/{path}?track-id={track.id}'
|
||||||
% (host, path_hash, ts, path, track.id)
|
|
||||||
|
|
||||||
|
|
||||||
def download_file(session: Session, url: str, path: Path) -> None:
|
def download_file(session: Session, url: str, path: Path) -> None:
|
||||||
|
|
@ -222,8 +222,7 @@ def download_file(session: Session, url: str, path: Path) -> None:
|
||||||
|
|
||||||
|
|
||||||
def download_bytes(session: Session, url: str) -> bytes:
|
def download_bytes(session: Session, url: str) -> bytes:
|
||||||
resp = session.get(url)
|
return session.get(url).content
|
||||||
return resp.content
|
|
||||||
|
|
||||||
|
|
||||||
def get_full_track_info(session: Session, track_id: str) -> FullTrackInfo:
|
def get_full_track_info(session: Session, track_id: str) -> FullTrackInfo:
|
||||||
|
|
@ -430,7 +429,7 @@ if __name__ == '__main__':
|
||||||
args.playlist_id = PlaylistId(owner=match.group(1),
|
args.playlist_id = PlaylistId(owner=match.group(1),
|
||||||
kind=int(match.group(2)))
|
kind=int(match.group(2)))
|
||||||
else:
|
else:
|
||||||
print('Параметер url указан в неверном формате')
|
logging.error('Параметер url указан в неверном формате')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if args.artist_id is None and args.stick_to_artist:
|
if args.artist_id is None and args.stick_to_artist:
|
||||||
|
|
@ -439,7 +438,6 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
if args.artist_id is not None:
|
if args.artist_id is not None:
|
||||||
artist_info = get_artist_info(session, args.artist_id)
|
artist_info = get_artist_info(session, args.artist_id)
|
||||||
albums_count = 0
|
|
||||||
for album in artist_info.albums:
|
for album in artist_info.albums:
|
||||||
if args.stick_to_artist and album.artists[0] != artist_info.name:
|
if args.stick_to_artist and album.artists[0] != artist_info.name:
|
||||||
logging.info(
|
logging.info(
|
||||||
|
|
@ -448,9 +446,8 @@ if __name__ == '__main__':
|
||||||
continue
|
continue
|
||||||
full_album = get_full_album_info(session, album.id)
|
full_album = get_full_album_info(session, album.id)
|
||||||
result_tracks.extend(full_album.tracks)
|
result_tracks.extend(full_album.tracks)
|
||||||
albums_count += 1
|
|
||||||
logging.info(artist_info.name)
|
logging.info(artist_info.name)
|
||||||
logging.info('Альбомов: %d', albums_count)
|
logging.info('Альбомов: %d', len(artist_info.albums))
|
||||||
elif args.album_id is not None:
|
elif args.album_id is not None:
|
||||||
album = get_full_album_info(session, args.album_id)
|
album = get_full_album_info(session, args.album_id)
|
||||||
logging.info(album.title)
|
logging.info(album.title)
|
||||||
|
|
@ -490,6 +487,7 @@ if __name__ == '__main__':
|
||||||
cover_url = track.cover_info.cover_url(args.cover_resolution)
|
cover_url = track.cover_info.cover_url(args.cover_resolution)
|
||||||
if cover_url is not None:
|
if cover_url is not None:
|
||||||
if args.embed_cover:
|
if args.embed_cover:
|
||||||
|
cover = covers.get(album.id)
|
||||||
if cached_cover := covers.get(album.id):
|
if cached_cover := covers.get(album.id):
|
||||||
cover = cached_cover
|
cover = cached_cover
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue