Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

API Memory Não Funciona

package br.com.alura.screenmatch.model;

import br.com.alura.screenmatch.service.ConsultaMyMemory;

import java.util.OptionalDouble;

public class Serie {
    private String titulo;
    private Integer totalTemporadas;
    private double avaliacao;
    private Categoria genero;
    private String atores;
    private String poster;
    private String sinopse;




    public Serie(DadosSerie dadosSerie){
        this.titulo = dadosSerie.titulo();
        this.totalTemporadas = dadosSerie.totalTemporadas();
        this.avaliacao = OptionalDouble.of(Double.valueOf(dadosSerie.avaliacao())).orElse(0.0);
        this.genero = Categoria.fromString(dadosSerie.genero().split(",")[0].trim());
        this.atores = dadosSerie.atores();
        this.poster = dadosSerie.poster();
        this.sinopse = ConsultaMyMemory.obterTraducao(dadosSerie.sinopse());
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getSinopse() {
        return sinopse;
    }

    public void setSinopse(String sinopse) {
        this.sinopse = sinopse;
    }

    public Integer getTotalTemporadas() {
        return totalTemporadas;
    }

    public void setTotalTemporadas(Integer totalTemporadas) {
        this.totalTemporadas = totalTemporadas;
    }

    public double getAvaliacao() {
        return avaliacao;
    }

    public void setAvaliacao(double avaliacao) {
        this.avaliacao = avaliacao;
    }

    public Categoria getGenero() {
        return genero;
    }

    public void setGenero(Categoria genero) {
        this.genero = genero;
    }

    public String getAtores() {
        return atores;
    }

    public void setAtores(String atores) {
        this.atores = atores;
    }

    public String getPoster() {
        return poster;
    }

    public void setPoster(String poster) {
        this.poster = poster;
    }



    @Override
    public String toString() {
        return  "Titulo: " + titulo +
                "| totalTemporadas: " + totalTemporadas +
                "| avaliacao: " + avaliacao +
                "| genero: " + genero +
                "| atores: " + atores +
                "| poster: " + poster  +
                "| sinopse: " + sinopse;
    }
}
package br.com.alura.screenmatch.model.traducao;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DadosResposta(@JsonAlias(value = "translatedText") String textoTraduzido) {
}
package br.com.alura.screenmatch.model.traducao;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DadosTraducao(@JsonAlias(value = "responseData") DadosResposta dadosResposta){
}
package br.com.alura.screenmatch.service;

import br.com.alura.screenmatch.model.traducao.DadosTraducao;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.net.URLEncoder;

public class ConsultaMyMemory {
    public static String obterTraducao(String text) {
        ObjectMapper mapper = new ObjectMapper();

        ConsumoApi consumo = new ConsumoApi();

        String texto = URLEncoder.encode(text);
        String langpair = URLEncoder.encode("en|pt-br");

        String url = "https://api.mymemory.translated.net/get?q=" + texto + "&langpair=" + langpair;

        String json = consumo.obterDados(url);

        DadosTraducao traducao;
        try {
            traducao = mapper.readValue(json, DadosTraducao.class);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }

        return traducao.dadosResposta().textoTraduzido();
    }
}
package br.com.alura.screenmatch.model;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DadosSerie(@JsonAlias("Title") String titulo,
                         @JsonAlias("totalSeasons") Integer totalTemporadas,
                         @JsonAlias("imdbRating") String avaliacao,
                         @JsonAlias("Genre") String genero,
                         @JsonAlias("Actors") String atores,
                         @JsonAlias("Poster") String poster,
                         @JsonAlias("Plot") String sinopse) {
}
2 respostas

Bom dia!

Qual erro ocorre durante a execução do processo?

Compartilhe conosco todas as informações do erro para podermos ajudar.

Bons estudos!

solução!

O Problema foi que em vez de exibir os dados como uma Serie eu estava exibindo da classe DadosSerie no main, então chegava o json do imdb. Então eu tive a ideia de fazer stream com a lista dadosSerie, mas depois me reparei que a Iasmin ja tinha feito um codigo semelhante desse, so que eu distraido coloquei em outro lugar. Meu Codigo main ficou deste jeito

package br.com.alura.screenmatch.principal;

import br.com.alura.screenmatch.model.*;
import br.com.alura.screenmatch.service.ConsumoApi;
import br.com.alura.screenmatch.service.ConverteDados;

import java.util.*;
import java.util.stream.Collectors;

public class Principal {

    private Scanner leitura = new Scanner(System.in);
    private ConsumoApi consumo = new ConsumoApi();
    private ConverteDados conversor = new ConverteDados();
    private final String ENDERECO = "https://www.omdbapi.com/?t=";
    private final String API_KEY = "&apikey=726344e1";
    private final String NUMERO_DA_TEMPORADA = "&season=";
    private final String NUMERO_DO_EP = "&episode=" ;
    private final List<DadosSerie> dadosSeries = new ArrayList<>();

    public void exibeMenu() {

        var opcao = -1;
        while (opcao != 0){
            var menu = """
                1 - Buscar séries
                2 - Buscar Todas Temporadas da Serie
                3 - Exibir Lista de Series Buscadas
                4 - Exibir Informações Sobre Episodio
                
                0 - Sair                                 
                """;

            System.out.println(menu);
            opcao = leitura.nextInt();
            leitura.nextLine();

            switch (opcao) {
                case 1:
                    buscarSerieWeb();
                    break;
                case 2:
                    buscarTodasTemporadasSeries();
                    break;
                case 3:
                    exibirSeriesBuscadas();
                    break;
                case 4:
                    exibirInfosSobreEpisodio();
                    break;
                case 0:
                    System.out.println("Saindo...");
                    break;
                default:
                    System.out.println("Opção inválida");
            }
        }

    }

    private void buscarSerieWeb() {
        DadosSerie dados = getDadosSerie();
        dadosSeries.add(dados);
        List<Serie> exibirSerieTraduzida = new ArrayList<>();
        exibirSerieTraduzida = dadosSeries.stream()
                .map(d -> new Serie(d))
                .collect(Collectors.toList());
        exibirSerieTraduzida.stream()
                .sorted(Comparator.comparing(Serie::getSinopse))
                .forEach(System.out::println);
    }



    private DadosSerie getDadosSerie() {
        System.out.println("Digite o nome da série para busca");
        var nomeSerie = leitura.nextLine();
        var json = consumo.obterDados(ENDERECO + nomeSerie.replace(" ", "+") + API_KEY);
        DadosSerie dados = conversor.obterDados(json, DadosSerie.class);
        return dados;
    }

    private void buscarTodasTemporadasSeries(){
        DadosSerie dadosSerie = getDadosSerie();
        List<DadosTemporada> temporadas = new ArrayList<>();

        for (int i = 1; i <= dadosSerie.totalTemporadas(); i++) {
            var json = consumo.obterDados(ENDERECO + dadosSerie.titulo().replace(" ", "+") + "&season=" + i + API_KEY);
            DadosTemporada dadosTemporada = conversor.obterDados(json, DadosTemporada.class);
            temporadas.add(dadosTemporada);
        }
        temporadas.forEach(System.out::println);
    }



    private void exibirSeriesBuscadas(){
        List<Serie> series = new ArrayList<>();
        series = dadosSeries.stream()
                        .map(d -> new Serie(d))
                                .collect(Collectors.toList());
        series.stream()
                .sorted(Comparator.comparing(Serie::getGenero))
                .forEach(System.out::println);
    }

    private void exibirInfosSobreEpisodio(){
        System.out.println("Digite o nome da Serie");
        var nomeSerie = leitura.nextLine();
        System.out.println("Digite a temporada");
        var numeroTemporada = leitura.nextLine();
        System.out.println("Digite o episodio");
        var numeroEpisodio = leitura.nextLine();
        var json = consumo.obterDados(ENDERECO + nomeSerie.replace(" ", "+") + NUMERO_DA_TEMPORADA + numeroTemporada + NUMERO_DO_EP + numeroEpisodio + API_KEY);
        DadosAtores dados = conversor.obterDados(json, DadosAtores.class);
        System.out.println(dados);
    }

}

Muito obrigado por tentar ajudar. Acordei agora e pensei que esse era o problema, que tava exibindo esse dados da classe "errada".