国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > ASP > 正文

一個基于ASP的標題廣告管理系統(三) 

2019-11-18 22:34:14
字體:
來源:轉載
供稿:網友
三、顯示廣告

   這部分程序主要有如下四個目的:第一,參考各個廣告的顯示等級,隨機選擇本次顯示的廣告;第二,更新數據庫中該廣告的顯示次數;第三,輸出標題廣告的HTML代碼;第四,在數據庫歷史表中保存顯示和點擊歷史紀錄。

   實現上述功能的腳本主要有兩個:

ShowBanner.asp:確定本次調用要顯示的廣告,更新顯示次數記錄,生成標題廣告的HTML代碼。
Redirect.asp:重定向頁面。ShowBanner.asp生成的廣告HTML代碼將調用該腳本,由該腳本記錄點擊歷史數據、重定向到廣告客戶指定的頁面。
   本文下載包中的ShowBanner.asp同時也是一個廣告顯示示例頁面,每次刷新該頁面可以顯示出不同的廣告。下面我們按照ShowBanner.asp的執行過程,介紹其中的關鍵步驟。

   ㈠ 計算顯示等級總和

   本系統采用的廣告選擇算法是:首先計算出當前所有可用廣告的顯示等級總和,然后根據這個和值生成一個隨機數,再根據這個隨機數來確定本次顯示的廣告。下面的代碼用于計算可用廣告的顯示等級總和:

 nTotalWeight = 0
 strSql = "SELECT SUM( Weight ) As SumWeight FROM " + _
     "Advertisement WHERE Status=1"
 rs.Open strSql, cn
 If not rs.EOF and not rs.BOF Then
     nTotalWeight = rs.Fields( "SumWeight" )
     ' nTotalWeight有可能為空值
     If IsNull( nTotalWeight ) Then
         nTotalWeight = 1
     End If
 End If
   在計算出nTotalWeight之后,我們可以根據該值生成一個隨機數,如下所示:

 Randomize
 nRandomNumber = Int( Rnd * nTotalWeight ) + 1
   程序將從數據庫讀取可用廣告記錄(參見下面的代碼),累計已讀取記錄的weight總和,當這個新的總和超過這里生成的隨機數時,就將當前記錄作為本次顯示的廣告。

   ㈡ 分析可用廣告記錄

   接下來的任務是執行一個查詢,提取所有可用廣告記錄。如前所述,在遍歷這些可用廣告記錄時,記錄已讀取記錄的weight值總和nWeightCount ,當nWeightCount 等于或大于前面生成的隨機數nRandomNumber時,程序就認為找到了本次要顯示的廣告。具體如下:

 strSql = "SELECT * FROM Advertisement WHERE Status=1"
 rs.Close
 rs.Open strSql, cn
 bDone = false
 ' 已讀取記錄的Weight值總和
 nWeightCount = 0
 
 ' 清除變量
 strImageURL = ""
 strAltText = ""
 strLink = ""
 nImageWidth = 0
 nImageHeight = 0
 nWeight = 0
 nAdID = 0
 nAdvertiserID = 0
 nViewLimit = 0
 nImPRessions = 0
     
 While not rs.EOF and not rs.BOF and not bDone
     ' 將數據庫值賦給變量
     ' 這種算法不利于效率,但簡化了控制結構
     strImageURL = rs.Fields( "ImageURL" )
     strAltText = rs.Fields( "AltText" )
     strLink = rs.Fields( "Link" )
     nImageWidth = rs.Fields( "ImageWidth" )
     nImageHeight = rs.Fields( "ImageHeight" )
     nWeight = rs.Fields( "Weight" )
     nAdID = rs.Fields( "AdID" )
     nAdvertiserID = rs.Fields( "AdvertiserID" )
     nViewLimit = rs.Fields( "ViewLimit" )
     nImpressions = rs.Fields( "Impressions" )
     nWeightCount = nWeightCount + nWeight
     rs.MoveNext
     ' nWeightCount是否等于或大于隨機變量值
     If nWeightCount >= nRandomNumber or rs.EOF Then
         bDone= true
     End If
 Wend
   ㈢ 更新當前廣告的顯示次數

   在確定本次要顯示的廣告之后,程序就可以更新該廣告記錄的Impressions字段。如果新的Impressions值超過了顯示次數限制(nViewLimit),還必需設置Status字段為0(即本廣告不可再顯示)。實現代碼如下:

 nStatus = 1
 nImpressions = nImpressions + 1
 If nImpressions  >= nViewLimit Then
     nStatus = 0
 End If
 strSql = "UPDATE Advertisement Set Status=" + _
 CStr( nStatus ) + ", Impressions=" + _
 CStr( nImpressions ) + " WHERE AdID=" + _
 CStr( nAdID )
 rs.Close
 rs.Open strSql, cn
   ㈣ 生成HTML代碼

   在完成上述準備工作之后,接下來就可以輸出顯示廣告的HTML代碼。所輸出的HTML代碼可以分成如下幾個部分:

 重定向頁面 --> 目標URL --> 其他參數 --> 圖片標記
   為什么不是直接鏈接到廣告客戶指定的URL呢?這是因此,雖然這種方法更簡單,但我們希望能夠記錄廣告的點擊數量,在重定向頁面中我們就可以更新該廣告的ClickThroughs字段值。

   在顯示廣告的HTML代碼中,重定向頁面本文假定為Redirect.asp,目標URL來自數據庫,其他參數主要是廣告編號、廣告客戶編號等,Redirect.asp利用這些參數記錄點擊歷史紀錄。具體實現如下:

 strHtmlCode = _
     "<a href=Redirect.asp?"  + _
     "Link=" + strLink + _
     "&AdvertisementID=" + CStr( nAdID ) + _
     "&AdvertiserID=" + CStr( nAdvertiserID ) + Chr( 34 ) + _
     " target=newFrame><" + Chr( 13 ) + Chr( 10 ) + _
     "></A>" + Chr( 13 ) + Chr( 10 )
   這里的strHtmlCode即為顯示廣告的HTML代碼。

   ㈤ 記錄其他信息

   為了給廣告客戶提供更多的信息,同時也為了便于進一步分析,除了記錄顯示次數之外,程序還在數據庫表中記錄其他一些信息(瀏覽本次廣告時,瀏覽者所在的ip地址以及瀏覽時間、廣告編號、廣告客戶編號),如下所示:

 strSql = "INSERT INTO BannerHistory " + _
     "(AdvertiserID, AdID, IPAddress, Type) Values (" + _
     CStr( nAdvertiserID ) + ", " + _
     CStr( nAdID ) + ", '" + _
     Request.ServerVariables( "REMOTE_HOST" ) + _
     "', 1)"
 rs.Open strSql, cn
   瀏覽的日期時間值在access數據庫內設置,即設置字段默認值為Now()。

   ㈥ 重定向頁面

   本文提供一個簡單的重定向頁面Redirect.asp,其功能是記錄廣告點擊數量,然后生成歷史表BannerHistory中的記錄,最后重定向到目標URL,如下所示:

 ' 連接數據庫,創建記錄集對象rs,略...
 
 ' 增加廣告的點擊計數,如點擊計數超過限制值,
 ' 則設置Status為0
 strSql = "UPDATE Advertisement " + _
     "Set ClickThroughs=ClickThroughs+1, " + _
     "status=iif(ClickThroughs>=ClicksLimit,0,1) " + _
     " WHERE AdID=" + Request.QueryString( "AdvertisementID" )
 rs.Open strSql, cn
 
 ' 生成廣告點擊歷史紀錄
 strSql = "INSERT INTO BannerHistory " + _
     "(AdvertiserID, AdID, IPAddress, Type) Values (" + _
     Request.QueryString( "AdvertiserID" ) + ", " + _
     Request.QueryString( "AdvertisementID" ) + ", '" + _
     Request.ServerVariables( "REMOTE_HOST" ) + "', 2)"
 rs.Open strSql, cn
 ' 重定向到廣告客戶指定的頁面
 Response.Redirect( Request.QueryString( "Link" ) )
 Next Steps


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 福清市| 南康市| 达州市| 呼图壁县| 夹江县| 神木县| 陵水| 阿拉善盟| 息烽县| 澄江县| 延安市| 洞口县| 北流市| 南部县| 辽宁省| 南涧| 水富县| 梅河口市| 晋城| 拜城县| 桂东县| 文安县| 郧西县| 本溪| 乐平市| 佛冈县| 丰原市| 龙江县| 永年县| 健康| 靖州| 临桂县| 嘉祥县| 水富县| 方城县| 石河子市| 郸城县| 云南省| 衡水市| 青龙| 城口县|