mirror of
https://github.com/KevinMidboe/spotify-downloader.git
synced 2025-12-08 20:39:08 +00:00
Add an option to grab an album (#142)
This commit is contained in:
committed by
Ritiek Malhotra
parent
98d21bbad9
commit
237b4cca7e
15
README.md
15
README.md
@@ -88,6 +88,9 @@ optional arguments:
|
|||||||
-p PLAYLIST, --playlist PLAYLIST
|
-p PLAYLIST, --playlist PLAYLIST
|
||||||
load songs from playlist URL into <playlist_name>.txt
|
load songs from playlist URL into <playlist_name>.txt
|
||||||
(default: None)
|
(default: None)
|
||||||
|
-b ALBUM, --album ALBUM
|
||||||
|
load songs from album URL into <album_name>.txt
|
||||||
|
(default: None)
|
||||||
-u USERNAME, --username USERNAME
|
-u USERNAME, --username USERNAME
|
||||||
load songs from user's playlist into
|
load songs from user's playlist into
|
||||||
<playlist_name>.txt (default: None)
|
<playlist_name>.txt (default: None)
|
||||||
@@ -165,6 +168,18 @@ For example
|
|||||||
|
|
||||||
- Then you can simply run `python3 spotdl.py --list=<playlist_name>.txt` to download all the tracks.
|
- Then you can simply run `python3 spotdl.py --list=<playlist_name>.txt` to download all the tracks.
|
||||||
|
|
||||||
|
#### Download albums
|
||||||
|
|
||||||
|
- You can copy the Spotify URL of the album and pass it in `--album` option.
|
||||||
|
|
||||||
|
For example
|
||||||
|
|
||||||
|
- `python3 spotdl.py --album https://open.spotify.com/album/7CjakTZxwIF8oixONe6Bpb`
|
||||||
|
|
||||||
|
- The script will load all the tracks from the album into `<album_name>.txt`
|
||||||
|
|
||||||
|
- Then you can simply run `python3 spotdl.py --list=<album_name>.txt` to download all the tracks.
|
||||||
|
|
||||||
#### Download playlists by username
|
#### Download playlists by username
|
||||||
|
|
||||||
- You can also load songs using Spotify username if you don't have the playlist URL. (Open profile in Spotify, click on the three little dots below name, "Share", "Copy to clipboard", paste last numbers into command-line: `https://open.spotify.com/user/0123456790`)
|
- You can also load songs using Spotify username if you don't have the playlist URL. (Open profile in Spotify, click on the three little dots below name, "Share", "Copy to clipboard", paste last numbers into command-line: `https://open.spotify.com/user/0123456790`)
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ def get_arguments():
|
|||||||
'-l', '--list', help='download songs from a file')
|
'-l', '--list', help='download songs from a file')
|
||||||
group.add_argument(
|
group.add_argument(
|
||||||
'-p', '--playlist', help='load songs from playlist URL into <playlist_name>.txt')
|
'-p', '--playlist', help='load songs from playlist URL into <playlist_name>.txt')
|
||||||
|
group.add_argument(
|
||||||
|
'-b', '--album', help='load songs from album URL into <album_name>.txt')
|
||||||
group.add_argument(
|
group.add_argument(
|
||||||
'-u', '--username',
|
'-u', '--username',
|
||||||
help="load songs from user's playlist into <playlist_name>.txt")
|
help="load songs from user's playlist into <playlist_name>.txt")
|
||||||
|
|||||||
51
spotdl.py
51
spotdl.py
@@ -194,20 +194,17 @@ def feed_playlist(username):
|
|||||||
print('')
|
print('')
|
||||||
playlist = misc.input_link(links)
|
playlist = misc.input_link(links)
|
||||||
print('')
|
print('')
|
||||||
write_tracks(playlist)
|
write_playlist(playlist)
|
||||||
|
|
||||||
|
|
||||||
def write_tracks(playlist):
|
def write_tracks(text_file, tracks):
|
||||||
results = spotify.user_playlist(
|
|
||||||
playlist['owner']['id'], playlist['id'], fields='tracks,next')
|
|
||||||
text_file = u'{0}.txt'.format(slugify(playlist['name'], ok='-_()[]{}'))
|
|
||||||
print(u'Feeding {0} tracks to {1}'.format(playlist['tracks']['total'], text_file))
|
|
||||||
|
|
||||||
tracks = results['tracks']
|
|
||||||
with open(text_file, 'a') as file_out:
|
with open(text_file, 'a') as file_out:
|
||||||
while True:
|
while True:
|
||||||
for item in tracks['items']:
|
for item in tracks['items']:
|
||||||
track = item['track']
|
if 'track' in item:
|
||||||
|
track = item['track']
|
||||||
|
else:
|
||||||
|
track = item
|
||||||
try:
|
try:
|
||||||
file_out.write(track['external_urls']['spotify'] + '\n')
|
file_out.write(track['external_urls']['spotify'] + '\n')
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -221,6 +218,24 @@ def write_tracks(playlist):
|
|||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def write_playlist(playlist):
|
||||||
|
results = spotify.user_playlist(
|
||||||
|
playlist['owner']['id'], playlist['id'], fields='tracks,next')
|
||||||
|
text_file = u'{0}.txt'.format(slugify(playlist['name'], ok='-_()[]{}'))
|
||||||
|
print(u'Feeding {0} tracks to {1}'.format(playlist['tracks']['total'], text_file))
|
||||||
|
|
||||||
|
tracks = results['tracks']
|
||||||
|
write_tracks(text_file, tracks)
|
||||||
|
|
||||||
|
|
||||||
|
def write_album(album):
|
||||||
|
tracks = spotify.album_tracks(album['id'])
|
||||||
|
text_file = u'{0}.txt'.format(slugify(album['name'], ok='-_()[]{}'))
|
||||||
|
print(u'Feeding {0} tracks to {1}'.format(tracks['total'], text_file))
|
||||||
|
|
||||||
|
write_tracks(text_file, tracks)
|
||||||
|
|
||||||
|
|
||||||
def download_song(file_name, content):
|
def download_song(file_name, content):
|
||||||
"""Download the audio file from YouTube."""
|
"""Download the audio file from YouTube."""
|
||||||
if args.input_ext == '.webm':
|
if args.input_ext == '.webm':
|
||||||
@@ -339,7 +354,21 @@ def grab_playlist(playlist):
|
|||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
write_tracks(playlist)
|
write_playlist(playlist)
|
||||||
|
|
||||||
|
|
||||||
|
def grab_album(album):
|
||||||
|
if '/' in album:
|
||||||
|
if album.endswith('/'):
|
||||||
|
playlist = playlist[:-1]
|
||||||
|
splits = album.split('/')
|
||||||
|
else:
|
||||||
|
splits = album.split(':')
|
||||||
|
|
||||||
|
album_id = splits[-1]
|
||||||
|
album = spotify.album(album_id)
|
||||||
|
|
||||||
|
write_album(album)
|
||||||
|
|
||||||
|
|
||||||
def grab_single(raw_song, number=None):
|
def grab_single(raw_song, number=None):
|
||||||
@@ -410,6 +439,8 @@ if __name__ == '__main__':
|
|||||||
grab_list(text_file=args.list)
|
grab_list(text_file=args.list)
|
||||||
elif args.playlist:
|
elif args.playlist:
|
||||||
grab_playlist(playlist=args.playlist)
|
grab_playlist(playlist=args.playlist)
|
||||||
|
elif args.album:
|
||||||
|
grab_album(album=args.album)
|
||||||
elif args.username:
|
elif args.username:
|
||||||
feed_playlist(username=args.username)
|
feed_playlist(username=args.username)
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user