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

ops/2025/1/22 5:00:52/

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


一、返回数据的结构

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

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

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

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

假设返回的 JSON 数据如下:

JSON

java">{"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 Secretdef 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 += secretreturn 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 Nonedef 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"  # 商品 IDarea_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 接口。

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


http://www.ppmy.cn/ops/152100.html

相关文章

2025/1/20 学习Vue的第三天

玩性太大了玩得也不开心,天天看电视刷视频。 内心实在空洞。 最近天天看小红书上的外国人,结实外国友人(狗头)哈哈哈认识了不少人,有埃及的有美国的,还有天天看菲利普吃糖葫芦哈哈哈哈哈一个阳光的德国大男…

Linux查看日志命令

问题排查过程: 1. 评估问题现象是否是操作问题,还是服务bug,页面出异常信息是后端,没抛异常信息有可能是前端渲染问题,F12抓包看那个字段没有数据(有时候需要前端帮忙确定是哪一个字段)&#x…

傅里叶变换在语音识别中的关键作用

在语音识别中,傅里叶变换起着至关重要的作用,主要体现在以下几个方面: 一、时域到频域的转换 语音信号的特点 语音信号是一种时域信号,它随时间变化。例如,当我们说话时,声带的振动产生声波,这…

CSS 的基础知识及应用

前言 CSS(层叠样式表)是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现,使页面不仅实现功能,还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…

QT信号槽 笔记

信号与槽就是QT中处理计算机外设响应的一种机制 比如敲击键盘、点击鼠标 // 举例: 代码: connect(ls,SIGNAL(sig_chifanla()),ww,SLOT(slot_quchifan())); connect(ls,SIGNAL(sig_chifanla()),zl,SLOT(slot_quchifan()));connect函数:这是…

arkime安装

这次试一下新的办法 先下载centOS 7 然后改成阿里云镜像 输入命令备份官方yum源配置文件 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 下载阿里云源配置,覆盖原文件 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirr…

No. 34 笔记 | Python知识架构与数据类型相关内容 | 实操

在今天的Python学习中,我对Python的知识架构有了更深入的理解,同时也对Python的数据类型及其操作有了全面的认识和实践。 一、Python知识架构理解 Python是一门功能强大且应用广泛的编程语言,其知识架构可以从多个层面来理解。 从整体结构上…

第83期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…