Spaces:
Sleeping
Sleeping
| 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() |