×

淘宝 item_get_app 接口深度分析及 Python 实现

万邦科技Lex 万邦科技Lex 发表于2025-08-29 10:02:09 浏览242 评论0

抢沙发发表评论

注册账号免费测试淘宝item_get_app 接口

淘宝item_get_app接口是淘宝开放平台提供的用于获取淘宝 APP 端商品详情原始数据的接口,相比 PC 端接口,它能返回更贴近移动端展示的商品信息,包括 APP 专属价格、移动端促销活动、APP 端详情页结构等。该接口主要服务于需要对接淘宝移动端商品数据的开发者,适用于电商导购、比价工具、数据分析等场景。

一、接口核心特性分析

1. 接口定位与功能

  • 接口名称item_get_app(淘宝 APP 商品详情获取)

  • 功能:获取淘宝商品在移动端的完整详情数据,包括基础信息、价格、库存、规格、详情页内容、促销活动等

  • 数据特点:返回 APP 端特有的数据结构,与 PC 端item_get接口在字段和格式上有差异

  • 权限要求:需要申请 "商品详情" 相关权限,个人开发者和企业开发者均可申请

2. 认证机制

采用淘宝开放平台统一的appkey + appsecret + session三重认证机制:


  • appkeyappsecret:通过开放平台注册应用获得

  • session:通过用户授权获得的访问令牌,代表用户授权应用访问其数据

  • 签名机制:参数按 ASCII 升序排序后拼接,结合 appsecret 进行 MD5 加密生成签名

3. 核心参数与响应结构

核心请求参数

参数名类型是否必填说明
methodString接口方法名,固定为taobao.item_get_app
app_keyString应用的 appkey
sessionString用户授权 session
timestampString时间戳,格式yyyy-MM-dd HH:mm:ss
signString签名
num_iidString商品 ID
is_promotionString是否获取促销信息,值为 "1" 时获取

响应核心字段

响应数据以item_get_app_response为根节点,主要包含以下几类信息:


  • 商品基础信息:标题、主图、价格、销量、店铺信息等

  • 规格参数:SKU 信息、规格属性、库存等

  • 详情页内容:移动端富文本详情、图片列表等

  • 促销信息:优惠券、满减活动、APP 专享价等

  • 服务信息:售后保障、配送方式等

二、Python 脚本实现

下面是调用item_get_app接口的 Python 实现,包含签名生成、接口调用和数据解析功能:

import requests

import hashlib

import time

import json

import logging

from typing import Dict, Optional


# 配置日志

logging.basicConfig(

    level=logging.INFO,

    format="%(asctime)s - %(levelname)s - %(message)s"

)


class TaobaoItemGetAppAPI:

    def __init__(self, appkey: str, appsecret: str, session: str):

        """

        初始化淘宝item_get_app接口客户端

        :param appkey: 淘宝开放平台appkey

        :param appsecret: 淘宝开放平台appsecret

        :param session: 用户授权session

        """

        self.appkey = appkey

        self.appsecret = appsecret

        self.session = session

        self.base_url = "https://eco.taobao.com/router/rest"

        self.session = requests.Session()


    def _generate_sign(self, params: Dict) -> str:

        """生成淘宝API签名"""

        # 1. 按参数名ASCII升序排序

        sorted_params = sorted(params.items(), key=lambda x: x[0])

        # 2. 拼接为key=value格式

        sign_str = "".join([f"{k}{v}" for k, v in sorted_params])

        # 3. 首尾拼接appsecret并MD5加密

        sign_str = self.appsecret + sign_str + self.appsecret

        return hashlib.md5(sign_str.encode()).hexdigest().upper()


    def _get_timestamp(self) -> str:

        """生成时间戳(yyyy-MM-dd HH:mm:ss)"""

        return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


    def get_item_details(self, num_iid: str, is_promotion: bool = False) -> Optional[Dict]:

        """

        调用item_get_app接口获取商品详情

        :param num_iid: 商品ID

        :param is_promotion: 是否获取促销信息

        :return: 商品详情数据

        """

        # 构造请求参数

        params = {

            "method": "taobao.item_get_app",

            "app_key": self.appkey,

            "session": self.session,

            "timestamp": self._get_timestamp(),

            "format": "json",

            "v": "2.0",

            "sign_method": "md5",

            "num_iid": num_iid,

            "is_promotion": "1" if is_promotion else "0"

        }


        # 生成签名

        params["sign"] = self._generate_sign(params)


        try:

            # 发送请求

            response = self.session.get(

                self.base_url,

                params=params,

                timeout=15

            )

            response.raise_for_status()

            result = response.json()


            # 处理错误响应

            if "error_response" in result:

                error = result["error_response"]

                logging.error(f"接口错误:{error['msg']}(错误码:{error['code']})")

                return None


            # 提取商品数据

            item_data = result.get("item_get_app_response", {}).get("item", {})

            if not item_data:

                logging.warning("未获取到商品数据")

                return None


            # 格式化返回结果

            return self._format_item_data(item_data)


        except Exception as e:

            logging.error(f"请求异常:{str(e)}")

            return None


    def _format_item_data(self, item_data: Dict) -> Dict:

        """格式化商品数据,提取关键信息"""

        # 提取基础信息

        basic_info = {

            "num_iid": item_data.get("num_iid"),

            "title": item_data.get("title"),

            "desc_short": item_data.get("desc_short"),

            "price": float(item_data.get("price", 0)),

            "orginal_price": float(item_data.get("orginal_price", 0)),

            "sales": int(item_data.get("sales", 0)),

            "total_sold": int(item_data.get("total_sold", 0)),

            "comment_count": int(item_data.get("comment_count", 0)),

            "pic_url": item_data.get("pic_url"),

            "detail_url": item_data.get("detail_url"),

            "is_app_exclusive": item_data.get("is_app_exclusive", False),  # 是否APP专属商品

            "app_exclusive_price": float(item_data.get("app_exclusive_price", 0))  # APP专属价

        }


        # 提取店铺信息

        shop_info = {

            "shop_id": item_data.get("shop_id"),

            "shop_name": item_data.get("shop_name"),

            "shop_type": item_data.get("shop_type"),  # 店铺类型:c2c/b2c

            "seller_id": item_data.get("seller_id"),

            "seller_nick": item_data.get("seller_nick")

        }


        # 提取规格信息

        sku_info = {

            "sku": item_data.get("sku", []),  # SKU列表

            "sku_props": item_data.get("sku_props", []),  # SKU属性

            "props_name": item_data.get("props_name", ""),  # 属性名称

            "stock": int(item_data.get("stock", 0))  # 总库存

        }


        # 提取详情页信息

        detail_info = {

            "detail_image": item_data.get("detail_image", []),  # 详情页图片

            "desc": item_data.get("desc", "")  # 详情页富文本

        }


        # 提取促销信息

        promotion_info = {

            "promotion_price": float(item_data.get("promotion_price", 0)),

            "promotion_type": item_data.get("promotion_type", ""),

            "coupons": item_data.get("coupons", []),  # 优惠券信息

            "activity": item_data.get("activity", "")  # 活动信息

        }


        # 整合所有信息

        return {

            "basic_info": basic_info,

            "shop_info": shop_info,

            "sku_info": sku_info,

            "detail_info": detail_info,

            "promotion_info": promotion_info,

            "raw_data": item_data  # 保留原始数据

        }



# 示例调用

if __name__ == "__main__":

    # 替换为实际参数(从淘宝开放平台获取)

    APPKEY = "your_appkey"

    APPSECRET = "your_appsecret"

    SESSION = "your_session"

    ITEM_ID = "6543217890"  # 淘宝商品ID


    # 初始化API客户端

    api = TaobaoItemGetAppAPI(APPKEY, APPSECRET, SESSION)

    

    # 获取商品详情(包含促销信息)

    item_details = api.get_item_details(ITEM_ID, is_promotion=True)

    

    if item_details:

        # 打印商品基本信息

        print(f"商品ID: {item_details['basic_info']['num_iid']}")

        print(f"商品标题: {item_details['basic_info']['title']}")

        print(f"价格: {item_details['basic_info']['price']}元")

        

        # 若有APP专属价则显示

        if item_details['basic_info']['is_app_exclusive']:

            print(f"APP专属价: {item_details['basic_info']['app_exclusive_price']}元")

            

        print(f"销量: {item_details['basic_info']['sales']}件")

        print(f"店铺: {item_details['shop_info']['shop_name']} ({item_details['shop_info']['shop_type']})")

        

        # 打印促销信息

        if item_details['promotion_info']['coupons']:

            print("\n可用优惠券:")

            for coupon in item_details['promotion_info']['coupons'][:3]:  # 只显示前3个

                print(f"- {coupon.get('title')}: {coupon.get('denomination')}元")

                

        # 打印SKU数量

        print(f"\nSKU数量: {len(item_details['sku_info']['sku'])}")

三、接口调用注意事项

1. 调用限制与规范

  • QPS 限制:默认 QPS 为 10,超过会返回 429 错误

  • 每日调用量:根据应用等级不同,每日调用量从 1 万到 100 万不等

  • 数据缓存:相同商品的重复调用建议设置缓存,减少 API 调用次数

  • 合规使用:获取的商品数据不得用于恶意竞争、价格战等不正当用途

2. 常见错误及解决方案

错误码说明解决方案
10001签名错误检查签名生成逻辑,确保参数排序和加密正确
110session 无效或过期重新获取用户授权 session
216100商品 ID 不存在检查 num_iid 是否正确
216110没有权限访问该商品检查应用是否已申请商品详情权限
429调用频率超限降低调用频率,实现请求限流机制

3. 数据解析要点

  • APP 端商品详情的富文本格式与 PC 端不同,需要针对性处理

  • 部分字段(如 APP 专属价)可能为空,需做容错处理

  • 规格参数可能包含多层嵌套,解析时需注意层级关系

  • 促销信息可能随时间变化,需定期更新

四、应用场景与扩展

典型应用场景

  • 移动端电商导购 APP,展示淘宝商品详情

  • 比价工具,对比不同平台商品价格(含 APP 专属价)

  • 电商数据分析系统,采集商品销售和价格数据

  • 电商辅助工具,帮助卖家分析竞品信息

扩展建议

  • 实现请求重试机制,应对临时网络故障

  • 添加代理 IP 池,解决 IP 限制问题

  • 实现数据缓存策略,提高响应速度并减少 API 调用

  • 结合其他接口(如评论接口)获取更全面的商品信息

  • 开发商品监控功能,跟踪价格和库存变化


通过合理使用item_get_app接口,开发者可以获取淘宝移动端的商品详情数据,为用户提供更贴近移动端使用习惯的服务体验。使用时需遵守淘宝开放平台的相关规定,确保数据使用的合法性和合规性。


群贤毕至

访客