Перейти к публикации

Новости с других сайтов к себе на Datalife...


Рекомендованные сообщения

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

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

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

Ссылка на сообщение
Поделиться на других сайтах

Challenger,

Тшательное изучение применения библиотеки curl тебе должно помочь. В

изучение пшп, помогите епть...

А что это такое - вот читай..

PHP имеет несколько функций для извлечения Web-содержимого. Эти функции были включены в PHP с самого начала, но администраторы не всегда активировали их. Извлекать файлы из Web могут следующие функции:

file_get_contents(). Эта функция проста в использовании и поддерживает как GET-запросы, так и POST-запросы. При помощи file_get_contents() вы получаете весь Web-файл сразу в виде строки.

fopen(). Этот метод читает Web-файл кусками.

file(). Этот метод читает Web-файл полностью и разделяет содержимое файла по строкам. Он занимает как бы промежуточное положение между file_get_contents() и fopen().

fsockopen(). Эта функция имеет наибольший шанс активизации на Web-сервере. Основным отличием ее от других функций является то, что с fsockopen() вы должны создать весь Web-запрос самостоятельно вместо установки различных параметров.

CURL. Библиотека Client URL Library (CURL) обладает самой богатой функциональностью. Используя CURL, вы можете подключаться и взаимодействовать со многими различными типами серверов по протоколам различных типов. CURL в настоящее время поддерживает HTTP, HTTPS, FTP, Gopher, Telnet, DICT, File и LDAP. Она также поддерживает прокси, куки и аутентификацию. К сожалению, CURL часто запрещается компаниями, предлагающими Web-хостинг.

Ссылка на сообщение
Поделиться на других сайтах

Убейте себя апстену, автограбберы. Вы пустое место без мозга.

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

Ссылка на сообщение
Поделиться на других сайтах

Niks,

Писать самому ...

Иди - если джва проекта - твои - то и базы тоже ж твои .. Ну и делай запросы из одного в другой ...

Изменено пользователем dataman
Ссылка на сообщение
Поделиться на других сайтах

Решил я таки написать сам, но так как это моя первая работа можете хотябы дать шабик простенькиц скрипт который выискывал бы поторяющиеся теги из контента сайта и грабил бы все чтор между ними (те новость), зап исывал ыв переменную, просто сложновато с нуля , тем более что никогда таткого не делал это ведь форум помощи а не идиотских отмазок, не ужели нет норм людей которые могут хоть чуток помочь?:unsure:

Ссылка на сообщение
Поделиться на других сайтах

Challenger,

Ну разжалабил ... Я за основу своего грабера курсов валют месных 10 банков брал

<?

$addr = "http://www.rbc.ru/index.html";  // адрес страницы

$begblock1 = "USD ЦБ РФ"; $begblock2 = "EUR ЦБ РФ"; // идентификатор начала блока


$begin = "<FONT SIZE=\"-2\">"; // фрагмент HTML-кода до полезных данных

$end = "</FONT>"; // фрагмент HTML-кода после полезных данных


$result = array();  // массив строк результата


$screen = file($addr);


$i = 0;

while ($i < sizeof($screen) && strpos($screen[$i], $begblock1) == false) {$i++;}

$temp = explode($begin, $screen[$i + 2]);

$temp = explode($end, $temp[1]);

$kursdollar = $temp[0];


$i = 0;

while ($i < sizeof($screen) && strpos($screen[$i], $begblock2) == false) {$i++;}

$temp = explode($begin, $screen[$i + 2]);

$temp = explode($end, $temp[1]);

$kurseuro = $temp[0];


echo "Доллар - <B>$kursdollar</B>; Евро - <B>$kurseuro</B>";

?>

Если тебе для обучения - то , ИМХО - в самый раз . Без наворотов, вставляй своё, создавай цыклы, условия - структура новостей же не меняется и в путь ...

Ссылка на сообщение
Поделиться на других сайтах

написал с горем пополам какото кривой свой граббер, подскажите есть вобщем 3 элемента блока:

1. Дата

2.Текст новости

4. Заголовок новости

$date, $text, $title - как эти переменные засунуть в соответсвующие таблицы бд , что и куда, а то сам чета не смог в таблахх разобраться, подскажите сразу запросами как что и куда...

Ссылка на сообщение
Поделиться на других сайтах

Ну, если ты действительно , как пишеш

сам чета не смог в таблахх разобраться,

то опубликуй свой творение прям тут . Здесь и сейчас. Аффтарство тваё наверно ниукрадём.

улыбнулась нумерация и последовательность

1. Дата

2.Текст новости

4. Заголовок новости

Ссылка на сообщение
Поделиться на других сайтах

гы да там и красть нечего:) ща допишу и выыложу..

Вот собсна говоря где остановился

<?php

$url									  ="http://www.3dnews.ru/news/";

$content								  =@file_get_contents($url);

$pattern								  ="/<h1 class=\"title_news\">([\s\S]+)<hr color=\"#cfcfcf\" size=1/>";

preg_match_all( $pattern, $content , $res );

foreach( @$res[1] as $val )

{

				preg_match( "/^([0-9]{2}\.[0-9]{2}\.[0-9]{4})/", $val, $date );

				preg_match( "/^([0-9]{2}\.[0-9]{2}\.[0-9]{4}([\s\S]+)$/", $val, $text );

} 

?>

Проверьте плз правильность ( соответсна это граббер с сайта http://www.3dnews.ru/ из раздела http://www.3dnews.ru/news/) и подскажите что нада еще туды доисать дабы вывести на сайт( ну есь добавить содержимое массива в бд)

Так же хотелось бы узнать как находить картинки в блоке, копироватьих себе на сервер и менять ссылку, затемм наверно придется еще и обновить блок, и еще таой вопрос, может это реализовать все классами будет проще?

Ссылка на сообщение
Поделиться на других сайтах

А .. Понятно ..

Как в старом анегдоте. Чукча не хочет быть читателем. Чукча хочет быть писателем...

Коль скоро учиться Вы не хотите - запаситесь неким к-вом виртуального презренного метала и Го го го в форум .. Двумя строчками ниже этого ..

Эх.. Ну ладно . Все мы когдато ничё не умели . И ктото нам помогал .. Добрый я сёння..

<?php

$url = "http://www.3dnews.ru/news/"; // Тут напишите любую ссылку

$msg_error = array ('Урлу праверь.','Иль картинкоф нет или инету кирдыГ.');

// Проверяем - правильнось куда иддём

function IsvalidateLink($value) {

return (eregi('^(http://)(.*)', $value)) ? 1 : 0;

}

// А скака тама имаджей

function countimage($url) {

global $msg_error;

// Пихаем %

Изменено пользователем dataman
Ссылка на сообщение
Поделиться на других сайтах

Блин .. Чудесный форум проявил непонятное нежелание ознакомит тебя с моими (конечно не совсем моими изысками.)

<?

$url	= "http://www.3dnews.ru/news/";  // Тут напишите любую ссылку

$msg_error = array ('Урлу праверь.','Иль картинкоф нет или инету кирдыГ.');


// Проверяем - правильнось куда иддём 

function IsvalidateLink($value) {

	return (eregi('^(http://)(.*)', $value)) ? 1 : 0;

}


// А скака тама имаджей 

function countimage($url) {

	global $msg_error;


	// Пихаем сюда

	$MyContent = "";


	// Вид ссылки - энто главное

	if (!IsvalidateLink($url)) return $msg_error[0];


	$contents = @file_get_contents($url);

	preg_match_all("|<img[^src]+[^>]+>|is", $contents, $MyContent , PREG_PATTERN_ORDER);


	// Ради чего всё это и замышлялось

	for($i = 0; $i < count($MyContent[0]); $i++) {

		echo $MyContent[0][$i]."<br />";

	}


	// Ашипко . 

	if (empty($MyContent[0][0])) return $msg_error[1];

	return count($MyContent[0]);

}


echo 'Итого сграбили '. countimage($url).' картиночеГ';


?>

Ссылка на сообщение
Поделиться на других сайтах

Не забуддь потом, как всё нарисуеш отписаться .. А то и предложить уважаемой публике плоды рук своих :) И не тока своих .

Ссылка на сообщение
Поделиться на других сайтах

вот первый кусок моего парсера:

Код

<?php

//ввод переменных

$url="http://10.10.65.3/2007/05/02/windows_vista_russian_pack.html";

$reg_get_all_url="/^(ftp|http):\/\/((.+?):?\/)+(.+)$/";

$reg_get_extension="/\.([a-zA-Z]+)$/i";

$reg_get_block="/<td\sclass=\Snews\S\svalign=\Stop\S\scolspan=\S2\S>(.+?)<\/tr>/";

$reg_get_title="";

$reg_get_date="";

$extension_pic=@file_get_contents('pictures_ext.txt');

$extension_files=@file_get_contents('files_ext.txt');

$reg_get_images="/(.+?)\.([$extension_pic]+)$/i";

$reg_get_files="/(.+?)\.([$extension_files]+)$/i";

//получаем сщнтент

$content=file_get_contents($url);

//получаем новость из контента

preg_match_all($reg_get_block, $content , $block );

//обрабатываем блок новости

foreach( $block[1] as $val )

{

//вытаскиваем все ссылки с файлами из блока новости

preg_match_all('$reg_get_all_url', $val, $url_files_upload);

//вытаскиваем все ссылки на картинки из полученных файловых ссылок

preg_match_all('$reg_get_images',$url_files_upload, $picture_url );

//вытаскиваем все ссылки на другие файлы из полученных файловых ссылок

preg_match_all('$reg_get_files',$url_files_upload, $files_url );

}

echo 'Ссылки на закачку файлов: '.$files_url .'Ссылки на закачку картинок: ' .$picture_url;

echo 'Текст новости: ' .$block[1];

?>
++ Содаржание файла files_ext.txt: Код
RAR|ZIP|UHA|EXE
+++ Содержание файла pictures_ext.txt: Код
BMP|GIF|JPEG|PNG

но дело в то что он либо не получает данные со страницы, либо я тут шото с кодом намутилsmile.gif может кто-нить поправит? На данном этапе было важно, получает ли он текст, и нормально ли работает выделение ссылок, как видно не нормально, не могу сам понять в чем дело. Можно взять любую страничку и попытаться выделить из нее похожие куски, ну придется рег.выр-е поменять соответственно! ;)

ЗЫ: С вопросом на опережение! : Кто знает структуру базы дынных и таблов, которые работают с новостью, отпишите плз что и куда , куда идет дата, название и все прочее что касаемо новости, дабы иметировать добавление новости из админки нашим скриптом:) если не сложно, можно канеша и сразу в коммандах, обращениях к бд, переменные можно взять произвольные...

Изменено пользователем Challenger
Ссылка на сообщение
Поделиться на других сайтах

Мне лично интерестно, так как человек на чёмто завязался и желает своё творение показать. Но вот с такими граберами я как то не сталкивался, вернее они мне не нужны были. Но Форум познавательный, можно многому учится.

:ph34r:

Ссылка на сообщение
Поделиться на других сайтах

Challenger,

А оно хоть как то у Вас работает ? Весьма сомневаюсь.

Еще раз повторяю... Прежде чем начинать писать, всёж следует учиться читать ..

Вы используете функцию

$content=file_get_contents($url);

Однако, в мануале по пхп ясно же написано о её применении..

string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )

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

Возможно и получится чтото ..

Или используйте уже @file_get_contents($url);

И потом.. Что там за бред с обработкой цикла ?

Два ваших массива в переменной $block пусты Перед их обработкой . Но всё равно непонятно , почему Вы обрабатываете только 1 элемент $block[1]

Может всёже правельней было бы использовать как это принято for($i = 0;... ?

Применение Вами foreach( $block[1] as $val ) заставило быть пацталом.

Ниасилил в общем ...

И ещё ....

Переменная $reg_get_block на момент исполнения равна "/<td\\sclass=\\Snews\\S\\svalign=\\Stop\\S\\scolspan=\\S2\\S>(.+?)<\\/tr>/"

Уверен , что это правильно ?

Изменено пользователем dataman
Ссылка на сообщение
Поделиться на других сайтах

нет, /<TD\sclass=\"ntitle\">([\s\S]+)<TD\sclass=\"news\"\svAlign=\"top\"\scolSpan=\"2\">[\s\S]+<DIV\sclass=\"hr_line\"><\/DIV><\/TD>/i

вот это правильно!;)

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

вот поправил с учетом твоих замечаний:

<?php

//ввод переменных

$url="http://10.10.65.3/2007/05/02/windows_vista_russian_pack.html";

$reg_get_all_url="/^(ftp|http):\/\/((.+?):?\/)+(.+)$/";

$reg_get_extension="/\.([a-zA-Z]+)$/i";

$reg_get_block="/<TD\sclass=\"ntitle\">([\s\S]+)<TD\sclass=\"news\"\svAlign=\"top\"\scolSpan=\"2\">[\s\S]+<DIV\sclass=\"hr_line\"><\/DIV><\/TD>/i";

$reg_get_title="";

$reg_get_date="";

$extension_pic=file_get_contents('pictures_ext.txt');

$extension_files=file_get_contents('files_ext.txt');

$reg_get_files="/(.+?)\.([$extension_files]+)$/i";

$reg_get_images="/(.+?)\.([$extension_pic]+)$/i";

//писание возможных ошибок

// =======================Ошибки=======================

$msg_error = array (

'Внимание! Выполнение скрипта вызвало ошибку: Указанный вами URL-адресс указан неверно, либо не сущесвует..',

'Внимание! Выполнение скрипта вызвало ошибку: Список соответствий пуст. Возможно, соответсвий не найдено. Проверьте так же, есть ли связь с указанным адрессом.');

//=====================================================

//проверяем правильность ссылки

function IsvalidateLink($value) {

	return (eregi('^(http://)(.*)', $value)) ? 1 : 0;

}

if (!IsvalidateLink($url)) return $msg_error[0];

//получаем контент

$content=@file_get_contents($url);

//получаем новость из контента

preg_match_all($reg_get_block, $content , $block, PREG_SET_ORDER );

//проверяем, есть ли что то в блоке

	if (empty($block[0][0])) return $msg_error[1];

//обрабатываем блок новости

for ($i=0; $i< count($block[0]); $i++) {


//вытаскиваем все ссылки с файлами из блока новости

preg_match_all('$reg_get_all_url', $block[0][$i], $url_files_upload, PREG_SET_ORDER);

//вытаскиваем все ссылки на картинки из полученных файловых ссылок

for ($i=0; $g< count($url_files_upload[0]); $g++) {


preg_match_all('$reg_get_images',$url_files_upload[i], $picture_url, PREG_SET_ORDER );

//вытаскиваем все ссылки на другие файлы из полученных файловых ссылок

preg_match_all('$reg_get_files',$url_files_upload[$i], $files_url, PREG_SET_ORDER );

echo 'Ссылки на закачку файлов:' .'<br />';

print_r($files_url);

echo 'Ссылки на закачку картинок:' .'<br />';

print_r($picture_url);

}

echo 'Ссылки на закачку(все):' .'<br />';

print_r($url_files_upload);

}

echo 'Текст новости:' .'<br />';

print_r($block[0][$i]);

?>

но все равно не прально;) да еще и ошибку выдает

:

Warning: preg_match_all() [function.preg-match-all]: No ending delimiter '$' found in D:\MyServer\www\TESTING\Grabber.php on line 20

Ссылки на закачку(все):

Fatal error: Maximum execution time of 30 seconds exceeded in D:\MyServer\www\TESTING\Grabber.php on line 33

Изменено пользователем Challenger
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...