Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import os | |
| import requests | |
| from bs4 import BeautifulSoup | |
| from dotenv import load_dotenv | |
| import openai | |
| API_KEY = os.getenv('OPENAI_API_KEY') | |
| # Initialize OpenAI API | |
| if not API_KEY: | |
| st.error("API key not found. Please add it to the env.") | |
| else: | |
| openai.api_key = API_KEY | |
| # Function to fetch the web content | |
| # Define function to fetch webpage content | |
| def fetch_web_content(url): | |
| try: | |
| response = requests.get(url) | |
| response.raise_for_status() | |
| soup = BeautifulSoup(response.text, 'html.parser') | |
| # Step 1: Find all paragraph tags | |
| paragraph_elements = soup.find_all('p') | |
| # Step 2: Extract text content from each paragraph tag | |
| paragraphs = [p.get_text() for p in paragraph_elements] | |
| return '\n'.join(paragraphs) | |
| except requests.RequestException as e: | |
| st.error(f"Error fetching URL: {e}") | |
| return "" | |
| # Function to generate the messages for the OpenAI API request | |
| def messages_for(web_content): | |
| system_prompt = "You are an assistant that analyzes the contents of a website \ | |
| and provides a short summary, ignoring text that might be navigation related. \ | |
| Respond in markdown." | |
| user_prompt = "The contents of this website are as follows; please provide a short summary of this website in markdown. \ | |
| If it includes news or announcements, then summarize these too.\n\n" | |
| user_prompt += web_content | |
| return [ | |
| {"role": "system", "content": system_prompt}, | |
| {"role": "user", "content": user_prompt} | |
| ] | |
| # summarize the text | |
| def summarize_text(text): | |
| if not text: | |
| return "no content to summarize" | |
| try: | |
| response = openai.chat.completions.create( | |
| model = "gpt-4o-mini", | |
| messages = messages_for(text) | |
| ) | |
| summary = response.choices[0].message.content.strip() | |
| return summary | |
| except Exception as e: | |
| st.error(f"Error with OpenAI API: {e}") | |
| return "Error generating summary." | |
| # Streamlit App UI | |
| st.title("Web Content Summarizer") | |
| st.write("Enter a URL to get a concise summary of the content.") | |
| # User input for URL | |
| url = st.text_input("Enter the URL:") | |
| # Submit button | |
| if st.button("Summarize"): | |
| if url: | |
| st.info("Fetching content...") | |
| web_content = fetch_web_content(url) | |
| if web_content: | |
| st.success("Content fetched successfully!") | |
| st.info("Generating summary...") | |
| summary = summarize_text(web_content) | |
| st.subheader("Summary:") | |
| st.write(summary) | |
| else: | |
| st.warning("Please enter a valid URL.") | |
| # Run this app with: streamlit run app.py | |