Пишем граббер своими руками. Новая версия :)

1.41K
.
Так как предыдущий вариант морально устарел, решил написать свою версию.
И так, начнем.
К примеру будем грабить сайт http://mobfun.org/down/
Приступим.
Создаем папку в корне сайта с любым удобным названием. Так как на сайте-жертве используется мод_реврайт, то и и мы будем его использовать (не обязательно, но так удобнее)
Создаем в папке граббера файл .htaccess со следующим содержимым:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]


Мы создали правило, которое будет перенаправлять все запросы на index.php.

Теперь создадим папку includes, в ней создаем файл core.php со следующим содержимым:
//Скрываем файл от левых глаз
defined ('SYSTEM') or exit;
//Функция, которая получает страницу жертвы через cURL

function getContent($url) {
 $ch = curl_init(); //Запускаем сеанс cURL
 curl_setopt($ch, CURLOPT_URL, $url); //Передаем адрес страницы
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); //Задаем таймаут в секундах
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //Говорим cURL что результат нужно вернуть в переменную
 curl_setopt($ch, CURLOPT_USERAGENT, 'Opera 11'); //Задаем юзерагент
 curl_setopt($ch, CURLOPT_REFERER, 'http://mobfun.org/'); //Передаем реферер
 $result = curl_exec($ch); //Выполняем
 curl_close($ch); //Закрываем сеанс cURL
 return $result; //Возвращаем результат
}

//Функция очистки кеша

function clearCache($dir) {
 $read = array_diff(scandir($dir), array('.', '..', '.htaccess')); //читаем папку
 foreach($read as $file) { //перебираем массив
 if(is_file($dir . '/' . $file)) //если это файл
 unlink($dir . '/' . $file); //то удаляем
 else //иначе
 continue; //продолжаем дальше
 }
}

//Функция проверки даты последней чистки кэша и очистка кэша в случае необходимости
function checkCache($dir, $time = 24) {
 $file = $dir . '/lastclean.dat'; //Путь к файлу, который указывает дату последней очистки
 if(!file_exists($file))
 file_put_contents($file, 1); //если файл очистки не существует. то создаем
 if(filemtime($file) < (time() - $time * 3600)) //если кэш чистился больше $time часов назад, то чистим
 clearCahce($dir); //чистим
}

//Объявляем константы и переменные
define ('DIR', dirname($_SERVER['PHP_SELF'])); //Определяем имя папки с граббером
define ('URL', 'http://mobfun.org/down/' . strtr($_SERVER['REQUEST_URI'], array(DIR => '', '//' => '/', '\\' => '/'))); //Определяем URL текущей страницы
define ('CTIME', 24); //Время жизни кеша в часах
define ('CACHE', 'cache/' . md5(URL)); //Объявляем файл кеша

checkCache('cache', CTIME); // проверяем кэш на время существования


теперь в папке с граббером создаем файл index.php
со следующим содержимым
//Задаем путь к корню
$rootpath = $_SERVER['DOCUMENT_ROOT'] . '/';
//Подключаем файл функций
define ('SYSTEM', TRUE);
require 'includes/core.php';
//Подключаем ядро джона
define ('_IN_JOHNCMS', TRUE);
require $rootpath . 'incfiles/core.php';
//Объявляем headmod
$headmod = substr(CACHE, 0, 7); //Делаем хэедмод динамическим для учета переходов в онлайне
//Объявляем титл страницы
$textl = 'Качай бесплатно';

//Проверяем, существует ли файл кеша для данной страницы
if(file_exists(CECHE)) {
 $content = file_get_contents(CACHE); //если существует, то загружаем кэш
 //и выводим
 require $rootpath . 'incfiles/head.php'; //подключаем шапку
 echo $content; //выводим результат
 require $rootpath . 'incfiles/end.php'; //подключаем ноги
 exit; //завершаем выполнение скрипта
}

//Создаем массив с заменами
$strtr = array(
 'href="/down' => 'href="' . DIR //Заменяем имя папки в ссылках на свою
);
//Создаем массив с регулярками
$replaces = array(
 '#<\?xml.*?class="phdr">#s' => '<div class="phdr">', //Вырезаем верх
 '#<table class="tmn".*</html>#s' => '' //Вырезаем низ
);
//Получаем страницу
$content = getContent(URL);
//Обрабатываем регуляркой, массив с правилами $replaces
$content = preg_replace(array_keys($replaces), array_values($replaces), $content);
//Делаем замену нужных элементов, массив $strtr
$content = strtr($content, $strtr);
//Записываем результат в кэш
file_put_contents(CACHE, $content);
//Подключаем шапку
require $rootpath . 'incfiles/head.php';
//Выводим результат
echo $content;
//Подключаем ноги
require $rootpath . 'incfiles/end.php';


Осталось создать в папке с граббером папку cache и поставить на нее права 777.
---------------------------------------------------------
Ниже прикреплен файл граббера расмотренного в мануале.
Прикрепленные файлы:
.
Вот вам и граббер спейса
.
походу следующей темой будет пишем бота
.
NIKO (22.11.2012 / 21:26)
Вот вам и граббер спейса
Через посредника это не граббер . Просто по-быстрому написал, как видишь замен мало, ибо мой сайт также на ждоне.
.
Screamer (22.11.2012 / 21:27)
походу следующей темой будет пишем бота
Ога . Мну альк удалит
.
~XeOn~ (22.11.2012 / 21:28)
Через посредника это не граббер . Просто по-быстрому написал, как видишь замен мало, ибо мой сайт также на ждоне.
угу. Их и этого хватит чтобы потом им барыжить гг
.
Вот же старый, вырезал все пробелы и табуляцию , терь код не красивый гг
.
NIKO (22.11.2012 / 21:28)
угу. Их и этого хватит чтобы потом им барыжить гг
Что мне мешает забанить? гг. Мой сайт же грабится. Вон сайты 7bo.ru и seawap.ru тоже грабили, сделал небольшую защиту от граббинга гг, с выводом сайта-оригинала во фрэйме вместо контента
.
Толи Ангел Ада, толи Бес в Раю
Ага,уже хотели продать этот граб
.
emaks (22.11.2012 / 21:32)
Ага,уже хотели продать этот граб
Как? Я его 10 минут назад написал гг
Всего: 53