web-dev-qa-db-ja.com

RSSフィードの古いアイテムをすべて取得するにはどうすればよいですか?

私は自分のRSSリーダーを書いて実験してきました。 「XMLの解析」ビットを処理できます。私が行き詰まっているのは、「古い投稿を取得するにはどうすればよいですか」です。

ほとんどのRSSフィードは、XMLファイル内の10〜25個の最新アイテムのみをリストします。フィード内のアイテム(最新のものだけでなく)を[〜#〜] all [〜#〜]取得するにはどうすればよいですか?

私が見つけることができた唯一の解決策は、「非公式な」Google Reader APIを使用することでした。

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

アプリケーションをGoogleリーダーに依存させたくありません。

より良い方法はありますか? Bloggerでは、「?start-index = 1&max-results = 1000」、およびWordPress「?paged = 5」を実行できます。一般的な方法はありますか? RSSフィードを取得して、最新のアイテムだけでなくすべてを提供するようにしますか?

110
user14834

RSS/Atomフィードでは、履歴情報を取得できません。ブロガーやwordpress上記の例など)で必要な場合に提供するのは、フィードの発行者次第です。

Google Readerがより多くの情報を持っている唯一の理由は、それが最初に現れたときからそれを覚えているということです。

extension ATOM protocol として説明されているこのようなものに関するいくつかの情報がありますが、それがそうであるかどうかはわかりません実際にどこにでも実装されます。

63
David Dean

RSSの私の経験では、フィードはXが変数である最後のXアイテムによってコンパイルされます。一部のフィードには完全なリストが含まれている場合がありますが、帯域幅のために、ほとんどの場所は最後の数アイテムに限定される可能性があります。

古い情報を持っているグーグルリーダーに対するおそらく答えは、それが後でユーザーのためにそれを横に保存しているということです。

9
Rob Haupt

David Deanによると、RSS/Atomフィードにはその時点でフィードのパブリッシャーが持っているもののみが含まれ、履歴情報を取得するには誰かがこの情報を積極的に収集する必要があります。基本的にGoogle Readerはこれを無料で行っていたので、これを操作すると、Googleデータベースサーバーからこの保存された情報を取得できます。

彼らはサービスを廃止したので、私の知る限り、2つの選択肢があります。関心のあるフィードからこの情報の収集を開始し、XMLなどを使用してデータを保存するか、このタイプのアーカイブされたフィード情報を販売する会社のいずれかからこのデータの代金を支払う必要があります。

この情報が誰かに役立つことを願っています。

セアン

8

ここで言及した他の返信のように、フィードはアーカイブデータを提供しない場合がありますが、履歴アイテムは別のソースから入手できます。

Archive.orgのWayback Machineには、RSSフィード(ボットがダウンロードした場合)を含む履歴コンテンツにアクセスするためのAPIがあります。 Webツールを作成しました Backfeed このAPIを使用して、連結された履歴アイテムを含むフィードを再生成します。実装について詳細に議論したい場合は、連絡を取ってください。

5
Quinn Comendant

質問が最初に尋ねられたときに利用できなかった可能性があり、特定のサービスを必要としない別の潜在的なソリューション。

  1. 目的のRSSフィードのURLを見つけ、 waybackpack を使用して、そのフィードのアーカイブ済みURLを取得します。
  2. FeedReader または同様のライブラリを使用して、アーカイブされたRSSフィードをプルダウンします。
  3. 各フィードからURLを取得し、必要に応じてスクレイプします。過去に戻る場合、リンク切れが発生している可能性があります。
3
Alex Klibisz

以前のすべての回答は、多かれ少なかれ既存のサービスに依存して、古いフィードを動的に提供できるように、そのフィードまたはフィードエンジンのコピーを保持しています。

ただし、積極的かつ理論的には別の方法があります:RSSを意味的に理解するキャッシュプロキシを使用するか、Atomフィードをアイテムごとにキャッシュする設定した数までのアイテム。

フィードリーダーが定期的にフィードをポーリングしない場合、プロキシは独自の時間ベースで既知のフィードを取得して、1つだけのアイテムを持ち、毎日変更されるUser Friendlyのような非常に揮発性の高いフィードのアイテムを逃さないようにします以前はそうでした)。したがって、feedreadere.g数日間留守中にネットワーク接続がクラッシュまたは失われた場合、フィードリーダーのキャッシュ内のアイテムが失われる可能性があります。これらのフィードを定期的に取得するプロキシを使用すると(たとえば、自宅やラップトップではなくサーバーからデータセンターから)、フィードリーダーがフィードを取得した後に投稿されたアイテムを失うことなく、そのときだけフィードリーダーを簡単に実行できます前回取得しましたが、次回取得する前に再度ローテーションしました。

その概念をSemantic Feed Proxyと呼び、 sfpと呼ばれる概念実証の実装 を実装しました。ただし、これは概念実証にすぎず、これ以上開発していません。 (だから、似たようなアイデアや目的を持つプロジェクトのヒントについてはうれしいです。:-)

2
Axel Beckert

RSS/Atom標準には、古いRSS記事を照会する方法がありません。

私はRSSリーダーにも取り組んでおり、独自のRSSアーカイブサービス( https://app.pub.center )を構築することにしました。 REST APIを無料で使用できます。プッシュ通知には料金がかかります。

このサービスは、RSSフィードのカタログを毎日ポーリングし、記事をキャッシュします。その後、これらの記事を時系列順に戻すことができます。例えば:

大西洋のページ1 https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=1

大西洋のページ2 https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=2

1
williamle8300