Статьи

Feeds 101

Ленты. RSS. Атом. Syndication. Абоненты. Вот некоторые из ключевых слов, плавающих в Интернете, которые приобрели известность на протяжении многих лет. В этом руководстве мы рассмотрим ряд вещей, в том числе, что такое фиды, зачем вам нужен фид для вашего сайта, как его настроить, а затем опубликовать.

Подача изображения

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

Проще говоря, каналы — это способ публикации часто обновляемого контента. Ваш канал представляет собой документ в формате XML, который позволяет вам обмениваться контентом с другими пользователями в Интернете. Пользователи, подписчики этого языка, могут использовать ваш канал для чтения обновленной информации на вашем сайте, если и когда она будет опубликована.

С точки зрения веб-разработчика, одной из основных причин публикации канала является удобство пользователя. Благодаря каналу, на который пользователи могут подписаться, им не нужно каждый раз проверять новый контент вручную. Они могут просто подписаться на ваш канал и получать уведомления о публикации нового контента. Никаких хлопот! Если вы боитесь, что в этом процессе вы потеряете свои рекламные доходы, вы можете с легкостью включить рекламу в фид.

Публикация фида также означает, что сторонним поставщикам контента будет проще синдицировать ваш контент, тем самым получая больше информации и трафика в процессе.

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

Подача изображения

RSS является доминирующим форматом для публикации веб-каналов и расшифровывается как Really Simple Syndication. У RSS есть несколько вариантов, каждый из которых выходит из версий RSS 1.x и RSS 2.x. Многие сервисы, в том числе WordPress, используют RSS для создания своих каналов.

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

Логотип Atom

Atom был создан для того, чтобы уменьшить многие недостатки RSS, в том числе возможность включать правильно отформатированный XML или XHTML в ваши каналы. Но так как RSS почти стал синонимом каналов, Atom всегда был гораздо более многофункциональным и гибким младшим братом.

Чтобы не усложнять ситуацию, сегодня мы будем придерживаться RSS, а не пробовать каждый формат.

Каждый канал RSS следует этому общему формату:

RSS является подмножеством XML, что означает, что мы должны убедиться, что он помечен соответствующим образом.

1
2
3
4
<?xml version=»1.0″ encoding=»utf-8″?>
<rss version=»2.0″>
..
</rss>

Первая строка — это объявление XML. Мы определяем версию так, чтобы она корректно проверялась как XML. Часть кодирования является чисто дополнительной.

Вторая строка определяет версию RSS, которую мы будем использовать сегодня. Мы собираемся использовать RSS 2 сегодня.

Каждый канал должен быть внутри канала, чтобы он входил в разметку. Пока что наш канал выглядит так.

1
2
3
4
5
6
<?xml version=»1.0″ encoding=»utf-8″?>
<rss version=»2.0″>
<channel>
..
</channel>
</rss>

Здесь вы заполняете все важные детали, такие как название канала, URL и описание сайта.

1
2
3
<title>My feed</title>
<link>http://www.somesite.com</link>
<description>Random ravings :)</description>

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

Каждый элемент в ленте должен быть заключен в элемент <item>. Элемент может быть чем угодно: новостью, обновлением статуса, новыми продуктами: чем угодно. Каждый элемент требует заголовка и соответствующей ссылки. Как и прежде, вы можете использовать несколько дополнительных элементов, включая поля описания и автора.

Пример элемента будет выглядеть так:

1
2
3
4
5
6
<item>
<title>Feeds 101</title>
 <link>http://www.net.tutsplus.com</link>
 <description>Let’s create an RSS feed from scratch!</description>
 <author>Siddharth</author>
</item>

Теперь, когда мы знаем все отдельные части файла RSS и то, как они все склеиваются, пришло время посмотреть полный файл RSS.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<?xml version=»1.0″ encoding=»utf-8″?>
<rss version=»2.0″>
<channel>
    <title>My feed</title>
   <link>http://www.somesite.com</link>
   <description>Random ravings :)</description>
   <item>
        <title>Feeds 101</title>
        <link>http://www.net.tutsplus.com</link>
        <description>Let’s create an RSS feed from scratch!</description>
        <author>[email protected]</author>
    </item>
</channel>
</rss>

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

Довольны созданием своего первого RSS-канала? Вы должны быть! Но проблема в этом заключается в том, что корма полностью статичны: нечто совершенно противоположное интуитивно по сравнению с концепцией кормов. Мы исправим это сейчас, создав простой PHP-скрипт, который собирает данные из базы данных и обновляет RSS-канал при необходимости.

Поскольку мне нравятся красивые URL-адреса, я назову этот файл index.php и поместу его в папку с именем feed, чтобы мой канал можно было найти по адресу www.mysite.com/feed.

Для простоты я собираюсь предположить, что у вас уже есть база данных, содержащая ваши статьи. Я также предполагаю, что в базе данных есть столбцы с названием title> , link , description и date в таблице с названием posts .

01
02
03
04
05
06
07
08
09
10
11
12
13
<?xml version=»1.0″ encoding=»utf-8″?>
<rss version=»2.0″>
<channel>
    <title>My feed</title>
   <link>http://www.somesite.com</link>
   <description>Random ravings :)</description>
 
 <?php
    // Code here
 ?>
 
</channel>
</rss>

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

1
2
3
4
DEFINE (‘DB_USER’, ‘some_username’);
DEFINE (‘DB_PASSWORD’, ‘some_unusually_weak_password’);
DEFINE (‘DB_HOST’, ‘localhost’);
DEFINE (‘DB_NAME’, ‘database’);

Все просто, как выглядит. Мы просто записываем кучу информации для последующего использования.

1
2
3
4
$connection = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or
die(‘Connection to the specified database couldn’t be established’);
mysql_select_db(DB_NAME) or
die (‘Specified database couldn’t be selected’);

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

1
2
$query = «SELECT * FROM posts ORDER BY date DESC»;
$result = mysql_query($query) or die («Query couldn’t be executed»);

Это на самом деле не учебник, ориентированный на SQL, и поэтому я перейду к нему. Мы просто берем все сообщения из таблицы, чтобы добавить их в канал. Больше ничего необычного там не происходит.

1
2
3
4
5
6
7
while ($row = mysql_fetch_array($result, MYSQL_ASSOC) {
echo ‘<item>
         <title>’.$row[‘title’].'</title>
         <link>’.$row[‘link’].'</link>
         <description>’.$row[‘description’].'</description>
       </item>’;
}

Мы берем каждую отдельную запись и затем печатаем ее внутри соответствующего элемента, чтобы создать список элементов. Обратите внимание, что, поскольку я хотел работать с хешем, я установил тип результата MYSQL_ASSOC.

И с этим PHP часть сделана. Полный код должен выглядеть следующим образом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
    header(«Content-Type: application/rss+xml; charset=utf-8»);
?>
 
<?xml version=»1.0″ encoding=»utf-8″?>
<rss version=»2.0″>
<channel>
   <title>My feed</title>
  <link>http://www.somesite.com</link>
  <description>Random ravings :)</description>
 
<?php
   DEFINE (‘DB_USER’, ‘some_username’);
    DEFINE (‘DB_PASSWORD’, ‘some_unusually_weak_password’);
    DEFINE (‘DB_HOST’, ‘localhost’);
    DEFINE (‘DB_NAME’, ‘database’);
 
    $connection = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or
    die(‘Connection to the specified database couldn’t be established’);
    mysql_select_db(DB_NAME) or
    die (‘Specified database couldn’t be selected’);
 
    $query = «SELECT * FROM posts ORDER BY date DESC»;
    $result = mysql_query($query) or die («Query couldn’t be executed»);
 
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC) {
       echo ‘<item>
               <title>’.$row[‘title’].'</title>
               <link>’.$row[‘link’].'</link>
               <description>’.$row[‘description’].'</description>
             </item>’;
    }
?>
 
</channel>
</rss>

Теперь вы сможете получить доступ к своему каналу по адресу www.yoursite.com/feed.

Подача изображения

Как и в xHTML, RSS / XML должен быть правильно сформирован и без ошибок. Есть ряд валидаторов, которые помогут вам в этом. Вот некоторые из моих часто используемых.

Поскольку RSS может обрабатывать только экранированный HTML, убедитесь, что вы используете & lt; л; для соответственно. Также убедитесь, что вы заменяете специальные символы на соответствующие им коды HTML. Если вы забудете это сделать, это может привести к неправильной разметке и нарушению подачи.

Подача изображения

Теперь, когда мы создали канал и убедились, что он проверяется, мы можем его опубликовать. Вы можете использовать такой сервис, как Feedburner, чтобы управлять своими каналами. Это позволяет собирать много информации, включая количество подписчиков. Или вы можете выбрать более легкий путь и просто дать ссылку на ваш канал на своем сайте.

Вы когда-нибудь замечали, что значок канала в вашем браузере загорается только для определенных страниц? Это означает, что браузер был уведомлен о том, что канал текущей страницы доступен для подписки. Чтобы браузер пользователя автоматически определял присутствие канала, необходимо добавить этот небольшой фрагмент в раздел заголовка вашей страницы:

1
2
<link rel=»alternate» type=»application/rss+xml» title=»Article RSS Feed»
href=»http://www.yoursite.com/feed» />

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

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

Вопросов? Хорошие вещи, чтобы сказать? Критицизмы? Нажмите на раздел комментариев и оставьте мне комментарий. Удачного кодирования!

  • Подпишитесь на нас в Твиттере или подпишитесь на ленту Nettuts + RSS для получения лучших учебных материалов по веб-разработке.