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
{
}
}
|
|
|

21.11.2008, 13:43
|
|
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме: 389768
Репутация:
158
|
|
Структура тупая, но по моему верная.
Выведи все переменные, которые сравниваются, посмотри что в них.
$urls_get, $check_file
|
|
|

21.11.2008, 13:49
|
|
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме: 389768
Репутация:
158
|
|
Сообщение от Kaimi
'/image=(.*?)"/'
Самый прикол, что если в коде будет иметься еще хоть одна кавычка после этой фразы, то он обрежет по последнию кавычку.
'#image=([^"].+)#'
|
|
|

21.11.2008, 13:55
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
Zircool Используйте оператор === для проверки значения, возвращаемого этой функцией. (с) ман про array_search
А вообще - покажи print_r обоих массивов
Solker Учите, что делает ? в регулярных выражениях, а вот это - мега тру
Первый знак не кавычка и дальше любое количество знаков до конца строки
Последний раз редактировалось Gifts; 21.11.2008 в 13:58..
|
|
|

21.11.2008, 14:33
|
|
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме: 389768
Репутация:
158
|
|
Странно. Спасибо, был не прав.
Последний раз редактировалось Solker; 21.11.2008 в 14:36..
|
|
|

21.11.2008, 20:31
|
|
Познающий
Регистрация: 10.04.2008
Сообщений: 51
Провел на форуме: 78866
Репутация:
0
|
|
На сколько хороша функция проверки форм?
PHP код:
function insec($text) {
$text = htmlentities(strip_tags($text));
return $text;
}
Как добавить сюда регулярку чтобы проходили только буквы и цифры ну и другие безопасные символы?
|
|
|

21.11.2008, 20:32
|
|
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
Провел на форуме: 791766
Репутация:
61
|
|
PHP код:
if ($addnewfaq==1){
if (($haed!="")&&($faq!=="")){
$link2= connect($host,$user,$pass,$db); //подключаемся к MySQL
$addFAQ= addmysql($link2,faq,faq,$head,$faq,$note); //Добавить запись из формы в MySQL
unset($haed);
unset($faq);
unset($note);
};
};
echo '<form method="POST" action="adminka.php?str=faq">
<input type="text" name="haed" size="100" /><br />
<textarea name="faq" rows="10" cols="100"></textarea> <br />
<input type="text" name="note" size="100" /><br />
<input type="hidden" name="addnewfaq" value="1">
<input type="submit" value="Ввод" />
</form>';
При вводе данных в форму, они вносятся в БД с помощью функции addMySQL но после внесения данных при обновлении старицы они сного вносятся...и так при каждом обновлении...уже и в форму скрытое поле ввёл и обнуление переменных с помощью unset() не помогло...
Что можно сделать?
|
|
|

21.11.2008, 20:50
|
|
Познающий
Регистрация: 10.04.2008
Сообщений: 51
Провел на форуме: 78866
Репутация:
0
|
|
Сообщение от Byrger
if ($_POST['addnewfaq') {}
имя поставь на кнопку
убери скрытое поле
Последний раз редактировалось Кубик Рубик; 21.11.2008 в 20:55..
|
|
|

21.11.2008, 21:02
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
что-что - переадресовывать на другую страницу, типо "Спасибо, вы внеслися". Нафига там же оставлять?
а вообще быдлокод, юзай лучше if(isset($submit))
т.е. сначала форма, а потом обработка того, что ввели и строго по нажатию кнопки
Последний раз редактировалось Pashkela; 21.11.2008 в 21:05..
|
|
|

21.11.2008, 21:07
|
|
Познающий
Регистрация: 10.04.2008
Сообщений: 51
Провел на форуме: 78866
Репутация:
0
|
|
На сколько хороша функция проверки форм?
PHP код:
Код:
function insec($text) {
$text = htmlentities(strip_tags($text));
return $text;
}
Как добавить сюда регулярку чтобы проходили только буквы и цифры ну и другие безопасные символы?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|