ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode


Работа с API Яндекс Переводчика


Научимся работе с API на языке программирования C#. В этом уроке мы напишем программу в Visual Studio на Windows Forms, которая будет переводить текст с русского языка на английский и обратно при помощи веб-запросов к API Яндекс Переводчика. Также можно скачать исходник, разработанной программы.

Что такое API?

API (сокращение от английского Application Programming Interface) — это интерфейс программирования приложений. Интернет-сервисы, библиотеки, операционная система и др. предоставляют разработчикам интерфейсы для взаимодействия со своими наборами готовых классов, методов и данных. В результате этого мы можем в своих приложениях использовать функции других интернет-сервисов.

API предоставляют многие сервисы, в частности это социальные сети ВКонтакте, Instagram и Twitter; также это могут быть всевозможные переводчики, конвертеры валют, информационные и новостные сервисы. Кроме того, Вы сами можете сделать API на собственном web-ресурсе и использовать его при разработке своих приложений, либо сделать его публичным — и тогда другие люди смогут им воспользоваться.

Вот что такое API.

Почему Яндекс, а не Google?

Яндекс Переводчик предоставляет бесплатное API, а в Google Translate — оно платное: 20$ за каждый миллион переводимых символов.

Стоимость использования Google Translate API

Стоит сказать, что имеется демо период. Так что если интересуетесь, то возможность попробовать есть.

Получение API-ключа

Перво-наперво нам необходимо получить ключ, который позволит работать с API Яндекс Переводчика. В других сервисах ключ может называться токеном доступа.

Для этого переходим по ссылке https://tech.yandex.ru/keys/get/?service=trnsl, соглашаемся с условиями и нажимаем кнопку «Получить API-ключ». При необходимости можно добавить описание к ключу, но это не обязательно.

Получение бесплатного API-ключа Яндекс Переводчика

Затем ключ будет успешно создан:

API-ключ Яндекс Переводчика

Скопируйте его себе и сохраните, затем он нам понадобится. Никому не говорите свой ключ. Будет плохо, если кто-то им воспользуется. Если всё-таки это произошло — имеется возможность его заблокировать, а затем получить новый.

На бесплатный ключ, который мы только что получили, существуют ограничения Яндекса (далее цитата из Пользовательского соглашения) «на объем переводимого текста — в размере до 1 000 000 символов в сутки, но не более 10 000 000 символов месяц». Если нужно больше — то для этого существуют платные тарифы на API.

Проектирование интерфейса программы

В начале давайте договоримся о направлении перевода: программа будет выполнять перевод с русского языка на английский и обратно.

Создайте в Visual Studio новый проект Windows Forms на языке программирования C#.

Как и в классическом интерфейсе переводчика, знакомого каждому из нас, нам понадобится: два текстовых поля (TextBox) и кнопка (Button) «Перевести». Кроме того, поместим на форму элемент управления GroupBox и в него добавим два переключателя RadioButton — тем самым мы обеспечим их согласованную работу (выбранным всегда остаётся только один). Вот, что должно получиться:

Работа с API Яндекс Переводчика - Интерфейс программы


Размер шрифта мы установили равным 11 пунктов. В контролах TextBox параметр Multiline сделали равным true — это позволит выполнять в текстом поле перенос строки.

Создание интерфейса программы для работы через API завершено.

Написание кода

Создадим класс, который будет выполнять работу с Яндекс API Переводчика посредством web-запросов. Назовем класс YandexTranslator.

Класс содержит единственный метод public string Translate(string s, string lang). Метод принимает в качетве аргементов: строку s — исходный текст для перевода, строку lang — направление перевода (например, ru-en — русско-английский). Возвращает метод строку с переведённым текстом.

Код класса YandexTranslator:

Не забудьте указать ключ от API Яндекс Переводчика вместо слов «ВАШ API-КЛЮЧ»!

В классе формы нужно создать экземпляр класса YandexTranslator, добавить в код обработчика события нажатия кнопки «Перевести» операторы выбора для задания нужного направления перевода (в завосимости от выбранного RadioButton), а также вызов метода Translate непосредственно для выполнения перевода. Код From1:

Написание программы для работы с API Яндекс Переводчика на Windows Forms и языке C# завершено!

Скачать исходник программы или перейти в репозиторий на GitHub:

Скачать исходник Репозиторий проекта на GitHub

 

Структура web-запроса к API

Запрос к API переводчика содержит ряд обязательных параметров — это: key=<API-ключ> & text=<переводимый текст> & lang=<направление перевода>. Необязательные параметры, такие как формат и опции перевода, мы использовать не стали.

Запрос к Яндекс API возвращает ответ в виде структуры JSON.

Полная информация о запросах к API Яндекс Переводчика, их параметрах и ответах сервера есть в официальной документации.

Все сервисы с публичным API (например, социальные сети) обычно имеют документацию по работе с ним.

Десериализация JSON

JSON можно десериализовать (распарсить), например, с помощью классов из библиотеки Newtonsoft.Json на C# (в примере программы из данной статьи так и сделано). Библиотеку вы можете скачать и подключить к проекту с помощью системы управления пакетами NuGet в Visual Studio. Для этого на решении нажмите правой кнопкой мыши и выберите «Управление пакетами NuGet для решения…»:

Система управления пакетами NuGet

Затем в строке поиска введите имя библиотеки «Newtonsoft.Json» и из результатов поиска установите компонент Json.NET.

Установка библиотеки для работы с JSON на C#

Также в коде нужно с помощью директивы using подключить соответствующее пространство имён.

В примере программы класс Translation описывает структуру JSON-ответа на запрос к API переводчика.

Резюме

Демонстрация программы по работе с API Яндекс Переводчика

Демонстрация работы программы

В этой статье, на примере Яндекс Переводчика, мы рассмотрели работу с API.

Подводя итоги, можно сказать, что:

  • Для работы с API необходимо получить ключ или токен;
  • Для работы с API используются web-запросы;
  • Ответы обычно возвращаются в виде структур данных, таких как JSON или XML.

Спасибо за прочтение!

4.8/5 - (31 голос)



Поделиться в соц. сетях:

13 комментария(ев) к статье “Работа с API Яндекс Переводчика

  1. Кирилл

    Здравствуйте, возможно вы поможете или подскажите в какую сторону рыть. В случаях, когда перевожу в русского на английский приходит ошибка 400 от сервера Яндекса.
    Как можно исправить?
    На Java применяем URLEncoder.encode(text, «UTF-8»), а вот на C#?

    1. admin Автор статьи

      Возможно текст содержит недопустимые символы. Или на Java всё нормально, проблемы с C#? Текст большого размера переводите?

      1. KIrill

        Я пытаюсь перевести «Привет», дело в том что в Вашем коде нету приведения кодировки, когда Вы переводите русские символы, они не поддерживаются.
        Поэтому надо добавить Uncoder.
        Это же самое мне ответили на поддержке Яндекса

        1. admin Автор статьи

          Чтобы поменять кодировку попробуйте использовать выражение:

          s = Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(s));

          Где s — это нужная строка.

          Вместо Unicode можно также выбирать: ASCII, UTF32, UTF7, UTF8 и Default.

  2. Семён

    а почему при скопированном тексте любой длины и переводе его происходит ошибка 400 (An unhandled exception of type ‘System.Net.WebException’ occurred in System.dll

    Additional information: Удаленный сервер возвратил ошибку: (400) Недопустимый запрос.)

    1. admin Автор статьи

      Скорее всего это происходит из-за того, что переводимый текст содержит недопустимые символы.

  3. Сергей

    Спасибо за отличный пример.
    По всей видимости, это единственное полностью рабочее решение с обработкой JSON на C#, которое можно взять за основу для изучения.

  4. Иван

    Здравствуйте, спасибо за отличный пример. Но есть вопрос: как можно реализовать, чтобы запрос возвращался по строкам. То есть наш первоначальный запрос был:
    0) слово 1
    1) слово 2
    2) предложение
    И вернувшийся запрос с переводом был таким же:
    0) слово 1
    1) слово 2
    2) предложение

    Спасибо.

    1. admin Автор статьи

      Здравствуйте! Когда я готовил эту статью, у меня тоже возник такой вопрос, и в документации к API я не нашел решения данной проблемы.

      Как вариант, можно разбить исходный текст на части (по абзацам, например) и отправлять на перевод по частям.

      1. Михаил

        разбить исходный текст на части (по абзацам, например), Как раз интересует этот момент. Если есть возможность?

  5. SG

    Можно между частями поставить какой-нибудь символ-разделитель, а потом разбить по нему ответ.
    Например «Hello world!» превратить в «Hello ^ wolrd!»
    Ответ придет в виде «Привет ^ мир», его легко разбить на 2 строки.

Добавить комментарий

Ваш адрес email не будет опубликован.