FB_ADS_GENERATOR_3 / headline_generator.py
JeCabrera's picture
Upload headline_generator.py
9acf776 verified
import random
def generate_random_headlines(target_audience, product, angle=None, story_prompt=None, language="español"):
"""
Genera titulares aleatorios para anuncios de Facebook basados en plantillas predefinidas.
Args:
target_audience: Descripción del público objetivo
product: El producto o servicio que se anuncia
angle: El ángulo estratégico seleccionado (opcional)
story_prompt: Tema específico para la historia del anuncio (opcional)
language: Idioma objetivo para el anuncio (default: "español")
Returns:
list: Lista de titulares aleatorios con diferentes estructuras
"""
# Categorías de plantillas para asegurar variedad
headline_categories = {
"pregunta": [
"¿{problema} {tiempo}? {solución}",
"¿Cansado de {problema}? {descubrimiento}",
"¿Sabías que {dato_sorprendente} puede {beneficio}?",
"¿Por qué {grupo_personas} están {acción_positiva}?",
],
"declaración": [
"El método {adjetivo} que está revolucionando {industria}",
"El secreto {adjetivo} detrás de {resultado_deseado}",
"{beneficio_principal} en solo {tiempo}: El método que está cambiando {industria}",
"La fórmula {adjetivo} para {beneficio} que funciona incluso si {situación_negativa}",
],
"historia": [
"De {situación_negativa} a {situación_positiva}: La historia que está cambiando {industria}",
"Cómo {persona_común} logró {resultado_extraordinario} sin {método_común}",
"La estrategia de {tiempo} que transformó {área} para miles de {grupo_personas}",
],
"advertencia": [
"Alerta: {problema_común} está {consecuencia_negativa}",
"Advertencia: {hábito_común} podría estar {consecuencia}",
"La verdad incómoda sobre {tema} que nadie menciona",
"{número} señales de que {problema} está afectando tu {área_vida}",
],
"curiosidad": [
"Lo que {expertos} no quieren que sepas sobre {tema}",
"Descubierto: El {elemento} que {beneficio_principal} en solo {tiempo_corto}",
"El sorprendente vínculo entre {tema} y {resultado_deseado}",
"La técnica olvidada que está transformando {industria}",
],
}
# Variables para personalizar los titulares según el contexto
variables = {
# Problemas comunes según el público objetivo
"problema": [
"no ver resultados",
"perder tiempo y dinero",
"sentir frustración",
"quedarse estancado",
"ver a otros avanzar mientras uno se queda atrás"
],
# Tiempos
"tiempo": [
"después de tanto esfuerzo",
"a pesar de intentarlo todo",
"cuando más se necesita",
"en momentos críticos"
],
# Soluciones o descubrimientos
"solución": [
"Esto está cambiando las reglas del juego",
"Este enfoque está transformando resultados",
"Esta estrategia podría ser la respuesta"
],
"descubrimiento": [
"Este descubrimiento está sorprendiendo a expertos",
"Esta innovación está cambiando paradigmas",
"Este método está revolucionando la industria"
],
# Datos sorprendentes
"dato_sorprendente": [
"un simple cambio de enfoque",
"una técnica olvidada",
"un método poco conocido",
"un principio ignorado por la mayoría"
],
# Beneficios
"beneficio": [
"transformar completamente resultados",
"multiplicar efectividad",
"eliminar obstáculos persistentes",
"crear avances significativos"
],
# Grupos de personas
"grupo_personas": [
"profesionales comunes",
"personas sin experiencia previa",
"quienes antes fracasaban",
"principiantes"
],
# Acciones positivas
"acción_positiva": [
"logrando resultados extraordinarios",
"transformando su situación",
"superando obstáculos históricos",
"alcanzando metas que parecían imposibles"
],
# Problemas comunes
"problema_común": [
"lo que todos hacen",
"el enfoque tradicional",
"el método convencional",
"la estrategia que todos siguen"
],
# Consecuencias negativas
"consecuencia_negativa": [
"saboteando el potencial",
"limitando los resultados",
"bloqueando el progreso",
"creando obstáculos invisibles"
],
# Hábitos comunes
"hábito_común": [
"este hábito diario",
"esta práctica común",
"esta rutina aparentemente inofensiva",
"esta estrategia popular"
],
# Consecuencias
"consecuencia": [
"estar saboteando los esfuerzos",
"estar creando el efecto contrario",
"estar limitando el potencial",
"estar generando resultados opuestos"
],
# Temas
"tema": [
f"{product}",
"resultados reales",
"éxito sostenible",
"transformación verdadera"
],
# Números
"número": [
"3", "5", "7", "9"
],
# Áreas de vida
"área_vida": [
"potencial",
"resultados",
"progreso",
"crecimiento"
],
# Situaciones negativas
"situación_negativa": [
"frustración constante",
"resultados mediocres",
"estancamiento",
"intentos fallidos"
],
# Situaciones positivas
"situación_positiva": [
"resultados extraordinarios",
"éxito consistente",
"avance continuo",
"transformación completa"
],
# Industrias
"industria": [
"la forma de ver resultados",
"la manera de lograr objetivos",
"el enfoque hacia el éxito",
"la perspectiva sobre el progreso"
],
# Persona común
"persona_común": [
"alguien sin ventajas especiales",
"una persona común",
"quien menos lo esperaba",
"alguien que antes fracasaba"
],
# Resultados extraordinarios
"resultado_extraordinario": [
"transformar completamente su situación",
"multiplicar sus resultados",
"lograr lo que parecía imposible",
"crear un avance significativo"
],
# Métodos comunes
"método_común": [
"usar métodos complicados",
"invertir fortunas",
"sacrificar tiempo valioso",
"seguir el camino tradicional"
],
# Adjetivos
"adjetivo": [
"poco conocido",
"revolucionario",
"contraintuitivo",
"sorprendente"
],
# Resultados deseados
"resultado_deseado": [
"lograr resultados reales",
"crear transformación verdadera",
"generar avances significativos",
"superar obstáculos persistentes"
],
# Expertos/competidores
"expertos": [
"muchos expertos",
"la mayoría de asesores",
"quienes venden soluciones tradicionales",
"los defensores del método convencional"
],
# Elementos
"elemento": [
"principio",
"enfoque",
"método",
"sistema"
],
# Beneficio principal
"beneficio_principal": [
"transforma resultados",
"elimina obstáculos",
"multiplica efectividad",
"genera avances significativos"
],
# Tiempo corto
"tiempo_corto": [
"semanas",
"días",
"pasos simples",
"un proceso sencillo"
],
# Obstáculos comunes
"obstáculo_común": [
"complicaciones innecesarias",
"inversiones costosas",
"métodos complejos",
"sacrificios excesivos"
],
# Áreas específicas
"área": [
"productividad",
"confianza",
"habilidades",
"resultados"
],
}
# Personalizar variables según el ángulo seleccionado si existe
if angle and 'keywords' in angle:
for keyword in angle['keywords']:
if "beneficio" in variables:
variables["beneficio"].append(keyword)
if "tema" in variables:
variables["tema"].append(keyword)
# Personalizar variables según el story_prompt si existe
if story_prompt:
if "tema" in variables:
variables["tema"].append(story_prompt)
if "beneficio" in variables:
variables["beneficio"].append(f"resolver {story_prompt}")
# Función para reemplazar variables en una plantilla
def fill_template(template):
filled_template = template
for var_name in variables:
if "{" + var_name + "}" in template:
filled_template = filled_template.replace(
"{" + var_name + "}",
random.choice(variables[var_name])
)
return filled_template
# Generar titulares de diferentes categorías para asegurar variedad
headlines = []
# Seleccionar categorías diferentes para cada anuncio
categories = list(headline_categories.keys())
random.shuffle(categories)
# Asegurar que tenemos al menos 3 categorías diferentes
selected_categories = categories[:min(3, len(categories))]
# Generar un titular de cada categoría seleccionada
for category in selected_categories:
template = random.choice(headline_categories[category])
headline = fill_template(template)
headlines.append(headline)
# Si necesitamos más titulares, generar adicionales de categorías aleatorias
while len(headlines) < 9: # Generar 9 titulares (3 para cada anuncio)
category = random.choice(categories)
templates = headline_categories[category]
template = random.choice(templates)
headline = fill_template(template)
# Evitar duplicados
if headline not in headlines:
headlines.append(headline)
return headlines