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

117

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

user14834
источник
1
Для тех, кто интересуется, документы Unofficial Reader API: code.google.com/p/google-reader-api/w/list
Нейт Парсонс,
3
Есть ли новый способ с тех пор, как этот вопрос был задан около 6 лет назад, например, Feedly dos
shareef
Я хотел бы увидеть обновленный ответ на этот вопрос. Очень обидно, если за 8 лет ничего не изменилось! Это единственная новая разработка, которую я видел: app.pub.center stackoverflow.com/questions/5761954/…
Джесс Ридель

Ответы:

65

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

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

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

Дэвид Дин
источник
10

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

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

Куинн Комендант
источник
3
Упс! Нашел. Подробная информация по этой ссылке ws-dl.blogspot.fr/2013/07/… В частности, вы бы сделали что-то вроде этого web.archive.org/web/timemap/link/$url Спасибо!
The1nk
8

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

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

Роб Хаупт
источник
8

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

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

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

Seán

Шон О'Салливан
источник
6

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

  1. Найдите URL-адрес нужного RSS-канала и используйте waybackpack, чтобы получить заархивированные URL-адреса для этого канала.
  2. Используйте FeedReader или аналогичную библиотеку, чтобы загрузить заархивированный RSS-канал.
  3. Возьмите URL-адреса из каждого канала и очистите их по своему усмотрению. Если вы вернетесь в прошлое, возможно, там есть мертвые ссылки.
Алекс Клибиш
источник
Это блестящее предложение. Wayback Machine действительно архивирует и RSS-каналы. Он не будет работать с программами чтения каналов GUI, но для программных читателей не составит большого труда переопределить веб-запрос и вместо этого передать ему кэшированный файл RSS / Atom.
Cerin
@Alex, не могли бы вы уточнить на примере? Я нахожу ваше предложение очень интригующим.
SanMelkote,
2
@SanMelkote Я давно не думал об этом. Я постараюсь не забыть выкопать свой код, и если я найду его, я опубликую его как github gist.
Alex Klibisz,
2

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

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

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

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

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

wle8300
источник
Выглядит интересно, но ссылка мертвая.
bluenote10
2

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

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

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

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

Аксель Бекерт
источник