Der „Gravatar“ Service von Automattic Inc. ermöglicht es Benutzern einen Avatar an die eigene E-Mailadresse zu binden und so einen globalen Avatar überall hin mit zu nehmen. Das spart Zeit, Bandbreite und damit Kosten. Der Gravatar wird von allen gängigen Blog-, Board-, Foren-, Gästebuch und Pinnwandsystemen unterstützt und ist völlig kostenfrei.
Zur Anmeldung benötigt man ausschließlich eine Mailadresse und einen Avatar (Das Bild welches man anhängen möchte).
Um den Gravatar auf der eigenen Seite einzubinden braucht man, im Gegensatz zu vielen anderen Diensten, weder einen Account noch einen Developer Key oder ähnliches.
Wer nur mal schnell einen fremden Gravatar nachschlagen will schaut hier: http://aruljohn.com/gravatar/
Die API
Um einen Gravatar abzurufen, benötigt man nur die E-Mailadresse des Eigentümers, weitere Parameter sind optional. Die Url des Gravatars wird wie folgt gebildet:
http://www.gravatar.com/avatar/[MD5-Hash der Mail]/?[Parameter]
Für die Mailadresse: „iHaveAn@email.com“ ergibt sich als URL:
// Ermitteln des Hash-Wertes:
$hash = MD5(StrToLower(Trim('iHaveAn@email.com')));
Echo $hash;
„http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802“
Analog dazu wäre ebenso gültig:
- http://gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802/bild.jpg
- http://gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802/
- http://gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802.jpeg
- http://gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802.jpg
Parameter lassen sich als HTTP-GET Parameter anfügen und müssen ggf. enkodiert werden. Zulässige Parameter sind:
- „size“ / „s“ > Größe des Gravatars in Pixel, zwischen 1 und 512
- „rating“ / „r“ > Maximale Alterszulassung
- „default“ / „d“ > Alternativ-URL / ID, falls der Gravatar nicht existiert
Die Bewertung des Gravatars (Rating) kennt folgende Werte:
- G: ohne Altersbeschränkung
- PG: nicht für Kinder unter 12 Jahren
- R: nicht für Kinder und Jugendliche unter 17 Jahren
- X: jugendgefährdend
Vordefinierte Gravatare
Über den Parameter „default“ kann man nicht nur eine alternative Url übermitteln sondern auch vordefinierte Strings. Zulässig sind:
- Zeile: „identicon„
- Zeile: „monsterid„
- Zeile: „wavatar„
Je nach E-Mailadresse ändert sich der Gravatar. Anbei ein paar Gravatare mit vier verschiedenen E-Mail-Adressen:
Zur Benutzung des Gravatars habe ich folgende Klasse geschrieben:
Class Gravatar {
var $mail;
var $size = 80;
var $rating = 'g';
var $default = '';
Function setMail ($mail){
$mail = Trim ($mail);
If ($mail == '') return False;
$this->mail = StrToLower ($mail);
return True;
}
Function setSize ($size){
$size = IntVal ($size);
If ($size < 1 || $size > 512) return False;
$this->size = $size;
return True;
}
Function setRating ($rating){
$arr_valid = Array ('g', 'pg', 'r', 'x');
$rating = StrToLower (Trim ($rating));
If (Array_Search ($rating, $arr_valid) === False) return False;
$this->rating = $rating;
return True;
}
Function setDefault ($default){
// Valid: identicon, monsterid, wavatar or an url
$default = Trim ($default);
$this->default = UrlEncode($default);
}
Function getUrl (){
If ($this->mail == '') return False;
$url = 'http://www.gravatar.com/avatar/'.
MD5($this->mail).'?'.
'size='.$this->size.'&'.
'rating='.$this->rating.'&'.
'default='.$this->default;
return $url;
}
}
Dokumentation und Beispiel
Include 'class_gravatar.php';
$gravatar = New Gravatar;
$gravatar->setMail ('user@example.com');
// Optional:
$gravatar->setSize (100);
$gravatar->setDefault('monsterid');
// Get Url:
Echo $gravatar->getUrl();
Wer sich ein paar vordefnierte Gravatare anschauen möchte, kann dazu diesen Code verwenden: ;)
Der folgende Quellcode ist mit Vorsicht zu genießen. Er enthält PHP Short Open Tags. Diese sind nur in Testumgebungen zugelassen! (Und Teilweise nicht mal da.)
Include 'class_gravatar.php';
$gravatar = New Gravatar;
$gravatar->setSize (100);
< ? ForEach ( Array('identicon','monsterid','wavatar') AS $id) : $gravatar->setDefault($id); ?>
< ? For ($x = 0; $x < 4; $x++) : $gravatar->setMail(Rand().'@example.com'); ?>
getUrl() ?>" alt="Gravatar">
< ? EndFor; ?>
< ? EndForEach; ?>