ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #6361  
Старый 21.11.2008, 08:49
Аватар для Zircool
Zircool
Участник форума
Регистрация: 01.03.2006
Сообщений: 169
Провел на форуме:
519496

Репутация: 78
Отправить сообщение для Zircool с помощью ICQ
По умолчанию

Такой вопрос..скрипт граббера, этот скрипт загоняется в крон и ставится обновление к примеру на 12 часов и сайт автоматически наполняется новостями. Но основная проблема скрипта это запрет граббинга новостей которые уже были сграбблены. Функционально это оформлено так. Скрипт открывает страницу сайта с новостями (откуда будут граббится новости) копирует ссылки новостей, а затем отдельным циклом начинает грабить с каждой ссылки, при удачном граббинге записывает имя ссылки в файл grabbered.txt. Затем если мы заново запускаем скрипт, но с помощью функции array_search проверяем была ли сграблена эта новость или нет, если не была то грабим иначе ничего не делаем, но вот почему то именно эта проверка работает некорректно, вообще не работает. Посмотрите пожалуйста, может у кого нибудь есть идеи как по другому оформить цикл проверки..

PHP код:
include("./cron/newsland.php");
// собираем линки новостей
$ch curl_init();

    
curl_setopt($chCURLOPT_URL,$url_grub);
    
curl_setopt($chCURLOPT_HEADERFALSE);
    
curl_setopt($chCURLOPT_NOBODYFALSE);
    
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
    
curl_setopt($chCURLOPT_USERAGENT"MSIE 7.0");
    
curl_setopt($chCURLOPT_TIMEOUT20);
    
$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
   {

   }


 } 
 
Ответить с цитированием

  #6362  
Старый 21.11.2008, 13:43
Аватар для Solker
Solker
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме:
389768

Репутация: 158
По умолчанию

Структура тупая, но по моему верная.
Выведи все переменные, которые сравниваются, посмотри что в них.
$urls_get, $check_file
 
Ответить с цитированием

  #6363  
Старый 21.11.2008, 13:49
Аватар для Solker
Solker
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме:
389768

Репутация: 158
По умолчанию

Цитата:
Сообщение от Kaimi  
'/image=(.*?)"/'
Самый прикол, что если в коде будет иметься еще хоть одна кавычка после этой фразы, то он обрежет по последнию кавычку.

'#image=([^"].+)#'
 
Ответить с цитированием

  #6364  
Старый 21.11.2008, 13:55
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

Zircool Используйте оператор === для проверки значения, возвращаемого этой функцией. (с) ман про array_search

А вообще - покажи print_r обоих массивов

Solker Учите, что делает ? в регулярных выражениях, а вот это - мега тру
PHP код:
'#image=([^"].+)#' 
Первый знак не кавычка и дальше любое количество знаков до конца строки

Последний раз редактировалось Gifts; 21.11.2008 в 13:58..
 
Ответить с цитированием

  #6365  
Старый 21.11.2008, 14:33
Аватар для Solker
Solker
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме:
389768

Репутация: 158
По умолчанию

Странно. Спасибо, был не прав.
Код:
'#image=([^"]+)#' *

Последний раз редактировалось Solker; 21.11.2008 в 14:36..
 
Ответить с цитированием

  #6366  
Старый 21.11.2008, 20:31
Аватар для Кубик Рубик
Кубик Рубик
Познающий
Регистрация: 10.04.2008
Сообщений: 51
Провел на форуме:
78866

Репутация: 0
По умолчанию

На сколько хороша функция проверки форм?
PHP код:
function insec($text) {
 
$text htmlentities(strip_tags($text));
 return 
$text;

Как добавить сюда регулярку чтобы проходили только буквы и цифры ну и другие безопасные символы?
 
Ответить с цитированием

  #6367  
Старый 21.11.2008, 20:32
Аватар для Byrger
Byrger
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
Провел на форуме:
791766

Репутация: 61
По умолчанию

PHP код:
if ($addnewfaq==1){
 if ((
$haed!="")&&($faq!=="")){
  
$link2connect($host,$user,$pass,$db);         //подключаемся к MySQL
   
$addFAQaddmysql($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() не помогло...
Что можно сделать?
 
Ответить с цитированием

  #6368  
Старый 21.11.2008, 20:50
Аватар для Кубик Рубик
Кубик Рубик
Познающий
Регистрация: 10.04.2008
Сообщений: 51
Провел на форуме:
78866

Репутация: 0
По умолчанию

Цитата:
Сообщение от Byrger  
if ($_POST['addnewfaq') {}
имя поставь на кнопку
убери скрытое поле

Последний раз редактировалось Кубик Рубик; 21.11.2008 в 20:55..
 
Ответить с цитированием

  #6369  
Старый 21.11.2008, 21:02
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

что-что - переадресовывать на другую страницу, типо "Спасибо, вы внеслися". Нафига там же оставлять?

а вообще быдлокод, юзай лучше if(isset($submit))

т.е. сначала форма, а потом обработка того, что ввели и строго по нажатию кнопки

Последний раз редактировалось Pashkela; 21.11.2008 в 21:05..
 
Ответить с цитированием

  #6370  
Старый 21.11.2008, 21:07
Аватар для Кубик Рубик
Кубик Рубик
Познающий
Регистрация: 10.04.2008
Сообщений: 51
Провел на форуме:
78866

Репутация: 0
По умолчанию

На сколько хороша функция проверки форм?

PHP код:
Код:
 function insec($text) {
 $text = htmlentities(strip_tags($text));
 return $text;
}
Как добавить сюда регулярку чтобы проходили только буквы и цифры ну и другие безопасные символы?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Delphi, .NET, Asm 5420 17.06.2010 13:33
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ