Skip to content

Instantly share code, notes, and snippets.

@justinboyle
Created November 21, 2013 21:35
Show Gist options
  • Save justinboyle/7590114 to your computer and use it in GitHub Desktop.
Save justinboyle/7590114 to your computer and use it in GitHub Desktop.
/handlers/analytics.js
var requiem = require('bb-requiem')
, _ = require('underscore')
, cheerio = require('cheerio')
module.exports = function(app){
return {index: getCore()}
}
function getCore() {
return function(req, res, next) {
var request = requiem(req,res)
, uri
if( req.query.bb) {
uri = req.query.bb;
request({
uri: uri,
proxy_cookies: true,
}, function(err, response, body) {
if(err){ return /* ignore */ }
var $ = cheerio.load(body)
, pageDotomiScript = $('script:contains(dotomi)').text().replace(/YUI.+/,"\n")
, pageDotomi = "jQuery('body').append('<script>"+pageDotomiScript+"</script>');"
, pageGoogleConv = $('script:contains(google_tag_params)').text()
, pageGoogle = "jQuery('body').append('<script>"+pageGoogleConv+"</script>');"
, yuiCstVar = $('script:contains(app.spvTracking)').text().match(/CustomVars: '.+/)
, cnseSoid = $('script:contains(app.cnsesSoID)').text().match(/YUI_config.app.cnsesSoID.+/)
, nanigans = $('img[src*="nanigans"]')
, nanigansApp = "jQuery('body').append(" + nanigans + ");"
, faceBk = $('img[src*="offsite_conversion"]')
, faceBkApp = "jQuery('body').append(" + faceBkApp + ");"
try {
var yuiCust = yuiCstVar[0].replace(/CustomVars: /,"")
yuiCust = yuiCust.replace(/,/,"")
var temp = cnseSoid[0].replace(/[a-zA-Z]+.+ =/,"")
cnSoID = temp.replace(/;/,"").trim()
//wayfairs inhouse analytics
if(typeof req.cookies.CSN !== 'undefined'){
var CSN = req.cookies.CSN;
CSN = CSN.replace(/g_zip=\d+&/,"")
} else {
var CSN = 'CSNID=null'
}
var cstmVars = yuiCust
if(typeof req.cookies.CSNUtId !== 'undefined'){
var userID = req.cookies.CSNUtId;
}
// enforce that cstmVars and rfCstmVars end's with a semicolon
if (cstmVars.charAt(cstmVars.length - 1) != ';') {
cstmVars += ';';
}
if (/shipping/.test(uri)){
cstmVars = cstmVars.replace(/PageType\=CheckoutLogin/,'PageType=CheckoutShippingLoggedIn');
} else if (/billing/.test(uri)){
cstmVars = cstmVars.replace(/PageType\=CheckoutLogin/,'PageType=CheckoutPayment');
} else if (/revieworder/.test(uri)) {
cstmVars = cstmVars.replace(/PageType\=CheckoutLogin/,'PageType=CheckoutReviewOrder');
}
var img = '//www.csnstores.com/asp/ajaxrequests/spv/spv2.php?rf' + CSN
+ '&rfHTTPReferer='+encodeURIComponent(req.headers.referer)
+ '&rfURL='+encodeURIComponent(req.query.bb)+'&rfGUID='+encodeURIComponent(userID)
+ '&rfSoID=' + cnSoID + '&rfCstmVars='+encodeURIComponent(cstmVars+'Mobile=1;')
var imgSpl = img.split("'")
, imgLen = imgSpl.length
for(var i = 0; i < imgLen;i++){
img = img.replace(/'/,'')
}
var spvImg = "jQuery('body').append('<img src=\""+img+"\">');"
var analyticsScript = pageGoogle + spvImg + pageDotomi + nanigansApp + faceBkApp
var anlSpl = analyticsScript.split("\n")
, anlLen = anlSpl.length
for(i = 0; i<anlLen;i++){
analyticsScript = analyticsScript.replace(/\n/,'')
}
res.jsonp(analyticsScript)
} catch (e) {
console.warn('Analytics missing on this url: ' + uri);
}
})
} else {
res.jsonp('')
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment