Spaces:
Sleeping
Sleeping
File size: 2,132 Bytes
24e0afd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | from shiny import reactive, render, ui
import os
import requests
from dotenv import load_dotenv
from llm_connect import get_response # your existing function
load_dotenv()
PAGE_ID = os.getenv("FB_PAGE_ID")
ACCESS_TOKEN = os.getenv("FB_PAGE_ACCESS_TOKEN")
generated_fb_post = reactive.Value("")
def generate_facebook_post(topic: str) -> str:
prompt = (
f"You are a social media manager for a hobby e-commerce company called 'Ultima Supply'.\n"
f"Write a short, engaging Facebook post (max 500 characters) about: '{topic}'.\n"
f"Use casual and friendly tone. Include emojis and 3-5 relevant hashtags."
)
return get_response(
input=prompt,
template=lambda x: x,
llm="gemini",
md=False,
temperature=0.9,
max_tokens=500
)
def post_to_facebook(message: str) -> str:
url = f"https://graph.facebook.com/{PAGE_ID}/feed"
payload = {
"message": message,
"access_token": ACCESS_TOKEN
}
response = requests.post(url, data=payload)
if response.status_code != 200:
return f"❌ Facebook post failed: {response.status_code} - {response.text}"
post_id = response.json().get("id", "Unknown")
return f"✅ Post successful! Facebook Post ID: {post_id}"
def server(input, output, session):
post_status = reactive.Value("")
@output
@render.ui
@reactive.event(input.gen_btn_fb)
def fb_post_draft():
topic = input.fb_topic()
if not topic.strip():
return ui.HTML("<p><strong>⚠️ Enter a topic first.</strong></p>")
post = generate_facebook_post(topic)
generated_fb_post.set(post)
return ui.HTML(f"<p><strong>Generated Facebook Post:</strong><br>{post}</p>")
@output
@render.text
def fb_post_status():
return post_status()
@reactive.effect
@reactive.event(input.post_btn_fb)
def _():
post = generated_fb_post()
if not post:
post_status.set("⚠️ No post generated yet.")
else:
result = post_to_facebook(post)
post_status.set(result)
|