IPCounter: So bringst du die Statistiken auf Deine Seite!

Einigen von Euch ist der Dienst IPCounter.de wahrscheinlich bekannt. Man erhält dort gratis einen Besucherzähler und eine grafische Auswertung, die sogar live mit AJAX aktualisiert wird. Eine optimale Ergänzung dazu wäre doch das Auslesen der Statistiken, um die Zahlen auf der eigenen Seite darzustellen!

Ich habe eine kleine Klasse namens IPCounterStatistics geschrieben, die einige Werte ausliest und zur Verfügung stellt.

Mit dieser Klasse kommt ihr an folgende Daten:

  • Besucherzahl von heute
  • Page Impressions von heute
  • Voraussichtliche Besucherzahl von heute
  • Voraussichtliche PIs von heute
  • Prozentualer Unterschied der Besucherzahlen von heute und gestern
  • Prozentualer Unterschied der PIs von heute und gestern
  • Anzahl der Besucher, die momentan online sind
  • Anzahl der Besucher gestern
  • Anzahl der PIs gestern
  • Besucher im aktuellen Monat
  • PIs im aktuellen Monat
  • Vorraussichtliche Besucherzahl bis zum Ende des Monats
  • Voraussichtliche PIs bis zum Ende des Monats
  • Prozentualer Unterschied der Besucherzahlen von diesem und letzem Monat
  • Prozentualer Unterschied der PIs von diesem und letzem Monat
  • Besucher letzen Monat
  • PIs letzen Monat
  • Gesamtanzahl der Besucher bisher
  • Gesamtanzahl der PIs bisher

Wenn man die entsprechenden Zahlen jede Nacht um 0 Uhr in seiner Datenbank anlegt, erhält man ausführliche Statistiken über die Entwicklung des Traffics. Dies wird durch meine Klasse ein wenig erleichtert:

//IPCounterStatistics.php
class IPCounterStatistics
{
    protected $id;
    protected $data;

    const TODAY_VISITORS                        = "today.visitors";
    const TODAY_PI                              = "today.pi";
    const TODAY_VISITORS_PROGNOSE               = "today.visitors_prognose";
    const TODAY_PI_PROGNOSE                     = "today.pi_prognose";
    const TODAY_VISITORS_PROGNOSE_PERCENT       = "today.visitors_prognose_percent";
    const TODAY_PI_PROGNOSE_PERCENT             = "today.pi_prognose_percent";
    const NOW_ONLINE                            = "online";
    const YESTERDAY_VISITORS                    = "yesterday.visitors";
    const YESTERDAY_PI                          = "yesterday.pi";
    const THIS_MONTH_VISITORS                   = "this_month.visitors";
    const THIS_MONTH_PI                         = "this_month.pi";
    const THIS_MONTH_VISITORS_PROGNOSE          = "this_month.visitors_prognose";
    const THIS_MONTH_PI_PROGNOSE                = "this_month.pi_prognose";
    const THIS_MONTH_VISITORS_PROGNOSE_PERCENT  = "this_month.visitors_prognose_percent";
    const THIS_MONTH_PI_PROGNOSE_PERCENT        = "this_month.pi_prognose_percent";
    const LAST_MONTH_VISITORS                   = "last_month.visitors";
    const LAST_MONTH_PI                         = "last_month.pi";
    const TOTAL_VISITORS                        = "total.visitors";
    const TOTAL_PI                              = "total.pi";

    public function __construct($id, $preload = false)
    {
        $this->id = (int)$id;
        if($this->id < 1)
        {
            throw new Exception("Die ID ".$this->id." ist ungültig!");
        }

        if($preload)
        {
            $this->getData();
        }
    }

    protected function getData()
    {
        if($this->data == null)
        {
            $url = "http://ipcounter.de/stats/".$this->id.".json";
            $content = file_get_contents($url);
            if($content == false)
            {
                throw new Exception("Die ID ".$this->id." konnte nicht ausgelesen werden!");
            }

            $this->data = json_decode($content);
            if($this->data == null || $this->data == false)
            {
                throw new Exception("Die ID ".$this->id." verfügt über keine Statistiken!");
            }
        }
        return $this->data;
    }

    public function toArray()
    {
        return $this->DataToArray($this->getData());
    }

    protected function DataToArray($data)
    {
        $data = (array)$data;
        foreach($data  as &$value)
        {
            if($value instanceof stdClass)
            {
                $value = $this->DataToArray($value);
            }
        }
        return $data;
    }

    public function getID()
    {
        return $this->id;
    }

    public function get($what)
    {
        $data = $this->toArray();
        if(stristr($what, "."))
        {
            $parts = explode(".", $what);
            return $data[$parts[0]][$parts[1]];
        }
        else
        {
             return $data[$what];
        }
    }
}

Verwendet wird die Klasse so:

//index.php
require_once 'IPCounterStatistics.php';
$stats = new IPCounterStatistics(1);
echo "Momentan online: ".$stats->get("online");

Dem Konstruktor der Klasse muss die ID des jeweiligen IPCounter-Kontos übergeben werden. Möchte man erreichen, dass die Daten nicht erst beim ersten Zugriff darauf vom Server geladen werden, sondern direkt vom Konstruktor, übergibt man als 2. Parameter einfach true.

Über die Methode get($what) können nun die Daten abgefragt werden. Möchte man alle Daten erhalten, bietet sich toArray() an.

require_once 'IPCounterStatistics.php';
$stats = new IPCounterStatistics(1, true);
print_r($stats->toArray());

Das Ergebnis sieht dann z.B. so aus:


Array
(
[today] => Array
(
[visitors] => 1213
[pi] => 2111
[visitors_prognose] => 1748
[pi_prognose] => 2984
[visitors_prognose_percent] => -14
[pi_prognose_percent] => -11
)

[online] => 20
[yesterday] => Array
(
[visitors] => 2017
[pi] => 3326
)

[this_month] => Array
(
[visitors] => 45314
[pi] => 75492
[visitors_prognose] => 64734
[pi_prognose] => 107845
[visitors_prognose_percent] => -2
[pi_prognose_percent] => -1
)

[last_month] => Array
(
[visitors] => 65790
[pi] => 108197
)

[total] => Array
(
[visitors] => 20631088
[pi] => 49788701
)

)

 

So kommt ihr an die einzelnen Werte:

require_once 'IPCounterStatistics.php';
$stats = new IPCounterStatistics(1);

echo "Besucher heute: ".$stats->get("today.visitors")."<br />";
echo "Seitenaufrufe heute".$stats->get("today.pi")."<br />";
echo "Besuchererwartung heute: ".$stats->get("today.visitors_prognose")."<br />";
echo "Erwartete Seitenaufrufe heute: ".$stats->get("today.pi_prognose")."<br />";
echo "Besucheranstieg in Prozent heute: ".$stats->get("today.visitors_prognose_percent")."<br />";
echo "Anstieg der Seitenaufrufe in Prozent heute: ".$stats->get("today.pi_prognose_percent")."<br />";
echo "Momentan online: ".$stats->get("online")."<br />";
echo "Besucher gestern: ".$stats->get("yesterday.visitors")."<br />";
echo "Seitenaufrufe gestern: ".$stats->get("yesterday.pi")."<br />";
echo "Besucher diesen Monat: ".$stats->get("this_month.visitors")."<br />";
echo "Seitenaufrufe diesen Monat: ".$stats->get("this_month.pi")."<br />";
echo "Besuchererwartung diesen Monat: ".$stats->get("this_month.visitors_prognose")."<br />";
echo "Erwartete Seitenaufrufe diesen Monat: ".$stats->get("this_month.pi_prognose")."<br />";
echo "Besucheranstieg diesen Monat in Prozent: ".$stats->get("this_month.visitors_prognose_percent")."<br />";
echo "Anstieg der Seitenaufrufe diesn Monat in Prozent: ".$stats->get("this_month.pi_prognose_percent")."<br />";
echo "Besucher letzten Monat: ".$stats->get("last_month.visitors")."<br />";
echo "Seitenaufrufe letzten Monat: ".$stats->get("last_month.pi")."<br />";
echo "Besucher insgesamt: ".$stats->get("total.visitors")."<br />";
echo "Seitenaufrufe insgesamt: ".$stats->get("total.pi")."<br />";

Ausgabe:


Besucher heute: 1274
Seitenaufrufe heute2206
Besuchererwartung heute: 1756
Erwartete Seitenaufrufe heute: 2993
Besucheranstieg in Prozent heute: -13
Anstieg der Seitenaufrufe in Prozent heute: -11
Momentan online: 15
Besucher gestern: 2017
Seitenaufrufe gestern: 3326
Besucher diesen Monat: 45375
Seitenaufrufe diesen Monat: 75587
Besuchererwartung diesen Monat: 64821
Erwartete Seitenaufrufe diesen Monat: 107981
Besucheranstieg diesen Monat in Prozent: -2
Anstieg der Seitenaufrufe diesn Monat in Prozent: -1
Besucher letzten Monat: 65790
Seitenaufrufe letzten Monat: 108197
Besucher insgesamt: 20631149
Seitenaufrufe insgesamt: 49788796

Natürlich ist es wenig sinnvoll, die Daten immer direkt vom Server abzurufen. Das belastet die Server von IPCounter unnötig und verlangsamt den Seitenaufruf der eigenen Seite. Deshalb sollte man hier sinnvoll cachen. Ich denke, dass es ausreicht, die Daten mithilfe eines Cronjobs alle 3-5 Minuten zu aktualisieren.

1 Star2 Stars3 Stars4 Stars5 Stars (Wurde noch nicht bewertet)
Loading...


Hinterlasse einen Kommentar!

Time limit is exhausted. Please reload the CAPTCHA.

»Informationen zum Artikel

Autor: Simon
Datum: 06.09.2011
Zeit: 19:00 Uhr
Kategorien: Codeschnipsel
Gelesen: 1259x heute: 3x

Kommentare: RSS 2.0.
Diesen Artikel kommentieren oder einen Trackback senden.

»Meta