August 21, 2011 0

Social Media Button Tracking in Emails

By in MySQL, PHP
Social Media Buttons Tracking

Grafik: Chris Spooner (blog.spoongraphics.co.uk)

Neulich fragte eine Bekannte über Facebook, wie man denn am besten die Klicks auf Social Media Buttons in einer Email-Signatur tracken könne. Sie bräuchte das für einen Kunden. Ich antwortete Ihr, dass es etliche Tracking-Systeme für Email-Kampagnen gäbe, die sogar teils kostenlos seien. Dann fragte ich Sie noch, ob es wichtig sei zu wissen, welcher Email-Empfänger den Link angeklickt hat. Sie antwortete mir, dass es dem Kunden nur auf die Anzahl der Klicks pro Monat ankäme. Daraufhin bot ich ihr an Ihrem Kunden ein passendes Skript hierfür zu schreiben. Ein Tracking-System in ein paar Stunden  – das war ganz nach meinem Geschmack!

Ich schrieb ihr, dass mein System gegenüber den existierenden Tracking-Systemen folgende Vorteile habe:

  • Keine Umstellung:
    Emails könnten wie gewohnt über das Email-Programm der Wahl versendet werden. Es müssten keine Plugins oder Ähnliches installiert werden.
  • Keine Ressourcen:
    Das Skript würde auf meinem Server liegen und es bedürfte daher keiner Ressourcen auf der Kundenseite
  • Erweiterbar:
    Ich könnte schnell auf Wunsch Änderungen/Erweiterungen umsetzen
  • Tracking-Daten bequem per Mail:
    Die Tracking-Ergebnisse könnten automatisch wöchentlich per Email an den Kunden geschickt werden. Ein umständliches Nachschauen in einer Datenbank wäre nicht von Nöten
  • Am nächsten Tag einsatzbereit:
    Aufgrund des Verzichts auf nicht gewünschte Features könnte am nächsten Arbeitstag mit dem Tracking begonnen werden.

Diese Argumente waren scheinbar überzeugend und ich erhielt den Zuschlag.

Ich hatte auch schon eine ungefähre Vorstellung, wie das System beschaffen sein müsste:

Es sollte ein PHP-Skript geben, dem per HTTP-GET ein Parameter übergeben wird. Dieser Wert sollte dann darüber entscheiden, ob zur Facebook-, Youtube- oder Twitter-Seite des Kunden weitergeleitet wird. Ach ja, vorher soll das Skript natürlich noch den Aufruf in einer MySQL-Datenbank speichern.

Des weiteren sollte ein zweites PHP-Skript automatisch einmal die Woche per Server-Cron aufgerufen werden. Dieses Skript würde dann die geloggten Aufrufe der letzten Woche zusammenfassen und in einer Email an den Kunden senden.

Das war’s auch schon! Plain-and-simple. Nach ca. Zwei Stunden war Alles aufgesetzt und der Kunde war zufrieden. Vieleicht werden wir bald wieder zusammenarbeiten.

Hier nun der Code. Sie können das gesamte Tracking-System hier herunterladen. Bitte beachten Sie, dass es unter der GNU General Public Licence veröffentlich ist.

Das erste PHP-Skript zum Tracking der Clicks:

include_once('connection.php');
 
  function track(){
 
    $sql = "SELECT
                    target_id,
                    url
             FROM
                    targets
             WHERE
                    name='".$_GET['target']."'";                        
 
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
 
    $url = $row["url"];
    $target_id = $row["target_id"];
    $week = (int)date('W');
 
    $sql = "INSERT INTO hits (target_id, reported, creationweek)
            VALUES ( ".$target_id.", 0, ".$week.")";
    mysql_query($sql);
 
    return $url;
  }
 
  function redirect($url){
    header ("HTTP/1.1 301 Moved Permanently");
    header ("Location: ".$url);
  }
 
  function main(){
    $url = track();
    redirect($url);
  }
 
  main();

Das zweite PHP-Skript zum Erstellen und Versenden des Berichts:

  include_once('connection.php');
 
  function track(){
 
    $sql = "SELECT
                    target_id,
                    url
             FROM
                    targets
             WHERE
                    name='".$_GET['target']."'";                        
 
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
 
    $url = $row["url"];
    $target_id = $row["target_id"];
    $week = (int)date('W');
 
    $sql = "INSERT INTO hits (target_id, reported, creationweek)
            VALUES ( ".$target_id.", 0, ".$week.")";
    mysql_query($sql);
 
    return $url;
  }
 
  function redirect($url){
    header ("HTTP/1.1 301 Moved Permanently");
    header ("Location: ".$url);
  }
 
  function main(){
    $url = track();
    redirect($url);
  }
 
  main();

Die Datenbank besteht aus lediglich zwei Tabellen:

  • targets: Eine Tabelle für die Weiterleitungsziele mit den Spalten:
    target_id: INTEGER, PRIMARYKEY
    name: VARCHAR, z.B. “blog”
    url: VARCHAR, z.B. “http://www.extremeprogrammer.de”
  • hits: Hier werden die einzelnen Aufrufe/Klicks erfasst:
    hit_id: INTEGER, PRIMARYKEY
    target_id: INTEGER, FOREIGNKEY -> targets
    reported: INTEGER, 1 wenn im Wochenbericht erfasst, sonst 0
    creationweek: INTEGER, Die Kalenderwoche des Aufrufs
    creationdate: DATE, Datum & Uhrzeit des Aufrufs

Leave a Reply