我的Python自学之路

菜鸟笔记Python3——web API(一) Hacker N

2017-06-07  本文已影响160人  灵玉真人

参考教材

<Python编程——从入门到实践> 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 <br> # -*- 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

上一篇下一篇

猜你喜欢

热点阅读