« Битые таблицы myisam при переезде



Парсер картинок google images »



Для клиента
Пользователь:
Пароль:
 

Переводчик Google на PHP

Категория: / Mine блог / PHP (LAMP)
Сервис автоматического перевода текста от гугл с появлением API второй версии в конце лета 2011
внезапно стал платным. Переписав свои старые скрипты на новый лад программистам показывалось сообщение
"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();
 

@author: surg30n
@date: Пятница, 20 Январь 2012


Комментарии : 3


3] Гость - 21:20, 03 Май, 2012
В самый верх:
header ("Content-Type: text/plain; charset=utf-8");

и не будет белеберды.

От Эльхан Исаев.
2] Гость - 09:46, 02 Май, 2012
ru->en не переводит.

Выдает подобную белиберду "R\u045FS\u0402ReR\u0406R\u03BCS , R\u0458R ° F \" C \u003c \u20AC".
1] Гость - 21:37, 17 Февраль, 2012
Спасибо.
Комментировать:




Код подтверждения: *
Введите подтверждающий код, так же как он отображен на картинке.
Надоело разбирать числа на картинке? Зарегистрируся, докажи что ты не робот!

@СКАЖИРЕКЛАМЕНЕТ@