• Projektwerkstatt: Journaling-Proxy

    von Nils Langner am 2. Oktober 2009

    Die heutige Projektwerkstatt ist eigentlich erst gestern entstanden und natürlich aus einer Notwendigkeit heraus. Der Name klingt ein wenig hochgestochen, passt aber doch ganz gut. Vielleicht starten wir einfach mal mit dem Problem, vor dem ich gestern stand.

    Viele der großen Webseiten benutzen den IVW Tracker, um Besucherzahlen zu messen und auch um sie an die offiziellen Stellen zu kommunizieren und somit Werbepreise und ähnliches festlegen zu können. Es ist also ein Zählpixel ähnlich wie der von google Analytics, der die Page Impressionen zählt. Diese Impressionen werden aber nicht gezählt, wie wir uns das vorstellen würden, sondern sie zählen die Klicks. Ein gelöstes Sudoku auf einer Webseite kann also gut und gerne 100 PIs produzieren.

    Gehen wir mal davon aus, dass unser Sudoku in JavaScript oder Flash produziert wurde. Ich würde jetzt gerne einen Test schreiben, der prüft, ob auch alle Klicks richtig an IVW weitergeleitet werden, dabei will ich natürlich den JavaScript Code auf der Seite nicht anfassen. Alles eine Black Box für mich. Ob der Browser auch wirklich die Pixel feuert ist somit schwer rauszufinden,obwohl man ja nur wissen will, ob der Browser die doofen Pixel abgefragt hat.

    Wenn ich wüsste, wo der Pixel in den Dom-Tree reingerendert wird, dann könnte ich prüfen, ob sich da was geändert hat. Da hab ich aber eigentlich keine Lust zu, denn ein generischer Ansatz wäre natürlich besser. Dann könnte ich auch hier meine Black Box Sicht beibehalten.

    Jetzt kommt meine Idee ist Spiel. Wie wäre es, wenn mein Browser einfach über einen Proxy (der natürlich nur mitschreibt und den Rest weiterleitet an die echte Seite) geht und der mir sagt, ob die Pixel abgefragt wurden. Der Browser würde dann eine API zur Verfügung stellen, über die ich dann alle Infos abfragen könnte, die er so gesammelt hat. Gepaart mit Selenium könnte eine Verwendung so aussehen:

    ...
    $selenium->setRunId( $testlaufId );
    $selenium->open( '/' );
    $selenium->click( 'button1' );
    
    $jProxyConnection = new JournalingProxyConnection( '192.168.1.2', $testlaufId );
    $imageCount = $jProxyConnection->getImageLoadCount( 'ivw*.png' );
    $this->assertEquals( 2, $imageCount );
    ...
    

    Wahrscheinlich gibt es einen viel besseren Weg, das feuern der Pixel zu testen, der fällt mir aber gerade nicht ein. In der Handhabung fände ich es eigentlich ganz nett, wenn ich in meinen PHPUnit Tests so auf die Daten zugreifen könnte. Also …. wer hat Lust das Tool zu schreiben? Kann ja nicht so schwer sein.

    Die RunId habe ich übrigens hinzugefügt, da der Proxy ja irgendwie gruppieren muss. Selenium sollte dann hinter jede URL, die aufgerufen wird ein runId=... setzen.

    Nils Langner Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    5 Kommentare »


    • Julia
      am 2. Oktober 2009 um 09:27 Uhr

      “Diese Impressionen werden aber nicht gezählt, wie wir uns das vorstellen würden, sondern sie zählen die Klicks. Ein gelöstes Sudoku auf einer Webseite kann also gut und gerne 100 PIs produzieren.” Krasse Sache!


    • PHP Gangsta
      am 2. Oktober 2009 um 11:39 Uhr

      @Julia: Das würde mich auch mal interessieren, ob es bei der Entwicklung von Ajax/Flash Content negativ ins Gewicht fällt, dass dadurch massiv PIs verloren gehen, und man deshalb vielleicht doch kein Ajax/Flash nutzt, sondern “normales” HTML, damit die PIs hoch sind. Denn dadurch verdient man ja Geld!

      Ansonsten netter Artikel! Natürlich sollte der Proxy in PHP geschrieben sein! Ist allerdings etwas Arbeit, vllt kann man sich von anderen Webservern, die in PHP programmiert sind, etwas abschauen, um nicht das Rad neu zu erfinden. Im Prinzip ist es nur ein Socket, wo HTTP-Requests reinkommen, die geloggt werden müssen und dann der eigentliche Inhalt geholt und zurückgegeben werden muss. Müßte in 500 Zeilen machbar sein.


    • Steffkes
      am 5. Oktober 2009 um 10:14 Uhr

      Natürlich fallen Ajax & Flash ins Gewicht .. der Herr Niggermeier hat dazu ein paar nette Artikel in seinem Blog was Klickstrecken angeht. Die “großen” Seiten machen’s in ihrer Gallerien auch deswegen gerne mal so, dass für jedes / jedes zweite / jedes n-te Bild eine neue Seite geladen wird .. damit “AD-Impressions” etc registriert werden.


    • Thomas
      am 5. Oktober 2009 um 13:48 Uhr

      Laut zeit.de will IVW aber genau das ändern:

      http://www.zeit.de/online/2009/31/ivw-visits-klicks

      Ob’s klappt? Ich glaub ja nicht dran ;-)


    • Nils Langner
      am 5. Oktober 2009 um 15:42 Uhr

      @Thomas: Sinn würde es auf jeden Fall machen.

    RSS-Feed für Kommentare zu diesem Artikel. TrackBack-URL

    Einen Kommentar hinterlassen

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.