Как я могу получить все старые элементы в ленте RSS? - PullRequest
110 голосов
/ 23 февраля 2009

Я экспериментировал с написанием собственной программы чтения RSS. Я могу обработать бит "разбора 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, чтобы он давал мне все, а не только самые последние элементы?

Ответы [ 7 ]

63 голосов
/ 23 февраля 2009

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

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

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

9 голосов
/ 23 февраля 2009

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

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

8 голосов
/ 25 сентября 2013

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

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

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

Seán

5 голосов
/ 18 августа 2015

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

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

3 голосов
/ 09 марта 2017

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

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

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

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

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

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

1 голос
/ 30 марта 2017

Стандарты RSS / Atom не имеют возможности запрашивать более старые статьи RSS.

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

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

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

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

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