一個(gè)基于ASP的標(biāo)題廣告管理系統(tǒng)(3)

2022-06-12發(fā)布者:ylm大小: 下載:0

文件大小:

軟件介紹

三、顯示廣告

   這部分程序主要有如下四個(gè)目的:第一,參考各個(gè)廣告的顯示等級(jí),隨機(jī)選擇本次顯示的廣告;第二,更新數(shù)據(jù)庫(kù)中該廣告的顯示次數(shù);第三,輸出標(biāo)題廣告的HTML代碼;第四,在數(shù)據(jù)庫(kù)歷史表中保存顯示和點(diǎn)擊歷史紀(jì)錄。

   實(shí)現(xiàn)上述功能的腳本主要有兩個(gè):

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

   ㈠ 計(jì)算顯示等級(jí)總和

   本系統(tǒng)采用的廣告選擇算法是:首先計(jì)算出當(dāng)前所有可用廣告的顯示等級(jí)總和,然后根據(jù)這個(gè)和值生成一個(gè)隨機(jī)數(shù),再根據(jù)這個(gè)隨機(jī)數(shù)來(lái)確定本次顯示的廣告。下面的代碼用于計(jì)算可用廣告的顯示等級(jí)總和:

 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
   在計(jì)算出nTotalWeight之后,我們可以根據(jù)該值生成一個(gè)隨機(jī)數(shù),如下所示:

 Randomize
 nRandomNumber = Int( Rnd * nTotalWeight ) + 1
   程序?qū)臄?shù)據(jù)庫(kù)讀取可用廣告記錄(參見(jiàn)下面的代碼),累計(jì)已讀取記錄的weight總和,當(dāng)這個(gè)新的總和超過(guò)這里生成的隨機(jī)數(shù)時(shí),就將當(dāng)前記錄作為本次顯示的廣告。

   ㈡ 分析可用廣告記錄

   接下來(lái)的任務(wù)是執(zhí)行一個(gè)查詢(xún),提取所有可用廣告記錄。如前所述,在遍歷這些可用廣告記錄時(shí),記錄已讀取記錄的weight值總和nWeightCount ,當(dāng)nWeightCount 等于或大于前面生成的隨機(jī)數(shù)nRandomNumber時(shí),程序就認(rèn)為找到了本次要顯示的廣告。具體如下:

 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
     將數(shù)據(jù)庫(kù)值賦給變量
     這種算法不利于效率,但簡(jiǎn)化了控制結(jié)構(gòu)
     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是否等于或大于隨機(jī)變量值
     If nWeightCount >= nRandomNumber or rs.EOF Then
         bDone= true
     End If
 Wend
   ㈢ 更新當(dāng)前廣告的顯示次數(shù)

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

 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代碼

   在完成上述準(zhǔn)備工作之后,接下來(lái)就可以輸出顯示廣告的HTML代碼。所輸出的HTML代碼可以分成如下幾個(gè)部分:

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

   在顯示廣告的HTML代碼中,重定向頁(yè)面本文假定為Redirect.asp,目標(biāo)URL來(lái)自數(shù)據(jù)庫(kù),其他參數(shù)主要是廣告編號(hào)、廣告客戶(hù)編號(hào)等,Redirect.asp利用這些參數(shù)記錄點(diǎn)擊歷史紀(jì)錄。具體實(shí)現(xiàn)如下:

 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代碼。

   ㈤ 記錄其他信息

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

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

   ㈥ 重定向頁(yè)面

   本文提供一個(gè)簡(jiǎn)單的重定向頁(yè)面Redirect.asp,其功能是記錄廣告點(diǎn)擊數(shù)量,然后生成歷史表BannerHistory中的記錄,最后重定向到目標(biāo)URL,如下所示:

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

發(fā)表評(píng)論(共0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)政策法規(guī),評(píng)論內(nèi)容只代表網(wǎng)友觀點(diǎn),發(fā)表審核后顯示!

版權(quán)聲明:

1 本站所有資源(含游戲)均是軟件作者、開(kāi)發(fā)商投稿,任何涉及商業(yè)盈利目的均不得使用,否則產(chǎn)生的一切后果將由您自己承擔(dān)!

2 本站將不對(duì)任何資源負(fù)法律責(zé)任,所有資源請(qǐng)?jiān)谙螺d后24小時(shí)內(nèi)刪除。

3 若有關(guān)在線(xiàn)投稿、無(wú)法下載等問(wèn)題,請(qǐng)與本站客服人員聯(lián)系。

4 如侵犯了您的版權(quán)、商標(biāo)等,請(qǐng)立刻聯(lián)系我們并具體說(shuō)明情況后,本站將盡快處理刪除,聯(lián)系QQ:2499894784

返回頂部