# app.py import streamlit as st import openai import requests from newspaper import Article from PIL import Image, ImageDraw, ImageFont import io # from moviepy.editor import TextClip, CompositeVideoClip # OpenAI API key setup openai.api_key = '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' def fetch_news(query): """Fetch a relevant news article.""" url = f"https://newsapi.org/v2/everything?q={query}&apiKey=96d665d458e74a9181e04c2809996e87" response = requests.get(url).json() if response["articles"]: article_url = response["articles"][0]["url"] article = Article(article_url) article.download() article.parse() return article.title, article.text else: return "No news found.", "" def summarize_text(text): """Summarize the text using OpenAI GPT.""" response = openai.Completion.create( engine="text-davinci-003", prompt=f"Summarize this for a social media post:\n\n{text}", max_tokens=150 ) return response.choices[0].text.strip() def generate_image(prompt): """Generate an image using DALLĀ·E.""" response = openai.Image.create(prompt=prompt, n=1, size="1024x1024") image_url = response["data"][0]["url"] image = Image.open(requests.get(image_url, stream=True).raw) return image def create_meme(template_path, caption): """Create a meme using a template.""" template = Image.open(template_path) draw = ImageDraw.Draw(template) font = ImageFont.truetype("arial.ttf", size=40) draw.text((10, 10), caption, fill="white", font=font) return template # def generate_video(text): # """Generate a video with text overlay.""" # clip = TextClip(text, fontsize=70, color='white', bg_color='black', size=(800, 400)) # video = CompositeVideoClip([clip]) # video_path = "output.mp4" # video.write_videofile(video_path, fps=24) # return video_path # Streamlit UI st.title("AI Content Generator") st.sidebar.header("User Input") # User Inputs query = st.sidebar.text_input("Enter news topic:", "AI") tone = st.sidebar.selectbox("Tone:", ["Humorous", "Formal", "Casual"]) format = st.sidebar.selectbox("Format:", ["Text", "Image", "Video", "Meme"]) # Fetch and Process Content if st.sidebar.button("Generate"): title, content = fetch_news(query) if title and content: st.subheader("Original News Article") st.write(f"**{title}**") st.write(content) summary = summarize_text(content) st.subheader("Generated Summary") st.write(summary) if format == "Text": st.subheader("Generated Text Post") st.write(summary) elif format == "Image": st.subheader("Generated Image") image = generate_image(summary) st.image(image) # elif format == "Video": # st.subheader("Generated Video") # video_path = generate_video(summary) # st.video(video_path) elif format == "Meme": st.subheader("Generated Meme") meme = create_meme("meme_template.jpg", summary) st.image(meme) else: st.error("No news found for the given query.")