Un blog alimentado por una base de datos

Estoy seguro que muchos sacerdotes del bitacorismo se rasgarán las vestiduras y raparán la cabellera al leer este artículo. Bueno, será la opinión respestable de aquellos que estiman como se deben hacer las cosas. Yo, ignorante de mi y algo más descreído, prefiero experimentar y probar.

En este caso te muestro un ejemplo de otra utilidad que puede tener un blog. Sin embargo te advierto que el uso de esta técnica puede ser considerada como spam o como una actividad no deseable por parte de tu alojador de blog.

Sin embargo, no creo que descubra nada nuevo, ni mucho menos la pólvora. Lo cierto es que poca información puede encontrarse al respecto en la red sobre este uso. Básicamente yo encontré las piezas del puzzle para desarrollar la idea. Eso no significa que no se haya hecho antes. Con toda seguridad, sí. Parto del siguiente supuesto:


Tengo una base de datos donde he recopilado artículos o información sobre un tema determinado. Esa base de datos tiene una configuración que me permite tener un título y un contenido para un número X de artículos. El contenido puede estar ya preparado o puede componerse, como un puchero, uniendo ingredientes, que serían los campos de un registro de la base.

En realidad, pueden sacarse más usos. La idea básica es la siguiente, el blogger carga una imagen vía script (escrito en Python, Perl, PHP o cualquier otro que permita enviar una imagen como resultado).

También puedes programar el script para que reciba parámetros desde un formulario, lanzándolo contra un <input type="submit">, pero en ese caso se me ocurre que el script debería devolver un HTML cuya única función es redireccionar de nuevo al blog sin esperas (a través de una etiqueta <meta http-equiv="refresh" content="0; url=http://miblog.blogserver.com"> o utilizando JavaScript, por ejemplo) . El pequeño programa podría generar el artículo en base a los datos introducidos en el formulario. Un ejemplo basto sería una carta astral enviada al blog, contra una petición de usuario que indique los datos necesarios (su hora y fecha de nacimiento).

En BlogSpot.com las noticias enviadas por correo electrónico tardan apenas unos pocos minutos en ser publicadas. Ten en cuenta que el título de la noticia será el asunto del mensaje enviado al blog. También debes considerar que no podrás etiquetar la noticia. Además la configuración de tu blog debe permitir una publicación inmediata, pero puedes ajustarlo a una publicación moderada si te interesa y según tu propio proyecto.

¡Vale! No le has cogido el punto. Lo que consigues es que cada vez que un visitante accede a tu blog, éste llama al script a través de una llamada vía una etiqueta <img>, por último, tu programa envia a su vez al blog un nuevo artículo vía correo electrónico. En la siguiente visita, el blog se habrá actualizado y el círculo se repite (así que tendrás que programar unas condiciones muy moderadas para no entullar tu bitácoras).

Del por qué, al cómo


El script prepara y empaqueta un artículo nuevo y lo envía vía correo electrónico al blog, como ya he dicho. Por lo tanto debes configurar tu alojador, si te lo permite, para publicar artículos vía cuenta de correo (Blogger.com te lo permite). Recomendación importante: debes configurar la cuenta de correo como si fuera una clave de acceso, tipo usuario.M1Cl4v3@blogger.com, por ejemplo.

Inserta en tu blog una imagen y en la URL indicas la dirección de tu script, que deberá estar alojado en algún sitio que permita su ejecución con una llamada externa al servidor de alojamiento (hay casos en que no se permite con los permisos estándares de tu alojador). Puedes también insertar un gadget tipo HTML (en Blogger.com, por ejemplo) con la etiqueta: <img src="http://www.miservidor.com/midirectorio/miscript.php?parametro=que_uso_si_lo_necesito">. En tu miservidor.com y alojado en tu midirectorio debes tener ese miscript.php con algo que podría ser más o menos como:

<?php

// uso phpmailer para el correo con el artículo
require("class.phpmailer.php");

// la salida del script será una imagen
header("Content-type: image/png");

// preparar imagen para su envío
$la_imagen = "miimagen.png";
$imagen = imagecreatefrompng($la_imagen);
$fondo = imagecolorallocate($imagen, 0, 0, 0);
$color_texto = imagecolorallocate($imagen, 255, 255, 255);
$imagen_enviada = 0;

// nos conectamos a la base de datos
$ok = mysql_connect('mysql.miservidor.com', 'usuario', 'clave');
if ( $ok ) {
 if ( mysql_select_db('mi_base_mysql') ) {

  // buscamos la noticia según nuestras propias condiciones
  $sql = "SELECT * FROM mitabla ";
  $sql .= "WHERE [condiciones] AND publicada = 0";
  if ( $qry = mysql_query($sql) ) {

   // si hay noticias que cumplan las condiciones
   $rows = mysql_num_rows($qry);
   if ($rows > 0) {
    // podemos añadir un rótulo a la imagen
    imagestring($imagen, 3, 5, 5, "Novedades...", $color_texto);
    imagepng($imagen);
    imagedestroy($imagen);
    $imagen_enviada = 1;
   }

   // tantas noticias encontradas, tantos correos enviados
   for ($n = 0; $n < $rows; $n++) {
    mysql_data_seek($qry, $n);
    $row = mysql_fetch_object($qry);
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    $mail->Host = 'smtp.miservidor.com';
    $mail->Username = 'usuario_email';
    $mail->Password = 'clave_email';
    $mail->From = 'email@miservidor.com';
    $mail->FromName = 'Nombre EMail';
    $mail->AddAddress('usuario.M1Cl4v3@blogger.com', 'Blog');
    // mando la noticia en formato HTML...
    $mail->IsHTML(true);
    $mail->ContentType = "text/html";
    $mail->Subject = $row->titulo;
    $mail->Body = "<html><body>" . $row->texto . "</body></html>";
    $mail->Send();

    // marcamos las noticias como enviadas
    $sql = "UPDATE mitabla SET publicada = 1 ";
    $sql .= "WHERE id = " . $row->id;
    $upd = mysql_query($sql);
   }

  }
  // si hay error en la consulta...
  else imagestring($imagen, 3, 5, 5, "No query!", $color_texto);

 }
 // si hay error al seleccionar base de datos...
 else imagestring($imagen, 3, 5, 5, "No select!", $color_texto);

}
// si hay error al conectar al servidor de base de datos...
else imagestring($imagen, 3, 5, 5, "No connect!", $color_texto);

// si la imagen no se envió, se fuerza el envío
if ($imagen_enviada == 0) {
 imagepng($imagen);
 imagedestroy($imagen);
}

?>

Trabajar, programar, probar, idear y sacar partido al asunto es lo que queda para ti.

Comentarios

Entradas populares