5
respostas

API MyMemory Funcionou

Boa noite

Estava tendo problema também com API do ChatGPT eo principal era

Caused by: com.theokanning.openai.OpenAiHttpException: You exceeded your current quota, please check your plan and billing details.

Verifiquei minha conta , na realidade não tinha nem usado a API e ainda tinha os $5.00 porem estava com a conta expirada para utilizar essa API então Criei uma nova conta utilize um outro numero de telefone , verifiquei a conta e aparentemente estava tudo ok , criei novas Keys e testei.Mas mesmo assim problema persistia. Tentei checar a documentação referente a os modelos https://platform.openai.com/docs/models, e fiz teste com outras versões, mesmo assim quando não era status code 429(You exceeded your current quota...) era algum outro problema como versão não estava mais disponível , ou não tinha permissão, ou outras coisas.

Já com API MyMemory Funcionou de primeira , fiz mais teste e por enquanto não tive problemas , espero que continue funcionando kkkk...

5 respostas

Por aqui fiz exatamente o que o material mandou mas não há tradução usando o MyMemory.

Bom dia

No meu segue traduzindo

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Se puder mandar os trechos código, erro que está dando no seu de repente descobrimos qual problema.

Pois é, já vi se foi algo pelo alias, to verificando e debugando. As classes estão de acordo com a sugestão do curso. Fiz uma requisição simples pelo navegador e a tradução ocorreu. No IntelliJ ocorre a compilação normalmente e as classes estão de acordo. Mas a tradução da sinopse não retorna.

package br.com.alura.screenmatch.model;
import br.com.alura.screenmatch.service.traducao.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); // valor que chega em String
        this.genero = Categoria.fromString(dadosSerie.genero().split(",")[0].trim()); // Usando um método estático que retorna dinamicamente o valor categorizado no Enum, sendo p primeiro genero somente
        this.atores = dadosSerie.atores();
        this.poster = dadosSerie.poster();
        this.sinopse = ConsultaMyMemory.obterTraducao(dadosSerie.sinopse()).trim();
    }

    public String getTitulo() {
        return titulo;
    }

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

    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;
    }

    public String getSinopse() {
        return sinopse;
    }

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

    @Override
    public String toString() {
        return
                "genero=" + genero +
                ", titulo='" + titulo + '\'' +
                ", totalTemporadas=" + totalTemporadas +
                ", avaliacao=" + avaliacao +
                ", atores='" + atores + '\'' +
                ", poster='" + poster + '\'' +
                ", sinopse='" + sinopse + '\'';
    }
}
package br.com.alura.screenmatch.service.traducao;

import br.com.alura.screenmatch.service.ConsumoApi;
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.service.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.service.traducao;

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

@JsonIgnoreProperties(ignoreUnknown = true)
public record DadosTraducao(@JsonAlias(value = "responseData") DadosResposta dadosResposta) {
}

Encontrei!

Este tempo todo estava sendo traduzido, só que estava ocorrendo no objeto Serie e não na chamada do DadosSerie.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeDessa forma a tradução estava ocorrendo normalmente, porém, eu estava procurando apenas na chamada da opção "1" do menu, onde a tradução não está sendo aplicada.

A sim , somente na Classe Serie na hora que listamos que está a tradução, que bom que deu certo :)