Esempio n. 1
0
def save_shared_playlist(user_id):
	""" saves a shared playlist ."""
	#get session user and user
	#get the shared songs
	#add the shared songs to playlist db
	session_user = session['user']

	shared_prefs = crud.get_shared_tracks(session_user, user_id)
	song_attributes = crud.get_song_attributes(session_user)
	stdev = crud.get_stdev(song_attributes)

	## need to get the playlist name from form
	user_input = request.get_json()
	playlist_name = user_input['playlistName']
	
	similar_songs = crud.get_all_similar_songs(session_user, user_id, 10)
	## get song id for each item
	song_ids = []
	for item in similar_songs:
		song_id = crud.get_song_id(item[1])
		song_ids.append(song_id)

	playlist_1 = playlist_user.save_shared_playlist(session_user, user_id, song_ids, playlist_name)

	

	return jsonify({'status': 'saved'})
Esempio n. 2
0
def get_similar_user():
	"""Returns the users that are most similar to the session user."""

	# gets session user's info
	user_id = session['user']
	user = crud.get_user_by_id(user_id)
	

	# get stdev data for user
	session_user_attributes = crud.get_song_attributes(user_id)

	session_user_stdev = crud.get_stdev(session_user_attributes)
	print(session_user_stdev)
	# get all users
	all_users = crud.get_users()


	#stores min difference
	min_diff = [1000, '']
	# iterate through all users that are not the session user that have recs.
	for user_x in all_users:
		if user_x.user_id != user.user_id and crud.user_has_song_recs(user_x.user_id):
			user_diff = (abs(user.user_valence - user_x.user_valence)/session_user_stdev['valence']) 
			+ (abs(user.user_speechiness - user_x.user_speechiness)/session_user_stdev['speechiness'])
			+ (abs(user.user_acousticness - user_x.user_acousticness)/session_user_stdev['acousticness'])
			+ (abs(user.user_energy - user_x.user_energy)/session_user_stdev['energy'])
			+ (abs(user.user_danceability - user_x.user_danceability)/session_user_stdev['danceability'])
			+ (abs(user.user_loudness - user_x.user_loudness)/session_user_stdev['loudness'])
			# if the difference is smaller, update the array with the difference and ID
			if user_diff < min_diff[0]:
				min_diff = [user_diff, user_x.email]
		else: 
			pass
	
	similar_user_email = min_diff[1]
	similar_user = crud.get_user_by_email(similar_user_email)

	# adjust loudness for graph
	adj_user_loudness = abs(user.user_loudness)/10
	adj_similar_user_loudness = abs(similar_user.user_loudness)/10
	return jsonify({'similar_user': similar_user_email,
					'current_user_info': [user.user_valence, user.user_speechiness, 
					user.user_acousticness, user.user_energy, user.user_danceability, adj_user_loudness],
					'similar_user_info': [similar_user.user_valence, similar_user.user_speechiness, 
					similar_user.user_acousticness, similar_user.user_energy, 
					similar_user.user_danceability, adj_similar_user_loudness]}
					)
Esempio n. 3
0
def show_shared_songs(user_email):
	"""Show shared playlist for current user and selected user."""
	## how to feed in user id here
	## probably need to get and post
   
	session_user = session['user']
	## get the user id
	user = crud.get_user_by_email(user_email)
	user_id = user.user_id

	# gets attributes of user's recommended tracks

	shared_prefs = crud.get_shared_tracks(session_user, user_id)
	song_attributes = crud.get_song_attributes(session_user)
	stdev = crud.get_stdev(song_attributes)

	similar_songs = crud.get_all_similar_songs(session_user, user_id, 10)

	return jsonify({'shared songs': similar_songs})
Esempio n. 4
0
def view_combined_playlist(user_id):
	"""Returns the combined playlist."""

	user = crud.get_user_by_id(user_id)

	#jsonifies user info
	json_user = User.as_dict(user)

	session_user = session['user']
	## get the user id
	# gets attributes of user's recommended tracks
	shared_prefs = crud.get_shared_tracks(session_user, user_id)
	song_attributes = crud.get_song_attributes(session_user)
	stdev = crud.get_stdev(song_attributes)
	
	similar_songs = crud.get_all_similar_songs(session_user, user_id, 10)
	
	combined_dict = {
		'user': json_user,
		'playlist': similar_songs,
	}
	return jsonify(combined_dict)
Esempio n. 5
0
def get_song_recs():
	"""Gets song recommendations for user."""

	# # how to make this so it will update when user updates songs? automatic?
	user_id = session['user']
	user = crud.get_user_by_id(user_id)
	song_recs = crud.get_recommended_tracks(user_id)
	

	# #adds each recommended song to DB
	for song_uri in song_recs:
		#gets song title
		title = api.get_song_title(song_uri)
		

		# gets adio features for song
		audio_fx = api.get_audio_features(song_uri)
		tempo = audio_fx['tempo']
		valence = audio_fx['valence']
		danceability = audio_fx['danceability']
		energy = audio_fx['energy']
		loudness = audio_fx['loudness']
		acousticness = audio_fx['acousticness']
		speechiness = audio_fx['speechiness']

		# gets song artist
		artist = api.get_song_artist(song_uri)

		#creates instance of song in song db
		crud.create_song(title, song_uri, tempo, valence, danceability, 
			energy, loudness, acousticness, speechiness, artist)

		#gets song id
		song_id = crud.get_song_id(song_uri)

		#creates instance of rec track in rec track db 
		crud.create_recommended_track(user_id, song_uri, title, song_id)

	# gets all rec tracks for user	
	user_song_recs = crud.get_user_song_recs(user_id)

	## adds avg attribute values for user and commits to db
	user_1_attributes = crud.get_song_attributes(user_id)

	#gets the avg and stdev for user
	user_1_stdev = crud.get_stdev(user_1_attributes)
	user_1_avg = crud.get_average(user_1_attributes)


	# gets averages for each attribute and adds to db
	valence_avg = user_1_avg['valence']
	user_details.update_valence_value(user, valence_avg)


	speechiness_avg = user_1_avg['speechiness']
	user_details.update_speechiness_value(user, speechiness_avg)

	acousticness_avg = user_1_avg['acousticness']
	user_details.update_acousticness_value(user, acousticness_avg)

	danceability_avg = user_1_avg['danceability']
	user_details.update_danceability_value(user, danceability_avg)

	energy_avg = user_1_avg['energy']
	user_details.update_energy_value(user, energy_avg)

	loudness_avg = user_1_avg['loudness']
	user_details.update_loudness_value(user, loudness_avg)

	## could add a try. if it errors, return error. or do something more nuanced
	return jsonify({'status': 'success'})
Esempio n. 6
0
        loudness = audio_features['loudness']
        acousticness = audio_features['acousticness']
        speechiness = audio_features['speechiness']
        crud.create_song(title, song, tempo, valence, danceability, energy,
                         loudness, acousticness, speechiness, artist)
        # get song ID and use to create recommended track
        song_id = crud.get_song_id(song)
        crud.create_recommended_track(user.user_id, song, title, song_id)

    # assign valence, danceable, etc values to the user
    # pulls attributes for each of the user's songs
    user_1_attributes = crud.get_song_attributes(user.user_id)

    #gets the avg and stdev for user
    user_1_avg = crud.get_average(user_1_attributes)
    user_1_stdev = crud.get_stdev(user_1_attributes)

    # gets averages for each attribute and adds to db
    valence_avg = user_1_avg['valence']
    user_details.update_valence_value(user, valence_avg)

    speechiness_avg = user_1_avg['speechiness']
    user_details.update_speechiness_value(user, speechiness_avg)

    acousticness_avg = user_1_avg['acousticness']
    user_details.update_acousticness_value(user, acousticness_avg)

    danceability_avg = user_1_avg['danceability']
    user_details.update_danceability_value(user, danceability_avg)

    energy_avg = user_1_avg['energy']