poisen » 2011.05.12 01:43

учимся писать граб. Счего начать.?

TLENS » 2011.05.12 01:44

Ты шаришь хоть немного в пыхе?

poisen » 2011.05.12 01:46

ну немного если ток немного :)

TLENS » 2011.05.12 01:49

Корочь возьмем простую страничку например погода в киеве

poisen » 2011.05.12 01:51

ок

TLENS » 2011.05.12 01:59

Граб основан на том он как браузер получает код обрабатывает и отображает.

Код:

1
span style="color: #0000BB"><?php// Первое нам надо определить что надо качать// Но определять мы не будем просто для начала впишем адрес так как страничка будет одна грабится$url = 'http://m.gismeteo.ua/weather/4944/';// И получаем HTML код в переменную. $f стандартной функцией file_get_contents$f = file_get_contents($url);// теперь у нас в переменной содершится исходный код страницы// Проверим echo выводит текст со скрипта в браузерecho $f;?>

Добавлено спустя   2 минуты  8 секунд:
Проблема нет стилей и не отображаются картинки так?
Добавлено спустя   6 минут  12 секунд:
это п тому что там такой html код его можно увидеть вункцией highlight_string

Код:

1
span style="color: #0000BB"><?php// Первое нам надо определить что надо качать// Но определять мы не будем просто для начала впишем адрес так как страничка будет одна грабится$url = 'http://m.gismeteo.ua/weather/4944/';// И получаем HTML код в переменную. $f стандартной функцией file_get_contents$f = file_get_contents($url);// теперь у нас в переменной содершится исходный код страницы// Проверим echo выводит текст со скрипта в браузерecho $f;//вставим разделительecho '<hr />';//и покажем код чтобы браузер не читал его это для нас чтоб видно было что вырезатьhighlight_string($f);?>
TLENS » 2011.05.12 02:13

Дале надо заменить адреса картинок
заменять будем функцией str_replace('Что заменить','На что заменить','Из чего заменить т.е. текст (наш html код)');

Код:

1
span style="color: #0000BB"><?php// Первое нам надо определить что надо качать// Но определять мы не будем просто для начала впишем адрес так как страничка будет одна грабится$url = 'http://m.gismeteo.ua/weather/4944/';// И получаем HTML код в переменную. $f стандартной функцией file_get_contents$f = file_get_contents($url);// теперь у нас в переменной содершится исходный код страницы// Проверим echo выводит текст со скрипта в браузер$f = str_replace('src="/','src="http://m.gismeteo.ua/',$f);echo $f;//вставим разделительecho '<hr />';//и покажем код чтобы браузер не читал его это для нас чтоб видно было что вырезатьhighlight_string($f);?>

Попробуй появлятся картинки?

poisen » 2011.05.12 02:19

так. С этим подразобрался вроде.

TLENS » 2011.05.12 02:23

Ну понял почему картинки начали отображатся?
Там в мы получили такой код картинок
<img width="55" height="55" alt="Ясно" src="/static/images/icons/new/n.moon.png" />
когда мы заменили src="/ на  src="http://m.gismeteo.ua/
И у нас получилось html
<img width="55" height="55" alt="Ясно" src="http://m.gismeteo.ua/static/images/icons/new/n.moon.png" />

poisen » 2011.05.12 02:27

это тоже разобрал. Потом еще закреплю практикой.

TLENS » 2011.05.12 02:29

Ну значет дам задачку какой php код надо вставить чтобы отобразились css стили
Добавлено спустя   5 минут  51 секунду:
Подсказка нужна?

poisen » 2011.05.12 02:44

ага. Также как и с кортинками только меняется путь на путь к css

TLENS » 2011.05.12 02:45

Прогрес теперь строку в студию как ты это сделаешь

TLENS » 2011.05.12 02:56

Корочь не продолжу пока не увижу код

poisen » 2011.05.12 04:27

домой приду с компа попробую набросать.

TLENS » 2011.05.12 04:44

Ок

DarkRiDDeR » 2011.05.12 16:46

TLENS, загружает браузер CSS, прочтя это(допустим) <link rel="stylesheet" href="/style.css" type="text/css"/>. Как было выше сказано, poisen, нужно изменить путь, нужно указать браузеру тот CSS, который есть. Меняем:

Код:

1
span style="color: #0000BB"><?php$url = 'http://m.gismeteo.ua/weather/4944/';$f = file_get_contents($url);$f = str_replace('src="/','src="http://m.gismeteo.ua/',$f);$f = str_replace('<link rel="stylesheet" href="','<link rel="stylesheet" href="http://m.gismeteo.ua',$f); //Меняем путь к CSSecho $f;echo '<hr />';highlight_string($f);?>
TLENS » 2011.05.12 16:57

DarkRiDDeR
А ты не подсказуй

DarkRiDDeR » 2011.05.12 18:03

Кажись я не в темку попал, извенясь, :).
Ладн, моя задач:
обрезать всё до тега <body> включительно. Ведь зачем нам чужие заголовки и мета-теги, и т.п.? Ну и напоследок тег </bodу> нейтрализовать. Не будет же он болтаться на морде, как кусок ненужной кожи.

TLENS » 2011.05.12 18:42

Но это потом он в регулярках не шарит

Gemorroj » 2011.05.12 18:51

Код:

1
span style="color: #0000BB"><?php$xml = new SimpleXMLElement('http://wapinet.ru/', null, true);echo $xml->body[0]->asXML();
TLENS » 2011.05.12 19:24

А хотя и сейчас познакомимся с ними.
вообщем даю кусочек кода он будет у тебя шаблоном пожже будешь писать боле быстрые регулярки.
например нам надо вырезать неизвесный текст
мы берем текст начало и конец извесного.
вырезать заголовки html начиная с <head> и заканчивая </head>
будешь использовать preg_replace

Код:

1
lt;?$f = preg_replace('/<head>.*?<\/head>/s','',$f);

где .*? это неизвесный текст
Наверное заметил я поставил обратный слеш \ перед слешем
Это для того чтобы заэкранировать спец символ /
спец символы это те символы которые использует выражения
их много приведу популярные \^ $ . [ ] | ( ) ? * + { } / ^
их надо экранировать в нашем случае.
например если нам надо вырезать ссылку с неизвесным текстом тот что меняется скриптом
допустим <a href="http://wapinet.ru/ne_izvesnuy_text">ne_izvesnuy_text</a>
чтобы вырезать такую ссылку надо применить preg_replace('/<a href="http:\/\/wapinet\.ru\/.*?">.*?<\/a>/s','',$f);
Добавлено спустя   4 минуты  8 секунд:

Gemorroj написал:

Код:

1
span style="color: #0000BB"><?php$xml = new SimpleXMLElement('http://wapinet.ru/', null, true);echo $xml->body[0]->asXML();

Ну можно и так хотя я ниразу так не делал.
Я воще последнее время все по масивам расбиваю и выводится как свой а вообще если чесно то все по базам пару последних скриптов

DarkRiDDeR » 2011.05.13 16:34

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

poisen » 2011.05.24 23:33

Хороший пример! И главное я вкуриваю потихоньку :) . А как будет выризатся поле с отображением линка до файла?

DarkRiDDeR » 2011.05.27 15:26

Есть <a href="http://wapinet.ru/ne_izvesnuy_text">ne_izvesnuy_text</a>
Вырезаем (если правильно понял):

Код:

1
preg_replace('#(<a href=")http:\/\/wapinet\.ru\/(.*?">.*?<\/a>)#is', '$0', $f); //Останется <a href="ne_izvesnuy_text">ne_izvesnuy_text</a>

Можно вырезать и по другому, много способом. Ну пока ладно. Короче, что в скобках, сравни с предыдущим примером, как бы сохраняется в переменных по очереди. $1 - <a href=", $2 - .*?">.*?<\/a>. $0 - это всё сохранённое, а именно: <a href=".*?">.*?<\/a>

poisen » 2011.05.29 09:34

Ага... Так сейчас попробую .

poisen » 2011.05.29 12:39

http://fank.ru/foto/category/s/13/
вот что выходит
http://xmxx.ru/video2/video4/
выризал что смог
как правельно исправить чтобы перети к фото и вырезать альбомы
$inf = str_replace('<a href="/foto/data/s/">[v]</a>','<a href="http://fank.ru/foto/s/">Смотреть</a>',$inf);
$inf = str_replace('/<a href="http:\/\/fank\.ru\/foto\/album\/u\/.*?">.*?<\/a>/s','',$inf);

а в целом вот

Код:

1
span style="color: #0000BB"><?php//ob_start(); // включаем буферизацию$conn = curl_init(); // создаём новое curl подключениеcurl_setopt($conn, CURLOPT_URL, "http://fank.ru/foto/category/s/13/?".$_SERVER['QUERY_STRING']); // подключаемся по по ссылкеcurl_setopt($conn, CURLOPT_RETURNTRANSFER, 1); // возвращаем полученные данные в ссылку (не печатаем)curl_setopt($conn, CURLOPT_USERAGENT, "Nokia2630/2.0 (04.90) Profile/MIDP-2.1 Configuration/CLDC-1.1"); // маскеруемся под юзер-агент$inf = curl_exec($conn); // получаем данные в переменную $infcurl_close($conn); // закрываем соединение$inf = preg_replace('~<\?xml version=(.+)<body>~is', '', $inf); // убираем шапку документа$inf = preg_replace('~<div class="header"><a href="http://fank.ru/"><img src="http://i.fank.ru/i/d0/ru/logo_foto.gif" width="120" height="34" alt="" /></a></div>~isu', '', $inf);$inf = preg_replace('~<div class="body">Language: <img src="http://i.fank.ru/i/d0/flag_en.gif" alt="" /> <a href="http://fank.mobi/">en</a> | <img src="http://i.fank.ru/i/d0/flag_ru.gif" alt="" /> ru*<br/></div>~isu', '', $inf);$inf = str_replace('<a href="http://waplog.net/ru/c.shtml?13"><img src="http://c.waplog.net/ru/13.cnt" alt="waplog"/></a>', '', $inf);$inf = preg_replace('|<div class="downban">(.*?)</div>|is','</div>',$inf);$inf = str_replace('<img src="/f/', '<img src="http://f1.fank.ru/f/', $inf); // исправляем ссылку на скриншот$inf = str_replace('<a href="/foto/data/s/">[v]</a>','<a href="http://fank.ru/foto/s/">Смотреть</a>',$inf);$inf = str_replace('<a href="/foto/data/s/', '<a href="http://fank.ru/foto/data/s/', $inf);$inf = str_replace('/<a href="http:\/\/fank\.ru\/foto\/album\/u\/.*?">.*?<\/a>/s','',$inf);$inf = str_replace('<a href="/foto/category/s/13/', '<a href="http://fank.ru/foto/category/s/13/', $inf);$inf = str_replace('<div class="box">', '<div class="ok">', $inf); // изменяем под стили блок$inf = str_replace('<div class="m">', '<div class="main">', $inf); // изменяем под стили блокinclude '../header.php'; // подключаем шапку документаecho $inf; // выводим на печать отредактированные данныеinclude '../footer.php'; // подключаем низ документа?>
Swinger » 2011.05.30 17:32

preg_match('#<body>(.*?)</body>#si', file_get_contents('http://wapinet.ru/'), $body);
echo $body[1]; // выведет все, что находится между тегами body
и ненад вырезать всякие тэги

N1ck » 2011.10.27 20:06

<!--LiveInternet logo--><a href="http://www.liveinternet.ru/ click" 43. target="_blank"><img src="// counter.yadro.ru/logo?26.10" 44. title="LiveInternet: показано число посетителей за сегодня" 45. alt="" border="0" width="88" height="15"/></a><!--/ LiveInternet-->  как ето вирежат в грабере?

tipsun » 2011.10.29 21:20

DarkRiDDeR написал:

Кажись я не в темку попал, извенясь, :).
Ладн, моя задач:
обрезать всё до тега <body> включительно. Ведь зачем нам чужие заголовки и мета-теги, и т.п.? Ну и напоследок тег </bodу> нейтрализовать. Не будет же он болтаться на морде, как кусок ненужной кожи.

Код:

1
span style="color: #0000BB"><?php$array = explode('<body>', $html); //не помню включительно или нет.$body = str_replace('</body>', null, $array[1]); //если надо, хотя зачем? Обычно же бывает </body></html>?>

Swinger написал:

preg_match('#<body>(.*?)</body>#si', file_get_contents('http://wapinet.ru/'), $body);
echo $body[1]; // выведет все, что находится между тегами body
и ненад вырезать всякие тэги

True вариант :)
Надо еще Геморроя вариант посмотреть, как он работает.

POFIGISST » 2011.10.29 21:54

а как в граббе поставить определение кодировки текста той страницы которую мы граббим? а то по примеру написал грабб севера,а там фигня с текстом((

Gemorroj » 2011.10.29 22:04

сам определи и конвертируй как тебе нужно.

POFIGISST » 2011.10.29 22:11

Gemorroj
сам определить я могу,но как это написать не знаю(

tipsun » 2011.10.29 22:12

POFIGISST, или сам определи или функцией.
И конвертируй mb_convert_encoding()

POFIGISST » 2011.10.29 22:27

tipsun написал:

POFIGISST, или сам определи или функцией.
И конвертируй mb_convert_encoding()

спасибо,разобрался,теперь нормик текст выводит))

POFIGISST » 2011.10.29 23:24

мое Г

Код:

1
span style="color: #0000BB"><?php$url = 'http://sever.ru';$f = file_get_contents($url);$f = str_replace('src="/','src="http://sever.ru/',$f);$f = str_replace('src="1.gif','src="http://sever.ru/1.gif',$f);$f = mb_convert_encoding($f, "HTML-ENTITIES", "UTF-8"); $f = preg_replace('/<div class="v4_new">.*?<\/div>/s','',$f);$f = preg_replace('/<div class="reklama_new4">.*?<\/div>/s','',$f);$f = str_replace('Sever.Ru','Test12.Ru',$f);echo $f;?>

на денвере делал,поэтому копирайт Test12.Ru ))

Gemorroj » 2011.10.30 10:36

facepalm HTML-ENTITIES.
на удаленном сервере и так utf-8. подозреваю что у тебя отдается неверная кодировка сервером.

POFIGISST » 2011.10.30 13:34

Gemorroj написал:

facepalm HTML-ENTITIES.
на удаленном сервере и так utf-8. подозреваю что у тебя отдается неверная кодировка сервером.

я на денвере смотрел,так что возможно,на хост не ставил)))

Gemorroj » 2011.10.30 14:53

какя разница, денвер - не денвер?? настрой свой денвер нормально.

POFIGISST » 2011.10.30 14:57

Gemorroj написал:

какя разница, денвер - не денвер?? настрой свой денвер нормально.

Попробую настроить,спс за совет))

N1ck » 2011.10.31 21:53

N1ck написал:

<!--LiveInternet logo--><a href="http://www.liveinternet.ru/ click" 43. target="_blank"><img src="// counter.yadro.ru/logo?26.10" 44. title="LiveInternet: показано число посетителей за сегодня" 45. alt="" border="0" width="88" height="15"/></a><!--/ LiveInternet-->  как ето вирежат в грабере?

помогите плиз

POFIGISST » 2011.10.31 22:21

N1ck
как то так это будет $f = preg_replace('/<!--LiveInternet logo-->(.*?)<!--/ LiveInternet-->/s','',$f);

З.Ы. возможно ошибка в вырезке,не проверял)

POFIGISST » 2012.01.27 20:50

Хочу написать грабб чартов отсюда но пока не совсем выходит,а вернее совсем не выходит:D

вот такой код у меня сейчас идет

Код:

1
span style="color: #0000BB"><?phpinclude '../str/head.php';$cat = $_GET['cat'];$file = file_get_contents('http://muz.siza.us/tophit/'. (!empty($cat) ? $cat : ''));$file = str_replace('<a href="http://muz.siza.us/tophit/','<a href="?cat=',$file);$file=str_replace('<a href="?cat=listen/', '<a href="http://muz.siza.us/tophit/listen/', $file);$file=str_replace('<a href="?cat=get/', '<a href="http://muz.siza.us/tophit/', $file);$file=preg_replace('|<!DOCTYPE(.*?)<body>|is', '<div class="top"></div><div class="menu">', $file);$file=str_replace('<div class="line_d">', '<div class="line">', $file);$file=preg_replace('|<a href="http://muz.siza.us">(.*?)</a>|is', '<br/>', $file);$file=preg_replace('|<a href="http://siza.us">(.*?)</html>|is', '', $file);$file=str_replace('<div class="headerfan_b">', '<div class="line">', $file);$file=preg_replace('|<div class="div_center">(.*?)</div>|is', '</div>',$file);$file=preg_replace('|<div class="footer">(.*?)</div>|is', '</div>',$file);$file=preg_replace('|<div class="footer_b">(.*?)</div>|is', '</div>',$file);echo $file;include '../str/foot.php';?>

вырезаю все лишнее(счетчики,реклама,и т.д.), делаю замену дивов на свои,графика идет с моего сайта( http://xporno.in/tophit/ ) ,но вот с навигацией у меня выходят проблемы,не работает она,и ссылки на чарты тоже нихера не работают,как это исправить? и какие замечания по коду есть?

Gemorroj » 2012.01.28 00:53

по коду - не так.
там валидный xml. ты можешь парсить данные с помощью simplexml легко и не принужденно.

POFIGISST » 2012.01.28 01:28

Gemorroj написал:

по коду - не так.
там валидный xml. ты можешь парсить данные с помощью simplexml легко и не принужденно.

Благодарю Паш,протрезвею почитаю инфу как делать через simplexml,не разу так не делал(( но обязательно сделаю =)

Karayazi » 2012.03.04 23:04

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

Код:

1
span style="color: #0000BB"><?phpinclude 'head.php';if($_GET['img']){$fayl=htmlspecialchars($_GET['img']);$file=file_get_contens("http://tubidy.mobi/".$fayl."?".$_SERVER['QUERY_STRING']);echo $file;}$ch = curl_init("http://tubidy.mobi/search.php?".$_SERVER['QUERY_STRING']);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: text/html, application/xml, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;', 'Accept-Language: ru, en, *;', 'Accept-Charset: iso-8859-1, utf-8, utf-16, *;', 'Accept-Encoding: identity;', 'Connection: close'));curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)');curl_setopt($ch, CURLOPT_POST, 0);curl_setopt($ch, CURLOPT_REFERER, 'http://tubidy.mobi/');$file = curl_exec($ch);curl_close($ch);$file=preg_replace('|<!DOCTYPE(.*?)<div id="search_box">|si','<div class="menu">',$file);$file=preg_replace('|<a class="tsm"(.*?)</html>|si','',$file);$file=preg_replace('|<div id="nav_foot">(.*?)</html>|si','',$file);$file=str_replace('/search.php','search.php',$file);$file=str_replace('src="/thumbs','src="?img=thumbs',$file);$file=str_replace('<?xml version="1.0" encoding="utf-8"?>','',$file);echo $file;include 'foot.php';?>
tipsun » 2012.03.05 00:12

Код из шапки принеси.

Karayazi » 2012.03.05 00:57

Например вот:

Код:

1
lt;?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><title>Search</title></head><body><div>
POFIGISST » 2012.03.05 03:56

мож у тя адрес include не правильно прописан?

Karayazi » 2012.03.05 11:24

Да все правильно, просто вот такая ощибка.
А вы попробуйте у себя, можеть что-то получиться.

tipsun » 2012.03.05 17:01

Karayazi, если я не ошибаюсь, то банально надо просто подставить исходный адрес изображения

Код:

1
span style="color: #0000BB"><?php$html = str_replace('<img src="', '<img src="http://site.ru/image_dir/', $html);//Конкретно в твоем случае:$file=str_replace('src="','src="http://tubidy.mobi/',$file);//или через preg_replace
Karayazi » 2012.03.05 17:19

tipsun я этого знаю, но хочу маскировать адрес изображений под свой сайт.
Можеть есть какой-то другой вариант?

tipsun » 2012.03.05 17:25

Через файл можно.

http://mysite.ru/image.php?img=address

Код:

1
span style="color: #0000BB"><?phpheader('Content-Type: image/jpeg'); // png/gif@readfile('http://trololo.ru/img_dir/' . $_GET['img']);
Karayazi » 2012.03.05 18:32

tipsun спасибо большое, помогло.