2
votes

So I'm trying to get a track from the spotify API by searching for it by using the search endpoint of the API (See documentation). First, I authorize myself so I can send GET requests. This happens without issues, I added the code for reproducibility.

import requests

CLIENT_ID = "your_id_here"
CLIENT_SECRET = "your_secret_here"

AUTH_URL = "https://accounts.spotify.com/api/token"
auth_response = requests.post(AUTH_URL, {
    'grant_type': 'client_credentials',
    'client_id': CLIENT_ID,
    'client_secret': CLIENT_SECRET,
})

#Convert response to JSON
auth_response_data = auth_response.json()

#Save the access token
access_token = auth_response_data['access_token']

#Need to pass access token into header to send properly formed GET request to API server
headers = {
    'Authorization': 'Bearer {token}'.format(token=access_token)
}

Then, I want to use the search endpoint of the API to find a track by using the track name + artist (I need the track ID later on). When I use the example provided in the documentation, everything works fine and an artist object is returned by using the following query:

BASE_URL = 'https://api.spotify.com/v1/'
r = requests.get(BASE_URL + 'search?q=tania%20bowra&type=artist', headers=headers)
r = r.json()

This is the response, which looks exactly like the one in documentation:

{'artists': {'href': 'https://api.spotify.com/v1/search?query=tania+bowra&type=artist&offset=0&limit=20',
             'items': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/08td7MxkoHQkXnWAYD8d6Q'},
                        'followers': {'href': None, 'total': 235},
                        'genres': [],
                        'href': 'https://api.spotify.com/v1/artists/08td7MxkoHQkXnWAYD8d6Q',
                        'id': '08td7MxkoHQkXnWAYD8d6Q',
                        'images': [{'height': 640,
                                    'url': 'https://i.scdn.co/image/ab67616d0000b2731ae2bdc1378da1b440e1f610',
                                    'width': 640},
                                   {'height': 300,
                                    'url': 'https://i.scdn.co/image/ab67616d00001e021ae2bdc1378da1b440e1f610',
                                    'width': 300},
                                   {'height': 64,
                                    'url': 'https://i.scdn.co/image/ab67616d000048511ae2bdc1378da1b440e1f610',
                                    'width': 64}],
                        'name': 'Tania Bowra',
                        'popularity': 1,
                        'type': 'artist',
                        'uri': 'spotify:artist:08td7MxkoHQkXnWAYD8d6Q'}],
             'limit': 20,
             'next': None,
             'offset': 0,
             'previous': None,
             'total': 1}}

Applying the same logic, I tried to get a track object from the api by using an artist and a track name, like so:

BASE_URL = 'https://api.spotify.com/v1/'
r = requests.get(BASE_URL + 'search?q=artist:queen%20track:bohemian%20rapsody&type=track', headers=headers)
r = r.json()

Even though I do get a valid response (statuscode==200), it seems to be empty:

 {'tracks': {'href': 'https://api.spotify.com/v1/search?query=artist%3Aqueen+track%3Abohemian+rapsody&type=track&offset=0&limit=20',
            'items': [],
            'limit': 20,
            'next': None,
            'offset': 0,
            'previous': None,
            'total': 0}}

My question is: why is this happening?

2
Note for future readers: I''ve used this endpoint a lot, sometimes when a song is not on Spotify it does throw an emtpy response. First check your code; but if it keeps throwing emtpy responses (when searching multiple markets) it might indicate that song is not on spotify. Can easily be checked by using spotify client and searching for the song.Psychotechnopath

2 Answers

1
votes

You are now searching for the query: artist:queen%20track:bohemian%20rapsody while this should just be queen%20bohemian%20rapsody instead. the type afterwards shows what items you want to return. You dont have to determine the artist and track name seperately in the query. Interpret the query just like typing something into the spotify search bar.

0
votes

Problem solved. It was rhapsody instead of rapsody... Sucks be a non-native english speaker sometimes =)