三、显示广告
这部分程序主要有如下四个目的:第一,参考各个广告的显示等级,随机选择本次显示的广告;第二,更新数据库中该广告的显示次数;第三,输出标题广告的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 = _
"<" + Chr( 13 ) + Chr( 10 ) + _
">" + 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
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本
查看所有0条评论>>