using System.Net;
using System.Text.Json;
///
/// Servizio per interagire con l'API OMDB.
/// Semplifica le richieste per ottenere dettagli sui film.
///
class OmdbService
{
private readonly string url;
private readonly HttpClient httpClient = new();
public OmdbService()
{
var apiKey = File.ReadAllText("APIKey.txt").Trim();
apiKey = WebUtility.UrlEncode(apiKey);
url = "http://www.omdbapi.com/?apikey=" + apiKey
+ "&type=movie"
+ "&r=json";
}
///
/// Recupera i dettagli di un film dato il suo ID IMDB.
///
/// ID IMDB del film da cercare.
/// Un oggetto Movie con i dettagli del film.
public async Task FetchMovieDetail(string id)
{
return await FetchAsync("i", id);
}
///
/// Recupera una lista di film che corrispondono al titolo di ricerca.
///
/// Titolo dei film da cercare.
/// >Una lista di oggetti Movie che corrispondono alla ricerca.
public async Task FetchMovies(string searchTitle)
{
return await FetchAsync("s", searchTitle);
}
///
/// Esegue una richiesta HTTP GET e deserializza la risposta JSON in un oggetto del tipo specificato.
///
/// Tipo dell'oggetto di ritorno.
/// Parametro della query HTTP.
/// Valore del parametro della query HTTP.
/// Un oggetto del tipo specificato deserializzato dalla risposta JSON.
private async Task FetchAsync(string query, string value)
{
var requestUrl = url + "&" + query + "=" + WebUtility.UrlEncode(value);
var response = await httpClient.GetStringAsync(requestUrl);
try {
return JsonSerializer.Deserialize(response)!;
} catch (JsonException) {
return default;
}
}
}