atom rss что это

просто блог

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

Что это такое?

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

RSS или Atom?

Как мы уже говорили, оба приложения похожи и выполняют одни и те же функции. Большинство людей выбирают RSS, несмотря на очевидные преимущества технологии Atom. Почему же так происходит, и что лучше выбрать?

Заключение

Опубликованный 12 июля релиз Atom 1.0 — отличный повод для того, чтобы пересмотреть свое отношение к RSS в сторону подписки по Atom. К тому же RSS2.0 стала финальной версией RSS, что означает, что в будущем все версии стандарта будут выходить уже под другим названием.

Источник

Каналы RSS и Atom

Важные API

Получайте или создавайте самое свежее и популярное веб-содержимое с помощью сводных веб-каналов, созданных по стандартам RSS и Atom с помощью компонентов в пространстве имен Windows.Web.Syndication.

Что такое веб-канал?

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

Какие версии форматов веб-каналов поддерживаются?

Универсальная платформа Windows (UWP) поддерживает извлечение веб-каналов формата RSS версий 0.91–2.0 и формата Atom версий 0.3–1.0. Классы в пространстве имен Windows.Web.Syndication могут определять веб-каналы и их элементы, способные представлять элементы RSS и Atom.

Кроме того, в форматах Atom 1.0 и RSS 2.0 документы веб-каналов могут содержать элементы или атрибуты, не определенные в официальных спецификациях. Со временем эти особые элементы стали способом определения информации домена, потребляемой другими форматами данных веб-служб, например GData и OData. Чтобы обеспечить поддержку нового компонента, класс SyndicationNode представляет универсальные XML-элементы. Использование SyndicationNode с классами в пространстве имен Windows.Data.Xml.Dom позволяет приложениям получать доступ к атрибутам, расширениям и любому содержимому, которое они могут включать.

Обратите внимание, что для публикации сводного содержимого реализация протокола Atom Publication (Windows.Web.AtomPub) платформы UWP поддерживает только операции с содержимым веб-каналов согласно стандартам Atom и Atom Publication.

Использование сводного содержимого вместе с сетевой изоляцией

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

Сетевая изоляция позволяет разработчику определить для каждого приложения область необходимого доступа к сети. Приложению без соответствующей определенной области запрещен доступ к отдельному типу сети и к отдельному типу сетевых запросов (только исходящим запросам, инициированным клиентом, или им же в сочетании с входящими нежелательными запросами). Возможность настраивать и применять сетевую изоляцию гарантирует, что даже в случае компрометации приложения оно сможет получить доступ только к тем сетям, к которым доступ ему предоставлен явно. Таким образом значительно сокращается область воздействия на другие приложения и Windows.

Сетевая изоляция влияет на все элементы класса в пространствах имен Windows.Web.Syndication и Windows.Web.AtomPub, которые пытаются получить доступ к сети. Сетевая изоляция активно используется в Windows. Вызов элемента класса в пространстве имен Windows.Web.Syndication или Windows.Web.AtomPub, обеспечивающем доступ к сети, может быть не выполнен из-за сетевой изоляции, если соответствующая возможность работы с сетью не была включена.

Возможности сети для приложения настраиваются в его манифесте при сборке. Они обычно добавляются с помощью Microsoft Visual Studio 2015 в ходе разработки приложения. Возможности сети можно также задать вручную в файле манифеста приложения, используя текстовый редактор.

Дополнительные сведения о сетевой изоляции и сетевых возможностях см. в разделе «Возможности» темы Основы работы с сетями.

Доступ к веб-каналу

В этом разделе объясняется, как извлечь и отобразить веб-канал с помощью классов в пространстве имен Windows.Web.Syndication в приложении UWP, написанном на языке C# или Javascript.

Предварительные условия

Получение сводного содержимого из веб-канала

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

Конструктор Uri создает исключение, если параметр uriString, переданный конструктору, не является допустимым URI. Поэтому проверяем uriString при помощи блока Try/Catch.

Теперь настроим запрос путем установки всех необходимых учетных данных сервера (свойство ServerCredential), учетных данных прокси-сервера (свойство ProxyCredential) и заголовков HTTP (метод SetRequestHeader). После настройки основных параметров запроса получаем допустимый объект Uri, созданный с помощью предоставляемой приложением строки URI канала. Затем объект Uri передается в функцию RetrieveFeedAsync для запроса канала.

Допустим, было возвращено нужное содержимое канала. В этом случае код из примера перебирает каждый элемент канала, вызывая displayCurrentItem (который мы определим позже), чтобы отобразить элементы и их содержимое в виде списка с помощью пользовательского интерфейса.

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

Читайте также:  суд вызывает вас в качестве привлекаемого лица что это значит

Метод RetrieveFeedAsync создает исключение, если не удается установить подключение к HTTP-серверу или объект Uri не указывает на действительный AtomPub или RSS-канал. В примере кода Javascript используется функция onError для захвата любых исключений и вывода подробной информации об исключении при ошибке.

В предыдущем шаге метод RetrieveFeedAsync вернул запрошенное содержимое канала, а код примера перебрал все доступные элементы канала. Каждый из этих элементов представляется с помощью объекта SyndicationItem, содержащего все свойства элемента и содержимое, которое предоставляется соответствующим стандартом синдикации (RSS или Atom). В следующем примере рассматривается функция displayCurrentItem, которая обрабатывает каждый элемент и отображает его содержимое с помощью элементов пользовательского интерфейса с различными именами.

Источник

Получение RSS/Atom фидов с любой страницы

С Новым Годом! Пока на улице праздник, я занимался одной из интересных проблем (или задач, как кому) своего проекта. Дано — система, схожая с Google Readers, которая принимает от пользователя некоторый адрес и должна обеспечить просмотр (а позже, и подписку) доступных там RSS-фидов. Задача осложняется тем, что от пользователя нельзя требовать ввода именно полного адреса ленты, да и даже просто адреса сайта или произвольной страницы — он может быть введен в совершенно разных вариантах, полностью или частично и т.п. Самих лент на странице также может быть более одно, часто нескольких форматов сразу (а то и не быть вовсе). Поэтому нам надо выбрать из всех доступных лент последние сообщения и отобразить пользователю, чтобы именно он выбрал в конечном итоге одну ленту, которая его интересует. Открою секрет — да, это только начало и в последующих статьях мы вместе постоим несколько уменьшенную версию системы агрегации и чтениях новостей. Но сегодня попробуем решить первую задачу, без которой наша «читалка» просто не сможет работать, какие бы дальше технологии не применялись.

Основой будет мой любимый инструмент — Zend Framework (используем последнюю, trunk версию). Если вы знакомы с его возможностями, что сходу предложите компонент Zend_Feed, который имеет встроенные возможности по извлечению из страницы лент. Однако не спешите, на практике задача не так и проста. Поэтому будем решать ее постепенно.

Нормализация URL.

Пользователь вводит некоторый адрес, с которого нам предстоит извлечь все доступные ленты. Первым барьером будет то, что стандартный компонент (тот самый Zend_Feed) умеет работать только с полными адресами страниц (или правильной ссылкой на корень сайта). Не компонент вообще, а именно механизм нахождения лент. То есть, если мы хотим использовать автоматическое определение лент, нам необходимо передать ему полный адрес страницы и не больше. Если ссылка уже является прямым линком на ленту, как ни странно, в результате мы получим… ничего не получим. То же самое будет, если мы введем, например, адрес сайта таким образом — www.abrdev.com или abrdev.com, вместо полного URL с указанием протокола — http://abrdev.com. Поэтому, самым первым шагом будет банальная проверка, начинается ли наша строка с указания протокола — «http://» или «https://». Текущая реализация компонент от Zend-а умеет работать только с этими протоколами. Кроме этого, существует ограничение при работе с лентами, которые требуют авторизации для доступа. В принципе, если там используется простая HTTP-авторизация, это вполне решаемо, но если требуется что-то другое, компоненты уже бессильны, поэтому мы сможем работать только с публично доступными лентами.

И так, нам необходима функция, которая принимает на входе произвольную строку, предположительно с адресом сайта или фида, а возвращает всегда или false, если строка ну никак не похожа на URL, или полный адрес, с указанием протокола и т.п. Для валидации мы используем другой компонент фреймворка — Zend_Uri, который предоставляет нам несколько инструментов для обработки и проверки URI (Uniform Resource Identifiers).

Сначала мы положимся на пользователя, поэтому попробуем сразу использовать переданную строку как адрес. Если это не получится и Zend_Uri откажется признать это правильным адресом, он выбросит исключение (или вернет false, если адрес просто неправильный), которые мы перехватим и уже попробуем привести к более правильной форме. Если же и вторая попытка не удается, тогда все, сдаемся и возвращаем false, означающее, что введенное пользователем никак не является корректным адресом расположения ленты.

И так, первая задача решена — мы можем передавать любого вида адрес, а в результате получим или false, а значит ошибку, или строку с полным URL, который пригодный для дальнейшей обработки. Учтите, что доступны только URL с протоколами http/https, к тому же, только публичные (это не проверяется на этом этапе, поэтому, видимо, следует предупреждать пользователя в интерфейсе ввода адреса, так как у нас уже были случаи, когда пользователи вводили адреса лент, доступных только после авторизации, а при попытке обратиться к такому ресурсу сервер получал просто дефолтную страницу авторизации).

Получение прямых линков на ленты.

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

Моя система будет работать с потоком ссылок, поэтому вполне вероятно, что ленты могут дублироваться. Да и мало ли чего, человек просто введет еще раз один и тот же адрес. Так как обработка и поиск фидов это длительная операция, связанная с сетевым доступом к удаленному ресурсу, то хотелось бы максимально разгрузить сервер. В этом нам поможет встроенная в Zend_Feed_Reader возможность кешировать данные. Да и на этапе сбора данных у нас не стоит задачи получать только актуальные новости — если мы клиенту покажем для подтверждения подписки на фид последние 10 записей, но это не будут самые-самые последние, а, допустим, с часовым опозданием, ничего особенного не произойдет. К тому же, если сервер, который отдает ленту, поддерживает правильные заголовки кеширования, то наш кеш будет автоматически проверяться и обновляться. Так мы существенно снизим нагрузку в случае массовых подписок на некоторый стандартный набор лент (не секрет, что бОльшая вероятность, что новый пользователь подпишется как раз на популярные ленты, которые уже кто-то просматривал до него, а значит лента будет в кеше).

Читайте также:  какой основной документ регламентирует безопасность эксплуатации электроустановок

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

Для примера, возьмем наугад следующий список:

Дальше пропустим его через валидатор, описанный выше и получим массив полный URL.

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

Дальше мы последовательно пытаемся с каждого адреса извлечь все ленты. Используя Zend_Feed_Reader мы пробуем обнаружить на странице ленты, которые будут возвращены в виде массива объектов класса Zend_Feed_Reader_FeedSet, а по сути — просто массивы (вернее, объект просто реализует необходимые интерфейсы, поэтому с ним можно работать, как с обычным массивом. Если ленты есть, мы перебираем все и извлекаем из них свойство href, содержащее прямую ссылку. В случае, если по указанному адресу ленты отсутствуют (это случай как просто страницы без лент, так и при использовании прямого адреса фида — он воспримется также как отсутствие ленты), мы строим предположение, что, возможно, это как раз случай прямого адреса и пытаемся получить фид напрямую. Если же и эта попытка провалится, считаем, что увы, но по указанному адресу лент нет и переходим к следующему по списку адресу.

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

Получение последних записей ленты.

Для того, чтобы предоставить пользователю выбор из нескольких лент, или просто показать, что же за фид он будет читать после подписки, мы выбираем 10 последних сообщений и показываем пользователю вместе с адресом подписки. Здесь нам не нужно выбирать все сообщение, поэтому ограничимся только заголовком и ссылкой. Первоначально я также хотел выбирать и другую информацию о ленте, например, описание или список авторов, сopyright, но оказалось, что во многих лентах этих полей просто нет (пустые), поэтому ограничимся только названием.

Если на этом этапе мы встретимся с ошибкой, то просто пропускаем ленту — в лучшем случае, на странице будет еще одна лента, но другого формата, в худшем — мы не найдем ничего. Когда лента импортирована, мы получим заголовок, а далее в цикле 10 последних записей, для каждой из которых получим ссылку, название и дату создания (дата всегда идет в GMT). В тестовом примере я сразу формирую строку, в реальности скорее всего вы каждый из компонент сохраните отдельно, а время, возможно, приведете к единому стандарту (например, с учетом текущей локали пользователя) и конвертируете в UNIX TIMESTAMP для удобства обработки.

Результат мы пока просто выводим через var_dump в браузер (ведь это всего лишь тестовый скрипт). В реальной системе все эти данные пакуются в JSON-массив и отправляются клиенту, который отображает пользователю и дает возможность выбрать одну из лент для подписки. Конечно, можно было бы сделать все за пользователя — например, в случае нескольких лент, которые отличаются только форматом, проверять совпадение ID новостей, и если они одинаковые, то просто брать предпочтительный формат и все. Но это уже зависит от специфики конкретных задач.

Вот и все. Конечно, приведенный код просто иллюстрация и не предназначен для реального использования (особенно методом copy/past). В дальнейшем мы продолжим эту тему и попробуем написать настоящий серверный агрегатор новостей с Web 2.0 AJAX интерфейсом, реал-таймовой доставкой новых сообщений (через Comet), а также построим серверную платформу для распределенной фоновой обработки новостных потоков (так как лент может быть много и для разных лент разные настройки периодичности опроса).

Источник

RSS, XML, Atom – Что это такое и как это позволит мне эффективнее использовать Сеть?

– Что такое «фиды» (feeds)? Я часто вижу «RSS», «XML», и «Atom» на многих сайтах, но я не знаю как пользоваться этими ссылками.

– «Фиды» – это способ доставки информации из веб-сайтов, несколько отличающийся от привычного просмотра через браузер. Фиды позволяют подписаться на регулярные обновления, которые будут доставляться через специализированный веб-портал, программу-читалку, и в некоторых случаях даже посредством старой доброй электронной почты. Фиды также могут быть упакованы в «виджеты», «гаджеты» («Гаджеты это вам не виджеты» – ©Девид Пог), и другие микро-обьекты которые позволят вам оперативно отслеживать свежие записи блогов, новые выпуски подкастов, а также новости, прогнозы погоды, курсы валют с любимых сайтов.

Читайте также:  что делает сужение кожных сосудов

– Что такое «фиды» (feeds)? Я часто вижу «RSS», «XML», и «Atom» на многих сайтах, но я не знаю как пользоваться этими ссылками.

– «Фиды» – это способ доставки информации из веб-сайтов, несколько отличающийся от привычного просмотра через браузер. Фиды позволяют подписаться на регулярные обновления, которые будут доставляться через специализированный веб-портал, программу-читалку, и в некоторых случаях даже посредством старой доброй электронной почты. Фиды также могут быть упакованы в «виджеты», «гаджеты» («Гаджеты это вам не виджеты» – ©Девид Пог), и другие микро-обьекты которые позволят вам оперативно отслеживать свежие записи блогов, новые выпуски подкастов, а также новости, прогнозы погоды, курсы валют с любимых сайтов.

Что все это значит?

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

Чем это удобно?

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

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

Для издателя онлайн-информации: Фиды обеспечивают немедленную доставку свежей информации, и дают возможность подписываться на ее автоматическое получение.

Для рекламистов: Реклама в фидах обходит недостатки которые проявились при использовании стандартных маркетинговых каналов – перегрузка спамом, недостаточная оперативность доставки, неудобства связанные с засорением почтового ящика и т.д. В результате реклама получается тематическая и не нагружающая.

Кто публикует фиды?

Сегодня практически все крупные веб-ресурсы такие как USATODAY.com, BBC News Headlines, ABCNews, CNET, Yahoo!, Amazon.com, также русскоязычные новостные сайты, например korrespondent.net, и много много других используют этот новый, эффективный способ доставки информации. Google публикует фиды многих своих сервисов, например вы можете подписаться на различные новости из Google News. В добавок, сотни тысяч блоггеров, подкастеров, и видеоблоггеров публикуют фиды чтобы быть ближе к своим читателям, слушателям, зрителям и комментаторам. Apple в своем сервисе iTunes Store предлагает множество подкастов для загрузки, каждый из которых использует фиды.

Как я буду читать фиды?

Если вы хотите просматривать и подписываться на фиды, у вас есть множество вариантов на выбор. На сегодняшний день существует более 2000 различных приложений для чтения фидов, также известных как агрегаторы (в основном, они предназначены для текстового контента) и «подкатчеры» («podcatchers» для отслеживания обновлений подкастов). Есть также программы-читалки разработанные исключительно для мобильных устройств.

Некоторые из программ агрегаторов обойдутся вам небольших денег, однако порадуют простотой использования и будут содержать множество предустановленных новостных каналов, среди которых вы вероятно найдете и интересные для себя. Бесплатных программ также великое множество, попробуйте поискать по слову «Feed reader» или «Feed aggregator» на популярных поисковых сайтах – вы получите достаточно предложений. Некоторые популярные фид-агрегаторы будут перечислены в конце этой страницы.

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

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

Как мне опубликовать свой собственный фид?

Если у вас есть вебсайт, блог, аудио/видео материалы, или просто фотоснимки, вы можете «приделать» к своим материалам новостную ленту. Если вы пользуетесь популярной блог-платформой или интрументом для публикации как TypePad, WordPress, или Blogger, то скорее всего новостная лента создается для вас автоматически. Даже некоторые другие не-блоговые сайты, такие как сеть обмена фотографиями Flikr предоставляют фиды для материалов которые вы публикуете, чтобы облегчить доступ к этим материалам вашим посетителям. Также есть инструменты которые помогают преобразовать традиционный веб-контент в формат подходящий для распространения по RSS.

Сервис FeedBurner позволяет издателям веб-контента, у которых уже есть новостная лента (фид) лучше понять возможности этого способа доставки контента, и улучшить взаимодействие с аудиторией. Если у вас уже есть фид, «пропустите» его через FeedBurner, чтобы получить множество новых возможностей и преимуществ.

Узнайте больше о сервисах FeedBurner для блогов, подкастов и коммерческих публикаций.

И наконец, немного технической информации

Новый способ для простого распространения контента часто называется «web feed», а технически это реализуется на формате RSS, что расшифровывается как Really Simple Syndication, Rich Site Summary, и/или Rockdale, Sandow, и Southern (Railroad) если вы верите в добрые сказки на AcronymFinder.com. RSS основан на XML, широко используемом стандарте для обмена текстовой информацией между приложениями в интернет. RSS ленты могут быть прочитаны как обычный текстовый файл, однако задуманы они для коммуникации компьютер-компьютер.

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

Источник

Сказочный портал