Exemplo n.º 1
0
    def get_context_data(self, **kwargs):
        query = self.request.GET.get('query', '')
        parts = query.lower().split()
        artists, songs = [], []

        if any(p in moods for p in parts):
            for part in parts:
                if part in moods:
                    artists.extend(eartist.similar(mood=part, results=15))
        if any(p in styles for p in parts):
            for part in parts:
                if part in styles:
                    artists.extend(eartist.similar(style=part, results=15))

        random.shuffle(artists)

        extracted = eartist.extract(query)
        if extracted:
            for artist in extracted:
                artists.insert(0, eartist.Artist(id=artist.id))
            artists.extend(eartist.similar(ids=[art.id for art in extracted], results=15))

        if artists:
            songs = list(flatten_iterator(a.get_songs() for a in artists))
            #random.shuffle(songs)

        real = {}
        for song in songs:
            real[song.title] = song

        retval = [{
            'track': s.title,
            'artist': s.artist_name,
            'album': ''
        } for s in real.values()[:15]]

        print retval, len(retval)

        info = requests.get('http://api.jamendo.com/get2/id+name+duration+stream+album_name+artist_name/track/json/track_album+album_artist/',
                            params={'searchquery': query, 'streamencoding': 'ogg2', 'n': 5})

        items = [{
            'track': s['name'],
            'artist': s['artist_name'],
            'album': s['album_name']
        } for s in json.loads(info.content)]
        for item in items:
            retval.append(item)

        return retval
Exemplo n.º 2
0
def crawl():
    while len(queue) > 0:
        hot, id, fid, name = get_hottest()
        sfid = short_fid(fid)
        if id in sim_done:
            continue
        print "%4d %4d %.3f %s" % (len(sim_done), len(queue), hot, name)

        print >> outfile, "artist", S, id, S, name, S, sfid, S, hot
        try:
            sims = artist.similar(
                ids=[id],
                results=12,
                buckets=["hotttnesss", "familiarity", "id:" + idspace],
                limit=True,
                min_hotttnesss=min_hotttnesss,
            )
            for s in sims:
                proc_artist(s)
            for s in sims:
                simfid = s.get_foreign_id(idspace=idspace)
                ssimfid = short_fid(simfid)
                try:
                    print >> outfile, "sim", S, id, S, name, S, s.id, S, s.name, S, s.hotttnesss, S, ssimfid
                    if s.id not in sim_done:
                        queue.append((s.hotttnesss, s.id, simfid, s.name))
                except UnicodeDecodeError:
                    print "skipping artist because of unicode error", s.id
            sim_done.add(id)
        except urllib2.URLError:
            time.sleep(10)
        except util.EchoNestAPIError:
            time.sleep(5)
Exemplo n.º 3
0
def crawl():
    while len(queue) > 0:
        hot, id, fid, name = get_hottest()
        sfid = short_fid(fid)
        if id in sim_done:
            continue
        print "%4d %4d %.3f %s" % (len(sim_done), len(queue), hot, name)

        print >> outfile, 'artist', S, id, S, name, S, sfid, S, hot
        try:
            sims = artist.similar(
                ids=[id],
                results=12,
                buckets=['hotttnesss', 'familiarity', 'id:' + idspace],
                limit=True,
                min_hotttnesss=min_hotttnesss)
            for s in sims:
                proc_artist(s)
            for s in sims:
                simfid = s.get_foreign_id(idspace=idspace)
                ssimfid = short_fid(simfid)
                try:
                    print >> outfile, 'sim', S, id, S, name, S, s.id, S, s.name, S, s.hotttnesss, S, ssimfid
                    if s.id not in sim_done:
                        queue.append((s.hotttnesss, s.id, simfid, s.name))
                except UnicodeDecodeError:
                    print "skipping artist because of unicode error", s.id
            sim_done.add(id)
        except urllib2.URLError:
            time.sleep(10)
        except util.EchoNestAPIError:
            time.sleep(5)
Exemplo n.º 4
0
 def GET(self, name):
     out_names = []
     try:
         similar = artist.similar(name)
     except util.EchoNestAPIError:
         return "error"
         
     for a in similar:
         out_names.append(a.name)
     return json.dumps(out_names)
Exemplo n.º 5
0
def suggest_artist(pos_seeds, neg_seeds, fame):
    # fame_level 0-10, 1 is Justin Bieber, 0 is a Tufts band.
    fame_level = fame / 10.0
    print pos_seeds
    print neg_seeds
    pos_artists = [artist.Artist(a) for a in pos_seeds] if pos_seeds else None
    neg_artists = [artist.Artist(a) for a in neg_seeds] if neg_seeds else None

    #Totally arbitrary, but it maintains a good level of hotttnesss.
    hot_level = (1 - fame_level)/2 + 0.1
    similars = []
    dissimilars = []

    # Decreases needed hotness level and increases familiarity upper bound
    # until a band is found.
    if pos_artists and neg_artists:
      while len(similars) < 1:
          similars = artist.similar(ids =[a.id for a in pos_artists],
                                    results = 20,
                                    max_familiarity = fame_level,
                                    min_hotttnesss = hot_level)
          dissimilars = artist.similar(ids = [a.id for a in neg_artists],
                                       results = 20,
                                       max_familiarity = fame_level,
                                       min_hotttnesss = hot_level)
          hot_level -= 0.05
          fame_level += 0.025
      similars = [a for a in similars if not a in dissimilars]
    else:
      while len(similars) < 1:
          similars = artist.similar(ids =[a.id for a in pos_artists],
                                    results = 20,
                                    max_familiarity = fame_level,
                                    min_hotttnesss = hot_level)
          hot_level -= 0.05
          fame_level += 0.025

    r = randint(0,len(similars)-1)
    return similars[r]
Exemplo n.º 6
0
def get_en_similar(artist):
	similar_list = []

	similars = echonest_artist.similar(artist['echonest_data']['echonest_id'], results=99)

	if len(similars) > 0:
		for similar in similars:

			print "Echonest similar: {0}".format(similar)
			
			similar_insert = find_insert({"echonest_data.echonest_id":similar.id}, {"name":similar.name, "echonest_data":{"echonest_id":similar.id}}, False, False)
			similar_list.append(similar_insert['_id'])

		update = db.artist.update({"_id" : artist['_id']}, {"$set": {"echonest_data.echonest_similar": similar_list}})
Exemplo n.º 7
0
def relatedArtist(artist_id):

    listArtist = []

    ##try:
    bk = artist.Artist(artist_id)
    ##except WebServiceError as exc:
    ##    print("Something went wrong with the request: %s" % exc)
    ##else:

    similar = artist.similar(ids=bk.id, results=5)

    for similar_artist in similar:
        listArtist.append((similar_artist.name, similar_artist.id, "similar"))

    return listArtist
Exemplo n.º 8
0
def makePlaylist(searchArtist, chordProgression):
    # Create the playlist
    playlist = []
    
    # Choose from similar artists
    similarArtists = artist.similar(names=searchArtist);
    
    for i in range(len(chordProgression)):
        randArtist = random.randint(0, len(similarArtists) - 1)
        artistName = similarArtists[randArtist].name
        
        # Search for a song by the chosen artist in the specified key or mode
        playSongs = song.search(artist=artistName, key=chordProgression[i]['key'], mode=chordProgression[i]['mode'],  buckets=["tracks","id:7digital"], limit="true")
        #playSongs = song.search(artist=artistName, key=chordProgression[i]['key'], mode=chordProgression[i]['mode'],  buckets=["tracks","id:rdio-us-streaming"], limit="true")
    
        #if len(playSongs) == 0:
        #    print chordProgression[i]['name'], artistName, "NOT FOUND"
        #else:
        #    print chordProgression[i]['name'], artistName, playSongs[0].title    

        playTrack = playSongs[0].get_tracks("7digital")
        #playTrack = playSongs[0].get_foreign_ids("rdio-us-streaming");

        if len(playSongs) > 0 and len(playTrack) > 0 :

            playlist.append({'chord' : chordProgression[i]['name'], 
                             'artist' : artistName, 
                             'title' : playSongs[0].title,
                             'key' : chordProgression[i]['key'],
                             'mode' : chordProgression[i]['mode'],
                             'mp3' : playTrack[0]['preview_url'],
                             'image' : playTrack[0]['release_image']  })
                             #'rdio' : playTrack[0]['foreign_id'] })
        elif len(playSongs) > 0  :
            playlist.append({'chord' : chordProgression[i]['name'],
                            'artist' : artistName, 
                            'title' : playSongs[0].title,
                            'key' : chordProgression[i]['key'],
                            'mode' : chordProgression[i]['mode'],
                            'mp3' : "NOT FOUND",
                            'image' : "NOT FOUND"})
                            #'rdio' : "NOT FOUND" })

    return playlist
Exemplo n.º 9
0
def makePlaylist(searchArtist, chordProgression):
    # Create the playlist
    playlist = []
    
    # Choose from similar artists
    similarArtists = artist.similar(names=searchArtist);
    
    for i in range(len(chordProgression)):
        randArtist = random.randint(0, len(similarArtists) - 1)
        
        artistName = similarArtists[randArtist].name

        # Search for a song by the chosen artist in the specified key or mode
        playSongs = song.search(artist=artistName, key=chordProgression[i]['key'], mode=chordProgression[i]['mode'],  buckets=["tracks",catalogId], limit="true")
    
        if len(playSongs) > 0:
            playTrack = playSongs[0].get_tracks(catalog)

            if len(playSongs) > 0 and len(playTrack) > 0 :
    
                playlist.append({'chord' : chordProgression[i]['name'], 
                                 'artist' : artistName, 
                                 'title' : playSongs[0].title,
                                 'key' : chordProgression[i]['key'],
                                 'mode' : chordProgression[i]['mode'],
                                 'mp3' : playTrack[0]['preview_url'],
                                 'image' : playTrack[0]['release_image']  })
            elif len(playSongs) > 0  :
                playlist.append({'chord' : chordProgression[i]['name'],
                                'artist' : artistName, 
                                'title' : playSongs[0].title,
                                'key' : chordProgression[i]['key'],
                                'mode' : chordProgression[i]['mode'],
                                'mp3' : "NOT FOUND",
                                'image' : "NOT FOUND"})

    return playlist
Exemplo n.º 10
0
    def search(self,search_artist,user,new_search):
        cherrypy.response.headers['Content-Type'] = 'application/json'
        # This doesn't quite work yet, commented out for purpose of demonstration
        #if user=='1':
        #    if similar.__len__>1:
        #        if new_search=='1':
        #            del similar[0:len(similar)]
        #        if similar.__len__==5:
        #            print "Length is 5"
        #            del similar[1]
        #        if search_artist not in [art.name for art in similar]:
        #            similar.append(artist.Artist(search_artist))
        #    else:
        #        similar.append(artist.Artist(search_artist))
        #print [art.name for art in similar]
        similarArtists=artist.similar(names=artist.Artist(search_artist),results=50)
        random.shuffle(similarArtists)      
        currentImage=artist.Artist(search_artist).get_images(results=50)
        random.shuffle(currentImage)
        currentImageURL = currentImage[0]['url']
        tracks=song.search(artist=search_artist,song_min_hotttnesss=0.5,results=50)
        self.currentName = search_artist
        random.shuffle(tracks)
     

        currentArtist = artist.Artist(search_artist).name
        #print currentTrackName, currentArtist
        image1=similarArtists[0].get_images(results=50)
        random.shuffle(image1)
        image2=similarArtists[1].get_images(results=50)
        random.shuffle(image2)
        image3=similarArtists[2].get_images(results=50)
        random.shuffle(image3)
        #print image1, image2, image3

        if(len(tracks)== 0):

            tracks = song.search(artist=search_artist, results=10)

            if(len(tracks) == 0):
                currentTrackName = "No Track Found!"

            else:
                currentTrackName = tracks[0].title
        else:
            currentTrackName=tracks[0].title

        for t in tracks:
            streamLink = self.play_song(t.title, currentArtist)
            currentTrackName = t.title

            if(streamLink is None or streamLink is ""):
                continue
            else:
                print "Stream link getting returned is: " + streamLink
                if streamLink.__len__==0:
                    status="error"
                else:
                    status="success"
                return simplejson.dumps(dict(currentTrack=currentTrackName,currentArtistName=currentArtist,currentArtistImage=currentImageURL,simArtist1Name=similarArtists[0].name,simArtist1Image=image1[0]['url'],simArtist2Name=similarArtists[1].name,simArtist2Image=image2[0]['url'],simArtist3Name=similarArtists[2].name,simArtist3Image=image3[0]['url'],streamURL=streamLink,status=status))
 
        streamLink = self.play_song(currentTrackName, currentArtist)
# Uncomment to set the API key explicitly. Otherwise Pyechonest will
# look in the ECHO_NEST_API_KEY environment variable for the key.
#from pyechonest import config
#config.ECHO_NEST_API_KEY='YOUR API KEY'

from pyechonest import artist

hottt_artists = artist.top_hottt(results=3)

similar_artists = artist.similar(names=[hottt_artist.name for hottt_artist in hottt_artists])

for similar_artist in similar_artists:
    similar_to = [] 
    for hottt_artist in hottt_artists:
        if similar_artist in hottt_artist.similar:
            similar_to.append(hottt_artist.name)

    print '%-30s %16s   %s' % (similar_artist.name[0:30], 
                               similar_artist.hotttnesss, 
                               '...is in the top 15 similars of: ' + ', '.join(similar_to))
Exemplo n.º 12
0
		print "<li><a href='#%s'>%s<a>" % (art.name,art.name)
	print "<li><a href='#similar'>Similar Artists</a></ul>"
	for i in range(len(artists)):
		art = artists[i]
		bios = art.biographies
		largest = 0
		# Uses longest biography 
		for b in range(len(bios)):
			if len(bios[b]['text']) > len(bios[largest]['text']):
				largest = b
		bio = bios[largest]['text']
		img = art.images[2]['url']
		print "<br><a id='%s'><br><h1>%s</h1>" % (art.name,art.name)
		print "</h1><img src='%s' style='height:300px'>" % img.encode('utf-8')
		print bio.encode('utf-8')
	print "<br><a id='similar'><br><h1>Similar Artists</h1><ul>"
	for s in similar:
		print "<li>%s" % s
	print "</ul>"
	print "</body></html>"

if __name__ == '__main__':
	if len(sys.argv) < 4:
		print "Usage:\n\t$ python %s [artist1] [artist2] [artist3] [...] > output.html" % sys.argv[0]
	else:
		artists = []
		for i in range(1,len(sys.argv)):
			artists.append(queryArtist(sys.argv[i]))
		similar = artist.similar(names=artists)
		printHTML(artists,similar)
Exemplo n.º 13
0
# Uncomment to set the API key explicitly. Otherwise Pyechonest will
# look in the ECHO_NEST_API_KEY environment variable for the key.
#from pyechonest import config
#config.ECHO_NEST_API_KEY='YOUR API KEY'

from pyechonest import artist

hottt_artists = artist.top_hottt(results=3)

similar_artists = artist.similar(
    names=[hottt_artist.name for hottt_artist in hottt_artists])

for similar_artist in similar_artists:
    similar_to = []
    for hottt_artist in hottt_artists:
        if similar_artist in hottt_artist.similar:
            similar_to.append(hottt_artist.name)

    print '%-30s %16s   %s' % (
        similar_artist.name[0:30], similar_artist.hotttnesss,
        '...is in the top 15 similars of: ' + ', '.join(similar_to))
Exemplo n.º 14
0
    def search(self, search_artist, user, new_search):
        cherrypy.response.headers['Content-Type'] = 'application/json'
        # This doesn't quite work yet, commented out for purpose of demonstration
        #if user=='1':
        #    if similar.__len__>1:
        #        if new_search=='1':
        #            del similar[0:len(similar)]
        #        if similar.__len__==5:
        #            print "Length is 5"
        #            del similar[1]
        #        if search_artist not in [art.name for art in similar]:
        #            similar.append(artist.Artist(search_artist))
        #    else:
        #        similar.append(artist.Artist(search_artist))
        #print [art.name for art in similar]
        similarArtists = artist.similar(names=artist.Artist(search_artist),
                                        results=50)
        random.shuffle(similarArtists)
        currentImage = artist.Artist(search_artist).get_images(results=50)
        random.shuffle(currentImage)
        currentImageURL = currentImage[0]['url']
        tracks = song.search(artist=search_artist,
                             song_min_hotttnesss=0.5,
                             results=50)
        self.currentName = search_artist
        random.shuffle(tracks)

        currentArtist = artist.Artist(search_artist).name
        #print currentTrackName, currentArtist
        image1 = similarArtists[0].get_images(results=50)
        random.shuffle(image1)
        image2 = similarArtists[1].get_images(results=50)
        random.shuffle(image2)
        image3 = similarArtists[2].get_images(results=50)
        random.shuffle(image3)
        #print image1, image2, image3

        if (len(tracks) == 0):

            tracks = song.search(artist=search_artist, results=10)

            if (len(tracks) == 0):
                currentTrackName = "No Track Found!"

            else:
                currentTrackName = tracks[0].title
        else:
            currentTrackName = tracks[0].title

        for t in tracks:
            streamLink = self.play_song(t.title, currentArtist)
            currentTrackName = t.title

            if (streamLink is None or streamLink is ""):
                continue
            else:
                print "Stream link getting returned is: " + streamLink
                if streamLink.__len__ == 0:
                    status = "error"
                else:
                    status = "success"
                return simplejson.dumps(
                    dict(currentTrack=currentTrackName,
                         currentArtistName=currentArtist,
                         currentArtistImage=currentImageURL,
                         simArtist1Name=similarArtists[0].name,
                         simArtist1Image=image1[0]['url'],
                         simArtist2Name=similarArtists[1].name,
                         simArtist2Image=image2[0]['url'],
                         simArtist3Name=similarArtists[2].name,
                         simArtist3Image=image3[0]['url'],
                         streamURL=streamLink,
                         status=status))

        streamLink = self.play_song(currentTrackName, currentArtist)
Exemplo n.º 15
0
def getSimilarArtists(Artist, min_results=15, results=15):
    similar = artist.similar(Artist.name, buckets = ["familiarity", "hotttnesss"], min_results=min_results, results=results)
    return similar
Exemplo n.º 16
0
def similar_artists():
    artists = [artist.Artist("spotify-WW:artist:2SHhfs4BiDxGQ3oxqf0UHY"),
               artist.Artist("spotify-WW:artist:0LcJLqbBmaGUft1e9Mm8HV")]
    print "Artists similar to", ", ".join([a.name for a in artists])
    for a in artist.similar(ids=[a.id for a in artists], buckets=["id:spotify-WW"]):
        print "-", a.name, "(%s)" % a.get_foreign_id("spotify-WW").replace("spotify-WW", "spotify")