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); }
// 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); }