Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 1 / 0
Регистрация: 08.09.2020
Сообщений: 28

Как работать с API Яндекс переводчика через Json на Java Android

09.09.2020, 20:44. Показов 3051. Ответов 10

Студворк — интернет-сервис помощи студентам
Добрый день.
Подскажите кто знает или делал. Нигде не могу найти пример более менее свежий на тему разработки функции перевода из приложения Андроид студио - через API Яндекса.
У них такая инструкция - невозможно ничего понять. https://cloud.yandex.ru/docs/translate/quickstart
Ключ сделал вроде, обменял, но сработал.

Как делать через XML старые статьи есть, но они не работают. Но в примере именно JSON.

Сначала пробовал этот код для XML (тут тоже нашел где-то) и тоже не работает(не может пропарсить)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
String key = "CggVAgAAA...dnQ=";
        key = "trnsl.1.1.2017031...d35ed564f787";
        String baseUrl = "https://translate.yandex.net/api/v1.5/tr/translate";
        String finalUrl = baseUrl + "?lang=" + lang + "&key=" + key; //"ru-en"
        try {
            URL url = new URL(finalUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Length", out.length + "");
            connection.setRequestProperty("Accept", "*/*");
            OutputStream outstr = connection.getOutputStream();
            outstr.write(out);
            connection.connect();
            if (connection.getResponseCode() == 200) {
                JsonObject jobj = new JsonParser().parse(
                        new InputStreamReader(connection.getInputStream())).getAsJsonObject();
                JsonArray jarr = jobj.get("text").getAsJsonArray();
                return jarr.get(0).getAsString();
            } else {
                return "Error. Site response non 200";
            }
 
        } catch (IOException e) {
            e.printStackTrace();
            return "Error";
        }
Добавлено через 3 часа 39 минут
Попробовал по другому , тоже никак. Вылетает на исходящем потоке.
Неужели хотя бы в целях конкуренции нельзя сделать Яндексу библиотеку для основных языков программирования!
Тем более для коммерческих продуктов.
Обращение к переводу должно занимать одну строчку, а не страницы какой-то мути.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2020, 20:44
Ответы с готовыми решениями:

API Яндекс переводчика
Возможно ли использовать API Яндекс переводчика в паскале? Если да, то как?) Буду премного благодарен -.-

API переводчика Яндекс
1) Яндекс поддерживает XML-, JSON- (JSONP-) интерфейсы. Какой удобнее использовать для работы с Дельфи? 2) Что возвращают эти...

Api яндекс переводчика
Собственно здравия желаю. Следующий кодик для Tg бота: requestpost = requests.post(url2, data={'key': key, 'text':...

10
Модератор
Эксперт Java
 Аватар для alecss131
2851 / 1359 / 405
Регистрация: 11.08.2017
Сообщений: 4,340
Записей в блоге: 2
09.09.2020, 21:31
Я помню уже помогал на этом форуме с апи яндекс переводчика, вот эта тема Работа с API Яндекс Переводчика правда в плане андроида не очень хороший код, в плане слишком низкоуровневый, но лично мне даже проще так делать (использовать соединение)

Добавлено через 2 минуты
Похоже этот код вы и нашли))) Он у меня работал, но он как раз для json использовался (не люблю я xml), для него использовалась библиотека google gson, а в андроид есть своя библиотека для json
0
0 / 1 / 0
Регистрация: 08.09.2020
Сообщений: 28
09.09.2020, 22:09  [ТС]
Могу ошибаться, но есть подозрение, что Яндексоиды поменяли принцип работы для новых ключей через облако.
Спасибо, ещё раз попробую.
0
0 / 1 / 0
Регистрация: 08.09.2020
Сообщений: 28
10.09.2020, 15:36  [ТС]
Оказывается для гугловского сервиса есть готовая библиотека для языков программирования, но на Java нету(((

Добавлено через 1 час 58 минут
Такой вариант тоже не сработал.
urlConnection.getResponseMessage() - возвращает "неавторизованно"
urlConnection.getInputStream() - вылетает с ошибкой без особых причин


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
URL url = new URL("https://translate.api.cloud.yandex.net/translate/v2/translate");
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestProperty("targetLanguageCode", "ru");
            urlConnection.setRequestProperty("sourceLanguageCode", "en");
            urlConnection.setRequestProperty("format", "PLAIN_TEXT");
            urlConnection.setRequestProperty("texts", "[\"Hello dog\"]");
            urlConnection.setRequestProperty("folderId", "b1ghs...3b9bv");
            urlConnection.setRequestProperty("Content-Type", "application/json");
            urlConnection.setRequestProperty("Authorization", "Bearer ${AQVNzcuC...bIE7pKh}");
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);
            urlConnection.connect();
 
            JSONObject jo = new JSONObject();
            jo.put("folder_id", "b1gh...3b9bv");
            jo.put("texts", "[\"Hello dog\"]");
            jo.put("targetLanguageCode", "ru");
 
            bos = new BufferedOutputStream(urlConnection.getOutputStream());
            bos.write(jo.toString().getBytes());
 
//            InputStream response = urlConnection.getInputStream();
 
            String result = urlConnection.getResponseMessage();
            Log.d("", "server response: " + result); //проверить, что вернет сервер
            return result;
Добавлено через 1 час 10 минут
alecss131, про версию API v2 ничего нигде не написано.
0
Модератор
Эксперт Java
 Аватар для alecss131
2851 / 1359 / 405
Регистрация: 11.08.2017
Сообщений: 4,340
Записей в блоге: 2
10.09.2020, 15:58
kov495, Это не в свойства запроса а в json внутри тушки
Цитата Сообщение от kov495 Посмотреть сообщение
Java
1
2
3
4
5
urlConnection.setRequestProperty("targetLanguageCode", "ru");
 urlConnection.setRequestProperty("sourceLanguageCode", "en");
 urlConnection.setRequestProperty("format", "PLAIN_TEXT");
 urlConnection.setRequestProperty("texts", "[\"Hello dog\"]");
 urlConnection.setRequestProperty("folderId", "b1ghs...3b9bv");
байты лучше брать в utf8
IAM токен не нужно упаковывать в ${}, просто urlConnection.setRequestProperty("Authorization", "Bearer AQVNzcuC...bIE7pKh");
0
0 / 1 / 0
Регистрация: 08.09.2020
Сообщений: 28
10.09.2020, 16:33  [ТС]
alecss131, спасибо, но
https://cloud.yandex.ru/docs/t... /translate
тут, в этой странной инструкции, про это ничего не сказано.
такое впечатление, что программистские инструкции делают специально, чтобы никто ничего не понял.

Добавлено через 5 минут
не помогло
0
0 / 1 / 0
Регистрация: 08.09.2020
Сообщений: 28
11.09.2020, 21:54  [ТС]
Никто не знает?
Я думал по Java много мастеров.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
11.09.2020, 22:19
UrlConnection никто уже сто лет не использует.
В документации всё предельно ясно, самый обыкновенный запрос, к языку программирования отношения не имеет.

Добавлено через 34 секунды
Цитата Сообщение от kov495 Посмотреть сообщение
вылетает с ошибкой без особых причин
Причина есть всегда, находится она во вкладке logcat.
0
0 / 1 / 0
Регистрация: 08.09.2020
Сообщений: 28
11.09.2020, 22:33  [ТС]
ExFau$t,
вылетал у меня
urlConnection.getInputStream()
и ничего в лог не писал , специально пометки делал перед и после, чтобы отловить.
Ну а чем пользуются, подскажите.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
11.09.2020, 23:22
Цитата Сообщение от kov495 Посмотреть сообщение
и ничего в лог не писал
Вылет пишется в лог всегда, 100%.
Цитата Сообщение от kov495 Посмотреть сообщение
Ну а чем пользуются, подскажите.
Базовый фреймворк для запросов в сеть - Retrofit2, но есть и аналоги.
0
0 / 1 / 0
Регистрация: 08.09.2020
Сообщений: 28
13.09.2020, 01:42  [ТС]
ExFau$t, alecss131,
Не прошло и 10 лет, но оно заработало, собирал варианты по фрагментам, выкладываю фрагмент - может кому-то пригодится.
Если что, то я новичок в Java, делаю для самообучения. Спасибо всем, кто участвовал.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
   Gson gson = new Gson();
            JSONObject jo = new JSONObject();
            JSONArray ar = new JSONArray();
            String w = this.text;
            ar.put(w);
 
            jo.put("sourceLanguageCode", this.langFrom);
            jo.put("targetLanguageCode", this.langTo);
            jo.put("languageCode", this.langFrom);
            jo.put("texts", ar);
            String joString = jo.toString();
 
            URL url = new URL("https://translate.api.cloud.yandex.net/translate/v2/translate");
 
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestProperty("Content-Type", "application/json");
            urlConnection.setRequestProperty("Authorization", "Api-Key "+ this.key);
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);
 
            urlConnection.setRequestProperty("file", jo.toString());
            urlConnection.connect();
 
            DataOutputStream dataOutputStream = new DataOutputStream(urlConnection.getOutputStream());
            dataOutputStream.write(joString.getBytes()); // .writeBytes(joString) - этот вариант путает кодировку
            dataOutputStream.flush();
            dataOutputStream.close();
 
            // при неудачном соединении - выход
            if (!urlConnection.getResponseMessage().equals("OK")) {return result;}
 
            InputStream inputStream = urlConnection.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
 
            StringBuffer stringBuffer = new StringBuffer();
 
            String inputLine;
            while ((inputLine = bufferedReader.readLine()) != null) {
                stringBuffer.append(inputLine);
            }
            bufferedReader.close();
            JSONObject JOb = new JSONObject(stringBuffer.toString());
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2020, 01:42
Помогаю со студенческими работами здесь

Работа с API Яндекс Переводчика
Подскажите как написать на Java метод вроде translate(String text; String lang) {} чтобы потом его вызывать вставлять текст и язык...

Как работать с JSON API?
Мне нужно получить список всех профессиональных областей отсюда : http://api.hh.ru/1/json/#proffields Я для этого использую такой код: ...

Яндекс. API Переводчика. Ошибка:"Удаленный сервер возвратил ошибку: (404) Не найден."
Переводчик с подключением Яндекс API Документация - ссылка В строке string stringXml = webClitnt.DownloadString(strUrl); ...

Как добавить данные через JSON/XLM в проект через API стороннего сайта?
есть проект https://github.com/Electivire1988/Filmoscop Нужно выводить данные о фильмах через метод API сайта/приложения (например:...

Yandex direct API как выполнить json запрос из Java?
Yandex direct API как выполнить json запрос из Java? Тут https://tech.yandex.ru/direct/doc/start/format-docpage/ инструкция от яндекса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru