4

いくつかの RSS フィードを取得し、それらに追加されたすべてのアイテムをアーカイブする必要があります。これまで RSS を使用したり作成したりしたことはありませんが、xml は知っているので、形式は非常に直感的です。

フィードを解析する方法を知っています: C# RSS リーダーの作成を開始するにはどうすればよいですか?

完全な履歴を提供するためにフィード サーバーに頼ることができないことはわかっています: RSS アーカイブを取得することは可能ですか?

重複に関するいくつかのカスタム ロジックが必要になることはわかっています: RSS フィード内の投稿の一意性 (重複がないこと) を確認する方法

私の質問は、アイテムを見逃さないようにするにはどうすればよいですか? 私の最初の計画は、フィード内の各項目に対して次のようなパーサーを作成することです。1) アーカイブ データベースに既に存在するかどうかを確認します。2) 存在しない場合は、データベースに追加します。これを 1 日に 1 回実行するようにスケジュールすると、アイテムを逃すことはないと確信していますか?

4

3 に答える 3

3

フィードによって異なりますが、一部のサイトでは記事を頻繁に公開しており、RSSフィードが最新の10件の記事のみを表示するように構成されている場合があります。いくつかのサイトは反対のことをするつもりです。

理想的には、アプリはサイトから頻度を「学習」し、学習した頻度に基づいてそれらのサイトにpingを実行するように調整する必要があります。(例:pingを実行するたびに新しい一意の記事が表示される場合は、より頻繁にpingを実行する必要があります。一方、同じ記事のセットが複数回試行された場合は、次回は元に戻すことができます)。

于 2012-05-01T20:50:09.940 に答える
0

フィードとストレージの制限に基づいて一連の決定を行います。例えば:

    Web サイトに接続し、フィードの XML ソースをダウンロードします。フィード ダウンロード エンジンは、HTTP または Secure Hypertext Transfer Protocol (HTTPS) プロトコルのみを介してフィードとエンクロージャをダウンロードします。

    フィード ソースを Windows RSS プラットフォームのネイティブ形式に変換します。これは、追加の名前空間拡張機能を備えた RSS 2.0 に基づいています。(ネイティブ形式は基本的に、サポートされているすべての形式のスーパーセットです。) これを行うには、Windows RSS プラットフォームに Microsoft XML (MSXML) 3.0 SP5 以降が必要です。

    新しいフィード アイテムをフィード ストア内の既存のフィード アイテムとマージします。
    所定の最大数のアイテムが受信されたときに、古いアイテムをフィード ストアからパージします。

    必要に応じて、バックグラウンド インテリジェント転送サービス (BITS) を使用してエンクロージャのダウンロードをスケジュールします。

無駄な帯域幅を最小限に抑えるために、HTTP を最大限に使用します。

サーバーへの影響を制限するために、フィード ダウンロード エンジンは、HTTP (RFC3229) World Wide Web リンクでデルタ エンコーディングと組み合わせた HTTP 条件付き GET を実装します。この実装により、サーバーは、クライアントにキャッシュされたリソースのまったく新しいインスタンスを転送する代わりに、変更の最小限の説明を転送できます。このエンジンは、Microsoft Win32 Internet (WinInet) の HTTP gzip サポートを使用した圧縮もサポートしています。

同期が成功したということは、フィードが正常にダウンロードされ、検証され、ネイティブ形式に変換され、ストアにマージされたことを意味します。HTTP 条件付き GET (If-Modified-Since、If-None-Match、ETag など) に対する HTTP 304 Not Modified のサーバー応答も成功と見なされます。

削除の基準を定義します。

次のプロパティは、同期操作後に残るアイテムの数に直接影響します。

    PubDate - アイテムの「年齢」を決定するために使用されます。PubDate が設定されていない場合は、LastDownloadTime が使用されます。フィードがリストの場合、項目の順序は事前に決定され、PubDate (存在する場合) は無視されます。

    MaxItemCount — アーカイブされるアイテムの数を制限するフィードごとの設定。フィードからダウンロードできるアイテムが他にもある場合でも、フィードの ItemCount が最大値を超えることはありません。

    ItemCountLimit - 任意の 1 つのフィードのアイテムの上限で、通常は 2500 として定義されます。MaxItemCount の値は、この制限を超えることはできません。MaxItemCount を ItemCountLimit に設定して、可能な限り多くのアイテムを保持します。

参考文献

于 2016-10-06T17:31:12.920 に答える