def default(self, uri = None):
    if uri == None:
      raise cherrypy.HTTPError(400, "A paramater was expected but not supplied.")

    spotify = Spotify(sys.argv[1], sys.argv[2])
    track = spotify.objectFromURI(uri)
    if track == None:
      spotify.logout()
      raise cherrypy.HTTPError(404, "Could not find a track with that URI.")

    url = track.getFileURL()
    if url == False:
      spotify.logout()
      raise cherrypy.HTTPError(404, "Could not find a track URL for that URI.")

    spotify.logout()
    raise cherrypy.HTTPRedirect(url)
예제 #2
0
class SpotifyTest(unittest.TestCase):
    def setUp(self):
        self.spotify = Spotify(USERNAME, PASSWORD)
        if not self.spotify.logged_in():
            print "Login failed"

    def tearDown(self):
        self.spotify.logout()

    def test_get_track_by_uri(self):
        test_uris = {
            "spotify:track:4DoiEk7AaubTkIkYencvx7": {
                "title": "Figure 8",
                "artist": "Ellie Goulding",
                "album": "Halcyon"
            },
            "spotify:track:6Qmmzzo9Sdk0QZp0dfLpGk": {
                "title": "Commander",
                "artist": "Kelly Rowland, David Guetta",
                "album": "Commander"
            }
        }

        for uri, reference in test_uris.items():
            track = self.spotify.objectFromURI(uri)
            self.assertEqual(reference["title"], track.getName())
            self.assertEqual(reference["artist"], track.getArtists(nameOnly=True))
            self.assertEqual(reference["album"], track.getAlbum(nameOnly=True))

    def test_playlist_add_delete(self):
        playlist_name = "unittests"
        before = len(self.spotify.getPlaylists())
        new_playlist = self.spotify.newPlaylist(playlist_name)
        time.sleep(2)
        playlist_names = [playlist.getName() for playlist in self.spotify.getPlaylists()]
        self.assertIn(playlist_name, playlist_names)
        self.assertEqual(before+1, len(self.spotify.getPlaylists()))

        self.spotify.removePlaylist(new_playlist)
        time.sleep(2)
        playlist_names = [playlist.getName() for playlist in self.spotify.getPlaylists()]
        self.assertNotIn(playlist_name, playlist_names)
        self.assertEqual(before, len(self.spotify.getPlaylists()))
예제 #3
0
    def default(self, uri=None):
        if uri is None:
            raise cherrypy.HTTPError(
                400, "A paramater was expected but not supplied.")

        spotify = Spotify(sys.argv[1], sys.argv[2])
        track = spotify.objectFromURI(uri)
        if track is None:
            spotify.logout()
            raise cherrypy.HTTPError(404,
                                     "Could not find a track with that URI.")

        url = track.getFileURL()
        if not url:
            spotify.logout()
            raise cherrypy.HTTPError(
                404, "Could not find a track URL for that URI.")

        spotify.logout()
        raise cherrypy.HTTPRedirect(url)
예제 #4
0
class SpotifyClient(object):
    audio_buffer_size = 50
    user_agent = PLUGIN_ID

    def __init__(self, username, password):
        """ Initializer

        :param username:       The username to connect to spotify with.
        :param password:       The password to authenticate with.
        """

        # Hook logging
        Logging.hook(3, Log.Debug)
        Logging.hook(2, Log.Info)
        Logging.hook(1, Log.Warn)
        Logging.hook(0, Log.Error)

        self.username = username
        self.spotify = Spotify(username, password, log_level=3)

    #
    # Public methods
    #

    def is_logged_in(self):
        return self.spotify.logged_in()

    def restart(self, username, password):
        return self.spotify.restart(username, password)

    def shutdown(self):
        self.spotify.shutdown()

    def search(self, query, query_type="all", max_results=50, offset=0):
        """ Execute a search

        :param query:          A query string.
        """
        return self.spotify.search(query, query_type, max_results, offset)

    #
    # Media
    #

    def get(self, uri):
        return self.spotify.objectFromURI(uri)

    def is_album_playable(self, album):
        """ Check if an album can be played by a client or not """
        return True

    def is_track_playable(self, track):
        """ Check if a track can be played by a client or not """
        return True

    #
    # Explore
    #

    def get_featured_playlists(self):
        return self.spotify.getFeaturedPlaylists()

    def get_top_playlists(self):
        return self.spotify.getTopPlaylists()

    def get_new_releases(self):
        return self.spotify.getNewReleases()

    def get_genres(self):
        return self.spotify.getGenres()

    def get_playlists_by_genre(self, genre_name):
        return self.spotify.getPlaylistsByGenre(genre_name)

    #
    # Discover
    #

    def discover(self):
        """ Return the user's stories """
        return self.spotify.discover()

    #
    # Radio
    #

    def get_radio_genres(self):
        return self.spotify.getRadioGenres()

    def get_radio_stations(self):
        return self.spotify.getRadioStations()

    def get_radio(self, radio_uri):
        radios = []
        if "spotify:genre:" in radio_uri:
            radios = self.spotify.getRadioGenres()
        else:
            radios = self.spotify.getRadioStations()

        for radio in radios:
            if radio.getURI() == radio_uri:
                return radio
        return self.spotify.newRadioStation(radio_uri)

    #
    # Playlists
    #

    def get_playlists(self):
        """ Return the user's playlists"""
        return self.spotify.getPlaylists()

    def get_starred(self):
        """ Return the user's starred tracks"""
        return self.get("spotify:user:%s:starred" % self.username)

    #
    # My Music
    #

    def get_my_albums(self):
        """ Return the user's albums"""
        return self.spotify.getMyMusic(type="albums")

    def get_my_artists(self):
        """ Return the user's artists"""
        return self.spotify.getMyMusic(type="artists")

    #
    #  Uri validation
    #
    def is_track_uri_valid(self, track_uri):
        return self.spotify.is_track_uri_valid(track_uri)
	elif msg.type == gst.MESSAGE_ERROR:
		player.set_state(gst.STATE_NULL)
		print msg.parse_error()

if len(sys.argv) < 3:
	print "Usage: "+sys.argv[0]+" <username> <password> [track URI]"
else:

	sp = Spotify(sys.argv[1], sys.argv[2])
	mainloop = gobject.MainLoop()
	
	player = gst.parse_launch('uridecodebin name=uridecode ! autoaudiosink')

	bus = player.get_bus()
	bus.add_signal_watch()
	bus.connect('message', player_message, player, mainloop)

	uri = sys.argv[3] if len(sys.argv) > 3 else "spotify:track:6NwbeybX6TDtXlpXvnUOZC"
	track = sp.objectFromURI(uri)

	print ','.join([a.getName() for a in track.getArtists()])+' - '+track.getName()

	mp3_uri = track.getFileURL()
	player.get_by_name('uridecode').set_property('uri', mp3_uri)
	player.set_state(gst.STATE_PLAYING)
	
	signal.signal(signal.SIGINT, sigint)
	mainloop.run()
	
	sp.logout()
예제 #6
0
    elif msg.type == gst.MESSAGE_ERROR:
        player.set_state(gst.STATE_NULL)
        print msg.parse_error()

if len(sys.argv) < 3:
    print "Usage: " + sys.argv[0] + " <username> <password> [track URI]"
else:

    sp = Spotify(sys.argv[1], sys.argv[2])
    mainloop = gobject.MainLoop()

    player = gst.parse_launch('uridecodebin name=uridecode ! autoaudiosink')

    bus = player.get_bus()
    bus.add_signal_watch()
    bus.connect('message', player_message, player, mainloop)

    uri = sys.argv[3] if len(sys.argv) > 3 else "spotify:track:6NwbeybX6TDtXlpXvnUOZC"
    track = sp.objectFromURI(uri)

    print ','.join([a.getName() for a in track.getArtists()]) + ' - ' + track.getName()

    mp3_uri = track.getFileURL()
    player.get_by_name('uridecode').set_property('uri', mp3_uri)
    player.set_state(gst.STATE_PLAYING)

    signal.signal(signal.SIGINT, sigint)
    mainloop.run()

    sp.logout()
예제 #7
0
	global aodev

	curl_obj = pycurl.Curl()
	curl_obj.setopt(pycurl.WRITEFUNCTION, play_stream)
	curl_obj.setopt(pycurl.URL, str(uri))
	curl_obj.perform()
	curl_obj.close()

	mpg123.mpg123_close(ctypes.c_void_p(mh))
	mpg123.mpg123_delete(ctypes.c_void_p(mh))
	mpg123.mpg123_exit()

	ao.ao_close(ctypes.c_void_p(aodev))
	ao.ao_shutdown()

if len(sys.argv) < 3:
	print "Usage: "+sys.argv[0]+" <username> <password> [URI]"
else:
	sp = Spotify(sys.argv[1], sys.argv[2])
	if sp.logged_in() == False:
		print "Login failed"
	else:
		uri = sys.argv[3] if len(sys.argv) > 3 else "spotify:track:6NwbeybX6TDtXlpXvnUOZC"
		obj = sp.objectFromURI(uri)
		if obj.uri_type == "track":
			print obj.getName(), obj.getDuration()/1000.0, "seconds"
			play_track(obj.getFileURL())
		else:
			print "No support for yet for", obj.uri_type
		sp.logout()
예제 #8
0
class SpotifyClient(object):
    audio_buffer_size = 50
    user_agent = PLUGIN_ID

    def __init__(self, username, password):
        """ Initializer

        :param username:       The username to connect to spotify with.
        :param password:       The password to authenticate with.
        """

        # Hook logging
        Logging.hook(3, Log.Debug)
        Logging.hook(2, Log.Info)
        Logging.hook(1, Log.Warn)
        Logging.hook(0, Log.Error)

        self.username = username
        self.spotify = Spotify(username, password, log_level=3)

    #
    # Public methods
    #

    def is_logged_in(self):
        return self.spotify.logged_in()

    def restart(self, username, password):
        return self.spotify.restart(username, password)

    def shutdown(self):
        self.spotify.shutdown()

    def search(self, query, query_type='all', max_results=50, offset=0):
        """ Execute a search

        :param query:          A query string.
        """
        return self.spotify.search(query, query_type, max_results, offset)

    #
    # Media
    #

    def get(self, uri):
        return self.spotify.objectFromURI(uri)

    def is_album_playable(self, album):
        """ Check if an album can be played by a client or not """
        return True

    def is_track_playable(self, track):
        """ Check if a track can be played by a client or not """
        return True

    #
    # Explore
    #

    def get_featured_playlists(self):
        return self.spotify.getFeaturedPlaylists()

    def get_top_playlists(self):
        return self.spotify.getTopPlaylists()

    def get_new_releases(self):
        return self.spotify.getNewReleases()

    def get_genres(self):
        return self.spotify.getGenres()

    def get_playlists_by_genre(self, genre_name):
        return self.spotify.getPlaylistsByGenre(genre_name)

    #
    # Discover
    #

    def discover(self):
        """ Return the user's stories """
        return self.spotify.discover()

    #
    # Radio
    #

    def get_radio_genres(self):
        return self.spotify.getRadioGenres()

    def get_radio_stations(self):
        return self.spotify.getRadioStations()

    def get_radio(self, radio_uri):
        radios = []
        if "spotify:genre:" in radio_uri:
            radios = self.spotify.getRadioGenres()
        else:
            radios = self.spotify.getRadioStations()

        for radio in radios:
            if radio.getURI() == radio_uri:
                return radio
        return self.spotify.newRadioStation(radio_uri)

    #
    # Playlists
    #

    def get_playlists(self):
        """ Return the user's playlists"""
        return self.spotify.getPlaylists()

    def get_starred(self):
        """ Return the user's starred tracks"""
        return self.get('spotify:user:%s:starred' % self.username)

    #
    # My Music
    #

    def get_my_albums(self):
        """ Return the user's albums"""
        return self.spotify.getMyMusic(type="albums")

    def get_my_artists(self):
        """ Return the user's artists"""
        return self.spotify.getMyMusic(type="artists")

    #
    #  Uri validation
    #
    def is_track_uri_valid(self, track_uri):
        return self.spotify.is_track_uri_valid(track_uri)
예제 #9
0
    curl_obj.setopt(pycurl.WRITEFUNCTION, play_stream)
    curl_obj.setopt(pycurl.URL, str(uri))
    curl_obj.perform()
    curl_obj.close()

    mpg123.mpg123_close(ctypes.c_void_p(mh))
    mpg123.mpg123_delete(ctypes.c_void_p(mh))
    mpg123.mpg123_exit()

    ao.ao_close(ctypes.c_void_p(aodev))
    ao.ao_shutdown()

if len(sys.argv) < 3:
    print "Usage: "+sys.argv[0]+" <username> <password> [URI]"
else:
    sp = Spotify(sys.argv[1], sys.argv[2])
    if not sp.logged_in():
        print "Login failed"
    else:
        uri = sys.argv[3] if len(sys.argv) > 3 else "spotify:track:6NwbeybX6TDtXlpXvnUOZC"
        obj = sp.objectFromURI(uri)
        if obj is not None:
            if obj.uri_type == "track":
                print obj.getName(), obj.getDuration()/1000.0, "seconds"
                play_track(obj.getFileURL())
            else:
                print "No support for yet for", obj.uri_type
        else:
            print "Request for %s failed" % uri
        sp.logout()