MyAvatar – Version 0.1

Nachdem Gravatar bei mir derzeit nur noch das Gravatar-Logo anzeigt und ich auch seit ein paar Monaten, durch die Fehlermeldung das ich keinen Gravatar-Account habe, davon abgehalten wurde mein Avatar-Bildchen zu ändern, habe ich mir überlegt das man die Sache mit dem Bildchen neben den Kommentaren doch sicher auch anders lösen kann.

Nachdem der Artikel dazu etwas länger geworden ist geht es auf der nächsten Seite weiter.

Die einfachste Möglichkeit ist eine Datenbank zu nehmen und alle Leute ihre Daten bei mir eintragen und ein Bildchen auf meinen Server ablegen lassen. Die Nachteile liegen dabei klar auf der Hand.

  1. Ich bleibe auf den Kosten sitzten weil alle Avatare immer von meinem Server ausgeliefert werden (OK, realistisch betrachtet werden das wohl keine 100 GB sein, was heißt das es wohl nicht so stark ins Gewicht fallen würde).
  2. Schlimmer ist wohl das, wenn mein Server nicht Online ist auch die Avatare nicht geladen werden können.
  3. Wenn mein Server lagt dann eben auch die Blogs die auf den “Service” zurückgreifen eine leichte Ladeverzögerung beim Anzeigen der Bildchen haben

Außerdem gefallen mir diese zentralistischen Ansätze nicht sonderlich, weshalb ich überlegt habe wie man die Sache als verteiltes System realisieren könnte.

Letztendlich habe ich mich mit mir dann so weit geeinigt, dass sich die Leute die gerne hätten das neben ihrem Kommentar auch ein kleines Bildchen zu sehen ist, sich die Bilddatei ja auf einem Webspace ablegen können. Da die meisten Kommentatoren eh einen Blog haben wo ihr Avatar hinterlegt ist sollte das eigentlich kein großes Problem darstellen.

Schwierig für mich war jetzt nurnoch das ich ja nicht weiß, wo auf dem Server die Bilddatei liegt. Also habe ich mir angeschaut welche Informationen ein Kommentator beim kommentieren eingeben kann/muss. Bei WordPress ist das derzeit

  • der Name
  • die E-Mail-Adresse
  • die eigene Website-URL
  • und eben der Text für den Kommentar.

Ich gehe mal davon aus das es bei anderen Blog-Systemen nicht wesentlich anders ist.

Damit hätte ich also schon mal die wichtigen Daten wie URL und E-Mail-Adresse.

Nachdem ja eh schon jeder seine Avatar-Datei im eigenen Webspace hostet muss wäre es wohl meist auch kein Problem wenn da noch eine XML-Datei rum liegt, in der steht wer unter der URL alles zu erreichen ist (für die Blogs in denen mehrere Leute schreiben, die aber über die gleiche URL erreichbar sind), was ihre E-Mail-Adresse ist und unter welcher URL das Bildchen zu finden ist, das sie gerne neben dem Namen angezeigt haben möchten.

Da ja beim posten die E-Mail-Adresse normalerweise nicht angezeigt wird (was aus Spam-Technischen-Gründen durchaus verständlich ist) konnte die E-Mail-Adresse natürlich nicht einfach so in der XML-Datei stehen, weshalb dort nur der MD5-Hash der E-Mail zu finden ist.

Als ich dann noch etwas länger drüber nachgedacht habe ist mir aufgefallen, dass man in der XML-Datei auch gleich noch ein paar andere Angaben mit rein wurschteln könnte, was das Lesen der XML-Datei etwas vereinfacht. Also habe ich mal noch die Felder für Name, Nick, URL hinzugefügt. Die Felder werden aber bisher noch nicht ausgewertet (Aber werden es wohl spätestens ab Version 0.5).

Die myavatar.xml-Datei sieht dann (bei mir zumindest) folgendermaßen aus:


<UserList>
	<UserInfo>
		<MailHash>1284c57c458b17a4092ed7afcc2dd073</MailHash>
		<Name>Sebastian Mandel</Name>
		<Nick>Sebi</Nick>
		<URL>http://www.sunnybluesky.de/blog/</URL>
		<AvatarImage>http://www.sunnybluesky.de/images/sebis-animated-avatar.gif</AvatarImage>
	</UserInfo>
</UserList>

Natürlich kann man auch mehrere <UserInfo>-Tags untereinander haben, aber ich blogge hier halt alleine. (Mir ist schon klar das der XML-Datei die XML-Deklaration fehlt, aber ich hasse es wenn man das Charset angeben muss, obwohl der Server eh schon sagt welches Charset verwendet wird.

Aber da ja nicht jeder gerne selbst XML-Dateien bastelt, habe ich eine kleine Seite geschrieben auf der man alle Daten einträgt und die einem den Code der XML-Datei anzeigt. (Bevor jemand fragt: Es werden dabei keinerlei Daten an mich übermittelt. Die ganze Sache läuft als JavaScript ab und ich speichere mir Sachen E-Mail-Adresse nirgends ab)

Als letztes habe ich dann noch ein kleines WordPress-Plugin geschrieben. Es ist aber wirklich noch Version 0.1 und nicht wirklich hübsch, aber es funktioniert ;) . Das Plugin gibt es auf meinem Heim-Server unter:
http://elpr.us.to/MyAvatar/myavatar.zip

Installieren ist ganz einfach. ZIP-Datei runter laden, auspacken, die myavatar.php in das wp-content/plugins-Verzeichnis schieben und dann in WordPress unter Plugins das MyAvatar-Plugin aktivieren. Nachdem ich aber nicht vorschreiben wollte wie das Bild auszusehen hat muss man danach noch unter Themes -> “Theme bearbeiten” die Datei “comments.php” bearbeiten.

Da steht wohl irgendsowas wie


<?php foreach ($comments as $comment) : ?>
		<li class="<?php echo $oddcomment; ?>" id="comment-<?php comment_ID() ?>">
			<cite><?php comment_author_link() ?></cite> schreibt:

was man jetzt noch um ein Bild nach ergänzt das vielleicht sowas wie


<?php foreach ($comments as $comment) : ?>
		<li class="<?php echo $oddcomment; ?>" id="comment-<?php comment_ID() ?>">
			<img src="<?php load_myavatar($comment); ?>" style="float: right; margin: 5px; border: 1px solid; padding: 5px;"/>
			<cite><?php comment_author_link() ?></cite> schreibt:

da steht. Ließt sich vielleicht jetzt etwas kompliziert aber ich glaube jeder dressierte Affe mit etwas Übung würde das hin bekommen.

So jetzt noch ganz kurz. Was passiert in dem Plugin?

  1. Für jeden Kommentar wir die Funktion load_mygravatar aufgerufen
  2. Die schaut welche URL und E-Mail-Adresse beim Kommentar angegeben wurde
  3. Die E-Mail-Adresse wird per MD5 gehasht und an die URL wird ein myavatar.xml (und ggf. auch noch ein Slash zwischendrin) angehängt
  4. Danach wird geschaut ob es auf dem Server die Datei myavatar.xml gibt
  5. Ist die Datei vorhanden werden die Einträge nach dem Hash der Emailadresse durchsucht
  6. Findet sich da dann eine Übereinstimmung wird die URL zum Avatar zurück gegeben und das Bildchen wird neben dem Kommentar angezeigt

Falls irgendwas schief geht, beispielsweise weil

  • der Server nicht antwortet
  • die myavatar.xml-Datei nicht vorhanden ist
  • keine Übereinstimmung bei der gehashten E-Mail-Adresse zu finden ist

wird eben kein Bildchen zurück gegeben.

Wenn jemand mehrere Kommentare hinterlassen hat, dann läuft die Sache schneller, weil dann auf die zuvor eingeholten Informationen zurück gegriffen wird.

Da das ganze soweit ja schon mal funktioniert fallen mir natürlich gleich haufenweise Sachen ein die man noch rein basteln kann.

  • Man könnte noch Festlegen was angezeigt werden soll wenn keine Bild-URL gefunden wird.
  • Also z.B. das Plugin so weit ändern, dass man nicht mehr im Template rum ändern muss sondern eine Config-Oberfläche hat in der man sagt ich will für die Avatare immer das style oder die class haben.
  • Die XMl durchsucherei könnte man natürlich auch per AJAX machen, was mir aber für Version 0.1 zu aufwändig war weil man ja XML-Dateien von anderen Rechnern laden muss.
  • Man könnte das Plugin auch so weit erweitern, dass es auch gleich die XML-Datei erstellt.
  • Es sollte vielleicht eine möglichkeit (außer die per CSS) geben die Größe der angezeigten Avatare zu limitieren.
  • Man könnte zusätzlich (für Leute die keinen Blog/Webspace haben) noch ein zentrales Fall-Back-Verzeichnis anlegen in das geschaut wird wenn keine URL angegeben wurde.

Natürlich ist dieser Text viel zu lang, wenn jemandem einfällt wo ich was weg lassen kann soll er sich bitte in den Kommentaren verewigen. Selbiges gilt natürlich auch für gewünschte Erweiterungen.

4 Kommentare zu “MyAvatar – Version 0.1”

  1. spocketNo Gravatar schreibt:

    soo – jetzt hab ich da mal alles gemacht. mal sehen, ob das jetzt geht
    Das mit dem WP-Plugin probier ich dann, wenn ich eh auf v2.1 von wordpress umsteige

  2. SebastianNo Gravatar schreibt:

    *TRÖÖÖÖÖÖÖÖÖÖÖÖT*

    Es geht wirklich… der Avatar wird einwandfrei angezeigt ;) *freu*

    Immer wieder schön zu sehen das Konzepte nicht nur auf dem Papier funktionieren.

  3. boschNo Gravatar schreibt:

    So viel Mühe – und das, wo gravatar.com demnächst wieder läuft:
    http://site.gravatar.com/

  4. SebastianNo Gravatar schreibt:

    … und ich dachte schon das nicht mal “die üblichen Verdächtigen” den Eintrag ganz lesen werden.

    @bosch: Du musst doch zugeben das dieses “zentraler Server verwaltet alles”-System dem Konzept des Internet irgendwie widerspricht, oder? Beim Internet geht es doch darum das ganze Ausfallsicher und eben nicht von einer Quelle abhängig zu machen. Und gerade im Blog ist die Interaktion der Blogger untereinander gewollt und nicht (wie z.B. bei Foren) das sich jeder an einer Stelle anmelden muss um dabei zu sein.

    Dadurch, dass es auf XML-Basiert ist es dann auch noch einigermaßen egal was für ein System auf welcher Seite eingesetzt wird, da sich XML mit nahezu allen Programmiersprachen auslesen lässt. Somit ist auch gewährleistet das sich die Sache auch in nahezu alle Blog-Systeme integrieren lässt.

Kommentar schreiben