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)