.. _getting-started: Getting started =============== To use the Web API, you'll need to register an `application`_. From its page retrieve the client ID and secret. They are your application's credentials to the API. A walkthrough of creating an application and setting it up can be found `here `_. Retrieving a client token ------------------------- First we'll retrieve a client token for the Spotify application. It is a token associated with your application and can be used to make basic calls to the API. .. autolink-concat:: .. code:: python import tekore as tk client_id = 'your_id_here' client_secret = 'your_secret_here' app_token = tk.request_client_token(client_id, client_secret) Calling the API --------------- Next the Spotify object should be created. The following script will list the track numbers and names of songs on an album given the album ID. .. code:: python spotify = tk.Spotify(app_token) album = spotify.album('3RBULTZJ97bvVzZLpxcB0j') for track in album.tracks.items: print(track.track_number, track.name) Response attributes can be directly accessed with dot notation as above. To quickly inspect a response or any part of it, print its contents. .. code:: python print(album) print(album.artists[0]) Retrieving a user token ----------------------- Many endpoints require user authorisation, for which another type of access token is needed. User tokens are associated with a Spotify user account. Retrieving them requires some more setting up. A redirect URI should be whitelisted in `application`_ settings. It is the address to which users are redirected after authorising the application. Alternatively, the default redirect URI ``https://example.com/callback`` can be used with a client with no other redirect URIs whitelisted. Different privileges or `scopes` can be requested when authorising. Below we'll retrieve a token that has every possible scope. The script will open a web page prompting for a Spotify login. To only display the authorization URI, without opening it in a browser, set `open_browser` to `False` in `prompt_for_user_token`. The user is then redirected back to the whitelisted redirect URI. Paste the redirected URI in full to the shell to finalise token retrieval. .. code:: python redirect_uri = 'your_uri_here' user_token = tk.prompt_for_user_token( client_id, client_secret, redirect_uri, scope=tk.scope.every ) .. note:: :func:`prompt_for_user_token` eliminates the need for a web server, which would normally be used to complete authorisation, by requesting the user to manually enter information to the shell. However, that also makes it unusable on a server. Other authorisation methods are introduced in :ref:`auth-guide`. Calling the API as a user ------------------------- The following script replaces the application token with a user token and lists some of the user's most listened tracks. .. code:: python spotify.token = user_token tracks = spotify.current_user_top_tracks(limit=10) for track in tracks.items: print(track.name) The snippet below will play Sibelius' Finlandia if the user has a recently used Spotify application open. If no active device is found, an error is thrown. .. code:: python finlandia = '3hHWhvw2hjwfngWcFjIzqr' spotify.playback_start_tracks([finlandia]) Saving the configuration ------------------------ Currently, we need to go through the authorisation process every time the script is run. Let's save the configuration to avoid this in the future. .. code:: python conf = (client_id, client_secret, redirect_uri, user_token.refresh_token) tk.config_to_file('tekore.cfg', conf) Now we can replace the authorisation lines with reconstructing the token. .. code:: python conf = tk.config_from_file('tekore.cfg', return_refresh=True) user_token = tk.refresh_user_token(*conf[:2], conf[3]) .. note:: This approach is not scalable to multi-user scenarios. See :ref:`auth-guide` for more information. How to read the documentation ----------------------------- The reference documentation is built for easy navigation. Each endpoint (like :meth:`playback `) contains a description, required and optional scopes, arguments and return information. Notably, the return type often contains a link to the relevant response model. Follow them to discover the attributes that a model has. Further links can be followed down the model hierarchy. What's next? ------------ Our :ref:`auth-guide` details different authorisation options. :ref:`advanced-usage` provides an overview of things to keep in mind when building an actual application and what Tekore has to offer for that. You could also have a look at some :ref:`example scripts ` to start familiarising yourself with the Web API. .. _application: https://developer.spotify.com/dashboard/applications