¿Cómo obtengo todos los elementos antiguos de una fuente RSS?

117

He estado experimentando escribiendo mi propio lector de RSS. Puedo manejar el bit "analizar XML". Lo que me estoy quedando atascado es "¿Cómo puedo buscar publicaciones más antiguas?"

La mayoría de las fuentes RSS solo enumeran los 10-25 elementos más recientes en su archivo XML. ¿Cómo obtengo TODOS los elementos de un feed y no solo los más recientes?

La única solución que pude encontrar fue utilizar la API de Google Reader "no oficial", que sería algo así como

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

No quiero que mi aplicación dependa de Google Reader.

¿Hay alguna forma mejor? Me di cuenta de que en Blogger puedo hacer "? Start-index = 1 & max-results = 1000", y en WordPress puedo hacer "? Paged = 5". ¿Existe alguna forma general de obtener un feed RSS para que me proporcione todo, y no solo los elementos más recientes?

user14834
fuente
1
Para aquellos interesados, los documentos de la API de lector no oficial: code.google.com/p/google-reader-api/w/list
Nate Parsons
3
¿Hay una nueva forma desde que se hizo la pregunta hace aproximadamente 6 años como Feedly dose
Shareef
Me encantaría ver una respuesta actualizada a esta pregunta. ¡Muy decepcionante si nada ha cambiado en 8 años! Este es el único desarrollo nuevo que he visto: app.pub.center stackoverflow.com/questions/5761954/…
Jess Riedel

Respuestas:

65

Los feeds RSS / Atom no permiten recuperar información histórica. Depende del editor del feed proporcionarlo si lo desea, como en los ejemplos de blogger o wordpress que proporcionó anteriormente.

La única razón por la que Google Reader tiene más información es que la recordaba cuando apareció por primera vez.

Hay algo de información sobre algo como esto de lo que se habla como una extensión del protocolo ATOM , pero no sé si realmente se implementa en alguna parte.

David Dean
fuente
10

Como se mencionan las otras respuestas aquí, es posible que un feed no proporcione datos de archivo, pero los elementos históricos pueden estar disponibles en otra fuente.

Wayback Machine de Archive.org tiene una API para acceder a contenido histórico, incluidos feeds RSS (si sus bots lo han descargado). Creé la herramienta web Backfeed que usa esta API para regenerar un feed que contiene elementos históricos concatenados. Si desea discutir la implementación en detalle, comuníquese con nosotros.

Quinn acusado
fuente
3
¡Ups! Lo encontré. Este enlace lo detalla ws-dl.blogspot.fr/2013/07/… Específicamente, harías algo como esto web.archive.org/web/timemap/link/$url ¡Gracias!
The1nk
8

En mi experiencia con RSS, el feed se compila con los últimos X elementos donde X es una variable. Ciertos feeds pueden tener la lista completa, pero por el ancho de banda, la mayoría de los lugares probablemente se limitan a los últimos elementos.

La respuesta probable para el lector de Google que tiene la información anterior es que la está almacenando de lado para los usuarios más adelante.

Rob Haupt
fuente
8

Además de lo que dijo David Dean, los feeds RSS / Atom solo contendrán lo que el editor del feed tenga en ese momento y alguien necesitaría recopilar activamente esta información para tener información histórica. Básicamente, Google Reader estaba haciendo esto de forma gratuita y cuando interactuaba con él, podía recuperar esta información almacenada de los servidores de la base de datos de Google.

Ahora que han retirado el servicio, que yo sepa, tiene dos opciones. Debe comenzar a recopilar esta información de sus feeds de interés y almacenar los datos utilizando XML o algo similar, o puede pagar por estos datos de una de las empresas que venden este tipo de información de feeds archivada.

Espero que esta información ayude a alguien.

Seán

Seán O'Sullivan
fuente
6

Otra posible solución que podría no haber estado disponible cuando se hizo la pregunta originalmente y no debería requerir ningún servicio específico.

  1. Busque la URL de la fuente RSS que desee y utilice waybackpack para obtener las URL archivadas de esa fuente.
  2. Utilice FeedReader o una biblioteca similar para desplegar la fuente RSS archivada.
  3. Tome las URL de cada feed y elimínelas como desee. Si retrocede en el tiempo, es posible que haya algunos enlaces muertos.
Alex Klibisz
fuente
Esta es una sugerencia brillante. La Wayback Machine también archiva feeds RSS. No funcionará con lectores de feeds GUI, pero para los lectores programáticos, no es demasiado problema anular la solicitud web y, en cambio, alimentarla con el archivo RSS / Atom en caché.
Cerin
@Alex, ¿podrías dar un ejemplo más? Encuentro su sugerencia muy intrigante.
SanMelkote
2
@SanMelkote No he pensado en esto en mucho tiempo. Intentaré recordar buscar mi código y, si puedo encontrarlo, lo publicaré como una esencia de github.
Alex Klibisz
2

Los estándares RSS / Atom no tienen formas de consultar artículos RSS más antiguos.

También estoy trabajando en un lector de RSS y decidí crear mi propio servicio de archivo RSS ( https://app.pub.center ). Es gratis usar la API REST. Cobramos dinero por notificaciones automáticas.

El servicio sondea diariamente su catálogo de canales RSS y almacena los artículos en caché. Luego, puede recuperar estos artículos en orden cronológico. Por ejemplo:

Página 1 de The Atlantic https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=1

Página 2 de The Atlantic https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=2

wle8300
fuente
Parece interesante, pero el vínculo está muerto.
bluenote10
2

Todas las respuestas anteriores dependían más o menos de los servicios existentes para tener una copia de ese feed o del motor de feed para poder proporcionar elementos más antiguos de forma dinámica.

Sin embargo, hay otra forma, ciertamente proactiva y bastante teórica de hacerlo: deje que su lector de feeds use un proxy de almacenamiento en caché que entienda semánticamente los feeds RSS y / o Atom y los almacene en caché por elemento hasta tantos elementos como usted configure.

Si el lector de feeds no sondea los feeds con regularidad, el proxy podría obtener feeds conocidos basándose en el tiempo por sí solo para no perder un elemento en feeds altamente volátiles como el de User Friendly que tiene solo un elemento y cambia todos los días (o al menos solía hacerlo). Por lo tanto, si el feedreadere.g. se bloqueó o perdió la conexión de red mientras está ausente durante unos días, es posible que pierda elementos en la memoria caché de su lector de feeds. Tener el proxy para obtener esos feeds con regularidad (por ejemplo, de un centro de datos en lugar de su casa o en un servidor en lugar de una computadora portátil) le permite ejecutar fácilmente el lector de feeds solo en ese momento y cuando sin perder los elementos que se publicaron después de que su lector de feeds obtuvo los feeds. la última vez, pero rotó de nuevo antes de buscarlos la próxima vez.

A ese concepto lo llamo Semantic Feed Proxy y he implementado una implementación de prueba de concepto llamada sfp . Aunque no es mucho más que una prueba de concepto y no lo he desarrollado más. (Por lo tanto, estaría feliz con sugerencias para proyectos con ideas o propósitos similares. :-)

Axel Beckert
fuente