Acessando a base de filmes do Netflix – Parte 01

dezembro 13, 2016 11:00 am Publicado por Deixe um comentário

Neste artigo, vou mostrar como trabalhar com lista de itens, exibindo textos e imagens em lista roláveis usando a view ListView e apresentando alguns dos seus recursos. Vamos criar uma pequena aplicação que acessa a base de filmes da Netflix.

Esse é um artigo prático que mostra como usar alguns recursos do Xamarin.Forms para criar uma aplicação simples, mas funcional e útil.

O objetivo da aplicação é acessar a base de filmes do Netflix, fazendo uma busca por nome de ator e relacionando os filmes encontrados exibindo a imagem, o nome e o ano de lançamento do filme em uma view ListView.

O usuário poderá selecionar um filme para obter mais detalhes sobre o mesmo, como um pequeno resumo do filme, bem como sua imagem e título.

Nesta aplicação, vamos aprender a fazer o seguinte:

  • Acessar um serviço RESTFull;
  • Realizar a busca de informações usando uma consulta do lado do cliente;
  • Serializar e deserializar dados remotos no formato JSON;
  • Exibir os dados em um controle ListView, usando um DataTemplate;
  • Usar a navegação entre as páginas para exibir detalhes de um filme.

Abaixo, vemos as duas páginas da aplicação:

  • A página principal onde o usuário digita o nome do autor e exibe os filmes;
  • A página de detalhes que exibe os detalhes do filme.

xamform_netflix11

A primeira coisa que vou definir será a URL de acesso a base de filmes Netflix: ” http://netflixroulette.net/api/api.php?actor={0}”

Se você digitar essa URL no seu navegador e informar o nome de um ator, vai obter o seguinte resultado:

xamform_netflix13

Aí temos os dados dos filmes no formato JSON. Perceba que temos as seguintes informações:

  • show_id
  • show_title
  • rating
  • category
  • show_cast
  • director
  • summary
  • poster

Vamos usar algumas dessas informações para obter os dados dos filmes e exibir em nossa aplicação.

Isto posto, vamos para a parte prática:

Criando um projeto no VS 2015 com Xamarin

Abra o Visual Studio Community 2015 e clique em New Project. Selecione Visual C#, o template Cross Plataform e, a seguir, Blank App (Xamarin.Forms Portable).

Nota: a opção Portable (Portable Class Library – PCL ) inclui todo o código comum em uma biblioteca de vínculo dinâmico (DLL) que pode, então, ser referenciada a partir de outros projetos.

Informe o nome AppRouletteNetFlix e clique no botão OK. Ao clicar no botão OK, será criada uma solução contendo 4 projetos (dependendo do seu ambiente pode haver alguma variação nos projetos).

O projeto comum possui a classe App.cs que irá conter o código compartilhado e que vamos usar neste artigo.

Incluindo as referências aos pacotes Json e HttpClient

Vamos incluir no projeto (em todos eles) as referências às bibliotecas NewtonSoft.Json e Microsoft.Net.Http para dar suporte a serialização dos dados no formato JSON e para realizar o acesso ao serviço RESTFull pela nossa aplicação.

No menu Tools, clique em Nuget Package Manager e, a seguir, em Manage Nuget Packages for Solution.

Selecione os pacotes conforme mostrado abaixo (um por vez), selecione Instalar em todos os projetos e clique no botão Install.

xamform_netflix14

Ao final, teremos as referências incluídas em todos os projetos da nossa solução.

Criando a classe de domínio Movie

Vamos criar uma classe para representar as informações do nosso domínio que são as informações sobre os filmes que vamos usar na aplicação.

Vamos criar uma nova pasta no projeto compartilhado com o nome Models via menu Project -> Add New Folder.

A seguir, clique com o botão direito do mouse sobre a pasta Models e clique em Add Class e informe o nome Movie.cs e, a seguir, inclua o código abaixo nesta classe:

using Newtonsoft.Json;
namespace AppRouletteNetFlix.Model
{
    public class Movie
    {
        [JsonProperty("show_title")]
        public string Title { get; set; }
        [JsonProperty("release_year")]
        public int ReleaseYear { get; set; }
        [JsonProperty("poster")]
        public string ImageUrl { get; set; }
        [JsonProperty("summary")]
        public string Summary { get; set; }
    }
}

Note que usamos o atributo JsonProperty(“nome_campo”) para mapear uma propriedade JSON para um membro da plataforma .NET, além de especificar os métodos get/set da nossa classe Movie.

Criando um serviço para acessar a base de filmes do Netflix

Vamos criar uma nova pasta no projeto compartilhado com o nome Service via menu Project -> Add New Folder.

Nesta pasta, vamos definir uma classe que irá acessar o serviço RESTfull disponibilizado pela Netflix.

A seguir, clique com o botão direito do mouse sobre a pasta Service e clique em Add Class e informe o nome MovieService.cs e, a seguir, inclua o código abaixo nesta classe:

using AppRouletteNetFlix.Model;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
namespace AppRouletteNetFlix.Service
{
    public class MovieService
    {
        private HttpClient _client = new HttpClient();
        private List<Movie> _movies;
     
       public async Task<List<Movie>> LocalizaFilmesPorAtor(string ator)
        {
            if (string.IsNullOrWhiteSpace(ator))
            {
                return null;
            }
            else
            {
                string url = string.Format("http://netflixroulette.net/api/api.php?actor={0}", ator);
                var response = await _client.GetAsync(url);
                if (response.StatusCode == HttpStatusCode.NotFound)
                {
                    _movies = new List<Movie>();
                }
                else
                {
                    var content = await response.Content.ReadAsStringAsync();
                    var movies = JsonConvert.DeserializeObject<List<Movie>>(content);
                    _movies = new List<Movie>(movies);
                }
                return _movies;
            }
       }
    }
}

Note que muitos dos métodos da classe HttpClient são async, pois eles realizam operações I/O de rede.

Definimos o a URI onde temos o serviço REST: http://netflixroulette.net/api/api.php?actor={0}

O método GetAsync envia uma requisição HTTP GET de forma assíncrona. A palavra-chave await suspende a execução até que o método assíncrono termine e, quando isso ocorrer, ele retorna um HttpResponseMessage que contém um response HTTP.

Se o código do status no response for um código de sucesso, o corpo do response conterá a representação JSON dos filmes.

Chamamos, então, o método ReadAsStringAsync, pois o corpo do response pode ser grande. A seguir, deserializamos os dados JSON para objetos com base em nosso modelo de domínio Movie e retornamos uma lista dos filmes obtidos.

Na segunda parte do artigo, iremos cuidar da interface com o usuário criando as páginas que vamos usar em nossa aplicação.

Source: IMasters

Categorizados em:

Este artigo foi escrito pormajor

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *