Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz

21.11.2008, 08:49
|
|
Участник форума
Регистрация: 01.03.2006
Сообщений: 169
Провел на форуме: 519496
Репутация:
78
|
|
Такой вопрос..скрипт граббера, этот скрипт загоняется в крон и ставится обновление к примеру на 12 часов и сайт автоматически наполняется новостями. Но основная проблема скрипта это запрет граббинга новостей которые уже были сграбблены. Функционально это оформлено так. Скрипт открывает страницу сайта с новостями (откуда будут граббится новости) копирует ссылки новостей, а затем отдельным циклом начинает грабить с каждой ссылки, при удачном граббинге записывает имя ссылки в файл grabbered.txt. Затем если мы заново запускаем скрипт, но с помощью функции array_search проверяем была ли сграблена эта новость или нет, если не была то грабим иначе ничего не делаем, но вот почему то именно эта проверка работает некорректно, вообще не работает. Посмотрите пожалуйста, может у кого нибудь есть идеи как по другому оформить цикл проверки..
PHP код:
include("./cron/newsland.php");
// собираем линки новостей
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url_grub);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, "MSIE 7.0");
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$text = curl_exec($ch);
curl_close($ch);
preg_match_all("#<a href=\"\/News\/Detail\/id\/(.+)\">#",$text,$results);
for($i=0;$i<count($results[0]);$i++)
{
$urlsis="http://newsland.ru".str_replace(array('<a href="','">'),null,$results[0][$i]);
if ($urlsis!="http://newsland.ru/News/Detail/id/284971/cat/78")
{
$urlsos[]=$urlsis;
}
else
{}
}
$list_garb=file("./grabbered.txt");
$check_file=array_map("trim",$list_garb);
foreach ($urlsos as $urls_get )
{
$urls_get=trim($urls_get);
if (array_search($urls_get,$check_file)==FALSE)
{
// берем текст новости
$text_news = file_get_contents($urls_get);
/// вырезаем текст статьи
preg_match('#<h1 class="mt10 grey">(.*?)</h1>(.*?)<div class="bodytext mt5">(.*?)</div></div>#s',$text_news,$result_news);
// меняем кодировку
$result_news[0]=iconv("UTF-8", "WINDOWS-1251",$result_news[0]);
//работаем с рисунком новости
preg_match('#<img src="(.+)" title="(.+)" alt="(.+)" class="floatr mt10">#',$result_news[0],$result_image);
// скачиваем картинку
$result_load_image=file_get_contents("http://newsland.ru".$result_image[1]);
$name_image=substr($result_image[1],strrpos($result_image[1],"/")+1);
$good_image = fopen("./rssnews_image/".$name_image, "w");
fputs($good_image, $result_load_image);
/// создаем текст статьи для записи в файл
$src="<div style=\"float: left;\"><img src=\"./rssnews_image/".$name_image."\" title=\"".$result_image[2]."\" alt=\"".$result_image[2]."\" class=\"imagestyle\"></div>";
$time=date(d."-".m."-".y)."\r\n";
$title=$result_image[2]."\r\n";
$name=date("y-m-d-H-i-s");
$body=str_replace(array('<div class="bodytext mt5">',$result_image[0],'</div>','<div class="newsctrl f12 mt10"><div>','</div></div>'),null,$result_news[0]);
$body=preg_replace('#<h1 class="mt10 grey">(.+)</h1>#',null,$body);
$body=str_replace('<a','<br><br><a',$body);
preg_match_all('#(.*?)\.#is',$body,$out_anonce);
for($r=0;$r<5;$r++)
{
$body=str_replace($out_anonce[0][$r],$out_anonce[0][$r]."\r\n",$body);
}
$good = fopen("./rssnews_/".$name.".txt", "w");
fwrite($good,$time.$title.$src."\r\n".$body);
fclose($good);
$good_urls = fopen("./grabbered.txt", "a");
fwrite($good_urls,$urls_get."\r\n");
fclose($good_urls);
sleep(1);
}
else
{
}
}
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|