Парсер translate.google.com

Опубликовано 27 апреля, 2010 в PHP, Полезные мелочи

Для тех, кто мучается, перехватывая ajax запросы с переводчика Гугла, умотался и нашел эту страницу через поиск. Функции передается строка, возвращается перевод этой строки, в данном случае с русского на английский.

function translate($query){
    $query = urlencode(iconv('windows-1251', 'utf-8', $query)); //Если строка и так в utf-8, закомментировать
    $url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=$query&langpair=ru%7Cen"; //Вот сюда посылает браузер пользователя Гугл
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $html = curl_exec($ch);
    curl_close($ch);
    preg_match('/\"translatedText\":\"([^\"]+)\"/Usi', $html, $translate);
    return $translate[1];
}

Понятно, что «ru%7Cen» в $url есть направление перевода.

Если нужно перевести большой текст (~>200 знаков), то придется отправлять POST на главную страницу. Возвращается перевод в utf-8.

function translate2($query) {
    $query = urlencode(iconv('windows-1251', 'utf-8', $query));
    $url = "http://translate.google.com/";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,"js=y&prev=_t&hl=ru&ie=UTF-8&layout=1&eotf=1&text=$query&file=&sl=ru&tl=en");
    $html = curl_exec($ch);
    curl_close($ch);
    preg_match('/<textarea name=utrans wrap=SOFT dir="ltr" id=suggestion style=\"width:80%;margin:5px 0;overflow:auto\">(.*)<\/textarea><\/div>/Usi', $html, $translate);
    return str_replace(array('&lt;br&gt;'), array("\n"), $translate[1]);
}

Вот только какие условия бана для второй функции я не знаю. С первой гугл не банит, хоть тысячами запросы можно слать.




Комментарии «Парсер translate.google.com»:
Комментариев: 5. Обязательно оставьте свой!

Крутой парсер у тебя Илюха!
Не знал, что такая шняга есть компактная: curl_exec($ch);
Молодца.
Я сделал: http://Ranbler.felinta.ru
но на функции fopen

pistol 12.10.2010 в 18:51

гугл дизайн изменил, так что строку

preg_match(‘/(.*)/Usi’, $html, $translate)

меняйте на нужную самостоятельно.

mihdan 20.02.2011 в 23:41

А почему бы не воспользоваться google API?

LEX 07.09.2011 в 19:16

Вот только какие условия бана для второй функции я не знаю. С первой гугл не банит, хоть тысячами запросы можно слать.

header надо полностью подменять как на браузере и не будет бана.

Спасибо за инфу, не думал что гугл так просто распарсить, думал там защита типа токена стоит или что – то в этом роде, а тут вот так все, ППЦ :) .

можно еще без пост запроса парсить :) но не через file_get_contents() а через сокет:

http://translate.google.com/?js=y&prev=_t&hl=ru&ie=UTF-8&layout=1&eotf=1&text=$query&file=&sl=ru&tl=en

через file_get_contents() к сожалению не катит, так как без headers гугл не пустит, угается ошибка 400, хоть на это у них ума хватило))

vovans 14.10.2011 в 20:01

Всё, прикрылась лавочка с API гугл-транслейта (((

А парсеры придётся постоянно «подкручивать» ((

Ваш комментарий: