public async void SetUp()
        {
            var requestBuilder         = A.Fake <IRequestBuilder>();
            var httpClient             = A.Fake <IHttpClient>();
            var responseXml            = File.ReadAllText("StubResponses/Playlists.xml");
            var validPlaylistsResponse = new Response(HttpStatusCode.OK, responseXml);

            A.CallTo(() => httpClient.Send(null)).WithAnyArguments().Returns(Task.FromResult(validPlaylistsResponse));
            var fluentApi = new FluentApi <UserPlaylists>(httpClient, requestBuilder);

            _userPlaylists = await fluentApi.Please();
        }
		public async void SetUp()
		{
			var requestBuilder = A.Fake<IRequestBuilder>();
			var httpClient = A.Fake<IHttpClient>();
			var responseParser = new ResponseParser(new ApiResponseDetector());

			var responseXml = File.ReadAllText("StubResponses/Playlists.xml");
			var validPlaylistsResponse = new Response(HttpStatusCode.OK, responseXml);
			A.CallTo(() => httpClient.Send(null)).WithAnyArguments().Returns(Task.FromResult(validPlaylistsResponse));
			var fluentApi = new FluentApi<UserPlaylists>(httpClient, requestBuilder, responseParser);

			_userPlaylists = await fluentApi.Please();
		}
        protected async Task AddNewPlaylist(string listName)
        {
            PlaylistModel playlist = new PlaylistModel()
            {
                Name = listName, User_ID = UserId
            };

            UserPlaylists.Add(playlist);
            await Database.AddPlaylist(listName);

            SelectedPlaylist = await Database.GetPlaylistWithKey(playlist);

            ShowPlaylists = false;
        }
        public static UserPlaylists GetUsersPlaylists(string AccessToken, string UserId, int limit)
        {
            var client  = new RestClient("https://api.spotify.com/v1");
            var request = new RestRequest("users/{userid}/playlists?limit={limit}", Method.GET);

            request.AddUrlSegment("userid", UserId);
            request.AddUrlSegment("limit", limit.ToString());
            request.AddHeader("Authorization", string.Format("Bearer {0}", AccessToken));

            // execute api call and deserialize the results into the object
            IRestResponse response  = client.Execute(request);
            UserPlaylists playlists = new UserPlaylists();

            playlists = JsonConvert.DeserializeObject <UserPlaylists>(response.Content);

            playlists.Playlists = playlists.Playlists.Where(x => x.name != "Groupify").ToList();

            return(playlists);
        }
 protected void SelectPlaylist()
 {
     SelectedPlaylist = UserPlaylists.Find(x => x.Name == PlaylistName);
     ShowPlaylists    = false;
 }
Beispiel #6
0
        public JsonResult CraftPlaylist(string AccessToken, string NameString)
        {
            List <string> NameList = NameString.Trim().Trim(',').Split(',').ToList();

            double TotalDancability = 0.0;
            int    DancabilityCount = 0;
            double TotalEnergy      = 0.0;
            int    EnergyCount      = 0;
            double TotalSpeechiness = 0.0;
            int    SpeechinessCount = 0;
            SortedDictionary <string, int> Genres = new SortedDictionary <string, int>();

            List <string> ArtistIds = new List <string>();

            foreach (string name in NameList)
            {
                UserPlaylists playlists = APICalls.GetUsersPlaylists(AccessToken, name, 10);
                List <string> TrackIds  = new List <string>();

                Random rand = new Random();
                playlists.Playlists = playlists.Playlists.OrderBy(x => rand.Next()).Take(3).ToList();

                foreach (Item pl in playlists.Playlists)
                {
                    PlaylistTracks tracks = APICalls.GetPlaylistTracks(AccessToken, name, pl.id);
                    if (tracks.Songs != null)
                    {
                        foreach (PlaylistItem pli in tracks.Songs)
                        {
                            if (pli.track.id != null)
                            {
                                TrackIds.Add(pli.track.id);
                            }
                            if (pli.track.artists[0].id != null)
                            {
                                if (!ArtistIds.Contains(pli.track.artists[0].id))
                                {
                                    ArtistIds.Add(pli.track.artists[0].id);
                                }
                            }
                        }
                    }
                }

                for (int i = 0; i <= ArtistIds.Count / 20; i++)
                {
                    ArtistList artists = APICalls.GetArtistList(AccessToken, ArtistIds.Take(20).ToList());
                    if (artists.artists == null || artists.artists.Count == 0)
                    {
                        break;
                    }

                    foreach (FullArtist fa in artists.artists)
                    {
                        foreach (object o in fa.genres)
                        {
                            if (Genres.ContainsKey(o.ToString()))
                            {
                                Genres[o.ToString()]++;
                            }
                            else
                            {
                                Genres.Add(o.ToString(), 1);
                            }
                        }
                    }
                    try
                    {
                        for (int z = 1; z <= 20; z++)
                        {
                            ArtistIds.RemoveAt(0);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }

                MultipleSongFeatures features = APICalls.GetMultipleSongFeatures(AccessToken, TrackIds);
                foreach (AudioFeature af in features.features)
                {
                    TotalDancability += af.danceability;
                    DancabilityCount++;
                    TotalEnergy += af.energy;
                    EnergyCount++;
                    TotalSpeechiness += af.speechiness;
                    SpeechinessCount++;
                }
            }

            var    sortedDict  = Genres.OrderByDescending(x => x.Value).Take(5).ToDictionary(x => x.Key, x => x.Value);
            string GenreString = "";

            foreach (KeyValuePair <string, int> o in sortedDict)
            {
                GenreString += o.Key + ",";
            }
            GenreString = GenreString.Trim(',');
            double AvgDancability = TotalDancability / DancabilityCount;
            double AvgEnergy      = TotalEnergy / EnergyCount;
            double AvgSpeechiness = TotalSpeechiness / SpeechinessCount;

            TracksBasedOnSeed SeededTracks = APICalls.GetPlaylistTracksByVariable(AccessToken, 40, AvgDancability, AvgEnergy, AvgSpeechiness, GenreString);

            return(Json(new { Tracks = SeededTracks, AvgDancability = AvgDancability, AvgEnergy = AvgEnergy, AvgSpeechiness = AvgSpeechiness, Genres = GenreString.Replace(",", ", ") }));
        }
Beispiel #7
0
        public JsonResult CraftPlaylistFromGenres(string AccessToken, string NameString, string[] GenreStringList)
        {
            List <string> NameList = NameString.Trim().Trim(',').Split(',').ToList();

            double TotalDancability = 0.0;
            int    DancabilityCount = 0;
            double TotalEnergy      = 0.0;
            int    EnergyCount      = 0;
            double TotalSpeechiness = 0.0;
            int    SpeechinessCount = 0;
            //SortedDictionary<string, int> Genres = new SortedDictionary<string, int>();

            List <string> ArtistIds = new List <string>();

            foreach (string name in NameList)
            {
                UserPlaylists playlists = APICalls.GetUsersPlaylists(AccessToken, name, 10);
                List <string> TrackIds  = new List <string>();

                Random rand = new Random();
                playlists.Playlists = playlists.Playlists.OrderBy(x => rand.Next()).Take(3).ToList();

                foreach (Item pl in playlists.Playlists)
                {
                    PlaylistTracks tracks = APICalls.GetPlaylistTracks(AccessToken, name, pl.id);
                    if (tracks.Songs != null)
                    {
                        foreach (PlaylistItem pli in tracks.Songs)
                        {
                            if (pli.track.id != null)
                            {
                                TrackIds.Add(pli.track.id);
                            }
                            if (pli.track.artists[0].id != null)
                            {
                                if (!ArtistIds.Contains(pli.track.artists[0].id))
                                {
                                    ArtistIds.Add(pli.track.artists[0].id);
                                }
                            }
                        }
                    }
                }

                MultipleSongFeatures features = APICalls.GetMultipleSongFeatures(AccessToken, TrackIds);
                foreach (AudioFeature af in features.features)
                {
                    TotalDancability += af.danceability;
                    DancabilityCount++;
                    TotalEnergy += af.energy;
                    EnergyCount++;
                    TotalSpeechiness += af.speechiness;
                    SpeechinessCount++;
                }
            }

            //var sortedDict = Genres.OrderByDescending(x => x.Value).Take(5).ToDictionary(x => x.Key, x => x.Value);
            string GenreString = "";

            foreach (string o in GenreStringList)
            {
                GenreString += o + ",";
            }
            GenreString = GenreString.Trim(',');
            double AvgDancability = TotalDancability / DancabilityCount;
            double AvgEnergy      = TotalEnergy / EnergyCount;
            double AvgSpeechiness = TotalSpeechiness / SpeechinessCount;

            TracksBasedOnSeed SeededTracks = APICalls.GetPlaylistTracksByVariable(AccessToken, 40, AvgDancability, AvgEnergy, AvgSpeechiness, GenreString);

            return(Json(new { Tracks = SeededTracks, AvgDancability = AvgDancability, AvgEnergy = AvgEnergy, AvgSpeechiness = AvgSpeechiness, Genres = GenreString.Replace(",", ", ") }));
        }