#!/usr/bin/env python import sys, os import cPickle sys.path.append("~/lib") import feedparser class feedster: def __init__(self, storage_file): self.storage_file = storage_file self.feeds = None if os.path.exists(storage_file): pkl = open(storage_file, 'r') self.feeds = cPickle.load(pkl) pkl.close() else: self.feeds = dict() def list(self): for f in self.feeds: yield f def load(self,url): self.rss = feedparser.parse(feed_url) if not self.feeds.has_key(feed_url): self.feeds[feed_url] = self.rss def get_new(self): new = list() for r in self.rss['entries']: if r not in self.feeds[ feed_url ][ 'entries' ]: new.append(r) self.feeds[feed_url]['entries'].extend(new) return new def dump(self): if len(self.feeds[feed_url]['entries']) > len(self.rss): self.feeds[feed_url]['entries'] = self.feeds[feed_url]['entries'][-1 * len(self.rss) : ] pkl = open(self.storage_file, 'w') cPickle.dump(self.feeds, pkl) pkl.close() if __name__ == '__main__': feed_url = sys.argv[1] storage = "/home/phaller/.newrss.pkl" feeds = feedster(storage) if feed_url == "-l": for r in feeds.list(): print r sys.exit() feeds.load(feed_url) for r in feeds.get_new(): print r.title feeds.dump()