public async Task <IEnumerable <ArtistCrawlResponse> > Post([FromBody] ArtistCrawlRequest request) { return(await _crawler.GetAndCreateRelatedArtist(request)); }
public async Task <IEnumerable <ArtistCrawlResponse> > GetAndCreateRelatedArtist(ArtistCrawlRequest request) { List <ArtistCrawlResponse> songIds = new List <ArtistCrawlResponse>(); if (string.IsNullOrEmpty(_clientId) || string.IsNullOrEmpty(_secretId)) { throw new ArgumentException("ClientId and/or ClientSecret must be provided"); } CredentialsAuth auth = new CredentialsAuth(_clientId, _secretId); var token = await auth.GetToken(); spotifyApi = new SpotifyWebAPI { AccessToken = token.AccessToken, TokenType = token.TokenType }; var searchRequest = await spotifyApi.SearchItemsAsync(request.ArtistName, SearchType.Artist, limit : request.ArtistSearchLimit, market : request.CountryOrigin); var artistFromSearch = searchRequest.Artists.Items.Where(x => x.Name.Equals(request.ArtistName, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); var artistId = artistFromSearch.Id; var relatedArtists = await spotifyApi.GetRelatedArtistsAsync(artistId); foreach (var artist in relatedArtists.Artists) { var topTracks = await spotifyApi.GetArtistsTopTracksAsync(artist.Id, request.CountryOrigin); var tracksToAdd = topTracks.Tracks.Take(request.TopSongsLimit); var responseToAdd = tracksToAdd.Select(x => new ArtistCrawlResponse { ArtistId = artist.Id, ArtistName = artist.Name, SongId = x.Id, SongName = x.Name, Duration = x.DurationMs, SongUri = x.Uri }); songIds.AddRange(responseToAdd); } songIds = songIds.OrderBy(x => x.SongId).ToList(); return(songIds); }