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="http://www.anieto2k.com/category/wordpress/'.$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 xmlPara 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
- Descargar el plugin
- Descomprimir y subir a la carpeta wp-content/plugins/ de nuestro Wordpress
- Crear la carpeta xml/ dentro del directorio blogoedad/ de wp-content/plugins/
- Aplicarle estilos de escritura al directorio xml/
- 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'); ?>ArtÃculos relacionados
Compártelo