Spaces:
Running
Running
import gradio as gr | |
import requests | |
import feedparser | |
from datetime import datetime, timedelta | |
SUPPORTED_COUNTRIES = { | |
'United States': 'https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en', | |
'United Kingdom': 'https://news.google.com/rss?hl=en-GB&gl=GB&ceid=GB:en', | |
'Australia': 'https://news.google.com/rss?hl=en-AU&gl=AU&ceid=AU:en', | |
'India': 'https://news.google.com/rss?hl=en-IN&gl=IN&ceid=IN:en', | |
'Canada': 'https://news.google.com/rss?hl=en-CA&gl=CA&ceid=CA:en' | |
} | |
def get_news(country, keyword): | |
if country not in SUPPORTED_COUNTRIES: | |
return "Selected country is not supported." | |
url = SUPPORTED_COUNTRIES[country] | |
try: | |
response = requests.get(url, timeout=10) | |
response.raise_for_status() | |
except requests.RequestException as e: | |
return f"Error fetching news: {str(e)}" | |
feed = feedparser.parse(response.content) | |
time_threshold = datetime.now() - timedelta(hours=48) # 48시간으로 확장 | |
filtered_news = [] | |
for entry in feed.entries: | |
if (keyword.lower() in entry.title.lower() or | |
('summary' in entry and keyword.lower() in entry.summary.lower())): | |
pub_date = datetime(*entry.published_parsed[:6]) | |
if pub_date > time_threshold: | |
filtered_news.append(f"Title: {entry.title}\nLink: {entry.link}\nDate: {pub_date}\n") | |
if filtered_news: | |
return "\n".join(filtered_news) | |
else: | |
return (f"No recent news found for the keyword '{keyword}' in {country} " | |
f"within the last 48 hours.\nTry a different keyword or check back later.") | |
iface = gr.Interface( | |
fn=get_news, | |
inputs=[ | |
gr.Dropdown(choices=list(SUPPORTED_COUNTRIES.keys()), label="Select Country"), | |
gr.Textbox(label="Enter keyword") | |
], | |
outputs="text", | |
title="Google News Search", | |
description="Search for news articles from the last 48 hours using Google News RSS feeds." | |
) | |
iface.launch() |