proglog

主にプログラミングに関する断片的メモ

[python][xml]rssのエントリをフィルタリングして出力

要は、Yahoo! Pipesのfilterみたいなことをして、rssから欲しいアイテムだけを抽出し、またrssとして出力したい。
ちょっと手元で使う用途。
python 2.5 windows
そのメモ。

pypiからいくつかの関連ライブラリを試してみたけど、結局入力、パースはfeedparserで出力は地道に手書き、というところに落ち着いた。

入力

まずはlxmlを使うFeedreader。
高速。
だけどdc:subjectみたいなnamespace付きでさらに複数あり得るものの取得の仕方がよく分からなかった。

次に、feedparser。
例えばマニュアルのtagの項にあるように、dc:subjectとかpubDateとかのタグが変換されて管理される。

出力

rss生成、generatorとしては、feedformatterとPyRSS2Genを試した。
どちらも同じような感じで使える。
が、rss2.0でいうitemの部分が異なる。

feedformatterは各ノードを普通の辞書に入れてitemを作り、最後に配列に入れてfeedオブジェクトに入れる。
rss1 rss2 atomの出力が可能。

PyRSS2Genは、専用のオブジェクトを作って、その配列をセットする。
ただし、こちらはcategoryをリストに入れて複数扱える。
が、その名の通り、rss2のみっぽい。

で、両方ともで、


とかいう形での基本的でないタグの出力については、よく分からなかった。

その他

feedparserは実体参照を元に戻してくれるので、再びxmlで使う時は、xml.sax.saxutilsのescapeを使う。