Сегодня, в связи с тем что гугл собирается закрывать свой 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/
З.Ы. я знаю что код кривой, и при малейшем чихе упадет, но делать ничего не буду, это есть пример 🙂
у вас очень интересный блог. Спасибо!
Спасибо автору.
mb_strlen($text, ‘UTF-8’)
не работает совсем — Fatal error: Uncaught SoapFault exception: [soapenv:Client] Client error in /home/seosmm/e2l.org/www/BingTranslator.php:32 Stack trace: #0 /home/seosmm/e2l.org/www/BingTranslator.php(32): SoapClient->__call(‘Search’, Array) #1 /home/seosmm/e2l.org/www/BingTranslator.php(32): SoapClient->Search(Array) #2 /home/seosmm/e2l.org/www/translate1.php(17): Bing_Translate_API::translate(‘? English li…’, ‘en’, ‘ru’) #3 {main} thrown in/home/seosmm/e2l.org/www/BingTranslator.php on line 32
что-то походу у них изменилось, сейчас посмотрю.
вспомнил, они перешли на windows azure и ввели лимиты, я от них отказался в пользу translate.ru 🙂
Если ничего не путаю, то на страничке http://msdn.microsoft.com/en-us/library/ff512437.aspx есть пример на php как это безобразие использовать.