欢迎光临爱时尚女性网
 

一个基于ASP的标题广告管理系统(三)

2012-7-6 编辑:knwz 来源:爱时尚女性网 阅读次数:1069
  导读:三、显示广告 这部分程序主要有如下四个目的:第一,参考各个广告的显示等级,随机选择本次显示的广告;第二,更新数据库中该广告的显示次数;第三,输出标题广告的HTML代码;第四,在数据库历史表中保存显示和点击历史纪录。 实现上述功能的脚本主要有两个: ShowBann...
三、显示广告

这部分程序主要有如下四个目的:第一,参考各个广告的显示等级,随机选择本次显示的广告;第二,更新数据库中该广告的显示次数;第三,输出标题广告的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
爊TotalWeight = rs.Fields( "SumWeight" )
' nTotalWeight有可能为空值
營f IsNull( nTotalWeight ) Then
爊TotalWeight = 1
燛nd 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
' 将数据库值赋给变量
' 这种算法不利于效率,但简化了控制结构
爏trImageURL = rs.Fields( "ImageURL" )
爏trAltText = rs.Fields( "AltText" )
爏trLink = rs.Fields( "Link" )
爊ImageWidth = rs.Fields( "ImageWidth" )
爊ImageHeight = rs.Fields( "ImageHeight" )
爊Weight = rs.Fields( "Weight" )
爊AdID = rs.Fields( "AdID" )
爊AdvertiserID = rs.Fields( "AdvertiserID" )
爊ViewLimit = rs.Fields( "ViewLimit" )
爊Impressions = rs.Fields( "Impressions" )
爊WeightCount = nWeightCount + nWeight
爎s.MoveNext
' nWeightCount是否等于或大于随机变量值
營f nWeightCount >= nRandomNumber or rs.EOF Then
燽Done= true
燛nd If
Wend
㈢ 更新当前广告的显示次数

在确定本次要显示的广告之后,程序就可以更新该广告记录的Impressions字段。如果新的Impressions值超过了显示次数限制(nViewLimit),还必需设置Status字段为0(即本广告不可再显示)。实现代码如下:

nStatus = 1
nImpressions = nImpressions + 1
If nImpressions >= nViewLimit Then
爊Status = 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 = _
" "Link=" + strLink + _
"&AdvertisementID=" + CStr( nAdID ) + _
"&AdvertiserID=" + CStr( nAdvertiserID ) + Chr( 34 ) + _
" target=newFrame><" + Chr( 13 ) + Chr( 10 ) + _
">
" + Chr( 13 ) + Chr( 10 )
这里的strHtmlCode即为显示广告的HTML代码。

㈤ 记录其他信息

为了给广告客户提供更多的信息,同时也为了便于进一步分析,除了记录显示次数之外,程序还在数据库表中记录其他一些信息(浏览本次广告时,浏览者所在的ip地址以及浏览时间、广告编号、广告客户编号),如下所示:

strSql = "INSERT INTO BannerHistory " + _
"(AdvertiserID, AdID, IPAddress, Type) Values (" + _
燙Str( nAdvertiserID ) + ", " + _
燙Str( nAdID ) + ", '" + _
燫equest.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 (" + _
燫equest.QueryString( "AdvertiserID" ) + ", " + _
燫equest.QueryString( "AdvertisementID" ) + ", '" + _
燫equest.ServerVariables( "REMOTE_HOST" ) + "', 2)"
rs.Open strSql, cn
' 重定向到广告客户指定的页面
Response.Redirect( Request.QueryString( "Link" ) )
Next Steps

文章出自:爱时尚女性网www.aspjc.com,尊重版权是美德,转载请保留原地址,感谢合作!

 
 
链接交换请联系:QQ:790646582 首页链接要求百度快照在一周以内,不符合以上要求的各站,我们将定期把友情连接转入内页,谢谢合作。
Copyright @ 2012-2015 爱时尚女性网 保留所有权利吉ICP备14005127号-1 服务QQ:175529508 e-mail:zk8312@163.com
本站部分资源来自网友上传,如果无意之中侵犯了您的版权,请联系本站,本站将在3个工作日内删除。