//creates the playlist from the selected artist private Playlist getPlaylistFromArtist(SeveralArtists relatedArtists, int size, int range) { List <string> genres = new List <string>(); int relatedArtistsCount = relatedArtists.Artists.Count; int artists = (int)((range / 5.0) * relatedArtistsCount); var rand = new Random(); Playlist returnedPlaylist = new Playlist(); FullTrack track = new FullTrack(); Dictionary <string, string> trackLengths = new Dictionary <string, string>(); List <string> playlistURIs = new List <string>(); SeveralTracks tracks = new SeveralTracks { Tracks = new List <FullTrack>() }; for (int i = 0; i < artists; i++) { tracks.Tracks.AddRange(_spotify.GetArtistsTopTracks(relatedArtists.Artists[i].Id, "US").Tracks); } //shuffles the list of tracks int n = tracks.Tracks.Count; while (n > 1) { n--; int k = rand.Next(n + 1); FullTrack temp = tracks.Tracks[k]; tracks.Tracks[k] = tracks.Tracks[n]; tracks.Tracks[n] = temp; } int count = 0; int iterations = 0; if (tracks.Tracks.Count != 0) { do { track = tracks.Tracks[iterations]; if (track != null && !returnedPlaylist.hasTrack(track.Id)) { trackLengths.Add(track.Id, getTrackLengthString(track.DurationMs)); returnedPlaylist.TrackList.Add(track); playlistURIs.Add(track.Uri); count++; } iterations++; } while (count < size && iterations < tracks.Tracks.Count); } TempData["TrackLengths"] = trackLengths; TempData["PlaylistURIs"] = playlistURIs; return(returnedPlaylist); }
private SeveralArtists GetArtistsPicturesFromIds(string ids) { try { SeveralArtists artists = null; using (WebClient web = new System.Net.WebClient()) { web.Headers.Add(SPOTIFY_AUTHORIZATION_HEADER, string.Format(SPOTIFY_ACCESS_TOKEN, AccessToken)); string response = web.DownloadString(string.Format(_spotifySecrets.GetUrlArtistInformation(), ids)); artists = JsonConvert.DeserializeObject <SeveralArtists>(response); } return(artists); } catch (Exception) { throw; } }
public String GetRelatedArtistByID(String artist_ID) { try { SeveralArtists artists = _spotify_web_api.GetRelatedArtists(artist_ID); Random random = new Random(); int index = 0; int count = artists.Artists.Count - 1; if (count != index) { index = random.Next(0, artists.Artists.Count - 1); } return(artists.Artists[index].Id); } catch (Exception e) { Console.WriteLine(e.ToString()); return(null); } }
// Generates a question for the API. private async Task <Question> GenerateQuestionAsync() { // Retrieve recommendations from Spotify Recommendations recommendations = GenerateRecommendations(); if (recommendations == null) { return(null); } // Retrieve photo of artist FullArtist artist = SpotifyHelper.Instance.Api.GetArtist(recommendations.Tracks[0].Artists[0].Id); // Retrieve lyrics from ApiSeeds Lyrics lyrics = await LyricsHelper.Instance.GetLyricsAsync(recommendations.Tracks[0].Artists[0].Name, recommendations.Tracks[0].Name); if (lyrics == null) { return(null); } // Creates an instance of the correct quiz answer Answer answer = new Answer(); answer.Artist = lyrics.Result.Artist.Name; answer.Photo = artist.Images[0].Url; answer.Song.SongName = recommendations.Tracks[0].Name; answer.Song.SongId = recommendations.Tracks[0].Id; answer.Song.SongLyrics = lyrics.Result.Track.Text; answer.Song.Language.LanguageCode = lyrics.Result.Track.Lang.Code; answer.Song.Language.LanguageName = lyrics.Result.Track.Lang.Name; Question.Answer = answer; // Retrieve related artists from Spotify SeveralArtists severalArtists = SpotifyHelper.Instance.Api.GetRelatedArtists(recommendations.Tracks[0].Artists[0].Id); int count = 0; foreach (var relatedArtist in severalArtists.Artists) { Question.RelatedArtists[count].Artist = relatedArtist.Name; Question.RelatedArtists[count].Photo = relatedArtist.Images[0].Url; count++; if (count == 3) { break; } } if (Question.RelatedArtists.Length != 3) { return(null); } return(Question); }
public async Task <ActionResult> CreatePlaylist(string inputId, bool isTrack, int range, int numberOfTracks) { IndexViewModel viewModel = new IndexViewModel(); viewModel.profile = (PrivateProfile)TempData["User"]; viewModel.api = (SpotifyWebAPI)TempData["Api"]; Token userToken = (Token)TempData["Token"]; AuthorizationCodeAuth userAuth = (AuthorizationCodeAuth)TempData["Auth"]; if (userToken != null) { if (userToken.IsExpired()) { Token newToken = await userAuth.RefreshToken(userToken.RefreshToken); viewModel.api.AccessToken = newToken.AccessToken; viewModel.api.TokenType = newToken.TokenType; } } viewModel.isTrack = isTrack; Token token = await auth.GetToken(); _spotify = new SpotifyWebAPI() { AccessToken = token.AccessToken, TokenType = token.TokenType }; string artistId = inputId; List <string> trackArtistIds = new List <string>(); SeveralArtists relatedArtists = new SeveralArtists(); List <SeveralArtists> relatedArtistsLists = new List <SeveralArtists>(); //if the search item was a track //get all the artists from that track //then get all the related artists for those artists //then create the playlsit if (isTrack) { viewModel.searchedTrack = _spotify.GetTrack(inputId); artistId = viewModel.searchedTrack.Artists[0].Id; viewModel.title = viewModel.searchedTrack.Name + " Playlist"; viewModel.trackArtists = displayArtistsNames(viewModel.searchedTrack); viewModel.imageUrl = viewModel.searchedTrack.Album.Images[1].Url; relatedArtists.Artists = new List <FullArtist>(); int i = 0; foreach (var artist in viewModel.searchedTrack.Artists) { relatedArtistsLists.Add(_spotify.GetRelatedArtists(artist.Id)); relatedArtistsLists[i].Artists.Insert(0, _spotify.GetArtist(artist.Id)); i++; } viewModel.Playlist = getPlaylistFromTrack(relatedArtistsLists, numberOfTracks, range, viewModel.searchedTrack.Id); viewModel.trackLengths = (Dictionary <string, string>)TempData["TrackLengths"]; } //if the search item was an artist, get the related artists, and create a playlist else { viewModel.searchedArtist = _spotify.GetArtist(artistId); viewModel.title = viewModel.searchedArtist.Name + " Playlist"; viewModel.imageUrl = viewModel.searchedArtist.Images[1].Url; relatedArtists = _spotify.GetRelatedArtists(artistId); relatedArtists.Artists.Insert(0, (_spotify.GetArtist(artistId))); viewModel.Playlist = getPlaylistFromArtist(relatedArtists, numberOfTracks, range); viewModel.trackLengths = (Dictionary <string, string>)TempData["TrackLengths"]; } TempData["PlaylistURIs"] = (List <string>)TempData["PlaylistURIs"]; TempData["Playlist"] = viewModel.Playlist; TempData["Token"] = userToken; TempData["Auth"] = userAuth; TempData["ViewModel"] = viewModel; return(RedirectToAction("Create")); }
//creates a playlist from the selected track private Playlist getPlaylistFromTrack(List <SeveralArtists> relatedArtistsList, int size, int range, string searchTrackId) { int relatedArtistsCount = 0; List <string> genres = new List <string>(); SeveralArtists reOrderedArtists = new SeveralArtists(); reOrderedArtists.Artists = new List <FullArtist>(); foreach (var artistList in relatedArtistsList) { relatedArtistsCount += artistList.Artists.Count; } int artistsAmount = (int)((range / 5.0) * relatedArtistsCount); //in the case that the song has multiple artists, //i don't want the list of related artists to be: related artists from the 1st, then 2nd then 3rd artist etc... //i want them to be spread out evenly to give a better playlist based on the songs artists for (int i = 0; i < relatedArtistsCount; i++) { for (int j = 0; j < relatedArtistsList.Count; j++) { if (i < relatedArtistsList[j].Artists.Count) { reOrderedArtists.Artists.Add(relatedArtistsList[j].Artists[i]); } } } var rand = new Random(); Playlist returnedPlaylist = new Playlist(); FullTrack track = new FullTrack(); SeveralTracks tracks = new SeveralTracks { Tracks = new List <FullTrack>() }; for (int i = 0; i < artistsAmount; i++) { tracks.Tracks.AddRange(_spotify.GetArtistsTopTracks(reOrderedArtists.Artists[i].Id, "US").Tracks); } //shuffles the list of tracks int n = tracks.Tracks.Count; while (n > 1) { n--; int k = rand.Next(n + 1); FullTrack temp = tracks.Tracks[k]; tracks.Tracks[k] = tracks.Tracks[n]; tracks.Tracks[n] = temp; } Dictionary <string, string> trackLengths = new Dictionary <string, string>(); int count = 0; int iterations = 0; if (tracks.Tracks.Count != 0) { do { track = tracks.Tracks[iterations]; if (track != null && !returnedPlaylist.hasTrack(track.Id)) { trackLengths.Add(track.Id, getTrackLengthString(track.DurationMs)); returnedPlaylist.TrackList.Add(track); playlistURIs.Add(track.Uri); count++; } iterations++; } while (count < size && iterations < tracks.Tracks.Count); } TempData["PlaylistURIs"] = playlistURIs; TempData["TrackLengths"] = trackLengths; return(returnedPlaylist); }