Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

alexds

 
Название:

Простая банерная система

Дата: 01 August 2007
Описание: ASHX обработчик, представляющий собой простейшую банерную систему. Описание банеров добавляется в массив baners. Места-сайты, где показываются банеры, добавляются в массив Places. При этом в текстовых файлах сохраняется статистика показов банеров и кликов по ним. Все очень просто и непритязательно :) 
  Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения следующую строку: [CODEPOST ID=211]Простая банерная система[/CODEPOST]
Оценка: Проголосовало 8 посетителей, средняя оценка 4.13
Оценить:
  1 <%@ WebHandler Language="C#" Class="adv" %>
  2 
  3 using System;
  4 using System.Collections;
  5 using System.Web;
  6 using System.IO;
  7 
  8 
  9 
 10 public class adv : IHttpHandler
 11 {
 12     #region Parameters
 13     
 14 /* Код вставки:
 15 
 16 <script type="text/JavaScript" src="http://ThisFileUrl"></script>
 17 
 18 */    
 19     
 20     
 21     /// <summary>
 22     /// Служба показа банеров
 23     /// </summary>
 24     /// <remarks>
 25     /// Вставка:
 26     /// 
 27     /// </remarks>
 28     static adv()
 29     {
 30         // Список банеров.
 31         // Добавляется по схеме "url картинки", "адрес клика"
 32         // baners.Add(new string[] {"myimage.gif", "http://mysite/"}); 
 33         baners.Add( new string[] { "testbaner.jpg", "http://google.com" } ); 
 34         baners.Add( new string[] { "elstudy.gif", "http://elstudy.ru" } ); 
 35     }
 36 
 37     
 38     /// <summary>
 39     /// Места размещения банеров.
 40     /// Без "http://" и www
 41     /// </summary>
 42     private static string[] Places = new string[] {
 43         "vasnecov.ru", "krilov.ru", "wroubel.ru"    };
 44 
 45 
 46     private const string BanerWidth = "120";
 47     private const string BanerHeight = "600";
 48     private const string BanerFormat = BanerWidth + "." + BanerHeight;
 49     private const string ServeicePage = BanerFormat + ".ashx";
 50     private const string ServeiceDomain = "http://mysite/";
 51     private const string ServeiceFolder = "adv";
 52     private const string PathToServeiceFolder = ServeiceDomain + ServeiceFolder + "/";
 53 
 54     #endregion
 55 
 56     #region Code section
 57     
 58     private static ArrayList baners = new ArrayList();
 59     
 60     private static int lastShowed = 0;
 61 
 62     
 63     public adv()
 64     {}
 65     
 66     
 67 
 68     public void ProcessRequest (HttpContext context)
 69     {
 70         context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
 71         string placeID = GetPlaceID(context);
 72         
 73         if (!string.IsNullOrEmpty(context.Request.QueryString["link"]))
 74         { // Click on the baner
 75             int banerID = int.Parse(context.Request.QueryString["id"]);
 76             context.Response.AppendHeader("Referer", "Astron advertise.");
 77             context.Response.Redirect(GetBanerCodeOrLink(placeID, banerID, true));
 78         }
 79         else
 80         { // Send the baner code
 81             context.Response.ContentType = "text/plain";
 82             context.Response.Write(GetBanerCodeOrLink(placeID, GetNextBanerID(), false));
 83         }
 84     }
 85  
 86     
 87     
 88     public bool IsReusable
 89     {
 90         get
 91         {
 92             return false;
 93         }
 94     }
 95 
 96     
 97 
 98     /// <summary>
 99     /// Gets the baner code.
100     /// </summary>    
101     private string GetBanerCodeOrLink(string placeID, int banerID, bool getOnlyLink)
102     {
103         string[] currBaner = (string[])baners[banerID];
104         RegisterEvent(placeID, currBaner[0], getOnlyLink);
105 
106         if (getOnlyLink)
107             return currBaner[1];
108         
109         return @"
110 document.write('<a href=""" + PathToServeiceFolder + ServeicePage + "?placeID=" + placeID + "&link=1&id=" + banerID.ToString() + @""" target=""_blank""><img src=""" + PathToServeiceFolder + currBaner[0] + @""" alt="""" width=""" + BanerWidth + @""" height=""" + BanerHeight + @""" border=""0"" vspace=""3"" hspace=""3"" /></a>');
111 ";
112     }
113 
114     
115     
116     private int GetNextBanerID()
117     {
118         lastShowed ++;
119         if (lastShowed >= baners.Count)
120             lastShowed = 0;
121         return lastShowed;
122     }
123 
124     
125 
126     private string GetPlaceID(HttpContext context)
127     {
128         string header = context.Request.Headers["Referer"].ToLower();
129         foreach (string pl in Places)
130         {
131             if (header.Contains("http://" + pl.ToLower()) || header.Contains("http://www." + pl.ToLower()))
132                 return pl;
133         }
134 
135         throw new Exception("The place is not found. Header: " + header);
136     }
137     
138     
139     
140     /// <summary>
141     /// Save the viewed statistic.
142     /// </summary>
143     private void RegisterEvent(string placeID, string banerName, bool isClick)
144     {
145         string filePath = HttpContext.Current.Server.MapPath(
146             "~/" + ServeiceFolder + "/stat_" + BanerFormat + "_" + banerName + ".txt");
147         
148         int viewed = 0;
149         int clicked = 0;
150 
151         if (File.Exists(filePath))
152         {
153             string s = File.ReadAllText(filePath, System.Text.Encoding.UTF8);
154 
155             try
156             {
157                 string[] result = s.Split(Convert.ToChar("#"));
158                 viewed = int.Parse(result[0]);
159                 clicked = int.Parse(result[1]);
160             }
161             catch { }
162         }
163 
164         if (isClick)
165             clicked ++;
166         else
167             viewed ++;
168 
169         File.WriteAllText(filePath, viewed.ToString() + "#" + clicked.ToString(),
170             System.Text.Encoding.UTF8);
171     }
172 
173     #endregion
174 }
Вернуться к списку исходников в категории Общие вопросы программирования на ASP.NET
 
Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта