1
resposta

[Projeto] Alternativa de tradução à API do ChatGPT

Meu pacote gratuito aos modelos da API da OpenAI havia expirado antes mesmo de eu iniciar o curso, mas consegui chegar a uma solução alternativa usando outra API gratuita, a API MyMemory, feita especificamente para traduções. Isso possivelmente pode ajudar outras pessoas que passem pelo mesmo problema, então seguem os códigos:

public enum Linguagem {
    PORTUGUES("pt"),
    INGLES("en");

    public String siglaLinguagem;

    Linguagem(String lang) {
        this.siglaLinguagem = lang;
    }

    public static Linguagem getLang(String lang) {
        for (Linguagem self : Linguagem.values()) {
            if (self.siglaLinguagem.equalsIgnoreCase(lang)) {
                return self;
            }
        }
        throw new NoSuchElementException("Língua não encontrada");
    }
}
public class Tradutor {
    public static String traduzirInglesParaPortugues(String text) {
        ObjectMapper mapper = new ObjectMapper();

        String json = MyMemoryApiConnector.get(text, Linguagem.INGLES, Linguagem.PORTUGUES);

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

        traducao.dadosResposta.textoTraduzido = URLDecoder.decode(traducao.dadosResposta.textoTraduzido, StandardCharsets.UTF_8);

        return traducao.dadosResposta.textoTraduzido;
    }
}
public class MyMemoryApiConnector {
    public static String get(String texto, Linguagem lingua1, Linguagem lingua2) {
        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .GET()
                .uri(URI.create(MyMemoryURLGenerator.urlEncodeQuery(texto, lingua1, lingua2)))
                .build();

        try {
            HttpResponse<String> resposta = client.send(request, HttpResponse.BodyHandlers.ofString());

            if (resposta.statusCode() == 200) {
                return resposta.body();
            } else {
                throw new IOException("Resposta mal-sucedida da MyMemory API");
            }
        } catch (IOException | InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}
public class MyMemoryURLGenerator {
    public static String urlEncodeQuery(String text, Linguagem lingua1, Linguagem lingua2) {
        String texto = URLEncoder.encode(text, StandardCharsets.UTF_8);
        String langpair = URLEncoder.encode(lingua1.siglaLinguagem+"|"+lingua2.siglaLinguagem, StandardCharsets.UTF_8);

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

        return url;
    }
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyMemoryResponseValue {
    @JsonAlias(value = "responseData")
    public DadosResposta dadosResposta;

    @JsonIgnoreProperties(ignoreUnknown = true)
    public class DadosResposta {
        @JsonAlias(value = "translatedText")
        public String textoTraduzido;
    }
}
1 resposta

Oi, estudante! Como vai?

Obrigada por compartilhar essa solução com o fórum! Tenho certeza que será muito útil para nossa comunidade.

Conte conosco quando surgirem dúvidas.

Abraços!