Spaces:
Sleeping
Sleeping
| import os | |
| import requests | |
| import streamlit as st | |
| import openai | |
| # Load secrets | |
| OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") | |
| SERPAPI_API_KEY = os.environ.get("SERPAPI_API_KEY") | |
| if not OPENAI_API_KEY or not SERPAPI_API_KEY: | |
| st.error("❌ Missing API keys! Add OPENAI_API_KEY and SERPAPI_API_KEY in Settings → Secrets.") | |
| st.stop() | |
| openai.api_key = OPENAI_API_KEY | |
| # Fetch AI news from SerpAPI | |
| def fetch_ai_news(query="latest AI news"): | |
| url = "https://serpapi.com/search.json" | |
| params = {"q": query, "engine": "google", "api_key": SERPAPI_API_KEY, "num": 5} | |
| resp = requests.get(url, params=params).json() | |
| return [{"title": r.get("title",""), "snippet": r.get("snippet",""), "link": r.get("link","")} | |
| for r in resp.get("organic_results", [])] | |
| # Summarize using old OpenAI API | |
| def summarize_news(news_items): | |
| combined_text = "\n\n".join([f"{n['title']} - {n['snippet']}" for n in news_items]) | |
| prompt = f"Summarize the following latest AI news into 5 concise bullet points:\n\n{combined_text}" | |
| response = openai.ChatCompletion.create( | |
| model="gpt-4o-mini", | |
| messages=[{"role": "user", "content": prompt}], | |
| ) | |
| return response.choices[0].message["content"] | |
| # Streamlit UI | |
| st.title("🧠 AI News Summarizer") | |
| query = st.text_input("Enter topic", "latest AI news") | |
| if st.button("Fetch & Summarize"): | |
| news = fetch_ai_news(query) | |
| if not news: | |
| st.warning("No news found") | |
| else: | |
| st.subheader("📰 Top Results") | |
| for n in news: | |
| st.markdown(f"**{n['title']}**") | |
| st.markdown(n['snippet']) | |
| st.markdown(f"[Read more]({n['link']})\n---") | |
| st.subheader("🧩 AI Summary") | |
| summary = summarize_news(news) | |
| st.success(summary) | |