Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблема с грабером
 
 автор: racoon   (09.04.2007 в 18:29)   письмо автору
 
 

пишу грабер новостей, поиск новостей осуществляется по введеному слову, из это страницы выдераю ссылки их ровно 15, таким вот кодом

$bufer = file_get_contents("тут страница с результатами поиска по слову");
preg_match_all("тут рег. вырожение по выдергиванию ссылок",$bufer,$links,PREG_PATTERN_ORDER);
т.е. в $links[1] выходит 15 сылок с этим все ок.

с каждой ссылки выдираю новость, т.е. пишу ...

foreach($links[1] as $vl)
{

$page= file_get_contents($vl);
preg_match_all("тут рег. вырожение на выдергивание новости",$page,$out,PREG_PATTERN_ORDER);
$st1=$out[1][0];
$st2=$out[2][0];
$st3=$out[3][0];
$st4=$out[4][0];
$htm=fopen($filenews,"a");
fputs ($htm, "$st1\n".$st2.$st3."$st4\n\n");
};
fclose($htm);

ноооо почимуто цикл выполняеться тока 8-9 раз, хотя ссылок там 15.
если убрать $bufer = file_get_contents($vl); то цикл выполняеться все 15 раз.

т.е. у меня выдергиваються тока первые 8 страниц, если сделать чтобы выдергивал с 10-15 то тоже норм работает, но надо все 15!

в чем проблема?

   
 
 автор: ddhvvn   (09.04.2007 в 18:49)   письмо автору
 
   для: racoon   (09.04.2007 в 18:29)
 

Может Вас заинтересуют след. ссылки (про RSS):
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=34820
http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=26313

   
 
 автор: racoon   (09.04.2007 в 19:36)   письмо автору
 
   для: ddhvvn   (09.04.2007 в 18:49)
 

ето не совсем то, проблемы с вытаскивание инфы нету, проблема в том что цикл полностью не проходит...

   
 
 автор: ddhvvn   (09.04.2007 в 19:44)   письмо автору
 
   для: racoon   (09.04.2007 в 19:36)
 

Я ссылки дал, для того, чтобы Вы сверились, может где-то что не так/не до конца вытаскиваете...

   
 
 автор: Disable   (09.04.2007 в 20:07)   письмо автору
 
   для: racoon   (09.04.2007 в 19:36)
 

проверьте сколько раз все-таки выполняется этот цикл

$i=0;
foreach($links[1] as $vl)
{
$page= file_get_contents($vl);
preg_match_all("тут рег. вырожение на выдергивание новости",$page,$out,PREG_PATTERN_ORDER);
$st1=$out[1][0];
$st2=$out[2][0];
$st3=$out[3][0];
$st4=$out[4][0];
$htm=fopen($filenews,"a");
fputs ($htm, "$st1\n".$st2.$st3."$st4\n\n");
$i++;
}
fclose($htm);

echo $i;

   
 
 автор: Trianon   (09.04.2007 в 21:04)   письмо автору
 
   для: racoon   (09.04.2007 в 18:29)
 

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

   
 
 автор: racoon   (09.04.2007 в 21:28)   письмо автору
 
   для: Trianon   (09.04.2007 в 21:04)
 

постараюсь объяснить подробнее.

первый захват
$bufer = file_get_contents("тут страница с результатами поиска по слову");
preg_match_all("тут рег. вырожение по выдергиванию ссылок",$bufer,$links,PREG_PATTERN_ORDER);
работает 100%, выдергивает 15 ссылок.

для проверки делал вот так
$i=0;
foreach($links[1] as $vl)
{
print $i." ".$vl."<br>";
$i++;
};


это выводит 15 вытащиных ссылок и записывает под номмрами 0-14, т.е. цикл как и положено выполняеться 15 раз.

теперь нужно из каждой ссылки вытащить новость, т.е. получиться 15 новостей. дописываю...

$i=0;
foreach($links[1] as $vl)
{

$page= file_get_contents($vl);
preg_match_all("тут рег. вырожение на выдергивание новости",$page,$out,PREG_PATTERN_ORDER);
$st1=$out[1][0];
$st2=$out[2][0];
$st3=$out[3][0];
$st4=$out[4][0];
print "$i $st1 $st2\n $st3 $st4";
$i++;
};

ТО цикл выполняется 8-9 раз иногда 10, не знаю от чего зависит, но новости выдергиваются тока 8-9 а имено цикл.
инфа выдерается норм, проверял вытаскивать с каждой по отдельности или группами например с 11-15 этимже выроженем они норм выдергиваются.

если убрать строку
$page= file_get_contents($vl);
то цмкл проходит полностью, что с этой строкой не так?

   
 
 автор: Trianon   (09.04.2007 в 21:35)   письмо автору
 
   для: racoon   (09.04.2007 в 21:28)
 

функция file_get_contents() предназначена для чтения файлов. Это она делает относительно надежно. Граббинг документов с чужих сайтов с помощью нее гарантировать Вам никто не будет. Собственно не только с её помощью. Обычно сайты стараются защищиаться от потокового захвата контента.

   
 
 автор: racoon   (09.04.2007 в 23:24)   письмо автору
 
   для: Trianon   (09.04.2007 в 21:35)
 

а это можно какнить обойти?
кстати код грабит новости с рамблера...

   
 
 автор: dima2207   (10.04.2007 в 02:59)   письмо автору
 
   для: racoon   (09.04.2007 в 23:24)
 

Попробуйте сокетом , и поиграйте с тайм оутом , может просто сервер рвет соединение !

   
 
 автор: racoon   (10.04.2007 в 12:45)   письмо автору
 
   для: dima2207   (10.04.2007 в 02:59)
 

проблема наверно из за переменной max_execution_time умолчанию 30, как раз и рветься соединение через 30 сек....

тока я ее изменить не могу, выставляю в php.ini на 90, а значение так и остается 30...

   
 
 автор: racoon   (10.04.2007 в 13:08)   письмо автору
 
   для: racoon   (10.04.2007 в 12:45)
 

все! все спс, все работает.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования