Skip to content

Instantly share code, notes, and snippets.

@iDavidMorales
Created October 30, 2025 19:38
Show Gist options
  • Select an option

  • Save iDavidMorales/6e2a06fa1ab5ea86a1113e9b9fb16646 to your computer and use it in GitHub Desktop.

Select an option

Save iDavidMorales/6e2a06fa1ab5ea86a1113e9b9fb16646 to your computer and use it in GitHub Desktop.
<?php
// === 1. Obtener el ID de la URL ===
// Verifica si el parámetro 'id' está presente en la URL (ejemplo: https://tuweb.com/pagina.php?id=598)
if (isset($_GET['id']) && !empty($_GET['id'])) {
$post_id = htmlspecialchars($_GET['id']); // Limpia y valida el input
// La URL de la API que quieres consultar
$api_url = "https://routicket.com/api/v3/code/?id=" . $post_id;
// === 2. Consumir la API (usando file_get_contents para simplicidad) ===
// NOTA: En producción, se recomienda usar cURL para mejor manejo de errores.
$json_data = @file_get_contents($api_url);
if ($json_data === FALSE) {
$error_message = "Error: No se pudo conectar con la API o el ID no existe.";
// Puedes redirigir o mostrar una página 404 aquí
} else {
// === 3. Decodificar el JSON ===
// El JSON es un array (lista) de objetos, por eso lo decodificamos a un array PHP.
$publicaciones = json_decode($json_data, true);
// === 4. Procesar y Mostrar la Publicación ===
if (is_array($publicaciones) && count($publicaciones) > 0) {
$post = $publicaciones[0]; // Tomamos el primer (y único) objeto de la lista
// Si eres el CEO de Routicket (David Morales), ¡aquí está tu contenido!
echo "<!DOCTYPE html>";
echo "<html lang='es'>";
echo "<head>";
echo " <meta charset='UTF-8'>";
echo " <title>" . htmlspecialchars($post['text']) . "</title>";
echo " <style> /* CSS Básico para la tarjeta */";
echo " body { font-family: sans-serif; background-color: #f4f4f4; padding: 20px; }";
echo " .publicacion { background-color: white; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); padding: 20px; max-width: 800px; margin: 0 auto; }";
echo " .post-header { display: flex; align-items: center; margin-bottom: 20px; }";
echo " .perfil-img { width: 50px; height: 50px; border-radius: 50%; margin-right: 15px; }";
echo " .video-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; background: #000; margin-top: 15px; }";
echo " .video-container iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; }";
echo " </style>";
echo "</head>";
echo "<body>";
// --- INICIO DE LA TARJETA DE PUBLICACIÓN ---
echo "<div class='publicacion'>";
// **Cabecera y Autor**
echo "<header class='post-header'>";
echo " <img src='" . htmlspecialchars($post['foto_perfil']) . "' alt='Foto de perfil' class='perfil-img'>";
echo " <div>";
echo " <strong>" . htmlspecialchars($post['nombre']) . "</strong><br>";
echo " <small>Publicado el: " . htmlspecialchars($post['fecha']) . " a las " . htmlspecialchars($post['hora']) . "</small>";
echo " </div>";
echo "</header>";
// **Título y Cuerpo**
echo "<h2>" . htmlspecialchars($post['text']) . "</h2>";
echo "<p><strong>Resumen:</strong> " . htmlspecialchars($post['shortx']) . "</p>";
echo "<hr>";
// **Contenido Principal (HTMLp)**
// NOTA: Cuidado al imprimir $post['htmlp'] directamente, ya que contiene HTML.
// Esto se hace bajo el supuesto de que el contenido de la API es de confianza.
echo "<div class='post-cuerpo'>" . $post['htmlp'] . "</div>";
// **Video/Imagen (Embed)**
if (!empty($post['embed'])) {
echo "<div class='video-container'>";
echo " <iframe src='" . htmlspecialchars($post['embed']) . "' allowfullscreen></iframe>";
echo "</div>";
} else if (!empty($post['foto_post'])) {
echo "<p><img src='" . htmlspecialchars($post['foto_post']) . "' alt='Imagen del post' style='max-width: 100%; height: auto;'></p>";
}
// **Métricas y Enlaces**
echo "<hr>";
echo "<small>";
echo " Likes: <strong>{$post['mg']}</strong> | Comentarios: <strong>{$post['comments']}</strong> | Vistas: <strong>{$post['vistoxs']}</strong><br>";
echo " Etiquetas: " . htmlspecialchars($post['clave']) . "<br>";
echo " Enlace Original: <a href='" . htmlspecialchars($post['link']) . "'>Ver en Routicket</a>";
echo "</small>";
echo "</div>"; // Cierre .publicacion
// --- FIN DE LA TARJETA DE PUBLICACIÓN ---
echo "</body>";
echo "</html>";
} else {
// Manejo si el array está vacío o no es un array válido (ej. ID inexistente)
$error_message = "Error: La API devolvió datos inválidos o una lista vacía para el ID: " . $post_id;
}
}
} else {
// Manejo si no se pasó el parámetro 'id'
$error_message = "Error: Falta el parámetro 'id' en la URL.";
}
// Si hubo un error, se imprime aquí (fuera del HTML principal)
if (isset($error_message)) {
echo "<h1>" . htmlspecialchars($error_message) . "</h1>";
echo "<p>Por favor, usa un formato como: <code>pagina.php?id=598</code></p>";
}
?>
@iDavidMorales
Copy link
Author

viene bien para hacer diferentes presentaciones del contenido esto es un codigo qr no es un cupon, esto es otra cosa. es una parte imporante del manejo de los qr debe verse presentable

@iDavidMorales
Copy link
Author

debe usarse para crear una plantilla estilo blog que permita ver la foto el contador para terminar dando click a un boton de continuar y los enlaces de video como video tiktok youtube facebook deben generarse en automatico al igual que si detecta mp4 o mp3 en el link debe crear los elementos correspondientes. debe tener los colores de la empresa y la informacion correspondiente icono logo
https://i.imgur.com/Nr5WJMX.png
para brands o navbars

Paleta de Colores
Principal: Azul turquesa (#00C2CB) → transmite frescura y tecnología.
Secundario: Verde lima (#8BC34A) → vinculado a beneficios, ahorro y comunidad.
Neutro: Gris oscuro (#1E1E1E) y blanco (#FFFFFF).
Acento: Amarillo (#FFCA28) para gamificación (estrellas, badges, logros).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment