📚 API 문서

YouTube 타이틀 생성 API 사용 가이드

📖 개요

이 서비스는 6개 tvN 채널의 타이틀을 실시간으로 분석하여 Google Gemini 2.5 Flash AI로 새로운 타이틀을 생성합니다.
✨ 신규: JSON 파일 업로드 시 clip_no로 scene 데이터 자동 추출 지원!

📍 엔드포인트

POST /api/generate-titles GET /api/channels

🎯 프론트엔드 사용 방법

  1. JSON 업로드: scene 데이터가 포함된 .json 또는 .json.txt 파일
  2. clip_no 입력: 자동으로 clip_title, keyword, summary 추출
  3. 조건 선택: 콘텐츠 타입(롱폼/숏폼), 필터, 채널
  4. 생성 버튼 클릭: AI가 5개 타이틀 생성

📤 요청 예시 (기본)

{
  "originalTitle": "혼자 여행하는 방법",
  "contentType": "long",
  "filterType": "recent"
}

📤 요청 예시 (채널 선택)

{
  "originalTitle": "믿고 듣는 다비치 등장!",
  "contentType": "shorts",
  "filterType": "top_1month",
  "channelHandles": ["@Diggle", "@sharp_ing"]
}

📤 요청 예시 (JSON 데이터 포함)

{
  "originalTitle": "믿고 듣는 다비치 등장!",
  "contentType": "long",
  "filterType": "recent",
  "inputData": {
    "clip_no": "1",
    "clip_title": "믿고 듣는 다비치 등장! 지석진 '영포티' 헤어스타일 논란",
    "scene_meta": {
      "keyword": "용리단길에 모인 멤버들...",
      "summary": "출연진들이 서울 용산의 핫플레이스인..."
    }
  }
}

📋 파라미터

  • originalTitle (string, 필수): 원본 타이틀
  • contentType (string, 필수): "shorts" (세로형) 또는 "long" (가로형)
  • filterType (string, 필수):
    • "recent" - 최신 100개
    • "top_1month" - 1달 조회수 상위 100개
    • "top_6months" - 6개월 조회수 상위 100개
    • "top_1year" - 1년 조회수 상위 100개
  • channelHandles (array, 선택): 참고할 채널 선택
    • 생략 시: 전체 6개 채널 사용
    • 예: ["@Diggle", "@sharp_ing"]
    • 사용 가능: @DiggleClassic, @Diggle, @sharp_ing, @tvNDENT, @tvNDRAMA_official, @tvNJoy_official
  • inputData (object, 선택): JSON 업로드 시 추가 입력 데이터
    • clip_no, clip_title, scene_meta (keyword, summary) 포함 가능

📥 응답 예시

{
  "originalTitle": "혼자 여행하는 방법",
  "contentType": "long",
  "filterType": "recent",
  "generatedTitles": [
    "혼자 떠나는 여행, 두려움은 잠시! 찐독립러가 알려주는 용기 뿜뿜하는 법💪",
    "혼자라서 더 좋다? 맘껏 즐기는 나만의 여행 '찐' 노하우 대공개✨",
    "혼행족 필독! 혼자여도 외롭지 않은, 오히려 더 즐거운",
    "솔로 여행 완전정복! 초보도 할 수 있는 스텝 바이 스텝",
    "혼자서도 재밌게! 나홀로 여행 꿀팁 대방출"
  ],
  "referencedTitlesCount": 98,
  "channels": ["Diggle Classic", "Diggle", "Sharp", "tvN DENT", "tvN DRAMA", "tvN Joy"],
  "referenceTitles": [
    {
      "id": "video_id",
      "title": "면접은 꼭 오전에 봐야 하는 이유 #어쩌다어른",
      "publishedAt": "2025-01-15T10:00:00Z",
      "viewCount": 125430,
      "duration": "PT45S",
      "isShorts": true
    }
  ]
}

🎯 GET /api/channels

6개 채널의 정보와 프로필 이미지를 가져옵니다.

{
  "channels": [
    {
      "id": "UCRMA_Nb5VF-YoWApSVeXPVA",
      "handle": "@DiggleClassic",
      "name": "Diggle Classic",
      "thumbnail": "https://yt3.ggpht.com/..."
    }
  ]
}

🧪 cURL 테스트 예시

📌 기본 타이틀 생성:

curl -X POST https://3000-ido5lnv87ag509lez6zs6-3844e1b6.sandbox.novita.ai/api/generate-titles \
  -H "Content-Type: application/json" \
  -d '{
    "originalTitle": "혼자 여행하는 방법",
    "contentType": "long",
    "filterType": "recent"
  }'

📌 채널 정보 가져오기:

curl -X GET https://3000-ido5lnv87ag509lez6zs6-3844e1b6.sandbox.novita.ai/api/channels

✅ 성공 응답 (200 OK)

JSON 형식으로 5개의 생성된 타이틀과 메타데이터를 반환합니다.
generatedTitles: AI가 생성한 5개 타이틀 (배열)
referencedTitlesCount: 참고한 타이틀 개수 (숫자)
channels: 사용된 채널 이름 (배열)
referenceTitles: 참고한 영상 상세 정보 (배열, 100개)

❌ 에러 응답

  • 400 Bad Request: 필수 파라미터 누락 또는 잘못된 값
  • 404 Not Found: 조건에 맞는 영상을 찾을 수 없음
  • 500 Internal Server Error: 서버 오류 (API 키, Gemini 오류 등)

💡 테스트 팁

  • 처음 테스트 시 filterType: "recent" 권장 (가장 빠름)
  • 숏폼 타이틀 생성 시 contentType: "shorts" 사용
  • 특정 채널만 참고하려면 channelHandles 배열 추가
  • 응답 시간: 약 10~20초 (YouTube 크롤링 + AI 생성)

📺 참고 채널: Diggle Classic, Diggle, Sharp, tvN DENT, tvN DRAMA, tvN Joy
🤖 AI 모델: Google Gemini 2.5 Flash
📊 분석 데이터: 채널당 최대 100개 타이틀 (실시간 크롤링)