Exemplo n.º 1
0
        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()
            });
        }
Exemplo n.º 2
0
        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>());
        }
Exemplo n.º 3
0
        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());
        }