Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import feedparser | |
| from datetime import datetime, timedelta | |
| import time | |
| # Fetch and sort agri news (last 1 year) | |
| def fetch_all_hindi_agri_news(): | |
| query = "कृषि" | |
| rss_url = f"https://news.google.com/rss/search?q={query}&hl=hi-IN&gl=IN&ceid=IN:hi" | |
| feed = feedparser.parse(rss_url) | |
| now = datetime.now() | |
| one_year_ago = now - timedelta(days=365) | |
| news_items = [] | |
| for entry in feed.entries: | |
| try: | |
| published_time = datetime.fromtimestamp(time.mktime(entry.published_parsed)) | |
| except: | |
| continue | |
| if published_time >= one_year_ago: | |
| news_items.append({ | |
| "title": entry.title, | |
| "link": entry.link, | |
| "published_dt": published_time, | |
| "published": published_time.strftime("%Y-%m-%d %H:%M") | |
| }) | |
| news_items.sort(key=lambda x: x["published_dt"], reverse=True) | |
| return news_items | |
| # Render 20 news items | |
| def render_news(news_items, start, count=20): | |
| sliced = news_items[start:start+count] | |
| if not sliced: | |
| return "<p>✅ आपने सभी समाचार देख लिए हैं।</p>" | |
| result = "" | |
| for i, item in enumerate(sliced, start + 1): | |
| result += f"<strong>{i}. {item['title']}</strong><br>\n" | |
| result += f"<a href='{item['link']}' target='_self'>🔗 समाचार लिंक</a><br>\n" | |
| result += f"🗓️ प्रकाशित: {item['published']}<br>\n" | |
| result += f"<hr style='margin: 10px 0;' />\n" | |
| return result | |
| # Load initial news | |
| def load_initial_news(): | |
| news = fetch_all_hindi_agri_news() | |
| display = render_news(news, 0) | |
| return display, news, 20 | |
| # Load more news | |
| def load_more_news(news_state, current_index): | |
| display = render_news(news_state, current_index) | |
| js_scroll_top = "<script>window.scrollTo(0, 0);</script>" | |
| return display + js_scroll_top, current_index + 20 | |
| # Gradio App | |
| with gr.Blocks(title="निंजा किसान कृषि समाचार") as demo: | |
| gr.HTML("<h1 style='text-align: center;'>निंजा किसान कृषि समाचार</h1>", elem_id="title") | |
| output_html = gr.HTML() | |
| load_more_bottom = gr.Button("🔄 और समाचार देखें") | |
| news_state = gr.State([]) | |
| news_index = gr.State(0) | |
| demo.load(fn=load_initial_news, outputs=[output_html, news_state, news_index]) | |
| load_more_bottom.click(fn=load_more_news, inputs=[news_state, news_index], outputs=[output_html, news_index]) | |
| demo.launch() | |