HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

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

Такой вопрос..скрипт граббера, этот скрипт загоняется в крон и ставится обновление к примеру на 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
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
С нами: 10537558

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

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

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

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

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

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

  #6364  
Старый 21.11.2008, 13:55
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
С нами: 9497186

Репутация: 1304


По умолчанию

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

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

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

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

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

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

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

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

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

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

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

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

  #6367  
Старый 21.11.2008, 20:32
Byrger
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
С нами: 9567480

Репутация: 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
С нами: 9518788

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

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

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

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

Репутация: 3338


По умолчанию

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

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

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

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

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

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

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

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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



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


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...