创作者的个人资料和几条表现不错的视频,可能让他看起来适合某场活动;但近期动态能说明更重要的问题:他是否持续围绕目标主题创作?人工检查很快就会过时,偶尔浏览一次也容易只关注最显眼的内容。对代理机构或品牌而言,更实用的做法是定期采集一组公开视频,保存检查当日的状态,并依据统一规则评估主题相关性。

下面介绍一个评估 TikTok 创作者公开动态的实用流程。该流程使用 jsonscraper 的 TikTok Scraper API 和 Python:通过文档说明的接口获取帖子、保存原始 JSON、将已确认的字段整理成表格,并计算符合指定主题的视频占比。也可以将视频描述交给文本分类器,作为一个单独且可控的后续步骤。
首先明确“符合主题”的定义
假设团队正在为一场家庭咖啡制作活动挑选创作者。粉丝数和个别视频的热度有助于描述触达范围,却不能单独回答动态与咖啡主题的相关程度。初步筛选需要关注内容特征:视频描述是否提到咖啡制作、设备、配方或评测;指定观察窗口内有多少条相关帖子;以及相关视频占采集视频的比例。
采集数据前,先用简短词表写明标准,例如“浓缩咖啡”“咖啡研磨机”“拿铁”“冲煮”。同时列出排除项和容易产生歧义的词。“咖啡”可能出现在笑话、广告植入或偶然提及中,因此文本关键词匹配只是初步标注,而不是对创作者的最终评估。至少区分三种状态:明确相关、可能相关和无关视频。
也应提前定义样本。例如,每周运行一次时,可以分析最近获取的 20 条帖子。这是监测方案设定的条件,并不意味着 API 保证返回恰好这么多内容:结果是否可用及其组成,取决于具体请求的响应。记录采集时间、获取的条目数和请求参数,才能在不混淆规则的情况下比较不同快照。
请求创作者动态
在 jsonscraper 文档中,GET /getUserFeed 接口要求提供参数 query,其值为用户名或个人资料 URL。文档列出的可选参数包括 count、region、sort_type、with_pinned_posts 和 max_cursor。API 密钥通过查询字符串中的 license_key 传递;请将其保存在环境变量中,而不要写入源代码。接口和参数详情见TikTok API 官方文档。
收到响应后,先检查外层的 status,再访问 tiktok 对象。用户动态中的帖子列表位于 tiktok.aweme_list。在已观察到的架构中,包含视频 ID、描述文本、发布时间、作者、URL 和统计数据对象。个别字段可能缺失,因此处理程序应将其保留为空值,而不是用编造的数字代替。
下面的最简示例适用于 Python 3.8 及更高版本,并使用 requests 库。请将密钥保存在 JSONSCRAPER_TIKTOK_LICENSE_KEY 环境变量中。代码会发起一次请求、检查 HTTP 响应和 API 外层状态、保存原始 JSON,并输出规范化后的数据行。
import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
API_KEY = os.environ["JSONSCRAPER_TIKTOK_LICENSE_KEY"]
PROFILE = "creator_username"
params = {
"license_key": API_KEY,
"query": PROFILE,
"count": 20,
"region": "US",
"sort_type": 0,
"with_pinned_posts": 0,
}
response = requests.get(
"https://tiktok.evelode.com/getUserFeed",
params=params,
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
raise RuntimeError("TikTok API returned a non-ok status")
tiktok = payload.get("tiktok") or {}
items = tiktok.get("aweme_list") or []
stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
Path("snapshots").mkdir(exist_ok=True)
Path(f"snapshots/{PROFILE}_{stamp}.json").write_text(
json.dumps(payload, ensure_ascii=False, indent=2),
encoding="utf-8",
)
rows = []
for item in items:
stats = item.get("statistics") or {}
author = item.get("author") or {}
rows.append({
"aweme_id": item.get("aweme_id"),
"created_at": item.get("create_time"),
"description": item.get("desc") or "",
"share_url": item.get("share_url"),
"creator": author.get("unique_id") or author.get("nickname"),
"play_count": stats.get("play_count"),
"digg_count": stats.get("digg_count"),
"comment_count": stats.get("comment_count"),
"share_count": stats.get("share_count"),
})
print(json.dumps(rows, ensure_ascii=False, indent=2))
该接口的 sort_type 参数中,0 表示按最新动态排序,1 表示按热门程度排序。示例选择最新动态,并通过 with_pinned_posts=0 排除置顶视频,以免旧置顶帖进入新帖样本。如果需要使用其他模式,请将参数保存在快照元数据中,并在每次运行时保持一致。
处理响应:从 JSON 到可复现的表格
建议在转换之前先保存原始响应。这样可以复核规范化过程、查明某行为何为空,并在响应中可选字段发生变化时调整处理程序。在工作存储中,除 JSON 外,还应保存 UTC 采集时间、查询的个人资料、请求参数以及脚本版本。不要将 API 密钥放入归档文件或日志中。
重复运行时,如果字段存在,请使用 aweme_id 作为帖子标识符。按该 ID 去重,可避免重复获取同一视频时将其计为多条帖子。同时应分别保存统计数据快照:播放量和互动数据反映的是观察时点,而不是视频不变的属性。如果缺少统计字段,就保留为空,并在计算对应指标时排除该记录。
架构中的发布时间字段名为 create_time。用于分析的表格应将其转换为日期,并同时保存原始值和规范化后的 UTC 时间。开始计算前,先检查几条实际响应记录,确认字段类型和单位符合预期。这一检查对于时间图表尤其重要:时间转换错误会将帖子错放到不同日期,并影响每周比较。
无需使用模型,也能构建最简单的主题分类器:规范化文本,搜索指定关键词,并标记匹配项。若想提高标注质量,可准备一组人工核验过的描述,并为边界情况制定规则。然后将简单的词典筛选结果与人工标注进行比较,找出造成误匹配的表达,并据此更新词表。这样就能建立一个清晰的基准,用来评估后续的 AI 应用。
import re
KEYWORDS = (
"咖啡", "浓缩咖啡", "咖啡研磨机", "拿铁", "冲煮",
)
def normalize(text):
text = (text or "").casefold()
return re.sub(r"\s+", " ", text).strip()
def classify(description):
text = normalize(description)
matches = [word for word in KEYWORDS if word in text]
return {
"topic_match": bool(matches),
"matched_terms": matches,
}
for row in rows:
row.update(classify(row["description"]))
描述中的关键词可能是有用信号,但分类器应返回可解释的依据——匹配词列表,而不只是“是/否”标签。使用语言模型时,应采用结构化提示:提供视频描述和固定分类,要求模型返回类别、简短理由及置信度。原始文本和模型回答应分开保存。任何会影响预算或合作伙伴选择的决定,都应由人工根据帖子链接进行核查。
使用清晰的分母计算指标
对于简单报告,主题视频占比和发布频率都很实用。主题占比的计算方式是:经确认符合主题的视频数,除以成功完成分类的视频数。务必同时展示这两个数,例如“检查了 18 条描述,其中 7 条相关”。这样结果更易理解,也能帮助发现百分比是否基于过小的样本。
发布频率可以表示为固定时段内获取的视频数,例如最近 30 天内的数量。应根据采集时间和发布日期设定时段边界。按周保存快照时,应保留每次运行的结果,而不是只更新汇总行:这样才能看出主题和活跃度的变化。不要把采集到的条目数解读为创作者发布内容的完整档案;应分析实际获取的样本,并明确说明其筛选规则。
观看量、点赞、评论和转发数据可作为每条视频的背景信息。比较绝对数值时应谨慎:发布时间较早的视频可能有更长时间积累互动。在同一创作者范围内进行比较时,应记录每次采集时间,并观察同一视频在不同快照之间的变化。如果没有记录间隔和测量可用性,就不要将两次快照之间的差异称为“增长速度”。
每个创作者档案的实用汇总记录应包括采集日期、所选参数、获取的帖子数、完成分类的描述数、主题匹配数、示例 URL 列表,以及对歧义案例的简短说明。这样的表格便于员工核查结论,也能让其他分析人员在下一个创作者档案上复现方法。
分页与定时运行
如果样本需要获取下一页,个人资料动态文档规定使用上一响应中返回的 max_cursor。传递时不要转换它:游标是一个不透明值,应保存后原样返回给 API。如果需要继续请求,也要检查响应中的 has_more。请限制页数或总请求预算,确保采集任务能够在可预测的范围内结束。
cursor = None
all_items = []
max_pages = 3
for _ in range(max_pages):
page_params = dict(params)
if cursor is not None:
page_params["max_cursor"] = cursor
page_response = requests.get(
"https://tiktok.evelode.com/getUserFeed",
params=page_params,
timeout=30,
)
page_response.raise_for_status()
page_payload = page_response.json()
if page_payload.get("status") != "ok":
raise RuntimeError("TikTok API returned a non-ok status")
page = page_payload.get("tiktok") or {}
all_items.extend(page.get("aweme_list") or [])
if not page.get("has_more"):
break
cursor = page.get("max_cursor")
if cursor is None:
break
根据任务选择运行频率:初步评估时,手动运行即可;维护创作者名单时,每周运行一次或许能发现变化,又不必持续轮询。可以使用 cron、CI 任务或编排器执行。流程很简单:从表格读取创作者档案、在限制并发的情况下发起请求、保存快照、检查成功响应的比例,并将汇总写入工作表。临时错误发生后,可在限制重试次数的前提下延迟重试;授权请求错误则应单独记录,以便检查密钥和配置。
AI 适用之处,以及需要人工核查的环节
如果描述包含俚语、多种语言或没有准确关键词的表达,AI 可用于分类。首先设定封闭的类别列表,并要求模型只依据描述文本进行判断。然后在一小组人工标注的样本上评估效果:比较模型类别与编辑人员的判断,并单独分析错误和歧义案例。相比无法解释的综合分数,报告中最好列出模型与人工标注的一致比例,以及经过检查的样本数。
不要在没有标准的情况下让模型“选出最佳创作者”。应将流程拆分为可衡量的特征:主题占比、发布规律、相关视频示例,以及公开互动数据的范围。模型可以简要概括这些字段并提供依据链接;最终决定仍由团队作出,并结合活动形式、受众和与创作者达成的协议来考虑。
如果分析涉及广告植入,还应根据具体帖子和适用要求,单独核查创作者是否披露与品牌的关系。美国联邦贸易委员会的指南说明,品牌关系应在推荐内容附近醒目披露;仅在个人资料简介或不易看到的文本部分提及,可能不足以让受众清楚注意到。请参阅 FTC 社交媒体创作者指南。公开数据监测有助于收集核查材料,但是否合规仍需结合具体帖子和活动背景进行判断。
最终成果
工作流设置完成后,团队就能获得带日期的公开动态快照、包含描述文本和可用指标的帖子表格,以及可重复计算的主题占比。借助这些材料,团队可以更快筛选待进一步核查的创作者、发现主题变化,并记录评估依据。整个方法都可供核验:通过原始 JSON、请求参数、分类规则和视频链接,可以追溯从数据到结论的过程。
首次测试时,请在一个创作者档案上运行脚本,保存原始响应,并人工检查几条分类结果。随后固定主题词表、样本规则和报告格式。当结果可以稳定复现后,再添加定时运行和创作者队列。接口和参数说明见 API 文档;产品概览和可用集成选项则可在 TikTok Scraper API 页面查看。
运行前实用检查清单
- 写明活动主题、纳入词表和边界案例。
- 固定样本窗口、
count值、排序方式和置顶帖设置。 - 将原始 JSON、采集日期和请求参数与密钥分开保存。
- 如果存在
aweme_id,就用它去重。 - 区分缺失值与零值;没有明确依据时,不要对指标求平均。
- 在主题占比旁展示样本量,并附上示例链接。
- 在 AI 分类结果用于活动决策前,先用人工标注样本进行核验。
- 按计划更新评估,并依据相同规则采集的快照进行比较。