Мануал по написанию грабберов!

11.41K
.
Venser
Юзер кидала, не рекомендуется иметь с ним дело
Сегодня мы научимся писать грабы, в данном случае на JohnCMS. И так начнём… Допустим нам нужно ограбить вот это http://sotoz.ru/load/fotoprikol с чего мы начнём? Не зря я сказал что «…данном случае на JohnCMS…», то есть мы заодно и повторим работу с шапкой и ногами. Создаём в редакторе страницу index.php с шапкой (нам нужно поместить граб в папку http://ваш сайт.ру/папка/index.php) :
<?php
define('_IN_JOHNCMS', 1);
$headmod ="";
$textl = '';
require_once ("../incfiles/core.php");
require_once ("../incfiles/head.php");
header("Content-type:text/html; charset=utf-8");

Начало положено, приступим непосредственно к грабберу. Сначала нам нужно запросить данные с этой страницы, так? Вот…я покажу вам как это сделать:
$file = file_get_contents("http://sotoz.ru/nightlife/superchart/superchart.php?".$_SERVER['QUERY_STRING']);

Обьяснять вам что это за код, я вам здесь не буду, дабы не забивать лишним голову. Вы увидели куда я вставил адрес страницы? Отлично. Вам это нужно будет сделать точно также по моему примеру. Если вы вставите этот код к себе в страницу (естественно вставив ноги, смотреть нижу), то у вас на сайте получится страница, с точностью как у меня, с дизайном и т.д. Естественно нам это не надо, что мы делаем? Правильно, вырезаем то, что нам не нужно, для этого сканируем страницу, в данном случае это http://sotoz.ru/nightlife/supe ... t.php посмотреть исходный код её, вы можете здесь. Мы видим перед собой исходный код этой страницы. Нам нужно вырезать всё, что до слов «SUPERCHART #113 от 07.11.2009», и так как мы это сделаем? Давайте посмотрим на примере:

$file=preg_replace('/<?xml(.*?)<div class=\"mainmenu\">/si','',$file);


Не пугайтесь, сейчас всё обьясню. Вот этим действием мы с вами вырезали абсолютно всю шапку! Теперь по подробней: когда вы смотрели исходный код стриницы, с чего он начинался?? Именно с:
<?xml …тут дальше идут код шапки… а закончим шапку мы вот этим.. <div class="mainmenu">
Всё что между ними, то есть заключено в (.*?) убирается! Вот так просто, главное видеть код, видеть за что можно зацепиться. Вы спросите а почему я написал <div class=\"mainmenu\"> со слешами? Тут есть одна хитрость, в функции preg_replace() если встречается слеш (/) или двойные ковычки ("), то мы их как бы убираем вот этим знаком (\), покажу на примере: вы убираете адрес http://sotoz.ru если просто вставить его в функцию, то страница выдаст вам ошибку, но если же вы вставите её так http:\/ \/sotoz.ru то программа выдаст вам положительный результат, абсолютно так же и с двойными ковычками, допустим вы хотите начать вырезать с $file=preg_replace('/\"автомобиль\"(.*?)<div class=\"mainmenu\">/si','',$file); уловили да?) Вот так всё просто. Аналогичным образом вырезаем и низ страницы:

$file=preg_replace('/<\/div><small>(.*?)<\/html>/si','',$file);


Внизу мы зацепились за </div><small> так как в коде больше таких аналогов не встречается, и программа нашла где именно находится такая комбинация и до </html> всё вырезало.

Теперь вы спросите, вверху страницы написано «Рекорд» на SotoZ.Ru, вам оно не надо…есть ещё одна замечательная функция, которая исполняется вот так:

$file = str_replace('SotoZ.Ru', 'Твой сайт.ру', $file);


Здесь думаю из примеа всё ясно, функция заменяет одни ковычки, на другие, то есть в первых ковычках вы пишите то, что хотите вырезать, а в других то, на что хотите заменить. Не важно, будет ли это ваш сайт хоть пишите «Привет мама, папа», разницы нет, или же можете вторые ковычки оставить пустыми, тогда надпись SotoZ.Ru просто напросто исчезнет. Теперь переходим к следующему этапу. Граб написан, вроде всё работает, но вот одна незадача, когда пытаюсь скачать песню, мне выкидывает ошибку потому что файл расположен не у меня на сайте, а на исходном. Сейчас мы решим эту проблему опять же с помощью замечательной функции str_replace(); вот так это делается:

$file = str_replace('</b><a href="', '</b><a href="http://sotoz.ru/nightlife/superchart/', $file);


Здесь мы заменили начало ссылки на начало ссылки и адрес в которой папке лежит сайт! То есть когда вы будете скачивать файл, он будет запрашиваться с сервера где он лежит=)
Вот и подготовили мы граб, теперь выводим его:

echo $file;

Вот таким простым способом! Так делается всегда.
Теперь конечно же ставим ноги от двига:

require_once ("../../incfiles/end.php");
?>


Вот на этом я и завершаю написание. Думаю тема жить будет, так как юзеры просили создать такую тему, здесь можно выкладывать полезные функции для грабов, какими вы пользуетесь и т.д. Спасибо за внимание)
Прикрепленные файлы:
.
ЙА_ЙоЖег
это есть в библиотеке, крой тему
.
Юзер кидала, не рекомендуется иметь с ним дело
Alt_, и что с того, что это в библиотеке? Здесь будут думаю вопросы по грабам у многих!
.
Хотя нового для себя ничего не узнал,Но тему сносить не надо,пусть разные коды и вопросы по граббам тут будут.
.
ЁжиГ В СтрингАх
Я вот узнал
.
Юзер кидала, не рекомендуется иметь с ним дело
ReST, я здесь о самом простом сказал, дабы не заморачивать голову, пусть пока хоть что-то усвоят.
.
Юзер кидала, не рекомендуется иметь с ним дело
вот ещё полезный код, но это уже не для новичков))) Если грабите веб сайт, то у вас вероятно не совпадут кодировки, так что можно воспользоваться этим:

$file = iconv("windows-1251", "UTF-8", $file);
.
ЁжиГ В СтрингАх
А это че значит ? preg_replace('/<div class=\"separator\"><\/div>(.*?)<\/html>/si','',$file); че за сепаратор:-))
.
Юзер кидала, не рекомендуется иметь с ним дело
ты где это взял?
.
ЁжиГ В СтрингАх
В твоем грабе эмуля помнишь?
Всего: 586