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

相关文章
|
8月前
|
JSON 缓存 算法
如何通过API获取1688商品类目数据:技术实现指南
1688开放平台提供alibaba.category.get接口,支持获取全量商品类目树。RESTful架构,返回JSON数据,含类目ID、名称、层级等信息。需注册账号、创建应用并授权。请求需签名认证,QPS限10次,建议缓存更新周期≥24小时。
|
8月前
|
JSON 安全 API
亚马逊商品列表API秘籍!轻松获取商品列表数据
亚马逊商品列表API(SP-API)提供标准化接口,支持通过关键词、分类、价格等条件搜索商品,获取ASIN、价格、销量等信息。采用OAuth 2.0认证与AWS签名,保障安全。数据以JSON格式传输,便于开发者批量获取与分析。
|
8月前
|
XML JSON API
苏宁商品详情API秘籍!轻松获取商品详情数据
苏宁商品详情API基于RESTful架构,支持JSON/XML格式,通过AppKey、AppSecret与签名三重认证,结合OAuth 2.0实现安全调用。开发者可获取商品名称、价格、销量、库存、促销等实时数据,适用于电商分析与商业智能。接口强制使用HTTPS协议,支持POST/GET请求,统一采用UTF-8编码,确保数据传输安全可靠。
|
8月前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
8月前
|
存储 API 数据库
按图搜索1688商品的API接口
本文介绍如何利用阿里云ImageSearch服务实现1688商品的按图搜索功能。通过提取图像特征向量并计算相似度,结合Flask搭建API接口,可快速构建基于图片的商品检索系统,提升电商用户体验。
|
8月前
|
JSON API 开发者
1688按关键词搜索商品的API接口技术指南
本文介绍如何使用1688开放平台API实现商品关键词搜索,涵盖API概述、权限申请、调用步骤、Python代码示例及注意事项,助力开发者高效集成商品搜索功能,适用于电商自动化、价格监控等场景,内容基于官方文档,确保准确可靠。
1037 0
|
8月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
9月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
8月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
8月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。

推荐镜像

更多