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

Não estão vindo as imagens

Fiz tudo direitinho mas não estão vindo as imagens!

print da localhost:8080/series

print da pagina web

Print da página web

Print da página web

11 respostas
solução!

Bom dia, Terezinha! Como vai?

Estou aqui para te ajudar, mas, não foi possível compreender totalmente o seu cenário.

Para que eu possa te orientar melhor, me responda o seguinte: poderia compartilhar o seu projeto do Backend? Você fez alguma alteração no projeto Frontend?

Fico no aguardo. Abraços e bons estudos!

package br.com.alura.screenmatch.principal;

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

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.Scanner;
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 =  API_KEY_TECA;
    private List<DadosSerie> dadosSeries = new ArrayList<>();

    private SerieRepository repositorio;
    private List<Serie> series = new ArrayList<>();
    private Optional<Serie> serieBusca;

    public Principal(SerieRepository repositorio) {
        this.repositorio = repositorio;
    }

    public void exibeMenu() {
        var opcao = -1;
        while(opcao != 0) {
            var menu = """
                    1 - Buscar séries
                    2 - Buscar episódios
                    3 - Listar séries buscadas
                    4 - Buscar série por título
                    5 - Buscar séries por ator
                    6 - Top 5 Séries
                    7 - Buscar séries por categoria
                    8 - Filtrar séries
                    9 - Buscar episódios por trecho
                    10 - Top 5 episódios por série
                    11 - Buscar episódios a partir de uma data 
                                    
                    0 - Sair                                 
                    """;

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

            switch (opcao) {
                case 1:
                    buscarSerieWeb();
                    break;
                case 2:
                    buscarEpisodioPorSerie();
                    break;
                case 3:
                    listarSeriesBuscadas();
                    break;
                case 4:
                    buscarSeriePorTitulo();
                    break;
                case 5:
                    buscarSeriesPorAtor();
                    break;
                case 6:
                    buscarTop5Series();
                    break;
                case 7:
                    buscarSeriesPorCategoria();
                    break;
                case 8:
                    filtrarSeriesPorTemporadaEAvaliacao();
                    break;
                case 9:
                    buscarEpisodioPorTrecho();
                    break;
                case 10:
                    topEpisodiosPorSerie();
                    break;
                case 11:
                    buscarEpisodiosDepoisDeUmaData();
                    break;
                case 0:
                    System.out.println("Saindo...");
                    break;
                default:
                    System.out.println("Opção inválida");
            }
        }
    }

    private void buscarSerieWeb() {
        DadosSerie dados = getDadosSerie();
        Serie serie = new Serie(dados);
        //dadosSeries.add(dados);
        repositorio.save(serie);
        System.out.println(dados);
    }

    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 buscarEpisodioPorSerie(){
        listarSeriesBuscadas();
        System.out.println("Escolha uma série pelo nome");
        var nomeSerie = leitura.nextLine();

        Optional<Serie> serie = repositorio.findByTituloContainingIgnoreCase(nomeSerie);

        if(serie.isPresent()) {

            var serieEncontrada = serie.get();
            List<DadosTemporada> temporadas = new ArrayList<>();

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

            List<Episodio> episodios = temporadas.stream()
                    .flatMap(d -> d.episodios().stream()
                            .map(e -> new Episodio(d.numero(), e)))
                    .collect(Collectors.toList());

            serieEncontrada.setEpisodios(episodios);
            repositorio.save(serieEncontrada);
        } else {
            System.out.println("Série não encontrada!");
        }
    }

    private void listarSeriesBuscadas(){
        series = repositorio.findAll();
        series.stream()
                .sorted(Comparator.comparing(Serie::getGenero))
                .forEach(System.out::println);
    }

    private void buscarSeriePorTitulo() {
        System.out.println("Escolha um série pelo nome: ");
        var nomeSerie = leitura.nextLine();
        serieBusca = repositorio.findByTituloContainingIgnoreCase(nomeSerie);

        if (serieBusca.isPresent()) {
            System.out.println("Dados da série: " + serieBusca.get());

        } else {
            System.out.println("Série não encontrada!");
        }

    }

    private void buscarSeriesPorAtor() {
        System.out.println("Qual o nome para busca?");
        var nomeAtor = leitura.nextLine();
        System.out.println("Avaliações a partir de que valor? ");
        var avaliacao = leitura.nextDouble();
        List<Serie> seriesEncontradas = repositorio.findByAtoresContainingIgnoreCaseAndAvaliacaoGreaterThanEqual(nomeAtor, avaliacao);
        System.out.println("Séries em que " + nomeAtor + " trabalhou: ");
        seriesEncontradas.forEach(s ->
                System.out.println(s.getTitulo() + " avaliação: " + s.getAvaliacao()));
    }

    private void buscarTop5Series() {
        List<Serie> serieTop = repositorio.findTop5ByOrderByAvaliacaoDesc();
        serieTop.forEach(s ->
                System.out.println(s.getTitulo() + " avaliação: " + s.getAvaliacao()));
    }

    private void buscarSeriesPorCategoria() {
        System.out.println("Deseja buscar séries de que categoria/gênero? ");
        var nomeGenero = leitura.nextLine();
        Categoria categoria = Categoria.fromPortugues(nomeGenero);
        List<Serie> seriesPorCategoria = repositorio.findByGenero(categoria);
        System.out.println("Séries da categoria " + nomeGenero);
        seriesPorCategoria.forEach(System.out::println);
    }

    private void filtrarSeriesPorTemporadaEAvaliacao(){
        System.out.println("Filtrar séries até quantas temporadas? ");
        var totalTemporadas = leitura.nextInt();
        leitura.nextLine();
        System.out.println("Com avaliação a partir de que valor? ");
        var avaliacao = leitura.nextDouble();
        leitura.nextLine();
        List<Serie> filtroSeries = repositorio.seriesPorTemporadaEAValiacao(totalTemporadas, avaliacao);
        System.out.println("*** Séries filtradas ***");
        filtroSeries.forEach(s ->
                System.out.println(s.getTitulo() + "  - avaliação: " + s.getAvaliacao()));
    }

    private void buscarEpisodioPorTrecho(){
        System.out.println("Qual o nome do episódio para busca?");
        var trechoEpisodio = leitura.nextLine();
        List<Episodio> episodiosEncontrados = repositorio.episodiosPorTrecho(trechoEpisodio);
        episodiosEncontrados.forEach(e ->
                System.out.printf("Série: %s Temporada %s - Episódio %s - %s\n",
                        e.getSerie().getTitulo(), e.getTemporada(),
                        e.getNumeroEpisodio(), e.getTitulo()));
    }
 private void topEpisodiosPorSerie(){
        buscarSeriePorTitulo();
        if(serieBusca.isPresent()){
            Serie serie = serieBusca.get();
            List<Episodio> topEpisodios = repositorio.topEpisodiosPorSerie(serie);
            topEpisodios.forEach(e ->
                    System.out.printf("Série: %s Temporada %s - Episódio %s - %s Avaliação %s\n",
                            e.getSerie().getTitulo(), e.getTemporada(),
                            e.getNumeroEpisodio(), e.getTitulo(), e.getAvaliacao()));
        }
    }
    private void buscarEpisodiosDepoisDeUmaData(){
        buscarSeriePorTitulo();
        if(serieBusca.isPresent()){
            Serie serie = serieBusca.get();
            System.out.println("Digite o ano limite de lançamento");
            var anoLancamento = leitura.nextInt();
            leitura.nextLine();

            List<Episodio> episodiosAno = repositorio.episodiosPorSerieEAno(serie, anoLancamento);
            episodiosAno.forEach(System.out::println);
        }
    }
}

As informações estão vindo certinhas, só não vem as imagens dos posteres. Deve ser alguma configuração aqui. Não dá erro em nada mas não vem as imagens.

Print da página web

A única alteração no Front foi trocar o número da porta como orientado. A minha estava 5050 e troquei para 5051.

Descobri aqui, a chave "("OPENAI_APIKEY"))" não funciona, parece que agora é pago. Tem alguma alternativa ? Fiz uma chave no site mas parece que não está funcionando.

 OpenAiService service = new OpenAiService(System.getenv("OPENAI_APIKEY"));
package br.com.alura.screenmatch.service;

import com.theokanning.openai.completion.CompletionRequest;
import com.theokanning.openai.service.OpenAiService;

public class ConsultaChatGPT {
    public static String obterTraducao(String texto) {
        OpenAiService service = new OpenAiService(System.getenv("OPENAI_APIKEY"));


        CompletionRequest requisicao = CompletionRequest.builder()
                .model("text-davinci-003")
                .prompt("traduza para o português o texto: " + texto)
                .maxTokens(1000)
                .temperature(0.7)
                .build();


        var resposta = service.createCompletion(requisicao);
        return resposta.getChoices().get(0).getText();
    }
}

Bom dia, Terezinha!

O seu problema, relacionado as imagens não estarei aparecendo, imagino que não haja nada a ver com a API de tradução, então vamos tratar cada uma como um problema diferente.

Sobre o problema com as imagens, recomendo que upe todo o seu projeto em um repositório do GitHub e envie o link do repositório aqui, pois as partes de código que você compartilhou não apresentam nenhum erro ou inconsistência, sendo assim, o problema pode estar em outro lugar.

Agora sobre a API de tradução, como alternativa foi adicionada uma atividade em um curso anterior a esse que mostra como utilizar essa alternativa, você pode acessar no seguinte link: Atividade.

Fico no aguardo do seu retorno!

Boa tarde, segue o link do projeto no GitHub. Link do projeto no GitHub

Boa tarde, Terezinha! Perdão pela demora em retornar!

Analisando o seu projeto, não identifiquei nenhum problema que poderia estar causando os problemas de carregamento das imagens, consegui reproduzir elas sem problemas usando o seu Backend.

O que me leva a acreditar que o problema pode estar relacionado a informação das imagens salvas no banco, para que as imagens sejam carregadas corretamente o link delas deve haver o final com ".png" ou "jpeg". Para visualizar isso, veja os seguintes passos:

  1. Com isso, recomendo que acesse o PgAdmin4, pesquisando no próprio Windows e ao acessar ele procure o banco de dados que você está usando e clique no mesmo.

  2. Quando ele abrir terá várias opções, desça até encontrar a opção "Schema" que vai estar em vermelho e clique nela. Nisso desça até achar a opção "Tabela" e clique também.

  3. Com a tabela clicada, aparecerá todas as tabelas usadas no projeto, clique com o botão direito na de séries e passo o mouse sobre a opção "View/Edit Data" e clique em "All Rows" que vai estar ao lado. Assim listará todas as informações presentes na tabela.

  4. Com as informações amostra, procure a coluna poster e clique em qualquer um dos links, visualize se ele apresenta o final ".png" ou "jpeg" como no seguinte exemplo: "https://m.media-amazon.com/images/I/81IXojwauiL._SY385_.jpg".

  5. Caso não apresente, procure imagens dos pôsteres das séries que você adicionou e altere para cada uma cadastrada, ao finalizar as alterações aperte F6 para salvar as alterações ou clique no ícone de um banco de dados com um disquete a frente.

    O seguinte GIF mostra os principais passos para ficar mais visual:

GIF que mostra os passos para conseguir alterar as informações de um elemento em uma tabela de banco de dados

Espero que isso resolva o seu problema!

Eu mexi em algumas coisas aqui e as imagens apareceram. Realmente foi configuração. Mas vou salvar as suas dicas porque já estou fazendo o desafio e vou verificar se tudo está correto. Estou um pouco atrasada porque tive uma gripe forte , fiz as tabelas livros e autores. Estou trabalhando aqui qualquer dúvida eu chamo. Obrigada