PEARでAtomをほげほげ

events.php.gr.jp PHP懇親会
2007/11/21 cloned

本日のお話

自己紹介
Hateview作ったときのAtomのパースについて

自己紹介 その1

id:cloned
http://d.hatena.ne.jp/cloned/
http://clonedoppelganger.net/

自己紹介 その2

今年の夏までは
某検索エンジンの会社にいました
old

自己紹介 その3

今年の10月に
Unoh
ウノウ株式会社に入社しました

Hateviewとは

はてブをスライドショーにするツール
http://hateview.clonedoppelganger.net/
Hateview

こんなやつ

Hateview

Hateviewでやってること

XMLHttpRequest
  -> サーバー(PHP)
    -> はてなブックマーク API
JSON <-
ほとんどJavaScript

PHPでやってること

はてなブックマーク APIにリクエストして
レスポンスをJSONにして返す

本題

Atomのパースに
PEARを使おうとして
断念した悲しいお話です

PEARのRSSパーサー

「RSS」とか「Atom」で検索すると
・PEAR::XML_RSS
・PEAR::XML_Feed_Parser
いかにも使えそうな名前がヒットする

PEAR::XML_RSS編

さっそくドキュメントを読むと
大半のRSSフィードはリモートホスト上にあるので、XML_RSSを実行する前にはPHPの設定値"allow_url_fopen"を"On"にしておく必要があります。
PEAR :: Manual :: 要件
な・・・・なんだってー!!

PEAR::XML_RSSの中でやってること

$fp = @fopen($file, 'rb');
while ($data = fread($this->fp, 4096)) {
ステータスコードは管理してないし
そもそもallow_url_fopen=Offにしてるし
見なかったことにしよう・・・

PEAR::XML_Feed_Parser編

サンプルコードを見てみると
$source = 'my_source.xml';
$feed = new XML_Feed_Parser(
    $source, $validate, $suppress_warnings, $use_tidy);
あやしい雰囲気・・・

PEAR::XML_Feed_Parserもfopen?

Googleで調べてみると
$source = '<foo>bar</foo>';
みたいなサンプルもあって
使えそうな雰囲気

実際に使ってみたら

うまくパースできない
Warning出まくり
APIドキュメント読んだら
For now we're going to treat Atom 0.3 as Atom 1.0
but raise a warning.
Docs For Class XML_Feed_Parser
はてなブックマーク APIはAtom 0.3 orz

Hateviewでの実装

・PEAR::HTTP_Request
・DOMDocument
あっさり解決したけれど
面白くない展開

まとめ

PEAR x はてなAtom 0.3 は相性が悪そう
その他はPEAR::XML_Feed_Parserが結構使えそう

ちなみに作ったあとに気付きましたが

http://b.hatena.ne.jp/cloned/rss?of=1000
HatenaRSS
RSSでも使えるんですね。AtomAPI。
そうですか。そうですか。
qあwせdrftgyふじこlp 省略されました
ご静聴ありがとうございました