參考教材
<Python編程——從入門到實(shí)踐> chapter17 web API
引言
什么是Web API?
如果我們想要獲取一篇Blog癣蟋,輸入http://localhost:9000/blog/123 ,就可以看到id為123的Blog頁面狰闪,但這個結(jié)果是HTML頁面疯搅,它同時混合包含了Blog的數(shù)據(jù)和Blog的展示兩個部分。對于用戶來說埋泵,閱讀起來沒有問題幔欧,但是,如果機(jī)器讀取丽声,就很難從HTML中解析出Blog的數(shù)據(jù)礁蔗。
如果一個URL返回的不是HTML,而是機(jī)器能直接解析的數(shù)據(jù)雁社,這個URL就可以看成是一個Web API浴井。比如,讀取http://localhost:9000/api/blogs/123 霉撵,如果能直接返回Blog的數(shù)據(jù)磺浙,那么機(jī)器就可以直接讀取。
REST就是一種設(shè)計API的模式徒坡。最常用的數(shù)據(jù)格式是JSON撕氧。由于JSON能直接被JavaScript讀取,所以喇完,以JSON格式編寫的REST風(fēng)格的API具有簡單伦泥、易讀、易用的特點(diǎn)锦溪。
編寫API有什么好處呢奄喂?由于API就是把Web App的功能全部封裝了,所以海洼,通過API操作數(shù)據(jù)跨新,可以極大地把前端和后端的代碼隔離,使得后端代碼易于測試坏逢,前端代碼編寫更簡單域帐。
--摘自廖雪峰,《用Python編寫web API的教程》
我們調(diào)用網(wǎng)站 Hacker News 的API https://hacker-news.firebaseio.com/v0/topstories.json
抓取Hacker News 上當(dāng)前熱門文章的ID是整,排名肖揣, 評論等信息,并將其可視化
由于這里沒有什么太復(fù)雜的東西浮入,需要解釋的都在注釋里了龙优,直接貼代碼好了
__author__ = 'Administrator'
#! /usr/bin/python <br> # -*- coding: utf8 -*-
import requests
from operator import itemgetter
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
#執(zhí)行API調(diào)用并儲存響應(yīng)
url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print("Status Code : ",r.status_code)
# 處理有關(guān)每篇文章的信息
submisssion_ids = r.json()
submisssion_dicts = []
plot_dicts =[]
names = []
for submisssion_id in submisssion_ids[:10]:
#對每一篇文章都執(zhí)行一個API調(diào)用
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),#指定的鍵存在時返回相應(yīng)的值,不存在時返回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')