web-dev-qa-db-fra.com

Comment récupérer tous les anciens éléments d'un flux RSS?

J'ai essayé d'écrire mon propre lecteur RSS. Je peux gérer le bit "parse XML". La chose sur laquelle je suis bloqué est "Comment puis-je récupérer des messages plus anciens?"

La plupart des flux RSS ne répertorient que les 10 à 25 éléments les plus récents dans leur fichier XML. Comment obtenir [~ # ~] tous [~ # ~] les éléments d'un flux, et pas seulement les plus récents?

La seule solution que j'ai pu trouver était d'utiliser l'API Google Reader "non officielle", qui serait quelque chose comme

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

Je ne veux pas rendre ma demande dépendante de Google Reader.

Y a-t-il une meilleure façon? J'ai remarqué que sur Blogger, je peux faire "? Start-index = 1 & max-results = 1000", et sur WordPress je peux faire "? Paged = 5". Existe-t-il un moyen général de récupérer un flux RSS pour qu'il me donne tout, et pas seulement les éléments les plus récents?

110
user14834

Les flux RSS/Atom ne permettent pas de récupérer des informations historiques. Il appartient à l'éditeur du flux de le fournir s'il le souhaite, comme dans le blogueur ou dans les exemples wordpress que vous avez donnés ci-dessus).

La seule raison pour laquelle Google Reader possède plus d'informations est qu'il s'en est souvenu lors de sa première apparition.

Il y a quelques informations sur quelque chose comme ça, parlées comme extension au ATOM protocol , mais je ne sais pas si elle est réellement implémentée n'importe où.

63
David Dean

D'après mon expérience avec RSS, le flux est compilé par les derniers éléments X où X est une variable. Certains flux peuvent avoir la liste complète, mais pour des raisons de bande passante, la plupart des endroits se limitent probablement aux derniers éléments.

La réponse probable pour Google Reader ayant les anciennes informations, c'est qu'il les stocke de son côté pour les utilisateurs plus tard.

9
Rob Haupt

Suite à ce que David Dean a déclaré, les flux RSS/Atom ne contiendront que ce que l'éditeur du flux a à ce moment-là et quelqu'un devrait collecter activement ces informations afin d'avoir des informations historiques. Fondamentalement, Google Reader le faisait gratuitement et lorsque vous interagissiez avec lui, vous pouviez récupérer ces informations stockées sur les serveurs de base de données Google.

Maintenant qu'ils ont retiré le service, à ma connaissance, vous avez deux choix. Vous devez soit commencer la collecte de ces informations à partir de vos flux d'intérêt et stocker les données en utilisant XML ou un autre, ou vous pouvez payer ces données auprès de l'une des sociétés qui vendent ce type d'informations de flux archivées.

J'espère que cette information aide quelqu'un.

Seán

8
Seán O'Sullivan

Comme les autres réponses mentionnées ici, un flux peut ne pas fournir de données d'archives mais des éléments historiques peuvent être disponibles à partir d'une autre source.

Wayback Machine d'Archive.org dispose d'une API pour accéder au contenu historique, y compris les flux RSS (si leurs robots l'ont téléchargé). J'ai créé l'outil Web Backfeed qui utilise cette API pour régénérer un flux contenant des éléments historiques concaténés. Si vous souhaitez discuter de la mise en œuvre en détail, veuillez nous contacter.

5
Quinn Comendant

Une autre solution potentielle qui n'était peut-être pas disponible lorsque la question a été posée à l'origine et ne devrait pas nécessiter de service spécifique.

  1. Recherchez l'URL du flux RSS souhaité et utilisez waybackpack pour obtenir les URL archivées de ce flux.
  2. Utilisez FeedReader ou une bibliothèque similaire pour dérouler le flux RSS archivé.
  3. Prenez les URL de chaque flux et grattez-les comme vous le souhaitez. Si vous remontez dans le temps, il est possible qu'il y ait des liens morts.
3
Alex Klibisz

Toutes les réponses précédentes reposaient plus ou moins sur les services existants pour conserver une copie de ce flux ou le moteur de flux pour pouvoir fournir dynamiquement des éléments plus anciens.

Il existe cependant un autre moyen, certes proactif et plutôt théorique: de laisser votre lecteur de flux utiliser un proxy de mise en cache qui comprend sémantiquement RSS et/ou Atom les alimente et les met en cache sur une base par élément jusqu'à autant d'éléments que vous configurez.

Si le lecteur de flux n'interroge pas régulièrement les flux, le proxy peut récupérer les flux connus en fonction de son temps pour ne pas manquer un élément dans les flux très volatils comme celui de User Friendly qui n'a qu'un seul élément et change tous les jours (ou au moins l'habitude de le faire). Par conséquent, si le feedreadere.g. panne ou perte de connexion réseau pendant votre absence de quelques jours, vous risquez de perdre des éléments dans le cache de votre lecteur de flux. Le fait d'avoir le proxy pour récupérer ces flux régulièrement (par exemple à partir d'un centre de données au lieu de chez vous ou sur un serveur au lieu d'un ordinateur portable) vous permet d'exécuter facilement le lecteur de flux uniquement à ce moment et sans perdre les éléments qui ont été publiés après que votre lecteur de flux a récupéré les flux la dernière fois, mais a pivoté à nouveau avant de les récupérer la prochaine fois.

J'appelle ce concept un proxy sémantique d'alimentation et j'ai implémenté un preuve de mise en œuvre du concept appelée sfp . Ce n'est cependant pas beaucoup plus qu'une preuve de concept et je ne l'ai pas développé davantage. (Je serais donc heureux de trouver des astuces pour des projets avec des idées ou des objectifs similaires. :-)

2
Axel Beckert

Les normes RSS/Atom ne permettent pas d'interroger des articles RSS plus anciens.

Je travaille également sur un lecteur RSS et j'ai décidé de créer mon propre service d'archivage RSS ( https://app.pub.center ). Il est gratuit d'utiliser l'API REST. Nous facturons de l'argent pour les notifications Push.

Le service interroge quotidiennement son catalogue de flux RSS et met en cache les articles. Ensuite, vous pouvez récupérer ces articles dans un ordre chronologique. Par exemple:

Page 1 de L'Atlantique https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=1

Page 2 de L'Atlantique https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=2

1
williamle8300