首页 > 解决方案 > 如何从 python 中的 API 调用中过滤出错误响应?

问题描述

我正在使用 python 从休息 API 中检索一些数据。我正在遍历一个列表以获取传入的每条记录的数据,如下所示:

safety_codes = ['M516RHJ', 'M16AJAR', 'Z49EJ57', 'Z1035TH', 'S0X6DJU9', 'S9099LP', 'S912AZSD', 'S72AEFH', 'S61ABKJ', 'W4XXATF']

#Building API variables:
api_data = dict()
rest_url = "https://www.gencodedemosite.com/restws/empcodes="
response_type = '&format=json'
header_details = {"KEY": "1101079000335WAXMEMU14532"}

#Making API  call:
for i in generic_emp_codes:
    response = requests.get(rest_url+'{}'.format(i)+response_format, headers = header_details)
    data = json.loads(response.text)
    api_data.update({i: data}) 

只要 emp_code 有效,我就会返回一些数据。但是当其中一个代码出错时,我得到以下响应并且所有其他数据都丢失了。

{
    "error": "No record found for given employee safety code."
}

如何过滤掉这些响应,以便我的 api 调用不会失败?本质上,如果代码 M516RHJ 和 M16AJAR 返回该数据。但如果 Z49EJ57 返回错误消息,请将其移到一边并保留 M516RHJ 和 M16AJAR 的数据,然后继续执行下一个代码并重复该过程。

json_rdd = sc.parallelize(api_data)
json_df = spark.read.json(json_rdd)
json_df.printSchema()
root
 |-- _corrupt_record: string (nullable = true)

一旦我收到该错误消息,我的所有数据都会损坏。

标签: pythonrestpyspark

解决方案


results = []
bad_codes = []
#Making API  call:
for i in generic_emp_codes:
    response = requests.get(rest_url+'{}'.format(i)+response_format, headers = header_details)
    data = json.loads(response.text)
    if type(data)==dict and 'error' in data.keys():
        bad_codes.append(data)
    else:
        results.append(data)

推荐阅读