Yandex Translate API
Не могу понять, как подключиться к API Yandex Translate в своем Java коде. Документация API: https://cloud.yandex.ru/docs/translate/api-ref/Translation/translate
Код, который я написал:
String key = "тут мой ключ";
String baseUrl = "https://translate.api.cloud.yandex.net/translate/v2/translate";
try {
URL url = new URL(baseUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Content-Length", out.length + "");
connection.setRequestProperty("Accept", "*/*");
connection.setRequestProperty("targetLanguageCode", lang);
connection.setRequestProperty("texts", text);
connection.setRequestProperty("folderId", "идентификатор папки");
connection.getOutputStream().write(out);
if (connection.getResponseCode() == 200) {
JSONObject jobj = new JSONObject();
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
JSONParser parser = new JSONParser();
jobj = (JSONObject) parser.parse(reader);
JSONArray msg = (JSONArray) jobj.get("text");
// JSONArray jarr = (JSONArray)jobj.get("text").getAsJsonArray();
return msg.get(0).toString();
} else {
return connection.getResponseMessage();
}
Запрос возвращает: Bad Request
Ответы (1 шт):
Автор решения: aleksv
→ Ссылка
Понятно, что я разбирался в том, что совершенно не понимаю. Но теперь понял. Проблему решил: подтянул Apache HttpClient, закинул грамотно запрос и распарсил ответ.
final static String IAM_TOKEN = "/тут мой ключ/";
final static String folder_id = "/тут мой айди/";
...
HttpClient httpClient = HttpClientBuilder.create().build();
String result = "";
try {
HttpPost request = new HttpPost("https://translate.api.cloud.yandex.net/translate/v2/translate");
String body = String.format("{\"targetLanguageCode\":\"%s\",\"texts\":\"%s\",\"folderId\":\"%s\"}", lang, text, folder_id);
StringEntity params = new StringEntity(body, "UTF-8");
params.setContentType("charset=UTF-8");
request.addHeader("content-type", "application/json");
String auth = String.format("Bearer %s", IAM_TOKEN);
request.addHeader("content-type", "application/json");
request.addHeader("Authorization", auth);
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null) {
String retSrc = EntityUtils.toString(entity);
Object jsob_obj = new JSONParser().parse(retSrc);
JSONObject json_res = (JSONObject) jsob_obj;
JSONArray res_translate = (JSONArray) json_res.get("translations");
JSONObject res_json_obj = (JSONObject) res_translate.get(0);
result = (String) res_json_obj.get("text");
System.out.println(res_translate);
}
} catch (Exception ignored) {
} finally {
httpClient.getConnectionManager().shutdown();
}