public async Task <List <Domain.Track> > GetRecommendedTracksAsync(PartyGoer partyGoer, RecommendedTracksSeed recommendedTrackSeeds) { List <string> seedTrackUris = recommendedTrackSeeds?.SeedTrackUris; List <string> seedArtistUris = recommendedTrackSeeds?.SeedArtistUris; if (seedTrackUris?.Count + seedArtistUris?.Count > 5 || seedTrackUris?.Count + seedArtistUris?.Count == 0) { throw new ArgumentException("The count of seeds need to be between 1 and 5"); } recommendedTrackSeeds.SeedTrackUris = seedTrackUris.Select(p => p.Replace("spotify:track:", "").Split("+").First()).ToList(); var response = await SendHttpRequestAsync(partyGoer.GetSpotifyId(), _apiEndpoints[ApiEndpointType.GetRecommendedTracks], AddRecommendedSeedApiParmeters(recommendedTrackSeeds), true); RecommendedTracks tracks = await response.Content.ReadFromJsonAsync <RecommendedTracks>(); List <Domain.Track> recommendedSongs = new List <Domain.Track>(); foreach (SpotifyModels.Track track in tracks.Tracks) { if (track.Markets.Contains(partyGoer.GetMarket()) && track != null) { recommendedSongs.Add(new Domain.Track { AlbumImageUrl = null, Artists = track.Artists.Select(p => new SpotifyModels.Artist { Id = p.Id, Name = p.Name }).ToList(), Explicit = track.Explicit, Length = track.Duration, Name = track.Name, Id = track.Id }); } } return(recommendedSongs.ToList()); }
public List <Band> GetBandsByGenre(string genre) { try { List <Band> bands = null; RecommendedTracks json = null; using (System.Net.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.GetUrlByGenre(), genre)); json = JsonConvert.DeserializeObject <RecommendedTracks>(response); } bands = new List <Band>(); foreach (var track in json.Tracks) { Band band = new Band { Id = track.Artists.FirstOrDefault().Id, Name = track.Artists.FirstOrDefault().Name }; if (!bands.Exists(b => b.Id.Equals(band.Id))) { bands.Add(band); } } int totalPagesBySeveralArtists = (int)Math.Ceiling((decimal)bands.Count / SPOTIFY_MAX_AMOUNT_IDS_BY_SEVERAL_ARISTS); List <Artist> artists = new List <Artist>(); //Get pictures in batch from a list of artists for (int i = 0; i < totalPagesBySeveralArtists; i++) { var filteredIds = bands.Skip(i * SPOTIFY_MAX_AMOUNT_IDS_BY_SEVERAL_ARISTS) .Take(SPOTIFY_MAX_AMOUNT_IDS_BY_SEVERAL_ARISTS).ToList(); string ids = string.Join(",", filteredIds.Select(b => b.Id).ToArray()); artists.AddRange(GetArtistsPicturesFromIds(ids).Artists); } //TODO: INJECT BY A INJECTION MECHANISM MusicBrainz.MusicBrainz musicBrainz = new MusicBrainz.MusicBrainz(); LastFm lastFm = new LastFm(_lastFmSecrets); //TODO: MOVE THE LINES ABOVE TO A CLASS TO COMBINE ALL THE DATA foreach (var artist in artists) { var band = bands.FirstOrDefault(b => b.Id.Equals(artist.Id)); band.Picture = artist.Images?.FirstOrDefault().Url; Task.Delay(2000).Wait(); //FIXME: IT'S JUST A WORKAROUND DUE TO THE RATE LIMITING OF MUSICBRAINZ.ORG API band.Begin = musicBrainz.GetBeginDate(artist.Name, genre); //GET DATA FROM LASTFM band.Summary = lastFm.GetInfo(band.Name).Artist?.Biography?.Summary; } return(bands); } catch (Exception) { throw; } }