|
||||||||||||||
|
||||||||||||||
RSS-агрегатор - это программа, предназначенная для сбора и систематизации RSS-Каналов. Внешне агрегатор напоминает почтовую программу: слева - колонка с рассортированным по категориям списком интересующих веб-сайтов (каждый веб-сайт - это RSS-канал), а в правой части окна выводится собранная информация.
Алгоритм подключения RSS-канала одинаков для всех агрегаторов:
- сначала нужно добавить в агрегатор ссылки на RSS-каналы (кстати говоря, практически во всех агрегаторах уже предуставлены наиболее популярные RSS-каналы - спортивные, новостные, развлекательные, каналы софткаталогов и т.д.). Обычно ссылки на RSS-канал, размещаемые на веб-сайтах, выглядят в виде оранжевого или красного прямоугольника с надписью "XML" (RSS формат основан на XLM) или "RSS" (такой значок находится и на титульной странице Софтодрома - прямо в самом начале рубрики "Новинки" - []). Увидев такую ссылку, ее можно просто скопировать из браузера и вставить в агрегатор, указав ее в качестве нового RSS-канала (RSS-колонки).
Еще один способ нахождения RSS-каналов - их поиск через любой поисковик. Для примера берем google.ru: если ввести в поисковой строке
rss site:lenta.ru
(вместо lenta.ru нужно указать интересующий сайт)
то будут найдены все страницы этого сайта, на которых упоминается RSS (если они, конечено, есть), в том числе имеющие в своем названии или расширении rss или xml. Как раз этот URL нам и нужен - как правило, ссылка на RSS-канал содержит в своем названии или rss, или xml, или и то, и другое: rss.php, news.rss, rss.xml и т.п.
- все остальное сделает RSS-агрегатор: он вовремя скачает список новостей с сайта и представит его в виде, удобном для ознакомления, причем настройки практически всех агрегаторов позволяяют выставить период автоматического обновления информации (одни сайты обновляются раз в сутки, другие - раз в час и т.д.)
RSS-агрегаторов выпущено довольно много (как бесплатных, так и условно-бесплатных), поэтому перечислю лишь те, что размещены в каталоге Softodrom.ru: одним из наиболее популярных услово-бесплатных агрегаторов является FeedDemon, не менее удобны RSS Captor ии GetNews; интерес представляет и WebNews.TV с оригинальным интерфейсом в виде анимированного телевизора, озвучивающего новости голосом. Из бесплатных программ имеет смысл обратить внимание на Abilon - компактный RSS-агрегатор с многоязычным (включая русский) интерфейсом.
Наконец, не стоит забывать о том, что некоторые браузеры, в том числе Opera и Mozilla FireFox, имеют встроенный RSS-агрегатор. Правда, специализированные программы-агрегаторы обладают более широкими возможностями, но для начала - чтобы оценить всю прелесть RSS - вполне хватит и тех, что предоставляют агрегаторы браузеров.
Элемент | Описание | Пример |
title | Заголовок канала. Основной элемент, по которому люди смогут идентифицировать Ваш канал. Используйте заголовки умеренной длинны, и максимально информативные. Вначале заголовка можно упомянуть ваш сайт, если он популярен. Отличной техникой является неизменный заголовок, ни в коем случая не указывайте в заголовке дат и тому подобного, для этого есть другие элементы. Избегайте СПАМА в заголовках, поисковиков по RSS всё-равно пока нет, а пользователю разобрать что-то будет нелегко. | Kanban.Ru - каталог RSS-каналов. |
link | Ссылка на Ваш сайт. Ссылка должна вести на главную страницу вашего сайта. Или, как максимум, на соответствующий каналу раздел. | |
description | Описание канала. Описание не должно повторять заголовок, а должно его расшифровывать и дополнять. | Последние поступления в каталог русских RSS-каналов. |
language | Язык, на котором написан канал. Несмотря на то, что этот элемент необязателен, УКАЗЫВАЙТЕ ЕГО ВСЕГДА. Это поможет миновать целый список проблем. Есть 2 списка значений для этого элемента. Оба допустимы. | ru, ru-ru |
copyright | Копирайт | Copyright 2004, ОАО "Рога и копыта" |
managingEditor | Электронная почта редактора канала (лица, отвечающего за информацию, представленную в канале). | [email protected] (Vasja Pupkin) |
webMaster | Электронная почта веб-мастера (лица, отвечающего за техническую реализацию канала). | [email protected] (Vasja Pupkin) |
pubDate | Дата публикации информации в канале. Каждый раз, когда информация публикуется, необходимо обновлять этот элемент. Это позволит многим агрегаторам ранжировать Ваш канал по актуальности представленной информации. Формат нужно использовать только. Единственное исключение, в том, что год можно указать 2-мя последними числами. Но никогда так не делайте. | Fri, 17 Jun 2004 00:00:01 GMT |
lastBuildDate | Время последнего изменения канала.Отличие от предыдущего в том, что эта дата отражает последнее изменения контента, в то время, как pubDate – дата публикации, а не последнего редактирования.Например, Ваш канал может быть опубликован год назад с информацией о курсах валют, которые обновляются каждый день. | Fri, 17 Jun 2004 00:00:01 GMT |
category | Определяет категорию, к которой принадлежит канал. Можно указать несколько. | <category>Newspapers</category> |
generator | Заполняется программой, сгенерировавшей канал. | HelloWorld! 1.0 |
docs | Ссылка на страницу с документацией по формату, который используется в этом RSS файле. Если инопланетяне получат RSS файл, они всегда смогут его прочитать, ознакомившись со спецификацией по указанному здесь адресу. | |
cloud | Указывает веб-сервис, поддерживающий интерфейс rssCloud, отвечающий за уведомления об изменениях в канале. | |
ttl | Этот элемент поддерживается для совместимости, ранее он был предназначен для указания времени в минутах, в течение которого этот канал допустимо кэшировать. | 60 |
image |
Путь к изображению в формате GIF, JPEG или PNG, отображаемому в заголовке канала.
Дочерние узлы: <url> - URL изображения. <title> - описание изображения, используется в атрибуте ALT HTML-тега IMG, если агрегатор конвертирует канал в HTML. <link> - cсылка на Ваш сайт. Ссылка должна вести на главную страницу вашего сайта. Или, как максимум, на соответствующий каналу раздел. Элементы title и link лучше всего делать копией этих же элементов, указанных в channel. <description> - описание картинки. Используется в элементе TITLE HTML-тега IMG. <width> - ширина картинки в пикселях. Максимально допустимое значение - 400, по умолчанию - 88. <height> - высота картинки в пикселях. Максимально допустимое значение - 144, по умолчанию - 31. |
|
rating | Рейтинг канала. | |
textInput |
Определяет строку ввода для пользователя. Дочерние узлы:
<title> - надпись на кнопке. <description> - разъяснение того, что требуется ввести в поле. <name> - атрибут name для HTML-тега INPUT. <link> - адрес скрипта, которому будут переданы данные. Назначение этого элемента туманно. Вы можете использовать его, например, для ввода пользователем поискового запроса, либо для организации обратной связи, однако, большинство агрегаторов этот элемент игнорируют. |
|
skipHours | Может содержать до 24-х элементов <hour>. Они указывают агрегатору, в какие часы можно не обновлять канал, а брать его из кэша. Значения элементов должны быть в диапазоне 0..23. |
<hour>0</hour>
<hour>1</hour> <hour>2</hour> |
skipDays | Может содержать до 7 элементов <day>. Они указывают, в какие дни недели агрегатор может не обновлять канал. Диапазон значений: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. |
<day>Saturday</day>
<day>Sunday</day> |
Item | Канал может содержать несколько элементов <item>. <item> может содержать статью, целиком, в таком случае дочерний элемент link не заполняется. Item может содержать только заголовок статьи, а ссылка будет вести на полный текст. Любая комбинация допустима. Все дочерние элементы item необязательны, однако хотя бы 1 элемент (либо title, либо description) должен присутствовать. |
Item
Элемент | Описание | Пример |
title | Заголовок статьи. | С добрым утром, страна! |
link | Ссылка на полный текст статьи. | |
description | Полный текст статьи, либо аннотация. | |
author | Адрес электронной почты автора статьи. | |
category | То же самое, что и category в channel. | |
comments | Ссылка на страницу с комментариями к статье. | |
enclosure | Вложение. К статье можно присоединить любой файл, ссылка на него будет отображена агрегатором. | |
guid | Уникальная строка, однозначно идентифицирующая статью в рамках данного канала. Особых требований нет, однако, стало традицией использовать полный интернет адрес, по которому доступен оргинал статьи. Установка атрибута isPermaLink в true, будет означать, что именно такой идентификатор и используется. | |
pubDate | Дата публикации статьи. Некоторые агрегаторы не будут отображать статью, если указанная дата еще не настала. Но далеко не все. | Sun, 19 May 2002 15:21:36 GMT |
source | Для каждого <item> cодержит адрес канала и копию его атрибута title. |
Разбираемся в технологии RSS и пишем свою новостную ленту.
На верхнем уровне любого RSS-документа находится элемент <rss>, который содержит обязательный атрибут version, указывающий на версию документа. В этой статье я буду описывать версию 2.0 и поэтому атрибут version должен иметь соответствующее значение.
Уровнем ниже от <rss> лежит элемент <channel>, который встречается однажды и содержит всю основную информацию об RSS-канале и о его содержимом.
Элемент <channel> обязательно имеет в себе троих потомков: title – заголовок блога, link – ссылка на соответствующий ленте web-ресурс и description – описание ленты.
Внутри этого элемента может присутствовать еще куча тэгов, однако основной интерес для нас будут представлять элементы <item>, в которых будет находится информация о публикациях. Внутри <item> может содержаться большое число элементов: title, link, description, category, comments, enclosure, guid, pubDate и source. Назначение каждого из этих полей, в общем-то, ясно из названий, однако, чтобы тебе было понятнее, я просто приведу пример небольшого RSS-документа:
<?xml version="1.0" encoding="windows-1251" ?>
<rss version="2.0">
<channel>
<title>Мои крутые новости</title>
<description>Офигенные новости из жизни заводчика уругвайских тушканов.</description>
<image>
<title>Мои крутые новости</title>
</image>
<lastBuildDate>10 Mar 2005 15:25:46 +0300</lastBuildDate>
<item>
<title>У тушкана Кики родилась двойня!</title>
<description>Сегодня в пять часов утра у Кики родилась прекрасная двойня – мальчик и девочка. Вес новорожденных составляет, соответственно, 120 и 95 граммов.</description>
<pubDate>09 Mar 2005 20:10:09 +0300</pubDate>
</item>
</channel>
</rss>
Вот такой вот формат. Обрати внимание, элемент <image> позволяет указать соответствующую твоему каналу картинку. Что касается остальных неизвестных тебе тэгов, то знай, что <pubDate> определяет время публикации, а <guid> - уникальный идентификатор записи, например, соответствующий ей web-адрес.
И что здесь красивого?
Ты, наверное, еще не совсем осознал тот факт, чем же все это так здорово. Абсолютно согласен с тобой: просматривать новости, разглядывая теги xml-документа не самое романтичное занятие. Однако пойми простую вещь: перед просмотром лента должна быть сформатирована, то есть ее xml-представление служит лишь источником необходимой информации, а оформление определяется клиентским приложением, при помощи которого пользователь просматривает твою ленту. На самом деле, написать такое приложение совсем даже не сложно, однако в настоящий момент уже создано достаточное количество функциональных программ, которые оформляются как в виде отдельных приложений, так и в форме плагинов к уже существующим продуктам.
Все просто. В базе данных mySQL есть таблица rssblog, которая имеет следующую структуру:
CREATE TABLE rssblog (pid int not null primary key auto_increment, pubDate date, title text, descr text);
Соответственно, в этой табличке хранятся посты, которые нам надо выводить в RSS-ленту. Написать скрипт, который будет добавлять новости в таблицу – это элементарно и мы с тобой это уже не раз проворачивали. Так что я сегодня более подробно расскажу об экспорте данных.
Собственно, все очень просто. Скачала элементарным запросом мы выбираем десять последних записей, сортируя их по времени публикации, а затем в цикле по всем возвращенным строкам начинаем строить RSS-документ, жестко следуя описанному формату. В результате несложно получить примерно такую вот функцию:
function BuildRss($title, $link, $desc) {
$re=mysql_query(“select * from rssblog order by pid desc limit 100”);
echo “<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\n”;
echo “<rss version=\"2.0\">
<channel>
<title>$title</title> # Заголовок ленты
<link>$link</link> # Ссылка на сайт
<description>$desc</description>”; # Описание ленты
while($res=mysql_fetch_array($re)) { # Цикл по всем нужным записям в таблице
echo “
<item> # Новый пост
<title>$res[title]</title> # Заголовок
<link>$res[link]</link> # Ссылка
<description>$res[descк]</description> # Описание
<pubDate>$res[pubDate]</pubDate> # Дата публикации
<guid>$link/content.php?pid=$$res[pid]</guid> # Идентификатор
</item>”;
}
echo “</channel>
</rss>”;
}
Теперь если сохранить эту процедуру в php-скрипте и выполнить ее на сервере, клиенту вернется RSS-документ, который удобнее всего просматривать при помощи специальной программы вроде ActiveRefresh. На скрине можно видеть, каким образом отображаются новости в клиентском софте, да и сам можешь легко это попробовать: адрес ленты
Создать RSS-ленту ничуть не сложнее, чем сформировать, скажем, html-таблицу: нужно лишь знать грамматику языка, а расположить в нужной последовательности тэги – это совсем не сложно.
Как написать своего RSS-клиента?
В самом деле, как сделать свой собственный RSS-клиент на PHP и как он может выглядеть? Примерно так. Это обычный сценарий, который при выполнении получает с удаленного сервера актуальный RSS-документ и, обрабатывая его встроенным в PHP xml-парсером, генерирует красиво размеченный html-документ. Тут рационально добавить поддержку нескольких лент сразу и кэширование информации, чтобы не перекачивать каждый раз RSS-ленту заново. Время, в течение которого информация актуальна, можно получать из параметров RSS-блога: оно обычно указывается в элементе <ttl>.
Применение XSLT для форматирования XML-документов
[что такое XSLT?]
Прежде всего, для чего нам может понадобиться XSLT и что это такое? Слушая рассказы об XML, у тебя, наверное, не раз возникал вопрос: зачем все это нужно, если xml-документ никак не форматируется и пользователь, если откроет его в браузере, получит на экране просто содержимое файла со всеми тегами.По этой причине каждый документ может быть связан со специальным файлом форматирования, в котором будет четко определено его представление. В этом случае получается такая двойственность информации: сами данные хранятся в одном файле, а то, как эти данные будут показаны пользователю, указывается в другом. Собственно, язык, который определяет форматирование XML-документов, и называется XSL (Extensible Style Language), а само преобразование документа к его конкретному представлению образует еще одну аббревиатуру - XSLT (XSL Transformations).
Для чего это может использоваться? Приведу пару простых примеров, которые покажут, насколько универсальна эта технология.
Предположим есть сайт, где ты время от времени размещаешь какие-то свои статьи, новости из жизни, фотографии и т.д. Но вот тебе в определенный момент захотелось сменить дизайн сайта и ты понял, что сделать это не так-то и легко. Но с использованием XML не нужно никаких громоздких систем! Весь сайт можно довольно легко представить в виде XML-документа, со своими собственными тегами, задающими структуру проекта. В этом случае получается, что сайт логически разбит на кирпичики и довольно здорово структурирован. Но, конечно, показывать такой документ пользователю – плохая идея, поэтому надо будет создать файл XSLT-форматирования, в котором будет указано, в каком виде данные будут отображаться на экране пользователя. XML-документ здесь играет роль своеобразного буфера между непосредственным источником информации и ее графическим представлением. Ну и конечно изменить дизайн системы станет чрезвычайно просто, для этого не потребуется менять ни строчки php-кода - вся разметка наконец-то будет на 100% отделена от управляющих скриптов.
Так же тебе следует знать, что многие серверы баз данных уже умеют выводить результаты запросов прямо в формате XML и не за горами тот момент, когда генерация XML-моделей динамических страниц будет осуществляться еще на стадии выполнения запросов к базе данных.
[как это использовать?]
Файл преобразований XSLT – это, по сути своей, обычный XML-файл, имеющий строго определенный в спецификации формата вид. Этот файл подключается к XML-страницам при помощи следующего тэга:
<?xml-stylesheet type='text/xsl' href='design.xsl'?>
Чтобы тебе было понятнее, приведу пример простого xml-файла с данными и файла XSLT-преобразований.
XML-файл с подключенным файлом преобразований
<?xml version="1.0" encoding="windows-1251" ?>
<?xml-stylesheet type='text/xsl' href='xsl.xsl'?>
<xa number="77 (май)">
<vzlom caption="Взлом">
<article>
<title>HackFaq</title>
<comment>Хак-фак</comment>
<author>Sidex</author>
</article>
...
...
</vzlom>
</xa>
Обрати внимание, на второй строчке этого документа указано, что для форматирования должен быть применен XSL-файл article.xls.
[форматируем данные]
Каждый файл с XSL-преобразованиями начинается с элемента xsl:stylesheet, в параметрах которого указывается версия (version='1.0') и статичная ссылка на пространство имен. Эта строка, вообще говоря, одинаковая для всех файлов преобразований.
После главной строки в моем примере идет элемент xsl:template, указывающий шаблон элементов, для которых будет применены правила преобразований. Здесь можно указать тип элемента, его конкретное название, или довольно гибко определить целый класс подходящих под шаблон элементов. Я не буду приводить здесь полного описания шаблонов, ты найдешь его на нашем диске среди большого числа полезных документов, которые тебе настоятельно советую изучить.
Третьей строчкой файла преобразований я вывожу в пределах тега h1 содержимое атрибута элемента с именем xa. Тут следует пояснить, что мы работаем в рамках шаблона, указывающего на корневой элемент (он обозначается символом “/”) и поэтому элемент xa – наш прямой потомок. Легко понять, что доступ к атрибутам какого-то элемента осуществляется при помощи конструкции element/@var.
На пятой строке XSL-файла я вывожу тэг table, поскольку мне захотелось оформить файл в виде таблицы. Затем, при помощи элемента xsl:for-each, я организую своеобразный цикл по всем записям со статьями и вывожу информацию о них, форматируя в колонки таблицы при помощи тэгов <tr> и <td>. Обрати внимание, что в рамках цикла содержимое элементов получается так же, как и в обычном случае - при помощи элемента xsl:value-of.
[обработка на стороне сервера]
Как легко догадаться, все, что я говорил выше, подразумевает обработку и форматирование документа на стороне клиента. То есть сам клиентский парсер XML, поставляемый вместе с операционной системой, выполняет всю работу по форматированию документа. Однако не всегда это доступно и удобно.
Представь, что ты получаешь XML-данные внутри своего скрипта и тебе надо отформатировать их и вставить полученный html-код в генерируемую страницу. Разумеется, в этом случае использовать клиентский парсер не получится. Как же быть? Ну, разумеется, крутые парни из команды php-девелоперов все уже сделали до нас!
Начиная с версии 4.0.3 доступна функция xslt_process, которая производит трансформацию XML-данных в html-разметку по XSLT-правилам. Пользоваться ей чрезвычайно просто:
Использование xslt_process
<?php
$arguments = array(
'/_xml' => $xml,
'/_xsl' => $xsl
);
$xh = xslt_create();
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if ($result) {
echo "Результат преобразования:<pre> $result </pre>\n";
}
xslt_free($xh);
?>
[свой RSS-клиент]
Задача на самом деле элементарная и сводится к следующему. Hеобходимо при помощи функции fopen() получить содержимое rss-ленты в специальный буфер, а затем, при помощи функции xslt_process применить к этим данным XSLT-преобразование, чтобы получить на выходе готовую html-страницу. Oсновная сложность здесь заключается как раз в том, чтобы разработать XSL-файл. Вообще говоря, RSS – довольно изощренный формат и реализовать его полную поддержку не так легко. Однако сделать поддержку самых популярных тегов ты сможешь очень быстро, даже действуя просто по аналогии с разобранным выше примером.
seo & website usability | inet | os faq | hardware faq | memory | video | cpu | hdd | mainboard faq | printer & scaner | modem | mobiles | hackzone |
Windows 10 | Registry Windows 10 | Windows7: Общие настройки | Windows7: Реестр | Windows7: Реестр faq | Windows7: Настроки сети | Windows7: Безопасность | Windows7: Брандмауэр | Windows7: Режим совместимости | Windows7: Пароль администратора | Память | SDRAM | DDR2 | DDR3 | Quad Band Memory (QBM) | SRAM | FeRAM | Словарь терминов | Video | nVIDIA faq | ATI faq | Интегрированное видео faq | TV tuners faq | Терминология | Форматы графических файлов | Работа с цифровым видео(faq) | Кодеки faq | DVD faq | DigitalVideo faq | Video faq (Архив) | CPU | HDD & Flash faq | Как уберечь винчестер | HDD faq | Cable faq | SCSI адаптеры & faq | SSD | Mainboard faq | Printer & Scaner | Благотворительность
|
На главную | Cookie policy | Sitemap