PythonPython和API读取

什么原因会产生白癜风 http://m.39.net/baidianfeng/a_4394583.html

接着Python和API:读取公共数据的成功组合-第一篇文章,我们继续讲后面的流程。

自定义标题

使用API时可能遇到的另一个标准是使用自定义标头。这些通常以开头X-,但不是必需的。API开发人员通常使用自定义标头从客户端发送或请求其他自定义信息。

有趣的事实:一些公司花了很多时间才变得有趣和创新,它们使用HTTP标头的方式并非本该被使用,例如,征求求职申请。

您可以使用字典来定义标题,也可以使用headers参数将其与您的请求一起发送.get()。例如,假设您要向API服务器发送一些请求ID,并且知道可以使用以下方法进行操作X-Request-Id:

如果您浏览request.headers字典,那么您会发现X-Request-Id在结尾处,以及随其他API请求默认提供的其他一些标头。

响应可能有许多有用的表头,但最重要的标头之一是Content-Type,它定义了响应中返回的内容的类型。

Content-Type

如今,大多数API使用JSON作为默认内容类型,但是您可能需要使用返回XML或其他媒体类型(例如图像或视频)的API。在这种情况下,内容类型将有所不同。

如果您使用TheDogAPI回顾前面的示例之一并尝试检查Content-Type标题,那么您会注意到它的定义方式为application/json:

除了特定类型的内容(在这种情况下为application/json),标头还可能返回响应内容的指定编码。

PlaceGOATAPI:这是一个非常愚蠢的API,可以返回不同大小的山羊图像,您可以在网站中将其用作占位符图像。

例如,如果您尝试从PlaceGOATAPI提取山羊的图像,则会注意到内容类型不再是application/json,而是定义为image/jpeg:

在这种情况下,Content-Type表头指出返回的内容是JPEG图像。您将在下一部分中学习如何查看此内容。

该Content-Type头部是非常重要的,你要知道如何处理的响应和如何处理它的内容。还有数百种其他可接受的内容类型,包括音频,视频,字体等。

回应内容

如您所知,在API响应中找到的内容类型将根据Content-Type表头而有所不同。为了根据不同的Content-Type标题正确读取响应内容,该requests程序包附带了几个不同的Response属性,您可以使用这些属性来处理响应数据:

.text以Unicode格式返回响应内容。.content以字节为单位返回响应内容。您已经使用了.text上面的属性。但是,对于某些特定类型的数据,例如图像和其他非文本数据,使用.content通常是一种更好的方法,即使它返回的结果与.text以下内容非常相似:

如您所见,.content与以前使用的之间没有太大的区别.text。但是,通过查看响应的

Content-Type表头,您可以看到内容是application/json;JSON对象。对于此类内容,该requests库包含一种特定的.json()方法,您可以使用该方法立即将API字节响应转换为Python数据结构:

如您所见,执行完之后response.json(),您将获得一个可以使用的字典,就像在Python中使用任何其他字典一样。

现在,回头看一下您最近使用PlaceGOATAPI运行的示例,尝试获取相同的山羊图像并查看其内容:

在这种情况下,因为您要请求图像,.content所以不是很有帮助。实际上,几乎是不可能理解的。但是,您知道这是JPEG图像,因此您可以尝试将其存储到文件中,然后查看会发生什么情况:

现在,如果打开要使用的文件夹,则将找到一个goat.jpeg文件,该文件是您刚刚使用API提取的山羊的随机图像。那不是很神奇吗?

HTTP方法

调用API时,可以使用几种不同的方法(也称为动词)来指定要执行的操作。例如,如果要获取一些数据,则可以使用方法GET;如果要创建一些数据,则可以使用方法POST。当使用API纯粹使用数据时,通常会遵循GET请求,但以下是最常用的方法及其典型用例的列表:

这四种方法通常被称作CRUD操作,因为他们让你reate,[READ,üPDATE和delete资源。

注意:还有另PATCH一种方法也与CRUD操作相关联,但是它比上面的四种更不常见。它用于进行部分修改,而不是使用完全替换资源PUT。

您可以阅读有关两者之间差异的PUTPATCH更多信息,并了解它们的不同需求。

如果您对其余的HTTP方法感到好奇,或者只是想了解更多有关已提到的HTTP方法的信息,请浏览Mozilla的文档。到目前为止,您仅用于.get()获取数据,但也可以将该requests包用于所有其他HTTP方法:

如果您在控制台上尝试使用它们,那么您会注意到它们中的大多数将返回MethodNotAllowed状态码。这是因为不是所有的终端将允许POST,PUT或DELETE方法。特别是当您使用公共API读取数据时,您会发现大多数API仅允许GET请求,因为不允许创建或更改现有数据。

查询参数

有时,当您调用API时,会得到大量不需要或不需要的数据。例如,当调用TheDogAPI的/breeds端点时,您会获得有关给定品种的很多信息。但是在某些情况下,您可能只想提取有关给定品种的某些信息。这就是查询参数的来源!

在线浏览时,您可能已经看到或使用了查询参数。例如,当您观看YouTube视频时,您的网址为


转载请注明:http://www.92nongye.com/xxnr/xxnr/204627227.html