全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 3712|回复: 2

【原创】CPV/CPM广告,如何榨干每一个来访IP

[复制链接]
发表于 2011-1-31 18:27:25 | 显示全部楼层 |阅读模式
从原文摘录部分自: 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;
    }
}
发表于 2011-1-31 19:59:39 | 显示全部楼层
百度广告管家
发表于 2011-2-1 16:47:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-21 16:12 , Processed in 0.100960 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表