美文网首页我的Python自学之路
菜鸟笔记Python3——web API(一) Hacker N

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

作者: 灵玉真人 | 来源:发表于2017-06-07 08:49 被阅读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

    相关文章

      网友评论

        本文标题:菜鸟笔记Python3——web API(一) Hacker N

        本文链接:https://www.haomeiwen.com/subject/kllofxtx.html