欢迎访问宙启技术站
智能推送

使用Python的外部库进行API调用:requests和JSON解析

发布时间:2023-06-26 11:17:54

Python是一种极其流行的编程语言,在互联网访问方面,它在处理API调用方面非常强大。虽然Python标准库中包含了大量的模块和函数,但是为了更好地使用和扩展Python的外部库,需要学习一些非标准库的使用,如requests和JSON解析。

requests是一个非常好用的Python库,它具有许多功能,包括简单的HTTP请求、持久连接和浏览器风格访问的会话对象等等。在本文中,我们将学习如何使用requests库进行API调用,主要涵盖以下几个方面:

1. 安装requests库及其依赖项

2. 发送HTTP请求和接受响应

3. 定制请求头部

4. 处理HTTP错误

5. 使用会话对象

6. 序列化JSON数据

1. 安装requests库及其依赖项

首先需要使用pip包管理器从PyPI(Python包索引)中安装requests库。可以使用如下命令安装requests库:

pip install requests

如果您在打开cmd.exe或终端窗口时遇到问题,可以尝试使用管理员权限运行它。

使用requests库进行API调用,还需要一个包含API密钥或其他访问凭据的配置文件。在本例中,我们将使用OpenWeatherMap API进行示例(http://api.openweathermap.org/)。

2. 发送HTTP请求和接受响应

下面示例展示了如何通过requests库发送HTTP GET请求,并接收到响应。这里我们使用OpenWeatherMap API,并向其请求某个城市的天气信息:

import requests

url = 'http://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=your_api_key'
response = requests.get(url)
if response.status_code == 200:
    print(response.json())
else:
    print(response.status_code)

在代码中的字符串url是一个发送请求的URL,其中%7Bcity%7D是替换参数,而your_api_key是您自己的OpenWeatherMap API密钥。使用requests库中的get()方法将城市的天气信息请求发送给OpenWeatherMap API,并将响应存储在变量response中。此处使用if语句检查状态代码是否为200,状态代码200表示请求成功。print()语句输出响应的JSON格式。

3. 定制请求头部

requests库允许你现在的请求头部,比如添加cookie、定义代理服务器、指定接受内容类型等等。在下面的示例中,我们将添加一个自定义Cookie以进行请求:

import requests

url = 'http://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=your_api_key'
cookies = {'session_id': '1234'}
response = requests.get(url, cookies=cookies)

if response.status_code == 200:
    print(response.json())
else:
    print(response.status_code)

在此代码中,我们构造一个名为cookies的字典,其中包含名称和值的键-值对。使用requests库的get()方法发送API请求,其中cookies参数指定要发送的cookie。

4. 处理HTTP错误

当发生HTTP错误时,requests库提供了很好的错误处理机制。例如,如果请求被拒绝,我们可以处理异常:

import requests

url = 'http://api.openweathermap.org/data/1.5/weather?q=Beijing&appid=your_api_key'
try:
    response = requests.get(url)
    response.raise_for_status()
except requests.exceptions.HTTPError as e:
    print("HTTP error occurred: {}".format(e))
else:
    print(response.json())

在此代码中,我们使用try-except块来处理HTTP请求错误。raise_for_status()方法会针对不同的HTTP状态代码引发异常,如果状态代码大于等于400,就会发生异常。

5. 使用会话对象

会话对象是requests库的一项功能,它允许在多个请求之间共享任意设置。这对于需要进行多个API调用的脚本非常有用。例如,可以通过在会话中设置COOKIES、AUTH和PROXIES等来在多个请求间共享设置。

import requests

session = requests.Session()
session.auth = ('user', 'pass')

url = 'http://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=your_api_key'
response = session.get(url)

if response.status_code == 200:
    print(response.json())
else:
    print(response.status_code)

在此例中,我们首先创建了一个requests.Session对象,然后设置了指定的身份验证凭据。接下来通过get()方法发送请求,全程使用会话的设置,不需要再次设置身份验证凭据、代理、cookie等。

6. 序列化JSON数据

其他API通常使用JSON格式来返回数据,为了使Python能够管理JSON数据,需要使用内置的json模块。JSON是一种轻量的数据交换格式,易于人类阅读和编写,同时也易于机器的解析和生成。

import requests
import json

url = 'http://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=your_api_key'
response = requests.get(url)
if response.status_code == 200:
    data = json.loads(response.content.decode('utf-8'))
    print(json.dumps(data, indent=2))
else:
    print(response.status_code)

在代码中,使用了标准库json中的loads()方法来解析JSON数据。使用dumps()方法将Python对象序列化为JSON格式数据并使用indent参数设置格式化。在实际开发中,json.loads()方法常常使用response.json()简化写法。

在本文中,我们学习了如何使用requests库实现API调用和JSON解析。这是Python基础中非常重要的一部分,对于开发人员尤其如此。有了这些基础知识,我们就能开始使用Python构建一些好玩的API调用了!