예제 #1
0
        public async Task <RecommendationsResponseDTO> GetRecommendations(string artistsIDs, string genresIDs)
        {
            RecommendationsResponseDTO recommendations = null;

            // double work here wanted a list of strings but got a string of comma separated items
            // so first to an array the passed as List
            // TODO: see if possible to receive a list of strings from js
            List <string> artists = artistsIDs != null?artistsIDs.Split(',').ToList() : null;

            List <string> genres = genresIDs != null?genresIDs.Split(',').ToList() : null;

            recommendations = await rest.GetRecommendationsAsync(await RetrieveToken(), artists, genres);

            return(recommendations);
        }
예제 #2
0
        // Fetch recommendations based on given artists and/or genres
        public async Task <RecommendationsResponseDTO> GetRecommendationsAsync(string token, List <string> artistsIDs, List <string> genreIDs)
        {
            RecommendationsResponseDTO recommendations = null;
            int    maxRecommendations = 10;
            int    minPopularity      = 50;
            string Endpoint           = "https://api.spotify.com/v1/recommendations?";

            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            string value = "Bearer " + token;

            client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", value);

            HttpResponseMessage response = new HttpResponseMessage();
            string requestParameters     = string.Format("limit={0}&min_popularity={1}", maxRecommendations, minPopularity);

            //according to the Spotify api only a max of 5 seed strings can be sent to retrieve recommendations
            //we give priority to artists over genre if received more than 5 from the user

            int maxSeeds = 5;

            //build artist IDs seed
            if (artistsIDs != null && artistsIDs.Count() > 0)
            {
                string seedArtists = "";

                foreach (string artistID in artistsIDs)
                {
                    if (seedArtists != "")
                    {
                        seedArtists += ",";
                    }
                    seedArtists += artistID;
                    if (--maxSeeds == 0)
                    {
                        break;
                    }
                }
                requestParameters += "&seed_artists=" + seedArtists;
            }

            //build artist IDs seed
            if (genreIDs != null && genreIDs.Count() > 0 && maxSeeds > 0)
            {
                string seedGenres = "";

                foreach (string genreID in genreIDs)
                {
                    if (seedGenres != "")
                    {
                        seedGenres += ",";
                    }
                    seedGenres += genreID;
                    if (--maxSeeds == 0)
                    {
                        break;
                    }
                }
                requestParameters += "&seed_genres=" + seedGenres;
            }

            string uri = string.Format(Endpoint + requestParameters);

            response = await client.GetAsync(uri);

            if (response.IsSuccessStatusCode)
            {
                var httpContent = response.Content;

                StreamReader reader = new StreamReader(await httpContent.ReadAsStreamAsync(), Encoding.UTF8);
                recommendations = (RecommendationsResponseDTO)JsonConvert.DeserializeObject(reader.ReadToEnd(), typeof(RecommendationsResponseDTO));
            }

            return(recommendations);
        }