import feedparser
import itertools
import functools
def fetchfeed(url):
d = feedparser.parse('http://feeds.feedburner.jp/AodagBlog')
return d.entries
def yearMonth(entry):
return (entry.updated_parsed[0],
entry.updated_parsed[1])
def groupbyYearMonth(entries):
return itertools.groupby(entries, yearMonth)
def tags(entry):
return [tag.term for tag in entry.get('tags', [])]
def tagIncludes(word, entry):
return word in tags(entry)
def pipe(func1, func2):
return lambda x: func2(func1(x))
def createFilter(filterfunc):
return functools.partial(itertools.ifilter,
filterfunc)
def createMapper(mapperfunc):
return functools.partial(itertools.imap,
mapperfunc)
def createGroup(groupfunc):
return lambda iter: itertools.groupby(iter, groupfunc)
createCommand = functools.partial(reduce, lambda x, y:pipe(x, y))
command = createCommand([fetchfeed,
createFilter(functools.partial(tagIncludes, 'wsgi')),
createGroup(yearMonth),
createMapper(lambda x: (x[0], [e.title for e in x[1]])),
list
])
print command('http://feeds.feedburner.jp/AodagBlog')
多分これで、処理の入れ替えとかできるはず。
ただし、処理がリストってことは、複数フィードをマージするなどの処理ができない。
ツリー版のreduceなんかが必要になると思う。
Blogged with the Flock Browser
|