淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据

简介: 淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。

淘宝联盟开放平台中,与 “搜索相似商品” 相关的官方接口是(物料优选接口),可通过商品 ID 或图片等物料获取相似推荐商品。虽然没有直接命名为item_search_similar的接口,但该接口可实现类似功能.
以下是基于该接口的 Python 实现,用于根据商品 ID 搜索相似商品并返回数据:
import requests
import hashlib
import time
import json
import logging
from typing import List, Dict, Optional

配置日志

logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)

class TaobaoSimilarItemsAPI:
def init(self, appkey: str, appsecret: str, adzone_id: str):
"""
初始化淘宝相似商品搜索API客户端
:param appkey: 淘宝联盟应用appkey
:param appsecret: 淘宝联盟应用appsecret
:param adzone_id: 推广位ID(需提前创建)
"""
self.appkey = appkey
self.appsecret = appsecret
self.adzone_id = adzone_id
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 search_similar_items(self, num_iid: str, page: int = 1, page_size: int = 20) -> Optional[List[Dict]]:
    """
    搜索相似商品
    :param num_iid: 参考商品ID
    :param page: 页码
    :param page_size: 每页数量(最大20)
    :return: 相似商品列表
    """
    # 接口参数
    params = {
        "method": "taobao.tbk.dg.optimus.material",
        "app_key": self.appkey,
        "timestamp": self._get_timestamp(),
        "format": "json",
        "v": "2.0",
        "sign_method": "md5",
        "adzone_id": self.adzone_id,
        "material_id": num_iid,  # 参考商品ID
        "material_type": "item",  # 物料类型为商品
        "page": page,
        "page_size": page_size
    }

    # 生成签名
    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

        # 解析商品数据
        material_response = result.get("tbk_dg_optimus_material_response", {})
        item_list = material_response.get("result_list", {}).get("map_data", [])

        # 格式化返回结果
        formatted_items = []
        for item in item_list:
            formatted_items.append({
                "num_iid": item.get("num_iid"),  # 商品ID
                "title": item.get("title"),  # 商品标题
                "pict_url": item.get("pict_url"),  # 商品主图
                "price": float(item.get("reserve_price", 0)),  # 原价
                "final_price": float(item.get("zk_final_price", 0)),  # 优惠价
                "sales": int(item.get("sales", 0)),  # 销量
                "commission_rate": float(item.get("commission_rate", 0)) / 100,  # 佣金比例(%)
                "shop_title": item.get("shop_title"),  # 店铺名称
                "shop_type": "天猫" if item.get("user_type") == 1 else "淘宝",  # 店铺类型
                "provcity": item.get("provcity"),  # 产地
                "coupon_info": item.get("coupon_info")  # 优惠券信息
            })

        logging.info(f"找到{len(formatted_items)}个相似商品(页码:{page})")
        return formatted_items

    except Exception as e:
        logging.error(f"请求异常:{str(e)}")
        return None

示例调用

if name == "main":

# 替换为实际参数(从淘宝联盟开放平台获取)
APPKEY = "your_appkey"
APPSECRET = "your_appsecret"
ADZONE_ID = "your_adzone_id"  # 推广位ID
REFERENCE_ITEM_ID = "6543217890"  # 参考商品ID(用于搜索相似商品)

# 初始化客户端
api = TaobaoSimilarItemsAPI(APPKEY, APPSECRET, ADZONE_ID)

# 搜索相似商品(第1页,20条/页)
similar_items = api.search_similar_items(
    num_iid=REFERENCE_ITEM_ID,
    page=1,
    page_size=20
)

if similar_items:
    print(f"参考商品ID:{REFERENCE_ITEM_ID} 的相似商品:\n")
    for i, item in enumerate(similar_items[:5], 1):  # 打印前5条
        print(f"{i}. {item['title']}")
        print(f"   价格:{item['price']}元 → 优惠价:{item['final_price']}元")
        print(f"   销量:{item['sales']}件 | 佣金:{item['commission_rate']*100}%")
        print(f"   店铺:{item['shop_title']}({item['shop_type']})")
        if item['coupon_info']:
            print(f"   优惠:{item['coupon_info']}")
        print("-" * 80)

代码说明
接口选择:使用淘宝联盟的taobao.tbk.dg.optimus.material接口,通过material_id(商品 ID)和material_type=item参数获取相似商品推荐。
核心参数:
appkey和appsecret:淘宝联盟开发者账号的应用密钥
adzone_id:推广位 ID,需在淘宝联盟后台创建
material_id:参考商品的 ID,用于搜索相似商品
返回数据字段:
基本信息:商品 ID、标题、主图 URL
价格信息:原价、优惠价、佣金比例
店铺信息:店铺名称、类型(淘宝 / 天猫)、产地
销售信息:销量、优惠券信息
使用注意事项:
需要先在淘宝联盟开放平台注册并创建应用
接口有调用频率限制(通常 QPS=10)
返回的是参与淘宝客推广的商品,非全平台商品
部分字段(如优惠券)可能为空,需做容错处理
扩展建议
可增加代理 IP 池应对反爬限制
实现分页遍历功能获取更多相似商品
加入缓存机制减少重复请求
增加商品相似度评分排序功能
使用时请遵守淘宝联盟的 API 使用规范,避免过度调用或用于不正当用途。

相关文章
|
7月前
|
JSON 缓存 算法
如何通过API获取1688商品类目数据:技术实现指南
1688开放平台提供alibaba.category.get接口,支持获取全量商品类目树。RESTful架构,返回JSON数据,含类目ID、名称、层级等信息。需注册账号、创建应用并授权。请求需签名认证,QPS限10次,建议缓存更新周期≥24小时。
652 2
|
7月前
|
JSON 安全 API
亚马逊商品列表API秘籍!轻松获取商品列表数据
亚马逊商品列表API(SP-API)提供标准化接口,支持通过关键词、分类、价格等条件搜索商品,获取ASIN、价格、销量等信息。采用OAuth 2.0认证与AWS签名,保障安全。数据以JSON格式传输,便于开发者批量获取与分析。
|
7月前
|
JSON 监控 API
小红书笔记评论API:一键获取分层评论与用户互动数据
小红书笔记评论API可获取指定笔记的评论详情,包括内容、点赞数、评论者信息等,支持分页与身份认证,返回JSON格式数据,适用于舆情监控、用户行为分析等场景。
1085 1
|
7月前
|
JSON API 数据格式
淘宝拍立淘按图搜索API系列,json数据返回
淘宝拍立淘按图搜索API系列通过图像识别技术实现商品搜索功能,调用后返回的JSON数据包含商品标题、图片链接、价格、销量、相似度评分等核心字段,支持分页和详细商品信息展示。以下是该API接口返回的JSON数据示例及详细解析:
|
7月前
|
自然语言处理 监控 API
速卖通商品详情API秘籍!轻松获取SKU属性数据
速卖通商品详情API(aliexpress.item.get)支持通过编程获取商品标题、价格、SKU、库存、销量、物流模板、评价及店铺信息,适用于价格监控、选品分析等场景。接口支持多语言返回,采用AppKey+AppSecret+Token认证,需签名验证,确保安全调用。
|
7月前
|
XML JSON API
苏宁商品详情API秘籍!轻松获取商品详情数据
苏宁商品详情API基于RESTful架构,支持JSON/XML格式,通过AppKey、AppSecret与签名三重认证,结合OAuth 2.0实现安全调用。开发者可获取商品名称、价格、销量、库存、促销等实时数据,适用于电商分析与商业智能。接口强制使用HTTPS协议,支持POST/GET请求,统一采用UTF-8编码,确保数据传输安全可靠。
|
7月前
|
安全 API
亚马逊商品详情 API 秘籍!轻松获取 SKU 属性数据
亚马逊商品详情API是官方接口,通过ASIN获取商品标题、价格、库存、评价等50余项数据,支持多站点查询。包含Product Advertising API与MWS两类,分别用于商品信息获取和卖家店铺管理,采用AWS4-HMAC-SHA256认证,保障请求安全。
|
8月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1253 102
|
8月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
459 104
|
8月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
355 103

推荐镜像

更多