ココログの RSS から html を作る
# ココログやココフラッシュ形式の RSS を html にして出力する Python プログラム # utf-8 で RSS1.0 なら他所の RSS でもそれなりに動くと思う # パブリックドメイン扱いにしますので適当にどうぞ import xml.sax from xml.sax.saxutils import escape from urllib import urlopen RSS_LIST = "rsslist.csv" # "出力するhtmlファイル名,RSSのURL" 形式の csvファイル # 以下のような形式の CSV ファイルを用意する。 u""" updates.htm,http://www.cocolog-nifty.com/updates.rdf game.htm,http://www.cocolog-nifty.com/cocoflash/rss/ge^mu.rdf tuchinoko.htm,http://tuchinoko.moe-nifty.com/oboegaki/index.rdf """ class RssItems(object): def __init__(self): self.data = {u"title":"", u"link":"", u"description":"", u"dc:date":"", u"dc:language":"", u"dc:creator":"", u"dc:publisher":None, u"dc:subject":[], u"content:encoded":None} self.text = [] def startElement(self, tag): self.text = [] def characters(self, content): self.text.append(content) def endElement(self, tag): if tag in (u"dc:date",): self.data[tag] = self.text[0][:len( u"yyyy-mm-ddThh:mm:ss")].replace(u"T", u" ") elif tag in (u"title", u"link", u"description", u"dc:language", u"dc:creator", u"content:encoded", u"dc:publisher"): self.data[tag] = u"".join(self.text) class Channel(RssItems): def endElement(self, tag): if tag in (u"description",): # JavaScript やら張っている所があるので self.data[tag] = escape(u"".join(self.text)) else: RssItems.endElement(self, tag) class Item(RssItems): def endElement(self, tag): if tag in (u"dc:subject",): # 「分類」は複数ある場合も self.data[tag].append("".join(self.text)) else: RssItems.endElement(self, tag) class Handler(xml.sax.ContentHandler): def __init__(self, data): xml.sax.ContentHandler.__init__(self) self.data = data self.dummy = RssItems() def startDocument(self): self.item = self.dummy def startElement(self, tag, attr): if tag == u"channel": self.item = Channel() elif tag == u"item": self.item = Item() else: self.item.startElement(tag) def endElement(self, tag): if tag in (u"channel", u"item"): self.data.append((tag, self.item.data)) self.item = self.dummy else: self.item.endElement(tag) def characters(self, content): self.item.characters(content) def xhtml_out(data, rss = None): channel = data[0][1] html = [u"""<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>%(title)s</title> </head> <body> """ % channel] if rss is not None: html.append(u"""<p><a href="%s">RSS</a></p>""" % (rss,)) html.append(u""" <h1><a href="%(link)s">%(title)s</a></h1> <p>%(description)s</p> <table> <tr><th>最終更新</th><td>%(dc:date)s</td></tr> </table> """ % channel) contents = [] items = [] for n in range(1,len(data)): i = data[n][1] i[u"no"] = u"n%d" % (n,) if not i[u"title"].strip(): i[u"title"] = u"(no title)" if i[u"dc:publisher"] is not None: i[u"title"] = (i[u"title"]+u"<small><em> "+ i[u"dc:publisher"]+u"</em></small>") i[u"dc:subject"] = u", ".join(i[u"dc:subject"]) contents.append(u""" <li><small>%(dc:date)s </small><a href="#%(no)s">%(title)s</a></li>\n""" % i) if i[u"content:encoded"] is None: i[u"content:encoded"] = u"<p>%(description)s</p>" % i items.append(u"""<h2 id="%(no)s"><a href="%(link)s">%(title)s</a></h2> <table> <tr> <th>日時</th><td>%(dc:date)s</td> <th>著者</th><td>%(dc:creator)s</td> <th>分類</th><td>%(dc:subject)s</td> </tr> </table> <div class="content"> %(content:encoded)s </div> <hr /> """ % i) html.append(u"<ol>\n") html += contents html.append(u"</ol><hr />\n") html += items html.append(u"</body>\n</html>") return "".join(html) def make_html(html, url): data = [] p = xml.sax.make_parser() p.setContentHandler(Handler(data)) f = urlopen(url) p.feed(f.read()) f.close() p.close() f = file(html, "w") f.write(xhtml_out(data, url).encode("utf-8")) f.close() for i in file(RSS_LIST): i = i.strip() if i: html, url = i.split(u",") print html, make_html(html.strip(), url.strip()) print u"ok" print "<< end >>"
« 巫女さん細腕繁盛記えくすとら:香奈恵ちゃんFight!!:サラはウタがヘタ | トップページ | ubicast で投稿してみたテスト »
「ウェブログ・ココログ関連」カテゴリの記事
- ココログオリジナルテーマにココロちゃんが無い!(2010.05.28)
- はてなしてます(2008.11.02)
- ココロのパンの缶詰(2008.08.10)
- こういうときに限って驚くほど初音ミク オリジナルが生きてくるものなのだ。(2008.01.21)
- ブログ妖精と VOCALOID とオプション(2008.01.06)
「Python」カテゴリの記事
- from __future__ import hatsune(2008.09.15)
- Pygame1.8.1出たよ!(2008.08.02)
- それは kokoro.py と言うプログラム(2008.04.27)
- smf2txt.py ‐ SMF をテキストに(2008.04.09)
- 2007年下半期ライトノベルサイト杯結果と、同じのに投票した方々(2008.01.28)
« 巫女さん細腕繁盛記えくすとら:香奈恵ちゃんFight!!:サラはウタがヘタ | トップページ | ubicast で投稿してみたテスト »