前言
??上篇文章我们给大家介绍了处理数据的另一种形式——json格式的处理,主要包括数据的下载、提取相应的数据、将数据转换成相应的格式、绘制收盘分析折线图、以及进一步对我们的数据进行相应的分析,最后通过收盘价数据仪表盘。本文开始给大家介绍API的相关使用。学过java的都知道,Web API是网站的一部分,常用于使用非常具体的URL请求特定信息的程序交互。这种请求称为API调用,正如集成社交媒体网站的应用程序。我们仍然是以上篇文章提到的数据作为本文的研究对象。首先介绍Git和GitHub的具体使用。
一、使用Web API
??本文介绍的可视化是基于Git Hub的信息,这是一个让程序员能够协作开发项目的网站。我们将使用Git Hub的API来请求有关该网站的Python项目信息,然后使用Pygal生产交互式可视化,以呈现这些项目的受欢迎程度。在这里提醒大家的是我们会用到Pygal第三方库,希望大家可以提前下载好。
1、Git和GitHub
??GitHub的名字源自Git,Git是一个分布式版本控制系统,让程序员团队能够协助开发项目。Git帮助大家管理为项目所做的工作,避免一个人所做的修改影响其他人所做的修改。你在项目中实现新功能时,Git将跟踪你的每个文件所做的修改。确定代码可行后,你提交所做的修改,而Git将记录项目最新的状态。如果我们犯了错,想撤销所做的修改,可轻松地返回以前的任何可行状态。GitHub上的项目都存储在仓库中,后者包含与项目相关联的一切:代码、项目参与者的信息、问题或bug报告等。 ??对于喜欢的项目,GitHub用户可给它加星(star)以表示支持,用户还可跟踪他可能想使用的项目。在本文,我们将编写一个程序,它自动下载GitHub上星级最高的Python项目的信息,并将这些信息进行可视化。
2、使用API调用请求数据
??GitHub的API让你能够通过API调用来请求各种信息。要知道API调用是什么样的,请打开浏览器在地址栏中输入如下地址并按回车键,具体网址如下:
https://api.github.com/search/repositories?q=language:python&sort=stars
??这个调用返回GitHub当前托管了多少个Python项目,还有有关最受欢迎的Python仓库的信息。下面来仔细研究这个调用。第一部分https://api.github.com/ 将请求发送到GitHub网站中响应API调用的部分;接下来的一部分search/repositories 让API搜索GitHub上的所有仓库。repositories后面的问号指出我们要传递一个实参。q表示查询,而等号让我们能够开始指定查询(q=)。通过使用language:python ,我们指出只想获取主要语言为Python的仓库的信息。最后一部分(&sort=stars)指定将项目按下其获得的星级进行排序。接下来显示了响应的前几行。从响应可知,该URL并不适合人工输入,具体如情况如下: ??我们从上图中的total_count: 可知,在本文撰写的时候,该GitHub总共有8634290个Python项目。incomplete_results 的值为true,由此我们可以发现我们的请求不是完成成功的。当然,我们也可以显示相应的items ,其中包含了GitHUb中最受欢迎的Python项目的详细信息。
3、安装requests
??requests包让Python能够轻松地向网站请求信息以及检查返回的响应。要安装requests,要安装requests,首先在黑屏终端输入以下命令进行安装:
> pip install --user requests
??具体执行结果如下: ??这是我已经安装黄成功的页面。大家安装成功后,在黑屏终端输入以下命令即可查看自己requests的详细版本信息:
pip list
??本人安装的requests的相关版本如下:
4、处理API响应
??接下来我们编写一个程序,它执行API调用并处理结果,找出GitHub中上星级最高的Python项目:
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(response_dict.keys())
??我们首先导入了了刚刚下载的requests的第三方模块,接着我们调用了API中的URL,然后使用requests来执行调用。我们调用get() 并将URL传递给它,在将响应对象存储在变量r中。响应对象包含一个名为status_code 的属性,它让我们知道请求是否成功(状态码200表示是请求成功)。最后,我们打印了status_code ,核实调用是否成功了。 ??这个API返回了JSON格式的信息,因此我们使用方法json() 将这些信息转换为一个Python字典。我们将转换得到的字典存储在response_dict 中。最后我们打印了response_dict 中的键,具体输出如下: ??从图中执行的结果来看,状态码为200,因此,我们的调用结果是成功的。响应字典只包含了三个键items 、total_count 和incomplete_results 。不过这里需要我们注意的是:像这样的简单调用应该会返回完整的结果集,因此完全可以忽略与incomplete_results 相关联的值。但执行更复杂的API调用时,程序应检查这个值。
5、处理响应字典
??将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]
print("\nKeys:", len(repo_dict))
for key in sorted(repo_dict.keys()):
print(key)
??首先我们打印了与total_count 相关联的值,它指出了github总共有多少个Python仓库。与items 相关联的值是一个列表,其中包含很多字典,而每个字典都包含有关一个Python的仓库信息。接着,我们将这个字典列表存储在repo_dicts 中。接下来,我们打印repo_dicts 的长度,以获悉我们获得了多少个仓库的信息。为了更深入地了解返回有关每个仓库的信息,我们提取了repo_dicts 中的第一个字典,并将其存储在repo_dict 中,接下来,我们答应这个字典包含的键数,看看其中有多少信息,最后我们打印了这个字典所有的键,并且查看了其中包含的相关信息,具体实现情况如下: ??GitHub的API返回有关每个仓库的大量信息:repo_dict 包含68个键。通过仔细查看这些键,可大致知道可提取有关项目的哪些信息,当然,要准确地获悉API将返回哪些信息,我们要么是需要阅读文档,要么像此处这样使用代码来查看这些信息。接下来,我们提取repo_dict 中与一些键相关联的值,具体实现如下:
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]
print("\nSelected information about first repository:")
print("Name:", repo_dict['name'])
print("Owner:", repo_dict['owner']['login'])
print("Stars:", 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来获取所有者的登录名。其次,我们打印项目获得了多好个星的评价,以及项目在github仓库的url。接下来,我们显示项目的创建时间和最后一次更新的时间,最后,我们打印了仓库的描述,输出详情如下: ??从上述的输出可以看出:在本人撰写这篇文章的时候,Github上星级最高Python项目为public-apis ,其所有者的用户为public-apis ,有174273多个github用户给这个项目加星。我们同时也可以看出这个项目的仓库的url,其创建时间为2016年3月,刚好今天(2022-01-16)就更新了。代码最后指出了public-apis是一个免费的APIs容器。
6、概述最受欢迎的仓库
??对这些数据进行可视化时,我们需要涵盖多个仓库。下面我们编写一个循环,打印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]
print("\nSelected information about each repository:")
for repo_dict in repo_dicts:
print("\nName:", repo_dict['name'])
print("Owner:", repo_dict['owner']['login'])
print("Stars:", 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'])
??首先我们打印了一条说明性消息。其次,我们遍历了repo_dicts 中的所有字典。在这个循环中,我们打印每个项目的名称、所有者、星级、在Github上的url以及描述: ??上述输出中有一些有趣的项目,可能值得再看一眼,但建议大家不要在这上面花费太多时间,因为我们即将创建的可视化可让我们更容易地看清结果。
7、监视API的速率限制
??大多数API都存在速率限制,即你在特定时间内可执行的请求数存在限制。要获悉我们是否接近了github的限制,我们需要在浏览器中输入以下地址,我们将看到类似于下面的响应:
https://api.github.com/rate_limit
??具体响应如下: ??我们关心的信息是搜索API的速率限制。当然,我们也可以看见极限为每分钟10个请求,而在当前这一分钟内,我们还可执行10个请求。reset指的是配额将重置的Unix时间或新纪元时间。用完配额后,我们将收到一条简单的响应,由此可知已经到达API极限。到达极限后,我们必须等待配额重置。这里需要注意的是:很多API要求我们注册获得秘钥之后才能执行API调用。如果注册后,我们能够获得API秘钥后,配额将高的多。
总结
??上篇文章我们给大家介绍了处理数据的另一种形式——json格式的处理,主要包括数据的下载、提取相应的数据、将数据转换成相应的格式、绘制收盘分析折线图、以及进一步对我们的数据进行相应的分析,最后通过收盘价数据仪表盘。本文开始给大家介绍API的相关使用,主要介绍了如何使用Web API,包括git和github中的使用、使用API调用请求数据以及处理API响应、处理响应字典以及目前常用的仓库;最后介绍了监视API的速率限制。Python是一门注重实际操作的语言,它是众多编程语言中最简单,也是最好入门的。当你把这门语言学会了,再去学习java、go以及C语言就比较简单了。当然,Python也是一门热门语言,对于人工智能的实现有着很大的帮助,因此,值得大家花时间去学习。生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!!
|