Категории
Парсинг средствами 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 только зарегистрированные пользователи могут комментировать и оставлять рецензии. Авторизованный пользователь так же может ставить отметки книгам, фильмам и другим постам. Вести учет прочитанных книг и просмотренных фильмов. Добавлять посты в избранное и иметь к ним быстрый доступ.