feat:트렌드 키워드를 건강 채널용으로 필터링

건강 채널 전용 트렌딩 시스템:
- Gemini로 실시간 트렌드에서 건강 관련 키워드만 필터링
- 간접적 키워드도 건강 앵글로 리프레이밍 (예: 김치 → 장건강)
- 필터 결과 30분 캐싱 (Gemini 호출 최소화)
- 필터 실패 시 원본 키워드 폴백

제목 생성 건강 앵글 반영:
- generateTrendingHookTitles 프롬프트에 건강 채널 명시
- trending_context에 health_angle, suggested_topic 추가
- 모든 제목이 건강/웰빙 관점으로 생성되도록 가이드

UI 건강 테마 적용:
- 버튼/칩 색상: orange/indigo → green 테마
- 칩에 건강 앵글 태그 배지 표시
- 칩 클릭 시 건강 주제(suggested_topic)가 인풋에 채워짐

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-15 13:08:57 +09:00
parent e093c7b7e7
commit ed1967405c
3 changed files with 105 additions and 15 deletions

View File

@@ -19,6 +19,73 @@ public function __construct(GoogleCloudService $googleCloud)
$this->config = AiConfig::getActiveGemini();
}
/**
* 실시간 트렌딩 키워드 → 건강 채널용 필터링/리프레이밍
*/
public function filterHealthTrending(array $trendingKeywords): array
{
if (empty($trendingKeywords)) {
return [];
}
$keywordList = collect($trendingKeywords)->map(function ($item, $i) {
$news = ! empty($item['news_title']) ? " (뉴스: {$item['news_title']})" : '';
return ($i + 1) . ". {$item['keyword']}{$news}";
})->implode("\n");
$prompt = <<<PROMPT
당신은 건강/웰빙 전문 YouTube Shorts 채널 기획자입니다.
아래는 오늘의 한국 실시간 급상승 키워드 목록입니다:
{$keywordList}
이 중에서 건강/웰빙/의료/다이어트/운동/영양/정신건강/수면/스트레스 관련 YouTube Shorts 콘텐츠를 만들 수 있는 키워드를 골라주세요.
선택 기준:
- 직접적으로 건강 관련인 키워드는 반드시 포함
- 간접적이라도 건강 관점의 콘텐츠로 연결 가능하면 포함 (예: "김치" → "김치 유산균의 장 건강 효과")
- 최소 3개, 최대 8개 선택
- 건강과 전혀 연결할 수 없는 키워드(정치, 스포츠 결과, 연예 등)는 제외
- health_angle은 10자 이내 핵심 태그 (예: "장건강", "면역력", "다이어트")
반드시 아래 JSON 형식으로만 응답하세요 (다른 텍스트 없이):
{
"keywords": [
{"keyword": "원본 키워드", "health_angle": "건강 태그 10자 이내", "suggested_topic": "건강 채널에서 다룰 구체적 주제 20자 이내"}
]
}
PROMPT;
$result = $this->callGemini($prompt);
if (! $result) {
return [];
}
$parsed = $this->parseJsonResponse($result);
if (! $parsed || empty($parsed['keywords'])) {
return [];
}
// 원본 트렌딩 데이터와 매칭하여 traffic 등 보존
$trendingMap = collect($trendingKeywords)->keyBy('keyword');
return collect($parsed['keywords'])->map(function ($item) use ($trendingMap) {
$original = $trendingMap->get($item['keyword']);
return [
'keyword' => $item['keyword'],
'health_angle' => $item['health_angle'] ?? '',
'suggested_topic' => $item['suggested_topic'] ?? $item['keyword'],
'traffic' => $original['traffic'] ?? '',
'news_title' => $original['news_title'] ?? '',
'pub_date' => $original['pub_date'] ?? null,
];
})->values()->toArray();
}
/**
* 키워드 → 트렌딩 제목 5개 생성 (기본)
*/
@@ -68,21 +135,27 @@ public function generateTrendingHookTitles(string $keyword, array $context = [])
if (! empty($context)) {
$newsTitle = $context['news_title'] ?? '';
$traffic = $context['traffic'] ?? '';
$healthAngle = $context['health_angle'] ?? '';
$suggestedTopic = $context['suggested_topic'] ?? '';
$contextBlock = <<<CTX
[실시간 트렌딩 정보]
- 이 키워드는 지금 한국에서 실시간 급상승 중입니다
- 검색량: {$traffic}
- 관련 뉴스: {$newsTitle}
- 건강 관점: {$healthAngle}
- 건강 주제 제안: {$suggestedTopic}
CTX;
}
$prompt = <<<PROMPT
당신은 YouTube Shorts 조회수 1000만 전문 크리에이터입니다.
당신은 건강/웰빙 전문 YouTube Shorts 조회수 1000만 크리에이터입니다.
이 채널은 "건강 채널"입니다. 모든 제목은 반드시 건강/웰빙/의료/영양/운동 관점이어야 합니다.
키워드: "{$keyword}"
{$contextBlock}
이 키워드 YouTube Shorts에서 조회수를 폭발시킬 후킹 제목 5개를 생성해주세요.
이 키워드를 건강 관점에서 YouTube Shorts 조회수를 폭발시킬 후킹 제목 5개를 생성해주세요.
반드시 아래 5가지 패턴을 각각 1개씩 사용:
1. 충격형: "이거 실화임?" / "소름 돋는 진실" 스타일