Skip to content

Instantly share code, notes, and snippets.

@Angel777d
Created May 1, 2020 23:56
Show Gist options
  • Save Angel777d/3547f3eef92e3e12abd4e493c5f62e1e to your computer and use it in GitHub Desktop.
Save Angel777d/3547f3eef92e3e12abd4e493c5f62e1e to your computer and use it in GitHub Desktop.
from pathlib import Path
from yandex_music import Client, Track
# Get formatted file name from track info
def get_file_name(track_obj: Track, ext: str, bitrate: int) -> str:
artist_name = track_obj.artists[0].name if track_obj.artists else ""
album_name = track_obj.albums[0].title if track_obj.albums else ""
file_name = f'[{artist_name}][{album_name}] {track_obj.title} ({bitrate}).{ext}'
# exclude wrong file name symbols
file_name = "".join([c for c in file_name if c not in ':/?|;<>*"'])
return file_name
# Download best track
def download_track(track_obj: Track, path: Path):
if track_obj.download_info is None:
track_obj.get_download_info()
# select quality
best_codec = "mp3" # "mp3" or "aac"
info = sorted(track_obj.download_info, key=lambda i: (1000 if i.codec == best_codec else 0) + i.bitrate_in_kbps)[-1]
file_name = get_file_name(track_obj, info.codec, info.bitrate_in_kbps)
info.download(path.joinpath(file_name))
return file_name
# Get token with login and password
# LOGIN = ""
# PASSWORD = ""
# token = Client().generate_token_by_username_and_password(LOGIN, PASSWORD)
# print("TOKEN:", token)
# Use token to login. Get token using commented code above.
# TOKEN = "YOUR TOKEN HERE"
# create new api client instance
client = Client.from_token(TOKEN)
track_list = client.users_likes_tracks()
track_ids = [t.track_id for t in track_list.tracks]
full_tracks = client.tracks(track_ids)
download_path = Path("D:/")
for track in full_tracks:
f = download_track(track, download_path)
print("Downloaded:", f)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment