RSS (really simple syndication) был разработан фирмой netscape и представляет собой расширение xml созданное специально для оформления новостных лент.
На сегодняшний день формат пережил уже 2-ю редакцию и является общепринятым стандартом для разметки новостей.
Два общих блока (channel и image), применяемых к целому документу и блок(и) item, содержащий сами новости.
Блок channel определяет источник новостей:
title — имя сайта;
description — описание;
link — адрес
Блок image — графическое отображение сайта:
title — название;
link — адрес картинки;
width, height — ширина и высота.
Блоков item может быть сколько угодно и в них описываются сами новости:
title — заголовок;
link — адрес самой новости;
description — описание.
Всё, что находится выше тэга rss называется заголовком документа и применяется к любому xml документу, конечно же с соответствующими корректировками.
Теперь, после того, как мы научились создавать rss документ, давайте подумаем, что нам со всем этим добром делать.
Первая, и самая лёгкая идея, это, конечно же, ничего с ним не делать, просто создать процедурину автоматической генерации rss из любой публикуемой новости и забыть о нём. Дескать, пускай те, кому это нужно, сами парсят его.
Но, предположим, что у нас есть некоторый ресурс, на котором мы хотим публиковать новости всем известного сайта www.ionpopescu.md, а господин popescu ни в какую не хочет предоставлять их (новости), в каком либо другом формате кроме как в rss.
Что нам остаётся?
Правильно! Будем парсить.
Здесь, опять же, есть два выхода: первый — воспользоваться всеми известными парсерами xml типа sablotron и не морочить себе голову, второй — морочить.
У второго варианта есть и ещё одно оправдание, представьте что вы пользуетесь каким-нибудь бесплатным хостингом, и хостер ну ни в какую не хочет устанавливать у себя sablotron или его аналоги.
----------------------------------------------------
И сам скрипт:
<?php
function startelement($parser, $name, $attrs) {
global $tag, $rss;
if ($name == 'rss')
$rss = '^rss';
elseif ($name == 'rdf:rdf')
$rss = '^rdf:rdf';
$tag .= '^' . $name;
}
function endelement($parser, $name) {
global $tag;
global $itemcount, $items;
if ($name == 'item') {
$itemcount++;
if (!isset($items[$itemcount])) $items[$itemcount] = array('title' => '', 'link' => '', 'desc' => '', 'pubdate' => '');
}
$tag = substr($tag, 0, strrpos($tag, '^'));
}
function characterdata($parser, $data) {
global $tag, $chantitle, $chanlink, $chandesc, $rss, $imgtitle, $imglink, $imgurl;
global $items, $itemcount;