Парсинг средствами PHP

Получить контент другого сайта средствами PHP очень просто. Для этого существует ряд полезных функций, которые можно смело задействовать для этих целей. Самый простой вариант - получение контента при помощи функции file_get_contents. Достаточно передать URL в качестве параметра этой функции и она вернет полученный контент или false - в случае неудачи. Но мы легких путей не ищем, поэтому дальше рассмотрим более сложную функцию, обладающую рядом дополнительных и полезных качеств.

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

Итак посмотрим на саму функцию, а затем перейдем к описанию ее работы и применения.

(.*)<\/title>~U', $content, $res))?strval($res[1]):'';
          //--- meta tags ---
          if( preg_match_all('~]+>~', $content, $res, PREG_SET_ORDER) > 0 ){
            foreach($res as $meta) $URL_RESULT[strtolower($meta[1])] = $meta[2];
          };
        }elseif( $SERVER_CODE == ABI_URL_STATUS_REDIRECT_301 || $SERVER_CODE == ABI_URL_STATUS_REDIRECT_302 ){
          if( preg_match('~location\:\s*(.*?)\\r\\n~si', $header, $res)){
            $REDIRECT_URL = rtrim($res[1]);
            $URL_PARTS = @parse_url($REDIRECT_URL);
            if( isset($URL_PARTS['scheme'])&& isset($URL_PARTS['host'])) $url = $REDIRECT_URL;
              else $url = $URL_SCHEME.'://'.$URL_HOST.'/'.ltrim($REDIRECT_URL, '/');
            }else{
              break;
            };
          };
        };// GET request is OK
      fclose($SOCKET);
    }// socket open is OK
    else{
      break;
    };
    $TRY_ID++;
  }
  while( $TRY_ID <= MAX_REDIRECTS_NUM && $URL_RESULT === false );
  return $URL_RESULT;
  };
?>

Итак, входящими параметрами являются: $url - строка, содержащая URL http-протокола, $user_agent - строка с любым юзер-агентом (если пропустить параметр или установить его в null - user_agent будет как в IE). Константа MAX_REDIRECTS_NUM устанавливает количество разрешенных редиректов (поддерживаются 301 и 302 редиректы).

Теперь перейдем к примерам практического использования этой функции:

Как видно из вышеприведенного примера, мы можем получить всю информацию по запрошенному URL. Кроме того, можно получить значения любого мета-тега. Для этого можно воспользоваться следующим кодом:

Вышеприведенные примеры были протестированы в личных проектах (проверка обратных ссылок, доступность ресурсов). Надеюсь, что вам тоже удастся найти им достойное применение.

Информация
Автор webmancer Нравится 0
Рейтинг 1 Не нравится 0
Голосов 1 Прочитали 1
Дата 2011-10-05 09:00:00 В избранном 0
Ваша реакция

Только авторизованные пользователи могут участвовать в рейтингах, делать заметки и добавлять в избранное.

Зарегистрироваться

Авторизоваться

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