프로필과 몇 개의 인기 영상만 보면 캠페인에 적합한 크리에이터처럼 보일 수 있지만, 최근 피드는 더 중요한 질문에 답해 줍니다. 이 크리에이터는 원하는 주제를 꾸준히 다루고 있을까요? 수작업 검토는 금세 낡은 정보가 되고, 한 번 훑어보는 방식은 눈에 띄는 게시물만 고르는 결과로 이어지기 쉽습니다. 에이전시나 브랜드에는 공개 영상을 반복 가능한 방식으로 표집하고, 확인 날짜의 상태를 저장한 뒤, 동일한 규칙으로 주제 적합성을 평가하는 편이 더 유용합니다.

아래에서는 TikTok 크리에이터의 공개 피드를 평가하는 실용적인 과정을 설명합니다. jsonscraper TikTok Scraper API와 Python을 이용해 문서화된 엔드포인트로 게시물을 가져오고, 원본 JSON을 저장한 다음, 확인된 필드를 표로 정리하고, 지정한 주제에 맞는 영상의 비율을 계산합니다. 원한다면 설명문을 텍스트 분류기에 전달해 별도로 관리되는 다음 단계로 진행할 수도 있습니다.
먼저 ‘적합하다’의 의미를 정하세요
팀이 홈 커피 만들기 캠페인에 적합한 크리에이터를 고른다고 가정해 보겠습니다. 팔로워 수와 개별 영상의 인기는 도달 범위를 설명하는 데 도움이 될 수 있지만, 피드가 커피 주제와 얼마나 관련 있는지 그 자체로 알려주지는 않습니다. 첫 번째 필터에는 콘텐츠 관련 신호가 필요합니다. 영상 설명에서 커피 제조, 장비, 레시피 또는 리뷰를 언급하는지, 정해진 관찰 기간에 해당 주제의 게시물이 몇 개나 포함됐는지, 수집한 영상 중 주제에 맞는 영상의 비율이 얼마인지 살펴볼 수 있습니다.
데이터 수집 전에 짧은 기준 사전을 작성하세요. 예를 들어 ‘에스프레소’, ‘커피 그라인더’, ‘라테’, ‘브루잉’ 등을 넣을 수 있습니다. 제외할 표현과 의미가 모호한 단어도 추가하세요. ‘커피’는 농담이나 광고 협찬, 우연한 맥락에서 나올 수 있으므로 텍스트 일치 자동 판정은 초기 라벨일 뿐, 크리에이터에 대한 최종 평가가 아닙니다. 최소한 명확히 적합, 적합 가능성 있음, 관련 없음의 세 가지 상태로 나누세요.
표본도 미리 정해야 합니다. 예를 들어 매주 실행할 때마다 가장 최근에 가져온 게시물 20개를 분석할 수 있습니다. 이는 모니터링 방식에 관한 기준이지, API가 정확히 그만큼의 결과를 반환한다는 보장은 아닙니다. 결과의 이용 가능 여부와 구성은 각 요청의 응답에 따라 달라집니다. 규칙이 다른 스냅샷을 뒤섞지 않도록 수집 시각, 가져온 항목 수, 요청 매개변수를 기록하세요.
크리에이터 피드 요청하기
jsonscraper 문서에 따르면 GET /getUserFeed 엔드포인트에는 사용자 이름 또는 프로필 URL인 필수 매개변수 query가 필요합니다. 선택 매개변수로는 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로 분류하는 것이 유용할 수 있습니다. 먼저 닫힌 범주 목록을 정하고 모델에는 설명 텍스트만 사용하도록 요청하세요. 그런 다음 사람이 직접 라벨링한 작은 표본에서 품질을 측정합니다. 모델 범주를 편집자의 판단과 비교하고, 오류와 모호한 사례는 따로 살펴보세요. 보고서에는 해석하기 어려운 종합 점수보다 모델과 사람의 라벨 일치율, 확인한 사례 수를 포함하는 편이 좋습니다.
기준을 제시하지 않은 채 AI에 ‘최고의 크리에이터를 골라 달라’고 요청하지 마세요. 대신 주제 비율, 게시 규칙성, 관련 영상 사례, 공개 반응 범위처럼 측정 가능한 신호로 과정을 나누세요. 모델은 이런 항목을 간략히 요약하고 근거 링크를 제시할 수 있지만, 최종 결정은 캠페인 형식, 대상 고객, 크리에이터와의 합의를 고려하는 팀이 내려야 합니다.
광고 협찬을 분석한다면 게시물 자체와 적용되는 규정을 바탕으로 크리에이터와 브랜드 간 관계가 공개됐는지 별도로 확인하세요. 미국 연방거래위원회는 브랜드와의 관계를 추천 내용 가까이에 눈에 띄게 공개해야 한다고 설명합니다. 프로필 소개나 숨겨진 텍스트만으로는 시청자에게 충분히 알리기 어려울 수 있습니다. FTC의 소셜 미디어 인플루언서 지침을 참고하세요. 공개 데이터 모니터링은 검토 자료를 모으는 데 도움이 되지만, 규정 준수 여부를 평가하려면 개별 게시물과 캠페인의 맥락이 필요합니다.
최종 결과물
파이프라인을 설정하면 팀은 날짜가 기록된 공개 피드 스냅샷, 설명문과 이용 가능한 지표가 포함된 게시물 표, 반복 가능한 주제 비율 계산 결과를 얻습니다. 이를 바탕으로 추가 검토 대상 프로필을 더 빠르게 선별하고, 주제 변화에 주목하며, 평가 근거를 문서화할 수 있습니다. 이 방법은 검증 가능합니다. 원본 JSON, 요청 매개변수, 분류 규칙, 영상 링크를 통해 데이터에서 결론까지의 과정을 추적할 수 있습니다.
첫 테스트는 프로필 하나로 실행하고, 원본 응답을 저장한 다음 분류 결과 몇 개를 직접 확인하세요. 이어서 주제 사전, 표본 규칙, 보고서 형식을 확정합니다. 결과를 재현할 수 있게 되면 일정 실행과 프로필 대기열을 추가하세요. 엔드포인트와 매개변수 설명은 API 문서에서, 제품 개요와 이용 가능한 통합 방식은 TikTok Scraper API 페이지에서 확인할 수 있습니다.
실행 전 실무 체크리스트
- 캠페인 주제, 포함 키워드 사전, 경계 사례를 기록하세요.
- 표본 기간,
count값, 정렬 방식, 고정 게시물 설정을 확정하세요. - 원본 JSON, 수집 날짜, 매개변수를 비밀 키와 분리해 보관하세요.
- 식별자가 있다면
aweme_id를 사용해 중복을 제거하세요. - 값이 없는 경우와 0을 구분하고, 근거 없이 지표를 평균 내지 마세요.
- 주제 비율 옆에 표본 크기를 표시하고 예시 링크를 첨부하세요.
- 캠페인 결정에 활용하기 전에 사람이 라벨링한 표본으로 AI 분류를 검증하세요.
- 일정에 따라 평가를 갱신하고 동일한 규칙으로 수집한 스냅샷끼리 비교하세요.