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