Adserving
Faire soi-même du adserving sans base de données MySQL. Comment ça marche ?

 

Pour bien comprendre ce billet, il faut avoir un minimum d’habiletés en PHP ainsi qu’en Javascript.
Il faut aussi connaître la configuration de son serveur pour évaluer la quantité de ressources qui sera requise en prévision d’un trafic plus élevé et d’un plus grand nombre de requêtes simultanées.

Par conséquent, il faut avant tout s’assurer d’avoir suffisamment de bande passante et de RAM.

Ceci étant dit, le principal objectif ici est avant tout de vous amener à expérimenter une certaine méthode qui vous permettra de conserver sur votre serveur tout le matériel publicitaire (s’il le faut) et de récolter des données statistiques comparatives*.

*Attention, selon certaines normes, il n’est pas recommandé ou permis d’enregistrer les adresses ip des visiteurs. Nous le faisons ici à titre démonstratif uniquement.

Pour commencer, assurez-vous d’avoir un répertoire privé sous la racine du site (sous public_html par exemple), un répertoire auquel les visiteurs de votre domaine n’ont pas accès.
Vous pouvez nommer ce répertoire « statistiques ».

Puis, ajoutez ensuite un second un répertoire, accessible celui-là sur le web depuis la racine de votre site.

Nous allons y déposer un autre dossier nommé « mapub » dans lequel il y aura un sous-répertoire nommé « banniere ».

Dans le sous-répertoire banniere, nous aurons un fichier « index.html » avec une redirection vers l’accueil de notre site.
(si vous avez « Options -Indexes » en .httpd.conf vous pouvez utiliser cette façon de faire ou non, à votre discrétion. Pour certains, c’est simplement une protection permettant d’éviter que que l’on puisse lister les fichiers.)

Pendant qu’on y est, on interdit aux robots d’accéder via un fichier robots.txt.

robots.txt

User-agent: *
Disallow: /mapub/

On peut aussi utiliser l’URL Rewriting pour renommer le répertoire et ses fichiers.
De cette façon, on évite en plus de crier haut et fort que nous utilisons PHP.

Via un fichier .htaccess dans mapub on pourrait renommer « banniere/moncreatif.php » en « 123h3rasdasdfdqwg.html » (généré aléatoirement ou non). Pourquoi pas…

.htacess

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteRule ^123h3rasdasdfdqwg\.html$ banniere/moncreatif.php [L]
RewriteRule ^btdasdearasdsdefrdcas\.html$ banniere/redirection.php [L]
RewriteRule ^imgsdefgn3948743fkg6032\.gif$ banniere/background.jpg [L]
RewriteRule ^btdefgfdasffwreerwen39\.gif$ banniere/click.gif [L]

L’accès à la publicité se ferait donc uniquement en accédant depuis http://monsite.com/mapub/123h3rasdasdfdqwg.html.

Dans le fichier moncreatif.php nous allons maintenant rédiger le code suivant ( sans aucun retour à la ligne, d’un seul bloc ):

moncreatif.php

<?php setcookie("P3345r-123h3rasdasdfdqwg", "123h3rasdasdfdqwg", (time() + 2592000)); $ip= $_SERVER['REMOTE_ADDR']; $date = date("d-m-Y"); $heure = date("H:i"); $total = 1; $total2 = 0; if(isset($_COOKIE['P345r-123h3rasdasdfdqwg'])){ $fichier_a_ouvrir = fopen("../../../statistiques/statsimpressions.txt","a"); fwrite($fichier_a_ouvrir,"$date,$heure,$ip,$total2
"); fclose ($fichier_a_ouvrir); } else { $fichier_a_ouvrir = fopen("../../../statistiques/statsimpressions.txt","a"); fwrite($fichier_a_ouvrir,"$date,$heure,$ip,$total
"); fclose ($fichier_a_ouvrir); } if (($_GET['macro']) &&($_GET['macro']=="%%CLICK_URL_UNESC%%")){ $macro=htmlspecialchars(stripslashes(trim($_GET['macro'],ENT_QUOTES, "UTF-8"))); }  else { $macro=''; } header("Content-type: text/javascript");?>
document.write('<div style="position:relative; margin:0 auto; padding:0; text-align:center; toverflow:hidden; background:url(\'http://monsite.com/mapub/imgsdefgn3948743fkg6032.gif\')no-repeat #ffffff;width:970px;height:250px;"><div style="background:#000000;width:320px;height:180px;position:absolute; left:16px; top:18px; z-index:10;"><iframe width="320" height="180" src="//www.youtube.com/embed/54aww_bgW10?rel=0&hl=fr_FR&autoplay=0&controls=1&autohide=1&fs=0&showsearch=0&iv_load_policy=3&showinfo=0" frameborder="0" allowfullscreen></iframe></div><div style="width:970px;height:250px; position:absolute; left:0px; top:0px; z-index:5;"><a href="javascript:window.open(window.clickTag)" title="EN SAVOIR +" target="_blank"><img src="http://monsite.com/mapub/btdefgfdasffwreerwen39.gif" alt="EN SAVOIR +" width="970" height="250"></a></div></div><script> var clickTag="<?php echo $macro; ?>btdasdearasdsdefrdcas.php";</script>
');

Ce qu’il y a de merveilleux avec PHP, c’est qu’il peut être en quelque sorte ce que l’on veut….
Du html bien entendu, mais aussi une image, du javascript…

Si on doit envoyer un 3rd Party Tag à une agence qui, Ô misère, ne serait que faire d’un iframe ou, encore pire, du code html (de plus en plus rare de nos jours) alors cette astuce est très pratique.

Analysons le code un peu :

1- Avec setcookie, on créer un cookie en lui donnant un nom, un contenu et une date d’expiration.
2- On déclare les variables dont nous aurons besoins pour le comparatif : $ip, $date, $heure, $total, etc.
3- On vérifie l’existence du cookie sur la machine de celui qui voit la pub et on enregistre les données appropriées dans notre fichier « statsimpressions » grâce à if(isset($_COOKIE[‘P3345r-123h3rasdasdfdqwg’])) […] (ce fichier est créé dynamiquement s’il n’existe pas)
4- Comme les serveurs publicitaires utilisent des macros pour enregistrer les clics, on la récupère via $_GET[‘macro’]
(ici on a inclu un exemple de macro DFP, mais je vous laisse le soin d’élaborer une liste des macros admissibles)
5- Maintenant, on déclare le type de document via la balise header.
6- Enfin, puisque c’est du javascript, en utilisant document.write on intègre le code html de notre bannière.

Tout ça est super. Victoire ? Hum… pas si vite nos impressions sont enregistrées dans statsimpressions.txt figurant au répertoire privé mais on ne compte pas les clics.

Pour comptabiliser les clics, rien de plus simple car le principe est le même :

redirection.php

<?php setcookie("345r-123h3rasdasdfdqwg-btdasdearasdsdefrdcas", "btdasdearasdsdefrdcas-123h3rasdasdfdqwg", (time() + 2592000)); $ip= $_SERVER['REMOTE_ADDR']; $date = date("d-m-Y"); $heure = date("H:i"); $total = 1; $total2 = 0; if(isset($_COOKIE['345r-123h3rasdasdfdqwg-btdasdearasdsdefrdcas'])){ $fichier_a_ouvrir = fopen("../../../statistiques/statsclics.txt","a"); fwrite($fichier_a_ouvrir,"$date,$heure,$ip,$total2
"); fclose ($fichier_a_ouvrir); } else { $fichier_a_ouvrir = fopen("../../../statistiques/statsclics.txt","a"); fwrite($fichier_a_ouvrir,"$date,$heure,$ip,$total
"); fclose ($fichier_a_ouvrir); } header("Location: http://www.monurlofficielderedirection.com/"); exit(); ?>

Pour terminer, voici un exemple de 3rd Party Tag :

<script type="text/javascript"> MAX_macro ='%%CLICK_URL_UNESC%%'; T_inc = new Array("123h3rasdasdfdqwg"); rand = Math.floor(Math.random() * T_inc.length); rep="monsite.com/pub/"; inc=rep+T_inc[rand]+".html?ct0=" + MAX_macro; var jqueryJsHost = (("https:" == document.location.protocol) ? "https://" : "http://"); loadJS(jqueryJsHost + inc); function loadJS(src){ document.write('<scr'+'ipt type="text/javascript" src="'+src+'"><\/scr'+'ipt>'); } </script>

(T_inc est un tableau qui donne la possibilité de lister plusieurs bannières que l’on voudrait voir s’afficher de manière aléatoire grâce à rand)

Tel que mentionné plus haut, notez que vous pouvez aussi livrer le code html via iframe ou l’envoyer clairement (mais minifié) , si c’est possible, ça déchargera le serveur.

Si vous envoyer le code, n’oubliez de conserver au minimum l’astuce pour compter la redirection.

Pour comptabiliser aussi les impressions, il faudra peut-être ajouter un tracking pixel.
Pour ce faire, référez-vous au code de la bannière (moncreatif.php); l’idée reste la même, mais cette fois-ci votre PHP se contente d’être un gif minuscule et transparent ajouté au code de la bannière. 😉


Partagez cette page :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Merci pour l’information! Est-ce possible de le faire via iframe et si oui quel serait la bonne façon de faire?

Reply

@Caroline

Voici ce qui pourrait simplement être fait (il faut ajouter ça au code javascript de notre source html hébergée sur le serveur bien entendu) :

function getParameterByName(idRef) {
		idRef = idRef.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
		var regex = new RegExp("[\\?&]" + idRef + "=([^&#]*)"),
		results = regex.exec(location.search);
		return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var clickTag = getParameterByName('clickTag');

Puis, lorsqu’on envoi le iframe :

<iframe width="300" height="250" frameborder="0" scrolling="no" src="http://monsite.com/mapub/index.html?clickTag=%%CLICK_URL_UNESC%%"></iframe>

Reply