拆抖音对标 (TikTok Benchmark)
공개 계정 수집, 데이터 집계 및 HTML 렌더링을 스크립트에 위임하고, agent는 report_data.json을 기반으로 증거 기반의 Markdown 보고서를 작성합니다.
준수해야 할 경계
- 웹 페이지에서 공개적으로 볼 수 있는 데이터만 수집합니다. 서명을 해독하거나, CAPTCHA를 우회하거나, 접근 제어를 위반하지 않습니다.
~/.douyin-benchmark/chrome-profile전용 로그인 상태만 사용합니다. 사용자의 일상적인 Chrome 사용자 디렉토리를 읽거나 복사하거나 직접 참조하지 않으며, 쿠키 값을 출력하지 않습니다.- 누락된 값은 그대로 유지하고
0으로 덮어쓰지 않습니다. 좋아요 수는 공개적인 인기도의 대리 지표로만 사용되며, 조회 성능, 참여율 또는 팔로우 전환 효과로 간주되지 않습니다. - 일반 로그인 상자, 실제 보안 인증, 페이지 서비스 오류를 각각 판단합니다. 보안 인증, 페이지 서비스 오류 또는 빈 응답(소프트 블록)을 만나면 중단합니다. 루프 재시도, 자동 IP 변경, 자동 지연 작업 생성 또는 나중에 완료하겠다는 약속을 하지 않습니다.
최초 설정
이 Skill 디렉토리에서 다음을 실행합니다:
npm ci
node scripts/login.js
login.js는 전용 브라우저를 열고 실제 계정 진입점에서 인증을 완료한 후 자동으로 저장하고 종료합니다. 기존 로그인 상태를 확인하려면 node scripts/login.js --check를 실행합니다.
한 번에 실행
사용자에게 TikTok 앱의 '프로필 공유' 단축 링크를 우선 제공하도록 합니다. 숫자로 된 TikTok ID는 sec_uid가 아닙니다. /user/<숫자>를 직접 조합하면 조용히 피드로 돌아갈 수 있습니다.
OUT="$HOME/douyin-benchmark-output/<계정 식별자>"
node scripts/run_benchmark.js "<프로필 공유 링크/sec_uid/TikTok ID/닉네임>" "$OUT" \
--expected-id "<TikTok ID, 생략 가능>"
기본적으로 유/무형 Chrome을 사용하여 가시성을 높이고 실제 브라우저 UA와 일치시킵니다. 그래픽 환경이 없는 경우에만 명시적으로 --headless를 추가합니다. 스크립트는 다음 순서로 실행됩니다:
- 단축 링크 또는
sec_uid를解析합니다. 닉네임/TikTok ID만 있는 경우에만 사이트 내 검색을 사용합니다. - 프로필, 게시물, 재생 목록을 수집하고
account_full_raw.json에 씁니다. - 게시물이 있는 경우
report_data.json과调研报告.html을 생성합니다. - 전체 과정에서
run_status.json을 업데이트하고, 실패 후에는 분석을 계속하지 않습니다.
상태를 먼저 읽고 결론을 쓰기
run_status.json 및 account_full_raw.json.capture를 읽습니다:
complete: API가has_more=0을 반환했습니다. 계정 수준 보고서를 작성할 수 있습니다. 프로필 페이지의 게시물 수와 수집된 수의 차이를 계속 확인합니다.partial: '수집된 샘플 보고서'만 작성하고, 제목 근처에 샘플 크기, 프로필 게시물 수 및 적용 범위를 표시합니다. '전체', '계정 최고' 등의 용어를 사용하지 마십시오.blocked_empty_body: 게시물 API가 HTTP 200을 반환했지만 본문이 비어 있습니다. 요청을 중단하고 프로필 스냅샷과 진단 정보만 전달합니다. 나중에 재시도는 사용자가 결정해야 하며, 최대 한 번만 가능합니다.challenge: 사용자가 전용 브라우저에서 인증을 완료한 후 다시 시도하도록 합니다. 우회를 시도하지 않습니다.login_required: 페이지가 일반 로그인 상자이며 보안 인증이 아닙니다. 로그인 스크립트를 실행하고 성공 후에만 한 번 재시도합니다.page_service_error: 게시물 영역에 '서비스 오류, 새로 고침하여 데이터를 다시 로드하세요.'가 명확하게 표시됩니다. 새로 고침을 중단합니다. 로그인 상태를 확인한 후 최대 한 번 재시도합니다.no_post_response: 입력 오류 또는 페이지/API 변경일 수 있습니다. 먼저sec_uid와 유/무형 페이지를 확인하고, 무분별하게 스크롤 횟수를 늘리지 않습니다.endpoint_error: 게시물 API가 HTTP/API 오류 또는 비JSON 콘텐츠를 반환했습니다. 진단 정보를 보존하고 분석을 중단합니다. 먼저 페이지/API 변경을 확인합니다.
Markdown 작성
report_data.json이 존재하고 분석 가능한 게시물이 포함된 경우에만 references/report-template.md를 전체 읽고 9개 섹션 구조로 $OUT/调研报告.md를 작성합니다.
내용을 세 가지 범주로 나누고 명확하게 표현합니다:
- 사실: JSON의 공개 필드 및 계산 결과.
- 관찰: 제목, 설명, 재생 목록 이름, 썸네일 또는 실제로 열어본 비디오의 표현.
- 추론: 페르소나, 수익화 경로, 콘텐츠 공식. 증거와 신뢰 수준을 기입하고 사실로 간주하지 않습니다.
댓글 본문이 없으면 '인기 댓글 감정'을 작성하지 않습니다. 비디오를 시청하지 않으면 샷, 나레이션, 스토리텔링 또는 공연 세부 사항을 주장하지 않습니다. 사용자가 자신의 분야를 지정하면 복사 가능한 목록을 해당 분야로定向 마이그레이션합니다.
검증
account_full_raw.json,run_status.json,report_data.json,调研报告.html,调研报告.md의 상태가 일치해야 합니다.- HTML과 Markdown 모두 실제 수집 샘플, 프로필 게시물 수, 적용 범위 및
capture_status를 표시해야 합니다. - 차단 시
capture.diagnostics.page를 확인합니다. 제목, 경로, 로그인/챌린지/서비스 오류 부울 신호 및 비디오 링크 수만 기록하고 본문이나 쿠키는 저장하지 않습니다. - 숫자는
report_data.json의 값을 하나씩 대조합니다. 누락된 값은—/알 수 없음으로 표시합니다. - HTML은 오프라인에서 열 수 있어야 하며, 외부 텍스트는 이스케이프 처리됩니다. 썸네일 실패는 본문에 영향을 미치지 않습니다.
- HTML에 전체 페이지 가로 오버플로가 없어야 합니다. 최신 게시물 제목을 읽을 수 있어야 합니다. 게시 리듬은 최근 12개월 동안 게시물 수로 표시되며, 전체 수집 시에만 누락된 달을 0으로 채웁니다.
- Markdown의 9개 섹션이 모두 포함되어야 하며, 데이터 범위, 증거 경계, 복사 가능한 목록 및 복사할 수 없는 항목을 포함해야 합니다.
설정
DOUYIN_PROFILE_DIR: 전용 로그인 상태 디렉토리. 기본값은~/.douyin-benchmark/chrome-profile입니다.DOUYIN_BROWSER_CHANNEL: 기본값은chrome입니다.chromium으로 설정하면 먼저 Playwright Chromium을 설치합니다.DOUYIN_HEADLESS=true: 명시적으로 헤드리스 모드를 활성화합니다. 기본값은 유/무형 모드입니다.DOUYIN_SCROLL_WAIT_MS: 스크롤 간격 하한선, 기본값 1600ms. 고빈도 수집에 사용하지 마십시오.