Created
May 1, 2020 23:56
-
-
Save Angel777d/3547f3eef92e3e12abd4e493c5f62e1e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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