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

Форум Регулярные Выражения

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

 

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

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

тема: Разбор RSS-новостей Samsung.ru
 
 автор: Panker   (18.10.2006 в 09:05)   письмо автору
 
 

http://www.samsung.ru/press/awards/news.rss вот РСС, помогите сграбить всё что там есть, я делаю так

<?
             $text2 
file_get_contents ("http://www.samsung.ru/press/clipping/news.rss"); 
             if (
preg_match ("#<title>'(.*)'</title><link>(.*)</link><description>(.*)</description><pubDate>(.*)</pubDate>#isU"$text2$out)) 
             
$text="$out[1]";

но не получается, просто не чег оен выводит :(
умоляю помогите, а то какрас сайт про самсунги делаю и вот рсс не помешалбы

   
 
 автор: kasmanaft   (18.10.2006 в 11:26)   письмо автору
 
   для: Panker   (18.10.2006 в 09:05)
 


<?
if (preg_match ("#<title>(.*)</title>.*<link>(.*)</link>.*<description>(.*)</description>.*<pubDate>(.*)</pubDate>#isU"$text2$out))

   
 
 автор: Panker   (18.10.2006 в 11:40)   письмо автору
 
   для: kasmanaft   (18.10.2006 в 11:26)
 

я вот так вот делаю


<?
        $text2 
file_get_contents ("http://www.samsung.ru/press/news/news.rss"); 
    if (
preg_match ("#<title>(.*)</title>.*<link>(.*)</link>.*<description>(.*)</description>.*<pubDate>(.*)</pubDate>#isU"$text2$regs))
    { 
        for (
$i 0$i count($regs[1])-10$i++) 
        { 
             
$title_rss trim ($regs[1][$i]); 
             
$link_rss trim ($regs[2][$i]); 
             
$des_rss trim ($regs[3][$i]); 
             
$pub_rss trim ($regs[4][$i]); 
    
     
$text2 file_get_contents ("http://www.samsung.ru/press/news/news.rss"); 
             if (
preg_match ("#<title>(.*)</title>.*<link>(.*)</link>.*<description>(.*)</description>.*<pubDate>(.*)</pubDate>#isU"$text2$out)) 
             
$text="$out[1]";
        } 
    } 


это у меня типа вывод :) шаблонизатор самый простой, инклуд шаблона делаю а там просто в нужных местах переменые которые выводят ))

так вот делаю как выше, думает долго но не чего не выводит, где я опять ошибся ? (

я прсото в этом не понимаю не чего, где то взял у кого то а до конца не разобрался

   
 
 автор: kasmanaft   (19.10.2006 в 07:31)   письмо автору
 
   для: Panker   (18.10.2006 в 11:40)
 

Хе-хе, узнаю скрипт :)
Вот примерно так:

<?
    $text2 
file_get_contents ("http://www.samsung.ru/press/news/news.rss");
    if (
preg_match_all ("#<item>.*<title>(.*)</title>.*<link>(.*)</link>.*<description>(.*)</description>.*<pubDate>(.*)</pubDate>.*</item>#isU"$text2$regs))
    {
        for (
$i 0$i count($regs[1]); $i++)
        {
             
$title_rss iconv("UTF-8""WINDOWS-1251"trim($regs[1][$i]));
             
$link_rss trim ($regs[2][$i]);
             
$des_rss iconv("UTF-8""WINDOWS-1251"trim ($regs[3][$i]));
             
$pub_rss trim ($regs[4][$i]);

             
$text2 file_get_contents ($link_rss);
             if (
preg_match ('#</noindex></div><h1 class="news"><noindex>.*</noindex></h1>(<p>.*)<br clear="all"><table cellpadding="0" cellspacing="0" border="0" width="610">#isU'$text2$out))
                 
$text=$out[1];
        }
    }
?>

   
 
 автор: Panker   (19.10.2006 в 09:14)   письмо автору
 
   для: kasmanaft   (19.10.2006 в 07:31)
 

ошибка - Fatal error: Call to undefined function: iconv() in z:\home\setka\www\samsung\1news.php on line 13

на этой строке

$title_rss = iconv("UTF-8", "WINDOWS-1251", trim($regs[1][$i])); 


сори я сам не могу понять что там не так.. (

   
 
 автор: cheops   (19.10.2006 в 12:57)   письмо автору
 
   для: Panker   (19.10.2006 в 09:14)
 

Подключите расширение iconv() в PHP.

   
 
 автор: Panker   (19.10.2006 в 14:47)   письмо автору
 
   для: cheops   (19.10.2006 в 12:57)
 

ааааа...простите ? как это сделать? :)

   
 
 автор: cheops   (19.10.2006 в 23:01)   письмо автору
 
   для: Panker   (19.10.2006 в 14:47)
 

Раскомментируйте библиотеку php_iconv.dll в конфигурационном файле php.ini.

   
 
 автор: Panker   (20.10.2006 в 09:22)   письмо автору
 
   для: cheops   (19.10.2006 в 23:01)
 

блин :( Хеопс, простите я чёто не допонимаю :) раскоментруй прокоментируй :( можно как для дурака обьясниь ? )

   
 
 автор: Panker   (20.10.2006 в 09:31)   письмо автору
 
   для: Panker   (20.10.2006 в 09:22)
 

Так значит :)
скачал я эти библиотеки, всё заработала на денвере:)

теперь осталось несоклько вопросов!

1 как выводит по одной новости с RSS что бы мне было удобней писать 1 новость в одну базу
или как правельней было бы писать?

2 Как мне заменить адрес рисунка, когда грабится адрес рисунка становится i/risunok/asd.JPG
как мне подставить перед этим адрес http://www.samsung.ru ?

На счёт записи
Я думаю химичить тут надо?


  $text2 = file_get_contents ("http://www.samsung.ru/press/news/news.rss"); 
    if (preg_match_all ("#<item>.*<title>(.*)</title>.*<link>(.*)</link>.*<description>(.*)</description>.*<pubDate>(.*)</pubDate>.*</item>#isU", $text2, $regs)) 
    { 
        for ($i = 0; $i < count($regs[1]); $i++) 
        { 
             $title_rss = iconv("UTF-8", "WINDOWS-1251", trim($regs[1][$i])); 
             $link_rss = trim ($regs[2][$i]); 
             $des_rss = iconv("UTF-8", "WINDOWS-1251", trim ($regs[3][$i])); 
             $pub_rss = trim ($regs[4][$i]); 

но как их по очереди записывать?
или выводит просто не все а только первую запись и при появлении новосй записи она будет писатся и так всё по очереди?
так? нет?

и если так то как мне выводить не все записи а только первую?

   
 
 автор: cheops   (20.10.2006 в 12:54)   письмо автору
 
   для: Panker   (20.10.2006 в 09:31)
 

Хм... просто формируйте из результатов разбора INSERT и тут же его выполняйте
<?php
 
for ($i 0$i count($regs[1]); $i++) 
        { 
             
$title_rss iconv("UTF-8""WINDOWS-1251"trim($regs[1][$i])); 
             
$link_rss trim ($regs[2][$i]); 
             
$des_rss iconv("UTF-8""WINDOWS-1251"trim ($regs[3][$i])); 
             
$pub_rss trim ($regs[4][$i]); 

             
$text2 file_get_contents ($link_rss); 
             if (
preg_match ('#</noindex></div><h1 class="news"><noindex>.*</noindex></h1>(<p>.*)<br clear="all"><table cellpadding="0" cellspacing="0" border="0" width="610">#isU'$text2$out)) 
                 
$text=$out[1]; 
             
$query "INSERT INTO tbl VALUES (NULL, '$title_rss', ....)"// Здесь следует сформировать запрос под вашу таблицу
             
mysql_query($query);
        }
?>

   
 
 автор: Panker   (20.10.2006 в 12:58)   письмо автору
 
   для: cheops   (20.10.2006 в 12:54)
 

ага, ща попробую :)

   
 
 автор: Panker   (20.10.2006 в 14:03)   письмо автору
 
   для: Panker   (20.10.2006 в 12:58)
 

всё бы было бы хорошо, нопростите... как мне исключить запись тех страниц котоыре я уже записывал? а то при каждом запуски скрипта пишется всё по новой и получаются 1000 новостей их них 10 разных :(

   
 
 автор: cheops   (20.10.2006 в 15:59)   письмо автору
 
   для: Panker   (20.10.2006 в 14:03)
 

Новости имеют какой-то уникальный параметр? Время, например, или ещё что-то?

   
 
 автор: Panker   (20.10.2006 в 16:03)   письмо автору
 
   для: cheops   (20.10.2006 в 15:59)
 

время у них там везде 0000000 по нулям :(


типа так

<pubDate>Tue, 17 Oct 2006 00:00:00 GMT</pubDate>
<pubDate>Tue, 17 Oct 2006 00:00:00 GMT</pubDate>
<pubDate>Tue, 17 Oct 2006 00:00:00 GMT</pubDate>

тока даты меняются типа восенадцатого числа и так алее

   
 
 автор: cheops   (20.10.2006 в 18:11)   письмо автору
 
   для: Panker   (20.10.2006 в 16:03)
 

А названия или ссылки на новости уникальны? Вы только самсунговский RSS используете или ещё чей-нибудь?

   
 
 автор: Panker   (20.10.2006 в 18:31)   письмо автору
 
   для: cheops   (20.10.2006 в 18:11)
 

да, только самсунг, прсото сайт о самсунге, делаю для самсунг...

а вот на счёт названий и так далее, они естесвеннро оригенальные :)
вот только как првоерить есть ли они в базе и если есть не записывать и наабарот не знаю, мне же прилдётся всю базу сверять и так далее...

если есть какойнить способ не грамозкий :) подскажите :)
а то я пока только ip адреса научился сверять и то кое как :)

   
 
 автор: Panker   (21.10.2006 в 22:45)   письмо автору
 
   для: Panker   (20.10.2006 в 18:31)
 

up

   
 
 автор: Panker   (22.10.2006 в 09:13)   письмо автору
 
   для: Panker   (21.10.2006 в 22:45)
 

аушки :) так как мне сравнить что бы не записовалось :(

   
 
 автор: cheops   (22.10.2006 в 12:22)   письмо автору
 
   для: Panker   (20.10.2006 в 18:31)
 

Судя по всему в RSS используется уникальный URL перед добавлением можно проверять нет ли записи с таким URL в таблице tbl, если такой записи нет - добавлять новую, если есть - не добавлять. Для проверки можно осуществлять отдельный SELECT-запрос, а можно проиндексировать поле URL, создав уникальный индекс. Тогда запись с уже существующим URL не будет добавляться автоматически. Только индексировать придётся по всему полю, так как изменения в URL наблюдаются в конце URL.

   
 
 автор: Panker   (22.10.2006 в 13:26)   письмо автору
 
   для: cheops   (22.10.2006 в 12:22)
 

мона проверить есть ли это или нет, ну эт вы сказали выше :) я прсото хочу просить -

вот тут я првоеряю уникальных посетителей

$res = mysql_query ("SELECT COUNT(DISTINCT s_ip) FROM stat_user");


вот по такому принципу проверять поля урл?
или как?
и если по такому то вот так вот нормально ?
- $res = mysql_query ("SELECT COUNT(DISTINCT link) FROM news"); - тут будет проверятся уникальная ссылка? :(
и если да то это всё в иф засунуть ?

   
 
 автор: cheops   (22.10.2006 в 14:35)   письмо автору
 
   для: Panker   (22.10.2006 в 13:26)
 

У вас URL будет известен за ранее, поэтому запрос должен выглядеть следующим образом
<?php
  $res 
mysql_query ("SELECT COUNT(link) FROM news WHERE link = '$link'");
  if(!
$res) exit(mysql_error());
  
$total mysql_result($res0);
?>

Если $total = 0 - такой записи нет, если $total = 1, такая запись уже существует и вставлять её повторно не следует.

   
 
 автор: Panker   (22.10.2006 в 17:41)   письмо автору
 
   для: cheops   (22.10.2006 в 14:35)
 

простите

делал вроде точней сделал вроде бы всё правельно!

полный код ниже представлю, сначала расскауж :)
Вроде бы сделано всё ок НО ВСЕГДА ВЫВОДИТСЯ НОЛЬ!
Проверил вывести перед проверкой ССЫЛКИ типа echo "$rss_link"; все ссылки вывелись, дальше сверяю как вы показали, и всегда выводится десять нулей, ну типа десять нвоостей в данный момент там :(

отд код, что не так?


<?php 
Error_Reporting
(E_ALL & ~E_NOTICE);
include 
"config.php";



    
$text2 file_get_contents ("http://www.samsung.ru/press/news/news.rss"); 
    if (
preg_match_all ("#<item>.*<title>(.*)</title>.*<link>(.*)</link>.*<description>(.*)</description>.*<pubDate>(.*)</pubDate>.*</item>#isU"$text2$regs)) 
    { 
        for (
$i 0$i count($regs[1]); $i++) 
        { 
             
$title_rss iconv("UTF-8""WINDOWS-1251"trim($regs[1][$i])); 
             
$link_rss trim ($regs[2][$i]); 
             
$des_rss iconv("UTF-8""WINDOWS-1251"trim ($regs[3][$i])); 
             
$pub_rss trim ($regs[4][$i]); 


        } 
    } 

for (
$i 0$i count($regs[1]); $i++)  
        {  
             
$title_rss iconv("UTF-8""WINDOWS-1251"trim($regs[1][$i]));  
             
$link_rss trim ($regs[2][$i]);  
             
$des_rss iconv("UTF-8""WINDOWS-1251"trim ($regs[3][$i]));  
             
$pub_rss trim ($regs[4][$i]);  

             
    
$res mysql_query ("SELECT COUNT(link) FROM news WHERE link = '$link_rss'"); 
    if(!
$res) exit(mysql_error()); 
    
$total mysql_result($res0); 
    echo 
"$total";
             
             
$text2 file_get_contents ($link_rss);  
             if (
preg_match ('#</noindex></div><h1 class="news"><noindex>.*</noindex></h1>(<p>.*)<br clear="all"><table cellpadding="0" cellspacing="0" border="0" width="610">#isU'$text2$out))  
             
$text=$out[1];  
             

    
    if(
$total==0)
    {
   
$query "INSERT INTO news VALUES ('', '$title_rss', '$des_rss', '$pub_rss', '$link_rss')"// Здесь следует сформировать запрос под вашу таблицу 
   
mysql_query($query); 
    } 
    }
?>


малоли, вот таблица моя

CREATE TABLE `news` (
  `id` int(11) NOT NULL auto_increment,
  `title` text NOT NULL,
  `text` text NOT NULL,
  `link` text NOT NULL,
  `data` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

-- 
-- Дамп данных таблицы `news`
-- 

        

   
 
 автор: cheops   (23.10.2006 в 02:31)   письмо автору
 
   для: Panker   (22.10.2006 в 17:41)
 

>десять нвоостей в данный момент там :(
0 означает, что новости в данный момент нет, т.е. имеется ввиду, что 0 выводится даже после того, как новостная позиция добавлена в базу данных?

   
 
 автор: cheops   (23.10.2006 в 02:34)   письмо автору
 
   для: Panker   (22.10.2006 в 17:41)
 

Хм... у вас странно вставляется запись в таблицу news, поле link у вас предпоследнее, а вставляете вы $link_rss в последнее поле, поэтому скрипт и не находит старый URL, так как он ложиться в соседнее поле.

   
 
 автор: Panker   (23.10.2006 в 08:27)   письмо автору
 
   для: cheops   (23.10.2006 в 02:34)
 

чёт я нечё не понел :)
что делать то ? :)
что то перекладывать или как))

   
 
 автор: cheops   (23.10.2006 в 12:28)   письмо автору
 
   для: Panker   (23.10.2006 в 08:27)
 

Следует изменить INSERT-запрос
<?php
$query 
"INSERT INTO news VALUES ('', '$title_rss', '$des_rss', '$pub_rss', '$link_rss')";
?>

таким образом, чтобы в последнем поле была дата, а URL в переменной $link_rss - ложился на своё место, а не поле date.

   
 
 автор: Panker   (23.10.2006 в 12:48)   письмо автору
 
   для: cheops   (23.10.2006 в 12:28)
 

дауж :( что то я запутался, да там и не трудно запутатся :( всё как то через .... делал вот и запутался :)

большое спасибо всё хорошо работает :)

   
Rambler's Top100
вверх

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