菜鸟笔记Python3——web API(一) Hacker News 的热门文章

参考教材

chapter17 web API

引言

什么是Web API?
如果我们想要获取一篇Blog,输入http://localhost:9000/blog/123 ,就可以看到id为123的Blog页面,但这个结果是HTML页面,它同时混合包含了Blog的数据和Blog的展示两个部分。对于用户来说,阅读起来没有问题,但是,如果机器读取,就很难从HTML中解析出Blog的数据。
如果一个URL返回的不是HTML,而是机器能直接解析的数据,这个URL就可以看成是一个Web API。比如,读取http://localhost:9000/api/blogs/123 ,如果能直接返回Blog的数据,那么机器就可以直接读取。
REST就是一种设计API的模式。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以,以JSON格式编写的REST风格的API具有简单、易读、易用的特点。
编写API有什么好处呢?由于API就是把Web App的功能全部封装了,所以,通过API操作数据,可以极大地把前端和后端的代码隔离,使得后端代码易于测试,前端代码编写更简单。
--摘自廖雪峰,《用Python编写web API的教程》

我们调用网站 Hacker News 的API https://hacker-news.firebaseio.com/v0/topstories.json
抓取Hacker News 上当前热门文章的ID,排名, 评论等信息,并将其可视化

由于这里没有什么太复杂的东西,需要解释的都在注释里了,直接贴代码好了

__author__ = 'Administrator'
#! /usr/bin/python 
# -*- coding: utf8 -*- import requests from operator import itemgetter import pygal from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS #执行API调用并储存响应 url = 'https://hacker-news.firebaseio.com/v0/topstories.json' r = requests.get(url) print("Status Code : ",r.status_code) # 处理有关每篇文章的信息 submisssion_ids = r.json() submisssion_dicts = [] plot_dicts =[] names = [] for submisssion_id in submisssion_ids[:10]: #对每一篇文章都执行一个API调用 url = 'https://hacker-news.firebaseio.com/v0/item/'+str(submisssion_id)+'.json' submisssion_r = requests.get(url) # print("Status Code: ",submisssion_r.status_code) response_dict = submisssion_r.json() submisssion_dict = { 'label': response_dict['title'], 'xlink': response_dict['url'], # 'link': "http://news.ycombinator.com/item?id="+str(submisssion_id)+"", 'value': response_dict.get('descendants',0),#指定的键存在时返回相应的值,不存在时返回0 } names.append(submisssion_dict['label']) submisssion_dicts.append(submisssion_dict) submisssion_dicts = sorted(submisssion_dicts,key=itemgetter('value'),reverse=True) my_comfig = pygal.Config() my_comfig.title = 'Top 10 Stories From Hacker-News' my_comfig.x_label_rotation = 45 my_comfig.width = 1000 my_style = LS('#883333',base_style=LCS) chart = pygal.Bar(my_comfig,style=my_style) chart.x_labels = names chart.add('stories',submisssion_dicts) chart.render_to_file('Top stories.svg')

总结 虽然照猫画虎地完成了这个练习,但是我依然不是很了解API的调用,尤其是,压根不知道哪些网站有API以及怎么找到它们╮(﹀_﹀)

Github 链接

https://github.com/JesuisCelestin/python3-web-API-17.3

你可能感兴趣的:(菜鸟笔记Python3——web API(一) Hacker News 的热门文章)