Добрый день!
Иногда возникает потребность в переводе данных, введенных пользователем на сайте (для генерации ЧПУ на сайтах, при мультиязычном контенте и т.п.). Так как 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
$curl = curl_init(“https://datamarket.accesscontrol.windows.net/v2/OAuth2-13”);