File size: 2,255 Bytes
ad0f104
18c9d60
ab30506
aa8bc02
68a8b0c
 
 
ab30506
aa8bc02
 
68a8b0c
 
 
 
 
 
 
aa8bc02
 
68a8b0c
18c9d60
f42fdaf
68a8b0c
f42fdaf
68a8b0c
f42fdaf
b659602
f42fdaf
68a8b0c
b659602
68a8b0c
 
ab30506
68a8b0c
b659602
 
ab30506
b659602
aa8bc02
68a8b0c
 
 
b659602
 
 
 
 
 
 
 
 
68a8b0c
b659602
68a8b0c
ab30506
 
 
 
ad0f104
b659602
 
 
 
ad0f104
 
ab30506
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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()