巨量星图 API 教程:达人搜索、受众画像与传播表现
通过 Just One API 按内容关键词搜索巨量星图达人,获取基础资料、受众画像和传播指标。包含星图 ID 关联、统计口径记录与 JSON 导出的 Python 示例。
用内容关键词找到待评估的达人
准备抖音达人合作时,可以先根据内容主题搜索,再结合受众与传播表现判断是否值得进一步沟通。Just One API 的巨量星图接口支持把这几个查询步骤接起来,保存成可复核的达人资料。
本教程用“露营”作为内容关键词,最多读取两页达人搜索结果,为三位达人获取基础资料、受众画像和传播指标。目标是建立一份投放前的分析样本,便于比较候选达人。
注册并在文档中测试
注册 Just One API 后获取 API Token,通过巨量星图达人搜索文档免费测试。一个 Token 可用于多个平台 API,后续按调用量付费;权限和免费测试次数以账户显示为准。
本教程使用四个 GET 接口。先检查响应体业务 code=0;如果返回对象还包含 base_resp,也要检查其中的 status_code。外层请求成功不代表嵌套的平台结果一定成功。
第一步:搜索达人并取出星图 ID
搜索接口路径如下:
/api/douyin-xingtu/gw/api/gsearch/search_for_author_square/v1本例使用 keyword=露营、searchType=CONTENT、sort=FANS 和 page=1。按昵称寻找已知达人时,可改用 searchType=NICKNAME。
当前公开样例的列表位于 data.authors,其中 star_id 用作后续请求的 oAuthorId。它属于星图达人的标识体系,不要直接拿普通抖音接口的 UID 或 secUid 替代。已有星图达人 ID 时,可以跳过搜索。
下一页递增 page,并查看 data.pagination.has_more。示例还会对 ID 去重,遇到空页、没有新增 ID 或达到两页上限就停止。pagination.total_count 是当前搜索返回的结果数量信息,不是完整的抖音创作者总量。
第二步:获取基础资料和受众画像
把选中的星图 ID 传给达人资料 V1,参数名为 oAuthorId。本例明确指定 platform=SHORT_VIDEO,当前公开样例中可查看 id、nick_name、follower 和 sec_uid 等字段。
随后调用受众画像 V1,继续传入相同的 oAuthorId 和 platform,并指定 linkType=CONNECTED。该接口还提供 AWARE、INTERESTED、LIKE 和 FOLLOW 等筛选值。
不同 linkType 对应的受众范围不同。本文返回的 CONNECTED 画像不应统一标注为“粉丝画像”。当前样例的画像在 data.distributions 中,各分组附带说明和分布列表;last_update_time 提供更新时点信息。保存这些说明,能避免只剩数值后忘记其含义。
第三步:用一致口径读取传播指标
传播指标 V1接受独立的统计参数。为便于比较,本例给每位达人传入相同参数:
platform=SHORT_VIDEO:短视频。range=DAY_30:最近 30 天,也可按文档选择DAY_90。type=PERSONAL_VIDEO:个人视频;查询星图视频时,文档中的枚举拼写为XINTU_VIDEO。onlyAssign=false:不限定为仅已分配的视频。flowType=EXCLUDE:保留本例选定的过滤值,并把它记入分析条件。
DAY_30 是本次传播指标请求的条件,并不意味着前一步受众画像也是同样的 30 天窗口。画像要单独查看它返回的更新时点。flowType 的具体过滤含义应结合当前文档和业务确认,避免自行改写成未经验证的指标定义。
当前公开样例包含 expect_cpe、expect_cpm、interact_rate、play_over_rate、play_stability 等对象。有些值以带单位、百分号或比较描述的文本返回。脚本保留整个对象,不把展示文本直接转成浮点数,也不据此推算真实投放 ROI。
Python 示例:保存达人资料和分析条件
先安装依赖并设置 Token,命令适用于 macOS 或 Linux。将占位符替换成自己的 Token。
python3 -m pip install requests
export JUSTONEAPI_TOKEN='your_token'保存为 xingtu_sample.py,运行 python3 xingtu_sample.py。最多两次搜索,再为三位达人各查询资料、画像和传播指标,总计不超过 11 次 API 请求。每次调用失败会停止,已经保存的文件不会被删除。
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, **params):
try:
response = requests.get(
BASE_URL + path,
params={"token": TOKEN, **params},
timeout=120, allow_redirects=False,
)
except requests.RequestException:
raise RuntimeError("API network error or timeout") from None
if response.status_code != 200:
raise RuntimeError(f"API HTTP {response.status_code}")
try:
result = response.json()
except ValueError:
raise RuntimeError("API response is not JSON") from None
if not isinstance(result, dict) or result.get("code") != 0:
code = result.get("code") if isinstance(result, dict) else None
raise RuntimeError(f"API failed: code={code}; check the docs")
data = result.get("data")
if not isinstance(data, dict):
raise RuntimeError("Unexpected data shape; inspect the docs")
inner = data.get("base_resp")
if isinstance(inner, dict) and inner.get("status_code") not in (0, "0"):
raise RuntimeError("Platform response was unsuccessful")
return result
def save_json(folder, name, value):
(folder / name).write_text(
json.dumps(value, ensure_ascii=False, indent=2), encoding="utf-8"
)
def require_list(data, key):
value = data.get(key)
if not isinstance(value, list):
raise RuntimeError(f"Expected a list at {key}; inspect saved JSON")
return value
def output_folder(topic):
if not TOKEN or TOKEN == "your_token":
raise RuntimeError("Set JUSTONEAPI_TOKEN before running")
run_id = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S%fZ")
folder = Path(topic + "-output") / run_id
folder.mkdir(parents=True, exist_ok=False)
return folder
MAX_PAGES = 2
MAX_CREATORS = 3
PREFIX = "/api/douyin-xingtu/gw/api"
PLATFORM = "SHORT_VIDEO"
def main():
folder = output_folder("xingtu")
ids, seen = [], set()
for page in range(1, MAX_PAGES + 1):
result = call_api(
PREFIX + "/gsearch/search_for_author_square/v1",
keyword="露营", searchType="CONTENT", page=page, sort="FANS",
)
save_json(folder, f"search-{page}.json", result)
data = result["data"]
rows = require_list(data, "authors")
if not rows:
break
previous_count = len(ids)
for row in rows:
uid = row.get("star_id") if isinstance(row, dict) else None
if uid and str(uid) not in seen:
seen.add(str(uid))
ids.append(str(uid))
if len(ids) == previous_count:
break
pagination = data.get("pagination")
if not isinstance(pagination, dict):
raise RuntimeError("Missing pagination; inspect saved JSON")
if pagination.get("has_more") not in (True, 1, "1"):
break
selected = ids[:MAX_CREATORS]
save_json(folder, "selected-creators.json", selected)
scope = {
"platform": PLATFORM, "range": "DAY_30",
"type": "PERSONAL_VIDEO", "onlyAssign": "false",
"flowType": "EXCLUDE",
}
save_json(folder, "analysis-scope.json", {**scope, "linkType": "CONNECTED"})
for index, uid in enumerate(selected, start=1):
profile = call_api(
PREFIX + "/author/get_author_base_info/v1",
oAuthorId=uid, platform=PLATFORM,
)
save_json(folder, f"creator-{index}-profile.json", profile)
audience = call_api(
PREFIX + "/data_sp/author_audience_distribution/v1",
oAuthorId=uid, platform=PLATFORM, linkType="CONNECTED",
)
save_json(folder, f"creator-{index}-audience.json", audience)
spread = call_api(
PREFIX + "/data_sp/get_author_spread_info/v1",
oAuthorId=uid, **scope,
)
save_json(folder, f"creator-{index}-spread.json", spread)
print(f"Saved {len(selected)} creator samples to {folder}")
if __name__ == "__main__":
try:
main()
except RuntimeError as error:
raise SystemExit(str(error)) from None如何比较这些结果
输出位于 xingtu-output 的独立时间目录。selected-creators.json 保存候选 ID;analysis-scope.json 保存使用的筛选值;每位达人的资料、画像和传播指标分文件保存,便于独立更新和复核。
比较达人时,先确认平台、视频类型、传播指标时间范围及其他过滤值一致,再查看内容匹配度和受众分布。若要提取一个数值列,需要先识别展示文本的单位和缺失标记,并保留原字段。没有返回指标的达人应标记为数据不足,不能默认指标为零。
常见问题
普通抖音视频接口能代替星图接口吗?
普通抖音接口适合视频内容、详情和评论等场景,星图接口提供达人营销相关数据。需要普通视频数据时,可阅读抖音视频采集教程。两类数据可以结合,但需要先确认 ID 关联方式与字段口径。
受众画像和传播指标可以一次取全吗?
本文是多个独立请求组成的流程。先选出候选达人,再按需要查询画像和传播指标,可以减少不必要的调用。不同接口的数据更新时点也可能不同,应随响应保留。
如何处理接口失败和暂时缺少指标?
业务失败应单独记录,成功响应中的空字段则保留为缺失。示例不自动重试。正式任务可以参考重试与并发策略,为瞬时故障设置有限次数重试,不要对参数或权限问题反复发请求。
从星图达人搜索测试一个与你业务相关的内容关键词,再为候选达人补充画像和传播数据。
继续使用 Just One API
登录 Dashboard 获取 Token,查看完整 API 文档,或打开 MCP GitHub 项目了解最新配置。