- PVSM.RU - https://www.pvsm.ru -

Использование Microsoft Bing Translator API в своем приложении

Добрый день!

Иногда возникает потребность в переводе данных, введенных пользователем на сайте (для генерации ЧПУ на сайтах, при мультиязычном контенте и т.п.). Так как API Google Translate на данный момент доступен только за деньги, в качестве решения проблемы может использоваться Bing Translator API.

На официальном сайте Microsoft есть инструкции по использованию (http://msdn.microsoft.com/en-us/library/dd576287.aspx [1], http://www.microsoft.com/web/post/using-the-free-bing-translation-apis [2]), но, на мой взгяд, они достаточно запутаны и многословны, опишу простой алгоритм подключения и использования сервиса.

Для использлования майкрософтовских сервисов обычно нужен Windows Live Id. Раньше, чтобы воспользоваться API Bing Translator-а, достаточно было получить Bing App ID приложения, зарегистрировав его на https://ssl.bing.com/webmaster/developers/appids.aspx [3]. Теперь этот механизм считается устаревшим и больше не поддерживается [4].

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

1. Получить Windows Live Id (зарегистрировавшись по ссылке https://accountservices.passport.net/reg.srf [5])

2. Авторизоваться по Live Id на datamarket.azure.com и зарегистрироваться там, затем выбрать в разделе Data Microsoft Translator. Справа будет список тарифов, нам нужен самый нижний-бесплатный, подписываемся на него (Sign up).

3. Заходим в раздел «приложения» [6], регистрируем новое приложение. Client ID заполняем произвольно, Client secret уже сгенерирован. Redirect URI указываем любой, он не используется.

4. Теперь можно приступать к использованию. Общая концепция работы с API такая. Клиент обращается по https к OAuth-сервису Microsoft, передавая свои client_id и client_secret в POST-запросе. В ответ возвращается json-сериализованный объект, в котором есть поле access_token. Токен действителен в течении 10 минут, потом нужно заново его запрашивать.
После того, как access_token получен, можно послать GET-запрос переводчику, подписавшись токеном. Один из способов подписи — передать гет-параметр appId=Bearer ЗНАЧЕНИЕ_ТОКЕНА (вместе с пробелом). В этом же гет-запросе передаются данные, которые нужно перевести. В случае успеха, ответом является переведенная строка.

Приведу пример php-класса, который переводит текст.

<?php
class Translate {
 
    protected $msData, $accessToken;
 
    public function __construct($msData) {//в массиве msdata хранятся client_id и client_secret
        $this->msData = $msData;
        $this->initAccessToken();
    }
 
    protected function initAccessToken() {//получаем accessToken
        $curl = curl_init("datamarket.accesscontrol.windows.net/v2/OAuth2-13/" [7]);
        curl_setopt_array($curl, array(
            CURLOPT_POST => true, //формируем POST-запрос для получения токена
            CURLOPT_POSTFIELDS => http_build_query(array(
                'client_id' => $this->msData['clientid'],
                'client_secret' => $this->msData['clientsecret'],
                'scope' => 'http://api.microsofttranslator.com',//это значение указано в документации
                'grant_type' => "client_credentials"//это значение указано в документации
            )),
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_RETURNTRANSFER => true,
        ));
        $response = curl_exec($curl);
        $err = curl_errno($curl);
        if ($err)
            throw new Exception("curl err $err");
        $r_obj = json_decode($response);
        if (!isset($r_obj))
            throw new Exception("illegal response: $response");
        $this->accessToken = $r_obj->access_token;
    }    
 
    public function translate($text, $lang_to, $lang_from) {
        $query_arr = array(
            'appId' => 'Bearer '.$this->accessToken,
            'text' => $text,
            'from' => $lang_from,
            'to' => $lang_to,
            'contentType' => 'text/plain'
        );
        $query = http_build_query($query_arr);
        $url = 'http://api.microsofttranslator.com/V2/Http.svc/Translate?'.$query;
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $response = curl_exec($curl);
        $err = curl_errno($curl);
        if ($err)
            throw new Exception("curl err $err");
        $xml = new SimpleXMLElement($response); //получаем строку перевода из xml-ответа
        return (string) $xml;
    }
}

Надеюсь, этот пост будет полезен тем, кто решит подключить онлайн-переводчик к своему приложению.

Автор: franny


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/api/6906

Ссылки в тексте:

[1] http://msdn.microsoft.com/en-us/library/dd576287.aspx: http://msdn.microsoft.com/en-us/library/dd576287.aspx

[2] http://www.microsoft.com/web/post/using-the-free-bing-translation-apis: http://www.microsoft.com/web/post/using-the-free-bing-translation-apis

[3] https://ssl.bing.com/webmaster/developers/appids.aspx: https://ssl.bing.com/webmaster/developers/appids.aspx

[4] считается устаревшим и больше не поддерживается: http://social.msdn.microsoft.com/Forums/en-US/microsofttranslator/thread/02054a7c-090c-46a0-a8d1-2d57e236eb4d

[5] https://accountservices.passport.net/reg.srf: https://accountservices.passport.net/reg.srf

[6] «приложения»: https://datamarket.azure.com/developer/applications

[7] datamarket.accesscontrol.windows.net/v2/OAuth2-13/": https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/"