Як я вилучаю всі старі елементи на 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-канал, щоб він давав мені все, а не лише останні елементи?


1
Для тих, хто цікавиться, неофіційні документи для читання API: code.google.com/p/google-reader-api/w/list
Нейт Парсонс

3
Чи є новий спосіб, оскільки питання було задано близько 6 років тому, як доза Feedly
shareef

Я хотів би побачити оновлену відповідь на це питання. Дуже прикро, якщо за 8 років нічого не змінилося! Це єдине нове розвиток я бачив: app.pub.center stackoverflow.com/questions/5761954 / ...
Джесс Riedel

Відповіді:


65

RSS / Atom канали не дозволяють отримувати історичну інформацію. Видавець каналу повинен надати його, якщо вони хочуть, наприклад, у прикладах блогера або 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 Reader, що має стару інформацію, полягає в тому, що він зберігає їх на своїй стороні для користувачів пізніше.


8

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

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

Я сподіваюся, що ця інформація комусь допомагає.

Сеан


6

Ще одне потенційне рішення, яке, можливо, не було б доступне, коли запитання було задано спочатку і не потребує конкретної послуги.

  1. Знайдіть URL-адресу потрібного RSS-каналу та скористайтеся waybackpack, щоб отримати архівовані URL-адреси для цього каналу.
  2. Використовуйте FeedReader або подібну бібліотеку, щоб витягнути архівний RSS-канал.
  3. Візьміть URL-адреси з кожного каналу і скребте їх за своїм бажанням. Якщо ви йдете назад у часі, можливо, можуть бути померлі посилання.

Це геніальна пропозиція. Машина Wayback дійсно також архівує RSS-канали. Він не буде працювати з читачами каналів GUI, але для програмних читачів не так вже й багато проблем, якщо перекрити веб-запит і замість цього подати кешований файл RSS / Atom.
Серін

@ Алекс, Не могли б ви детальніше розібратися з прикладом? Я вважаю вашу пропозицію дуже інтригуючою.
SanMelkote

2
@SanMelkote Я давно не думав про це. Я спробую пам’ятати, щоб викопати свій код, і якщо я зможу його знайти, викладу його як суть гітбубу.
Алекс Клибіш

2

Стандарти 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


Виглядає цікаво, але посилання мертва.
bluenote10

2

Усі попередні відповіді більш-менш покладалися на існуючі сервіси, щоб все-таки мати копію цього каналу або движок подачі, щоб мати можливість динамічно надавати старі елементи.

Існує хоч інший, правда кажучи, проактивний і досить теоретичний спосіб зробити це: Нехай ваш feedreader використовує проксі-кешування, яке семантично розуміє RSS та / або Atom-канали та кешує їх на основі кожного елемента до стільки елементів, скільки налаштовано.

Якщо фідер для читання каналів не регулярно запитує канали, проксі-сервер може самостійно отримувати відомі канали, щоб не пропускати елемент у дуже мінливих каналах, як-от у користувальницькому, який має лише один елемент, і змінюється щодня (або принаймні раніше це робили). Отже, якщо feedreadere.g. перерване або втрачене мережеве з'єднання, коли ви знаходитесь у відсутності на кілька днів, ви можете втратити елементи в кеші вашої програми. Наявність проксі-сервера для регулярного завантаження цих каналів (наприклад, з центру даних, а не з дому або на сервері замість ноутбука) дозволяє легко запускати канал читання лише тоді і без втрати елементів, розміщених після того, як ваш feedreader отримує канали востаннє, але знову обертається, перш ніж ви наступного разу їх отримаєте.

Я називаю цю концепцію прокси-семантичним каналом, і я реалізував доказ реалізації концепції під назвою sfp . Це хоч і не набагато більше, ніж доказ концепції, і я не розвивав її далі. (Тож я б радий натякам на проекти з подібними ідеями чи цілями. :-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.