Скрипт "Проверить позицию в Google" работает с "google.com", но не с "google.pl" - мой сервер заблокирован? - PullRequest
0 голосов
/ 24 августа 2011

Я написал скрипт PHP, основанный на фрагменте кода, который я нашел с помощью Google. Его целью является проверка позиции определенного сайта в Google по заданному ключевому слову. Во-первых, он подготавливает соответствующий URL-адрес для запроса Google (что-то вроде: "http://www.google.com/search?q=the+keyword&ie=utf-8&oe=utf-8&num=50"),", затем он загружает источник сайта, расположенный по URL-адресу, подготовленному ранее. После этого он подсчитывает позицию с использованием регулярных выражений и знаний о какие классы div использует Google для результатов.

Сценарий отлично работает, когда URL-адрес, который я хочу загрузить, находится в домене "google.com". Но так как я намерен проверить положение польских людей, я бы хотел использовать "google.pl". Мне было бы все равно, но результаты поиска могут действительно отличаться между двумя (даже более 100 позиций разницы). К сожалению, когда я пытаюсь использовать домен "pl", cURL просто ничего не возвращает (сначала он ожидает тайм-аут). Однако, когда я запустил свой скрипт на другом сервере, он отлично работал на доменах "google.com" и "google.pl". У вас есть идея, почему что-то подобное может произойти? Есть ли вероятность того, что моему серверу было запрещено запрашивать домен "google.pl"?

Вот мой код cURL:

private function cURL($url)
{
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
    return curl_exec($ch);
    curl_close($ch);  
}

1 Ответ

2 голосов
/ 24 августа 2011

Прежде всего, я не могу воспроизвести вашу проблему. Я использовал следующие 3 команды cURL для имитации вашей ситуации:

curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.5 (KHTML, like Gecko) Version/5.1 Safari/534.51.3" http://www.google.com/search?q=the+keyword
curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.5 (KHTML, like Gecko) Version/5.1 Safari/534.51.3" http://www.google.pl/search?q=the+keyword
curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.5 (KHTML, like Gecko) Version/5.1 Safari/534.51.3" http://www.google.nl/search?q=the+keyword

Первый - .com, потому что это должно работать в качестве вашей контрольной точки. Положительно.
Второй - .pl, потому что именно здесь вы сталкиваетесь с проблемами. Это также просто работает для меня.
Третий - .nl, потому что это то место, где я живу (так что, в принципе, .pl для вас). Это тоже просто работает для меня.


Я не уверен, но это может быть одним из возможных объяснений:

  • Google.com является международным, например, когда я что-то ввожу в google.nl, я все равно перехожу на google.com/search?q=... (единственное отличие - дополнительный lang -парам).
  • С google.nl/search?q=... перенаправляет на google.com (302). Его фактическое тело пусто.
  • Не знаю, но возможно, что cURL не может обработать перенаправления, или вам нужно установить дополнительный флаг.

Если это равно true (что я сейчас проверю), вам нужно использовать google.com в качестве домена и добавить дополнительный lang -параметр вместо использования google.pl.

Причина, по которой ваш другой сервер делает свое дело, может быть в том, что конфигурация cURL меняется или версия cURL не совпадает.


Кроме того, он блокирует стандартную строку пользовательского агента cURL, поэтому я также предлагаю вам изменить ее на что-то вроде:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.5 (KHTML, like Gecko) Version/5.1 Safari/534.51.3

Это не имеет ничего общего с проблемами, с которыми вы сталкиваетесь, но вы на самом деле не закрываете сокет cURL, поскольку возвращаетесь, прежде чем закрыть его (все, что после return ... будет «пропущено»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...