def post ( self ): feed = db.get( db.Key( self.request.get( 'key' ) ) ) fetch = models.FetchModel() fetch.feed = feed try: d = feedparser.parse( feed.path ) story_time = datetime.datetime.fromtimestamp( time.mktime( d.entries[0].updated_parsed ) ) if feed.last_story != None and story_time > feed.last_story: # TODO: Parse stories! fetch.new_stories = 1 else: fetch.new_stories = 0 fetch.success = True feed.last_fetch = datetime.datetime.now() feed.put() except: run_diff = datetime.timedelta( days=config.FETCH_INTERVAL['days'], hours=config.FETCH_INTERVAL['hours'], minutes=config.FETCH_INTERVAL['minutes'] ) feed.last_fetch = feed.last_fetch + diff feed.put() fetch.new_stories = 0 fetch.success = False fetch.put()
def post ( self ): url = self.request.get( 'url' ).lower().strip() feeds = db.GqlQuery( "SELECT * FROM FeedModel WHERE path = :1", url ) feed = feeds.get() # Trial parse to see if it's really a feed & get the title title = "UNCHANGED" try: d = feedparser.parse( url ) title = d.feed.title # Just check it has a title except Exception, e: # TODO: Flash message here! self.redirect( '/subscribe' ) return
def get_feed(url): from vendor import feedparser # sanitizer whitelist _wl = ['object','param','embed'] feedparser._HTMLSanitizer.acceptable_elements.extend(_wl) _wl = ['flashvars'] feedparser._HTMLSanitizer.acceptable_attributes.extend(_wl) result = { 'url': url, 'parsed': None, 'articles': [], 'status': "404" } try: parsed = feedparser.parse(url) if parsed.feed: result['parsed'] = parsed.feed result['articles'] = parsed['entries'] result['status'] = "200" except: result['status'] = "500" return result