×

TikTok item_get_video - 获取视频详情接口对接全攻略:从入门到精通

万邦科技Lex 万邦科技Lex 发表于2025-12-28 11:10:46 浏览68 评论0

抢沙发发表评论

                                    注册账号免费测试TikTokAPI数据接口

TikTok 的item_get_video接口是获取单条视频精细化详情的核心工具,输入视频 ID / 分享链接即可返回基础信息、互动数据、创作者信息、商品标签、版权标识等全量内容,广泛用于跨境内容聚合、社媒数据分析、带货效果评估、品牌舆情监测等场景。该接口存在官方与第三方两条合规接入路径,官方采用 OAuth2.0 授权,第三方多为 key-secret 签名校验,本攻略覆盖全流程实操与生产级优化,兼顾入门与稳定性需求。


一、接口核心认知:功能与适配场景

1. 接口定位与核心价值

  • 核心功能:输入 TikTok 视频 ID(video_id)/ 分享链接,获取视频标题、播放量、点赞 / 评论 / 分享数据、创作者信息、视频封面 / 时长、商品标签、发布时间、版权状态等字段,支持多语言返回与直播回放兼容。

  • TikTok 平台特性

    • 数据覆盖:支持短视频、直播回放、创作者合集视频,新视频收录延迟 3-5 分钟;

    • 专属字段:包含播放完成率、转发率、带货商品列表、音乐 BGM 信息等跨境平台特色字段;

    • 权限分层:基础字段(标题、播放量)支持普通权限,进阶字段(视频直链、商品标签)需企业级或专项权限;

    • 多标识兼容:支持 video_id(接口专用)、share_url(分享链接)、item_id(第三方通用 ID)三种查询方式。

  • 典型应用场景

    1. 跨境内容聚合:搭建多语言视频平台,提供 TikTok 视频检索与播放入口;

    2. 带货数据分析:关联视频与商品标签,评估短视频带货转化效率;

    3. 创作者调研:分析同类视频互动数据,辅助跨境账号选题与内容创作;

    4. 品牌舆情:追踪品牌关键词相关视频的传播量与评论倾向,优化海外营销;

    5. 版权监测:识别违规搬运视频,保护原创内容权益。

2. 核心参数与返回字段

(1)请求参数(官方与第三方通用规范)

参数名称类型是否必填说明应用示例
client_id/client_keystring应用标识,官方平台为 client_id,第三方为 keyawexxxxxxtiktok_abc123
client_secret/secretstring签名密钥,官方用于生成 token,第三方用于签名校验tiktok_def456
access_tokenstring官方必填OAuth2.0 授权令牌,有效期 2 小时,需定期刷新eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
video_idstring视频唯一标识,支持 TikTok 原生 ID 或第三方映射 ID7298345678901234567
share_urlstring视频分享链接,可替代 video_id(部分第三方支持)https://www.tiktok.com/@user/video/7298345678901234567
fieldsstring指定返回字段,官方接口必填,第三方默认全量id,title,stats,author,products
timestamplong第三方必填请求时间戳(毫秒级,有效期 5 分钟)1735689600000
signstring第三方必填签名值(MD5 32 位大写)3A9F7C2D1E0B86453210FEDCBA789654
need_productint是否返回带货商品信息,默认 0(不返回)1(返回商品 ID、名称、价格)
need_musicint是否返回 BGM 信息,默认 0(不返回)1(返回音乐 ID、名称、创作者)
注意事项
  1. 官方接口通过fields指定返回字段,避免冗余;第三方接口通常支持need_xxx控制字段返回;

  2. video_id可通过 TikTok 分享链接提取,格式为https://www.tiktok.com/@xxx/video/{video_id}

  3. 官方access_token需通过 OAuth2.0 流程获取,刷新周期建议 1.5 小时。

(2)返回核心字段(按业务场景分类)

字段分类核心字段说明
视频基础信息video_idTikTok 视频唯一 ID

title视频标题(多语言支持)

description视频描述(含标签与话题)

cover_url封面图 URL(高清)

duration视频时长(秒)

create_time发布时间(时间戳 / 格式化字符串)

aspect_ratio视频宽高比(如 9:16)

status视频状态(0 = 正常,1 = 审核中,2 = 已下架)
互动数据play_count累计播放量

like_count点赞数

comment_count评论数

share_count转发数

favorite_count收藏数

completion_rate播放完成率(%,需企业权限)
创作者信息author_id创作者 ID

author_name创作者昵称

author_avatar创作者头像 URL

author_follower创作者粉丝数(需权限)

author_verified认证状态(0 = 未认证,1 = 个人认证,2 = 企业认证)
带货与内容信息products商品标签列表(含商品 ID、名称、价格、链接)

music_infoBGM 信息(含音乐 ID、名称、创作者)

hashtags话题标签列表(如 #fyp、#tiktok)

copyright_type版权类型(1 = 原创,2 = 授权,3 = 搬运)

play_url视频播放链接(需权限,部分仅返回跳转链接)

3. 接口限制与注意事项

  • 调用频率限制

    接入方式调用频率适用场景
    TikTok 官方个人10 次 / 分钟个人调研、小型工具
    TikTok 官方企业60 次 / 分钟商业内容聚合、舆情监测
    第三方合规服务商30-100 次 / 分钟跨境电商数据分析、批量内容采集
  • 数据缓存规则:基础信息缓存 1 小时,互动数据缓存 5 分钟,热门视频缓存缩短至 1 分钟;企业用户可申请refresh=1强制刷新(需额外权限);

  • 内容限制:已下架 / 违规视频、隐私视频(仅好友可见)、未过审视频不会返回;版权内容(如音乐 MV)仅返回基础信息,无播放链接;

  • 合规要求:禁止批量抓取视频源文件用于商用,播放链接需跳转 TikTok 站内,二次创作需遵守 TikTok 版权规则与当地数据保护法规(如 GDPR)。


二、对接前准备:权限与环境搭建

1. 获取接口权限(两条合规路径)

TikTok item_get_video 接口无公开免费接入渠道,需通过官方开放平台合规第三方服务商获取权限,具体对比如下:
接入方式操作步骤优缺点
TikTok 官方开放平台1. 登录 TikTok for Developers;2. 完成企业认证(需营业执照、法人信息);3. 创建应用,选择 “Video API” 类目;4. 申请video.detail接口权限,提交业务用途说明;5. 通过 OAuth2.0 流程获取access_token优点:数据权威、字段完整、合规性强;缺点:审核严格(周期 7-15 个工作日)、需企业资质、部分字段(播放链接)需专项授权
第三方合规服务商1. 选择口碑服务商(如 APISpace、聚合数据);2. 注册账号并完成实名认证;3. 购买 TikTok 视频接口套餐;4. 在服务商后台获取keysecret和接口调用地址优点:接入快(10 分钟完成)、无需复杂资质、调试工具完善;缺点:部分进阶字段(商品标签)需付费升级、调用次数有配额限制
风险提示:严禁使用非法爬虫接口,违反 TikTok 用户协议及《计算机信息网络国际联网安全保护管理办法》,存在账号封禁、法律追责风险。

2. 技术环境准备

(1)支持语言与协议

  • 协议:HTTPS(强制,保障跨境数据传输安全);

  • 开发语言:支持 Python、Java、PHP、Go 等所有主流语言,推荐Python(适配跨境数据处理与多语言解析)。

(2)必备工具与依赖

工具类型推荐工具用途
调试工具Postman快速验证接口可用性,排除代码逻辑干扰

在线 MD5 工具校验签名生成正确性

TikTok 视频 ID 提取工具从分享链接中提取 video_id
开发依赖requests(Python)发送 HTTP 请求

hashlib(Python)生成接口签名

pandas(Python)批量整理视频数据

jsonpath-ng快速解析嵌套 JSON 响应

python-jose处理 OAuth2.0 授权(官方接口)
辅助工具Redis缓存视频详情,减少重复请求

logging记录接口调用日志,便于问题追溯

三、实操步骤:接口对接全流程(Python 示例)

步骤 1:理解 TikTok 接口认证与签名规则

(1)官方接口 OAuth2.0 授权流程

  1. 构建授权 URL,引导用户授权;

  2. 获取授权码,通过client_idclient_secret、授权码获取access_token

  3. access_token调用item_get_video接口,每次请求在 Header 中携带Authorization: Bearer {access_token}

  4. access_token有效期 2 小时,需通过refresh_token定期刷新。

(2)第三方接口签名规则(MD5 加密)

  1. 剔除参数中的sign字段(若存在);

  2. 将剩余参数按参数名 ASCII 升序排序;

  3. 拼接为key1=value1&key2=value2&...的字符串;

  4. 在字符串末尾拼接&secret=你的secret

  5. 对拼接后的字符串进行 MD5 加密,生成 32 位大写字符串即为sign

步骤 2:完整代码实现(第三方签名 + 官方 OAuth2.0 双示例)

(1)依赖安装

bash
运行
pip install requests pandas jsonpath-ng python-jose hashlib

(2)第三方签名方式代码(快速接入)

import requests
import hashlib
import time
import json
import pandas as pd
import logging
from urllib.parse import urlencode
# 封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex
# 日志配置
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s",
    handlers=[logging.FileHandler("tiktok_item_get_video.log"), logging.StreamHandler()]
)

# 接口配置(替换为自身的key、secret、接口地址)
CONFIG = {
    "key": "你的第三方key",
    "secret": "你的第三方secret",
    "api_url": "https://api.example.com/tiktok/item_get_video",
    "save_path": "TikTok视频详情.xlsx"
}

def generate_sign(params: dict, secret: str) -> str:
    """生成第三方接口签名(MD5 32位大写)"""
    params.pop("sign", None)
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    param_str = urlencode(sorted_params, encoding="utf-8") + f"&secret={secret}"
    md5 = hashlib.md5()
    md5.update(param_str.encode("utf-8"))
    return md5.hexdigest().upper()

def standardize_video_data(raw_video: dict) -> dict:
    """标准化视频数据,统一输出格式"""
    create_time = raw_video.get("create_time", 0)
    create_time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(create_time)) if create_time else ""
    duration = raw_video.get("duration", 0)
    duration_str = f"{duration//60}:{duration%60:02d}"

    return {
        "视频ID": raw_video.get("video_id", ""),
        "视频标题": raw_video.get("title", ""),
        "视频描述": raw_video.get("description", ""),
        "封面链接": raw_video.get("cover_url", ""),
        "视频时长": duration_str,
        "发布时间": create_time_str,
        "播放量": raw_video.get("play_count", 0),
        "点赞数": raw_video.get("like_count", 0),
        "评论数": raw_video.get("comment_count", 0),
        "分享数": raw_video.get("share_count", 0),
        "收藏数": raw_video.get("favorite_count", 0),
        "创作者ID": raw_video.get("author_id", ""),
        "创作者昵称": raw_video.get("author_name", ""),
        "创作者头像": raw_video.get("author_avatar", ""),
        "认证状态": "认证" if raw_video.get("author_verified", 0) else "未认证",
        "话题标签": ",".join(raw_video.get("hashtags", [])),
        "商品数量": len(raw_video.get("products", [])) if raw_video.get("products") else 0,
        "版权类型": raw_video.get("copyright_type", "未知"),
        "视频状态": "正常" if raw_video.get("status", 0) == 0 else "已下架/违规",
        "请求时间": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    }

def tiktok_item_get_video(
    video_id: str,
    need_product: int = 0,
    need_music: int = 0
) -> dict:
    """调用TikTok item_get_video接口(第三方签名方式)"""
    params = {
        "key": CONFIG["key"],
        "video_id": video_id,
        "need_product": need_product,
        "need_music": need_music,
        "timestamp": int(time.time() * 1000)
    }
    params["sign"] = generate_sign(params, CONFIG["secret"])

    try:
        response = requests.post(
            url=CONFIG["api_url"],
            data=json.dumps(params),
            headers={"Content-Type": "application/json"},
            timeout=20,
            verify=True
        )
        response.raise_for_status()
        result = response.json()

        if result.get("code") == 0 or result.get("status") == "success":
            raw_video = result.get("data", {})
            if not raw_video:
                logging.warning(f"无视频数据返回(视频ID:{video_id})")
                return {"success": False, "error_msg": "无视频数据"}
            return {
                "success": True,
                "data": standardize_video_data(raw_video),
                "error_msg": ""
            }
        else:
            error_msg = result.get("msg", result.get("message", "接口调用失败"))
            logging.error(f"接口返回错误(视频ID:{video_id}):{error_msg}(code={result.get('code')})")
            return {"success": False, "error_msg": error_msg}
    except requests.exceptions.RequestException as e:
        logging.error(f"网络请求异常(视频ID:{video_id}):{str(e)}")
        return {"success": False, "error_msg": f"网络异常:{str(e)}"}
    except Exception as e:
        logging.error(f"数据解析异常(视频ID:{video_id}):{str(e)}")
        return {"success": False, "error_msg": f"解析异常:{str(e)}"}
# 封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex
# 调用示例
if __name__ == "__main__":
    # 单视频获取示例
    video_id = "7298345678901234567"
    result = tiktok_item_get_video(video_id=video_id, need_product=1)
    if result["success"]:
        print("TikTok视频详情:")
        for k, v in result["data"].items():
            print(f"{k}:{v}")
    else:
        print(f"获取失败:{result['error_msg']}")

(3)官方接口 OAuth2.0 调用示例(核心片段)

from jose import jwt
import requests

def get_access_token(client_id, client_secret, code, redirect_uri):
    """通过授权码获取access_token"""
    url = "https://open-api.tiktok.com/oauth/access_token/"
    data = {
        "client_id": client_id,
        "client_secret": client_secret,
        "code": code,
        "grant_type": "authorization_code",
        "redirect_uri": redirect_uri
    }
    response = requests.post(url, data=data)
    return response.json().get("access_token")

def tiktok_official_item_get(access_token, video_id):
    """调用TikTok官方视频详情接口"""
    url = "https://open-api.tiktok.com/video/detail/"
    headers = {"Authorization": f"Bearer {access_token}"}
    params = {
        "video_id": video_id,
        "fields": "id,title,description,duration,cover_image_url,stats,author,products"
    }
    response = requests.get(url, headers=headers, params=params)
    return response.json()

四、调试与问题排查:快速解决对接异常

1. 优先用 Postman 调试(排除代码干扰)

  1. 构造请求:新建 POST/GET 请求,填写接口 URL,请求头设置Content-Type: application/json

  2. 填写参数:在请求体 / 参数中输入client_id/keyvideo_idtimestamp等必填项,按需补充need_product等可选参数;

  3. 生成签名 / 携带 token:官方接口在 Header 中携带Authorization: Bearer {access_token},第三方接口计算sign并填入;

  4. 发送请求:查看响应结果,验证接口可用性。

2. 高频问题排查表

问题现象常见原因解决方案
认证失败(401)1. client_id/keyclient_secret/secret错误;2. access_token过期 / 无效;3. 签名生成错误;4. 时间戳过期1. 核对密钥与后台一致;2. 重新获取access_token;3. 按 ASCII 升序排序参数并重新计算签名;4. 校准本地时间(误差≤5 分钟)
权限不足(403)1. 未申请item_get_video接口权限;2. 无商品 / 音乐数据权限;3. 调用频率超限1. 在开放平台 / 服务商后台确认接口已开通;2. 申请对应进阶权限;3. 增加请求间隔,降低调用频率
参数错误(400)1. video_id格式错误(非 TikTok 有效 ID);2. fields字段非法;3. 字段类型错误1. 在 TikTok 官网验证视频 ID 有效性;2. 核对fields取值(参考官方文档);3. 检查参数类型(如timestamp为数字)
无数据返回1. 视频 ID 无效 / 已下架;2. 视频为隐私 / 版权受限内容;3. 接口未收录该视频1. 核对视频 ID,在 TikTok 官网确认视频状态;2. 排除版权内容;3. 更换服务商或申请官方专项权限
字段缺失(如无商品列表)1. 账号无企业权限;2. 视频未关联商品;3. 接口版本不支持1. 升级为企业账号或申请专项权限;2. 确认视频是否带商品标签;3. 联系服务商升级接口版本


五、进阶优化:生产级稳定性提升

1. 性能优化

  • 异步并发请求:批量获取多视频时,使用aiohttp实现异步请求,控制并发数≤5(避免频率超限),效率比同步提升 4-6 倍;

  • 智能缓存策略:用 Redis 缓存视频详情,缓存 key 为tiktok_video_{video_id},基础信息缓存 1 小时,互动数据缓存 5 分钟,减少重复请求;

  • 数据复用:通过item_get_video获取的author_id,可联动 TikTok 用户接口获取创作者详细信息,避免重复调用。

2. 数据质量优化

  • 数据去重:按video_id去重,避免同一视频多次入库;

  • 异常值过滤:过滤播放量为 0、状态为下架的无效数据;

  • 字段补全:对缺失的话题标签,通过视频描述关键词自动补充(如描述含 “#fyp” 则补充分类为 “热门”)。

3. 合规与安全

  • 密钥管理:生产环境将client_id/keyclient_secret/secret存储在环境变量 / 配置中心(如 Nacos),禁止硬编码,定期轮换密钥;

  • 数据合规:视频数据仅用于合规业务,播放链接需跳转 TikTok 站内,二次创作需获得创作者授权,遵守 GDPR 等数据保护法规;

  • 日志审计:详细记录接口调用的参数、响应、错误信息,保留至少 7 天日志,便于合规审计与问题追溯。


六、扩展场景:接口联动与功能升级

  1. 联动item_search_video接口:先通过关键词搜索获取视频 ID 列表,再批量调用item_get_video获取详情,实现 “搜索 - 详情” 全链路;

  2. 跨境带货分析模型:结合播放量商品点击量转化率等指标,构建带货效果评分公式,自动筛选优质带货视频;

  3. 实时监控告警:用APScheduler定时调用接口,监控目标视频的播放量 / 评论数变化,触发舆情 / 爆款告警。


群贤毕至

访客