Added the 'collaboration.py' example

This commit is contained in:
Paul Lamere
2014-04-07 13:10:25 -04:00
parent 2f36e11277
commit 9105e58562
7 changed files with 137 additions and 8 deletions

View File

@@ -0,0 +1,73 @@
import sys
import spotipy
import pprint
sp = None
max_artists = 100
artist_queue = []
queued = set()
'''
This example generates a collaboration network suitable for plotting with graphviz
Typical usage:
% python collaborations.py 32 deadmau5 > deadmau5.gv
% graphviz deadmau5.gv
'''
def add_artists_from_albums(name, spid):
offset = 0
limit = 50
while True:
try:
response = sp.artist_albums(spid, limit=limit, offset=offset)
except spotipy.SpotifyException:
# a known issue with the API occasionally yields an error when retrieving albums
sys.stderr.write('trouble getting albums for %s' % (name,))
return
for album in response['albums']:
for artist in album['artists']:
add_artist(name, album['name'], artist)
offset += limit
if not response['paging']['next']:
break
def fn(name):
return name.replace('"', '').encode('utf-8')
def add_artist(name, album_name, artist):
if not artist['spotify_uri'] in queued:
if name:
print(' "%s" -> "%s" [label="%s"];' % (fn(name), fn(artist['name']), fn(album_name)))
queued.add(artist['spotify_uri'])
artist_queue.append( ( artist['name'], artist['spotify_uri']) )
def process_artists():
done = set()
while len(artist_queue) > 0:
name, spid = artist_queue.pop(0)
if spid not in done:
done.add(spid)
if len(queued) > max_artists:
break
else:
add_artists_from_albums(name, spid)
if __name__ == '__main__':
if len(sys.argv) < 3:
print('Usage: %s max_artists artist name' % (sys.argv[0]))
print('Example: %s 100 Rihanna' % (sys.argv[0]))
else:
max_artists = int(sys.argv[1])
artist = ' '.join(sys.argv[2:])
sp = spotipy.Spotify()
results = sp.search(artist, type='artist')
artists = results['artists']
if len(artists) > 0:
add_artist(None, None, artists[0])
print('digraph G {')
process_artists()
print('}')

31
examples/deadmau5.gv Normal file
View File

@@ -0,0 +1,31 @@
digraph G {
"deadmau5" -> "Billy Newton-Davis" [label="All U Ever Want"];
"deadmau5" -> "Melleefresh" [label="Afterhours (The Remixes)"];
"deadmau5" -> "Imogen Heap" [label="Telemiscommunications (Remixes)"];
"deadmau5" -> "Kaskade" [label="DJ Hero EP"];
"Billy Newton-Davis" -> "Spekrfreks" [label="Back It Up"];
"Billy Newton-Davis" -> "Cajjmere Wray" [label="Fuk Chat"];
"Billy Newton-Davis" -> "Nino Anthony" [label="Everything I Wanna Do Remixes"];
"Melleefresh" -> "Wutam" [label="Do You Wannit Now"];
"Melleefresh" -> "Stereo Scum" [label="How Dangerous"];
"Melleefresh" -> "Tyler Michaud" [label="Kisses Remixes"];
"Imogen Heap" -> "Ron van den Beuken" [label="Headlock"];
"Spekrfreks" -> "SpekrFreks Feat. Michelle Ericsson" [label="Tears of Blood"];
"Spekrfreks" -> "Michelle Ericsson" [label="Voyager EP"];
"Nino Anthony" -> "Mr. Eyez" [label="Night Muzik"];
"Tyler Michaud" -> "Interstate" [label="Junkie"];
"Tyler Michaud" -> "Moonbeam" [label="Openhearted"];
"Ron van den Beuken" -> "Simon Demillo" [label="Chaos"];
"Ron van den Beuken" -> "Tatana" [label="United Music"];
"Ron van den Beuken" -> "Fidde Stiggson" [label="Visions"];
"Ron van den Beuken" -> "Tom Pulse" [label="Time"];
"Michelle Ericsson" -> "Alex Torn" [label="Electro Avenue"];
"Mr. Eyez" -> "John Joshua feat. Mr Eyez" [label="Way of Life"];
"Mr. Eyez" -> "Doug Smuggler" [label="Sukka MC's"];
"Mr. Eyez" -> "New Vegas" [label="Hard Funk"];
"Interstate" -> "Hammer & Bennett" [label="Coldharbour Selections Part 8"];
"Tom Pulse" -> "Tom Pulse feat. Fit4Funk" [label="Flying Through the Air"];
"Hammer & Bennett" -> "Lens" [label="Coldharbour Selections Part 10"];
"Lens" -> "Santiago Nino" [label="Coldharbour Selections Part 6"];
"Santiago Nino" -> "Hammer" [label="Coldharbour Selections Part 19"];
}

BIN
examples/deadmau5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

17
examples/show_album.py Normal file
View File

@@ -0,0 +1,17 @@
# shows artist info for a URN or URL
import spotipy
import sys
import pprint
if len(sys.argv) > 1:
urn = sys.argv[1]
else:
urn = 'spotify:artist:3jOstUTkEu2JkjvRdBA5Gu'
sp = spotipy.Spotify()
artist = sp.artist(urn)
pprint.pprint(artist)