2011-02-03 13 views
0

media RSSiTunes podcastのRSSフィードをデータベースに保存したいと考えています。ここでの要件は、フィードのANY要素またはその属性を見逃したくないということです。フィード内の最も一般的な要素をすべて見つけて、それらを別々の列としてデータベースに格納することは理にかなっています。ここでキャッチするのは、標準ではないフィード固有の要素が存在する可能性があるということです。私もそれらをキャプチャしたい。私は彼らが何ができるかわからないので、私はそれらのための専用の列を持っていません。メディアを保存するRSSとiTunesのポッドキャストデータベースのRSSフィード

現在、私はfeedsとfeed_entriesという2つのテーブルを持っています。エンクロージャー、カテゴリのようなRSS 2.0タグの場合、私はフィード/ feed_entriesとの関連付けを持つ別々のテーブルを持っています。私はフィードを解析するためにfeedzirraを使用しています。 Feedzirraは、解析するフィードの要素を知る必要があるため、feedzirraが理解できる要素を超えてフィードに要素が含まれているかどうかはわかりません。

これらのフィードをデータベースに格納し、単一の情報を欠かさないようにするにはどうすればよいでしょうか? (ほとんどの属性を照会したいので、フィード全体をデータベースにダンプしても機能しません)。どのようなパーサーが最適なのでしょうか?パフォーマンスのためにFeedzirraが選択されましたが、フィード内のすべてのデータをデータベースに取り込むことが優先されます。

更新

私は、データベースとしてMySQLを使用しています。

答えて

0

XMLをCLOBとして格納するほとんどのデータベースには、SELECT文の一部としてXPath型のクエリを含めることができるXML処理拡張機能があります。

DBMSがXML問合せをサポートしていない場合は、言語XPath実装を使用してCLOBを問い合せます。迅速なクエリを行うために、おそらくテーブルの列に特定の要素を抽出する必要があります。

1

RSSとRDFとAtomのフィールドをクロスフィードマッピングしてフィードを作成し、必要なデータフィールドを開始点として取り込むことができました。タグ付けとフィードの内部要約といくつかのハウスキーピングとメンテナンスのためのフィールドを追加しました。

Feedzirraから移動する場合は、実際のフィードXMLをステージングテーブルに一時的に保存しておくことをお勧めします。余分にNokogiriを使用して後処理を行うことができます。あなたのHTTPプロセスがテキストの処理に邪魔されないように、コンテンツを取得してそれをファイリングするだけで、処理時間のレコードを更新して、いつ再確認するかを知ることができます。後処理では、格納されたXMLから必要なフィード情報を抽出してデータベースに格納し、レコードを削除できます。つまり、あるプロセスが可能な限り迅速にフィードを定期的に取得し、別のプロセスは基本的にバックグラウンドで実行されていることを意味します。

また、Typhoeus/HydraHTTPClientは、複数のHTTP要求をうまく処理でき、セットアップが簡単です。