自学内容网 自学内容网

如何解析返回的快递费用数据?

解析返回的快递费用数据是使用 API 的关键步骤之一。解析数据时,需要根据返回的 JSON 格式提取有用的信息,并进行适当的处理。以下是一个完整的示例,展示如何解析 1688 item_fee 接口返回的快递费用数据。


一、返回数据的结构

在调用 1688 的 item_fee 接口后,返回的数据通常是一个 JSON 格式,包含以下内容:

  1. 首重费用:基础运费。

  2. 续重费用:每增加一定重量的额外费用。

  3. 快递方式:可能包含多种快递方式(如普通快递、顺丰快递等)及其对应的费用。

假设返回的 JSON 数据如下:

JSON

{
  "code": "success",
  "message": "success",
  "data": {
    "num_iid": "577523351572",
    "area_id": "650100",
    "unitweight": "0.8",
    "express_fee": {
      "first_weight": 1,
      "first_fee": 10.0,
      "next_weight": 1,
      "next_fee": 5.0,
      "total_fee": 10.0
    },
    "sf_express_fee": {
      "first_weight": 1,
      "first_fee": 15.0,
      "next_weight": 1,
      "next_fee": 7.0,
      "total_fee": 15.0
    }
  }
}

二、解析返回数据的步骤

1. 检查返回状态

首先检查返回的 JSON 数据中是否包含 codemessage 字段,确认请求是否成功。

2. 提取快递费用信息

data 字段中提取快递费用信息,包括首重费用、续重费用和总费用。

3. 安全处理异常

在解析过程中,使用 try-except 块捕获可能出现的异常,例如字段缺失或类型错误。


三、Python 示例代码

以下是一个完整的 Python 示例代码,展示如何解析返回的快递费用数据:

Python

import requests
import hashlib
import time
import json

# 1688 API 配置
API_URL = "https://api-gw.onebound.cn/1688/item_fee/"
API_KEY = "your_api_key"  # 替换为你的 API Key
API_SECRET = "your_api_secret"  # 替换为你的 API Secret

def generate_sign(params, secret):
    """
    生成签名
    :param params: 请求参数(字典格式)
    :param secret: API Secret
    :return: 签名字符串
    """
    sorted_params = sorted(params.items())
    sign_content = ''.join([f"{k}{v}" for k, v in sorted_params if k != 'sign'])
    sign_content += secret
    return hashlib.md5(sign_content.encode('utf-8')).hexdigest().upper()

def get_shipping_fee(num_iid, area_id, unitweight):
    """
    获取商品快递费用
    :param num_iid: 商品 ID
    :param area_id: 区域 ID
    :param unitweight: 商品重量(单位:千克)
    :return: 快递费用信息
    """
    params = {
        "key": API_KEY,
        "secret": API_SECRET,
        "num_iid": num_iid,
        "area_id": area_id,
        "unitweight": unitweight,
        "timestamp": int(time.time())
    }
    params["sign"] = generate_sign(params, API_SECRET)
    
    response = requests.get(API_URL, params=params)
    
    if response.status_code == 200:
        return response.json()
    else:
        print(f"请求失败,状态码:{response.status_code}")
        return None

def parse_shipping_fee(data):
    """
    解析快递费用数据
    :param data: 返回的 JSON 数据
    :return: 解析后的快递费用信息
    """
    try:
        if data["code"] == "success":
            shipping_data = data["data"]
            express_fee = shipping_data.get("express_fee", {})
            sf_express_fee = shipping_data.get("sf_express_fee", {})
            
            print("商品 ID:", shipping_data["num_iid"])
            print("区域 ID:", shipping_data["area_id"])
            print("商品重量:", shipping_data["unitweight"], "千克")
            
            print("\n普通快递费用:")
            print("首重:", express_fee.get("first_weight"), "千克")
            print("首重费用:", express_fee.get("first_fee"), "元")
            print("续重:", express_fee.get("next_weight"), "千克")
            print("续重费用:", express_fee.get("next_fee"), "元")
            print("总费用:", express_fee.get("total_fee"), "元")
            
            print("\n顺丰快递费用:")
            print("首重:", sf_express_fee.get("first_weight"), "千克")
            print("首重费用:", sf_express_fee.get("first_fee"), "元")
            print("续重:", sf_express_fee.get("next_weight"), "千克")
            print("续重费用:", sf_express_fee.get("next_fee"), "元")
            print("总费用:", sf_express_fee.get("total_fee"), "元")
        else:
            print("请求失败,错误信息:", data.get("message"))
    except KeyError as e:
        print("解析失败,缺少字段:", e)
    except Exception as e:
        print("解析失败,原因:", e)

# 示例调用
if __name__ == "__main__":
    num_iid = "577523351572"  # 商品 ID
    area_id = "650100"  # 区域 ID,例如 650100 表示乌鲁木齐
    unitweight = "0.8"  # 商品重量(单位:千克)

    shipping_fee_data = get_shipping_fee(num_iid, area_id, unitweight)
    if shipping_fee_data:
        parse_shipping_fee(shipping_fee_data)
    else:
        print("快递费用数据获取失败,请检查参数是否正确。")

四、代码解析

  1. 生成签名
    使用 generate_sign 函数生成签名,确保请求的合法性。

  2. 发送请求
    使用 requests.get 方法发送请求,并将返回的 JSON 数据解析为 Python 字典。

  3. 解析数据
    parse_shipping_fee 函数中,检查返回的 JSON 数据是否包含预期字段,并提取快递费用信息。使用 get 方法安全访问字典字段,避免因字段缺失导致的异常。

  4. 异常处理
    使用 try-except 块捕获解析过程中可能出现的异常,例如字段缺失或类型错误。


五、异常处理

在实际开发中,需要处理以下常见异常:

  1. 请求失败:检查 HTTP 状态码,确保请求参数正确。

  2. JSON 解析错误:使用 try-except 捕获 json.JSONDecodeError

  3. 字段缺失:使用字典的 get 方法安全访问字段。

  4. 类型不匹配:检查字段类型是否符合预期,必要时进行类型转换。


六、总结

通过上述代码,我们成功实现了使用 Python 调用 1688 item_fee API 接口并解析返回的快递费用数据。解析过程中,我们通过安全访问字段、捕获异常和格式化输出,确保代码的健壮性和可读性。开发者可以根据实际需求对代码进行扩展,例如批量查询多个商品的快递费用或结合其他电商数据进行分析。希望本文的示例代码和解析能够帮助你更好地理解和使用 1688 API 接口。

如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。


原文地址:https://blog.csdn.net/2401_89446003/article/details/145266162

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!