ATOM 1.0 лента на PHP 5

Источник: webmagazine

Данный формат появился в июле 2003 года как альтернатива RSS каналам. Сначала проект назывался Echo, но затем возникли проблемы с товарным знаком и проект был переименован в Atom. Atom - это основанный на XML формат, предназначенный для агрегирования информации в первую очередь с веб-сайтов. Он создавался для использования в блогах, однако может применяться и для любых других новостных и периодических изданий в web. Существенной частью спецификации является протокол, работающий поверх HTTP, предназначенный для автоматизации ведения блога. Мы будем рассматривать версию 1.0 ставшую стандартом W3C в 2005 году.

Пример формата Atom 1.0

По своей сути Atom так же как и RSS напоминает обычный XML файл:

  <?xml version="1.0" encoding="windows-1251"?>

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru-RU">

<title>My News</title>

<subtitle type="text">News from my family.</subtitle>

<generator>Weblog Editor 2.0</generator>

<link rel="alternate" type="text/html" href="http://mysite.com/" />

<link rel="self" type="application/atom+xml" href="http://mysite.com/atomfeed.php" />

<id>http://mysite.com/</id>

<updated>2007-11-21T15:24:28-03:00</updated>

<author>

<name>Your name</name>

<email>webmaster@mysite.com</email>

</author>

<entry>

<title>My birthday</title>

<link rel="alternate" type="text/html" href="http://mysite.com/blog/2007/mybirtday.php" />

<id>http://mysite.com/blog/2007/mybirtday.php</id>

<content type="xhtml">

<div xmlns="http://www.w3.org/1999/xhtml">

I celebrate my birthday today!

</div>

</content>

<updated>2007-07-05T14:33:30-03:00</updated>

<published>2007-07-05T14:33:30-03:00</published>

</entry>

<entry>

<title>My new PC</title>

<link rel="alternate" type="text/html" href="http://mysite.com/blog/2007/mynewpc.php" />

<id>http://mysite.com/blog/2007/mynewpc.php</id>

<content type="xhtml">

<div xmlns="http://www.w3.org/1999/xhtml">

I want to buy new PC.

</div>

</content>

<updated>2007-04-10T14:32:34-03:00</updated>

<published>2007-04-10T14:32:34-03:00</published>

</entry>

</feed>

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

Реализация на PHP 5

Как и в статье про RSS, Я не стал городить классы и шаблоны, а сделал все достаточно прямолинейно:

<?php

// Задаем формат даты (московское время)

define('DATE_FORMAT_RFC3339','Y-m-d\\TH:i:s-03:00');

// Сообщяем браузеру что передаем XML

header("Content-type: text/xml; charset=windows-1251");

// Дата последней сборки фида

$lastBuildDate=date(DATE_FORMAT_RFC3339);

echo <<<END

<?xml version="1.0" encoding="windows-1251"?>

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru-RU">

<title>mysite.com AtomFeed</title>

<subtitle type="text">Мой супер блог</subtitle>

<generator>Weblog Editor 2.0</generator>

<link rel="alternate" type="text/html" href="http://mysite.com/" />

<link rel="self" type="application/atom+xml" href="http://mysite.com/atomfeed.php" />

<id>http://mysite.com/</id>

<updated>$lastBuildDate</updated>

<author>

<name>Mihail</name>

<email>editor@mysite.com</email>

</author>

END;

// В этом файле надо разместить подключение к базе данных

include_once("config.php");

// Модифицируйте запрос под вашу таблицу

$query = "SELECT name, anon, url, UNIX_TIMESTAMP(date) as pubdate

FROM news

WHERE visible=1

ORDER by date desc

LIMIT 0,10";

$res   = mysql_query($query);

while ($row=mysql_fetch_array($res)) {

// Убираем из тайтла html теги и лишние пробелы

$title   = strip_tags(trim($row['name']));

// С аноносом можно не проводить такие

// манипуляции, т.к. мы обьявим для него тип xhtml

$anon    = $row['annonce'];

$url     = $row['uri'];

$pubDate = date(DATE_FORMAT_RFC3339, $row['pubdate']);

echo <<<END

<entry>>

<title>$title</title>

<link rel="alternate" type="text/html" href="http://mysite.com/news/$url" />

<id>http://mysite.com/news/$url</id>

<content type="xhtml">

<div xmlns="http://www.w3.org/1999/xhtml">$anon</div>

</content>

<updated>$pubDate</updated>

<published>$pubDate</published>

</entry>

END;

}

echo "</feed>";

?>

Как видите ничего сложного, теперь можно назвать полученный файл atomfeed.php и и сделать ссылочку на сайте как у нас. Кстати проверить ленту на валидность можно с помощью замечательного сервиса FEED Validator.


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