返回教程列表
教程2026年10月11日5 分钟阅读

抖音电商商品数据怎么获取?商品详情、SKU 与评论 API 教程

用 Just One API 获取抖音电商商品详情、SKU 和买家评论。包含商品 ID、评论分页、SKU 不支持返回码与保存 JSON 的 Python 示例。

已有抖音商品 ID,如何获取商品、SKU 和评论?

如果你的目标是分析抖音商品,而不是采集视频内容,可以使用 Just One API 的抖音电商接口。通过商品 ID,分别请求商品详情、SKU 信息和买家评论,再将结果关联到同一商品,建立商品资料与反馈样本。

这三个接口解决不同问题:详情用于查看商品基本信息和销售相关数据,SKU 用于查看具体规格,评论用于分析买家反馈。本文演示查询一个已知商品,保存详情、SKU 响应和最多 2 页评论。

注册并免费测试

注册 Just One API 账户 获取 API Token,在 抖音电商商品详情文档 中填入 Token 和商品 ID 即可免费测试。一个 Token 可接入各平台 API,后续按实际调用量付费;试用次数以账户内对应接口显示为准。

本教程使用三个 GET 接口,都需要 token 和 itemId 查询参数:

  • /api/douyin-ec/get-item-detail/v2:商品详情。
  • /api/douyin-ec/get-item-sku-info/v2:商品 SKU 信息。
  • /api/douyin-ec/get-item-comments/v1:商品评论,另需按需要传入 page。

这里的 itemId 是抖音电商商品 ID,不能直接使用视频的 aweme_id、店铺 ID 或任意推广标识替代。如果暂时没有商品 ID,可先通过 商品搜索 或 店铺商品列表 查找目标商品,并核对返回的标识。

第一步:获取商品详情

调用 商品详情 V2,将目标商品 ID 传入 itemId。先确认业务 code=0,再处理返回数据。

当前公开样例中,商品信息位于 data.model.product,其中 product_base 包含标题、图片等信息,product_sales 包含销售相关数据;店铺信息位于 data.model.shop。

代码会保存完整响应,方便你核对所需字段。销售数据应结合实际返回字段和展示口径理解,不要仅凭字段名称就当作某个固定时间区间的精确成交额或销量。

第二步:查询 SKU,并处理不支持的商品

SKU 信息 V2 同样使用 itemId。当前公开响应样例包含 data.skus 数组,SKU 条目包含 id、productId、price、dealPrice 和 salePropertyValues 等字段,可用于整理规格与价格信息。

商品级价格与 SKU 价格可能代表不同规格或优惠条件。保存原始字段和值,先核对金额单位和价格定义,再做跨商品比较;不要直接假设所有字段使用相同单位。

code=202 不代表“商品没有 SKU”

文档说明,SKU V2 对不支持的商品返回业务 code=202。这表示该接口当前不能提供这个商品的 SKU 数据,不能据此判断商品没有规格或已经售罄。

下面的代码会保存这份响应并输出提示,继续请求商品评论。它只对 SKU V2 单独接受 202,其他接口仍要求业务 code=0。

第三步:获取买家评论

商品评论 V1 按 itemId 和 page 分页。本文从第 1 页开始,最多获取 2 页。

当前公开样例的评论列表位于 data.Comments,正文为 Content,评论 ID 为 Id,后续页标识为 data.HasMore。这些字段有大小写区别,不要套用视频评论接口中的 comments 或 has_more。

当 HasMore 为假时停止。评论数据适合整理规格体验、物流或售后反馈;扩大采集时可用“商品 ID + 评论 Id”去重,并记录采集时间和范围。

Python 示例:保存一个商品的数据

安装依赖并设置 Token 与真实商品 ID。以下命令适用于 macOS 或 Linux;占位值需要替换,真实 Token 不应出现在公开代码和日志中。

bash
python3 -m pip install requests
export JUSTONEAPI_TOKEN='your_token'
export DOUYIN_ITEM_ID='your_item_id'

将代码保存为 douyin_ecommerce_sample.py,运行 python3 douyin_ecommerce_sample.py。最多调用 4 次接口:商品详情、SKU 信息,以及最多 2 页评论。商品详情失败等情况会使脚本提前停止。

python
import json
import os
from datetime import datetime, timezone
from pathlib import Path

import requests

BASE_URL = "https://api.justoneapi.com"
TOKEN = os.environ.get("JUSTONEAPI_TOKEN", "")


def call_api(path, method="GET", accepted_codes=(0,), **params):
    if not TOKEN or TOKEN == "your_token":
        raise RuntimeError("Set JUSTONEAPI_TOKEN before running")
    values = {"token": TOKEN, **params}
    arguments = {"data": values} if method == "POST" else {"params": values}
    try:
        response = requests.request(
            method, BASE_URL + path, timeout=120, **arguments,
        )
    except requests.RequestException:
        raise RuntimeError("Network error or timeout") from None
    if response.status_code != 200:
        raise RuntimeError(f"HTTP {response.status_code}")
    try:
        result = response.json()
    except ValueError:
        raise RuntimeError("Response is not valid JSON") from None
    if not isinstance(result, dict) or result.get("code") not in accepted_codes:
        code = result.get("code") if isinstance(result, dict) else None
        raise RuntimeError(f"API failed: code={code}; check the docs")
    return result


def output_dir(prefix):
    stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S%fZ")
    folder = Path(prefix) / stamp
    folder.mkdir(parents=True, exist_ok=False)
    return folder


def save_json(folder, filename, value):
    (folder / filename).write_text(
        json.dumps(value, ensure_ascii=False, indent=2), encoding="utf-8",
    )


ITEM_ID = os.environ.get("DOUYIN_ITEM_ID", "")
MAX_COMMENT_PAGES = 2


def main():
    if not ITEM_ID or ITEM_ID == "your_item_id":
        raise RuntimeError("Set DOUYIN_ITEM_ID to a real product ID")
    folder = output_dir("douyin-ecommerce-output")
    detail = call_api("/api/douyin-ec/get-item-detail/v2", itemId=ITEM_ID)
    save_json(folder, "product-detail.json", detail)

    sku = call_api(
        "/api/douyin-ec/get-item-sku-info/v2",
        accepted_codes=(0, 202), itemId=ITEM_ID,
    )
    save_json(folder, "product-sku.json", sku)
    if sku["code"] == 202:
        print("SKU lookup is not supported for this product (code 202)")

    for page in range(1, MAX_COMMENT_PAGES + 1):
        comments = call_api(
            "/api/douyin-ec/get-item-comments/v1",
            itemId=ITEM_ID, page=str(page),
        )
        save_json(folder, f"product-comments-{page}.json", comments)
        if comments["data"].get("HasMore") not in (True, 1, "1"):
            break
    print(f"Saved product responses to {folder}")


if __name__ == "__main__":
    try:
        main()
    except RuntimeError as error:
        raise SystemExit(str(error)) from None

每次运行会在 douyin-ecommerce-output 下新建目录,保存原始商品详情、SKU 结果和评论响应。遇到 SKU 202 时,输出文件会保留该业务码,便于下游区分“不支持”与“成功返回空列表”。代码依据文档公开样例编写,实际字段与商品可用性以运行时结果为准。

除上述 SKU 特定情况外,脚本失败即停止,不会自动重试;已经保存的文件仍然保留。再次运行会重新请求。扩大采集时可参考 失败重试指南,增加断点记录与有上限的重试。

常见问题

抖音电商 API 和抖音视频 API 有什么区别?

电商接口围绕商品、SKU、店铺和商品评论;视频接口围绕视频内容与视频讨论。如果需要关键词搜视频、视频详情和评论,可阅读 抖音视频数据采集教程。两者的 ID 和返回结构不能直接混用。

能用 SKU 返回值判断实时库存吗?

先核对所用接口是否明确提供满足需求的库存字段。规格列表、价格和销量不等于实时可售库存,缺失库存字段也不代表库存为零。本文示例用于获取商品、规格与反馈样本。

评论为空,是不是没有买家评价?

先检查业务码,再看返回列表、分页状态和商品是否可获取。接口失败、不支持、空列表和采集页数到达上限是不同状态,不应统一解释为“没有评价”。

想比较淘宝和抖音的同类商品,下一步怎么做?

可继续阅读 淘宝/天猫商品数据教程。先建立商品或规格对应关系,再统一价格类型、采集时间和计量单位;仅按标题相似度匹配容易把不同规格混在一起。

从一个目标商品开始

先在 抖音电商在线文档 中免费测试一个目标商品,再分别验证 SKU 和评论结果。确认字段和支持范围满足需求后,再扩展到店铺商品或定期监测。

继续使用 Just One API

登录 Dashboard 获取 Token,查看完整 API 文档,或打开 MCP GitHub 项目了解最新配置。