ZopeからRSSを出力する(非Template)
普通にXMLを出す要領でPythonScript書くだけです.
ZopeをPythonのフレームワークとしている場合は
こっちの方がいいかと.
RSSをXMLとして記述する
というわけでZopeからXMLを出力します.
大枠はなんとなくわかると思いますので,
詳しくは下のサンプル見てください
注意点を残しておきます.
- ZopeのエンコーディングからUTF-8に変換する(念のため)
ブラウザによっては対応できないかもしれないので.
簡単ですし - RESPONSEでXMLを指定する
まぁこれはすぐに気づくか, 当り前すぎて見過ごすかってところで. -
url_quote, html_quote
に努める
URIや, __call__の内容はquoteをケアしないといけません.RSSリーダはその辺りブラウザよりもシビアだったりして
# 特にFireFox(つかFireFoxしか使ってませんが)
quote忘れでエラーになってしまうことがしばしば.
しかも記事(description)の内容によってしまうので
気づくのが遅くなってしまいました.
PythonScriptサンプル
文書(DTMLDocumentなど)が
固まって入っているFolderオブジェクトを
folderとします.
あとは以下のように記述すればOKです:
#### s = """<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>%s</title> <link>%s</link> <description>Zope,PDAなどに関する話題を取り上げるホームページ</description> <language>ja</language> <pubDate>%s</pubDate> <lastBuildDate>%s</lastBuildDate> <webMaster>kuri65536@hotmail.com</webMaster> """ % ( context.title, request.baseurl, DateTime(seq[0].update).rfc822(), DateTime().rfc822()) print unicode( s, "euc-jp" ).encode( "UTF-8" ) #### each items def output_item( obj ): url = "%s/ShowData?type=updates&id=%s&ext=.html" % ( request.baseurl, obj.getId() ) url = html_quote( url ) print """ <item> <title> %s </title> <link> %s </link> <guid isPermaLink="true"> %s </guid> <description> %s </description> </item> """ % ( obj.title, url, url, html_quote( obj( context, request )[0:100] + "..." ) ) return printed for i in seq: print unicode( output_item( i ), "euc-jp" ).encode( "UTF-8" ) print """ </channel> </rss> """ return printed
euc-jpとか決め打ちしているところは,managepage_charset
とか使った方がよいかな.
コメント
Comments powered by Disqus