프로필 수집 시작
계정 URL 엑셀을 업로드해 인스타그램·틱톡 프로필 수집을 시작합니다.
프로필 수집 시작
계정 URL 엑셀을 업로드해 프로필 정보 수집을 시작합니다.
platform으로 인스타그램 / 틱톡을 고르며, 링크 파싱과 프로필 조회 API가 그 값으로 갈립니다.
비동기 API입니다. 응답은 jobId만 즉시 돌려주고, 실제 수집은 백그라운드에서 진행됩니다.
계정 수에 따라 수 분이 걸리므로 잡 상세 조회로 폴링해야 합니다.
HTTP 요청
POST /ai/admin/dm-automation/collect
Authorization: Bearer {access_token}
Content-Type: multipart/form-dataForm Data
| 파라미터 | 타입 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
file | File | 예 | - | 계정 URL이 담긴 .xlsx 또는 .xls |
platform | String | 아니오 | INSTAGRAM | 수집 대상 플랫폼. INSTAGRAM | TIKTOK |
sheetName | String | 아니오 | 첫 번째 시트 | 소스 시트명 |
urlColumn | String | 아니오 | 자동 탐지 | 계정 URL 컬럼명 |
startRow | Integer | 아니오 | 전체 | 시작 행 (Excel 행 번호 기준) |
maxWorkers | Integer | 아니오 | 4 | 동시 호출 수. 서버에서 1~8로 보정 |
선택 파라미터를 비워두면 스프링이 파이썬에 아예 전달하지 않아 파이썬 기본값이 적용됩니다. 빈 문자열로 보내 기본값을 덮어쓰는 일은 없습니다.
플랫폼 (platform)
대소문자를 가리지 않습니다. 값이 없거나 모르는 값이면 INSTAGRAM으로 처리합니다(에러 아님).
INSTAGRAM | TIKTOK | |
|---|---|---|
| 처리 대상 행 | instagram.com 링크 또는 @핸들 | tiktok.com 링크 또는 @핸들 |
| 받는 링크 형태 | 프로필 / /p/ / /reel/ / /tv/ / /stories/ | /@handle, /@handle/video/{id}, 쿼리스트링 포함 |
| 프로필 조회 | instagram-looter2 | tiktok-api23 |
팔로워수 | 수집 | 수집 |
full_name | full_name | nickname |
text | biography | signature (bio) |
business_email | 비즈니스 이메일 필드 → 없으면 bio 정규식 | bio 정규식만 (틱톡 API에 이메일 필드 없음) |
금액 | 팔로워수 기준 자동 산출 | 빈칸 |
틱톡은 금액을 산출하지 않습니다. 틱톡 단가 정책이 아직 확정되지 않았고, 인스타그램 공식은 팔로워수만 보는 별개 체계라 그대로 적용하면 자릿수·통화가 맞지 않는 값이 찍힙니다. 금액 칸은 비운 채로 내려가고, 운영에서 수기로 채워 모집메세지 생성에 넘깁니다.
선택한 플랫폼과 다른 링크는 건너뜁니다. 건너뛴 행이 있으면 결과 엑셀의 errors 시트에
(플랫폼 불일치) 한 줄로 몇 행이 빠졌는지 남고, errorCount에도 포함됩니다.
한 번의 수집은 한 플랫폼만 처리하므로 시트를 플랫폼별로 나눠 올리세요.
계정 URL 컬럼 자동 탐지
urlColumn을 지정하지 않으면 아래 후보 컬럼명으로 먼저 찾고, 없으면 선택한 플랫폼의 도메인
(instagram.com 또는 tiktok.com) 포함 비율이 가장 높은 컬럼을 고릅니다.
| 후보 컬럼명 | 적용 플랫폼 |
|---|---|
계정url / 계정 URL | 공통 |
계정 링크 / 계정링크 | 공통 |
계정 | 공통 |
instagram_url / instagram | INSTAGRAM |
인스타그램 링크 / 인스타 링크 | INSTAGRAM |
tiktok_url / tiktok | TIKTOK |
틱톡 링크 / 틱톡링크 | TIKTOK |
응답
성공 응답
{
"status": 200,
"code": null,
"message": "수집 작업을 시작했습니다.",
"data": {
"jobId": 42
}
}| 필드 | 타입 | 설명 |
|---|---|---|
jobId | Long | 생성된 잡 번호. 폴링에 사용 |
이 시점의 잡 상태는 QUEUED입니다. 이어서 잡 상세 조회로 폴링하세요.
에러 응답
HTTP 상태는 항상 200이며, 아래 코드는 응답 본문의 status 값입니다.
본문 status | code | 설명 |
|---|---|---|
400 | NO_FILE_UPLOADED | 파일이 비어 있음 |
400 | UNSUPPORTED_FILE_FORMAT | 확장자가 xlsx/xls가 아님 |
400 | INVALID_REQUEST | 업로드 파일을 읽을 수 없음 |
401 | - | 인증 실패 |
403 | - | ADMIN 권한 필요 |
파이썬 호출 실패(시트명 오류, URL 컬럼 탐지 실패 등)는 이 응답에 나타나지 않습니다.
비동기이므로 이미 jobId를 반환한 뒤에 발생하며, 잡 상태가 FAILED가 되고 errorMessage에 사유가 담깁니다.
처리 규칙
공통
?igsh=...,?is_from_webapp=1,utm_source=...등 query string 제거 후 표준 계정 링크로 정규화- 업로드한 원본 엑셀도 GCS에 함께 보관됩니다 (재실행·디버깅용)
INSTAGRAM
instagram-looter2 /profile호출, 실패 시/profile2fallback- 둘 다 실패하면 팔로워수
0, 프로필 필드는 빈 값 - 게시물·릴스 링크(
/p/,/reel/,/tv/)는 작성자 계정을 역추출
TIKTOK
tiktok-api23 /api/user/info호출 (uniqueId= 핸들)- 팔로워수는
statsV2.followerCount(문자열) 우선, 없으면stats.followerCount - 조회 실패 시 폴백하지 않고 해당 행을 실패 처리합니다. 팔로워수
0은 "실제로 0명"과 구분되지 않아, 틀린 값이 결과 시트에 그대로 실리는 것을 막기 위해서입니다. 실패한 행은 나머지 칸이 비고errors시트에 사유가 남습니다. - 영상 링크(
/@handle/video/{id})는 작성자 계정을 역추출 - 단축 링크(
vt.tiktok.com/...)는 지원하지 않습니다. 리다이렉트를 따라가지 않으므로username 파싱 실패로errors시트에 남습니다. 프로필 전체 URL로 올려주세요.
결과 엑셀 컬럼
시트명은 수집결과이며 컬럼 구성은 플랫폼과 무관하게 동일합니다.
| 컬럼 | INSTAGRAM | TIKTOK |
|---|---|---|
계정 링크 | https://www.instagram.com/{handle}/ | https://www.tiktok.com/@{handle} |
크리에이터명 | 수작업 입력용 공란 | 수작업 입력용 공란 |
팔로워수 | follower count | followerCount |
full_name | 프로필 full name | nickname |
text | 프로필 bio | signature |
business_email | business email → 없으면 bio 정규식 | bio 정규식만 |
금액 | 팔로워수 기준 추천금액 | 빈칸 |
실패·건너뜀이 있으면 errors 시트가 함께 생성됩니다.