淘宝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 使用规范,避免过度调用或用于不正当用途。

相关文章
|
24天前
|
JSON API 数据安全/隐私保护
深度分析淘宝卖家订单详情API接口,用json返回数据
淘宝卖家订单详情API(taobao.trade.fullinfo.get)是淘宝开放平台提供的重要接口,用于获取单个订单的完整信息,包括订单状态、买家信息、商品明细、支付与物流信息等,支撑订单管理、ERP对接及售后处理。需通过appkey、appsecret和session认证,并遵守调用频率与数据权限限制。本文详解其使用方法并附Python调用示例。
|
26天前
|
数据采集 JSON 监控
巧用快手电商 API,精准分析快手商品销售趋势
快手电商API助力商家精准分析销售趋势,通过实时数据获取、趋势识别与模型构建,优化营销策略,提升市场竞争力。
68 1
|
26天前
|
供应链 API
借助快手电商 API,快手小店商品库存周转率提升
快手小店通过整合电商API,实现智能库存管理,提升周转效率。实时同步销售数据、动态补货与智能预测系统,助力商家降低滞销与资金占用,达成“低库存、高周转”目标。
88 0
|
26天前
|
JSON 搜索推荐 API
利用快手电商 API 接口,实现快手小店商品价格区间精准定位
在快手电商中,通过调用API获取商品数据,并利用统计方法(如四分位数)精准划分价格区间,可优化选品策略、提升转化率。结合Python实现,助力电商智能化运营。
80 0
|
26天前
|
API Python
Python采集淘宝店铺所有商品API接口指南
淘宝没有公开的官方API供采集店铺商品数据,但可以通过以下几种方法获取商品信息。需要注意的是,淘宝有严格的反爬机制,直接采集可能违反其服务条款。
|
10月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
303 0
|
10月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
213 2
|
10月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
206 2
|
10月前
|
数据采集 数据可视化 数据挖掘
Python数据分析:Pandas库实战指南
Python数据分析:Pandas库实战指南
|
11月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
136 1

推荐镜像

更多