2009-02-23 2 views
101

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

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

Единственное решение, которое я смог найти с помощью «неофициального» Google Reader API, который будет что-то вроде

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

Для заинтересованных лиц Документы API Неофициального чтения: http://code.google.com/p/google-reader-api/w/list –

+2

Есть ли новый способ, так как вопрос был задан около 6 лет назад, как доза Feedly – shareef

+0

Мне очень хотелось бы получить обновленный ответ на этот вопрос. Очень разочаровывает, если ничего не изменилось за 8 лет! Это единственная новая разработка, которую я видел: https://app.pub.center http://stackoverflow.com/questions/5761954/retrieving-rss-posts-older-than-those-included-in-feed?rq = 1 –

ответ

8

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

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

+1

Вот что я понял. У Google старый архив. Я просто импортирую из Google Reader API, а затем сделаю его «текущим» для новых элементов. Это раздражает.Если я поставлю RSS-ридер на свой сайт и кеширую старые элементы, я буду использовать * TON * дискового пространства. – user14834

59

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

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

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

7

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

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

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

Seán

4

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

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

+0

Отлично! Это только спасло меня. – ryanpcmcquen

+0

(Извините за некрополье) Куинн, вы использовали API для обхода записей Wayback или просто царапаете страницу? Я хочу создать аналогичную функциональность для приложения, над которым я работаю, и не видеть API с открытым доступом (кроме «последнего» моментального снимка или моментального снимка с данной даты). Благодаря! – The1nk

+2

Упс! Найди его. Эта ссылка описывает его http://ws-dl.blogspot.fr/2013/07/2013-07-15-wayback-machine-upgrades.html В частности, вы бы сделали что-то вроде этого http: //web.archive. org/web/timemap/link/$ url Спасибо! – The1nk

3

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

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

В стандартах 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

+0

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

+0

Сделал некоторые изменения @BaummitAugen – williamle8300

2

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

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

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

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

Смежные вопросы