feed parsing
再度令人嘆息,ruby feed parsing 居然這麼難搞...
rfeedparser 雖然強大,但看到這個就要放棄他了:
godfat ~/p/g/photos> gem dep rfeedparser
Gem rfeedparser-0.9.951
rchardet (>= 1.1, runtime)
hpricot (>= 0.6, runtime)
character-encodings (>= 0.2.0, runtime)
htmltools (>= 1.10, runtime)
htmlentities (= 4.0.0, runtime)
mongrel (>= 1.0.1, runtime)
addressable (>= 1.0.4, runtime)
神經病!居然還 depend on mongrel 咧。
而且我沒記錯的話,他連連接網路抓取 feed 資料都有。
作者大概沒聽過那句話 "write programs do one thing and do it well"
本來是打算用 hpricot 的,但他碰到測試 rss feed 居然 parse 錯誤。
該 feed 是有 CDATA 和 namespace, 有些 tag parse 不出來...
改用 nokogiri, 不過依然問題重重...
rss 是沒問題,但 atom 的 node selecting 卻讓我很困擾。
他必須在每一次的 xpath 中都指定 namespace!!!
doc.xpath('//ns:entry', {'ns' => 'http://www.w3.org/2005/Atom'})
棍!超煩的。找不到方法省略掉。改用 HTML parser 呢?
這樣就能省掉 namespace, 但碰到明白寫 namespace 的 rss 就爛掉了。
所以還是得用 XML parser... 但這樣好像就無論如何不能省 ns.
改用 css 咧?查了 css3 selector 的 spec, 用 | 指定 ns.
因為還是不能省 ns 啊... 結果 nokogiri 好像根本不支援 | 的樣子。
所以還是只好用 xpath + 不斷寫好長的 ns.
當然那個 hash 先記下來可以少打點字,但實在是...
然後最好笑的是,打:
doc.namespace
還會 segmentation fault.............. 這麼嚴重的 bug? orz
唉。
2 retries:
(拍) 我好久之前就覺得這真是難搞的事,好像也跟你討論過,主要原因是標準太多 (那還是標準嗎?)
所以想省掉麻煩就用 rfeedparser 吧? -_-b
這個相容性真的很強,就討厭了點就是
XML 真是罪過啊...
不過 HTML 更是讓人困擾就是了 :s
YAML 才是王道啊! XD
Post a Comment
Note: Only a member of this blog may post a comment.