Обработка отсутствия данных о треке
This commit is contained in:
parent
184d1d1aeb
commit
08ea384869
5 changed files with 15 additions and 7 deletions
|
|
@ -109,8 +109,8 @@ ID:
|
||||||
--path-pattern <Паттерн>
|
--path-pattern <Паттерн>
|
||||||
Поддерживает следующие заполнители: #number, #artist,
|
Поддерживает следующие заполнители: #number, #artist,
|
||||||
#album-artist, #title, #album, #year, #artist-id,
|
#album-artist, #title, #album, #year, #artist-id,
|
||||||
#album-id, #track-id (по умолчанию: #album-
|
#album-id, #track-id, #track-number (по умолчанию:
|
||||||
artist/#album/#number - #title)
|
#album-artist/#album/#number - #title)
|
||||||
|
|
||||||
Авторизация:
|
Авторизация:
|
||||||
--browser BROWSER Браузер из которого будут извлечены данные для
|
--browser BROWSER Браузер из которого будут извлечены данные для
|
||||||
|
|
|
||||||
|
|
@ -230,7 +230,12 @@ def main():
|
||||||
print(album.title)
|
print(album.title)
|
||||||
result_tracks = album.tracks
|
result_tracks = album.tracks
|
||||||
elif args.track_id is not None:
|
elif args.track_id is not None:
|
||||||
result_tracks = [api.get_full_track_info(session, args.track_id)]
|
track = api.get_full_track_info(session, args.track_id)
|
||||||
|
if track is not None:
|
||||||
|
result_tracks = [track]
|
||||||
|
else:
|
||||||
|
logger.info("Трек не доступен для скачивания")
|
||||||
|
return 1
|
||||||
elif args.playlist_id is not None:
|
elif args.playlist_id is not None:
|
||||||
result_tracks = api.get_playlist(session, args.playlist_id)
|
result_tracks = api.get_playlist(session, args.playlist_id)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,7 @@ def download_track(
|
||||||
lyrics = track.lyrics
|
lyrics = track.lyrics
|
||||||
else:
|
else:
|
||||||
full_track = api.get_full_track_info(session, track.id)
|
full_track = api.get_full_track_info(session, track.id)
|
||||||
|
if full_track is not None:
|
||||||
lyrics = full_track.lyrics
|
lyrics = full_track.lyrics
|
||||||
|
|
||||||
cover = None
|
cover = None
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ def get_track_download_url(session: Session, track: BasicTrackInfo, hq: bool) ->
|
||||||
return f"https://{host}/get-mp3/{path_hash}/{ts}/{path}?track-id={track.id}"
|
return f"https://{host}/get-mp3/{path_hash}/{ts}/{path}?track-id={track.id}"
|
||||||
|
|
||||||
|
|
||||||
def get_full_track_info(session: Session, track_id: str) -> FullTrackInfo:
|
def get_full_track_info(session: Session, track_id: str) -> Optional[FullTrackInfo]:
|
||||||
params = {"track": track_id, "lang": "ru"}
|
params = {"track": track_id, "lang": "ru"}
|
||||||
resp = session.get("https://music.yandex.ru/handlers/track.jsx", params=params)
|
resp = session.get("https://music.yandex.ru/handlers/track.jsx", params=params)
|
||||||
return FullTrackInfo.from_json(resp.json())
|
return FullTrackInfo.from_json(resp.json())
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ class BasicTrackInfo:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_json(cls, data: dict) -> Optional["BasicTrackInfo"]:
|
def from_json(cls, data: dict) -> Optional["BasicTrackInfo"]:
|
||||||
if not data["available"]:
|
if not data.get("available", False):
|
||||||
return None
|
return None
|
||||||
track_id = str(data["id"])
|
track_id = str(data["id"])
|
||||||
title = parse_title(data)
|
title = parse_title(data)
|
||||||
|
|
@ -138,8 +138,10 @@ class FullTrackInfo(BasicTrackInfo):
|
||||||
lyrics: str
|
lyrics: str
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_json(cls, data: dict) -> "FullTrackInfo":
|
def from_json(cls, data: dict) -> Optional["FullTrackInfo"]:
|
||||||
base = BasicTrackInfo.from_json(data["track"])
|
base = BasicTrackInfo.from_json(data["track"])
|
||||||
|
if base is None:
|
||||||
|
return None
|
||||||
lyrics = data["lyric"][0]["fullLyrics"]
|
lyrics = data["lyric"][0]["fullLyrics"]
|
||||||
return cls(**base.__dict__, lyrics=lyrics)
|
return cls(**base.__dict__, lyrics=lyrics)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue