Объединение PHP и RSS (исходники)

Трэйси Питерсон

Что? Вы не слышали о RSS?

RSS - одно из наиболее часто встречающихся сокращений. В разных версиях аббревиатура RSS имела разные расшифровки, но сейчас используется расшифровка Really Simple Syndication (по-настоящему простая синдикация) - последняя вариация этого очень удобного и успешного стандарта.

На заре развития интернета существовало программное обеспечение, называвшееся Pointcast. Оно размещало данные на экранной заставке компьютера пользователя, таким образом предоставляя свежие новости всех видов. С течением времени разработчики браузеров Netscape и Microsoft работали над созданием чего-то подобного этому популярному сервису. Компания Netscape предоставила вариант, который, став популярным, в конечном итоге, привёл к появлению RSS.

RSS распространяет недавно обновленную информацию множеству получателей по принципу широковещательных радиостанций. При достаточной популярности RSS-лента начинает действовать как маяк, возвращающий пользователей. Необычайная эффективность формата увеличила его популярность: RSS стал использоваться поставщиками оперативной информации, так как явился отличным инструментом в деле привлечения внимания общественности.

Если вы видите на сайте иконку, изображенную на рисунке 1, можете быть уверены: этот сайт имеет RSS-ленту. Эта иконка является стандартом де-факто, обозначающим возможность использования RSS для просмотра обновлений на сайте. Дуговые линии означают радиоволны, символ широковещательной природы RSS-ленты.

Приложения RSS

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

Например, Thunderbird и Firefox от Mozilla, Internet Explorer 7 и вскоре ожидаемые версии Office от Microsoft и др. уже сейчас настолько же близки к вам, как ближайший поисковый сервер. Множество различных способов работы с лентами позволяет выбрать среди них наиболее удобный и подходящий именно вам. Если, конечно, вы не придирчивый программист, желающий написать свою программу для работы с лентами! А именно к этому вопросу скоро перейдет эта статья!

Как я могу использовать RSS?

Допустим, на вашем сайте есть материалы, которыми вы хотите поделиться с целевой аудиторией. Думаете, существенное число пользователей, узнавшее о вашем сайте и материалах, размещённых на нём, будет возвращаться каждый день, чтобы проверить обновления? Вероятно, нет. Посещаете ли вы для проверки обновлений сайты, наиболее часто используемые вами, каждый день? Опять же, нет. Вот здесь и приходит на помощь RSS.

Для ваших пользователей RSS станет существенной выгодой, особенно если они оценивают мнения или новости, размещенные на вашем сайте. Даже не посещая часто ваш сайт, они всегда будут знать, что вы обновили старые материалы сайта или добавили новые. Это позволит пользователям экономить время и усилия и одновременно не пропустить обновления!

Создание содержания не проблема, в случае если на вашем сайте вы используете RSS-ленты для обеспечения агрегирования содержания. Путём извлечения данных из ленты можно добиться наполнения сайта большим числом различных материалов быстро.

Лично я предпочитаю собирать материалы отобранных результатов с различных сайтов, таких как Craigslist (www.craigslist.org). Небольшая уловка, которую я использую для покупки использованной электронной техники. Вы можете настроить поиск по сайту и в результате получить RSS-страницу. Если вы выбрали поиск материалов о камерах, находящихся в определенном ценовом диапазоне, у вас будет возможность увидеть, кто и когда выставил камеру на продажу на вашей RSS-ленте! Это даёт вам преимущество быть первым претендентом на покупку!

Стандартный формат RSS 2.0

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

Взгляните на RSS-формат на листинге 1 - он использует образец документа из ленты NASA "Liftoff News" .

Листинг 1. Пример документа формата RSS 2.0

                
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Liftoff News</title>
    <link>http://liftoff.msfc.nasa.gov/</link>
    <description>Liftoff to Space Exploration.</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>editor@example.com</managingEditor>
    <webMaster>webmaster@example.com</webMaster>

    <item>
      <title>Star City</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
      <description>How do Americans get ready to work with Russians aboard the
        International Space Station? They take a crash course in culture, language
        and protocol at Russia's Star City.</description>
      <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
    </item>
    
    <item>
      <title>Space Exploration</title>
      <link>http://liftoff.msfc.nasa.gov/</link>
      <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada
        will experience a partial eclipse of the Sun on Saturday, May 31st.</description>
      <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
    </item>
    
    <item>
      <title>The Engine That Does More</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
      <description>Before man travels to Mars, NASA hopes to design new engines
        that will let us fly through the Solar System more quickly.  The proposed
        VASIMR engine would do that.</description>
      <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
    </item>
    
    <item>
      <title>Astronauts' Dirty Laundry</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
      <description>Compared to earlier spacecraft, the International Space
        Station has many luxuries, but laundry facilities are not one of them.
        Instead, astronauts have other options.</description>
      <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
    </item>
  </channel>
</rss>

Первый порожденный объект XML-форматированного документа - определение <channel>. Канал является простой собственной лентой ассоциированной с ним информации. Множество RSS-лент имеет только один канал, но вы можете использовать несколько, возможно, для этого вам придётся использовать разделительный фильтр. Объекты title, link и description требуются канальным объектом. Они задают базовые описания ленты. Дополнительные объекты: language, copyright, managingEditor, webMaster, pubDate, lastBuildDate, category, generator, docs, cloud, ttl, image, rating, textInput, skipHours и skipDays.

Канал может содержать бесконечное количество элементов. Все элементы элемента ITEM необязательны, однако для успешной проверки правильности требуется хотя бы один заголовок или описание. Элементы: title, link, description, author, category, comments, enclosure, guide, pubDate и source.

В чём будет полезен PHP?

Эта статья предполагает наличие у вас некоторого опыта использования PHP, в частности, что вы умеете передавать переменную в функцию и выводить из неё результат. В языке PHP существует множество функций, упрощающих работу с XML как внутри, так и снаружи приложений.

Сначала вы хотите получить информацию из локального источника данных, системы управления наполнением сайта, блога или любых других материалов, вписывающихся в формат интернет-документа, а затем вывести её на ленту. Вам понадобится получить эти данные, переформатировать их в RSS-объект и обработать запросы для него.

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

XML_RSS() - это PEAR-пакет, который упростит решение многих комплексных проблем интерпретации файла XML RSS. PEAR - это бесплатная библиотека функций PHP с открытым кодом. Вы можете уже иметь на вашем компьютере эту библиотеку, если вы производили установку PHP-продуктов. В любом случае, эта статья требует её наличие (см. ссылку в разделе Ресурсы). XML_RSS() - эта простая функция, передающая местонахождение RSS-ленты, загружает XML-ленты в массив, готовый для использования PHP-приложениями. Элементы массива имеют именованные ключи, ассоциированные с элементами и атрибутами файла чтения RSS.

Вывод данных

Теперь, когда вы знаете, что такое формат данных RSS, вы можете определиться с данными, которые желаете выводить, и перевести их в этот формат. К счастью, PHP имеет мощные возможности по обработке RSS и XML, которые ускоряют процесс разработки. Как и большинство общих Web-стандартов, PHP имеет ряд готовых функций, готовых к использованию в ваших приложениях.

 
Вывод слова

Вы создали ленту, но как дать людям знать о ней? Вы можете сообщить Mozilla Firefox и Microsoft Internet Explorer и другим программам для чтения о вашей ленте добавлением следующего тэга в заголовок вашей домашней страницы:

<link rel="alternate" type="application/rss+xml" 
href="URL_FOR_YOUR_FEED" title="FEED_TITLE" />

Обновите тэг соответственно вашему URL и типу ленты.

В этой статье описывается вывод данных из базы использованием "" и последующий перевод их в формат RSS-ленты. Настройте её на поиск последних добавлений к набору данных при каждом обращении к ней и отсылке свежих сведений запрашивающему.

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

Вы будете использовать PHP для соединения вашей базы данных Web-приложений, вывода обновленной информации и перевода её в формат XML RSS документа.

Базовые функции вывода данных

Допустим, вы имеете базу данных вариантов. Вы создадите стандартное подключение и выведете страницу с удобночитаемым XML.

Отсылка страницы запрашивающей стороне

Теперь, когда у вас есть данные, представленные в нужном формате в вашем собственном коде, вам необходимо удостовериться в том, что вы выводите данные верно: чтобы какой-либо пользователь, вводящий ваш URL-адрес в свою программу чтения, получал нужную ему XML RSS-ленту (см. листинг 2).

Листинг 2. Законченный файл RSS.php

                
<?php

$database =  "nameofthedatabase";
$dbconnect = mysql_pconnect(localhost, dbuser, dbpassword);
mysql_select_db($database, $dbconnect);
$query = "select link, headline, description from `headlines` limit 15";
$result = mysql_query($query, $dbconnect);

while ($line = mysql_fetch_assoc($result))
        {
            $return[] = $line;
        }

$now = date("D, d M Y H:i:s T");

$output = "<?xml version=\"1.0\"?>
            <rss version=\"2.0\">
                <channel>
                    <title>Our Demo RSS</title>
                    <link>http://www.tracypeterson.com/RSS/RSS.php</link>
                    <description>A Test RSS</description>
                    <language>en-us</language>
                    <pubDate>$now</pubDate>
                    <lastBuildDate>$now</lastBuildDate>
                    <docs>http://someurl.com</docs>
                    <managingEditor>you@youremail.com</managingEditor>
                    <webMaster>you@youremail.com</webMaster>
            ";
            
foreach ($return as $line)
{
    $output .= "<item><title>".htmlentities($line['headline'])."</title>
                    <link>".htmlentities($line['link'])."</link>
                    
<description>".htmlentities(strip_tags($line['description']))."</description>
                </item>";
}
$output .= "</channel></rss>";
echo $output;
?>

Давайте пройдём по листингу шаг за шагом. Сначала вы устанавливаете объект подключения базы данных для локальной базы данных. Она имеет записи с полями, содержащими заголовок, ссылку и описание - их вы будете выводить в ваш XML-ответ. Выполните SQL-запрос для таблицы вызовом функции MYSQL_QUERY(), а полученный результат используйте совместно с WHILE для перевода формата данных в новый простой массив конечного объекта.

Используйте новый готовый массив для создания XML-файла в переменной $output добавлением новых элементов при проходе через массив $line единожды для каждого возвращаемого ответа. Это не займёт много времени, поскольку ранее в SQL-сообщении вы ограничили количество ответов до 15. Чтобы использовать этот фрагмент кода в качестве стандартного блока стартера, вам необходимо убрать фиктивные ссылки, имя базы данных и информацию о входе в систему для отображения вашей собственной среды.

После выполнения скрипта вы получите хороший чистый RSS файл вывода, подобный тому, что вы видите в листинге 3.

Листинг 3. Файл вывода RSS.php

                
<?xml version="1.0"?>
    <rss version="0.97">
        <channel>
            <title>Our Demo RSS</title>
            <link>http://www.tracypeterson.com/RSS/RSS.php</link>
            <description>A Test RSS</description>
            <language>en-us</language>
            <pubDate>Mon, 13 Nov 2006 22:46:06 PST</pubDate>
            <lastBuildDate>Mon, 13 Nov 2006 22:46:06 PST</lastBuildDate>
            <docs>http://someurl.com</docs>
            <managingEditor>you@youremail.com</managingEditor>
            <webMaster>you@youremail.com</webMaster>
    <item rdf:about="http://www.tracypeterson.com/">
            <title>This is Tracy's Web Page!</title>
            <link>http://www.tracypeterson.com/</link>
            <description>This is a demonstration of how to get PHP to work for 
your RSS feed.</description>
        </item><item rdf:about="http://www.tracypeterson.com">
            <title>This is Tracy's site again!</title>
            <link>http://www.tracypeterson.com</link>
            <description>Again, this is a demonstration of the power of PHP 
coupled with RSS.</description>
        </item></channel></rss> 

Теперь любой может ввести URL-адрес в RSS.php и подгрузить свежий RSS-файл, содержащий новые материалы!

Ввод данных

Вы будете использовать функции XML_RSS() для ввода RSS-ленты в PHP-скрипты, готовые для использования, как любой другой массив. Подобно запросу для базы данных, вы будете иметь массив, которые вы сможете использовать по своему усмотрению.

В этом случае требуется вам необходимо подсоединить RSS.php и загрузить копию, отображающую его в неупорядоченном списке (см листинг 4).

Листинг 4. showfeed.php

                
<?php
require_once "XML/RSS.php";

$rss =& new XML_RSS("http://www.tracypeterson.com/RSS/RSS.php");
$rss->parse();

echo "<h1>Headlines from <a
href=\"http://www.tracypeterson.com/RSS/RSS.php\">Tracy 
        Peterson's Site</a></h1>\n"; echo "<ul>\n";

foreach ($rss->getItems() as $item) {
  echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] . 
"</a></li>\n";
}
echo "</ul>\n";
?>

Этот краткий пример, показанный на листинге 4, приведён в инструкции к PEAR. Давайте исследуем его строчка за строчкой и убедимся в том, что он в действительности использует исключительно спаренные методы, доступные в классе XML_RSS(), конструкторе и parse(). Последний производит вывод отображения в качестве массива, который я упоминал ранее.

Сначала используйте функцию require_once() для загрузки файла RSS.php из вашей инсталляции PEAR. Если PEAR настроена верно и установлен XML_RSS, его расположение будет корректно; объект XML_RSS готов к использованию. Затем создайте новый объект с именем $rss, который будет являться результатом передачи URL-адреса в конструктор XML_RSS.

Для возврата значений в RSS-ленту используйте метод parse(). Первая echo-строка запускает установку базового HTML, используемого вами для отображения RSS-ленты пользователю. В этом случае вы объявляете, что неупорядоченный список - список заголовков от моего сайта!

Выражение foreach() передаёт каждый элемент из обработанной ленты, используя метод getItems(), в новый массив $items. Каждый из элементов массива именуется после абсолютного XML-тэга, в котором он содержится. В этом случае вы используете только ссылку и заголовок; через мгновение вы добавите описание, чтобы исследовать этот пункт. Каждый раз, когда выражение foreach завершает обработку, оно перемещается на следующий элемент. Это происходит до тех пор, пока не будет обработана вся RSS-лента.

Теперь добавьте описания к каждому из отображенных результатов.

Внутри цикла foreach() добавьте линию, выделенную в листинге 5.

Листинг 5. Добавление описания

                
foreach ($rss->getItems() as $item) {
  echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] . 
"</a></li><br>";
  echo $item['description'] . "<br><br>\n"; }

Вы просто добавляете в неорганизованный список строку прерывания и строку описания. Ниже вы увидите пример вывода showfeed.php.

Рисунок 2. Вывод showfeed.php
showfeed.php output 

В заключение

Интернет - это система, которая только начинает развиваться и содержит в себе огромный потенциал. Увеличение доступности, обеспечиваемое RSS, упрощает уведомление пользователей об обновлениях - им попросту не нужно тратить время на самостоятельную проверку.

В этой статье мы исследовали стандарт формата RSS, создание лент, перевод их в удобную для просмотра форму HTML. Вы можете использовать полученные знания при разработке более крупных приложений.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=6278