Peter Bucher - Mein Experiment, meine Spielereien, meine Welt...   ·   Stefan Falz   ·   Jürgen Gutsch   ·   Golo Roden   ·   ASP.NET Zone   ·   Microsoft ASP.NET
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Gravatar mit ASP.NET einfach benutzen

Ein Gravatar ist globaler Avatar für eine Person im Internet.
Diese Avatare werden zentral auf einem Server gespeichert und in vielen möglichen Webanwendungen - allen voran Blogs und Foren - angezeigt.
Einmal erstellt, ist der Avatar nicht fix. Wird er im Laufe der Zeit geändert, erscheint auf allen Seiten der neue Avatar. Ein echt cooler und innovativer Service!

Gravatarunterstützung in eine Webseite einzubauen ist relativ simpel. Es wird nur ein <img>-Tag gebraucht, das ein bestimmtes src-Attribut mit besitzt, das der Url die benötigten Parameter mitgibt.
Der einzig benötigte Parameter ist der MD5 Hashwert von der Email Adresse des jeweiligen Benutzers.
Ein Hashwert wird benutzt, um nicht leichte Beute von Spammern zu werden.

Hier ein Beispiel des benötigten Html Codes für meinen Gravatar:

<img src="http://www.gravatar.com/avatar.php?gravatar_id=ccc351657d724905ad87308914233bc7"  alt="" />

Dieser Code zeigt mein Gravatar an der unten erscheinen sollte.

Gravatar von Peter Bucher

Um die Einbindung für ASP.NET noch eleganter und einfacher zu machen, habe ich dafür ein Custom Control geschrieben.

Dieses Control kann einfach in bestehende Webprojekte eingebunden und genutzt werden.
Möglich ist auch die Nutzung innerhalb eines datengebundenen Controls, das eine Ausgabe wiederholt, wie bspw. einen Repeater oder ein GridView.

Das Control kann lokal auf der Seite oder global in der Web.config registriert werden, nachdem eine Referenz auf die DLL im Webprojekt getätigt worden ist.
Folgendes Beispiel zeigt den Avatar für meine Email Adresse an:

<t4m:Gravatar ID="gravatarTest" Email="peter.bucher@aspnetzone.de" />

Die möglichen Parameter sind:

  • Email: Email Adresse von dieser der Avatar angezeigt werden soll
  • Rating: Höchstes Rating das auf der Seite angezeigt werden darf
  • Size: Die Grösse des Avatar Bildes
  • DefaultImage: Ein Standardbild das angezeigt wird, wenn kein Avatar gefunden, oder aber das Rating zu hoch ist

Bei Gravatar anmelden oder die Implementations Seite mit Referenzbeispielen und erklärten Parametern anschauen.
Michal hat ein Beispiel für die Einbindung mit Classic ASP geschrieben, von ihm hatte ich auch die Idee für ein solches Control.

Folgend der Quellcode des Controls um eine Einsicht zu erhalten:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using System.Security.Cryptography;


namespace t4m.Controls
{
    /// <summary>
    /// Stellt ein Gravatar Bild dar
    /// </summary>
    public class Gravatar : Image
    {
        #region Private Members

        private string _email;
        private Rating _rating        = Rating.Empty;
        private int    _size;
        private string _defaultImage;
        private string _baseUrl       = "<A href="http://www.gravatar.com/avatar.php">http://www.gravatar.com/avatar.php</A>?";

        #endregion

        #region Properties

        /// <summary>
        /// Email Adresse des Gravatar Besitzers
        /// </summary>
        public string Email {
            get { return this._email; }
            set {
                // Email als MD5 Hash speichern
                this._email = this.GetEMailHash(value);
            }
        }

        /// <summary>
        /// Höchstes gewünschtes Rating,
        /// wenn nicht erfüllt wird das Default Bild angezeigt
        /// </summary>
        public Rating Rating {
            get { return this._rating; }
            set { this._rating = value; }
        }

        /// <summary>
        /// Gewünschte Grösse des Gravatar Bildes
        /// Werte 1 - 80 werden akzeptiert
        /// </summary>
        public int Size {
            get { return this._size; }
            set { this._size = value; }
        }

        /// <summary>
        /// Standardbild wenn der Avatar nicht gefunden,
        /// oder das Rating des Bildes zu hoch ist.
        /// </summary>
        public string DefaultImage {
            get { return this._defaultImage; }
            set { this._defaultImage = value; }
        }

        #endregion

        #region Lifecycle Methods

        /// <summary>
        /// Zuweisung der Url beim Laden des Controls
        /// </summary>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e) {
            // Wenn eine Email angegeben wurde, Url erzeugen
            if (this._email != null) {
                this._baseUrl += "gravatar_id=" + this._email;

                if (this._rating != Rating.Empty)
                    this._baseUrl += "&rating=" + Enum.GetName(typeof(Rating), this._rating);

                if (this._size != 0)
                    this._baseUrl += "&size=" + this._size.ToString();
            }

            // Wenn ein Standardbild angegeben wurde, dieses als Parameter anhängen
            if (this._defaultImage != null)
                this._baseUrl += ((this._email != null) ? "&" : "") +
                                 "default=" +
                                 this.Context.Server.UrlEncode(this._defaultImage);

            this.ImageUrl = this._baseUrl;
           
            base.OnLoad(e);
        }

        #endregion

        #region Helper Methods

        /// <summary>
        /// Erzeugt einen MD5 Hash aus einem String
        /// </summary>
        /// <param name="emailAdress">Email Adresse</param>
        /// <returns>MD5 Hash der Email Adresse</returns>
        private string GetEMailHash(string emailAdress) {
            MD5 hasher = MD5.Create();
            byte[] data = hasher.ComputeHash(Encoding.Default.GetBytes(emailAdress));
            StringBuilder sb = new StringBuilder();

            foreach (byte d in data)
                sb.Append(d.ToString("x2"));

            return sb.ToString();
        }

        #endregion
    }

    #region Enums

    /// <summary>
    /// Rating Möglichkeiten für eine Gravatar Anzeige
    /// </summary>
    public enum Rating : int {
        Empty = 0,
        G     = 1,
        PG    = 2,
        R     = 3,
        X     = 4
    };

    #endregion
}

Veröffentlicht Samstag, 29. Dezember 2007 20:00 von Peter Bucher

Kommentare

# Web Dev Bros &raquo; Blog Archive &raquo; using gravatar in classic ASP

# re: Gravatar mit ASP.NET einfach benutzen

Sally Peter,

coole Sache das,

danke :-)

Montag, 7. Januar 2008 07:53 by Jürgen Gutsch

# www.yellowpages.com

Peter Bucher : Gravatar mit ASP.NET einfach benutzen

Sonntag, 23. November 2014 02:43 by www.yellowpages.com

# yellowpages.com

Peter Bucher : Gravatar mit ASP.NET einfach benutzen

Montag, 24. November 2014 00:47 by yellowpages.com
Anonyme Kommentare sind nicht zugelassen