From 01c1cacb84525b75b5c4a771b94b84ba8f88d537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=EA=B2=BD?= Date: Thu, 26 Mar 2026 13:53:43 +0900 Subject: [PATCH] =?UTF-8?q?YouTube=20Analytics=20API=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/dashboard/services/data_processor.py | 4 ++-- app/dashboard/services/youtube_analytics.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/dashboard/services/data_processor.py b/app/dashboard/services/data_processor.py index a396aab..74e733a 100644 --- a/app/dashboard/services/data_processor.py +++ b/app/dashboard/services/data_processor.py @@ -143,8 +143,8 @@ class DataProcessor: monthly_data = [] audience_data = self._build_audience_data( - raw_data.get("demographics", {}), - raw_data.get("region", {}), + raw_data.get("demographics") or {}, + raw_data.get("region") or {}, ) logger.debug( f"[DataProcessor.process] SUCCESS - " diff --git a/app/dashboard/services/youtube_analytics.py b/app/dashboard/services/youtube_analytics.py index bb3bbf0..2167775 100644 --- a/app/dashboard/services/youtube_analytics.py +++ b/app/dashboard/services/youtube_analytics.py @@ -141,6 +141,9 @@ class YouTubeAnalyticsService: results = await asyncio.gather(*tasks, return_exceptions=True) # 에러 체크 (YouTubeAuthError, YouTubeQuotaExceededError는 원형 그대로 전파) + # demographics(index 5)는 YouTubeAPIError 시 None으로 허용 (YouTube 서버 간헐적 오류 대응) + OPTIONAL_INDICES = {5, 6} # demographics, region + results = list(results) for i, result in enumerate(results): if isinstance(result, Exception): logger.error( @@ -148,6 +151,12 @@ class YouTubeAnalyticsService: ) if isinstance(result, (YouTubeAuthError, YouTubeQuotaExceededError)): raise result + if i in OPTIONAL_INDICES and isinstance(result, YouTubeAPIError): + logger.warning( + f"[YouTubeAnalyticsService] 선택적 API 호출 {i+1}/7 실패, None으로 처리: {result}" + ) + results[i] = None + continue raise YouTubeAPIError(f"데이터 조회 실패: {result.__class__.__name__}") logger.debug(