На счёт ленты rss

Discussion in 'PHP' started by гейлордфакерЪ, 12 Sep 2008.

  1. гейлордфакерЪ

    гейлордфакерЪ Elder - Старейшина

    Joined:
    28 Sep 2006
    Messages:
    416
    Likes Received:
    296
    Reputations:
    -20
    Думаю что правильно выбрал раздел для темы

    вобщем такая проблема, у меня комфорт чат в локалке
    под него написан бот который читает файл default.xml так вот вопрос как скачать с rss канала .xml файл
    а именно мне нужен http://img.lenta.ru/r/EX/import.rss вот этот канал ну или какой либо другой новосной сайт с мировыми новостями.
    Кто поможет "+++++" в репу
    заранее спасибо.
     
  2. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    system('wget http://img.lenta.ru/r/EX/import.rss --output-document default.xml');
     
  3. cash$$$

    cash$$$ Banned

    Joined:
    6 Jan 2008
    Messages:
    385
    Likes Received:
    246
    Reputations:
    10
    Канал RSS:

    PHP:
     <?xml version="1.0" encoding="UTF-8"?>
    <rss version="0.92">
    <channel>
      <title>// титл</title>
      <link>// ссылка </link>
      <language>en</language>
      <item>
        <title>//титл</title>
        <description>
    //описание
        </description>
        <link>// ссылка</link>
      </item>
      <item>
        <title>// титл</title>
        <description>………</description>

        <link>// ссылка</link>
      </item>
    </channel>
    </rss> 
    Делаем страницу PHP, которая форматирует каждый RSS канал как HTML.

    PHP:
     <?php // Загрузим и проанализируем XML-document ?>
    <html xml:lang="en" lang="en">
    <head>
      <title><?php // Заголовок будет читаться из RSS ?></title>
    </head>
    <body>

    <h1><?php // Заголовок снова будет читаться из RSS ?></h1>

    <?php
    // Здесь мы поместим цикл, чтобы включить заголвок каждого элемента и описание
    ?>

    </body>
    </html> 
    Полная программа считывания PHP RSS:

    PHP:
     <?php // Load and parse the XML document 
    $rss =  simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
    $title =  $rss->channel->title;
    ?>
    <html xml:lang="en" lang="en">
    <head>
      <title><?php echo $title?></title>
    </head>
    <body>

    <h1><?php echo $title?></h1>

    <?php
    // Здесь мы поместим цикл, чтобы включить заголовок элемента и описание
    foreach ($rss->channel->item as $item) {
      echo 
    "<h2><a href='"$item->link"'>"$item->title"</a></h2>";
      echo 
    "<p>"$item->description"</p>";
    }
    ?>

    </body>
    </html> 
     
    2 people like this.
  4. Winst0n

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

    Joined:
    19 Aug 2008
    Messages:
    92
    Likes Received:
    5
    Reputations:
    0
    cash$$$, последний скрипт который ты написал, будет считывать rss с нужного мне сайта !? я так понял)
    у меня ошибка вылазит

    Fatal error: Call to undefined function simplexml_load_file() in /home/winston/data/www/мой домен/rss.php on line 2
     
  5. cash$$$

    cash$$$ Banned

    Joined:
    6 Jan 2008
    Messages:
    385
    Likes Received:
    246
    Reputations:
    10
    Не все каналы RSS так хорошо сформированы, как это должно быть. Поэтому для исправления ошибки, попробуй так:

    PHP:
    <?php
    $rss 
    =  simplexml_load_file('//ссылка на rss');
    if (
    $rss) {
      foreach (
    $rss->xpath('//title') as $title) {
        echo 
    "<h2>"$title"</h2>";
      }
    }
    else {
      echo 
    "Упс! Ввод деформирован!";
    }
    ?>
    Другая распространенная ошибка случается, когда документ хорошо сформатирован, но не содержит те элементы, которые нужно найти. Происходит, например, с таким выражением $doc->rss->channel->item->title, когда элементная группа не имеет заголовка. Самый простой подход – всегда обращаться с возвращаемым функцией значением как с массивом данных и заключать его в цикл. Если знать, что первый элемент в документе, даже если там имеется больше чем один, то можно запросить его через индекс, начинающийся с нуля. Например, для запроса заголовка первой группы элементов, можно написать:

    $doc->rss->channel->item[0]->title[0]

    Если первая группа элементов отсутствует, или не имеет названия, она рассматривается так же, как и любой другой, находящийся за установленными рамками индекс, в массиве PHP. То есть результат равен нулю, который превращается в пустую строку.

    Распознавание и отклонение неожиданных форматов, с которыми ты не готов работать, обычно является проверкой на правильность парсера XML. SimpleXML не может проверить относительно шаблона DTD (DTD) или схемы данных. Он проверяет только на формальную правильность.
     
  6. Winst0n

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

    Joined:
    19 Aug 2008
    Messages:
    92
    Likes Received:
    5
    Reputations:
    0
    все таже ощибка... к моему сожалению пхп вапше незнаю.... только элеметарные веши, как движок устоновит и тд :)
     
  7. гейлордфакерЪ

    гейлордфакерЪ Elder - Старейшина

    Joined:
    28 Sep 2006
    Messages:
    416
    Likes Received:
    296
    Reputations:
    -20
    всем спасибо за помощь
    ставлю "+" как и обещял
     
  8. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Виноват одмин твоего хостинга. Пусть модуль доставит.
     
  9. гейлордфакерЪ

    гейлордфакерЪ Elder - Старейшина

    Joined:
    28 Sep 2006
    Messages:
    416
    Likes Received:
    296
    Reputations:
    -20
    кстати сел основательно
    выудил
    http://img.lenta.ru/r/EX/import.xml
    неудобство в том только что нада написать скрипт чтоб постоянно выкачивал данный файл в 8 00 утра и заменял старый на новый
     
  10. NApoleonchik

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

    Joined:
    4 Jul 2007
    Messages:
    79
    Likes Received:
    39
    Reputations:
    4
    спасибо, тоже было интересно
     
    1 person likes this.
  11. Zabuldon

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

    Joined:
    6 Apr 2008
    Messages:
    99
    Likes Received:
    6
    Reputations:
    0
    а почему не сделать демона который быы висел с таймлимом 0 и ровно в 8 не выкачивал те скрипт?
     
  12. Helios

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

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Потому, что изобретать велосипед - дело неблагодарное. Умные люди придумали для этих целей CRON. Чтобы применять - коннектишься по SSH к своему серверу и пишешь:
    Code:
    crontab -e
    
    Откроется текстовый редактор (скорее всего VI), в котором нужно дописать новую строку:
    Code:
    0 0 * * * /usr/bin/php /home/path/to/script.php
    
    После этого сохраняем и закрываем.
    Теперь скрипт будет запускаться каждый день в 0:00