Для тех, кто мучается, перехватывая 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('<br>'), array("\n"), $translate[1]);
}
Вот только какие условия бана для второй функции я не знаю. С первой гугл не банит, хоть тысячами запросы можно слать.
Комментариев: 5. Обязательно оставьте свой!
Крутой парсер у тебя Илюха!
Не знал, что такая шняга есть компактная: curl_exec($ch);
Молодца.
Я сделал:
но на функции fopen
гугл дизайн изменил, так что строку
preg_match(‘/(.*)/Usi’, $html, $translate)
меняйте на нужную самостоятельно.
А почему бы не воспользоваться google API?
Вот только какие условия бана для второй функции я не знаю. С первой гугл не банит, хоть тысячами запросы можно слать.
header надо полностью подменять как на браузере и не будет бана.
Спасибо за инфу, не думал что гугл так просто распарсить, думал там защита типа токена стоит или что – то в этом роде, а тут вот так все, ППЦ
.
можно еще без пост запроса парсить
но не через file_get_contents() а через сокет:
через file_get_contents() к сожалению не катит, так как без headers гугл не пустит, угается ошибка 400, хоть на это у них ума хватило))
Всё, прикрылась лавочка с API гугл-транслейта (((
А парсеры придётся постоянно «подкручивать» ((