*PHP5でRSSのバージョンを判定するスクリプト*



ブログが吐き出すFEEDを取得してDBに格納するスクリプトを書いてます。


$xmlstr = file_get_contents($feed);
$xml = simplexml_load_string($xmlstr, "SimpleXMLIterator" );
これで解析してます。


シンプルにRSSのバージョンを判定するスクリプトはどう書けばいいでしょうか?

みなさんよろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/09/23 09:51:38
  • 終了:2007/09/30 09:55:03

回答(1件)

id:wizemperor No.1

wizemperor回答回数379ベストアンサー獲得回数522007/09/23 11:24:09

ポイント60pt
$ns = $xml->getDocNamespaces();

if (in_array('http://www.w3.org/2005/Atom', $ns)) {
  // Atom 1.0
} else if (in_array('http://purl.org/rss/1.0/', $ns)) {
  // RSS 1.0
} else {
  // RSS 2.0(?)
}

getDocNamespacesメソッドを使うと、$nsにドキュメントの名前空間(ルート要素のxmlns属性の値)が代入されるので、それをチェックしてみてはいかがでしょう?

シンプルですが、もっとよい方法があるかもしれませんが…。

RSS 2.0(0.92系)は名前空間が明示されてないので、細かくチェックしたい場合には、ルート要素のversion属性の値(<rss version="x.xx">)をチェックする必要があると思います。

実際には、仕様に準拠していないフィードも多数ありますし、AtomなのかRSS 1.0(0.91系)なのかRSS 2.0(0.92系)なのかの3種類前後のチェックだけで足りるようには思います。

他に思いつくのは、(仕様上の)必須要素の有無を調べてチェックするとかでしょうか。

http://jp2.php.net/manual/ja/function.simplexml-element-getDocNa...

  • id:tokyosmash
    すみません自動終了してしまいました・・
    今の所はうまくいっております。
    参考になりました。

    いるかを進呈したかったのですが、もしよかったらまた回答してください。本当に失礼しました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません