gag / app.py
edwardthefma's picture
Update app.py
09567e1 verified
import requests
import gradio as gr
from datetime import datetime
# Reliable public API (when active; community-hosted)
API_URL = "https://gagstock.gleeze.com/grow-a-garden"
def fetch_stock():
try:
response = requests.get(API_URL, timeout=15)
response.raise_for_status()
data = response.json()
if data.get("status") != "success":
return {"error": "API returned non-success status."}
seeds_data = data.get("data", {}).get("seed", {}).get("items", [])
if not seeds_data:
return {"error": "No seed data found in API response."}
return seeds_data
except requests.exceptions.ConnectionError:
return {"error": "Cannot connect to API (server down). Use live trackers like growagardenstock.org or growagardenpro.com."}
except Exception as e:
return {"error": f"API error: {str(e)}. Check growagardenstock.org or vulcanvalues.com/grow-a-garden/stock for live data."}
def check_seeds(desired_seeds):
stock_data = fetch_stock()
if isinstance(stock_data, dict) and "error" in stock_data:
return stock_data["error"], ""
desired_list = [seed.strip().lower() for seed in desired_seeds.split(",") if seed.strip()]
table = "| Seed Name | Stock |\n|-----------|-------|\n"
matches = []
for item in stock_data:
seed_name = item.get('name', 'Unknown')
stock = item.get('quantity', 0)
table += f"| {seed_name} | {stock} |\n"
if seed_name.lower() in desired_list and stock > 0:
matches.append(f"🌟 **{seed_name} is IN STOCK! ({stock} available)** 🌟")
notification = "\n".join(matches) if matches else "No matching seeds in stock right now. Check back soon!"
notification += f"\n\nLast updated: {datetime.now().strftime('%H:%M:%S')} UTC"
return table, notification
with gr.Blocks(title="Grow A Garden Seed Notifier 🌱", js="""
() => {
setInterval(() => {
document.querySelector('button#refresh_button').click();
}, 60000); // Auto-refresh every 60 seconds
}
""") as demo:
gr.Markdown("# Grow A Garden Seed Notifier 🌱")
gr.Markdown("Enter seeds you're hunting (comma-separated). Auto-refreshes **every 60 seconds**!")
desired_input = gr.Textbox(
label="Desired Seeds",
placeholder="e.g. Cocoa, Dragon Fruit, Moon Blossom, Sugar Apple",
value="Cocoa, Dragon Fruit, Moon Blossom"
)
stock_output = gr.Markdown(label="Current Seed Stock Table")
notification_output = gr.Markdown(label="πŸ”” Alerts")
refresh_button = gr.Button("Manual Refresh Now", elem_id="refresh_button")
refresh_button.click(
fn=check_seeds,
inputs=desired_input,
outputs=[stock_output, notification_output]
)
demo.load(
fn=check_seeds,
inputs=desired_input,
outputs=[stock_output, notification_output]
)
demo.launch()