RSS граберы

Discussion in 'ПО для Web разработчика' started by Spayn, 9 Nov 2008.

  1. Spayn

    Spayn New Member

    Joined:
    8 Nov 2008
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Все доброго времени суток! Мне нужно сделать грабер с сайта http://www.photoshop-master.ru/rss_les2.php . Вот не подскажите с чего начать ? Задача только в сто , что нужно это взять с того сайта, и вывести на моём. Заранее спасибо!
     
  2. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    http://www.google.com.ua/search?hl=ru&q=RSS+%D0%B3%D1%80%D0%B0%D0%B1%D0%B5%D1%80+%D0%BD%D0%B0+php&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&meta=
     
  3. Spayn

    Spayn New Member

    Joined:
    8 Nov 2008
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    ссылка фигню выдаёт. Напиши лучше так, что ты вбивал в поиск
     
  4. PandoraBox

    PandoraBox Elder - Старейшина

    Joined:
    6 May 2007
    Messages:
    262
    Likes Received:
    176
    Reputations:
    7
  5. PandoraBox

    PandoraBox Elder - Старейшина

    Joined:
    6 May 2007
    Messages:
    262
    Likes Received:
    176
    Reputations:
    7
    если тебе грабить новости в DataLife Engine там встроен такой модуль только без автоматизации добавки
     
  6. Spayn

    Spayn New Member

    Joined:
    8 Nov 2008
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Не , мне не для CMS надо , у меня просто свой PHP сайтик
     
  7. Spayn

    Spayn New Member

    Joined:
    8 Nov 2008
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    скачал с сайта парсер, но он выводит, попробывал вывести новости с гугла, выводит не корректно, с тегами.
     
  8. PandoraBox

    PandoraBox Elder - Старейшина

    Joined:
    6 May 2007
    Messages:
    262
    Likes Received:
    176
    Reputations:
    7
    SimpleXML – это расширение для PHP5 устанавливаемое в него по умолчанию, представляет самый простой и элегантный способ обработки XML (соответственно и RSS) файлов. Это и наиболее предпочтительный способ, но он стал доступным только в 5 версии PHP. Тут нет ничего проще, данный код наглядно показывает как просто парсить RSS ленты средствами SimpleXML:
    PHP:
    <?
    $url 'rss.xml';       //адрес RSS ленты

    $rss simplexml_load_file($url);       //Интерпретирует XML-файл в объект

    //цикл для обхода всей RSS ленты
    foreach ($rss->channel->item as $item) {
            echo 
    '<h1>'.$item->title.'</h1>';       //выводим на печать заголовок статьи 
            
    echo $item->description;        //выводим на печать текст статьи
    }
    ?>
    Данный код выведет заголовки и тексты статей из RSS ленты. Просто ведь? Этим SimpleXML и привлекает. Дальше вам нужно будет только правильно распорядиться полученными данными, записать в базу или еще куда-нибудь.

    XML Parser Functions - это стандартные функции PHP для работы с XML доступные начиная c 4-ой версии PHP. Тоже нет ничего сложного, правда в отличие от SimpleXML совсем не элегантно. Продемонстрирую пример:
    PHP:
    <?
    $url 'rss.xml';       //адрес RSS ленты
    $xml xml_parser_create();     //создаёт XML-разборщик
    xml_parser_set_option($xmlXML_OPTION_SKIP_WHITE1);  //устанавливает опции XML-разборщика
    xml_parse_into_struct($xmlfile_get_contents($url), $element$index); //разбирает XML-данные в структуру массива
    xml_parser_free($xml);  //освобождает XML-разборщик

    $count count($index["TITLE"])-1;      //число проходов цикла.

    for ($i=0$i $count$i++) {
            echo 
    '<h1>'.$element[$index["TITLE"][$i+1]]["value"].'</h1>';           //выводим на печать заголовок статьи 
            
    echo $element[$index["DESCRIPTION"][$i+1]]["value"];            //выводим на печать текст статьи
    }
    ?>
    Вот таким образом мы получаем интересующие нас содержимое элементов RSS. Но тут уже нужно разобраться с массивами которые создает XML разборщик.

    Способ 3 – Написать RSS парсер самому

    Например я делал именно так, когда не знал про существование SimpleXML и XML Parser Functions. Приведу небольшой пример парсинга RSS обычным процедурным PHP кодом, тут за парсинг отвечает функция preg_match_all(), которая выполняет глобальный поиск шаблона в строке. Данный пример не совершенен и парсит только титлы и дескрипшены у RSS:
    PHP:
    <?
    $url 'rss.xml';       //адрес RSS ленты

    $rss = @file_get_contents($url);        //получаем содержимое RSS лент в виде одной строки

    if ($rss) {     
            
    preg_match_all("/title>[^>]+>/"$rss$title);         //парсим титлы
            
    preg_match_all("/<description>[^<]+<\/description>/"$rss$description);              //парсим дескрипшены
            
            
    $count count($title[0])-1;    //число проходов цикла.
            
            
    for ($i=0$i $count$i++) {
                    echo 
    '<h1>'.substr($title[0][$i+1], 6, -8).'</h1>';             //выводим на печать заголовок статьи 
                    
    echo substr($description[0][$i], 13, -14);              //выводим на печать текст статьи
            
    }
    } else {
            echo 
    '<font color="red">Ошибка парсинга '.$url.'</font>';       //выводим ошибку если file_get_contents() вернула false
    }
    ?>
    Таким же способом можно и отпарсить остальные элементы RSS ленты, главное написать правильно регулярку.

    На этих трех способах мы и остановимся, еще есть наверняка множество сторонних скриптов и классов в PHP для парсинга XML, например magpieRSS у которого проблемы с кодировкой при парсинге и решить ее у меня не получилось, да собственно не очень то и хотелось, когда есть SimpleXML и XML Parser Functions. Вот кстати о проблемах с кодировкой мы сейчас и поговорим…

    Проблемы с кодировкой

    RSS ленты как правило находятся в кодировке UTF-8, при парсинге русского текста тремя способами описанными выше, нам на экран выводятся кракозябры.
    PHP:
    <?
    echo 
    utf8_convert($str"w");   //перекодирует $str из UTF-8 в Windows-1251 и выведет на экран
    {
       static 
    $conv '';
       if (!
    is_array($conv))
       {
          
    $conv = array();
          for (
    $x=128$x <= 143$x++)
          {
             
    $conv['utf'][] = chr(209) . chr($x);
             
    $conv['win'][] = chr($x 112);
          }
          for (
    $x=144$x<= 191$x++)
          {
             
    $conv['utf'][] = chr(208) . chr($x);
             
    $conv['win'][] = chr($x 48);
          }
          
    $conv['utf'][] = chr(208) . chr(129);
          
    $conv['win'][] = chr(168);
          
    $conv['utf'][] = chr(209) . chr(145);
          
    $conv['win'][] = chr(184);
       }
       if (
    $type == 'w')
       {
          return 
    str_replace($conv['utf'], $conv['win'], $str);
       }
       elseif (
    $type == 'u')
       {
          return 
    str_replace($conv['win'], $conv['utf'], $str);
       }
       else
       {
          return 
    $str;
       }
    }
    ?>
    Функция utf8_convert() принимает 2 параметра: $str – наша строка которую нужно перекодировать и $type – в какую кодировку нужно кодировать (“w” – из utf в win, “u” – из win в utf). Как это применить к нашим 3-м способам парсинга RSS думаю разберетесь, если хоть немного знаете PHP.
     
  9. Spayn

    Spayn New Member

    Joined:
    8 Nov 2008
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Я нашёл ешё один вариант : взял рсс ленту и зарегестрировался на http://rsslenta.ru, там мне дали ява скрипт , который выводит эту ленту у меня на сайте, но дело в том, что нужно информацию, которую выводит лента нужно как то записать в бд и уже тольуо потом выводить... вот здесь я застрял, как загнать инфу в базу
     
  10. Spayn

    Spayn New Member

    Joined:
    8 Nov 2008
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Люди помогите пожалуста!