/// <summary> /// Creates a query for Spotify Search-method /// based on search-parameters to be both included and /// excluded from result. /// </summary> /// <param name="filter"></param> /// <returns>Query to be appended to the search-uri</returns> private string CreateQuery(SpotifyFilter filter) { StringBuilder q = new StringBuilder(""); var filters = new Dictionary <string, string>(); filter.IncludeFilters.ForEach(flt => { flt.Type = flt.Type.ToLower(); if (!filters.ContainsKey(flt.Type)) { filters.Add(flt.Type, flt.Keyword); } else { filters[flt.Type] += $" OR {flt.Keyword}"; } }); filter.ExcludeFilters?.ForEach(flt => { flt.Type = flt.Type.ToLower(); if (!filters.ContainsKey(flt.Type)) { filters.Add(flt.Type, $" NOT {flt.Keyword}"); } else { filters[flt.Type] += $" NOT {flt.Keyword}"; } }); filters.Keys.ToList().ForEach(f => { q.Append($"{f}:{filters[f]} "); }); if (!filter.AllDates) { if (filter.From > 1800) { q.Append($" year:{filter.From}"); if (filter.To > filter.From) { q.Append($"-{filter.From}"); } } else { q.Append($"tag:new"); } } return(q.ToString().TrimEnd(' ')); }
public async Task <RequestResult> GetDataSpotify() { var result = new RequestResult(StatusResult.Success); try { var autorization = await GetAutorization(); if (autorization != null) { var generosList = _generoService.GetAllGenero(); var albumList = new List <Album>(); Random numRandom = new Random(); using (var client = _httpClientFactory.CreateClient("BlueDiscosOnlineClient")) { string baseURL = Configuration.GetSection("SpotifyConnection:BaseURL").Value; client.BaseAddress = new Uri(baseURL); var searchAlbumLimite = Configuration.GetSection("SpotifyConnection:SearchAlbumLimite").Value; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", autorization.Access_token); foreach (var item in generosList) { var spotifyFilter = new SpotifyFilter(); var url = client.BaseAddress + "recommendations?limit=" + searchAlbumLimite + "&seed_genres=" + item.Descricao; var response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); if (response.IsSuccessStatusCode) { string content = await response.Content.ReadAsStringAsync(); if (content != null) { spotifyFilter = JsonConvert.DeserializeObject <SpotifyFilter>(content); } } foreach (var album in spotifyFilter.Tracks) { albumList.Add(new Album { Nome = album.Album.Name, Artista = album.Artists.FirstOrDefault().Name, GeneroId = item.Id, Valor = Convert.ToDecimal(numRandom.Next(1, 99) + Math.Round(numRandom.NextDouble(), 2)) }); } } } if (albumList.Count() > 0) { using (var unitOfWork = _unitOfWorkFactory.CreateUnitOfWork()) { foreach (var album in albumList) { unitOfWork.Repository.Add(album); } await unitOfWork.Commit(); } } result.Data = albumList; } } catch (Exception) { result.Status = StatusResult.Danger; } return(result); }
/// <summary> /// Create query based on filter and return result in form of Tracks /// </summary> /// <param name="filter"></param> /// <returns></returns> public async Task <SearchTrackCollection> SearchTracks(SpotifyFilter filter) { var tracks = await apiClient.SearchAsync <SearchTrackResponse>(filter.Type.ToString(), CreateQuery(filter)); return(tracks.Tracks); }
/// <summary> /// Create query based on filter and return result in form of Albums /// </summary> /// <param name="filter"></param> /// <returns></returns> public async Task <SearchAlbumCollection> SearchAlbums(SpotifyFilter filter) { var albums = await apiClient.SearchAsync <SearchAlbumResponse>(filter.Type.ToString(), CreateQuery(filter)); return(albums.Albums); }
/// <summary> /// Create query based on filter and return result in form of Artists /// </summary> /// <param name="filter"></param> /// <returns></returns> public async Task <SearchArtistCollection> SearchArtists(SpotifyFilter filter) { var artists = await apiClient.SearchAsync <SearchArtistResponse>(filter.Type.ToString(), CreateQuery(filter)); return(artists.Artists); }
public async Task <SearchTrackCollection> SearchTracks([FromBody] SpotifyFilter filter) { var tracks = await spotifySvc.SearchTracks(filter); return(tracks); }
public async Task <SearchArtistCollection> SearchArtists([FromBody] SpotifyFilter filter) { var artists = await spotifySvc.SearchArtists(filter); return(artists); }
public async Task <SearchAlbumCollection> SearchAlbums([FromBody] SpotifyFilter filter) { var albums = await spotifySvc.SearchAlbums(filter); return(albums); }