Обработка отсутствия данных о треке
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 <Паттерн>
|
||||
Поддерживает следующие заполнители: #number, #artist,
|
||||
#album-artist, #title, #album, #year, #artist-id,
|
||||
#album-id, #track-id (по умолчанию: #album-
|
||||
artist/#album/#number - #title)
|
||||
#album-id, #track-id, #track-number (по умолчанию:
|
||||
#album-artist/#album/#number - #title)
|
||||
|
||||
Авторизация:
|
||||
--browser BROWSER Браузер из которого будут извлечены данные для
|
||||
|
|
|
|||
|
|
@ -230,7 +230,12 @@ def main():
|
|||
print(album.title)
|
||||
result_tracks = album.tracks
|
||||
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:
|
||||
result_tracks = api.get_playlist(session, args.playlist_id)
|
||||
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ def download_track(
|
|||
lyrics = track.lyrics
|
||||
else:
|
||||
full_track = api.get_full_track_info(session, track.id)
|
||||
if full_track is not None:
|
||||
lyrics = full_track.lyrics
|
||||
|
||||
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}"
|
||||
|
||||
|
||||
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"}
|
||||
resp = session.get("https://music.yandex.ru/handlers/track.jsx", params=params)
|
||||
return FullTrackInfo.from_json(resp.json())
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ class BasicTrackInfo:
|
|||
|
||||
@classmethod
|
||||
def from_json(cls, data: dict) -> Optional["BasicTrackInfo"]:
|
||||
if not data["available"]:
|
||||
if not data.get("available", False):
|
||||
return None
|
||||
track_id = str(data["id"])
|
||||
title = parse_title(data)
|
||||
|
|
@ -138,8 +138,10 @@ class FullTrackInfo(BasicTrackInfo):
|
|||
lyrics: str
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, data: dict) -> "FullTrackInfo":
|
||||
def from_json(cls, data: dict) -> Optional["FullTrackInfo"]:
|
||||
base = BasicTrackInfo.from_json(data["track"])
|
||||
if base is None:
|
||||
return None
|
||||
lyrics = data["lyric"][0]["fullLyrics"]
|
||||
return cls(**base.__dict__, lyrics=lyrics)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue