Java 实战:调用 item_search_tmall 按关键词搜索天猫商品

admin4个月前淘宝api324
关键词:Java、天猫搜索、item_search_tmall、关键词、聚合 API

一、接口背景

淘宝/天猫官方并未对外公开「关键词搜索商品」接口。
目前 GitHub 与各大云市场上出现的 item_search_tmall 均属于第三方数据服务商(万邦、OneBound、凡邦等)基于「淘宝联盟+自营爬虫」二次封装的聚合 API,字段丰富、接入简单,适合「内部选品、价格监控、快速 MVP」等场景
本文以 万邦 为例,给出完整 Java 调用示例,支持分页、排序、价格区间、仅天猫过滤。

二、接口速览

表格
复制
地址https://api-gw.onebound.cn/taobao/item_search_tmall
方法GET
鉴权key + secret(平台颁发)
关键词q=xxx
分页page=1&page_size=20(最大 40)
排序sort=sale_desc(销量降序)、price_asc(价格升序)…
过滤filter=tmall(只返回天猫)
返回JSON;含 total、page、item[];单条含 num_iid、title、price、pic、sales、shop_type 等 

三、Maven 依赖

xml
复制
<!-- HTTP --><dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version></dependency><!-- JSON --><dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.43</version></dependency>

四、统一入参实体

java
复制
@Datapublic class TmallSearchReq {
    private String key;
    private String secret;
    private String q;           // 关键词
    private int page = 1;
    private int pageSize = 20;  // 最大 40
    private String sort;        // sale_desc | price_asc | price_desc
    private String filter;      // tmall
    private String startPrice;
    private String endPrice;}

五、核心 Service(OkHttp + FastJSON)

java
复制
public class TmallSearchService {

    private static final String API = "https://api-gw.onebound.cn/taobao/item_search_tmall";

    public static JSONObject search(TmallSearchReq req) throws IOException {
        HttpUrl.Builder ub = HttpUrl.parse(API).newBuilder();
        ub.addQueryParameter("key", req.getKey());
        ub.addQueryParameter("secret", req.getSecret());
        ub.addQueryParameter("q", req.getQ());
        ub.addQueryParameter("page", String.valueOf(req.getPage()));
        ub.addQueryParameter("page_size", String.valueOf(req.getPageSize()));
        if (req.getSort() != null) ub.addQueryParameter("sort", req.getSort());
        if (req.getFilter() != null) ub.addQueryParameter("filter", req.getFilter());
        if (req.getStartPrice() != null) ub.addQueryParameter("start_price", req.getStartPrice());
        if (req.getEndPrice() != null) ub.addQueryParameter("end_price", req.getEndPrice());

        Request httpReq = new Request.Builder()
                .url(ub.build())
                .get()
                .header("Accept-Encoding", "gzip")
                .build();

        try (Response resp = new OkHttpClient().newCall(httpReq).execute()) {
            String json = resp.body().string();
            JSONObject root = JSON.parseObject(json);
            if (!"200".equals(root.getString("code"))) {
                throw new RuntimeException("API 错误:" + root.getString("msg"));
            }
            return root.getJSONObject("items");
        }
    }}

六、返回 JSON 示例(节选)

JSON
复制
{
  "code": 200,
  "items": {
    "page": "1",
    "page_size": 20,
    "total_results": 842,
    "item": [
      {
        "num_iid": "723971306902",
        "title": "iPhone15 液态硅胶手机壳",
        "pic_url": "//g-search3.alicdn.com/img/imgextra/...jpg",
        "price": "28.8",
        "orginal_price": "88.0",
        "sales": 3200,
        "shop_type": "天猫",
        "detail_url": "https://detail.tmall.com/item.htm?id=723971306902"
      }
      // ... 19 more
    ]
  }}
字段说明见万邦文档

七、Main 方法一键运行

java
复制
public class Demo {
    public static void main(String[] args) throws Exception {
        TmallSearchReq req = new TmallSearchReq();
        req.setKey("你的key");
        req.setSecret("你的secret");
        req.setQ("空气净化器");
        req.setPage(1);
        req.setPageSize(20);
        req.setSort("sale_desc");   // 销量降序
        req.setFilter("tmall");     // 仅天猫

        JSONObject result = TmallSearchService.search(req);
        JSONArray list = result.getJSONArray("item");
        list.forEach(o -> {
            JSONObject l = (JSONObject) o;
            System.out.println(
                l.getString("num_iid") + "\t" +
                l.getString("title") + "\t" +
                l.getBigDecimal("price") + "\t" +
                l.getInteger("sales"));
        });
    }}
控制台输出(示例):
复制
723971306902	iPhone15 液态硅胶手机壳	28.8	3200
...

八、频率 & 限额

表格
复制
版本日调用量频率备注
免费100/IP1 qps足够测试
基础10 k5 qps59 元/月
高级100 k20 qps可谈折扣
超出返回 429,需做指数退避重试

九、常见异常对照

表格
复制
返回码含义解决
400参数为空检查 q、key、secret
403IP 未在白名单控制台绑定出口 IP
429频率超限降速或升级套餐
5003关键词无结果换词或去掉价格区间

十、小结

  1. 天猫「关键词搜索」官方不对外开放,只能用第三方聚合接口
  2. 万邦 item_search_tmall 字段齐全、接入简单,Java 示例 30 行即可跑通。
  3. 生产环境务必「本地缓存 + 限流 + 重试」,避免额度浪费。


相关文章

淘宝 API 接口获取教程

淘宝开放平台提供了丰富的 API 接口,帮助开发者获取淘宝平台的数据。以下是详细的获取方法和使用流程:一、注册与认证注册账号:访问淘宝开放平台官网,完成个人或企业开发者账号注册。实名认证:注册成功后,...

淘宝指定店铺商品销量与价格数据监控实战指南

在电商数据分析、竞品监控、选品决策等场景中,实时追踪指定淘宝/天猫店铺的商品销量和价格变动是核心需求。本文将深入讲解合规且稳定的监控方案,涵盖官方 API 接入、第三方数据服务调用、以及完整的 Jav...

实战代码解析淘宝视频接口

下面给出一份「Java 版」可落地的淘宝商品视频接口实战代码,覆盖「Token 获取 → 签名 → 调用 → 解析 → 下载」完整链路。示例基于 2025 年仍稳定的 taobao.item.vide...

淘宝商品评论数据获取实战:基于 Taobao.item_review 接口

在电商数据分析、用户体验优化和竞品分析中,获取商品评论是一项重要的功能。淘宝开放平台提供了商品评论的 API 接口,允许开发者通过合法的方式获取商品的用户评论数据。本文将详细介绍如何使用 Python...

用“爬虫”思路做淘宝 API 接口测试:从申请 Key 到 Python 自动化脚本

关键词:淘宝开放平台、API 测试、接口签名、Python 爬虫、数据驱动测试一、背景与合规说明淘宝在 2024 年升级了“反爬+合规”双策略:网页端 cookie 加密粒度更细,直接破解易触发 22...

获取淘宝SKU商品详情数据api的实战指南

在电商数据分析、竞品监控、个性化推荐等场景中,获取淘宝商品的SKU(Stock Keeping Unit,库存进出计量的基本单元)详情数据至关重要。本文将详细介绍如何通过合法途径获取淘宝SKU商品详情...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。