-
-
Save julian-west/b465261758198308a5262a40ed2cb78e to your computer and use it in GitHub Desktop.
"""Get song titles and artists from Spotify playlist""" | |
import csv | |
import os | |
import re | |
import spotipy | |
from dotenv import load_dotenv | |
from spotipy.oauth2 import SpotifyClientCredentials | |
# load credentials from .env file | |
load_dotenv() | |
CLIENT_ID = os.getenv("CLIENT_ID", "") | |
CLIENT_SECRET = os.getenv("CLIENT_SECRET", "") | |
OUTPUT_FILE_NAME = "track_info.csv" | |
# change for your target playlist | |
PLAYLIST_LINK = "https://open.spotify.com/playlist/6jAarBZaMmBLnSIeltPzkz?si=d42be5c6ec194bb9" | |
# authenticate | |
client_credentials_manager = SpotifyClientCredentials( | |
client_id=CLIENT_ID, client_secret=CLIENT_SECRET | |
) | |
# create spotify session object | |
session = spotipy.Spotify(client_credentials_manager=client_credentials_manager) | |
# get uri from https link | |
if match := re.match(r"https://open.spotify.com/playlist/(.*)\?", PLAYLIST_LINK): | |
playlist_uri = match.groups()[0] | |
else: | |
raise ValueError("Expected format: https://open.spotify.com/playlist/...") | |
# get list of tracks in a given playlist (note: max playlist length 100) | |
tracks = session.playlist_tracks(playlist_uri)["items"] | |
# create csv file | |
with open(OUTPUT_FILE_NAME, "w", encoding="utf-8") as file: | |
writer = csv.writer(file) | |
# write header column names | |
writer.writerow(["track", "artist"]) | |
# extract name and artist | |
for track in tracks: | |
name = track["track"]["name"] | |
artists = ", ".join( | |
[artist["name"] for artist in track["track"]["artists"]] | |
) | |
# write to csv | |
writer.writerow([name, artists]) |
@cisko99za . In order to be able to run the script, you first need to set your Spotify credentials as environment variables. One way to do this is to create a file called .env
in the same directory as this python script. The python script will then load these credentials at runtime enabling you to interact with your Spotify account.
For example:
# .env example
CLIENT_ID='your_client_id'
CLIENT_SECRET='your_client_secret'
Not sure if you have seen, but I have written a full tutorial on how to run the script including how to create your Spotify credentials and set up the .env
file: https://engineeringfordatascience.com/posts/export_spotify_playlist_to_csv_using_python/
already i've add CLIENT_ID and CLIENT_SECRET into your script, but run like every py script (not on .env) i get error
need to run script on .env ?
I've just tested the script with the latest version of spotipy (2.24.0) and the script is working fine.
Your error suggests the the CLIENT_ID and CLIENT_SECRET variable values are being overwritten with an empty string.
You don't necessarily need to use a .env
file but it is considered best practice as it avoids hard coding sensitive credentials in your python file.
But, if you have added CLIENT_ID and CLIENT_SECRET directly as hard coded values to the script, then make sure you have deleted lines 14 and 15 in the original script as these will overwrite the variables with an empty string if there is no environment variable present.
i don't understand, sorry. i've replace on line 14 and 15 CLIENT_ID and CLIENT_SECRET with my value but get error:
spotipy.oauth2.SpotifyOauthError: No client_id. Pass it or set a SPOTIPY_CLIENT_ID environment variable
and i have latest spotipy 2.24.0 installed
It's kind of hard to debug without seeing your changes.
I would recommend deleting lines 14 and 15 and replacing with:
CLIENT_ID = 'your-value'
CLIENT_SECRET='your-secret-value'
Or look at the documentation for os.getenv
to understand how that function works. You should put your value in the empty string (not replacing CLIENT_ID):
CLIENT_ID = os.getenv('CLIENT_ID', 'your-value')
CLIENT_SECRET = os.getenv('CLIENT_SECRET ', 'your-secret-value')
work with first method CLIENT_ID = 'my-value' and CLIENT_SECRET='my-secret-value' on line 14-15
but work only with plist link into script. edit line 19 with my plist link get error:
spotipy.exceptions.SpotifyException: http status: 404, code:-1 - https://api.spotify.com/v1/playlists/37i9dQZF1E4kvm1VQNlpP6/tracks?limit=100&offset=0&additional_types=track:
Resource not found, reason: None
for me does not work. error from python:
spotipy.oauth2.SpotifyOauthError: No client_id. Pass it or set a SPOTIPY_CLIENT_ID environment variable