|
|
mar
04
2006
|
Créer un ASP.net Adrotator qui soit capable de comptabiliser le nombre de clics |
|
|
|
Programmation -
ASP/.Net/PHP
|
|
Ecrit par Kamal AOUDA
|
|
04-03-2006 |
|
Créer un ASP.net Adrotator qui soit capable de comptabiliser le nombre de clics
Publicité en ligne :
créer un ASP.net Adrotator qui soit capable de comptabiliser le nombre de clics
et d’arrêter l’affichage d’une annonce publicitaire donnée lorsque le nombre
d’impressions de cette annonce dépasse une limite maximale.
A l’état brut le server side control Adrotator ne permet pas de comptabiliser le
nombre de fois qu’une annonce publicitaire a été cliquée. De même il ne permet
pas d’arrêter l’affichage d’une annonce publicitaire lorsqu’elle fait l’objet d’un
certain nombre d’impressions.
Dans cet article, Wim Hollebrandse décrit un programme qui permet de prendre en
charge les fonctionnalités ci-dessus décrites. Une base de données SQL Server
est utilisée pour récupérer les informations relatives à chaque annonce
publicitaire et faire le suivi du nombre unitaire d’impressions.
Vous pouvez télécharger le code source de ce programme en cliquant sur
ce lien.
Le programme proposé repose sur deux user controls. Le premier est responsable
de l’affichage dynamique des annonces publicitaires tandis que le deuxième fait
le comptage du nombre de clicks. Bien sûr il est tout à fait possible d’utiliser
un seul contrôle pour effectuer ces deux tâches (il s’agit d’un choix personnel
de l’auteur du code mais à sa place j’aurais fusionné les deux objets pour
éviter aux programmeurs d’appeler plusieurs classes pour effectuer des tâches
aussi simples).
Structure de la table Adcompaign
Une seule table permettra de stocker les informations requises pour gérer les
annonces publicitaires. Nous n’allons décrire ci-dessous que certains champs
dont les libellés pourraient prêter à confusion.

ImpressionLimit – nombre maximum d’impressions par annonce.
StartCampaign – date de début d’affichage de l’annonce publicitaire. L’annonce
ne sera pas publiée antérieurement à cette date.
CampaignCompleted – ce champ sera mis à jour lorsque le nombre total
d’impressions par annonce est atteint.
Impressions – fait le comptage du nombre d’impressions au fur et à mesure.
ClickThroughs – nombre de clics.
AdPosition – texte libre permettant d’indiquer la position de l’annonce
publicitaire.
Enabled – variable pour indiquer si l’annonce doit être affichée (1) ou pas (0).
AdGuid – un Guid permettant à chaque annonceur d’accéder aux statistiques de ses
annonces.
AdCampaign.ascx
AdCampaign usercontrol est responsable de l’affichage des annonces
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="AdCampaign.ascx.cs"
Inherits="TestAdCampaign.AdCampaign" %>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><span runat="server" id="spanAd"></span></td>
</tr>
</table>
Les propriétés d’AdCampaign telles que définies dans le fichier sous-jacent
AdCampaign.ascx.cs sont lues et modifiées via des spécificateurs d’accès
(setters, getters) :
private string position="";
public string Position
{
get { return this.position; }
set { this.position = value; }
}
private string redirectpage="";
public string RedirectPage
{
get { return this.redirectpage; }
set { this.redirectpage = value; }
}
private string appconnectionkey="";
public string AppConnectionKey
{
get { return this.appconnectionkey; }
set { this.appconnectionkey = value; }
}
La propriété Position permettra de récupérer de la base de données seulement les
annonces qui ont une taille d’affichage déterminée (cela évitera l’affichage
d’une annonce 125x125 dans un espace réservé à une annonce 468x60).
La page de redirection ne mène pas vers le site de l’annonceur mais plutôt vers
une page intermédiaire sur laquelle se trouve le deuxième contrôle
AdClickThru.ascx qui permet de comptabiliser le nombre de clics.
AppConnectionKey stocke les paramètres de connexion à la base de données (connection
string). Cette valeur est liée à celle qui se trouve dans le fichier web.config.
La plus grosse partie du code du contrôle AdCampaign se trouve dans l’événement
Page_Load et dans la méthode ServeAd().
private void Page_Load(object sender, System.EventArgs e)
{
SqlConnection cnn = new SqlConnection(ConfigurationSettings.AppSettings[this.appconnectionkey]);
SqlCommand cm = new SqlCommand("p_SelectIDsByAdPosition",cnn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add("@AdPosition",this.position);
cnn.Open();
SqlDataAdapter da = new SqlDataAdapter(cm);
DataSet ds = new DataSet();
da.Fill(ds);
// do some clean up
da.Dispose();
cm.Dispose();
cnn.Close();
int rows = ds.Tables[0].Rows.Count;
if (rows>0)
{
Random r = new Random();
// serve random ad from the results in the dataset
this.ServeAd(Convert.ToInt32(ds.Tables[0].Rows[r.Next(0,rows)]["ID"]),cnn);
}
// .. and more clean up
ds.Dispose();
cnn.Dispose();
}
La portion de code reproduite ci-dessous permet de récupérer les informations à
partir de la base de données.
private void ServeAd(int ID,SqlConnection cnn)
{
StringBuilder sb = new StringBuilder();
SqlCommand cm = new SqlCommand("p_ServeAdByID",cnn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add("@ID",ID);
cnn.Open();
SqlDataReader dreader = cm.ExecuteReader();
if (dreader.Read())
{
sb.Append("<a href='"+this.redirectpage+"?"+ID.ToString()+"'>");
sb.Append("<img src='"+dreader["AdImageURL"].ToString()+"' ");
if (!Convert.IsDBNull(dreader["ImageWidth"]))
{
sb.Append("width='"+dreader["ImageWidth"].ToString()+"' ");
}
if (!Convert.IsDBNull(dreader["ImageHeight"]))
{
sb.Append("height='"+dreader["ImageHeight"].ToString()+"' ");
}
sb.Append("border='0'></a>");
this.spanAd.InnerHtml = sb.ToString();
}
// clean up
dreader.Close();
cm.Dispose();
cnn.Close();
}
AdClickThru.ascx
Ce deuxième contrôle n’a pas d’interface graphique. Il reçoit les paramètres de
l’annonce publicitaire via la page de redirection décrite préalablement. Voici
les deux principales méthodes de ce contrôle :
private void Page_Load(object sender, System.EventArgs e)
{
// Querystring should contain the AdCampaign's Primary Key value
if (Request.QueryString!=null)
{
try
{
int AdID = Convert.ToInt32(Request.QueryString[0]);
this.IncrementClickThruAndRedirect(AdID);
}
catch (InvalidCastException)
{
// too bad - Request.QueryString[0] can't be converted to an int
}
}
}
private void Page_Load(object sender, System.EventArgs e)
{
// Querystring should contain the AdCampaign's Primary Key value
if (Request.QueryString!=null)
{
try
{
int AdID = Convert.ToInt32(Request.QueryString[0]);
this.IncrementClickThruAndRedirect(AdID);
}
catch (InvalidCastException)
{
// too bad - Request.QueryString[0] can't be converted to an int
}
}
}
IncrementClickThruAndRedirect exécute une procédure stockée
private void IncrementClickThruAndRedirect(int ID)
{
SqlConnection cnn = new SqlConnection(ConfigurationSettings.AppSettings[this.appconnectionkey]);
SqlCommand cm = new SqlCommand("p_IncrementClickThru",cnn);
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.Add("@ID",ID);
cnn.Open();
// get result, should contain redirect Url, but could be null...
object oUrl = cm.ExecuteScalar();
// do some clean up first
cm.Dispose();
cnn.Close();
cnn.Dispose();
// make sure it's not null
if (oUrl!=null)
{
string redirectUrl = oUrl.ToString();
// now redirect
Response.Redirect(redirectUrl,true);
}
}
Interfaces
Deux pages ASP.net sont utilisées dans cette application.
default.aspx
<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false"
Inherits="TestAdCampaign.WebForm1" %>
<%@ Register TagPrefix="Wimdows" TagName="AdCampaign" Src="AdCampaign.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Test AdCampaign ASP.NET UserControls</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<Wimdows:AdCampaign Position="TOP468x60" id="AdCampaign1" RedirectPage="redirect.aspx"
AppConnectionKey="conn" runat="server"></Wimdows:AdCampaign>
<br>
<Wimdows:AdCampaign Position="LEFT125x125" id="Adcampaign2" RedirectPage="redirect.aspx"
AppConnectionKey="conn" runat="server"></Wimdows:AdCampaign>
</form>
</body>
</HTML>
redirect.aspx
<%@ Page language="c#" Codebehind="redirect.aspx.cs" AutoEventWireup="false"
Inherits="TestAdCampaign.redirect" %>
<%@ Register TagPrefix="Wimdows" TagName="AdClickThru" Src="AdClickThru.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>redirect</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="frmredirect" method="post" runat="server">
<Wimdows:AdClickThru id="AdClickThru1" AppConnectionKey="conn" runat="server"></uc1:AdClickThru>
</form>
</body>
</HTML>
|
|
Dernière mise à jour : ( 14-03-2006 )
|
|
Java-XML et oracle : E-commerce - EAI - portails d'entreprise - Applications mobiles |
|
Java-XML et oracle : E-commerce - EAI - portails d'entreprise - Applications mobiles
 Cet ouvrage montre comment tirer parti de l'offre Java-XML d'Oracle,
tant au niveau de la base de données Oracle8i (drivers JDBC, conteneur
EJB, ORB Corba, XSQL...), que des produits associés, outils XML-XSLT,
JDeveloper, Oracle9i Application Server, etc.
L'ouvrage insiste tout particulièrement sur les problèmes d'intégration
de ces technologies, de design des architectures et de scalabilité des
applications. II est illustré de nombreux exemples de code et de deux
études de cas, une application e-commerce construite à l'aide d'EJB et
un serveur de documents XML multithread.
Références
Lien sur le site d'Amazon.
Fréderic Berque, Serge
Frezefond, Ludovic Sorriaux
Titre : Java, XML et Oracle
Éditeur : Eyrolles
Collection : Solutions Développeurs
Parution : mars 2001
634 pages
ISBN : 2-212-09149-4
EAN13 : 9782212091496
|
|
|