コード例 #1
0
        //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);
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        // 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);
        }
コード例 #5
0
        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"));
        }
コード例 #6
0
        //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);
        }