Spaces:
Running
Running
File size: 3,281 Bytes
1454da9 c437756 1454da9 c437756 1454da9 c437756 1454da9 c437756 1454da9 |
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
import gradio as gr
import requests
import os
from dotenv import load_dotenv
import gradio as gr
import google.generativeai as genai
import json
load_dotenv()
genai.configure(api_key=os.getenv('API_KEY'))
model = genai.GenerativeModel('gemini-1.5-flash')
PRODUCT_HUNT_BASE_URL = "https://api.producthunt.com/v2/api/graphql"
def fetch_product_hunt_posts(industry, product_type):
"""Fetches the top 10 Product Hunt posts matching the given industry and product type."""
developer_token = os.getenv("PRODUCT_HUNT_DEVELOPER_TOKEN")
query = """
query {
posts(first: 30, order: VOTES) { # Fetch 30 posts
edges {
node {
id
name
tagline
votesCount
website
commentsCount
}
}
}
}
"""
headers = {"Authorization": f"Bearer {developer_token}"}
response = requests.post(
PRODUCT_HUNT_BASE_URL,
json={"query": query},
headers=headers
)
response.raise_for_status()
try:
data = response.json()
print(json.dumps(data, indent=2))
posts = [edge["node"] for edge in data["data"]["posts"]["edges"]]
# Filter by industry and product type (case-insensitive)
filtered_posts = [
post
for post in posts
if industry.lower() in post["tagline"].lower()
and product_type.lower() in post["tagline"].lower()
]
# Limit to top 3 filtered posts
top_filtered_posts = filtered_posts[:3]
return top_filtered_posts
except KeyError:
print("Unexpected API response format.")
return []
def generate_product_ideas(industry, product_type, target_audience, features, constraints):
product_hunt_posts = fetch_product_hunt_posts(industry, product_type)
top_products = ", ".join([post["name"] for post in product_hunt_posts[:3]])
summary = f"Top products in the {industry} {product_type} category include: {top_products}"
prompt = f"""
Generate innovative product ideas with these details:
Industry: {industry}
Product Type: {product_type}
Target Audience: {target_audience}
Desired Features: {features if features else "N/A"}
Constraints: {constraints if constraints else "N/A"}
Market Analysis (Product Hunt):
{summary}
Provide a concise list of product ideas, each with a brief description.
"""
response = model.generate_content(prompt)
return response.text
with gr.Blocks() as interface:
gr.Markdown("## Product Idea Generator")
with gr.Row():
industry = gr.Dropdown(["Technology", "Health", "Finance", "Education", ...], label="Industry")
product_type = gr.Dropdown(["Hardware", "SaaS", "Mobile App", ...], label="Product Type")
target_audience = gr.Textbox(label="Target Audience")
features = gr.Textbox(label="Desired Features")
constraints = gr.Textbox(label="Constraints")
submit_button = gr.Button("Generate Ideas")
output_text = gr.Textbox(label="Product Ideas")
submit_button.click(generate_product_ideas, inputs=[industry, product_type, target_audience, features, constraints], outputs=output_text)
interface.launch(share=True)
|