MoneyRadar2 / app.py
seawolf2357's picture
Update app.py
2efa0ec verified
raw
history blame
3.85 kB
import gradio as gr
import requests
import json
from functools import lru_cache
from datetime import datetime, timedelta
# 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์‹œ๊ฐ„ ์ „ ๋‚ ์งœ ๊ณ„์‚ฐ
one_day_ago = (datetime.utcnow() - timedelta(days=1)).strftime("%Y-%m-%d")
params = {
'key': API_KEY,
'cx': SEARCH_ENGINE_ID,
'q': keyword,
'dateRestrict': 'd1', # ์ตœ๊ทผ 1์ผ ๋‚ด ๊ฒฐ๊ณผ๋งŒ
'sort': 'date', # ๋‚ ์งœ์ˆœ ์ •๋ ฌ
'num': 10, # ๊ฒฐ๊ณผ ์ˆ˜
'tbm': 'nws', # ๋‰ด์Šค ๊ฒ€์ƒ‰์œผ๋กœ ์ œํ•œ
}
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 Headers: {json.dumps(dict(response.headers), indent=2)}\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')
published_date = item.get('pagemap', {}).get('metatags', [{}])[0].get('article:published_time', 'Unknown date')
formatted_results += f"<h3><a href='{link}' target='_blank'>{title}</a></h3>"
formatted_results += f"<p>Published: {published_date}</p>"
formatted_results += f"<p>{snippet}</p><br>"
formatted_results += f"<p>Total results: {len(results['items'])}</p>"
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 Headers: {json.dumps(dict(e.response.headers), indent=2)}\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"<details><summary>Debug Info</summary><pre>{debug_info}</pre></details>"
return formatted_results
# Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ
iface = gr.Interface(
fn=search_news,
inputs=[
gr.Textbox(label="Enter keyword (in English)"),
gr.Dropdown(choices=['All Countries'] + list(COUNTRIES.keys()), label="Select Country")
],
outputs=gr.HTML(),
title="Google News Search",
description="Search for news articles from the last 24 hours using Google Custom Search API."
)
# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
iface.launch()