Spaces:
Build error
Build error
| import streamlit as st | |
| st.set_page_config(page_title="Video Marketing Plan Generator", layout="wide") | |
| import requests | |
| import os | |
| from bs4 import BeautifulSoup | |
| # Configure OpenAI API (using OPENAI_API_KEY) | |
| OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") | |
| OPENAI_ENDPOINT = "https://api.openai.com/v1/chat/completions" | |
| def scrape_website(url): | |
| """Scrapes business content from the given website URL.""" | |
| if not url.startswith("http"): | |
| url = f"https://{url}" | |
| try: | |
| response = requests.get(url, timeout=10) | |
| response.raise_for_status() | |
| soup = BeautifulSoup(response.content, "html.parser") | |
| content = [] | |
| # Extract meta description if available | |
| meta_description = soup.find("meta", {"name": "description"}) | |
| if meta_description and meta_description.get("content"): | |
| content.append(meta_description["content"]) | |
| # Extract text from h1, h2, and p tags | |
| for tag in ['h1', 'h2', 'p']: | |
| elements = soup.find_all(tag) | |
| content.extend([elem.get_text(strip=True) for elem in elements if elem.get_text(strip=True)]) | |
| return " ".join(content[:1500]) | |
| except Exception as e: | |
| st.error(f"Error scraping website: {str(e)}") | |
| return None | |
| def generate_video_marketing_plan(business_info): | |
| """Generates a comprehensive video marketing plan using OpenAI GPT-4.""" | |
| prompt = f"""As a leading video marketing strategist specializing in conversion optimization, create a comprehensive video marketing plan for the following business: | |
| {business_info} | |
| Your plan should include: | |
| 1. **Core Strategy:** Identify 3 unique angles or approaches that differentiate this business’s video content and showcase its unique value proposition. | |
| 2. **Funnel Architecture:** Provide detailed video content ideas for each stage of the funnel: Awareness, Consideration, Conversion, and Post-Purchase. | |
| 3. **Content Blueprints:** For the top 3 video concepts, include a content outline, key messaging points, attention-grabbing hooks, call-to-action strategy, ideal length/format, and platform-specific tips. | |
| 4. **Production Guidelines:** Recommend visual styles, music/sound design, text overlay strategies, and thumbnail design principles. | |
| 5. **Distribution Strategy:** Suggest primary platforms, posting frequency, cross-platform repurposing, hashtag/keyword recommendations, and community engagement tactics. | |
| 6. **Measurement Framework:** Define KPIs, engagement metrics, conversion tracking, and A/B testing recommendations to evaluate performance. | |
| Format your response in clear markdown with headers and bullet points, and explain the strategic reasoning behind each recommendation.""" | |
| headers = { | |
| "Authorization": f"Bearer {OPENAI_API_KEY}", | |
| "Content-Type": "application/json" | |
| } | |
| data = { | |
| "model": "gpt-4", # Using OpenAI GPT-4 model | |
| "messages": [ | |
| {"role": "system", "content": "You are a top-tier video marketing strategist with years of experience developing conversion-optimized video funnels."}, | |
| {"role": "user", "content": prompt} | |
| ], | |
| "temperature": 0.7, | |
| "max_tokens": 4000 | |
| } | |
| try: | |
| response = requests.post(OPENAI_ENDPOINT, json=data, headers=headers) | |
| response.raise_for_status() | |
| return response.json()["choices"][0]["message"]["content"] | |
| except Exception as e: | |
| st.error(f"API Error: {str(e)}") | |
| return None | |
| # Streamlit UI | |
| st.title("🎥 Video Marketing Plan Generator") | |
| st.markdown("### Generate a comprehensive video marketing plan for your business.") | |
| input_method = st.radio("Choose input method:", ["Enter business details manually", "Use website URL"]) | |
| if input_method == "Enter business details manually": | |
| business_name = st.text_input("Business Name*") | |
| business_description = st.text_area("What does your company do?*", help="Describe your products/services and what makes you unique.") | |
| ideal_client = st.text_area("Ideal Client Profile*", help="Include demographics, challenges they face, and why they need your solution.") | |
| marketing_goals = st.text_area("Marketing Goals (optional)", help="Describe your primary marketing objectives, target metrics, and any specific goals.") | |
| if st.button("Generate Marketing Plan"): | |
| if not all([business_name, business_description, ideal_client]): | |
| st.error("Please fill in all required fields marked with *") | |
| else: | |
| with st.spinner("Creating your custom video marketing plan..."): | |
| business_info = f""" | |
| Business Name: {business_name} | |
| Business Description: {business_description} | |
| Ideal Client Profile: {ideal_client} | |
| Marketing Goals: {marketing_goals if marketing_goals else 'Not provided'} | |
| """ | |
| plan = generate_video_marketing_plan(business_info) | |
| if plan: | |
| st.markdown(plan) | |
| else: | |
| website_url = st.text_input("Enter your business website URL*", placeholder="e.g., www.example.com") | |
| if st.button("Generate Marketing Plan"): | |
| if not website_url: | |
| st.error("Please enter a valid website URL") | |
| else: | |
| with st.spinner("Extracting business details and generating your video marketing plan..."): | |
| website_content = scrape_website(website_url) | |
| if website_content: | |
| plan = generate_video_marketing_plan(website_content) | |
| if plan: | |
| st.markdown(plan) | |