Added support for ETag and Last-Modified headers.
[~jspiros/reader.git] / utils.py
1 from .models import Feed, Entry
2 import datetime
3 import feedparser
4
5
6 def refresh_feed(feed, save=True):
7         if feed.alive:
8                 parsed = feedparser.parse(feed.url, etag=feed.etag, modified=(feed.modified.timetuple() if feed.modified else None))
9                 if parsed.get('status', None) == 304:
10                         return
11                 if parsed.get('status', None) == 301 and parsed.has_key('href'):
12                         feed.url = parsed.href
13                 if parsed.get('status', None) == 410:
14                         feed.alive = False
15                 if parsed.has_key('etag'):
16                         feed.etag = parsed.etag
17                 if parsed.has_key('modified'):
18                         feed.modified = datetime.datetime(*(parsed.modified[0:6]))
19                 feed.title = parsed.feed.get('title', feed.url)
20                 feed.updated = datetime.datetime(*(parsed.feed.get('updated_parsed', datetime.datetime.now().timetuple())[0:6]))
21                 if save:
22                         feed.save()
23
24
25 def add_feed(url):
26         feed = Feed(url=url)
27         refresh_feed(feed)
28         return feed