Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP обучение на примерах - Кухарчик А..pdf
Скачиваний:
139
Добавлен:
24.05.2014
Размер:
24 Мб
Скачать
☆

«Грабим» странички

121

хватит места, чтобы сделать запись, он обнулит файл и ничего в него не запишет. А все ваши прежние данные будут просто утеряны.Частовобъемсайтавходятlog-файлы,почтаит.д.Это тоже надоучитывать в своей работе.

«Грабим»1странички

Не бойтесь, ничего криминального в этом нет. Речь идет о переносе информации со страницы в интернете на вашу страницу. Нам понадобится «подопытный кролик», на роль которого я предлагаю выбрать сайт http://subscribe.ru.

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

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

Сначала нам потребуется адрес сайта, с которого будем «грабить» информацию. Например: http://win.subscribe.ru/catalog/ latest.

ВНИМАНИЕ

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

По указанному адресу мы находим все переведенные в категорию «серебряных» рассылки. Причем список постоянно обновляется, оставаясь таким образом актуальным всегда, и в коде мы должны будем учесть эти изменения.

Сначала приведем весь код, затем поясним его.

«Грабить» от англ. grab (хватать, захватывать). (Примеч. ред.)

122

Программирование

<?php

// начало

$link = "http://win.subscribe.ru/catalog/latest"; $file = @fopen($link, "r");

if ($file) {

$rf = fread($file, 200000);

fclose ($file);

} else

{

echo "<h3 align=сеnter>Извините, запрошенная страница временно не доступна!</h3>

<center>

<IMG src=http://virtual.bresttelecom.by/banner.jpg width=468 height=60 border=0 alt=\"Виртуальный Брест\">

</A><br><br>";

}

// этап 1

$rf = trim (chop ($rf));

$s = strpos($rf, "<!-noindex-><FORM", 0) ; $rf = substr($rf, $s);

// этап 2

$s = strpos($rf, "<!-/noindex-><table") ; $rf = substr($rf, 0, $s) ;

// этап 3

$rf = str_replace ("/catalog/","http://win.subscribe.ru/ catalog/",

$rf);

$rf = str_replace ("/archive/","http://win.subscribe.ru/ archive/",

$rf);

$rf = str_replace ("ACTION=/member/

«Грабим» странички

123

quick", "ACTION=http://win.subscribe.ru/member/quick", $rf) ; $rf = str_replace ("/img/money2.gif","http:// win.subscribe.ru/money2.gif", $rf);

$rf = str_replace ("/img/all4.gif","http://win.subscribe.ru/ af.gif", $rf);

$rf = str_replace ("/img/af.gif","http://win.subscribe.ru/ af.gif", $rf) ;

// этап 4 echo $rf; ?>

Теперь опишем код. В самом начале нам нужно скопировать содержимое страницы. Записываем ее адрес и открываем по нему соединение. Если соединение успешно установлено, можно считать весь файл (указываем 200 000 байтов для считывания, что явно больше размера открываемого файла). Если произошла ошибка открытия, предупреждаем об этом посетителя и выводим ему что угодно, например баннер.

Далее рассмотрим код по обозначенным этапам. Этап 1 начинается со строки:

$rf = trim (chop ($rf));

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

Потом нам нужно определиться с местом, из которого будем выводить информацию:

$s = strpos($rf, "<!-noindex-><FORM", 0) ;

Эта команда позволяет найти номер позиции указанной последовательности символов в строке, в которую мы считали весь код файла. Результат помещается в переменную $s.

Следующей строкой удаляем все, что находится перед этой комбинацией (в том числе и баннеры):

$rf = s u b s t r ( $ r f , $ s ) ;

124

Программирование на РНР

Этап 2. Делаем почти то же самое, что и на первом этапе, но только для конца файла. Файл оказывается обрезан с начала и с конца так, как мы задаем. Обратите внимание, что в данном случае все оказалось очень просто, но иногда приходится применять другие методы для выделения кода, границы которого иногда трудно определить.

В результате этой обработки у нас уже есть почти все, что надо. Теперь можно было бы просто вывести информацию на экран нашему посетителю, но есть один нюанс, который нужно учитывать: ссылки не абсолютные, а относительные.

Однако относительных ссылок не так много, поэтому проблема решается просто.

Этап 3. Заменяем то, что есть, на то, что нам нужно. Например:

$rf = str_replace

("/catalog/","http://win.subscribe.ru/catalog/", $rf);

Так мы заменяем во всей строке $rf относительные ссылки на абсолютные. Точно так же поступаем с остальными ссылками, которые встречаются в коде страницы. Это не очень оптимальное решение, но достаточно точное.

Этап 4. Выводим результат на экран посетителю. А этот результат — нужный нам код HTML-страницы, который и будет отображен браузером.

Если вы хотите интегрировать этот код в код своей страницы, вам скорее всего придется сделать еще одно — «подогнать» ширину таблиц. Ничего сложного в этом нет: находим, какой параметр отвечает за размер страницы, и заменяем его значение на пустую строку.

Перед запуском скрипта убедитесь в том, что все указанные адреса действительно существуют и содержат необходимую информацию в нужной форме. Иначе ваши посетители будут очень недовольны вашей работой.

Соседние файлы в предмете Программирование