e782c499841ccee207e13313a1931ca4d51bb229
[iron-blogger] / report.py
1 import yaml
2 import feedparser
3 import datetime
4 from dateutil.parser import parse
5 import dateutil.tz as tz
6
7 with open('bloggers.yml') as f:
8     users = yaml.safe_load(f.read())
9
10 log = {}
11
12 START = datetime.datetime(2009, 12, 21, 6)
13
14 def parse_published(pub):
15     return parse(pub).astimezone(tz.tzlocal()).replace(tzinfo=None)
16
17 def get_date(post):
18     if 'published' in post:
19         return post.published
20     return post.updated
21
22 def get_link(post):
23     if 'links' in post:
24         links = dict((l.rel, l) for l in post.links if 'html' in l.type)
25         if 'self' in links:
26             return links['self'].href
27         elif 'alternate' in links:
28             return links['alternate'].href
29     if 'href' in post:
30         return post.href
31     return None
32
33 def parse_feeds(weeks, uri):
34     feed = feedparser.parse(uri)
35     for post in feed.entries:
36         date = parse_published(get_date(post))
37
38         if date < START:
39             continue
40         wn = (date - START).days / 7
41
42         while len(weeks) <= wn:
43             weeks.append([])
44         weeks[wn].append(dict(
45                 date=date,
46                 title=post.title,
47                 url=get_link(post)))
48
49 for (username, u) in users.items():
50     weeks = []
51     print "[%s]" % (username)
52     for l in u['links']:
53         parse_feeds(weeks, l[2])
54     log[username] = weeks
55     for (i, w) in enumerate(weeks):
56         print " [%d]: %s" % (i, w)
57
58 with open('out/report.yml', 'w') as f:
59     yaml.safe_dump(log, f)

Benjamin Mako Hill || Want to submit a patch?