Example #1
0
class Spotify():
	AUTOREPLACE_TRACKS = True

	def __init__(self, username, password): 
		self.api = SpotifyAPI()
		self.api.connect(username, password)

	def logged_in(self):
		return self.api.is_logged_in and not self.api.disconnecting

	def logout(self):
		self.api.disconnect()

	@Cache
	def getPlaylists(self, username = None):
		username = self.api.username if username == None else username
		playlist_uris = []
		if username == self.api.username:
			playlist_uris += ["spotify:user:"******":starred"]

		playlist_uris += [playlist.uri for playlist in self.api.playlists_request(username).contents.items]
		return self.objectFromURI(playlist_uris)

	def newPlaylist(self, name):
		self._Cache__cache = {}

		uri = self.api.new_playlist(name)
		return SpotifyPlaylist(self, uri=uri)

	def removePlaylist(self, playlist):
		self._Cache__cache = {}
		return self.api.remove_playlist(playlist.getURI())

	def getUserToplist(self, toplist_content_type = "track", username = None):
		return SpotifyToplist(self, toplist_content_type, "user", username, None)

	def getRegionToplist(self, toplist_content_type = "track", region = None):
		return SpotifyToplist(self, toplist_content_type, "region", None, region)

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

	def objectFromInternalObj(self, object_type, objs, nameOnly = False):
		if nameOnly:
			return ", ".join([obj.name for obj in objs])

		try:
			uris = [SpotifyUtil.gid2uri(object_type, obj.gid) for obj in objs]
		except:
			uris = SpotifyUtil.gid2uri(object_type, objs.gid)

		return self.objectFromURI(uris, asArray = True)

	def objectFromID(self, object_type, ids):
		try:
			uris = [SpotifyUtil.id2uri(object_type, id) for id in ids]
		except:
			uris = SpotifyUtil.id2uri(object_type, ids)

		return self.objectFromURI(uris, asArray = True)

	@Cache
	def objectFromURI(self, uris, asArray = False):
		if self.logged_in() == False:
			return False

		uris = [uris] if type(uris) != list else uris
		if len(uris) == 0:
			return [] if asArray else None

		uri_type = SpotifyUtil.get_uri_type(uris[0])
		if uri_type == False:
			return None
		elif uri_type == "playlist":
			if len(uris) == 1:
				results = [SpotifyPlaylist(self, uri=uris[0])]
			else:
				thread_results = {}
				jobs = []
				for index in range(0, len(uris)):
					jobs.append((self, uris[index], thread_results, index))

				def work_function(spotify, uri, results, index):
					results[index] = SpotifyPlaylist(spotify, uri=uri)

				Spotify.doWorkerQueue(work_function, jobs)

				results = [v for k, v in thread_results.items()]

		elif uri_type in ["track", "album", "artist"]:
			uris = [uri for uri in uris if not SpotifyUtil.is_local(uri)]
			objs = self.api.metadata_request(uris)
			objs = [objs] if type(objs) != list else objs

			failed_requests = len([obj for obj in objs if obj == False])
			if failed_requests > 0:
				print failed_requests,"metadata requests failed"
			
			objs = [obj for obj in objs if obj != False]
			if uri_type == "track":
				tracks = [SpotifyTrack(self, obj=obj) for obj in objs]
				results = [track for track in tracks if self.AUTOREPLACE_TRACKS == False or track.isAvailable()]
			elif uri_type == "album":
				results =  [SpotifyAlbum(self, obj=obj) for obj in objs]
			elif uri_type == "artist":
				results =  [SpotifyArtist(self, obj=obj) for obj in objs]
		else:
			return None

		if asArray == False:
			if len(results) == 1:
				results = results[0]
			elif len(results) == 0:
				return None

		return results

	@staticmethod
	def doWorkerQueue(work_function, args, worker_thread_count = 5):
		def worker():
			while not q.empty():
				args = q.get()
				work_function(*args)
				q.task_done()

		q = Queue()
		for arg in args:
			q.put(arg)

		for i in range(worker_thread_count):
			t = Thread(target=worker)
			t.start()
		q.join()

	@staticmethod
	def imagesFromArray(image_objs):
		images = {}
		for image_obj in image_objs:
			size = str(image_obj.width)
			images[size] = "https://d3rt1990lpmkn.cloudfront.net/" + size + "/" + SpotifyUtil.gid2id(image_obj.file_id)

		return images
	
elif action == "album":
	uri = sys.argv[4] if len(sys.argv) > 4 else "spotify:album:3OmHoatMS34vM7ZKb4WCY3"

	album = sp.metadata_request(uri)
	print album.name+" - "+album.artist[0].name+"\n"
	
	uris = [SpotifyUtil.gid2uri("track", track.gid) for track in album.disc[0].track]
	tracks = sp.metadata_request(uris)
	for track in tracks:
		print track.name

elif action == "playlists":
	username = sys.argv[4] if len(sys.argv) > 4 else sp.username

	playlist_uris = [playlist.uri for playlist in sp.playlists_request(username).contents.items]
	playlists = [sp.playlist_request (playlist_uri) for playlist_uri in playlist_uris]

	for playlist in playlists:
		display_playlist(playlist)
		
elif action == "playlist":
	uri = sys.argv[4] if len(sys.argv) > 4 else "spotify:user:topsify:playlist:1QM1qz09ZzsAPiXphF1l4S"

	playlist = sp.playlist_request(uri)
	display_playlist(playlist)

elif action == "tracks_toplist":
	top_tracks = sp.toplist_request("tracks")
	print top_tracks
Example #3
0
elif action == "album":
    uri = sys.argv[4] if len(sys.argv) > 4 else "spotify:album:3OmHoatMS34vM7ZKb4WCY3"

    album = sp.metadata_request(uri)
    print album.name+" - "+album.artist[0].name+"\n"

    uris = [SpotifyUtil.gid2uri("track", track.gid) for track in album.disc[0].track]
    tracks = sp.metadata_request(uris)
    for track in tracks:
        print track.name

elif action == "playlists":
    username = sys.argv[4] if len(sys.argv) > 4 else sp.username

    playlist_uris = [playlist.uri for playlist in sp.playlists_request(username).contents.items]
    playlists = [sp.playlist_request(playlist_uri) for playlist_uri in playlist_uris]

    for playlist in playlists:
        display_playlist(playlist)

elif action == "playlist":
    uri = sys.argv[4] if len(sys.argv) > 4 else "spotify:user:topsify:playlist:1QM1qz09ZzsAPiXphF1l4S"

    playlist = sp.playlist_request(uri)
    display_playlist(playlist)

elif action == "tracks_toplist":
    top_tracks = sp.toplist_request("tracks")
    print top_tracks
Example #4
0
        sys.argv) > 4 else "spotify:album:3OmHoatMS34vM7ZKb4WCY3"

    album = sp.metadata_request(uri)
    print album.name + " - " + album.artist[0].name + "\n"

    uris = [utils.gid2uri("track", track.gid) for track in album.disc[0].track]
    tracks = sp.metadata_request(uris)
    for track in tracks:
        print track.name

elif action == "playlists":
    username = sys.argv[4] if len(sys.argv) > 4 else sp.username

    playlist_uris = [
        playlist.uri
        for playlist in sp.playlists_request(username).contents.items
    ]
    playlists = [
        sp.playlist_request(playlist_uri) for playlist_uri in playlist_uris
    ]

    for playlist in playlists:
        display_playlist(playlist)

elif action == "playlist":
    uri = sys.argv[4] if len(
        sys.argv
    ) > 4 else "spotify:user:topsify:playlist:1QM1qz09ZzsAPiXphF1l4S"

    playlist = sp.playlist_request(uri)
    display_playlist(playlist)
class Spotify():
	def __init__(self, username, password): 
		self.api = SpotifyAPI()
		self.api.connect(username, password)

	def logged_in(self):
		return self.api.logged_in

	def logout(self):
		self.api.disconnect()

	@Cache
	def getPlaylists(self, username = None):
		username = self.api.username if username == None else username
		playlist_uris = []
		if username == self.api.username:
			playlist_uris += ["spotify:user:"******":starred"]

		playlist_uris += [playlist.uri for playlist in self.api.playlists_request(username).contents.items]
		return [self.objectFromURI(playlist_uri) for playlist_uri in playlist_uris]

	def search(self, query):
		return self.api.search_request(query)

	def objectFromInternalObj(self, object_type, objs, nameOnly = False):
		if nameOnly:
			return ", ".join([obj.name for obj in objs])

		try:
			uris = [SpotifyUtil.gid2uri(object_type, obj.gid) for obj in objs]
		except:
			uris = SpotifyUtil.gid2uri(object_type, objs.gid)

		return self.objectFromURI(uris)

	def objectFromURI(self, uris):
		if self.logged_in() == False:
			return False

		uris = [uris] if type(uris) != list else uris

		uri_type = SpotifyUtil.get_uri_type(uris[0])
		if uri_type == False:
			return None
		elif uri_type == "playlist":
			results =  [SpotifyPlaylist(self, uri=uri) for uri in uris]
		elif uri_type in ["track", "album", "artist"]:
			uris = [uri for uri in uris if not SpotifyUtil.is_local(uri)]
			objs = self.api.metadata_request(uris)
			objs = [objs] if type(objs) != list else objs
			if uri_type == "track":
				results = [SpotifyTrack(self, obj=obj) for obj in objs]
			elif uri_type == "album":
				results =  [SpotifyAlbum(self, obj=obj) for obj in objs]
			elif uri_type == "artist":
				results =  [SpotifyArtist(self, obj=obj) for obj in objs]
		else:
			return None

		if len(results) == 1:
			return results[0]
		else:
			return results

	@staticmethod
	def imagesFromArray(image_objs):
		images = {}
		for image_obj in image_objs:
			size = str(image_obj.width)
			images[size] = "https://d3rt1990lpmkn.cloudfront.net/" + size + "/" + SpotifyUtil.gid2id(image_obj.file_id)

		return images