I am trying to create a playlist with spotify and the spotipy library in python. However, I keep getting a “No token provided” error when making my API request. However, if I use the same token with a curl request, it works! Can someone please help. This is my code:

auth_manager = SpotifyOAuth(client_id=CLIENT,
                            client_secret=SECRET,
                            redirect_uri="http://example.com/",
                            scope=SCOPE,
                            username=spotify_display_name
                            )
token = auth_manager.get_access_token(
    as_dict=False,
    check_cache=True
)

sp = spotipy.Spotify(auth_manager=auth_manager,
                     auth=token
                     )
user_dict = sp.current_user()
user_id = user_dict["id"]
print(f"Welcome, {user_dict['display_name']}")


# SEARCH
# QUERY FORMAT: "track: track-name year: YYYY"

spotify_search_endpoint = "https://api.spotify.com/v1/search/"
test_query = "track:Hangin'+Tough year:1989"

search_parameters = {
    "q": format_query(test_query),
    "type": "track"
}

results = sp.search(q=search_parameters["q"])
print(results)

output:

{'tracks': {'href': 'https://api.spotify.com/v1/search?query=track%3AHangin%27%2BTough%2520year%3A1989&type=track&offset=0&limit=10', 'items': [], 'limit': 10, 'next': None, 'offset': 0, 'previous': None, 'total': 0}}
{
"error": {
"status": 401,
"message": "No token provided"
}
}

This is really frustrating! The authentication is working, otherwise the token wouldn’t have been valid for the curl request. I must be doing something wrong with spotipy.

  • Hammerheart@programming.devOP
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    1 year ago

    I was formatting my query poorly >:o

    specifically, I was too clever by formatting my query like it appears in the URL of the response (ie: replacing spaces with +'s)

    Also, the token was working the whole time, I think I was getting the error because I was attempting to access the search results by clicking the “href” in the response, and in doing was I was hitting the endpoint without providing the right header, which caused me to get the 401 error in my browser.