fix(translate): strange workaround

This commit is contained in:
Johannes Frohnmeyer 2024-05-11 18:32:39 +02:00
parent b4f1ca22f5
commit b47bc6fd0a
Signed by: Johannes
GPG Key ID: E76429612C2929F4

View File

@ -1,11 +1,14 @@
package io.gitlab.jfronny.libjf.translate.impl.google;
import io.gitlab.jfronny.commons.http.client.HttpClient;
import io.gitlab.jfronny.libjf.translate.api.TranslateException;
import io.gitlab.jfronny.libjf.translate.impl.AbstractTranslateService;
import org.apache.commons.lang3.StringEscapeUtils;
import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@ -31,7 +34,7 @@ public class GoogleTranslateService extends AbstractTranslateService<GoogleTrans
private GoogleTranslateService() throws URISyntaxException, IOException {
Map<String, GoogleTranslateLanguage> knownLanguages = new HashMap<>();
Matcher matcher = LANGUAGE_KEY.matcher(HttpClient.get("https://translate.google.com/m?mui=tl").sendString());
Matcher matcher = LANGUAGE_KEY.matcher(get("https://translate.google.com/m?mui=tl"));
while (matcher.find()) {
String id = matcher.group(1);
String name = matcher.group(2);
@ -97,11 +100,43 @@ public class GoogleTranslateService extends AbstractTranslateService<GoogleTrans
return NAME;
}
private static String getPageSource(String textToTranslate, String translateFrom, String translateTo) throws URISyntaxException, IOException {
private static String getPageSource(String textToTranslate, String translateFrom, String translateTo) {
if (textToTranslate == null)
return null;
String pageUrl = String.format("https://translate.google.com/m?hl=en&sl=%s&tl=%s&ie=UTF-8&prev=_m&q=%s",
translateFrom, translateTo, URLEncoder.encode(textToTranslate.trim(), StandardCharsets.UTF_8));
return HttpClient.get(pageUrl).sendString();
return get(pageUrl);
}
private static String get(String url) {
// Technically, we should be using HttpClient, but Google Translate doesn't like it for some reason
// based on https://github.com/jhy/jsoup/blob/master/src/main/java/org/jsoup/helper/HttpConnection.java
try {
HttpsURLConnection connection = (HttpsURLConnection) URI.create(url).toURL().openConnection();
connection.setRequestMethod("GET");
connection.setInstanceFollowRedirects(false);
connection.setConnectTimeout(5000);
connection.setReadTimeout(2500);
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36");
connection.connect();
if (connection.getResponseCode() / 100 != 2) {
throw new IOException("Could not get page: " + connection.getResponseCode());
}
connection.getRequestMethod();
connection.getURL();
connection.getResponseCode();
connection.getResponseMessage();
connection.getContentType();
try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append('\n');
}
return sb.toString();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}