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(