Plan
Premium
Country
Netherlands
Device
PC
Operating System
Windows 10
My Question or Issue
I want to make a program that can create charts using the Spotify Api. The code initially worked without authorization and produced results, but then it began to produce a 401 error. I added authorization, but stopped receiving results. I will be glad if you help. I am attaching the code below. (Some values under ### have been removed for safety)
import spotipy
from spotipy.oauth2 import SpotifyOAuth
import json
client_id = '###'
client_secret = '###'
scope = "user-library-read"
redirect_uri = "###"
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id=client_id,
client_secret=client_secret,
redirect_uri=redirect_uri,
scope=scope))
def get_artist_id(artist_name):
result = sp.search(q=artist_name, type='artist', limit=1)
items = result['artists']['items']
if items:
return items[0]['id']
else:
return None
def load_artists_from_json(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
return data.get("artists", [])
def get_top_tracks_for_all_artists(artists):
all_tracks = []
for artist_name in artists:
artist_id = get_artist_id(artist_name)
if artist_id:
top_tracks = get_top_tracks(artist_id)
all_tracks.extend(top_tracks)
else:
print(f"Artist {artist_name} didn't found.")
return all_tracks
def get_top_tracks(artist_id):
top_tracks = sp.artist_top_tracks(artist_id)
return top_tracks['tracks']
def print_top_tracks(tracks):
for i, track in enumerate(tracks, 1):
print(f"{i}. {track['name']} ({track['artists'][0]['name']}) - {track['popularity']} ")
def save_top_tracks_to_file(tracks, file_path):
with open(file_path, 'w', encoding='utf-8') as f:
for i, track in enumerate(tracks, 1):
f.write(f"{i}. {track['name']} ({track['artists'][0]['name']}) - {track['popularity']}\n")
if __name__ == "__main__":
try:
current_user = sp.current_user()
print("Connection to Spotify API is successful.")
print("User of Spotify:", current_user['display_name'])
except Exception as e:
print("Error with connection to Spotify API:", e)
exit()
artists = load_artists_from_json("artists.json")
print("Gettin top-50 songs...")
all_tracks = get_top_tracks_for_all_artists(artists)
sorted_tracks = sorted(all_tracks, key=lambda x: x['popularity'], reverse=True)[:50]
save_top_tracks_to_file(sorted_tracks, "final_chart.txt")
print("Top-50 is successfully downloaded and was uploaded to 'final_chart.txt'.")