类似谷歌,在网站里面嵌入js,接收各种浏览器信息以及网站信息

需要3个步骤:js 收集,调动接口, php接收,通过ip找到国家,然后存储

1.

需要在网页里面嵌入js代码:

<script type="text/javascript">
  var _maq = _maq || [];
  _maq.push(['website_id', '3']);
  (function() {
    var ma = document.createElement('script'); ma.type = 'text/javascript'; ma.async = true;
    ma.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'static.tomtop-cdn.com/tomtop/js/trace.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ma, s);
  })();
</script>

上下面的代码,是在每一个页面都需要加入,您可以加入到页面的底部

如果您想收集某些页面的单独的数据,譬如:产品页面的sku,你可以加入下面的代码,这个代码必须在上面的代码的前面:

<script type="text/javascript">
  var _maq = _maq || [];
  _maq.push(['sku', '$sku']);
</script>

一定要注意,这个代码一定要在上面

如果传递购物车信息,可以用json个数传递

2. 全局加入的js代码可以看到有个trace.js    这个js文件就是下面的内容

(function () {
  
  var nVer = navigator.appVersion;
  var nAgt = navigator.userAgent;
  var browserName  = navigator.appName;
  var fullVersion  = ''+parseFloat(navigator.appVersion); 
  var majorVersion = parseInt(navigator.appVersion,10);
  var nameOffset,verOffset,ix;

  // In Opera, the true version is after "Opera" or after "Version"
  if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
   browserName = "Opera";
   fullVersion = nAgt.substring(verOffset+6);
   if ((verOffset=nAgt.indexOf("Version"))!=-1) 
     fullVersion = nAgt.substring(verOffset+8);
  }
  // In MSIE, the true version is after "MSIE" in userAgent
  else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
   browserName = "Microsoft Internet Explorer";
   fullVersion = nAgt.substring(verOffset+5);
  }
  // In Chrome, the true version is after "Chrome" 
  else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
   browserName = "Chrome";
   fullVersion = nAgt.substring(verOffset+7);
  }
  // In Safari, the true version is after "Safari" or after "Version" 
  else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
   browserName = "Safari";
   fullVersion = nAgt.substring(verOffset+7);
   if ((verOffset=nAgt.indexOf("Version"))!=-1) 
     fullVersion = nAgt.substring(verOffset+8);
  }
  // In Firefox, the true version is after "Firefox" 
  else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
   browserName = "Firefox";
   fullVersion = nAgt.substring(verOffset+8);
  }
  // In most other browsers, "name/version" is at the end of userAgent 
  else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
        (verOffset=nAgt.lastIndexOf('/')) ) 
  {
   browserName = nAgt.substring(nameOffset,verOffset);
   fullVersion = nAgt.substring(verOffset+1);
   if (browserName.toLowerCase()==browserName.toUpperCase()) {
    browserName = navigator.appName;
   }
  }
  // trim the fullVersion string at semicolon/space if present
  if ((ix=fullVersion.indexOf(";"))!=-1)
     fullVersion=fullVersion.substring(0,ix);
  if ((ix=fullVersion.indexOf(" "))!=-1)
     fullVersion=fullVersion.substring(0,ix);

  majorVersion = parseInt(''+fullVersion,10);
  if (isNaN(majorVersion)) {
   fullVersion  = ''+parseFloat(navigator.appVersion); 
   majorVersion = parseInt(navigator.appVersion,10);
  }

//////////////////////得到手机的设备名称
  operate_relase = "";
  var OS_Name = navigator.appVersion;
          if (OS_Name.indexOf("Win") != -1) {	 
        operate = "Windows";
        
        if ((OS_Name.indexOf("Windows 95") != -1)||
        (OS_Name.indexOf("Win95") != -1) ||
        (OS_Name.indexOf("Windows_95") != -1)
        ) {	 
          operate_relase = "Windows 95";
        }else if ((OS_Name.indexOf("Windows 98") != -1)||
        (OS_Name.indexOf("Win98") != -1)) {	
          operate_relase = "Win98";
          
        }else if ((OS_Name.indexOf("Windows NT 5.0") != -1)||
        (OS_Name.indexOf("Windows 2000") != -1)) {	
          operate_relase = "Windows 2000";
          
        }else if ((OS_Name.indexOf("Windows NT 5.1") != -1)||
        (OS_Name.indexOf("Windows XP") != -1)) {	
          operate_relase = "Windows XP";
          
        }else if (OS_Name.indexOf("Win16") != -1) {	
          operate_relase = "Windows 3.11";
          
        }else if (OS_Name.indexOf("Windows NT 5.2") != -1) {	
          operate_relase = "Windows Server 2003";
          
        }else if (OS_Name.indexOf("Windows NT 6.0") != -1) {	
          operate_relase = "Windows Vista";
          
        }else if (OS_Name.indexOf("Windows NT 6.1") != -1) {	
          operate_relase = "Windows 7";
          
        }else if ((OS_Name.indexOf("Windows NT 4.0") != -1)||
        (OS_Name.indexOf("WinNT4.0") != -1) ||
        (OS_Name.indexOf("WinNT") != -1)||
        (OS_Name.indexOf("Windows NT") != -1)) {	
          operate_relase = "Windows NT 4.0";
        }else if (OS_Name.indexOf("Windows ME") != -1) {	
          operate_relase = "Windows ME";
        }

        
          } else if (OS_Name.indexOf("Mac") != -1) {
        operate = "Mac OS";	
          } else if (OS_Name.indexOf("X11") != -1) {
        operate = "Unix";	
          } else if (OS_Name.indexOf("Linux") != -1) {
        operate = "Linux";
          } else if (OS_Name.indexOf("SunOS") != -1) {
        operate = "Sun OS";
          } else if (OS_Name.indexOf("OpenBSD") != -1) {
        operate = "Open BSD";
        
      } else if (OS_Name.indexOf("QNX") != -1) {
        operate = "QNX";
      } else if (OS_Name.indexOf("BeOS") != -1) {
        operate = "BeOS";
      } else if (OS_Name.indexOf("OS/2") != -1) {
        operate = "OS/2";
      } else if ((OS_Name.indexOf("nuhk") != -1) 
      || (OS_Name.indexOf("Googlebot") != -1)
      || (OS_Name.indexOf("Yammybot") != -1)
      || (OS_Name.indexOf("Openbot") != -1)
      || (OS_Name.indexOf("Slurp") != -1)
      || (OS_Name.indexOf("MSNBot") != -1)
      || (OS_Name.indexOf("Ask Jeeves/Teoma") != -1)
      || (OS_Name.indexOf("ia_archiver") != -1)
      ) {
        operate = "Search Bot";
      }else{
        operate = "unknow";
      }
  /////////////////////

  //通过参数,得到url中参数的值
  function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
      results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
  }
  //得到当前的时间
  function getDate(){
    var currentdate = new Date(); 
    
    month = currentdate.getMonth();if(month<10){month = "0"+month;}
    day = currentdate.getDate();if(day<10){day = "0"+day;}
    hours = currentdate.getHours();if(hours<10){hours = "0"+hours;}
    minutes = currentdate.getMinutes();if(minutes<10){minutes = "0"+minutes;}
    second = currentdate.getSeconds();if(second<10){second = "0"+second;}
    var datetime =  currentdate.getFullYear() + "-"  
        + month  + "-" 
        + day + " "
                + hours + ":"  
                + minutes + ":" 
                + second;
    return datetime ;
  }
  
  
  
  //得到设备名称
  function getDevice(){
    var isMobile = {
      Android: function() {
      return navigator.userAgent.match(/Android/i);
      },
      webOS:function() {
      return navigator.userAgent.match(/webOS/i);
      },
      BlackBerry: function() {
      return navigator.userAgent.match(/BlackBerry/i);
      },
      iPhone: function() {
      return navigator.userAgent.match(/iPhone/i);
      },
      iPad: function() {
      return navigator.userAgent.match(/iPad/i);
      },
      iPod: function() {
      return navigator.userAgent.match(/iPod/i);
      },
      Opera: function() {
      return navigator.userAgent.match(/Opera Mini/i);
      },
      Windows: function() {
      return navigator.userAgent.match(/IEMobile/i);
      },
      any: function() {
      return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iPad() ||isMobile.iPod() || isMobile.iPhone() || isMobile.Opera() || isMobile.Windows());
      }
    };
    var str = "";
    if( isMobile.Android() ) { str = "Android";  }
    if( isMobile.webOS() ) { str = "webOS";  }
    if( isMobile.BlackBerry() ) { str = "BlackBerry";  }
    if( isMobile.iPhone() ) { str =  "iPhone";  }
    if( isMobile.iPad() ) { str =  "iPad";  }
    if( isMobile.iPod() ) { str =  "iPod";  }
    if( isMobile.Opera() ) { str =  "Opera";  }
    if( isMobile.Windows() ) { str =  "Windows";  }
    if(str){
      return "Mobile:"+str;
    }else{
      return "PC";
    }
    
  }
  
  //////////////
  function s4() {
    return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
  };
   
  function guid() {
    return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
  }
  ////得到唯一标示码uuid 
  var uuid = guid();
  ////设置cookie,默认是设置天  expires代表的是天数。
  function Set_Cookie( name, value, expires, path, domain, secure )
  {
    // set time, it's in milliseconds
    
    domain = document.domain;
    
    domain = domain.replace("www.","");
    
    var today = new Date();
    today.setTime( today.getTime() );

    /*
    if the expires variable is set, make the correct
    expires time, the current script below will set
    it for x number of days, to make it for hours,
    delete * 24, for minutes, delete * 60 * 24
    */
    if ( expires )
    {
      expires = expires * 1000 * 60 * 60 * 24;
    }else{
      expires = expires * 20 * 365 * 1000 * 60 * 60 * 24;
    }
    var expires_date = new Date( today.getTime() + (expires) );
    
    this_expires = expires/1000;
    //document.write("thisdomain:"+domain+"<br/>");
    document.cookie = name + "=" +escape( value ) +
    ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
    ( ( path ) ? ";path=" + path : "" ) +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
    
    
  }
  //得到cookie
  function Get_Cookie( check_name ) {
    // first we'll split this cookie up into name/value pairs
    // note: document.cookie only returns name=value, not the other components
    var a_all_cookies = document.cookie.split( ';' );
    var a_temp_cookie = '';
    var cookie_name = '';
    var cookie_value = '';
    var b_cookie_found = false; // set boolean t/f default f

    for ( i = 0; i < a_all_cookies.length; i++ )
    {
      // now we'll split apart each name=value pair
      a_temp_cookie = a_all_cookies[i].split( '=' );


      // and trim left/right whitespace while we're at it
      cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

      // if the extracted name matches passed check_name
      if ( cookie_name == check_name )
      {
        b_cookie_found = true;
        // we need to handle case where cookie has no value but exists (no = sign, that is):
        if ( a_temp_cookie.length > 1 )
        {
          cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
        }
        // note that in cases where cookie is initialized but no value, null is returned
        return cookie_value;
        break;
      }
      a_temp_cookie = null;
      cookie_name = '';
    }
    if ( !b_cookie_found )
    {
      return null;
    }
  }
  //删除cookie
  function Delete_Cookie( name, path, domain ) {
    if ( Get_Cookie( name ) ) document.cookie = name + "=" +
    ( ( path ) ? ";path=" + path : "") +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
  }
  
  
    var params = {};
  
  // 设置  cid   如果新的cid访问,那么cid将会被覆盖。 
  cid = getParameterByName("cid");
  var cookie_cid = Get_Cookie("cid");
  
  if(cid){
    //set cid cookie.
    params.cid = cid;
    Set_Cookie( "cid", cid, 7, "/", '', '' );
  }else if(cookie_cid){
    params.cid = cookie_cid;
  }
  
  //设备
  params.devide = getDevice();
  params.user_agent = navigator.userAgent;
  var userLang = navigator.language || navigator.userLanguage; 
  params.browser_name 	= browserName;  //浏览器名称
  params.browser_version 	= majorVersion;  //浏览器版本
  params.browser_date 	= getDate();  //浏览器时间
  params.browser_lang 	= userLang;   //浏览器语言
  params.operate 			= operate;     //操作系统
  params.operate_relase 	= operate_relase;  //操作系统详细
  
  
  
    //Document对象数据
  //通过加入下面的代码,来辨别是否是老客户
  //标准为:refer domain为空,或者不包含  && _fta 这个cookie存在
  //在数据分析中,客户中间客户点击刷新页面,也会被标示成return:1,因此,在分析的时候,需要找UID
  //最小的那个,查看refer。
    if(document) {
    params.domain = document.domain || '';   //域名
    params.url = document.URL || '';    //当前url
    params.title = document.title || '';   //当前title
    params.refer_url = document.referrer || '';  //来源referrer
    
    
    //thisrefer =  document.referrer || '';
    //refer_fta_cookie = Get_Cookie( '_fta' );
    
    //此cookie用来判断客户是否是持续的访问网站,如果设置的是6个小时,如果客户在6个小时内第二次访问网站
    //系统会认为这是客户的一次连贯的访问。第二次访问后,此cookie会更新超时时间
    _fto = Get_Cookie( '_fto' );  
    // //永久cookie,这个cookie存在,那么说明是老客户了
    _fta = Get_Cookie( '_fta' );   
    
    if(_fto){
      //继续的访问,访问的延伸。无所谓refer,和return
      //更新超时时间:
      Set_Cookie( '_fto',1, 0.25, '/', '', '' );   //online - one day
    }else{
      //相当于第一次访问。
      
      thisreferrer = document.referrer || '';
      // 存在refer 则记录refer  ,如果不存在,则设置redirect
      if(!thisreferrer){
        thisreferrer_domain = "redirect";
      }else{
        thisreferrer_domain = thisreferrer.replace('http://','').replace('https://','').split(/[/?#]/)[0];
      }
      // 第一次访问网站的时候会记录访问来源。
      Set_Cookie( '_ftreferdomain',thisreferrer_domain, 1, '/', '', '' );   //refer  - one day
      // 第一次访问的时候会设置_fto为6个小时。
      Set_Cookie( '_fto',1, 0.25, '/', '', '' );   //online - one day
          
        
      //如果存在_fta 则代表这个客户肯定访问过网站信息。
      if(_fta){
        //老客户,设置的cookie:来源域名,是否在线,是否是老客户
        Set_Cookie( '_ftreturn',1, 36500, '/', '', '' );   // is return  - one day
      }else{
        //新客户
        Set_Cookie( '_ftreturn',0, 36500, '/', '', '' );   // is return  - one day
      }
    }
    //referrer 域名,是否是老客户,是否是在线状态
    params.first_referrer_domain = Get_Cookie('_ftreferdomain');
    params.is_return = Get_Cookie('_ftreturn');
    //params.online = Get_Cookie('_fto');

    
    //设置uuid,如果 _fta存在,那么设置uuid为它的值,如果不存在,那么重新获取uuid。
    if(cookie_uuid = Get_Cookie('_fta') ){
      params.uuid = cookie_uuid;
    }else{
      params.uuid = uuid;
      Set_Cookie( '_fta', uuid, 36500, '/', '', '' );
    }
    
    
    
    }
    //Window对象数据
    if(window && window.screen) {
    //params.sh = window.screen.height || 0;
    //屏幕分辨率和屏幕的画质
    if(window.devicePixelRatio){
      devicePixelRatio = window.devicePixelRatio;
      params.device_pixel_ratio = devicePixelRatio;
      params.resolution = (window.screen.width*devicePixelRatio || 0) +"x"+ (window.screen.height*devicePixelRatio || 0);
    }else{
      params.resolution = (window.screen.width || 0) +"x"+ (window.screen.height || 0);
    }
    params.color_depth = window.screen.colorDepth || 0;
    }
  
    
  
  
    //解析_maq配置
  if(_maq) {
    for(var i in _maq) {
      x = _maq[i][0];
      if(x){
        //email
        //当前的customer email如果和cookie一样,那么使用customer email
        //如果不一样,那么保存customer email到cookie _fte
        //对于customer name同样也是这样
        if(x == 'login_email'){
          current_customer_email = _maq[i][1];
          //存在cookie 
          if(cookie_customer_email = Get_Cookie( '_fte' )){
            //当前cookie存在,并且与传递过来的相同
            if(current_customer_email != cookie_customer_email){
              Set_Cookie( '_fte', current_customer_email, '36500', '/', '', '' );
            }
          //不存在cookie
          }else{
            Set_Cookie( '_fte', current_customer_email, '36500', '/', '', '' );
          }
          params[x] = current_customer_email;
        
        }else{
          params[x] = _maq[i][1];
        }
      }
    }
  }
  //如果cookie中存在客户邮箱,那么从cookie中获取
  if(!params.login_email){
    if(Get_Cookie( '_fte' )){
      params.login_email = Get_Cookie( '_fte' )
    }
  }
  
    //拼接参数串,形成url,然后通过图片的方式传递数据
    var args = '';
    for(var i in params) {
    if(args != '') {
      args += '&';
    }
    args += i + '=' + encodeURIComponent(params[i]);
    }
     
    //通过Image对象请求后端脚本
    var img = new Image(1, 1);
    img.src = 'http://trace.tomtop.com/trace.php?' + args;
 })();

原理:js手机的数据,通过参数的方式拼成一个url  :http://trace.tomtop.com/trace.php? xxxxx ,然后把数据传递给trace.php

 

2. ip找到国家(穿插部分)

Geoip geoip-api-php 库包使用 – 通过ip 找到国家

 

3. php 存储(market.php)这里的geoip就是第二部分的通过ip找到国家

<?php
//exit;
//date_default_timezone_set('Asia/Shanghai');
# 时区
ini_set('date.timezone','UTC');
# ip 库
include("/www/web/market/common/lib/geoip-api-php-1.14/src/geoip.inc");

# log 测试函数
function logdd($info){
  if(is_array($info) || is_object($info)){
    $info = var_export($info,true);
  }
  //echo $info;exit;
  $logfile = './logs/my.log';
  $handle = fopen($logfile,"a+");/*根据需要更改这里的参数*/ 
  $contents = fwrite($handle,$info."\n"); 
  fclose($handle);
      
}


#得到IP地址。
function get_client_ip() {
  $ipaddress = '';
  if (getenv('HTTP_CLIENT_IP'))
    $ipaddress = getenv('HTTP_CLIENT_IP');
  else if(getenv('HTTP_X_FORWARDED_FOR'))
    $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
  else if(getenv('HTTP_X_FORWARDED'))
    $ipaddress = getenv('HTTP_X_FORWARDED');
  else if(getenv('HTTP_FORWARDED_FOR'))
    $ipaddress = getenv('HTTP_FORWARDED_FOR');
  else if(getenv('HTTP_FORWARDED'))
     $ipaddress = getenv('HTTP_FORWARDED');
  else if(getenv('REMOTE_ADDR'))
    $ipaddress = getenv('REMOTE_ADDR');
  else
    $ipaddress = 'UNKNOWN';
  return $ipaddress;
}

//得到国家。通过ip 支持ipv6  已经测试。
function getCountryByIp($ip){
  $gi = geoip_open("/www/web/market/common/lib/geoip/GeoIP.dat", GEOIP_STANDARD);
  if(strstr($ip,":")){
    $country_code = geoip_country_code_by_addr_v6($gi,$ip);
    $country_name = geoip_country_name_by_addr_v6($gi,$ip);
  }else{
    $country_code = geoip_country_code_by_addr($gi,$ip);
    $country_name = geoip_country_name_by_addr($gi,$ip);
  }
  geoip_close($gi);
  return [
    "country_code" => $country_code,
    "country_name" => $country_name,
  ];
}

#得到递增id
/*
function increament($m,$db_name,$tablename){
  
  $ids = "ids";
  $db_name = "tracedb";
  $db = $m->selectDB($db_name);
  $col = $m->selectDB($db_name)->$ids;
  
  $query = array('name'=>'trace_2014_11_24');
  $update = array('?inc'=>array('id'=>1));
  $result = $db->command(
            array(
            "findandmodify" => "ids",
            "query" => $query,
            "update" => $update,
            )
          );

  return $result['value']['id'];
} 
*/

$delay_time = " -0 hours";	
$insertTimeStamp = strtotime(date('Y-m-d H:i:s').' '.$delay_time);
$insertDateTime = date('Y-m-d H:i:s',$insertTimeStamp);
$insertDate = date('Y-m-d',$insertTimeStamp);
$get 						= array();
$get['ip'] 					= get_client_ip();
#$get['server_datetime']	= date('Y-m-d H:i:s',strtotime('-12 hours'));    //+3 hours  延后12个小时,美国时间
$get['service_date_str']	= $insertDate;
$get['service_datetime'] 	=  new MongoDate($insertTimeStamp);   #北京时间
$get['service_timestamp'] 	=  (float)$insertTimeStamp;
foreach($_GET as $k=>$v){
  $get[$k] = $v;
}
  # ip6 example
  #$get['ip'] = "2001:0DB8:0:0:0:0:1428:0000";
$ip 					= $get['ip'];
$website_id 			= $get['website_id'];
$countInfo 				= getCountryByIp($ip);
$get['country_code'] 	= $countInfo['country_code'];
$get['country_name'] 	= $countInfo['country_name'];


#连接到mongodb
$m = new MongoClient('mongodb://localhost:27017');
$database_name 		= "tracedb";  
#trace_网站编号_年份_月_initial_data
$collection_name 	= "trace_".$website_id."_".date("Y_m",strtotime($delay_time))."_initial_data";
$db 		= $m->$database_name;
$collection = $db->$collection_name;
#得到递增id。
#$id = increament($m,$database_name,$collection_name);

#$get["_id"] = $id; 
#var_dump($get);
#订单信息
if($get['order']){
  $get['order'] = json_decode($get['order'],true);
  $get['order_status'] = 'fail';
}
#购物车信息。
if($get['cart']){
  $get['cart'] = json_decode($get['cart']);
}

#购物车信息。
if($get['search']){
  $get['search'] = json_decode($get['search']);
}


#插入数据到mongodb
if(!empty($get) && is_array($get)){
  $collection->insert($get);
  echo "Insert succsessfully";
}

   
   
   
   
   
   
   
   
   

这样就把数据保存到mongodb里面去了。

然后就可以通过mongodb的mapreduce进行统计分析数据了。

《类似谷歌,在网站里面嵌入js,接收各种浏览器信息以及网站信息》有1个想法

会跳水的瘸子进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注