diff --git a/app/Http/Controllers/Video/Veo3Controller.php b/app/Http/Controllers/Video/Veo3Controller.php index eb69308f..a7958528 100644 --- a/app/Http/Controllers/Video/Veo3Controller.php +++ b/app/Http/Controllers/Video/Veo3Controller.php @@ -46,8 +46,8 @@ public function fetchTrending(): JsonResponse $healthKeywords = $this->geminiService->filterHealthTrending($rawKeywords); - // Gemini 필터링 실패 시 원본 반환 - return ! empty($healthKeywords) ? $healthKeywords : $rawKeywords; + // Gemini 필터링 결과 반환 (빈 배열이면 빈 배열 — 원본 노출 안 함) + return $healthKeywords; }); return response()->json([ diff --git a/app/Services/Video/GeminiScriptService.php b/app/Services/Video/GeminiScriptService.php index e4cbd43b..92650a32 100644 --- a/app/Services/Video/GeminiScriptService.php +++ b/app/Services/Video/GeminiScriptService.php @@ -40,14 +40,35 @@ public function filterHealthTrending(array $trendingKeywords): array 아래는 오늘의 한국 실시간 급상승 키워드 목록입니다: {$keywordList} -이 중에서 건강/웰빙/의료/다이어트/운동/영양/정신건강/수면/스트레스 관련 YouTube Shorts 콘텐츠를 만들 수 있는 키워드를 골라주세요. +이 중에서 건강/웰빙/의료/다이어트/운동/영양/수면/스트레스 관련 키워드만 선택하세요. -선택 기준: -- 직접적으로 건강 관련인 키워드는 반드시 포함 -- 간접적이라도 건강 관점의 콘텐츠로 연결 가능하면 포함 (예: "김치" → "김치 유산균의 장 건강 효과") -- 최소 3개, 최대 8개 선택 -- 건강과 전혀 연결할 수 없는 키워드(정치, 스포츠 결과, 연예 등)는 제외 -- health_angle은 10자 이내 핵심 태그 (예: "장건강", "면역력", "다이어트") +=== 엄격한 선택 기준 === +- 키워드 자체가 건강/의료/음식/영양/운동/질병/신체 관련일 때만 포함 +- 최소 1개, 최대 8개 선택 (해당 없으면 0개 가능) + +=== 절대 제외 대상 (아무리 건강과 연결하려 해도 제외) === +- 연예인/아이돌/배우/가수 이름 (예: 아이유, 신세경, BTS 등) +- 정치인/정당/선거/정치 이슈 +- 스포츠 경기 결과/선수 이름 +- 드라마/영화/예능 프로그램명 +- 사건/사고/범죄 뉴스 +- 게임/IT기기/앱 이름 +- 인물 이름이 키워드인 경우 무조건 제외 + +=== 포함 가능 예시 === +- "다이어트" → 직접 건강 관련 → 포함 +- "김치" → 음식/영양 → 포함 가능 +- "수면" → 건강 → 포함 +- "설날" → 명절 건강/음식 관련 → 포함 가능 +- "미세먼지" → 건강 영향 → 포함 가능 + +=== 제외 예시 === +- "아이유" → 가수 이름 → 제외 +- "신세경" → 배우 이름 → 제외 +- "손흥민" → 축구선수 → 제외 +- "더글로리" → 드라마 → 제외 + +health_angle은 10자 이내 핵심 태그 (예: "장건강", "면역력", "다이어트") 반드시 아래 JSON 형식으로만 응답하세요 (다른 텍스트 없이): { @@ -55,6 +76,8 @@ public function filterHealthTrending(array $trendingKeywords): array {"keyword": "원본 키워드", "health_angle": "건강 태그 10자 이내", "suggested_topic": "건강 채널에서 다룰 구체적 주제 20자 이내"} ] } + +해당하는 키워드가 없으면 빈 배열을 반환하세요: {"keywords": []} PROMPT; $result = $this->callGemini($prompt);