コード例 #1
0
def createNewPlaylist(artist_name):
    cur = db.cursor()
    sql_create_playlists = '''CREATE TABLE IF NOT EXISTS playlist (id INTEGER PRIMARY KEY AUTO_INCREMENT,rootArtist VARCHAR(128));'''
    sql_create_songs = '''CREATE TABLE IF NOT EXISTS songs (playlistId INTEGER, songOrder INTEGER,artistName VARCHAR(128), albumName VARCHAR(256), trackName VARCHAR(256));'''
    cur.execute(sql_create_playlists)
    cur.execute(sql_create_songs)

    sql_insert_artist_name = '''INSERT INTO playlist (rootArtist) VALUES ('%s');''' % (
        artist_name)
    cur.execute(sql_insert_artist_name)
    playlistId = cur.lastrowid

    root_artist_id = fetchArtistId(artist_name)
    edgelist = getEdgeList(root_artist_id, 2)
    g = pandasToNetworkX(edgelist)
    songs = []
    for i in range(30):
        artist_id = (randomCentralNode(g))
        songOrder = i + 1
        artist_name = fetchArtistInfo(artist_id)['name']
        album_ids = fetchAlbumIds(artist_id)
        random_album = np.random.choice(album_ids)
        random_album_name = fetchAlbumInfo(random_album)['name']
        random_track_name = fetchARandomTrack(random_album)[1]
        songs.append((playlistId, songOrder, artist_name, random_album_name,
                      random_track_name))

    insertSongs = '''INSERT INTO songs 
                     (playlistId, songOrder, artistName, albumName, trackName)
                     VALUES
                     (%s, %s, %s, %s, %s)'''
    cur.executemany(insertSongs, songs)
    db.commit()

    print "playlists updated"
コード例 #2
0
def createNewPlaylist(artist_name):
    cur = db.cursor()
    cur.execute('''CREATE TABLE IF NOT EXISTS playlists (id INTEGER PRIMARY KEY AUTO_INCREMENT, rootArtist VARCHAR(128));''')
    cur.execute('''CREATE TABLE IF NOT EXISTS songs (playlistId INTEGER, songOrder INTEGER, artistName VARCHAR(128), albumName VARCHAR(256));''')

    artists_id = fetchArtistId(artist_name)
    edge_list = getEdgeList(artists_id, 2)
    g = pandasToNetworkX(edge_list)

    randomArtists=[]

    limit = 30
    while limit > 0:
        random_artist = randomCentralNode(G)
        album_id_list = fetchAlbumIds(random_artist)
        if album_id_list == []:
            pass
        else:
            randomArtists.append(random_artist)
            limit -= 1
コード例 #3
0
def createNewPlaylist(input_name):
    cur = db.cursor()
    make_table_playlists = '''CREATE TABLE IF NOT EXISTS playlists (id INTEGER PRIMARY KEY AUTO_INCREMENT, rootArtist VARCHAR(128));'''
    make_table_songs = '''CREATE TABLE IF NOT EXISTS songs (playlistId INTEGER, songOrder INTEGER, artistName VARCHAR(128), albumName VARCHAR(256), trackName VARCHAR(256));'''
    cur.execute(make_table_playlists)
    cur.execute(make_table_songs)

    depth = 2
    artists_id = fetchArtistId(input_name)
    edge_list = getEdgeList(artists_id,depth)
    G = pandasToNetworkX(edge_list)
    random_artists = []
    
    limit = 30
    while limit > 0:
        random_artist = randomCentralNode(G)
        album_id_list = fetchAlbumIds(random_artist)
        if album_id_list == []:
            pass
        else:
            random_artists.append(random_artist)
            limit = limit -1

    artist_names = []
    album_list = []
    for artist_id in random_artists:
        artist = fetchArtistInfo(artist_id)
        artist_name = artist['name']
        artist_names.append(artist_name)
        album_id_list = fetchAlbumIds(artist_id)
        random_album = (random.choice(album_id_list))
        random_album_info = fetchAlbumInfo(random_album) 
        random_album_name = random_album_info['name']
        tupl = (random_album_name, random_album)
        album_list.append(tupl)

    random_track_list = []
    for album in album_list:
        get_album_tracks_url = 'https://api.spotify.com/v1/albums/' + album[1] + '/tracks'
        req = requests.get(get_album_tracks_url)
        if req.ok == False: 
            print "Error in get_album_tracks_url Request"
        req.json()
        myjson = req.json()
        get_items = myjson.get('items')
        track_list = []
        for i in range(len(get_items)):
            get_track_name = get_items[i]['name']
            track_list.append(get_track_name)
            random_track = (random.choice(track_list))
        random_track_list.append(random_track)

    artist_name_in = """INSERT INTO playlists (rootArtist) VALUES ('%s')""" % (input_name)
    #playlistId = cur.lastrowid
    cur.execute(artist_name_in)
    com_play = """SELECT MAX(id) FROM playlists;"""
    cur.execute(com_play)
    playlistId = cur.fetchall()
    playlistId = playlistId[0][0]
    for i in range(len(random_track_list)):
        songOrder = i+1
        Artist_Name = '"' + artist_names[i] + '"'
        Artist_Name.replace('\'', "")
        Album_Name = '"' + album_list[i][0] + '"'
        Album_Name.replace('\'', "")
        Track_Name = '"' + random_track_list[i] + '"'
        Track_Name.replace('\'', "")
        #print Artist_Name, Album_Name, Track_Name
        sql = """INSERT INTO songs (playlistId, songOrder, artistName, albumName, trackName) VALUES (%s, %s, %s, %s, %s)""" % (playlistId, songOrder, Artist_Name, Album_Name, Track_Name)
        cur.execute(sql)
        db.commit()
        
    cur.close()
コード例 #4
0
 ID = fetchArtistId(a)
 combined_Edge_List = getEdgeList(ID, 2)
 if len(artist_names) > 1:
     for artist_name in artist_names:
         ID = fetchArtistId(artist_name)
         edgeList1 = getEdgeList(ID, 2)
         combined_Edge_List = combineEdgelists(combined_Edge_List,
                                               edgeList1)
 b = combined_Edge_List
 c = pandasToNetworkX(b)
 nodes = []
 albums = []
 tracks = []
 tracks_names = []
 for i in range(30):
     d = randomCentralNode(c)
     nodes.append(d)
 for i in range(30):
     e = nodes[i]
     f = fetchAlbumIds(e)
     i = len(f) - 1
     g = randint(0, i)
     h = f[g]
     albums.append(h)
 for i in range(30):
     album_id = albums[i]
     url = "https://api.spotify.com/v1/albums/" + album_id + "/tracks"
     req = requests.get(url)
     json_data = req.json()
     j = len(json_data['items']) - 1
     k = json_data['items'][j]['id']
コード例 #5
0
def createNewPlaylist(artist_name):
    cur = db.cursor()
    cur.execute('''CREATE TABLE IF NOT EXISTS songs(
 	playlistId INTEGER,
 	songOrder VARCHAR(255),
 	artistName VARCHAR(255),
 	albumName VARCHAR(255),
 	trackName VARCHAR(255));''')
    cur.execute('''CREATE TABLE IF NOT EXISTS playlists(
 	id INTEGER PRIMARY KEY
 	AUTO_INCREMENT,
 	rootArtist VARCHAR(255));''')
    a = artist_name
    ID = fetchArtistId(a)
    combined_Edge_List = getEdgeList(ID, 2)
    b = combined_Edge_List
    c = pandasToNetworkX(b)
    cur.execute('''
 	INSERT INTO playlists
 	(rootArtist)
 	VALUES
 	(%s)''', (artist_name))
    g = cur.lastrowid
    nodes = []
    albums = []
    tracks = []
    tracks_names = []
    while len(albums) < 30:
        e = randomCentralNode(c)
        f = fetchAlbumIds(e)
        if len(f) == 0:
            continue
        i = len(f) - 1
        g = randint(0, i)
        h = f[g]
        albums.append(h)
    for i in range(30):
        album_id = albums[i]
        url = "https://api.spotify.com/v1/albums/" + album_id + "/tracks"
        req = requests.get(url)
        json_data = req.json()
        j = len(json_data['items']) - 1
        k = json_data['items'][j]['id']
        tracks.append(k)
    for i in range(30):
        track_id = tracks[i]
        url = "https://api.spotify.com/v1/tracks/" + track_id
        req = requests.get(url)
        json_data = req.json()
        names = json_data['name']
        tracks_names.append(names)
    for i in range(30):
        x = fetchAlbumInfo(albums[i])
        ALBUM_NAME = x['name']
        print(x['artist_id'])
        y = fetchArtistInfo(x['artist_id'])
        ARTIST_NAME = y['name']
        TRACK_NAME = tracks_names[i]
        x = i + 1
        cur.execute(
            '''
 		INSERT INTO songs
 		(playlistId, songOrder, artistName, albumName, trackName)
 		VALUES
 		(%s, %s, %s, %s, %s )''', (g, x, ARTIST_NAME, ALBUM_NAME, TRACK_NAME))
    db.commit()
while counter2 < numberoffiles:
    combinededgelist.append(anN.readEdgeList(listoffilenm[subsequentindex]))
    subsequentindex += 1
    counter2 += 1

combinededgelist.to_csv("combinededgelist.csv", index=False)

combinededgelistdf = anN.readEdgeList("combinededgelist.csv")

network = anN.pandasToNetworkX(combinededgelistdf)

listof30artists = []

while len(listof30artists) != 30:
    artist = anN.randomCentralNode(network)
    listof30artists.append(artist)

listof30albums = []
singleslist = []

for artist in listof30artists:
    albums = fAl.fetchAlbumIds(artist)
    if len(albums) == 0:
        url = "https://api.spotify.com/v1/artists/" + artist + "/albums?&album_type=single"
        req = requests.get(url)
        singledata = req.json()['items']
        for x in singledata:
            singleslist.append(x['id'])
            random_single = np.random.choice(singleslist)
            listof30albums.append(random_single)
for i in range(len(artists_ids)):
	artist_id = artists_ids[i]
	edge_list = getEdgeList(artist_id,depth)
	edgeList_list.append(edge_list)

concat_Edgelists = edgeList_list[0]
#concat_Edgelists.columns = ['artist', 'related_artist']
for i in range(len(edgeList_list)):
	put_together = combineEdgeLists(concat_Edgelists, edgeList_list[i])
	concat_Edgelists = put_together

g = pandasToNetworkX(concat_Edgelists)

random_artists = []
for i in range(30):
	random_artist = randomCentralNode(g)
	random_artists.append(random_artist)

artist_names = []
album_list = []
for artist_id in random_artists:
	artist = fetchArtistInfo(artist_id)
	artist_name = artist['name']
	artist_names.append(artist_name)
	album_id_list = fetchAlbumIds(artist_id)
	random_album = (random.choice(album_id_list))
	random_album_info = fetchAlbumInfo(random_album) 
	random_album_name = random_album_info['name']
	tupl = (random_album_name, random_album)
	album_list.append(tupl)
コード例 #8
0
print "input artists are ", artist_names
artistID_list = [fetchArtistId(artist_name) for artist_name in artist_names]
for artistID in artistID_list:
	writeEdgeList(artistID, 2, artistID + '.csv')

combinedEdgeList = readEdgeList(artistID_list[0] + '.csv')

for artistID in artistID_list[1:]:
    edgeList = readEdgeList(artistID + '.csv')
    combinedEdgeList = combineEdgeLists(combinedEdgeList, edgeList)

g = pandasToNetworkX(combinedEdgeList)

sample = []
for i in range(30):
	sample.append(randomCentralNode(g))

outfile = open('playlist.csv', 'w', encoding = 'utf-8')
outfile.write(u'artist_name,album_name,track_name\n')

def fetchARandomTrack(album_id):
	url = 'https://api.spotify.com/v1/albums/'+ album_id +'/tracks' 
	req = requests.get(url)
	data = req.json()
	items = data['items']
	row = np.random.choice(items)
	track_id = row['id']
	track_name = row['name']
	return (track_id, track_name)

コード例 #9
0
def createnewPlaylist(artistName):
    cur = db.cursor()
    maketableplaylists = """CREATE TABLE IF NOT EXISTS playlists (id INTEGER PRIMARY KEY AUTO_INCREMENT, rootArtist VARCHAR(255));"""
    maketablesongs = """CREATE TABLE IF NOT EXISTS songs (playlistId INTEGER, songOrder INTEGER, artistName VARCHAR(255), albumName VARCHAR(255), trackName VARCHAR(255));"""
    cur.execute(maketableplaylists)
    cur.execute(maketablesongs)
    #db.commit()

    artist_names = artistName
    depth = 2  #change depth at will

    artists_id = fetchArtistId(artistName)
    edge_list = getEdgeList(artists_id, depth)

    g = pandasToNetworkX(edge_list)

    random_artists = []
    for i in range(30):
        random_artist = randomCentralNode(g)
        random_artists.append(random_artist)

    artist_names = []
    album_list = []
    for artist_id in random_artists:
        artist = fetchArtistInfo(artist_id)
        artist_name = artist['name']
        artist_names.append(artist_name)
        album_id_list = fetchAlbumIds(artist_id)
        random_album = (random.choice(album_id_list))
        while random_album == False:
            random_album = (random.choice(album_id_list))
        random_album_info = fetchAlbumInfo(random_album)
        random_album_name = random_album_info['name']
        tupl = (random_album_name, random_album)
        album_list.append(tupl)

    random_track_list = []
    for album in album_list:
        get_album_tracks_url = 'https://api.spotify.com/v1/albums/' + album[
            1] + '/tracks'
        req = requests.get(get_album_tracks_url)
        if req.ok == False:
            print "Error in get_album_tracks_url Request"
        req.json()
        myjson = req.json()
        get_items = myjson.get('items')
        track_list = []
        for i in range(len(get_items)):
            get_track_name = get_items[i]['name']
            track_list.append(get_track_name)
            random_track = (random.choice(track_list))
            while random_track == False:
                random_track = (random.choice(track_list))
            random_track_list.append(random_track)

    #playlist = """INSERT INTO playlists (id);"""
    #cur.execute(playlist)
    #db.commit()?
    playlistID = 1
    #get_id_number = """SELECT MAX(id) from playlists;"""
    #cur.execute(get_id_number)
    #playlist_id = cur.fetchall()
    #playlistID = playlist_id[0][0]
    #print playlistID
    artist_name_in = """INSERT INTO playlists (rootArtist) VALUES ('%s')""" % (
        artistName)
    cur.execute(artist_name_in)
    #playlistID = cur.lastrowid
    #db.commit()
    for i in range(len(random_track_list)):
        Artist_Name = '"' + artist_names[i] + '"'
        Artist_Name.replace('\'', "")
        #Artist_Name.replace("'", "")
        Artist_Name.replace("\"", "")
        Album_Name = '"' + album_list[i][0] + '"'
        Album_Name.replace('\'', "")
        #Album_Name.replace('(', "")
        #Album_Name.replace(')', "")
        #Album_Name.replace("'", "")
        Album_Name.replace("\"", "")
        Track_Name = '"' + random_track_list[i] + '"'
        Track_Name.replace('\'', "")
        #Track_Name.replace('(', "")
        #Track_Name.replace(')', "")
        #Track_Name.replace("'", "")
        Track_Name.replace("\"", "")
        songOrder = i + 1
        playlistID = cur.lastrowid
        print Artist_Name
        print Album_Name
        print Track_Name
        sql = """INSERT INTO songs (playlistId, songOrder, artistName, albumName, trackName) 
        VALUES ('%s', '%s', '%s', '%s', '%s')""" % (
            playlistID, songOrder, Artist_Name, Album_Name, Track_Name
        )  #could undo quotes around %s's
        cur.execute(sql)
        db.commit()

    cur.close()
コード例 #10
0
def createNewPlaylist(ArtistName):
    c = db.cursor()
    #create tables"
    make_table_playlists = '''CREATE TABLE IF NOT EXISTS playlists (id INTEGER PRIMARY KEY AUTO_INCREMENT, \
                                                                    rootArtist VARCHAR(128));'''
    make_table_songs = '''CREATE TABLE IF NOT EXISTS songs (playlistId INTEGER, \
                                                            songOrder INTEGER, \
                                                            artistName VARCHAR(128), \
                                                            albumName VARCHAR(256), \
                                                            trackName VARCHAR(256));'''
    c.execute(make_table_playlists)
    c.execute(make_table_songs)

    #generate centered network
    depth = 2
    artists_id = fetchArtistId(ArtistName)
    edge_list = getEdgeList(artists_id,depth)
    random_artists = []
    
    i = 30
    while i != 0:
        random_artist = randomCentralNode(pandasToNetworkX(edge_list))
        album_id_list = fetchAlbumIds(random_artist)
        if album_id_list == []:#check if this artist has albums
            pass
        else:
            random_artists.append(random_artist)
            i = i -1

    #fetch 30 data
    artist_names = []
    album_list = []
    for artist_id in random_artists:
        artist = fetchArtistInfo(artist_id)
        artist_name = artist['name']
        artist_names.append(artist_name)
        album_id_list = fetchAlbumIds(artist_id)
        random_album = (random.choice(album_id_list))
        random_album_info = fetchAlbumInfo(random_album) 
        random_album_name = random_album_info['name']
        tupl = (random_album_name, random_album)
        album_list.append(tupl)

    random_track_list = []
    for album in album_list:
        url = 'https://api.spotify.com/v1/albums/' + album[1] + '/tracks'
        req = requests.get(url)
        if req.ok == False: 
            print "Error in request"
        req.json()
        myjson = req.json()
        info = myjson.get('items')
        track_list = []
        for i in range(len(info)):
            track_name = info[i]['name']
            track_list.append(track_name)
            random_track = (random.choice(track_list))
        random_track_list.append(random_track)

    artist_name_in = """INSERT INTO playlists (rootArtist) VALUES ('%s')""" % (ArtistName)
    c.execute(artist_name_in)
    com_play = """SELECT MAX(id) FROM playlists;"""
    c.execute(com_play)
    playlistId = c.fetchall()
    #print playlistId
    playlistId = playlistId[0][0]
    for i in range(len(random_track_list)):
        songOrder = i+1
        Artist_Name = '"' + artist_names[i] + '"'
        Artist_Name.replace('\'', "")
        Album_Name = '"' + album_list[i][0] + '"'
        Album_Name.replace('\'', "")
        Track_Name = '"' + random_track_list[i] + '"'
        Track_Name.replace('\'', "")
        sql = """INSERT INTO songs (playlistId, songOrder, artistName, albumName, trackName) VALUES (%s, %s, %s, %s, %s)""" % (playlistId, songOrder, Artist_Name, Album_Name, Track_Name)
        c.execute(sql)
        db.commit()
        
    c.close()
コード例 #11
0
    # I addend in an exception to deal with invalid artists in fetchArtistId
    Artist_IDs = [x for x in Artist_IDs if x is not None]

    # Combines edge lists into one master list
    depth = 2
    edgeList = getEdgeList(Artist_IDs[0], depth)
    if len(Artist_IDs) > 1:
        for artist in Artist_IDs[1:]:
            temp = getEdgeList(artist,depth)
            edgeList = combineEdgeLists(edgeList,temp)

    g = pandasToNetworkX(edgeList)

    rndm_artists = []
    for artist in range(30):
        rndm_artists.append(randomCentralNode(g))

    # creates a list of tuples of related (artist,album,song)
    # I altered the code from assignment 5 so that album name
    # is part of the returned dictionary in fetchAlbumInfo and
    # created a new function in fetchAlbums that chooses a random
    # song from an album

    to_write = []
    for artist in rndm_artists:
        albums = fetchAlbumIds(artist)
        rndm_album_id = np.random.choice(albums)
        song_name = fetchRndmSong(rndm_album_id)
        album_info = fetchAlbumInfo(rndm_album_id)
        artist_name = album_info['name']
        album_name = album_info['album_name']
    #generate the network
    old_edgelist = None
    artistidlist = [fetchArtistId(i) for i in artist_names]

    for i in artistidlist:
        edgelist = getEdgeList(i, 2)
        new_edgelist = combineEdgeLists(edgelist, old_edgelist)
        old_edgelist = new_edgelist

        #pick tracks
        k = 0
        artist_list = []
        while k != 30:
            artist_dict = {}
            artist_dict['artist_name'] = fetchArtistInfo(
                randomCentralNode(pandasToNetworkX(old_edgelist)))['name']
            #print artist_dict['artist_name']
            album_id = np.random.choice(
                fetchAlbumIds(fetchArtistId(artist_dict['artist_name'])))
            #print album_id
            artist_dict['album_name'] = fetchAlbumInfo(album_id)['name']
            #print artist_dict['album_name']
            track_id = np.random.choice(fetchTrackIds(album_id))
            #print track_id
            artist_dict['track_name'] = fetchTrackInfo(track_id)['name']
            #print artist_dict['track_name']
            artist_list.append(artist_dict)
            k += 1

#write to csv
        f = open("playlist.csv", 'w', encoding='utf-8')