【原创】CPV/CPM广告,如何榨干每一个来访IP
从原文摘录部分自: http://obmem.info/?p=844怎样才能把CPV/CPM的所有来访IP压榨干净呢?试想一下这个算法:
* 用户当天第一次来访,显示广告1
* 用户当天第二次来访,显示广告2
* ……
只要用户访问次数小于现存广告的个数,那么他每次访问都会显示不一样的广告,点几次页面就显示几次广告!
CPV广告就真正名副其实地是Cost Per View了。
于是就有一个问题,怎么确定用户第几次访问,从而显示第几个广告呢?最朴素的想法莫过于建立一个本机的流量统计系统,例如piwik系统,然后查询本地数据库,我一开始的确想这么实现,但是可想而知这会多么拖累主机的性能。想想看,javascript有没有办法自己来保存那些访问信息呢?
其实是有的,那就是本机cookies,只要自动记录cookie,那么用户是第几次来那就显而易见了;而且由于cookie有自动超时机制,我们只要让它把超时设为24小时,那么第二天就可以自动重新统计了。
首先,需要有set_cookie以及get_cookie函数
function set_cookie(name,value,expires){
var today = new Date();
today.setTime( today.getTime() );
expires = expires*1000;
var expires_date = new Date(today.getTime()+(expires));
document.cookie=name+"="+escape(value)+";expires="+expires_date.toGMTString()+";domain=simplecd.org";
}
function get_cookie(name){
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++){
x=ARRcookies.substr(0,ARRcookies.indexOf("="));
y=ARRcookies.substr(ARRcookies.indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==name){
return unescape(y);
}
}
}
然后,我们可以稍微修改一下算法,简化代码:为各个广告建立自己的cookie,值为访问次数
新算法如下:
* 遍历各广告位的cookie
* 如果有不存在的cookie,则显示该广告位,并且设置cookie
* 如果cookie全部存在则显示任意广告或者不显示,同时更新所显示广告的cookie
更进一步地,为了那个悬浮窗不要那么扰民,也可以再加上一条:
* 如果用户已显示广告总次数大于6次,那么今天就不显示该类广告。
整个接下来的代码如下:
var total_ad = 3;
var max_show = 6;
var cookie_pre = 'cpvad_counter_';
var cookie_time = 60*60*8;
var show = -1; // show ad id
var show_counter = 0;
// first pass, round robin
for (var i=0;i<total_ad;i++) {
var cookie_name = cookie_pre+i;
var counter = get_cookie(cookie_name);
if ( counter ){
show_counter += parseInt(counter);
}else{
show = i;
break;
}
}
// show if not showed more than max_show times
if (show_counter < max_show){
// second pass, random show
if (show == -1){
show = Math.floor(Math.random()*total_ad);
}
// handle cookie
var cookie_name = cookie_pre+show
var cookie_value = get_cookie(cookie_name);
if (cookie_value){
set_cookie(cookie_name,''+(parseInt(cookie_value)+1),cookie_time);
}else{
set_cookie(cookie_name,'1',cookie_time);
}
// show add
switch(show){
case 0:
document.write('<script type="text/javascript">u_a_client="20685";u_a_width="270";u_a_height="200";u_a_zones="63336";u_a_type="1";<\/script><script src="http://js.tjq.com/i.js"><\/script>');
break;
case 1:
document.write('<script type="text/javascript">u_a_client="20326";u_a_width="270";u_a_height="200";u_a_zones="37972";u_a_type="1";<\/script><script src="http://www.admin6.com/i.js"><\/script>');
break;
case 2:
document.write('<script type="text/javascript">u_a_client="20685";u_a_width="283";u_a_height="189";u_a_zones="63369";u_a_type="1";<\/script><script src="http://js.tjq.com/i.js"><\/script>');
break;
}
} 百度广告管家 yc007t yc007t
页:
[1]