public async Task <SpotibroModels.PlaylistContents> GetPlaylistContentsAsync(PartyGoer user, string playlistId) { var parameters = new ApiParameters { Parameters = new Dictionary <string, string> { { "fields", "items(track(id,name,album(images(url)),artists(name,id),explicit(),duration_ms()))" }, { "market", user.GetMarket() } }, Keys = new Dictionary <string, string> { { "{playlist_id}", playlistId }, } }; var response = await _spotifyHttpClient.SendHttpRequestAsync(user, _apiEndpoints[ApiEndpointType.GetPlaylistItems], parameters); response.EnsureSuccessStatusCode(); var playlistItems = await response.Content.ReadFromJsonAsync <PlaylistItems>(); playlistItems.Items.RemoveAll(p => p.Track == null); return(new SpotibroModels.PlaylistContents() { Tracks = playlistItems.Items.Select(p => _mapper.Convert(p.Track)).ToList() }); }
private async Task <TopTracks> GetTopTracksAsync(PartyGoer partyGoer, string artistId) { ApiParameters parameters = new ApiParameters { Keys = new Dictionary <string, string> { { "{id}", artistId } }, Parameters = new Dictionary <string, string> { { "market", partyGoer.GetMarket() } } }; var artistTopTracksResponse = await SendHttpRequestAsync(partyGoer, _apiEndpoints[ApiEndpointType.ArtistTopTracks], parameters); return(await artistTopTracksResponse.Content.ReadFromJsonAsync <TopTracks>()); }
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()); }