Как написать граббер (Rating: +24)
<?php /* *Как написать граббер. *автор: nc_soft *28.09.07 */ /* Любой граббер для удобства можно разделить на ТРИ оcновных части-этапа: -получение -обработка -выдача Получение. Для того, что бы граббер нормально функционировал необходимо написать функцию для получнения страницы с удаленного хоста по заданному url, надежнее пользоваться сокетами (потому что библиотека CURL установлена не везде и не всегда, использовать file_get_contents() и комбинации implode('',file(..)) конечно тоже можно, просто сокет предоставляет побольше возможностей. Напишем функцию получния страницы по урл. */ function data($path,$host) { /* $path путь к файлу скрипта, а так же передаваемые параметры $host сграббливаемый хост (например, sasisa.ru) */ $fp = fsockopen($host, 80); if (!$fp) { die('ошибка'); } else { $out = "GET $path HTTP/1.0\r\n"; $out .= "Accept: image/gif, application/xhtml+xml, */*\r\n"; $out .= "Accept-Language: ru\r\n"; $out .= "Host: $host\r\n"; //прикинемся оперой-мини $out .= "User-Agent: Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1716; ru; U; ssr)\r\n"; $out .= "Cache-Control: no-cache\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $headers = ""; while ($str = trim(fgets($fp))) $headers .= "$str\n"; $body = ""; while (!feof($fp)) $body .= fgets($fp); fclose($fp); } //возвращаем данные return $body; } /* Итак, функция для получения страницы готова, теперь составим функцию для обработки данных, тоесть для выреза рекламы, подмены ссылок итп */ /* function process($s) { Здесь сложно дать какие-то рекоммендации, все "грабберописание" состоит в основном в придумывании этой функции, сделаем пока что "заглушку" на этом месте return $s; } */ /* Для корректной работы грабба необходимо теперь правильно определять переменную $path, для примера давайте граббить всем известный http://wen.ru/forum/index.php пример очень характерный, потому что многие "потенциальные жертвы" грабов (загруз центры например) состоят как раз из одного файла */ //с хостом определились $host='wen.ru'; if (empty($_SERVER['QUERY_STRING'])) { //начальная позиция $path='/forum/index.php'; } else { //новые параметры $path='/forum/?'.$_SERVER['QUERY_STRING']; } /* теперь необходимо зайти на страницу форума и посмотреть ее в коде видно что ссылки выдаются так <a href="/forum/?p=1&f=1&w=htm">Общение</a> для работы грабба достаточно изменить ссылку так <a href="index.php?p=1&f=1&w=htm">Общение</a> что и сделаем в функции process */ /*function process($s) { $s=str_replace('<a href="/forum/','<a href="index.php',$s); return $s; }*/ //можно в принципе запускать (ПЕРВЫЙ ЭТАП) $s=data($path,$host); //обрабатываем (ВТОРОЙ ЭТАП) $s=process($s); //выдаем результат (ТРЕТИЙ ЭТАП) /* третий этап не так прост как кажется, если вы граббите загрузки, то необходимо организовать переадресацию на прямую ссылку с контентом */ header('Content-type:text/html;charset=utf-8'); echo $s; /* как видим, граббер вполне работает, только не грузятся смайлики, давайте подкорректируем это и впишем свой копирайт на страницу */ function process($s) { $s=str_replace('<a href="/forum/','<a href="'.$_SERVER['SCRIPT_NAME'],$s); //смайлы $s=str_replace('<img src="','<img src="http://wen.ru/',$s); //копирайт $s=str_replace('</body>','<div>(c)snippets</div></body>',$s); return $s; } /* разумеется, вы не сможете написать в тему или создать ее, тут надо использовать POST запросы, задача этой статьи не создание флудер-скрипта а ознакомление с принципами написания грабберов. */ ?>
Rating:
+24
Views: 3629Comments (9) »