Yandex Translate 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, который обозначает код операции. Таблица кодов:

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

ссылка на оригинал статьи http://habrahabr.ru/post/168101/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *