示例#1
0
class CastUpdater(object):
    instance = None
    PERIOD = 300
    
    @staticmethod
    def getInstance():
        if not CastUpdater.instance:
            CastUpdater.instance = CastUpdater()
        return CastUpdater.instance

    def __init__(self):
        self.sched = Scheduler(self.update, CastUpdater.PERIOD)
        self.recent_entries = []
    
    def start(self):
        self.sched.start()
        self.next_update_time = datetime.today() + timedelta(seconds=CastUpdater.PERIOD)
        
    def running(self):
        return self.sched.timer != None

    def update(self):
        self.last_update_time = datetime.today()
        self.next_update_time = datetime.today() + timedelta(seconds=CastUpdater.PERIOD)
        self.recent_entries = []
        
        feeds = Feed.objects.all()
        for feed in feeds:
            d = feedparser.parse(feed.url)
            print feed.url
            feed.title = d.feed.title
            feed.save()
            
            for e in d.entries:
                updated_at = datetime.today()
                if 'updated_parsed' in e:
                    updated_at = datetime.fromtimestamp((time.mktime(e.updated_parsed))) + timedelta(hours=9)
                
                link = e.link
                if '/http://' in e.link:
                    link = link[link.find('/http://') + 1:]
                try:
                    Entry.objects.get(link=link)
                except Entry.MultipleObjectsReturned:
                    pass
                except Entry.DoesNotExist:
                    entry = Entry.objects.create(feed=feed, title=e.title, link=link, updated_at=updated_at)
                    self.recent_entries.append(entry)
    
        UpdateLog.objects.create(count=len(self.recent_entries))
    
    def count(self):
        if not self.recent_entries: return 0
        
        return len(self.recent_entries)
示例#2
0
 def __init__(self):
     self.sched = Scheduler(self.update, CastUpdater.PERIOD)
     self.recent_entries = []