Переводчик Google на PHP
Категория: / DEV Блог
/ PHP (LAMP)
Сервис автоматического перевода текста от гугл с появлением API второй версии в конце лета 2011
внезапно стал платным. Переписав свои старые скрипты на новый лад программистам показывалось сообщение
"Daily Limit Exceeded", что означает что нужно занести денежку в гугль. Ценник на данный момент такой -
1 M текста = $20.00. Много это или мало?, зависит от решаемых задач. Что забавно, бесплатная альтернатива от
майкрософт в лице апи бинга продолжает работать и можно адаптировать скрипт под него.
Ну а мы с вами займемся простым незаконным парсингом результатов веб формы гугло переводчика, расположенной по адресу
http://translate.google.ru/translate_a
Если не превышать разумных пределов обращений к этой форме, можно успешно пользоваться ей вместо платного апи.
Скрипт переводчика google translate (PHP):
Ну и тестирующий код
внезапно стал платным. Переписав свои старые скрипты на новый лад программистам показывалось сообщение
"Daily Limit Exceeded", что означает что нужно занести денежку в гугль. Ценник на данный момент такой -
1 M текста = $20.00. Много это или мало?, зависит от решаемых задач. Что забавно, бесплатная альтернатива от
майкрософт в лице апи бинга продолжает работать и можно адаптировать скрипт под него.
Ну а мы с вами займемся простым незаконным парсингом результатов веб формы гугло переводчика, расположенной по адресу
http://translate.google.ru/translate_a
Если не превышать разумных пределов обращений к этой форме, можно успешно пользоваться ей вместо платного апи.
Скрипт переводчика google translate (PHP):
class google_translator_exception extends Exception {
}
class google_translator {
private $_user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
private $_sleep = 0;
private $_lang_s = '';
private $_lang_t = '';
private $_sources = array();
function set_sleep($s) {
$this->_sleep = $s;
return $this;
}
function set_langs($from, $to) {
$this->_lang_s = $from;
$this->_lang_t = $to;
return $this;
}
function set_text($src) {
$this->_sources = is_array($src) ? $src : array($src);
return $this;
}
/**
* @param mixed array or text
* @return mixed array[0,1,2..] or text
*/
function translate($text = false) {
$is_array = is_array($text);
$text = ($text === false) ? $this->_sources : (is_array($text) ? $text : array($text));
$result = array();
$url = "http://translate.google.ru/translate_a/t?client=t&text=%s&hl={$this->_lang_t}&sl={$this->_lang_s}&tl={$this->_lang_t}&multires=1&otf=2&ssel=4&tsel=0&sc=1";
$ch = curl_init();
$Headers = array(
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3",
"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7"
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $Headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $this->_user_agent);
foreach ($text as $k => $t) {
$t = urlencode($t);
$ref = "http://translate.google.ru/#{$this->_lang_s}|{$this->_lang_t}|{$t}" ;
curl_setopt($ch, CURLOPT_REFERER, $ref);
curl_setopt($ch, CURLOPT_URL, sprintf($url, $t));
$body = curl_exec($ch);
if (CURLE_OK != curl_errno($ch)) {
throw new google_translator_exception (curl_error($ch));
}
$body = iconv('KOI8-R', 'UTF-8', substr($body,2));
$result[$k] = preg_replace('@^\[\"(.*)\",\".*$@Uu', '$1', $body);
if ($this->_sleep) sleep($this->_sleep);
}
curl_close($ch);
return $is_array ? $result : array_pop($result);
}
}
Ну и тестирующий код
$gt = new google_translator();
echo
$gt->set_langs('en', 'ru')
->set_text('hello babe, how are you')
->translate();
Подскажите пожалуйста, как можно создать такой вот переводчик: http://opentran.net/ ?
Какие библиотеки использовать?