Main API
Data Job API
AI 데이터 수집 배치 작업 API
Data Job API
인스타그램 추천 기반 데이터 수집 배치 작업 API입니다.
Base URL: /ai/data
이 API는 관리자/내부 시스템용입니다. Python 데이터 수집 서버와 연동됩니다.
인증 정보
| 항목 | 값 |
|---|---|
| 인증 필요 | 예 |
| 인증 방식 | JWT Bearer Token |
엔드포인트 목록
| 메서드 | 경로 | 설명 | 인증 |
|---|---|---|---|
POST | /ai/data/admin/bulk-upload-creators | 크리에이터 일괄 업로드 | 필요 |
POST | /ai/data/jobs/start | 데이터 수집 배치 시작 | 필요 |
POST | /ai/data/jobs/notify | 배치 완료 콜백 | 콜백 토큰 |
POST | /ai/data/jobs/group-status | 그룹 진행 상태 조회 | 필요 |
API 상세
크리에이터 일괄 업로드
크리에이터 데이터를 일괄 업로드합니다.
HTTP 요청
POST /ai/data/admin/bulk-upload-creators
Authorization: Bearer {access_token}응답
성공 응답 (200 OK)
크리에이터 일괄 업로드 완료데이터 수집 배치 시작
Python 서버에 장시간 배치 작업을 위임하고 완료 콜백을 설정합니다.
HTTP 요청
POST /ai/data/jobs/start
Authorization: Bearer {access_token}
Content-Type: application/jsonRequest Body
{
"tags": ["#travel", "#korea"],
"country": "KR",
"category": "TRAVEL",
"isAi": true,
"minFollower": 5000,
"priority": "high"
}Request Body 스키마 (DataJobRequest)
| 필드명 | 타입 | 필수 | 설명 |
|---|---|---|---|
tags | string[] | 아니오 | 검색 태그 목록 (예: ["#travel"]) |
country | string | 아니오 | 국가 코드 (예: KR) |
category | string | 아니오 | 카테고리 (예: TRAVEL) |
isAi | boolean | 아니오 | AI 분석 여부. 기본값: true |
minFollower | int | 아니오 | 최소 팔로워 수 (예: 5000) |
priority | string | 아니오 | 우선순위 |
응답
성공 응답 (200 OK)
{
"umbrella_job_id": "abc123-def456",
"group_id": "group-789xyz",
"queue": "data-collection",
"priority": "high",
"callback_enabled": true
}Response 스키마 (DataJobStartResponse)
| 필드명 | 타입 | 설명 |
|---|---|---|
umbrella_job_id | string | 상위 작업 ID |
group_id | string | Python 서버 반환 그룹 ID |
queue | string | 대상 큐 이름 |
priority | string | 우선순위 |
callback_enabled | boolean | 콜백 활성화 여부 |
배치 완료 콜백
Python 서버가 작업 완료 후 호출하는 콜백입니다. 보안 토큰을 검증하고 알림 메일을 발송합니다.
이 엔드포인트는 Python 데이터 수집 서버가 호출합니다. 직접 호출하지 마세요.
HTTP 요청
POST /ai/data/jobs/notify
X-Callback-Token: {callback_token}
Content-Type: application/json요청 헤더
| 헤더 | 필수 | 설명 |
|---|---|---|
X-Callback-Token | 아니오 | 보안 검증용 콜백 토큰 |
Request Body
{
"group_id": "group-789xyz",
"status": "finished",
"finished_at": 1705305600,
"batches": 10,
"success": 9,
"failed": 1
}Request Body 스키마 (DataJobCallback)
| 필드명 | 타입 | 필수 | 설명 |
|---|---|---|---|
group_id | string | 예 | 그룹 ID |
status | string | 예 | 상태 (finished | failed) |
finished_at | long | 아니오 | 완료 시간 (Unix timestamp) |
batches | int | 아니오 | 총 배치 수 |
success | int | 아니오 | 성공한 배치 수 |
failed | int | 아니오 | 실패한 배치 수 |
응답
성공 응답 (200 OK)
(empty body)그룹 진행 상태 조회
Python 서버의 /insta/data/group-status로 위임하여 진행 상태를 조회합니다.
HTTP 요청
POST /ai/data/jobs/group-status?group_id={group_id}
Authorization: Bearer {access_token}Query Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
group_id | string | 예 | 조회할 그룹 ID |
응답
성공 응답 (200 OK)
{
"group_id": "group-789xyz",
"total": 100,
"remaining": 25,
"success": 70,
"failed": 5,
"progress": 0.75
}Response 스키마 (DataJobGroupStatus)
| 필드명 | 타입 | 설명 |
|---|---|---|
group_id | string | 그룹 ID |
total | int | 총 작업 수 |
remaining | int | 남은 작업 수 |
success | int | 성공한 작업 수 |
failed | int | 실패한 작업 수 |
progress | double | 진행률 (0~1, null 가능) |
작업 흐름
1. 클라이언트 → POST /jobs/start → Spring 서버
2. Spring 서버 → Python 서버 (배치 작업 위임)
3. Python 서버 (데이터 수집 실행 중...)
4. 클라이언트 → POST /jobs/group-status → 진행 상태 확인
5. Python 서버 → POST /jobs/notify → Spring 서버 (완료 콜백)
6. Spring 서버 → 알림 메일 발송사용 예시
배치 작업 시작
curl -X POST https://api.glowb.io/ai/data/jobs/start \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"tags": ["#beauty", "#skincare"],
"country": "KR",
"category": "BEAUTY",
"minFollower": 10000
}'진행 상태 조회
curl -X POST "https://api.glowb.io/ai/data/jobs/group-status?group_id=group-789xyz" \
-H "Authorization: Bearer {token}"