Spaces:
Running
Running
import gradio as gr | |
import requests | |
from datetime import datetime, timedelta | |
import json | |
# NewsAPI key (์ด๊ฒ์ ์ค์ API ํค๋ก ๋์ฒดํด์ผ ํฉ๋๋ค) | |
API_KEY = "37d83e266422487b8b2e4cb6e1ff0aa6" | |
def get_news(keyword): | |
base_url = "https://newsapi.org/v2/everything" | |
two_days_ago = (datetime.utcnow() - timedelta(hours=48)).isoformat() | |
params = { | |
'apiKey': API_KEY, | |
'q': keyword, | |
'from': two_days_ago, | |
'language': 'en', | |
'sortBy': 'publishedAt' | |
} | |
try: | |
response = requests.get(base_url, params=params, timeout=10) | |
response.raise_for_status() | |
news_data = response.json() | |
except requests.RequestException as e: | |
return f"<p style='color: red;'>Error fetching news: {str(e)}</p>" | |
if news_data['status'] != 'ok': | |
return f"<p style='color: red;'>API Error: {news_data.get('message', 'Unknown error occurred')}</p>" | |
articles = news_data['articles'] | |
if not articles: | |
return (f"<p>No recent news found for the keyword '<strong>{keyword}</strong>' within the last 48 hours.<br>" | |
f"Try a different keyword or check back later.</p>") | |
html_output = f"<h2>News results for '{keyword}'</h2>" | |
for article in articles[:10]: # ์ต๋ 10๊ฐ์ ๊ธฐ์ฌ๋ง ํ์ | |
title = article['title'] | |
link = article['url'] | |
pub_date = datetime.strptime(article['publishedAt'], "%Y-%m-%dT%H:%M:%SZ") | |
source = article.get('source', {}).get('name', 'Unknown Source') | |
html_output += f""" | |
<div style='margin-bottom: 20px; padding: 10px; border: 1px solid #ddd; border-radius: 5px;'> | |
<h3><a href='{link}' target='_blank' style='text-decoration: none; color: #1a0dab;'>{title}</a></h3> | |
<p style='color: #006621;'>{source}</p> | |
<p style='color: #545454;'>{pub_date.strftime('%Y-%m-%d %H:%M:%S')}</p> | |
</div> | |
""" | |
return html_output | |
iface = gr.Interface( | |
fn=get_news, | |
inputs=[ | |
gr.Textbox(label="Enter keyword") | |
], | |
outputs=gr.HTML(), | |
title="Visual News Search", | |
description="Search for news articles from the last 48 hours using NewsAPI.", | |
theme=gr.themes.Soft() | |
) | |
iface.launch() |