1

RSSフィードからアイテムのデータベースを作成する必要があり、プル(phpのpython/magpieを​​介してRSSをスクレイピングする)ではなく、(プッシュala AJAXを介して)非同期で更新したいと思います。データベースはアプリケーションではなく分析に使用されるため、スケーリングが必要です。xml 経由でフィードからアイテムを簡単にエクスポートできる RSS フィード リーダー アプリケーションを知っている人がいれば、それはすばらしいことです。

php rss パーサーが cron ジョブで mysql を操作できるようにするために、大量のサーバー インフラストラクチャを作成したくないのですが、必要に応じて作成します。潜在的なpythonソリューションにも興味があります。

Superfeedr/PubSubHubbub を調べましたが、それが適切な解決策かどうかはわかりません。

4

2 に答える 2

4

Superfeedrを作成したので、コメントに塩を入れてください。とにかく客観的になるように努めます。

スケールアップしたい場合や、データセットを時間の経過とともに拡大し続けたい場合は、(ご想像のとおり)ポーリングが非常に困難になる可能性があります。おそらく、HTTP の問題と XML 解析の問題の処理に多くの時間を費やすことになるでしょう。Superfeedr では、すでに何百万ものフィードを取得して解析しており、新しい「種」のエラーに遭遇しない週はありません。アマゾンの熱帯雨林の最初の入植者のように感じることがあります。

HTTP の問題の中には、リクエストがあまりにも積極的であることが判明したため、いくつかのサービスがあなたをブロックしていることは明らかですが、これらのサービスのいくつかでダウンタイムに対処する必要があり、システム全体の速度が低下する可能性があります. もちろん、HTTP ヘッダーを処理する際のあいまいさについて話しているわけではありません ( と を区別するサーバーEtagetag、引用符付きの etag のみを受け入れるサーバーもあれば、拒否するサーバーもあることがわかっています)。

XML 側では、さらに悪いことです。まず、おそらく世界に食べさせられるほど多くのスープを解析できる必要があります (しゃれが意図されています!)。XML は、多くの Web 開発者にとって非常に複雑な科学であるように思われます。これらの開発者は、エスケープが必要であること、名前空間にプレフィックスがあること、さらにはmost <open> tag must eventually be </closed>. ここで、RSS、ATOM、または RDF のフレーバーにも対処する必要があり、それらすべてに対処する必要があります。

適切な形式を特定したら、データの意味も理解する必要があります。人々はタイムスタンプをめちゃくちゃにする傾向があるので、私は常にフィードのタイムスタンプを引用しています。私たちが見つけたいくつかのフィードでは、日付として「昨日<published>」さえ表示されています。それはどのようにかわいいですか?現在、機械可読のタイムスタンプを作成している場合は、数値だけのものもあれば、2012 年 6 月 3 日のものもあります。適切な形式を使用していても (RSS 仕様で指定されていません!)、タイムゾーンの仕組み (将来公開されるものは大丈夫!) や夏時間さえ理解できない人も珍しくありません。最後に、それは実際には正当なポイントです。一部のフィードはグレゴリオ暦を使用していませんが、たとえばアラビア暦を使用しています。

差分 (新しいものと古いものを識別すること) も信じられないほど困難です。タイムスタンプがめちゃくちゃになっているからです。また、たとえば RSS 1.0 には<id>. 多くの人が追跡コード (変更中!) をリンクやエントリの本文に入れるため、1 つを作成するのは困難です :(

一言で言えば、ポーリング混乱しており、大規模に処理するのは非常に困難です。このパスをたどる場合は、 PubSubHubbubオープン プロトコルを使用してください。これはあなたにとっては小さな一歩ですが、Webmanity にとっては大きな一歩です。なぜなら、それは採用を拡大し、すべてがうまくいけば、最終的には投票を終えるかもしれないからです。良いニュースは、多くのプラットフォームがそれを採用していることです。これにより、ポーリングの必要性が大幅に減少するはずです.

あなたが構築しようとしているものは私には明らかではありませんが、Superfeedrのようなソリューションを使用することは良いアプローチだと思います. すべての HTTP の問題に対処し、XML を可能な限り正規化して、より簡単に使用できるようにします (JSON に変換することもできます)。はい、私たちはサービスに料金を請求しますが、多くの時間を節約できるので、あなたのサービス/データストアが他の誰とも違うものになっていることに集中することができます.

于 2012-03-07T21:29:46.550 に答える
0

フィードは通常、HTTP GET を介してアクセスされるため、サードパーティのアプリ (Superfeedr など) を使用する場合を除き、プッシュ オプションは実際にはありません。

そうは言っても、プル オプションはそれほど悪くはありません。集計するデータの量によって異なります。「読み取りとエクスポート」の場合、ほとんどのデスクトップ フィードリーダーは量に問題があるかもしれませんが、Venusのようなすべての GUI オーバーヘッドがないものは、おそらく長い道のりを歩むでしょう。

フィードのフォーマットと品質のばらつきは大きな問題ですが、これを処理できるライブラリが世の中にあり、Pythonフィードパーサーは特に優れています。

フィード ポーリングを設定し、結果をパーサー経由で DB にプッシュするのに、多くのコードは必要ありません。(ポーリングを自分で設定する場合は、必ず ETags と Last Modified ヘッダーを確認してください。または、feedparserに任せてください)。

于 2012-03-08T23:06:34.693 に答える