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

简介: 淘宝item_get_app接口是淘宝开放平台提供的移动端商品详情数据获取接口,相较PC端更贴近APP展示效果,支持获取APP专属价格、促销活动及详情页结构,适用于电商导购、比价工具、数据分析等场景。接口采用appkey+appsecret+session认证机制,需申请相应权限。本文提供Python调用示例及使用注意事项,帮助开发者高效对接移动端商品数据。

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

  1. 接口定位与功能
    接口名称:item_get_app(淘宝 APP 商品详情获取)
    功能:获取淘宝商品在移动端的完整详情数据,包括基础信息、价格、库存、规格、详情页内容、促销活动等
    数据特点:返回 APP 端特有的数据结构,与 PC 端item_get接口在字段和格式上有差异
    权限要求:需要申请 "商品详情" 相关权限,个人开发者和企业开发者均可申请
  2. 认证机制
    采用淘宝开放平台统一的appkey + appsecret + session三重认证机制:
    appkey和appsecret:通过开放平台注册应用获得
    session:通过用户授权获得的访问令牌,代表用户授权应用访问其数据
    签名机制:参数按 ASCII 升序排序后拼接,结合 appsecret 进行 MD5 加密生成签名
  3. 核心参数与响应结构
    核心请求参数
    参数名 类型 是否必填 说明
    method String 是 接口方法名,固定为taobao.item_get_app
    app_key String 是 应用的 appkey
    session String 是 用户授权 session
    timestamp String 是 时间戳,格式yyyy-MM-dd HH:mm:ss
    sign String 是 签名
    num_iid String 是 商品 ID
    is_promotion String 否 是否获取促销信息,值为 "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  # 保留原始数据
    }

三、接口调用注意事项

  1. 调用限制与规范
    QPS 限制:默认 QPS 为 10,超过会返回 429 错误
    每日调用量:根据应用等级不同,每日调用量从 1 万到 100 万不等
    数据缓存:相同商品的重复调用建议设置缓存,减少 API 调用次数
    合规使用:获取的商品数据不得用于恶意竞争、价格战等不正当用途
  2. 常见错误及解决方案
    错误码 说明 解决方案
    10001 签名错误 检查签名生成逻辑,确保参数排序和加密正确
    110 session 无效或过期 重新获取用户授权 session
    216100 商品 ID 不存在 检查 num_iid 是否正确
    216110 没有权限访问该商品 检查应用是否已申请商品详情权限
    429 调用频率超限 降低调用频率,实现请求限流机制
  3. 数据解析要点
    APP 端商品详情的富文本格式与 PC 端不同,需要针对性处理
    部分字段(如 APP 专属价)可能为空,需做容错处理
    规格参数可能包含多层嵌套,解析时需注意层级关系
    促销信息可能随时间变化,需定期更新
    四、应用场景与扩展
    典型应用场景
    移动端电商导购 APP,展示淘宝商品详情
    比价工具,对比不同平台商品价格(含 APP 专属价)
    电商数据分析系统,采集商品销售和价格数据
    电商辅助工具,帮助卖家分析竞品信息
    扩展建议
    实现请求重试机制,应对临时网络故障
    添加代理 IP 池,解决 IP 限制问题
    实现数据缓存策略,提高响应速度并减少 API 调用
    结合其他接口(如评论接口)获取更全面的商品信息
    开发商品监控功能,跟踪价格和库存变化
    通过合理使用item_get_app接口,开发者可以获取淘宝移动端的商品详情数据,为用户提供更贴近移动端使用习惯的服务体验。使用时需遵守淘宝开放平台的相关规定,确保数据使用的合法性和合规性。

    示例调用

    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'])}")
    
相关文章
|
3月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
3月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
3月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
3月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
3月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
4月前
|
JSON 缓存 供应链
电子元件 item_search - 按关键字搜索商品接口深度分析及 Python 实现
本文深入解析电子元件item_search接口的设计逻辑与Python实现,涵盖参数化筛选、技术指标匹配、供应链属性过滤及替代型号推荐等核心功能,助力高效精准的电子元器件搜索与采购决策。
|
4月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
340 102
|
4月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
364 104
|
4月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
291 103

热门文章

最新文章

推荐镜像

更多