Yandex Translate API: Обзор методов как некое исследование сервиса

в 16:50, , рубрики: Yandex, Yandex API, yandex translate api, яндекс, Яндекс API, метки: , , ,

Доброго дня. В этом топике мне хотелось бы рассказать вам о сервисе Yandex Translate, а именно о его API. Yandex Translate позволяет достаточно качественно переводить тексты, а его API использовать сервис перевода разработчикам в своих проектах.

В сим топике я хочу рассмотреть все три метода API, которые также хорошо документированы на сайте Yandex Translate API (тут).
Используя язык C# и части System.Net, System.XML и System.IO я покажу одну из вариаций работы с ним. Я думаю, что этот топик найдут полезным те, кто начинает свою работу с языком C#, либо с Yandex API.

Метод detect

При обращении к методу detect мы получаем в ответ XML (либо JSON, но тут рассмотрен только XML) следующего формата:

<?xml version="1.0" encoding="utf-8"?>
<DetectedLang code="200" lang="en"/>

Мы можем написать функцию, которая отправит запрос к API. Реализация может быть разной, вот одна из них:

string Detect(string text)
{
    WebRequest request = WebRequest.Create("http://translate.yandex.net/api/v1/tr/detect?text=" + text);
    WebResponse response = request.GetResponse();

    using (StreamReader sr = new StreamReader(response.GetResponseStream()))
    {
        var fetchedXml = sr.ReadToEnd();

        XmlDocument d = new XmlDocument();
        d.LoadXml(fetchedXml);

        XmlNodeList langNodes = d.GetElementsByTagName("DetectedLang");
        XmlNode node = langNodes.Item(0);

        return node.Attributes[1].Value;
     }
}

Эта функция принимает аргумент text, который будет параметром text, отправляемым к API. После этого мы разберем XML-ответ с помощью System.Xml и вернем значение атрибута lang элемента DetectedLang.

Метод getLangs

Данный метод вернет список направлений перевода, которые поддерживает Яндекс. Формат ответа:

<?xml version="1.0" encoding="utf-8"?>
<Langs>
  <dirs>
    <string>ru-en</string> 
    <string>ru-pl</string> 
    <string>ru-uk</string> 
    <string>ru-de</string> 
    <string>ru-tr</string> 
    <string>en-ru</string> 
    <string>pl-ru</string> 
    <string>uk-ru</string> 
    <string>de-ru</string> 
    <string>tr-ru</string> 
  </dirs>
</Langs>

Напишем функцию, которая отправит запрос к API для получения списка возможных направлений:

static void GetLangs()
{
    WebRequest request = WebRequest.Create("http://translate.yandex.net/api/v1/tr/getLangs");
    WebResponse response = request.GetResponse();

    using (StreamReader sr = new StreamReader(response.GetResponseStream()))
    {
        var fetchedXml = sr.ReadToEnd();

        XmlDocument d = new XmlDocument();
        d.LoadXml(fetchedXml);

        XmlNodeList trDirectionNodes = d.GetElementsByTagName("string");

        foreach (XmlNode trDirectionNode in trDirectionNodes)
            Console.WriteLine("Dir: {0}", trDirectionNode.InnerText);
    }
}

Данная функция обратится к API за списком возможных направлений, затем XML-ответ будет распарсен с помощью System.Xml, а полученные значения выведены на консоль. Можно реализовать добавление полученных данных в список, изменив соответствующий фрагмент кода так:

List<string> Langs = new List<string>();
// ... code code code ...
foreach (XmlNode trDirectionNode in trDirectionNodes)
    Langs.Add(trDirectionNode.InnerText);
Метод translate

Данный метод принимает два параметра: lang и text. Параметр lang передает направление перевода, параметр text же передает переводимый текст. Формат ответа:

<?xml version="1.0" encoding="utf-8"?>
<Translation code="200" lang="en-ru">
   <text>Быть или не быть?</text>
   <text>Вот в чем вопрос.</text>
</Translation>

Функция, обращающаяся к методу:

static XmlNodeList Translate(string lang, string text)
{
    WebRequest request = WebRequest.Create("http://translate.yandex.net/api/v1/tr/translate?lang=" + lang + "&text=" + text);
    WebResponse response = request.GetResponse();

    using (StreamReader sr = new StreamReader(response.GetResponseStream()))
    {
        var fetchedXml = sr.ReadToEnd();

        XmlDocument d = new XmlDocument();
        d.LoadXml(fetchedXml);

        XmlNodeList textNodes = d.GetElementsByTagName("text");

        return textNodes;
    }
}

Данная функция, после обращения к API и парсинга ответа, вернет нам объект XmlNodeList, который мы можем перебрать с помощью цикла foreach:

foreach (XmlNode textNode in Translate("ru-en", "тест"))
    Console.WriteLine("Text: {0}", textNode.InnerText);

Коды, возвращаемые API

Вы, должно быть, заметили, что каждый ответ API имеет атрибут code, который обозначает код операции. Таблица кодов:
Yandex Translate API: Обзор методов как некое исследование сервиса

На этом, думаю, все. Для получения более подробных сведений обратитесь к документации API. Спасибо за внимание.

Автор: asm32dev

Источник

Поделиться

* - обязательные к заполнению поля