Python API的使用简述

文章目录

    • 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 requestsurl = '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 requestsURL ="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 = nameschart.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 = 45my_config.show_legend = Falsemy_config.title_font_size = 24my_config.label_font_size = 14my_config.major_label_font_size = 18my_config.truncate_label = 15my_config.show_y_guides = Falsemy_config.width = 1000chart = pygal.Bar(my_config,style = my_style)chart.title = 'Most-Starred Python Projects on GitHub'chart.x_labels = nameschart.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://xiahunao.cn/news/2779289.html

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

相关文章

《统计学简易速速上手小册》第4章:假设检验(2024 最新版)

文章目录 4.1 假设检验的基本概念4.1.1 基础知识4.1.2 主要案例:新饮料偏好测试4.1.3 拓展案例 1:教育方法的效果比较4.1.4 拓展案例 2:工作满意度调查 4.2 常见的假设检验4.2.1 基础知识4.2.2 主要案例:产品包装改进的效果评估4.…

考研数据结构笔记(7)

循环链表、静态链表、顺序表和链表的比较 循环链表循环单链表循环双链表 静态链表什么是静态链表如何定义一个静态链表?简述基本操作的实现 顺序表和链表的比较逻辑结构物理结构/存储结构数据的运算/基本运算创建销毁增加、删除查找 循环链表 循环单链表 循环双链表…

前端JavaScript篇之ajax、axios、fetch的区别

目录 ajax、axios、fetch的区别AjaxAxiosFetch总结注意 ajax、axios、fetch的区别 在Web开发中,ajax、axios和fetch都是用于与服务器进行异步通信的技术,但它们在实现方式和功能上有所不同。 Ajax 定义与特点:Ajax是一种在无需重新加载整个…

2023年全国职业院校技能大赛软件测试赛题第3套

2023年全国职业院校技能大赛 软件测试赛题第3套 赛项名称: 软件测试 英文名称: Software Testing 赛项编号: GZ034 归属产业: 电子与信息大类 …

第2集《佛说四十二章经》

请大家打开讲议第二面,二、经文大意。 在正式讲解经文之前,先说明本经的修学纲要。本经的经文大意共分三段,第一段是总标,第二段是别明,第三段是结劝。总标又分两小段,先看第一小段。 是经顿渐兼收。首唱…

抛弃Spring Cloud Gateway,得物 使用Netty架构100Wqps网关

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近,尼恩指导一个小伙伴简历,写了一个《高并发网关项目》,此项目帮这个小伙拿到 字节/阿里/…

洛谷p3435 OKR-Periods of Words

题目链接 反思 我们之前用 k m p kmp kmp都是用到前缀字串的最长匹配长度,本题则需要利用 p m t pmt pmt数组找到最短匹配长度 思路 题目中匹配前缀的意思是,在字符串 a a a的前缀中,某个前缀自身重复两遍后能把 a a a包括进来 如图&…

【Linux】make和Makefile

目录 make和Makefile make和Makefile 我们使用vim编辑器的时候,在一个文件里写完代码要进行编译,要自己输入编译的指令。有没有一种可以进行自动化编译的方法——makefile文件,它可以指定具体的编译操作,写好makefile文件&#x…

Hive窗口函数详解

一、 窗口函数知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路: LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowing…

奶茶点餐|奶茶店自助点餐系统|基于微信小程序的饮品点单系统的设计与实现(源码+数据库+文档)

奶茶店自助点餐系统目录 目录 基于微信小程序的饮品点单系统的设计与实现 一、前言 二、系统功能设计 三、系统实现 1、商品信息管理 2、商品评价管理 3、商品订单管理 4、用户管理 四、数据库设计 1、实体ER图 2、具体的表设计如下所示: 五、核心代码 …

云计算运维 · 第三阶段 · 代码上线案例

学习b记 第三阶段 持续集成案例 这一章做一个小的案例,git、gitlab、jenkins、sonarqube、maven、shell把这周学的一整个流程串联起来做一个完整的代码发布流程案例,这一部分东西比较多,相对于之前的笔记这个会做的仔细一点。#嘿嘿回家就是…

3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程

标题略有夸张的表达了接下来这一套确实很简单,相较于直接下载或者通过秋叶包更新而言。大大节省磁盘空间,和下载时间。 这篇教程不需要你有: 代码基础。都是复制粘贴就完事。魔法。 这篇教程默认你已经有: 1. 本地能够正常使用…

【计算几何】确定两条连续线段向左转还是向右转

确定两条连续线段向左转还是向右转 目录 一、说明二、算法2.1 两点的叉积2.2 两个段的叉积 三、旋转方向判别3.1 左转3.2 右转3.3 共线判别 一、说明 如果是作图,或者是判别小车轨迹。为了直观地了解,从当前点到下一个点过程中,什么是左转、…

Peter算法小课堂—背包问题

我们已经学过好久好久的动态规划了,动态规划_Peter Pan was right的博客-CSDN博客 那么,我用一张图片来概括一下背包问题。 大家有可能比较疑惑,优化决策怎么优化呢?答案是,滚动数组,一个神秘而简单的东西…

科普:工业物联网的八个模块,一看就明白了。

工业物联网(Industrial Internet of Things,IIoT)是将传感器、设备、网络和云计算等技术应用于工业领域的物联网应用。它由多个模块构成,这些模块协同工作,实现对工业设备和系统的监测、控制和优化。以下是工业物联网常…

根据三维点坐标使用matplotlib绘制路径轨迹

需求:有一些点的三维坐标(x,y,z),需要绘制阿基米德螺旋线轨迹图。 points.txt 0.500002, -0.199996, 0.299998 0.500545, -0.199855, 0.299338 0.501112, -0.199688, 0.298704 0.501701, -0.199497, 0.298…

娱乐直播APP开发:引领潮流,创新无界

随着互联网技术的飞速发展,娱乐直播APP已经成为现代人生活的重要组成部分。它以其独特的互动性、即时性和个性化,吸引了大量用户。本文将深入探讨娱乐直播APP开发的关键要素,以及如何在这个竞争激烈的市场中脱颖而出。 一、娱乐直播APP的核心…

微信小程序(四十一)wechat-http的使用

注释很详细,直接上代码 新增内容: 1.模块下载 2.模块的使用 在终端输入npm install wechat-http 没有安装成功vue的先看之前的一篇 微信小程序(二十)Vant组件库的配置- 如果按以上的成功配置出现如下报错先输入以下语句 npm co…

Java安全 CC链1分析(Lazymap类)

Java安全 CC链1分析 前言CC链分析CC链1核心LazyMap类AnnotationInvocationHandler类 完整exp: 前言 在看这篇文章前,可以看下我的上一篇文章,了解下cc链1的核心与环境配置 Java安全 CC链1分析 前面我们已经讲过了CC链1的核心ChainedTransf…

数据结构——5.4 树、森林

5.4 树、森林 概念 树的存储结构 双亲表示法 孩子表示法 孩子兄弟表示法(二叉树表示法): 二叉树每个结点有三个变量 ① 二叉树结点值:原树结点的值 ② 二叉树左孩子:原树结点的最左孩子 ③ 二叉树右孩子&#xff1a…