使用Python的外部库进行API调用:requests和JSON解析
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调用了!
