|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
Простая банерная система |
|
Дата:
|
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 |
|
|
 |
 |
 |
 |
|
|