XML_Feed_Parserでdc:subject要素を読み込む

はてブからdel.icio.usに移行したのですが、両方APIが公開されているおかげで移行が楽チンでした。

移行スクリプトは勉強のために(?)pythonで書こうかと思ったのですが、また今月は仕事でphpを書くことになったので、しばらくphp漬けになるためにもphpで書くことに(笑)

しかし少しこまったのが、はてブのfeedの仕様ではtagがdc:subjectという要素で表現されており、phpでよく使われているmagpieRSSやPEARのXML_RSSだと、複数の要素が連結されたテキストとして取り出されてしまい、tagをちゃんと取り扱えないという問題がありました。

PEARのXML_Feed_Parserを使うと、dc:subjectなどの拡張名前空間の要素もちゃんとparseすることができます。

PEARのドキュメントにもサンプルがありますが、entryからmodelを取り出し、getElementsByTagNameNSというメソッドで要素郡を取り出します。

entryからmodelを取り出す
$model = $entry->model;
*ここで$entry->linkや$entry->titleはそのまま使える状態

要素郡の取り出し
$subjects = $model->getElementsByTagNameNS('http://purl.org/dc/elements/1.1/', 'subject');
*もちろんnamespaceや要素名は正確である必要があります

取り出した要素郡に対してはnodeValueをつかって中身にアクセスします
foreach ($subjects as $subject) {
print $subject->nodeValue."\n";
}

こんな高機能なparserがあると、RSSかかってこいやー!って気になれそうです。

関連記事

コメントを書く

メールアドレスが公開されたり他で使われたりすることはありません* 印の項目は必須項目です。

*
(表示されません) *