|
|
|
import gradio as gr |
|
from sources import RSS_FEEDS |
|
from fetch import fetch_articles, fetch_trending_repos, analyze_trends |
|
from analyze import cluster_items |
|
|
|
def get_combined_feed(source_choice, selected_news_sites): |
|
feed_items = [] |
|
|
|
if "News" in source_choice and selected_news_sites: |
|
selected_feeds = {name: url for name, url in RSS_FEEDS.items() if name in selected_news_sites} |
|
feed_items += fetch_articles(selected_feeds, limit=6) |
|
|
|
if "GitHub" in source_choice: |
|
feed_items += [ |
|
{ |
|
"title": repo["name"], |
|
"link": repo["url"], |
|
"summary": repo["description"], |
|
"published": f"{repo['stars']} stars" |
|
} |
|
for repo in fetch_trending_repos(language="python", since="daily")[:5] |
|
] |
|
|
|
feed_text = "\n\n".join([f"🔹 {item['title']} ({item['published']})\n{item['link']}" for item in feed_items]) |
|
|
|
trends_text = cluster_items(feed_items) |
|
|
|
|
|
return feed_text, trends_text |
|
|
|
with gr.Blocks() as demo: |
|
with gr.Row(): |
|
with gr.Column(scale=1): |
|
source_selector = gr.CheckboxGroup(["News", "GitHub"], value=["News"], label="Select Sources") |
|
news_site_selector = gr.CheckboxGroup(list(RSS_FEEDS.keys()), value=["BBC", "Wired"], label="News Sites") |
|
with gr.Column(scale=2): |
|
feed_output = gr.Textbox(label="Aggregated Feed", lines=20) |
|
with gr.Column(scale=2): |
|
trend_output = gr.Textbox(label="Top Trends", lines=20) |
|
|
|
source_selector.change(fn=get_combined_feed, inputs=[source_selector, news_site_selector], outputs=[feed_output, trend_output]) |
|
news_site_selector.change(fn=get_combined_feed, inputs=[source_selector, news_site_selector], outputs=[feed_output, trend_output]) |
|
|
|
demo.launch() |
|
|