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

來源:互聯網
上載者:User
廣告 三、顯示廣告

   這部分程式主要有如下四個目的:第一,參考各個廣告的顯示等級,隨機播放本次顯示的廣告;第二,更新資料庫中該廣告的顯示次數;第三,輸出標題廣告的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代碼。

   ㈤ 記錄其他資訊

   為了給廣告客戶提供



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.