Gravatar en PHP, Clase para generar avatares.

logotipo de gravatar generado en php

Hace poco, trabajando con un proyecto del que ya hablaré otro día me encontré con la necesidad de interactuar desde PHP con el servicio gravatar. Una herramienta on-line cuyo uso se ha generalizado bastante y que permite a los usuarios usar su avatar en aquellos servicios web que lo soporten de manera automática, sin tener que registrarse y subir su avatar en diferentes páginas.

Ya existen un par de clases en PHP que permiten interactuar con el servicio de gravatar, sin embargo no se ajustaban exactamente a lo que quería, así que me decidí por implementarla yo mismo. La dejo aquí por si a alguien más le es de utilidad.


Funcionalidades

Esta clase nos permitirá:


Usando la class Gravatar

Aquí un pequeño ejemplo de implementación:

<?php

	$gravatar = new Gravatar();
	$gravatar->setEmail('admi'.'n@comentalo.net');
	$gravatar->setSize(40);
	$gravatar->useIdenticonAsDefault();
	
	if( $gravatar->exists() ){
		echo "<img src='".$gravatar->getImageUrl()."'>";	
		echo "EXISTS!!";		
	}else{
		echo "Doesnt exists<br>Showing autogenerated avatars<br>";
		echo "<img src='".$gravatar->getImageUrl()."'>";
	}

?>

Metodos de uso público

El constructor no requiere parametros, pero podemos especificar el email.

   $gravatar = new Gravatar('email@ejemplo.com');

Gravatar::setEmail(string)

Especifica el email sobre el que queremos generar el gravatar

   $gravatar->setEmail('ejemplo@test.com');

Gravatar::setSize( integer )

Especifica el tamaño de la imagen, las imágenes de gravatar son cuadradas, así que es tanto el ancho como el alto.

  $gravatar->setSize(40);

Gravatar::setRating( string )

Especifica el rating de las imágenes a mostrar, gravatar utiliza un sistema de ratings para impedir que imágenes 'poco adecuadas' aparezcan en servicios que no aceptan ese tipo de imágenes como avatar.

Las opciones posibles son 'g','pg','r', y 'x'. Siendo los avatares de tipo 'G' los aptos para todos los publicos, y los de tipo 'X' aquellos que contengan escenas muy gores o p0rnog4ficas. Si especificamos un rating de tipo 'X' se mostraran todos los avatares.

  $gravatar->setRating('PG');

Gravatar::setDefaultImage(string)

Especifica la imagen que se usará en caso de que el usuario no este registrado en gravatar, el servicio de gravatar se encargará del redimensionado por nosotros.

  $gravatar->setDefaultImage('http://nidodecuervos.comentalo.net/img/default_avatar.png');

Gravatar::useIdenticonAsDefault(), useMonsterIdAsDefault, y useWavatarAsDefault

Si llamamos a uno de estos métodos haremos que el servicio gravatar genere auto-mágicamente un avatar 'único' para ese correo electrónico solo en caso de que el usuario no este registrado en gravatar. Así, todos los comentarios de 'ejemplo@test.com' mostrarán siempre el mismo avatar generado. Cabe decir que los avatares generados mediante MonsterId son realmente feos :P

  $gravatar->useIdenticonAsDefault();
  // o
  $gravatar->useMonsterIdAsDefault();  
  // o
  $gravatar->useWavatarAsDefault();

Un ejemplo usando los diferentes sistemas de generado

Identicon
Wavatar
MonsterId

Gravatar::getImageUrl()

Nos retornará la url de la imagen en el el servidor de gravatar.

  $url = $gravatar->getImageUrl();

Gravatar::getImageTag( [string] )

Nos retornara en forma de string un tag html 'image' con la url del avatar, opcionalmente podemos especificar una clase CSS para nuestra imagen.

  $image = $gravatar->getImageTag('avatar_image_class');

Gravatar::exists()

Haciendo uso de la opción 404, este método retornará true(verdadero) si el usuario especificado mediante setEmail() esta dado de alta en el servicio de gravatar, y false(falso) en caso contrario.

  if( $gravatar->exists() )
  {
    echo "User is registered at gravatar";
  }
  else
  {
    echo "User is NOT registered at gravatar";  
  }

Este método no estaba implementado en las clases que encontré por la red. Quizás la opción es relativamente nueva.

En algunos hostings el use de fopen para abrir conexiones HTTP no está soportado, pero como alternativa, si nos permiten usar CURL. Si este método determina que CURL está disponible usará CURL, si no, intentara la conexión mediante fopen.

A tener en cuenta: Este método abre una conexión, así que no es recomendable abusar de el, si tienes 300 avatares y usas este método cada vez que muestras un avatar para determinar si tiene o no gravatar, estarás abriendo 300 conexiones desde tu servidor, posiblemente no quieras hacer eso, consumiras ancho de banda para nada y además si el servicio de gravatar no responde rápido ralentizarás la carga de tu página. En vez de eso sería recomendable determinar solo una vez si el usuario dispone de gravatar o no y guardar ese dato.


Demostración, creando un gravatar en php

Aquí tenemos un código del ejemplo, que también encontrareis en el archivo comprimido.
<html>
	<head>
	<style>
	.avatar{ border:1px solid black; margin:10px; }
	*{ font-size: 11px }
	body{ background-color: #F5F5F5; margin:0px; padding:10px;}
	#email{ border:1px solid #444444; }
	h1,h2{ font-size:14px; }
	</style>
	</head>
	<body>
		<h1>Ejemplo de gravatar</h1>
		
		<!-- el formulario -->
		<form method='GET'>
			Introduce un email:
			<input type='text' name='email' id='email' value="<?= $_GET[email] ?>">
			<input type='submit' value='ver gravatar'>
		</form>
		
		<!-- pongo via JS un email para probar si no han introducido ninguno -->
		<?php if( empty($_GET[email]) ): ?>
		<script>
			document.getElementById('email').value= 'admin'+'@'+'comentalo.net'
		</script>
		<?php endif; ?>
		
		


<?php
////////////////////////////////////////////////////////////////////////////////
// Ejemplo de uso de la clase gravatar
////////////////////////////////////////////////////////////////////////////////

if( $_GET[email] )
{
	
	require 'Gravatar.class.php';
	
	$gravatar = new Gravatar();
	$gravatar->setEmail($_GET[email]);
	
	if( $gravatar->exists() )
	{
		echo "<h2 style='color:#009900'>Ese email dispone de gravatar</h2>";
		$gravatar->setSize(40);
		echo $gravatar->getImageTag('avatar');
		$gravatar->setSize(70);
		echo $gravatar->getImageTag('avatar');
		$gravatar->setSize(120);
		echo $gravatar->getImageTag('avatar');
		
	}
	else
	{
		echo "<h2 style='color:#880000'>Ese email NO dispone de gravatar</h2>";

		echo "<p>Mostrando Identicono, MonsterId, y Wavatar (autogenerados)</p>";
		
		$gravatar->setSize(120);
		$gravatar->useIdenticonAsDefault();
		echo $gravatar->getImageTag('avatar');
		
		$gravatar->setSize(70);
		$gravatar->useMonsterIdAsDefault();
		echo $gravatar->getImageTag('avatar');

		$gravatar->setSize(40);
		$gravatar->useWavatarAsDefault();
		echo $gravatar->getImageTag('avatar');
	}

}

?>
	</body>
</html>

Demostración en funcionamiento




Descargar clase Gravatar + ejemplos

Aquí podéis descargar la clase + ejemplo de uso en tres divertidos formatos de compresión.

Quizás te interese:

Decorar botones en CSS (Input button)

Fluxcripts, controlando fluxbox desde PHP

Jedit, un editor de texto para programadores

Comentarios

Arkos Noem Arenom
2010-03-02 10:46:02

Pues muchas gracias por visitarme, ese es el objetivo de mi Blog, que las personas se puedan ayudar con lo que publico, espero verte mas seguido por mi Blog y de igual forma yo estare por aquí.

Gracias por los comentarios, eso me hace sentir que voy por un buen camino.

Saludos

zonarock
2010-07-13 13:58:09

hola, como puedo hacer para que si el usuario no tiene un gravatar que se muestre otra imagen previa, Pero que este en mi directorio osea imagenes/miavar.gif

NidoDeCuervos
2010-07-16 05:35:04

Hola zonarock,

Para especificar tu imágen tienes dos posibilidades, uno, determina si existe el avatar mediante el metodo Exists(), que te retornará falso si ese usuario no está registrado, lee las implicaciones en el post sobre los problemas de usar este método, la segunda opción es decirle a gravatar que use una imágen especificada por ti en caso de no encontrar el avatar para el email especificado, para ello usa el método SetDefaultImage('dominio/directorio/imagen.jpg'),

Saludos.

isabel
2011-07-24 11:53:04


Hola, mis estimados y sabios webmasters.

Tengo un simple Libro de Visitas en mi sitio, y deseo cambiarlo por este estilo de los gravatares.
¡Necesito de vuestra ayuda, por favor! Este tema de los gavatares, me he está volviendo loca.

* Me suscribí al sitio de Gravatar con mi email. Luego, por defecto, aparece una imagen del gravatar.
* Solicitan que suba una imagen mía... subí una JPG de 200/ 200 pxl (¿o debo subir una PNG?)
* Me piden que la "corte"... pero también informan que no es necesario, que ellos la "cortaran" en diferentes tamaños: 120 + 80 + 40... (??) Veo una contradicción, ahí... Dan tantos ejemplos de códigos para insertar en mi sitio, que me marearon.

( En la clase de vuestro sitio escribieron: - Establecer que imagen por defecto se usara, una propia, un identicon, un monster id, o un wavatar. - Generar el código html para ese gravatar, o bien obtener solo la url.
Especificar el tamaño en el que se mostrará o descargará el avatar. - Usando la class Gravatar y Metodos de uso público)

¿Cuál de esos script debe usarse en un sitio web: class o público?

Yo prefiero este: identicon: a geometric pattern based on an email hash - size - tamaño: 40 * 40 pxl.

* ¿ Qué significa eso: "...creating the Hash from your email address"...
* ¿Debo descargar todos los avatares al disco duro desde algún zip?
* ¿Resumiendo: ¿cuál es el SCRIPT COMPLETO que debo insertar en mi página, junto con el FORMULARIO para comentarios y que aparezcan los comentarios junto con los gavartares de los usuarios? Exactamente como aparecen en vuestras paginas, obvio....
* ¿Que partes hay que pegar en HEAD y cuales en BODY...?
* En el SCRIPT, ¿debo insertar mi email (¿dónde?) y, además, la dirección de mi sitio? (¿dónde?)
* Les envié un mensaje a Gravatar, pero no respondieron....
* ¡Ayúdenme, POR FAVOR! Espero ansiosamente vuestra respuesta.
* Si lo desean, pueden enviarme la lección a mi email: ikaretko@gmail.com

Será un placer recibirla y desde ya, ¡MIL GRACIAS!

Isabel

P.D: mi sitio es: http://galeon.com/oyp/

NidoDeCuervos
2011-07-28 13:50:40

Isabel,

El código que tenemos en este artículo es para programadores en PHP, si estas usando un libo de visitas ya 'prefabricado' es necesario que ese libro de visitas soporte gravatar, desgraciadamente este artículo no te ayudará en ese menester ya que la clase que se presenta es para programadores que están creando algún tipo de aplicación web y desean implementar gravatar, la clase es solo una 'herramienta' que requiere conocimientos de programación :(

Saludos


2011-11-15 14:22:35


2011-11-15 14:22:45

Envía un comentario, es gratis.

NidoDeCuervos | Comprar TwoNav | Gir360 - Tienda online | RSS | Enlaces | Contacto