Date:
2006-12-26
自前RSSアグリゲータ¶
複数のRSSを集約してRSS2.0で出力する機能があると便利かなー、と思って feedparser を使ってちょろっと書いてみました。集約して最新を取り出す部分は10行程度。feedparser便利だなあ。
# -*- coding: utf-8 -*-
# http://feedparser.org/
import feedparser
# RSS URL list for aggregation.
urls = [
'http://pc.watch.impress.co.jp/sublink/pc.rdf',
'http://internet.watch.impress.co.jp/cda/rss/internet.rdf',
'http://www.watch.impress.co.jp/av/sublink/av.rdf',
]
d=[]
# get early 10 entries.
for u in urls:
f=feedparser.parse(u)
for e in f.entries:
d.append((e.updated_parsed,e.updated,e.title,e.link))
d.sort()
d.reverse()
d = d[:10]
# print 10 entries with RSS2.0 format.
template = u'''<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>%(site_title)s</title>
<link>%(site_link)s</link>
<description>%(site_desc)s</description>
%(items)s
</channel>
</rss>
'''
item_tmpl = u'''
<item>
<title>%(item_title)s</title>
<link>%(item_link)s</link>
<description>%(item_desc)s</description>
<pubDate>%(item_date)s</pubDate>
</item>
'''
item_list = []
for x in d:
item_date, item_title, item_link = x[1],x[2],x[3]
item_desc = u''
item_list.append(item_tmpl % locals())
items = u''.join(item_list)
site_title = u'Impress'
site_link = u'http://watch.impress.co.jp/'
site_desc = u''
print template % locals()
ちなみに、RSSで再出力するだけだと全然意味無かったです。集約なんてRSSリーダがやってくれるもの。。。