Как получить все старые предметы на ленте RSS?

Я экспериментировал с написанием собственного RSS-ридера. Я могу обработать бит "parse XML". То, что я застрял, - "Как получить старые сообщения?"

Большинство RSS-каналов перечисляют только 10-25 самых последних элементов в их XML файле. Как получить ВСЕ элементы в фиде, а не только самые последние?

Единственное решение, которое я смог найти, это использовать "неофициальный" API Google Reader, который был бы чем-то вроде

http://www.google.com/reader/atom/feed/http://fskrealityguide.blogspot.com/feeds/posts/default?n=1000

Я не хочу, чтобы мое приложение зависело от Google Reader.

Есть ли лучший способ? Я заметил, что в Blogger я могу сделать "? Start-index = 1 & max-results = 1000", а в WordPress я могу сделать "? Paged = 5". Есть ли какой-либо общий способ для загрузки RSS-канала, чтобы он предоставлял мне все, а не только самые последние элементы?

Ответ 1

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

Единственная причина, по которой у Google Reader больше информации, это то, что она помнила ее с момента ее появления в первый раз.

Существует некоторая информация о чем-то вроде этого в качестве расширения для протокола ATOM, но я не знаю, действительно ли это реализовано где угодно.

Ответ 2

По моему опыту с RSS, фид компилируется последними элементами X, где X - переменная. Некоторые каналы могут иметь полный список, но для полосы пропускания большинство мест, вероятно, ограничивают только последние несколько элементов.

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

Ответ 3

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

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

Я надеюсь, что эта информация поможет кому-то.

Сеан

Ответ 4

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

Archive.orgs Wayback Machine имеет API для доступа к историческому контенту, включая RSS-каналы (если их боты загрузили). Ive создал веб-инструмент Backfeed, который использует этот API для регенерации фида, содержащего объединенные исторические элементы. Если вы хотите подробно обсудить реализацию, пожалуйста, свяжитесь с нами.

Ответ 5

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

  • Найдите URL-адрес нужного канала RSS и используйте waybackpack, чтобы получить архивные URL-адреса для этого канала.
  • Используйте FeedReader или подобную библиотеку, чтобы вытащить архивированный RSS-канал.
  • Возьмите URL-адреса из каждого фида и очистите их по своему усмотрению. Если вы вернетесь в прошлое, возможно, будут какие-то мертвые ссылки.

Ответ 6

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

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

Если программа чтения не выполняет регулярный опрос каналов, прокси-сервер может получать известное время фидов самостоятельно, чтобы не пропустить элемент в сильно волатильных фидах, например, из User Friendly, который имеет только один элемент и меняет каждый день ( или, по крайней мере, используется для этого). Следовательно, если feedreadere.g. поврежденное или потерянное сетевое соединение, пока вы отсутствуете на несколько дней, вы можете потерять элементы в кеше получателя. Наличие прокси-сервера для регулярного извлечения этих каналов (например, из центра обработки данных вместо дома или на сервере вместо ноутбука) позволяет легко запускать программу-загрузчик только тогда, и когда без потери элементов, которые были отправлены после того, как ваш канал загрузил фид, в последний раз, но снова поворачивается, прежде чем вы их прибудете в следующий раз.

Я называю эту концепцию Semantic Feed Proxy, и я реализовал доказательство реализации концепции под названием sfp. Это хотя и не намного больше, чем доказательство концепции, и я не развил ее дальше. (Поэтому я был бы рад намекам на проекты с похожими идеями или целями.: -)

Ответ 7

В стандартах RSS/Atom нет способов запроса старых статей RSS.

Я также работаю над RSS-ридером и решил создать собственную архивацию RSS (https://app.pub.center). Он может использовать API REST. Мы берем деньги за push-уведомления.

Служба ежедневно опросает каталог каталогов RSS и кэширует статьи. Затем вы можете вернуть эти статьи в хронологическом порядке. Например:

Страница 1 из Атлантики https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=1

Страница 2 Атлантического океана https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=2