Source code for fusetools.music_tools

"""
Functions for interacting with Music Tools.

|pic1|
    .. |pic1| image:: ../images_source/music_tools/spotify1.png
        :width: 45%

"""

from spotipy.oauth2 import SpotifyClientCredentials
import spotipy


[docs]class Spotify: """ Functions for interacting with Spotify. .. image:: ../images_source/music_tools/spotify1.png """
[docs] @classmethod def auth(cls, clientid, clientsecret): """ Creates a Spotify API authentication object. :param clientid: Spotify developer client Id. :param clientsecret: Spotify developer client secret. :return: Spotify API authentication object. """ client_credentials_manager = SpotifyClientCredentials(client_id=clientid, client_secret=clientsecret) sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager) return sp
@classmethod def search_track(cls, sp, artist, track): results = sp.search(q='artist:' + artist + ' track:' + track, type='track') return results # this requires OATH2 # @classmethod # def add_track_to_playlist(cls, sp, username, playlist_id, tracks, position): # sp.user_playlist_add_tracks(user=username, playlist_id=playlist_id, tracks=tracks, position=position)
[docs] @classmethod def get_playlist_tracks(cls, sp, username, playlist_id): """ Retrieve tracks for a given Spotify playlist. :param sp: Spotify API authentication object. :param username: Spotify username. :param playlist_id: Spotify playlist Id. :return: List of tracks on a Spotify playlist. """ results = sp.user_playlist_tracks(username, playlist_id) tracks = results['items'] while results['next']: results = sp.next(results) tracks.extend(results['items']) return tracks
[docs] @classmethod def get_user_playlists(cls, sp, username): """ Retrieve tracks for a given Spotify playlist. :param sp: Spotify API authentication object. :param username: Spotify username. :param playlist_id: Spotify playlist Id. :return: List of tracks on a Spotify playlist. """ results = sp.user_playlists(user=username) playlists = results['items'] while results['next']: results = sp.next(results) playlists.extend(results['items']) return playlists
[docs] @classmethod def get_track_audio_features(cls, sp, track_id): """ Retrieve audio feature tracks for a given track. :param sp: Spotify API authentication object. :param track_id: Spotify track Id. :return: Audio feature tracks for a given track. """ results = sp.audio_analysis(track_id=track_id) return results