import gradio as gr import requests from datetime import datetime, timedelta import json from functools import lru_cache # Google Custom Search API 키와 검색 엔진 ID API_KEY = "AIzaSyB8wNdEL8-SAvelRq-zenLLU-cUEmsj7uE" SEARCH_ENGINE_ID = "c01abc75e1b95483d" # 지원되는 국가 리스트 COUNTRIES = { 'United States': 'US', 'United Kingdom': 'GB', 'Canada': 'CA', 'Australia': 'AU', 'India': 'IN', 'Germany': 'DE', 'France': 'FR', 'Japan': 'JP', 'South Korea': 'KR', 'Brazil': 'BR', 'Mexico': 'MX', 'Spain': 'ES', 'Italy': 'IT', 'Netherlands': 'NL', 'Russia': 'RU', 'Sweden': 'SE', 'Switzerland': 'CH', 'Poland': 'PL', 'Turkey': 'TR', 'Saudi Arabia': 'SA' } @lru_cache(maxsize=100) def cached_search(cache_key): return search_news_impl(*json.loads(cache_key)) def search_news(keyword, country): cache_key = json.dumps((keyword, country)) return cached_search(cache_key) def search_news_impl(keyword, country): url = "https://www.googleapis.com/customsearch/v1" # 날짜 범위 설정 (최근 24시간) end_date = datetime.utcnow() start_date = end_date - timedelta(days=1) params = { 'key': API_KEY, 'cx': SEARCH_ENGINE_ID, 'q': f"{keyword} site:news.google.com", 'lr': 'lang_en', # 영어 결과만 'sort': 'date:r:20230101:99999999', # 날짜순 정렬 'num': 100, # 최대 100개 결과 'dateRestrict': 'd1', # 최근 1일 내 결과만 } if country != 'All Countries': params['gl'] = COUNTRIES[country] try: response = requests.get(url, params=params) response.raise_for_status() results = response.json() debug_info = f"API Request URL: {response.url}\n" debug_info += f"API Response Status: {response.status_code}\n" debug_info += f"API Response Body: {json.dumps(results, indent=2)}\n" formatted_results = "" if 'items' in results: for item in results['items']: title = item['title'] link = item['link'] snippet = item.get('snippet', 'No snippet available') formatted_results += f"
{snippet}
Total results: {len(results['items'])}
" else: formatted_results = f"No news found for '{keyword}' in {country} within the last 24 hours." except requests.exceptions.HTTPError as e: formatted_results = f"An error occurred: {str(e)}" debug_info = f"Error: {str(e)}\n" debug_info += f"API Response Status: {e.response.status_code}\n" debug_info += f"API Response Body: {e.response.text}\n" except Exception as e: formatted_results = f"An unexpected error occurred: {str(e)}" debug_info = f"Unexpected Error: {str(e)}\n" formatted_results += f"{debug_info}