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

в 19:09, , рубрики: api, Веб-разработка, переводчик, Песочница, метки:

Добрый день!

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

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

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

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

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

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

3. Заходим в раздел «приложения», регистрируем новое приложение. 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/");
        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


  1. Alistair85:

    $curl = curl_init(“https://datamarket.accesscontrol.windows.net/v2/OAuth2-13”);

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js