VVIC 平台商品详情接口,数据解析全流程

29 阅读3分钟

在对接 VVIC 平台 API 时,商品详情接口是获取商品核心信息的关键入口。本文将详细介绍 VVIC 商品详情接口的调用规范、签名机制实现以及数据解析技巧,并提供可直接使用的 Python 代码示例,帮助开发者快速完成对接。

接口调用准备工作

必要参数说明

app_key:平台分配的应用标识 timestamp:请求时间戳(毫秒级) sign:签名信息 item_id:商品 ID version:接口版本,当前为 1.0

签名生成规则

所有参数按 key 进行 ASCII 升序排序 拼接为 "key=value&key=value" 格式 末尾拼接 app_secret 进行 MD5 加密并转为大写

点击获取key和secret

完整代码实现 VVIC平台商品详情接口调用代码

import hashlib
import time
import json
class VvicApiClient:
    def __init__(self, app_key, app_secret):
        self.app_key = app_key
        self.app_secret = app_secret
        self.base_url = "https://api.vvic.com/item/detail"
        
    def _generate_sign(self, params):
        """生成签名"""
        # 按key升序排序
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        # 拼接参数
        sign_str = "&".join([f"{k}={v}" for k, v in sorted_params])
        # 拼接app_secret
        sign_str += self.app_secret
        # MD5加密并转为大写
        md5 = hashlib.md5()
        md5.update(sign_str.encode('utf-8'))
        return md5.hexdigest().upper()
    
    def get_item_detail(self, item_id):
        """获取商品详情"""
        # 构建基础参数
        params = {
            "app_key": self.app_key,
            "timestamp": str(int(time.time() * 1000)),
            "item_id": item_id,
            "version": "1.0"
        }
        
        # 生成签名
        params["sign"] = self._generate_sign(params)
        
        try:
            # 发送请求
            response = requests.get(self.base_url, params=params, timeout=10)
            response.raise_for_status()  # 抛出HTTP错误
            
            # 解析响应
            result = response.json()
            
            # 处理业务逻辑错误
            if result.get("code") != 0:
                print(f"接口错误: {result.get('msg')}")
                return None
                
            return self._parse_item_data(result.get("data", {}))
            
        except requests.exceptions.RequestException as e:
            print(f"请求异常: {str(e)}")
            return None
        except json.JSONDecodeError:
            print("响应数据解析失败")
            return None
    
    def _parse_item_data(self, item_data):
        """解析商品数据,提取关键信息"""
        if not item_data:
            return None
            
        # 提取核心字段
        parsed = {
            "item_id": item_data.get("item_id"),
            "title": item_data.get("title"),
            "price": item_data.get("price"),
            "original_price": item_data.get("original_price"),
            "sales_count": item_data.get("sales_count"),
            "shop_name": item_data.get("shop", {}).get("shop_name"),
            "main_images": item_data.get("main_images", []),
            "category": item_data.get("category", {}).get("name"),
            "specs": self._parse_specs(item_data.get("specs", []))
        }
        
        return parsed
    
    def _parse_specs(self, specs):
        """解析规格信息"""
        parsed_specs = []
        for spec in specs:
            parsed_specs.append({
                "spec_id": spec.get("spec_id"),
                "spec_name": spec.get("spec_name"),
                "price": spec.get("price"),
                "stock": spec.get("stock"),
                "spec_image": spec.get("spec_image")
            })
        return parsed_specs
 

使用示例

    # 替换为实际的app_key和app_secret
    APP_KEY = "your_app_key"
    APP_SECRET = "your_app_secret"
    
    # 初始化客户端
    client = VvicApiClient(APP_KEY, APP_SECRET)
    
    # 获取商品详情
    item_id = "12345678"  # 替换为实际商品ID
    item_detail = client.get_item_detail(item_id)
    
    if item_detail:
        print("商品详情:")
        print(json.dumps(item_detail, ensure_ascii=False, indent=2))

代码关键功能解析

签名机制实现

代码中的_generate_sign方法严格按照 VVIC 平台要求实现了签名生成逻辑,确保请求合法性。

异常处理

包含了网络请求异常、JSON 解析异常和业务逻辑错误的完整处理,提高了代码的健壮性。

数据解析

通过_parse_item_data和_parse_specs方法对返回数据进行结构化处理,提取了业务所需的核心字段,避免直接使用原始数据带来的不便。

调用注意事项

接口有调用频率限制,建议添加请求间隔控制 app_key和app_secret需妥善保管,避免泄露 生产环境中建议添加日志记录,方便问题排查 当接口版本更新时,需及时调整参数和数据解析逻辑