1+ import requests
2+ import pygal
3+ from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
4+
5+ from operator import itemgetter
6+
7+ # Make an API call, and store the response.
8+ url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
9+ r = requests.get(url)
10+ print("Status code:", r.status_code)
11+
12+ # Process information about each submission.
13+ submission_ids = r.json()
14+ submission_dicts = []
15+ for submission_id in submission_ids[:30]:
16+ # Make a separate API call for each submission.
17+ url = ('https://hacker-news.firebaseio.com/v0/item/' +
18+ str(submission_id) + '.json')
19+ submission_r = requests.get(url)
20+ print(submission_r.status_code)
21+ response_dict = submission_r.json()
22+
23+ submission_dict = {
24+ 'title': response_dict['title'],
25+ 'link': 'http://news.ycombinator.com/item?id=' + str(submission_id),
26+ 'comments': response_dict.get('descendants', 0)
27+ }
28+ submission_dicts.append(submission_dict)
29+
30+ submission_dicts = sorted(submission_dicts, key=itemgetter('comments'),
31+ reverse=True)
32+
33+ for submission_dict in submission_dicts:
34+ print("\nTitle:", submission_dict['title'])
35+ print("Discussion link:", submission_dict['link'])
36+ print("Comments:", submission_dict['comments'])
37+
38+ titles, plot_dicts = [], []
39+ for submission_dict in submission_dicts:
40+ titles.append(submission_dict['title'])
41+ plot_dict = {
42+ 'value': submission_dict['comments'],
43+ 'label': submission_dict['title'],
44+ 'xlink': submission_dict['link'],
45+ }
46+ plot_dicts.append(plot_dict)
47+
48+ # Make visualization.
49+ my_style = LS('#333366', base_style=LCS)
50+ my_style.title_font_size = 24
51+ my_style.label_font_size = 14
52+ my_style.major_label_font_size = 18
53+
54+ my_config = pygal.Config()
55+ my_config.x_label_rotation = 45
56+ my_config.show_legend = False
57+ my_config.truncate_label = 15
58+ my_config.show_y_guides = False
59+ my_config.width = 1000
60+ my_config.y_title = 'Number of Comments'
61+
62+ chart = pygal.Bar(my_config, style=my_style)
63+ chart.title = 'Most Active Discussions on Hacker News'
64+ chart.x_labels = titles
65+
66+ chart.add('', plot_dicts)
67+ chart.render_to_file('hn_discussions.svg')
0 commit comments