Como faço para obter todos os itens antigos em um feed RSS?

117

Tenho experimentado escrever meu próprio leitor RSS. Posso lidar com a parte "analisar XML". O que estou prendendo é "Como faço para buscar postagens mais antigas?"

A maioria dos feeds RSS lista apenas os 10-25 itens mais recentes em seu arquivo XML. Como obtenho TODOS os itens em um feed, e não apenas os mais recentes?

A única solução que consegui encontrar foi usar a API "não oficial" do Google Reader, que seria algo como

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

Não quero tornar meu aplicativo dependente do Google Reader.

Existe alguma maneira melhor? Percebi que no Blogger posso fazer "? Start-index = 1 & max-results = 1000" e no WordPress posso fazer "? Paged = 5". Existe alguma maneira geral de buscar um feed RSS para que ele me forneça tudo, e não apenas os itens mais recentes?

user14834
fonte
1
Para os interessados, os documentos da API do leitor não oficial: code.google.com/p/google-reader-api/w/list
Nate Parsons
3
Existe uma nova maneira desde que a pergunta foi feita há cerca de 6 anos, como Feedly dose
shareef
Eu adoraria ver uma resposta atualizada para essa pergunta. Muito decepcionante se nada mudou em 8 anos! Este é o único novo desenvolvimento que vi: app.pub.center stackoverflow.com/questions/5761954/…
Jess Riedel

Respostas:

65

Os feeds RSS / Atom não permitem a recuperação de informações históricas. É responsabilidade do editor do feed fornecê-lo, se desejar, como no blog ou nos exemplos de wordpress que você deu acima.

O único motivo pelo qual o Google Reader tem mais informações é que ele se lembrou de quando foi exibido pela primeira vez.

Existem algumas informações sobre algo como este falado como uma extensão do protocolo ATOM , mas não sei se realmente está implementado em algum lugar.

David Dean
fonte
10

Como as outras respostas aqui mencionadas, um feed pode não fornecer dados de arquivamento, mas itens históricos podem estar disponíveis em outra fonte.

O Wayback Machine do Archive.org tem uma API para acessar conteúdo histórico, incluindo feeds RSS (se seus bots o baixaram). Criei a ferramenta da web Backfeed que usa essa API para gerar novamente um feed que contém itens históricos concatenados. Se você quiser discutir a implementação em detalhes, entre em contato.

Quinn Comendant
fonte
3
Opa! Encontrei. Este link detalha ws-dl.blogspot.fr/2013/07/… Especificamente, você faria algo como este web.archive.org/web/timemap/link/$url Obrigado!
The1nk
8

Na minha experiência com RSS, o feed é compilado pelos últimos X itens, onde X é uma variável. Certos feeds podem ter a lista completa, mas, por motivos de largura de banda, a maioria dos lugares provavelmente se limita apenas aos últimos itens.

A resposta provável para o Google Reader ter as informações antigas é que ele as está armazenando ao lado para os usuários mais tarde.

Rob Haupt
fonte
8

Além do que David Dean disse, os feeds RSS / Atom conterão apenas o que o editor do feed tem no momento e alguém precisaria coletar ativamente essas informações para ter qualquer informação histórica. Basicamente, o Google Reader fazia isso de graça e quando você interagia com ele, você podia recuperar essas informações armazenadas dos servidores de banco de dados do Google.

Agora que aposentaram o serviço, que eu saiba, você tem duas opções. Você tem que começar a coleta dessas informações de seus feeds de interesse e armazenar os dados usando XML ou algo parecido, ou você pode pagar por esses dados de uma das empresas que vendem esse tipo de informações de feed arquivadas.

Espero que esta informação ajude alguém.

Seán

Seán O'Sullivan
fonte
6

Outra solução potencial que pode não estar disponível quando a pergunta foi feita originalmente e não deve exigir nenhum serviço específico.

  1. Encontre o URL do feed RSS que deseja e use o waybackpack para obter os urls arquivados desse feed.
  2. Use o FeedReader ou uma biblioteca semelhante para obter o feed RSS arquivado.
  3. Pegue os URLs de cada feed e raspe-os como desejar. Se você estiver voltando no tempo, é possível que alguns links estejam mortos.
Alex Klibisz
fonte
Esta é uma sugestão brilhante. A Wayback Machine também arquiva feeds RSS. Não funcionará com leitores de feed de GUI, mas para leitores programáticos, não é muito problemático ignorar a solicitação da web e, em vez disso, alimentá-lo com o arquivo RSS / Atom em cache.
Cerin de
@Alex, você poderia explicar com um exemplo? Acho sua sugestão muito intrigante.
SanMelkote 01 de
2
@SanMelkote Faz muito tempo que não penso nisso. Vou tentar me lembrar de desenterrar meu código e, se conseguir encontrá-lo, vou postá-lo como uma essência do github.
Alex Klibisz
2

Os padrões RSS / Atom não têm meios de consultar artigos RSS mais antigos.

Também estou trabalhando em um leitor de RSS e decidi construir meu próprio serviço de arquivamento RSS ( https://app.pub.center ). O uso da API REST é gratuito. Cobramos dinheiro para notificações push.

O serviço pesquisa diariamente seu catálogo de feeds RSS e armazena os artigos em cache. Em seguida, você pode colocar esses artigos de volta em ordem cronológica. Por exemplo:

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
fonte
Parece interessante, mas o link está morto.
bluenote10,
2

Todas as respostas anteriores dependiam mais ou menos dos serviços existentes para ainda ter uma cópia desse feed ou do mecanismo de feed para poder fornecer itens mais antigos dinamicamente.

Porém, há outra maneira, reconhecidamente pró-ativa e bastante teórica de fazer isso: deixe seu feedreader usar um proxy de cache que semanticamente entende RSS e / ou Atom feeds e os armazena em cache por item até tantos itens quanto você configurar.

Se o feedreader não pesquisar feeds regularmente, o proxy pode buscar feeds conhecidos com base em seu próprio tempo para não perder um item em feeds altamente voláteis como o de User Friendly que tem apenas um item e muda todos os dias (ou pelo menos costumava fazer isso). Portanto, se o feedreadere.g. travou ou perdeu a conexão de rede enquanto você estava ausente por alguns dias, você pode perder itens no cache do leitor de feed. Ter o proxy para buscar esses feeds regularmente (por exemplo, de um data center em vez de em casa ou em um servidor em vez de um laptop) permite que você execute facilmente o feedreader somente então e quando sem perder os itens que foram postados após seu feedreader ter obtido os feeds da última vez, mas girou novamente antes de buscá-los na próxima vez.

Eu chamo esse conceito de Semantic Feed Proxy e implementei uma implementação de prova de conceito chamada sfp . Embora não seja muito mais do que uma prova de conceito, não o desenvolvi mais. (Eu ficaria feliz com dicas para projetos com ideias ou propósitos semelhantes. :-)

Axel Beckert
fonte