Fixed TITLE_TEMPLATE, change some moments to f-string, and little code changes

This commit is contained in:
MagM1go 2023-08-02 19:16:32 +08:00 committed by GitHub
parent 21678a8608
commit 531c8ce8a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

28
main.py
View file

@ -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: