nniehaus's picture
Update app.py
56af34b verified
Raw
History Blame Contribute Delete
5.57 kB
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)