9

私はいくつかのRSSフィードを取得し、それらのコンテンツをPHPを使用してMySQLデータベースに入れようとしています。このコンテンツを保存した後、自分のページに表示し、コンテンツを1つのRSSフィードに結合します。(おそらくフィルタリング後)

私はこれまでRSSフィードを扱ったことがないので、これを行うための最良のフレームワーク/方法は疑問に思っています。DOMベースの解析について読んだことがありますが、多くのメモリが必要だと聞いていますが、何か提案はありますか?

4

4 に答える 4

10

Magpieは、PHP用の妥当なRSSパーサーです。使いやすい:

require('rss_fetch.inc');
$rss = fetch_rss($url);

たとえば、次のようなアイテム:

<item rdf:about="http://protest.net/NorthEast/calendrome.cgi?span=event&ID=210257">
<title>Weekly Peace Vigil</title>
<link>http://protest.net/NorthEast/calendrome.cgi?span=event&ID=210257</link>
<description>Wear a white ribbon</description>
<dc:subject>Peace</dc:subject>
<ev:startdate>2002-06-01T11:00:00</ev:startdate>
<ev:location>Northampton, MA</ev:location>
<ev:enddate>2002-06-01T12:00:00</ev:enddate>
<ev:type>Protest</ev:type>
</item>

次のような配列に変換されます:

array(
    title => 'Weekly Peace Vigil',
    link => 'http://protest.net/NorthEast/calendrome.cgi?span=event&ID=210257',
    description => 'Wear a white ribbon',
    dc => array (
            subject => 'Peace'
        ),
    ev => array (
        startdate => '2002-06-01T11:00:00',
        enddate => '2002-06-01T12:00:00',
        type => 'Protest',
        location => 'Northampton, MA'
    )
);

次に、DBに保存したいビットを選択するだけで、すぐに使用できます。

于 2009-01-22T22:31:52.400 に答える
7

そこにある最高のPHPパーサーはSimplePie、私見です。私は何年もそれを使用してきました。RSS 0.90、RSS 0.91 (Netscape)、RSS 0.91 (Userland)、RSS 0.92、RSS 1.0、RSS 2.0、Atom 0.3、Atom 1.0。次の名前空間を含む: Dublin Core 1.0、Dublin Core 1.1、GeoRSS、iTunes RSS 1.0 (ほぼ完全)、Media RSS 1.1.1、RSS 1.0 Content Module、W3C WGS84 Basic Geo、XML 1.0、XHTML 1.0

SimplePie 1.2 にはデータベース キャッシングさえあるので、やりたいことを実行するために必要なものがすべて揃っているはずです。

生の XML ファイルを解析する必要がある場合は、XMLize を使用してみてください。

-トリスタン

于 2010-05-06T22:18:40.787 に答える
6

エンドツーエンドで機能する (RSS を解析し、DB に挿入する) だけの非常に単純なハッキングされたスクリプトの場合。

http://code.google.com/p/rssingest/

于 2010-10-31T14:09:32.867 に答える
0

Magpiepearの1つを含む、いくつかのRSS解析ライブラリがあります。

パーサーを選択し、それをデータでループを実行してデータベースにフィードします。スクリプトを実行する頻度を確認し、これがcronから実行されているのか、それともまれにしか読み込まれないページの一部から実行されているのかを考えてください。

于 2009-01-22T22:36:48.677 に答える