mirror of
https://github.com/THIS-IS-NOT-A-BACKUP/zspotify.git
synced 2025-07-03 00:03:14 +00:00
Merge remote-tracking branch 'upstream/main'
This commit is contained in:
commit
524d781cd9
@ -72,6 +72,8 @@ USER_READ_EMAIL = 'user-read-email'
|
|||||||
|
|
||||||
PLAYLIST_READ_PRIVATE = 'playlist-read-private'
|
PLAYLIST_READ_PRIVATE = 'playlist-read-private'
|
||||||
|
|
||||||
|
USER_LIBRARY_READ = 'user-library-read'
|
||||||
|
|
||||||
WINDOWS_SYSTEM = 'Windows'
|
WINDOWS_SYSTEM = 'Windows'
|
||||||
|
|
||||||
CREDENTIALS_JSON = 'credentials.json'
|
CREDENTIALS_JSON = 'credentials.json'
|
||||||
|
@ -52,10 +52,12 @@ def download_playlist(playlist):
|
|||||||
|
|
||||||
playlist_songs = [song for song in get_playlist_songs(playlist[ID]) if song[TRACK][ID]]
|
playlist_songs = [song for song in get_playlist_songs(playlist[ID]) if song[TRACK][ID]]
|
||||||
p_bar = tqdm(playlist_songs, unit='song', total=len(playlist_songs), unit_scale=True)
|
p_bar = tqdm(playlist_songs, unit='song', total=len(playlist_songs), unit_scale=True)
|
||||||
|
enum = 1
|
||||||
for song in p_bar:
|
for song in p_bar:
|
||||||
download_track(song[TRACK][ID], sanitize_data(playlist[NAME].strip()) + '/',
|
download_track(song[TRACK][ID], sanitize_data(playlist[NAME].strip()) + '/',
|
||||||
disable_progressbar=True)
|
prefix=True, prefix_value=str(enum) ,disable_progressbar=True)
|
||||||
p_bar.set_description(song[TRACK][NAME])
|
p_bar.set_description(song[TRACK][NAME])
|
||||||
|
enum += 1
|
||||||
|
|
||||||
|
|
||||||
def download_from_user_playlist():
|
def download_from_user_playlist():
|
||||||
|
@ -5,11 +5,11 @@ from librespot.audio.decoders import VorbisOnlyAudioQuality
|
|||||||
from librespot.metadata import EpisodeId
|
from librespot.metadata import EpisodeId
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
from const import NAME, ERROR, SHOW, ITEMS, ID, ROOT_PODCAST_PATH, CHUNK_SIZE
|
from const import (CHUNK_SIZE, ERROR, ID, ITEMS, NAME, ROOT_PODCAST_PATH, SHOW,
|
||||||
from utils import sanitize_data, create_download_directory, MusicFormat
|
SKIP_EXISTING_FILES)
|
||||||
|
from utils import create_download_directory, sanitize_data
|
||||||
from zspotify import ZSpotify
|
from zspotify import ZSpotify
|
||||||
|
|
||||||
|
|
||||||
EPISODE_INFO_URL = 'https://api.spotify.com/v1/episodes'
|
EPISODE_INFO_URL = 'https://api.spotify.com/v1/episodes'
|
||||||
SHOWS_URL = 'https://api.spotify.com/v1/shows'
|
SHOWS_URL = 'https://api.spotify.com/v1/shows'
|
||||||
|
|
||||||
@ -55,16 +55,32 @@ def download_episode(episode_id) -> None:
|
|||||||
ZSpotify.get_config(ROOT_PODCAST_PATH),
|
ZSpotify.get_config(ROOT_PODCAST_PATH),
|
||||||
extra_paths,
|
extra_paths,
|
||||||
)
|
)
|
||||||
|
download_directory = os.path.realpath(download_directory)
|
||||||
create_download_directory(download_directory)
|
create_download_directory(download_directory)
|
||||||
|
|
||||||
total_size = stream.input_stream.size
|
total_size = stream.input_stream.size
|
||||||
with open(os.path.join(download_directory, f"{filename}.ogg"),
|
|
||||||
'wb') as file, tqdm(
|
filepath = os.path.join(download_directory, f"{filename}.ogg")
|
||||||
desc=filename,
|
if (
|
||||||
total=total_size,
|
os.path.isfile(filepath)
|
||||||
unit='B',
|
and os.path.getsize(filepath) == total_size
|
||||||
unit_scale=True,
|
and ZSpotify.get_config(SKIP_EXISTING_FILES)
|
||||||
unit_divisor=1024
|
):
|
||||||
|
print(
|
||||||
|
"\n### SKIPPING:",
|
||||||
|
podcast_name,
|
||||||
|
"-",
|
||||||
|
episode_name,
|
||||||
|
"(EPISODE ALREADY EXISTS) ###",
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
with open(filepath, 'wb') as file, tqdm(
|
||||||
|
desc=filename,
|
||||||
|
total=total_size,
|
||||||
|
unit='B',
|
||||||
|
unit_scale=True,
|
||||||
|
unit_divisor=1024
|
||||||
) as bar:
|
) as bar:
|
||||||
for _ in range(int(total_size / ZSpotify.get_config(CHUNK_SIZE)) + 1):
|
for _ in range(int(total_size / ZSpotify.get_config(CHUNK_SIZE)) + 1):
|
||||||
bar.update(file.write(
|
bar.update(file.write(
|
||||||
|
@ -18,7 +18,7 @@ from librespot.core import Session
|
|||||||
|
|
||||||
from const import CREDENTIALS_JSON, TYPE, \
|
from const import CREDENTIALS_JSON, TYPE, \
|
||||||
PREMIUM, USER_READ_EMAIL, AUTHORIZATION, OFFSET, LIMIT, CONFIG_FILE_PATH, FORCE_PREMIUM, \
|
PREMIUM, USER_READ_EMAIL, AUTHORIZATION, OFFSET, LIMIT, CONFIG_FILE_PATH, FORCE_PREMIUM, \
|
||||||
PLAYLIST_READ_PRIVATE, CONFIG_DEFAULT_SETTINGS
|
PLAYLIST_READ_PRIVATE, USER_LIBRARY_READ, CONFIG_DEFAULT_SETTINGS
|
||||||
from utils import MusicFormat
|
from utils import MusicFormat
|
||||||
|
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ class ZSpotify:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def __get_auth_token(cls):
|
def __get_auth_token(cls):
|
||||||
return cls.SESSION.tokens().get_token(USER_READ_EMAIL, PLAYLIST_READ_PRIVATE).access_token
|
return cls.SESSION.tokens().get_token(USER_READ_EMAIL, PLAYLIST_READ_PRIVATE, USER_LIBRARY_READ).access_token
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_auth_header(cls):
|
def get_auth_header(cls):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user