Python API的使用简述

news2024/11/26 6:22:56

文章目录

    • Web API
      • Git 和 GitHub
      • 使用 API 调用请求数据
      • 安装 requests
      • 处理响应 API
      • 处理响应字典
      • 监视API的速率限制
      • 使用 Pygal 可视化仓库
      • 改进Pygal图表
      • 添加自定义工具提示

本篇文章:我们叙述如何编写一个独立的程序,并对其获取的数据进行可视化。这个程序将使用 Web应用编程接口(API)自动请求网站的特点信息而不是整个网页,再对这些信息进行可视化。

Web API

Web API 是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互。这种请求称为APi调用。请求的数据将以易于处理的格式(如JSON或CSV)返货。依赖于外部数据源的大多数应用程序都依赖于API调用,如集成社交媒体网站的应用程序。

Git 和 GitHub

Git

分布式版本控制系统… …

GitHub

程序员协作开发项目网站… …

使用 API 调用请求数据

GitHub 的API 让我们能够通过API调用来请求各种信息。

https://api.github.com/search/repositories?q=language:python&sort=stars

这个调用返回GItHub当前托管了多少个Python项目,还有有关最受欢迎的Python仓库的信息。

第一部分:(https://api.github.com/) 将请求发送到GitHub网站中响应API调用的部分

第二部分:(searfch/respositories) 让API搜索GItHub上的所有仓库

responsitories 后面的问号指出我们要传递一个参数。q表示查询,而等号让我们能够开始指定查询 (q=) 。通过使用 language : python ,我们指出只想获取主要语言为 python的仓库的信息。

最后一部分:(&sort=stars) 执行项目按其获得的星级进行排序。

安装 requests

requests 包让python程序能够轻松地向网站请求信息以及检查返回的响应。

安装命令:

pip install --user requests

处理响应 API

我们来尝试编写一个程序,它执行 API 调用并处理结果,找出 GItHub 上星级最高的Python项目

# 导入requests 包
import requests

url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'

r = requests.get(url)
print("Starts code:",r.status_code)

response_dict = r.json()
print(response_dict.keys())

代码解析:

import requests 用于导入 requests 模块
然后存储API 将要调用的URL,然后使用 requests 来执行调用。
我们调用 get() 并将 url 传递给它,再将响应对象存储在变量当中。
响应对象包含一个名为 status_code 的属性,它让我们知道请求是否成功了(状态码为200表示成功)

API 返回的信息格式为JSON,因为们还使用json() 将这些信息转换为一个 python 字典。

执行结果:
在这里插入图片描述

处理响应字典

现在将存储在字典当中的api调用返回信息进行处理

import requests

URL ="https://api.github.com/search/repositories?q=language:python&sort=stars"

r = requests.get(URL)
print("Status code:", r.status_code)

response_dict = r.json()
print("Total repositories:",response_dict['total_count'])

#探索有关仓库的信息
repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))

#研究第一个仓库
repo_dict = repo_dicts[0]

for key in sorted(repo_dict.keys()):
    print(key)

代码解析:

total_count 指出了 github 总共包含了多少个python仓库
与’items’相关的是一个列表,其中包含很多字典,而每个字典都包含有关一个 Python仓库的信息。打印 repo_dicts 的长度用于知道我们获得了多少个仓库的信息。
repo_dicts 是为了更深入地了解返回的有关每个仓库的信息,将repo_dictss 中的第一个字典提取,并存储在变量 repo_dicts 中。打印该字典包含的键数,查看其中包含多少信息。

repo_dict 中包含的键有:
在这里插入图片描述

提取其中一些键所对应的值:

print("\nSelected information about first repository:")
print('Name:',repo_dict['name'])
print('Owner:',repo_dict['owner']['login'])
print('Stats:',repo_dict['stargazers_count'])
print('Repository',repo_dict['html_url'])
print('Created:',repo_dict['created_at'])
print('Updated:',repo_dict['updated_at'])
print('Description:',repo_dict['description'])

运行结果:
在这里插入图片描述

我们打印了表示第一仓库的字典中与很多键相关联的值,我们打印了项目的名称,而项目的名称是用一个字典来表示的,所以我们使用关键字 Owner来访问表示所有者的字典,再使用 key来获取所有者的登录名。
该项目的名称为:public-api,所有用户Owner: public-apis。其中有 278863个用户给这个项目加星。
Repository 是该项目的 URL,而Created是其创建时间,Updated是其最近更新时间。

如果你想提取更多的其他项目相关信息,可以在提取之前,加一层循环。

print("\nSelected information about first repository:")

for repo_dict in repo_dicts:

    print('Name:',repo_dict['name'])
    print('Owner:',repo_dict['owner']['login'])
    print('Stats:',repo_dict['stargazers_count'])
    print('Repository',repo_dict['html_url'])
    print('Created:',repo_dict['created_at'])
    print('Updated:',repo_dict['updated_at'])
    print('Description:',repo_dict['description'])

监视API的速率限制

大多数 API 都存在速率限制,即你在特定时间内可执行的请求数存在限制。要获悉GitHub的限制,可以在浏览器中录入 :https://api.github.com/rate_limit

在这里插入图片描述

在这条信息中 : search :{
“limit” :10
}
可得知极限为每分钟10个请求,而在当前的一分钟内,我们还可以发起10个请求,即 “remaining”:8

使用 Pygal 可视化仓库

为了更方便的查阅信息,我们将其进行视图可视化

希望将信息以视图方式展示,需要先导入 pygal包。

当然!如果你用 pycharm 编辑代码,别忘了在集成工具中进行安装

import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS

#用于存储包含图表信息的两个空列表
names,stars =[],[]

for repo_dict in repo_dicts:
    names.append(repo_dict['name'])
    stars.append(repo_dict['stargazers_count'])


	my_style = LS('#333366',base_style =LCS)
    chart = pygal.Bar(style = my_style,x_label_rotation =45,show_legend =False)
    chart.title = 'Most-Starred Python Projects on GitHub'
    chart.x_labels = names

    chart.add('',stars)
    chart.render_to_file('python_repos.svg')

这段代码也是基于之前的demo继续加的内容,这里不在进行过多赘述,如果有感兴趣的小伙伴可以自行深究一下,但内容其实还是简单的。

这里在看一下运行效果:
在这里插入图片描述

图表可视化成功之后,我们继续迭代。

改进Pygal图表

下面我们对图表的样式进行改造。

我们需要进行多方面的定制,因此先来稍微调整代码的结构,创建一个配置对象,在其中包含要传递给Bar() 的所有定制:

names,stars =[],[]

for repo_dict in repo_dicts:
    names.append(repo_dict['name'])
    stars.append(repo_dict['stargazers_count'])

    my_style = LS('#333366',base_style =LCS)
    
    #创建配置对象
    my_config = pygal.Config()
    my_config.x_label_rotation = 45
    my_config.show_legend = False
    my_config.title_font_size = 24
    my_config.label_font_size = 14
    my_config.major_label_font_size = 18
    my_config.truncate_label = 15
    my_config.show_y_guides = False
    my_config.width = 1000
    
    
    chart = pygal.Bar(my_config,style = my_style)
    chart.title = 'Most-Starred Python Projects on GitHub'
    chart.x_labels = names

    chart.add('',stars)
    chart.render_to_file('python_repos.svg')

在这里插入图片描述

添加自定义工具提示

在pygal中,将鼠标指向条形将显示它表示的信息,这通常称为工具提示。

 chart = pygal.Bar(my_config,style = my_style,x_label_rotation =45,show_legend=False)

    chart.title = 'Python projects'
    chart.x_labels = ['httpie','djange','flask']

    plot_dicts = [
        {'value': 16101,'label':'Description of httpie.'},
        {'value': 15028,'label':'Description of django.'},
        {'value': 14798,'label':'Description of flask.'},
    ]

    chart.add('',plot_dicts)
    chart.render_to_file('bar_descriptions.svg')

运行效果:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1444394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件上传总结:用原生解决前端文件上传操作(单个,多个,大文件切片)

目录 第一章 前言 第二章 理解文件上传的对象 2.1 如何利用原生实现 2.2 认识理解文件上传的四个对象 2.2.1 file对象 2.2.2 blob对象 2.2.3 formData对象 2.2.4 fileReader对象 2.2.4.1 了解fileReader对象基本属性 2.2.4.2 了解 fileReader对象基本方法 2.2.4.3…

[office] Excel2019函数MAXIFS怎么使用?Excel2019函数MAXIFS使用教程 #知识分享#微信#经验分享

Excel2019函数MAXIFS怎么使用?Excel2019函数MAXIFS使用教程 Excel2019函数MAXIFS怎么使用?这篇文章主要介绍了Excel2019函数MAXIFS使用教程,需要的朋友可以参考下 在今年,Excel除了新版本Excel2019,其中有一个新功能MAXIFS函数&am…

知识价值2-什么是IDE?新手用哪个IDE比较好?

IDE是集成开发环境(Integrated Development Environment)的缩写,是一种软件应用程序,旨在提供集成的工具集,以方便开发人员进行软件开发。IDE通常包括代码编辑器、编译器、调试器和其他工具,以支持软件开发…

使用耳机壳UV树脂制作一个耳机壳需要多长时间?

使用耳机壳UV树脂制作一个耳机壳所需的时间取决于多个因素,包括工艺流程、加工方式、设备和技术水平等。一般来说,制作一个耳机壳需要数小时到数天不等。 以下是影响制作时间的几个主要因素: 获取耳模时间:获取耳模的时间取决于…

最适合新手的SpringBoot+SSM项目《苍穹外卖》实战—(一)项目概述

黑马程序员最新Java项目实战《苍穹外卖》,最适合新手的SpringBootSSM的企业级Java项目实战。 项目简介 《苍穹外卖》项目的定位是一款为餐饮企业(餐厅、饭店)定制的软件产品。该项目是一个在线外卖订购系统,顾客可以通过网站或者…

RabbitMQ的延迟队列实现[死信队列](笔记一)

关于死信队列的使用场景不再强调,只针对服务端配置 注意: 本文只针对实现死信队列的rabbitMQ基本配置步骤进行阐述和实现 目录 1、docker-compose 安装rabbitMq2、查看对应的版本及插件下载3、安装插件和检测 1、docker-compose 安装rabbitMq a、使用d…

错误的集合(力扣刷题)

个人主页(找往期文章包括但不限于本期文章中不懂的知识点):我要学编程(ಥ_ಥ)-CSDN博客 由于作者比较菜,还没学malloc这个函数,因此这个题目只写一些与原题大致的思路。 题目链接:645. 错误的集合 - 力扣…

任务管理软件的实用价值及优选推荐:提升工作效率的利器

任务管理软件是一种用于组织任务、将任务分配给个人并监控其进展的软件。该软件可以帮助确保任务在预算内按时完成。它在协同工作环境中特别有用,在这种环境中多人在处理需要跟踪和监视的任务。无论是初创公司、中小型企业还是大型组织,都可以从任务管理…

【书生·浦语大模型实战营】学习笔记1

大模型成为发展通用人工智能的重要途经 专用模型:针对特定任务,一个模型解决一个问题 通用大模型:一个模型应对多种任务、多种模态 书生浦语大模型系列 上海人工智能实验室 轻量级、中量级、重量级 7B 和 123B的轻量级和中量级大模型都是开源…

统计数字出现次数的数位动态规划解法-数位统计DP

在处理数字问题时,我们经常遇到需要统计一定范围内各个数字出现次数的情况。这类问题虽然看起来简单,但当数字范围较大时,直接遍历统计的方法就变得不再高效。本文将介绍一种利用数位动态规划(DP)的方法来解决这一问题,具体来说,是统计两个整数a和b之间(包含a和b)所有…

【开源】JAVA+Vue.js实现车险自助理赔系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车辆档案模块2.4 车辆理赔模块2.5 理赔照片模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 车辆表3.2.3 理赔表3.2.4 理赔照片表 四、系统展示五、核心代码5.1 查询车…

杨辉三角的变形(数学)

题目 import java.util.Scanner;public class Main {public static void main(String[] args) { // 1 // 1 1 1 // 1 2 3 2 1 // 1 3 6 7 6 3 1 // 1 4 10 16 19 16 10 4 1Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] res new int[n1][2*n];for(i…

《统计学简易速速上手小册》第3章:概率分布与抽样技术(2024 最新版)

文章目录 3.1 重要的概率分布3.1.1 基础知识3.1.2 主要案例:顾客到访分析3.1.3 拓展案例 1:产品缺陷率分析3.1.4 拓展案例 2:日销售额预测 3.2 抽样方法与推断3.2.1 基础知识3.2.2 主要案例:顾客满意度调查3.2.2 拓展案例 1&#…

Java项目:19 基于SpringBoot的医院管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 医院管理系统 分为三个角色 管理员、医生、病人 管理员的主要功能:系统管理、医生管理、患者管理、预约管理、病史管理、住院信息管理、管…

C++ | string类按位赋值小技巧

一切的起因是string类的谜之初始化。 在写代码的时候&#xff0c;我发现即使没有用字符串初始化string对象&#xff0c;也可以对string对象进行下标操作&#xff0c;就像这样&#xff1a; #include<iostream> #include<string> using namespace std; int main() {…

【Go】一、Go语言基本语法与常用方法容器

GO基础 Go语言是由Google于2006年开源的静态语言 1972&#xff1a;&#xff08;C语言&#xff09; — 1983&#xff08;C&#xff09;—1991&#xff08;python&#xff09;—1995&#xff08;java、PHP、js&#xff09;—2005&#xff08;amd双核技术 web端新技术飞速发展&…

探索Spring Validation:优雅实现后端数据验证的艺术

在现代Web应用开发中&#xff0c;数据验证是一项至关重要的任务&#xff0c;确保应用程序接收到的用户输入符合预期规范&#xff0c;不仅能够提高系统的健壮性&#xff0c;也能有效防止潜在的安全漏洞。Spring Framework通过其内置的Spring Validation模块&#xff0c;为我们提…

案例:CentOS8 在 MySQL8.0 实现半同步复制

异步复制 MySQL 默认的复制即是异步的&#xff0c;主库在执行完客户端提交的事务后会立即将结果返给给客户端&#xff0c;并不关心从库是否已经接收并处理&#xff0c;这样就会有一个问题&#xff0c;主节点如果 crash 掉了&#xff0c;此时主节点上已经提交的事务可能并没有传…

进程间通信-消息队列

消息队列的公共资源是链表结构。 通信双方不会和消息队列进行挂接&#xff0c;而是像管道一样&#xff0c;访问内存中的消息队列。 消息队列由操作系统维护&#xff0c;但是由通信的某一方创建和删除 通信双方都需要获取到消息队列&#xff0c;和共享内存一样。 当发送方有数据…