Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Реализация синдикации новостей с использованием RSS и Atom

Практический справочник по использованию RSS 2.0 и Atom 1.0 для синдикации содержимого

Йинг Йинг Лин, инженер-программист, Dong Hua University, Шанхай, Китай
Фотография Йинг Йинг Лин
Йинг Йинг Лин (Ying Ying Lin) - аспирант Dong Hua University, а также интерн IBM China's Globalization Lab в Shanghai. Она интересуется Java-технологиями и приложениями для автоматизации рабочих процессов. Вы можете связаться с ней по адресу queenielyy@yahoo.com.cn.

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

Дата:  26.09.2006
Уровень сложности:  средний
Активность:  3257 просмотров
Комментарии:  


Если у вас есть базовые знания синдикации содержимого и спецификации формата RSS 2.0, а также спецификации формата Atom 1.0, значит вы готовы реализовать систему синдикации новостей, используя любую из спецификаций (либо обе), а данная статья предназначена быть для вас практическим справочником.

Синдикация RSS и Atom

RSS и Atom аналогичны форматам XML-документов, которые описывают списки родственной информации, известные под названием фиды (feed). Фиды состоят из нескольких элементов, каждый с расширяемым набором присоединенных метаданных; например, каждый элемент имеет заголовок. Основным назначением фидов является синдикация Web-содержимого, например, Web-блогов или заголовков новостей, на Web-сайты и непосредственно в пользовательские агенты.

Два примера RSS 2.0 и Atom 1.0


Листинг 1. Пример фида RSS 2.0
				
        <?xml version="1.0"?>
        <rss version="2.0">
          
        <channel>
           <title>Feed Title</title>
           <link>http://yourwebsite.com/</link>
           <description>Feed Description</description>
           <language>en-us</language>
           <pubDate>Mon, 03 Jan 2005 12:00:00 GMT</pubDate>
            
        <item>
           <title>Article Title</title>
           <link>http://yourwebsite.com/articlelink.html</link>
           <description>Your content included here.</description>
        </item>
        <item>
           <title>Sports</title>
           <link>http://yourwebsite.com/sportslink.html</link>
           <description>Your content included here.</description>
        </item>
            
        </channel>
        </rss>
        


Листинг 2. Пример фида Atom 1.0
				
        <?xml version="1.0" encoding="utf-8"?>
        <feed xmlns="http://www.w3.org/2005/Atom">

          <title> Feed Title </title> 
          <link href=" http://yourwebsite.com/"/>
          <updated>2003-12-13T18:30:02Z</updated>
          <author> 
            <name>Your Name</name>
          </author> 
          <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>

          <entry>
            <title>Article Title</title>
            <link href=" http://yourwebsite.com/articlelink.html "/>
            <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
            <updated>2003-12-13T18:30:02Z</updated>
            <summary>Some text.</summary>
          </entry>
          <entry>
            <title>Sports</title>
            <link href=" http://yourwebsite.com/sportslink.html "/>
            <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344e45ab90</id>
            <updated>2003-12-14T13:30:55Z</updated>
            <summary>Some text.</summary>
          </entry>

        </feed>

        

Сходные черты фидов RSS и Atom

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

Каждый фид, фактически, представляет канал. Он имеет заголовок канала, ссылку, описание, автора и т.д. Информация о канале предоставляет базовую информацию о фиде. За информацией о канале следует несколько элементов (item). Каждый элемент представляет собой реальный фрагмент новостей или статей, который вы можете прочитать в программе чтения фидов. Обычно элемент содержит заголовок, ссылку, дату обновления и итоговую информацию.

Отличия фидов RSS и Atom

Используя в качестве справочника "RSS 2.0 и Atom 1.0, сравнение", рассмотрим различия между RSS и Atom.


Таблица 1. Сравнение RSS 2.0 и Atom 1.0
ОтличиеRSS 2.0Atom 1.0
РазвертываниеRSS 2.0 широко используется.Atom 1.0 не распространен.
СпецификацияHarvard имеет авторские права и заморозил спецификацию RSS 2.0.Atompub Working Group (в IETF) согласовала спецификацию Atom 1.0, и она может быть пересмотрена а будущем.
Требуемое содержимоеRSS 2.0 требует наличия заголовка уровня фида, ссылку и описание. Наличие в фиде каких-либо индивидуальных полей элементов не требуется.Atom 1.0 содержит заголовок (который может быть пустым), уникальный идентификатор и временную метку последнего обновления для фидов и записей.
Рабочая нагрузкаRSS 2.0 может содержать неформатированный текст или выделенный (escaped) HTML, но вы не можете указать, какой из них двух предоставляется.Atom 1.0 содержит контейнер рабочей нагрузки.
Полное или частичное содержимоеRSS 2.0 имеет элемент <description>, который может содержать полный текст или краткий обзор. Не существует встроенного способа указать, предоставляется ли содержимое полностью.Atom 1.0 предлагает отдельные элементы <summary> и <content>. Элемент summary используется для удобства, если содержимое представлено в не текстовом формате или не локализовано.
Автоматическое обнаружениеАвтоматическое обнаружение в RSS 2.0 реализовано разными способами. Atom 1.0 стандартизирует автоматическое обнаружение.
Извлечение и агрегированиеRSS 2.0 имеет только одну распознаваемую форму: документ <rss>.Atom 1.0 позволяет использование автономных документов Atom Entry, которые могут быть переданы при помощи сетевых протоколов, например, XMPP. Atom поддерживает также агрегированные фиды, в которых записи указывают на фид, из которого они были получены, если они будут включаться в другие фиды.

Общая архитектура системы публикации RSS и Atom

Развиваясь и совершенствуясь, спецификации форматов RSS и Atom все больше и больше реализуются в Web-приложениях. Наиболее популярными и типичными реализациями RSS или Atom являются системы публикации новостей.

Вот общая архитектура для реализации системы публикации, использующей фиды RSS и ATOM. Эта архитектура состоит из трех частей:

  • Подсистема генерирования фида.
  • Подсистема функционирования фида.
  • Подсистема автоматической публикации.

Теперь подробно рассмотрим эти три подсистемы по отдельности.

Генератор фида

Генератор фида занимается генерированием XML-файлов фидов. Диаграмма классов генератора фида показана ниже.


Рисунок 1. Диаграмма классов генератора фида
Рисунок 1. Диаграмма классов генератора фида

Ядром генератора фида является класс FeedFileManager. Он генерирует XML-файл, относящийся к конкретному фиду. Фид имеет два специфических типа: AtomFeed и RssFeed. Оба класса фидов содержат класс канала (channel) фида и класс элемента (item) фида. Реализации этих классов будут отличаться из-за различий в их конструкциях.

Подсистема функционирования фида

Подсистема функционирования фида обеспечивает функции для работы с этими двумя типами файлов фидов. Например, функции insertItem(), deleteItem(), updateItem(). Диаграмма классов подсистемы функционирования фида выглядит следующим образом:


Рисунок 2. Диаграмма классов подсистемы функционирования фида
Рисунок 2. Диаграмма классов подсистемы функционирования фида

Во-первых, вам нужен абстрактный шаблон PublisherFactory для генерирования одного из двух издателей (publisher) фида. Затем издатель извлекает данные из базы данных через класс DataCollection.

Подсистема автоматической публикации

Подсистема автоматической публикации - это таймер для обновления файлов фидов в заданное время. Это реальная часть использования двух предыдущих подсистем; она обеспечивает работу системы публикации.


Рисунок 3. Диаграмма классов подсистемы автоматической публикации
Рисунок 3. Диаграмма классов подсистемы автоматической публикации

Пошаговая реализация автоматического генерирования фидов RSS и ATOM

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


Рисунок 4. Обзор процедуры реализации
Рисунок 4. Обзор процедуры реализации

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

Таймер

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

В данной системе публикации более традиционным является формирование запланированного рекуррентного задания. Дополнительная информация по формированию запланированного рекуррентного задания приведена в статье "Планирование рекуррентных заданий в Java-приложениях".


Листинг 3. Пример метода Timer start
				
           public void start() {
               SchedulerTask st = new SchedulerTask(){
               public void run() {
	       try {
	           updateNewsFeeds(); //конкретный метод обновления файлов фидов.
                   updateBooksFeeds();
                    ... 
		   } catch (Exception e) {
		       e.printStackTrace();
			}
		  }
		};

        

Генерирование основанных на XML файлов фидов

Оба фида (RSS и ATOM) основаны на XML, поэтому важно сгенерировать эти XML-файлы во время процедуры реализации. Отвечает за эту работу в подсистеме генерирования фида класс FeedFileManager.


Рисунок 5. Класс FeedFileManager
Рисунок 5. Класс FeedFileManager

Обычно, этот класс должен содержать метод createFeedFile(). Для этого метода необходимо сделать три вещи:

  • Создать XML-файл. Вы можете создать статический метод createXMLFile() для достижения этой цели.
  • Взаимодействовать с "Подсистемой функционирования фида" для создания информации о связанном канале и элементе.
  • Записать всю эту информацию обратно в XML-файл.

Листинг 4. Пример метода createFeedFile
				
	public String createFeedFile(String channelid, String name, String type)
			throws Exception {
                ...
		createXMLFile(file, type);

		IPublishable publisher = PublisherFactory.createPublisher(type, file);
		Feed feed = getFeed(type);

		Channel channel = feed.getChannel();
		ArrayList itemlist = feed.getItemList();
		
		publisher.insertChannel(channel);
		publisher.insertItemList(itemlist);
		publisher.writeback(file);

		return file;
	}
        

Формирование фидов RSS/Atom

В завершающей процедуре фабрика публикации создает издателя и вставляет связанную информацию о channel и itemlist в определенный фид.


Листинг 5. Пример кода для вставки channel и itemlist
				
		publisher.insertChannel(channel);
		publisher.insertItemList(itemlist);
        

Для формирования соответствующих channel и itemlist извлеките данные из базы данных и вставьте их в шаблон фида. Ниже продемонстрировано, как извлечь данные из базы данных и вставить информацию в соответствующий databean.


Листинг 6. Пример кода для фидов
				
  	...
        NewsBeanManager newsmanager = new NewsBeanManager();
        newslist = newsmanager.getAllNews(); //взаимодействие с базой данных
        ...
	for (Iterator it = newslist.iterator(); it.hasNext(); it.next()) {

		title = "News " + i + ": " + ((NewsBean) newslist.get(i)).getTitle();
		link = ((NewsBean) newslist.get(i)).getLink();
		author = ((NewsBean) newslist.get(i)).getAuthor();
		timestamp = ((NewsBean) newslist.get(i)).getPublishTime();
		id = String.valueOf(((NewsBean) newslist.get(i)).getNewsID());
		description = ((NewsBean) newslist.get(i)).getSummary();
		content = ((NewsBean) newslist.get(i)).getContent();
		rssitem = new RssItem(title, link, author, timestamp, id,
					description);
		rssitemlist.add(i, rssitem);
		atomitem = new AtomItem(title, link, author, timestamp, id,
					description, content);
		atomitemlist.add(i, atomitem); 
		i++;
		}
        


Советы по реализации

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

Реализация фидов RSS или Atom для наиболее популярных программ чтения фидов

Чтобы удовлетворить требования наиболее популярных программ чтения фидов, обратите внимание на следующие моменты при генерировании файлов фидов.

  • Добавьте информацию о версии RSS и Atom к заголовку XML-файла, как показано в листинге 7:

    Листинг 7. Пример кода добавления информации о версии RSS и Atom
    						
       <?xml version="1.0" encoding="utf-8"?>   
         <rss version="2.0">
         ...
       <?xml version="1.0" encoding="utf-8"?>   
        <atom version="1.0">
            

  • Предоставьте информацию о ссылке для канала RSS и Atom. В RSS 2.0 информация о ссылке выглядит как узел (node), но в ссылке Atom 1.0 информация выглядит как атрибут. Хорошим правилом является предоставление информации о ссылке для канальной части, хотя ссылка не является обязательным элементом для Atom (см. листинг 8).

Листинг 8. Пример кода для предоставления информации о ссылке для каналов
				
   <?xml version="1.0" encoding="utf-8" ??> 
   <rss?>
   <channel?>
      <title?>News Syndication</title?> 
      <link?>http://www.newssyndication.com</link?> 
      <description?>this is a news feed</description?> 
      ...

   <?xml version="1.0" encoding="utf-8" ??> 
   <feed xmlns="http://www.w3.org/2005/Atom"?>
      <title?>News Syndication</title> 
      <link href="http://www.newssyndication.com" /?> 
      <updated?>2006-07-06T10:26:30Z</updated?> 
      <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id?> 
        

Поддержка глобализации при генерировании XML-файлов

Добавьте информацию о кодировке (encoding) в заголовок XML-файла.


Листинг 9. Пример кода для добавления информации о кодировке в заголовок XML-файла
				
   <?xml version="1.0" encoding="utf-8"?>
        

При реализации функции записи XML-файла, используйте OutputStreamWriter вместо FileWriter для установки кодировки в utf-8. Кодировка по умолчанию для FileWriter - "GBK".


Листинг 10. Пример кода для установки кодировки в utf-8 с использованием OutputStreamWriter
				
    OutputStreamWriter writer = new OutputStreamWriter(outputstream,"utf-8");
        


В заключение

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


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

Фотография Йинг Йинг Лин

Йинг Йинг Лин (Ying Ying Lin) - аспирант Dong Hua University, а также интерн IBM China's Globalization Lab в Shanghai. Она интересуется Java-технологиями и приложениями для автоматизации рабочих процессов. Вы можете связаться с ней по адресу queenielyy@yahoo.com.cn.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML, Open source
ArticleID=170323
ArticleTitle=Реализация синдикации новостей с использованием RSS и Atom
publish-date=09262006
author1-email=queenielyy@yahoo.com.cn
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).