Сегодня, в связи с тем что гугл собирается закрывать свой translate api, таки собрался и сотворил класс для перевода текста через SOAP сервис Bing
В связи с тем, что по каким-то странным обстоятельствам нормальной документации нет, а есть только куцый пример на VB (о ужас!) и C# с использованием видимо готовых библиотек пришлось повозиться и подбирать параметры и вид, в котором надо данные отправить сервису, чтоб он не ругался непонятными словами.
В результате родилось вот что:
<?php
class Bing_Translate_API {
function translate($text, $from = 'en', $to = 'ru') {
if (mb_strlen($text)>2000)
{
echo "шмахтунг\n";
return false;
}
$c=new SoapClient("http://api.bing.net/search.wsdl",array(
"AppId"=>"bingApiId",
"Version"=>"2.2"
));
$arr=array(
"parameters"=>array(
"AppId"=>"bingApiId",
"Market"=>"en-us",
"Version"=>"2.2",
"Sources"=>array(
"Translation"
),
"Translation"=>array(
"SourceLanguage"=>$from,
"TargetLanguage"=>$to
),
"Query"=>$text)
);
$r=$c->Search($arr);
if (isset($r->parameters->Translation->Results->TranslationResult->TranslatedTerm))
{
return $r->parameters->Translation->Results->TranslationResult->TranslatedTerm;
}
else
{
echo "ахтунг\n";
return false;
}
}
}
?>
а вызывать пользоваться этим безобразием теперь вообщем-то просто:
<?php
echo Bing_Translate_API::translate("text to translate","en","ru");
?>
Кроме того, выяснилось, что у Bing API есть ограничение на размер запроса примерно в 2кБ текста. А Примерно потому, что через раз он текст с размером 2048 символов не переводил, уж не знаю почему.
BingApiId получать по ссылке http://www.bing.com/developers/
З.Ы. я знаю что код кривой, и при малейшем чихе упадет, но делать ничего не буду, это есть пример 🙂