2011-11-14 17 views
0

私はRSSフィードをさまざまなサイトから読み込むWebアプリケーションを構築しています。すべてのフィードでは、URLに検索キーを追加できるので、フィードは常に異なっています。PHPはライブRSSフィードを読み込み、最も速い方法です。

私はsimplexml_load_fileを使用していますが、これはフィードを読むのに時間がかかります。今日私はstackoverflowを検索し、XMLReaderクラスを見つけました。これは少し高速ですが、まだ十分速くはありません。

私の質問は、常にユニークな複数のRSSフィードを読むためのより速い方法があるので、ユーザーはそれほど長く待つ必要はありません。

+0

キーワード:parallelize – salathe

答えて

0

おけば、私は次のように異なるのRSSパーサを使用しました。

-1

あなたがしなければならないことは、RSSフィード全体を読んで解析するのではなく、その一部を取得することだと思います。 file_get_contents()を使用する場合は、ページ全体をダウンロードせずに最初の部分のみをダウンロードするように制限を設定できます。

もちろん、あなたのRSSフィードは壊れています。私は今あなたの読者がこれにどのように反応するかは分かりません。たぶんあなたは彼にそれを無視させるか、壊れたフィードエンドを修正させることができます。

ここに行く:

$feed = file_get_contents('http://stackoverflow.com/...', false, null, -1, 1000); 
$end = strpos($feed, '</entry>', -1); 
echo substr($feed, 0, $end). '</entry></feed>'; 
+0

おそらくデータを読むにはファイル 'get_contents'が最適ですが、文書の一部だけを読むことは良い方法ではありません。デベロッパーは、どのくらいの量のドキュメントを取り込み、途中で記事を切り取ったり、途中でタグを切り取ったりしないかを知っていますか?次に、正しく解析できない無効なXML文書があります。また、スペルチェックを傷つけるでしょうか? –

+0

はい、それは吸うが、私はここに行くのは非常に簡単な方法です。だからこそ私は壊れた餌を修正しなければならないと言っています。 1つのフィードエントリを失うので、何ですか? – PiTheNumber

+0

もちろん、fopen/freadを使って自分でフィードを解析することはできますが、これはもっとうまくいく方法です。 – PiTheNumber

1

simplePieをチェックアウト - ライブラリは非常に使いやすいですし、うまく機能キャッシュを実装します。

知覚的な読み込み時間を短縮するためにできるもう一つの方法は、フィードのコンテンツがない状態でページを読み込んで、フィードをAJAXでパイプすることです。フィードが移動するコンテンツエリアにローダーアニメーションイメージを貼り付け、ページロード時にAJAXリクエストを開始すると、ユーザーはページの読み込みが速くなっていると認識します。フィードの合計が同じであっても、ロード時間。さらに、フィードのためにそこにいないユーザーは、気にしないコンテンツを待つことなく、自分がしなければならないことをやり遂げることができます。

+0

ありがとう、しかし、この読者はPHP 5の準備ができていません:(私はそれが本当に速いのを見ます! – Flappy

+0

simplePieのみPHP 4.3が必要です - http://simplepie.org/wiki/setup/requirements –

0

なぜユーザーの要求があったときだけ、ランダムに含めることのできるファイルには5つのまたは6のフィードをキャッシュしません。そうすれば、ユーザーはフィードの処理を待つことになりません。キャッシュされたファイルは、10分または15分ごとにcronジョブでリフレッシュされるので、常に新しいコンテンツが存在します。 SimplePie - - LastRSS

しかし、最速の方法は、あなたが全体のxmlファイルを読み込む必要がないので、PHPのXMLReaderを使用することです:

+0

フィードにはURLに常に異なる検索語が含まれているため、できません。 – Flappy

関連する問題