Program.cs
using System.Text.Json;
using screensound.Modelos;
using screensound.Filtros;
using (HttpClient client = new HttpClient())
{
try
{
string resposta = await client.GetStringAsync("https://guilhermeonrails.github.io/api-csharp-songs/songs.json");
var musicas = JsonSerializer.Deserialize<List<Musica>>(resposta)!;
//musicas[1998].ExibirDetalhesdaMusica();
//LinqFilter.FiltrarTodosOsGenerosMusicais(musicas);
//LinqOrder.ExibirListaDeArtistas(musicas);
//LinqFilter.FiltrarArtistaPorGenero(musicas, "pop");
//LinqFilter.FiltrarMusicasDoArtista(musicas, "Michael Jackson");
LinqFilter.FiltrarMusicasPorAno(musicas, 2012);
}
catch (Exception ex)
{
Console.WriteLine($"Temos um problema: {ex.Message}");
}
}
LinqFilter.cs
using screensound.Modelos;
namespace screensound.Filtros;
internal class LinqFilter
{
public static void FiltrarTodosOsGenerosMusicais(List<Musica> musicas)
{
var todosOsGenerosMusicais = musicas.Select(generos => generos.Genero).Distinct().ToList();
foreach (var genero in todosOsGenerosMusicais)
{
Console.WriteLine(genero);
}
}
public static void FiltrarArtistaPorGenero(List<Musica> musicas, string genero)
{
var artistasPorGenero = musicas
.Where(musica => musica.Genero!.Contains(genero))
.Select(musica => musica.Artista)
.Distinct()
.ToList();
Console.WriteLine($"ARTISTAS DO GÊNERO {genero}");
foreach (var artista in artistasPorGenero)
{
Console.WriteLine($"- {artista}");
}
}
public static void FiltrarMusicasDoArtista(List<Musica> musicas, string artista)
{
var musicasDoArtista = musicas
.Where(musica => musica.Artista!.Equals(artista)).ToList();
Console.WriteLine(artista);
foreach (var musica in musicasDoArtista)
{
Console.WriteLine($"- {musica.Nome}");
}
}
public static void FiltrarMusicasPorAno(List<Musica> musicas, int ano)
{
var musicasPorAno = musicas
.Where(musica => musica.Ano.Equals(ano))
.Select(musicas => musicas.Nome)
.Distinct()
.OrderBy(musica => musica)
.ToList();
foreach (var musica in musicasPorAno)
{
Console.WriteLine($"- {musica}" +
$"ANO: {ano}");
}
}
}
Musica.cs
using System.Text.Json.Serialization;
namespace screensound.Modelos;
internal class Musica
{
//anotação (puxando do json para poder traduzir)
//interrogação pois pode ser nulo
[JsonPropertyName("song")]
public string? Nome { get; set; }
[JsonPropertyName("artist")]
public string? Artista { get; set; }
[JsonPropertyName("duration_ms")]
public int Duracao { get; set; }
[JsonPropertyName("genre")]
public string? Genero { get; set; }
[JsonPropertyName("year")]
public string? AnoString { get; set; }
public int Ano
{
get
{
return int.Parse(AnoString!);
}
}
public void ExibirDetalhesdaMusica()
{
Console.WriteLine($"música: {Nome}");
Console.WriteLine($"artista: {Artista}");
Console.WriteLine($"duração em segundos: {Duracao/1000}");
Console.WriteLine($"gênero: {Genero}");
}
}