import gradio as gr import requests from bs4 import BeautifulSoup from datetime import datetime, timedelta import pytz SUPPORTED_COUNTRIES = { 'United States': 'US', 'United Kingdom': 'GB', 'Australia': 'AU', 'India': 'IN', 'Canada': 'CA' } def get_news(country, keyword): country_code = SUPPORTED_COUNTRIES.get(country) if not country_code: return "Selected country is not supported." base_url = f"https://news.google.com/search?q={keyword}&hl=en-{country_code}&gl={country_code}&ceid={country_code}:en" try: response = requests.get(base_url, timeout=10) response.raise_for_status() except requests.RequestException as e: return f"Error fetching news: {str(e)}" soup = BeautifulSoup(response.text, 'html.parser') articles = soup.find_all('article') time_threshold = datetime.now(pytz.utc) - timedelta(hours=48) filtered_news = [] for article in articles: title_elem = article.find('h3', class_='ipQwMb ekueJc RD0gLb') link_elem = article.find('a', class_='VDXfz') time_elem = article.find('time', class_='WW6dff uQIVzc Sksgp') if title_elem and link_elem and time_elem: title = title_elem.text link = f"https://news.google.com{link_elem['href'][1:]}" pub_time = datetime.fromtimestamp(int(time_elem['datetime'])/1000, pytz.utc) if pub_time > time_threshold: filtered_news.append(f"Title: {title}\nLink: {link}\nDate: {pub_time}\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." ) iface.launch()