Пример #1
0
 public async Task <IEnumerable <ArtistCrawlResponse> > Post([FromBody] ArtistCrawlRequest request)
 {
     return(await _crawler.GetAndCreateRelatedArtist(request));
 }
Пример #2
0
        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);
        }