Contenido

Muestra los usuarios que cumplen años en tu web

18 jul

+ 3

Hace ya tiempo que la BlogoEdad está recopilando datos de los usuarios registrados, actualmente hay 2125 usuarios registrados, y ya hemos llegado al punto en el que al día hay varios usuarios que cumplen años y he pensado que podría estar bien explicar como usar el API para integrarlo en nuestros blogs.

Desde PHP

<?php
class BlogoEdadApi {
	var $xmlFile = 'xml/'; // Indicamos el directorio

	function show($dia, $mes) {
			echo $this->felicitaciones($this->get($dia, $mes));
  	}

	  function get($dia, $mes) {
	  	$this->xmlFile .= $dia.$mes.'.xml';
	  	  if (file_exists($this->xmlFile) && filemtime($this->xmlFile) < 86400 + time())
				$xml = $this->getFromFile($this->xmlFile);
			else
				$xml = $this->getFromUrl('http://edad.anieto2k.com/api.php?d='.$dia.'&m='.$mes);
			return $this->parseXML($xml);
	  }

	  function getFromFile($xmlFile) {
	  	if (!function_exists("file_get_contents")) {
	  		$gestor = fopen($xmlFile, "r");
				$xml = fread($gestor, filesize($xmlFile));
				fclose($gestor);
	  	} else {
	  			$xml = file_get_contents($xmlFile);
	  	}
	  	return $xml;
	  }

	  function getFromUrl($url, $cache = true){
	  	if (!function_exists("file_get_contents")) {
	  			$ch = curl_init();
					curl_setopt($ch, CURLOPT_URL, $url);
					curl_setopt($ch, CURLOPT_HEADER, 0);
					$file = curl_exec($ch);
					curl_close($ch);
	  	}else {
	  		$file = file_get_contents($url);
	  	}
	  	if ($cache) $this->saveCache($this->xmlFile, $file);
	  	return $file;
	  }

	  function saveCache($xmlFile, $str) {
 	 		if(!is_writable(dirname($xmlFile))) die("Imposible almacenar el fichero XML, prueba darle permisos de escritura a la carpeta donde se alojan.");
	  		$fh = fopen($xmlFile ,"w");
	    	fwrite($fh,$str);
	    	fclose($fh);
	   }

	  function parseXML($xml) {
	  	// Parseo de XML
			$doc = new DOMDocument();
			$doc->loadXML($xml);
			$nodes = $doc->getElementsByTagName("user");

			$usuarios = array();
			if ($nodes->length > 0) { // Hay usuarios
	        for ($i = 0; $i < $nodes->length; $i++) {
	        		array_push($usuarios, array(
	        				'id' => $nodes->item($i)->getElementsByTagName('id')->item(0)->nodeValue,
	        				'name' => $nodes->item($i)->getElementsByTagName('nombre')->item(0)->nodeValue,
	        				'url' => $nodes->item($i)->getElementsByTagName('url')->item(0)->nodeValue
	        		));
	       }
			}
			return $usuarios;
	  }

		function felicitaciones($usuarios) {
			if (!is_array($usuarios) || sizeof($usuarios) == 0) return '<ul><li>No hay felicitiaciones hoy</li></ul>';
			$salida = '<ul>';
			foreach ($usuarios as $user) {
						$salida .= '<li><a href="'.$user["url"].'">'.$user["name"].'</a></li>';
			}
			$salida .= '</ul>';
			return $salida;
		}
}
?>

He pensado que para evitar saturación de peticiones, use un sistema de caché almacenando un fichero cada día y así por sitio web se lanzará un petición por día. Para ello hay que definir una carpeta con permisos descritura donde alojar estos ficheros XML.

anieto2k@eNToR:~/public_html$ mkdir xml
anieto2k@eNToR:~/public_html$ chmod 777 xml

Para usar esta clase, únicamente tendremos que insertar donde queramos el siguiente código.

<?php
include ("class.blogoedad.php");

$edad = new BlogoEdadApi();
$edad->show(date("d"), date ("m")); //Día actual del sistema.
// Devolver un Array
$arrayUsuarios = array();
$arrayUsuarios = $edad->get(03, 11); // Un array de los nacidos el 3 de noviembre.
foreach ($arrayUsuarios as $user)
....
?>

Descargar class.blogoedad.php. Tambien teneis una demo del resultado.

Plugin WordPress

Si eres un usuario de WordPress, he pensado que sería más fácil simplemente activar un plugin y tener un par de funciones disponibles para insertarlo fácilmente en nuestro theme.

Instalación

  1. Descargar el plugin
  2. Descomprimir y subir a la carpeta wp-content/plugins/ de nuestro WordPress
  3. Crear la carpeta xml/ dentro del directorio blogoedad/ de wp-content/plugins/
  4. Aplicarle estilos de escritura al directorio xml/
  5. Activar el plugin

Modo de empleo

En nuestro theme podremos usar 2 funcione que nos mostrarán los datos que solicitemos.

<?php if (function_exists("BlogoEdad"))
               BlogoEdad(); //Por defecto HTML, cualquier otro valor devolverá un array ?>

Insertamos la línea anterior donde quereamos que aparezca un listado de los Bloggers que cumplen años hoy.

<?php if (function_exists("BlogoEdadDay"))
               BlogoEdadDay(14, 08); //Por defecto HTML, cualquier otro valor devolverá un array ?>

Nos devolverá un listado con los usuarios que cumplan años el día 14 de agosto.

Tambien podemos trabajar con array haciendo que la función devuelva un array en lugar de la estructura HTML y así formarla nosotros mismos.

<?php if (function_exists("BlogoEdad")) BlogoEdad('array');
      //  o
      if (function_exists("BlogoEdadDay")) BlogoEdadDay(14, 08, 'array'); ?>

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.