|
| 1 | +<script type="text/javascript"> |
| 2 | + // Inject TD JS SDK. |
| 3 | + !function(t,e){if(void 0===e[t]){e[t]=function(){e[t].clients.push(this),this._init=[Array.prototype.slice.call(arguments)]},e[t].clients=[];for(var r=function(t){return function(){return this["_"+t]=this["_"+t]||[],this["_"+t].push(Array.prototype.slice.call(arguments)),this}},s=["addRecord","blockEvents","fetchServerCookie","fetchGlobalID","fetchUserSegments","resetUUID","ready","setSignedMode","setAnonymousMode","set","trackEvent","trackPageview","trackClicks","unblockEvents"],n=0;n<s.length;n++){var c=s[n];e[t].prototype[c]=r(c)}var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src=("https:"===document.location.protocol?"https:":"http:")+"//cdn.treasuredata.com/sdk/4.1/td.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a)}}("Treasure",this); |
| 4 | + |
| 5 | + // Create test datalayer. |
| 6 | + window.testDataLayer = window.testDataLayer || []; |
| 7 | + testDataLayer.push( |
| 8 | + { |
| 9 | + "test" : "testing" |
| 10 | + }); |
| 11 | + console.log("DL ready"); |
| 12 | + console.log(testDataLayer); |
| 13 | + |
| 14 | + // Initialize TD. |
| 15 | + var td = new Treasure({ |
| 16 | + host: 'us01.records.in.treasuredata.com', // US RT endpoint |
| 17 | + writeKey: 'xxx/yyyyy', // write-only TD API key |
| 18 | + database: 'zzz', // TD database |
| 19 | + // Send td_ip, td_user_agent, td_path, td_host, td_client_id and td_global_id from the beginning, if set. (Should ask for consent from website visitors first!) |
| 20 | + startInSignedMode: true |
| 21 | + }); |
| 22 | + |
| 23 | + // Send td_ip, td_user_agent, td_path, td_host, td_client_id and td_global_id, if set. (Should ask for consent from website visitors first!) |
| 24 | + td.setSignedMode(); |
| 25 | + td.set('$global', 'td_global_id', 'td_global_id'); |
| 26 | + // Pass a value from testDataLayer. |
| 27 | + td.set('pageviews', {login_status: testDataLayer[0]}); |
| 28 | + console.log(testDataLayer[0]); |
| 29 | + // Track page view information to 'pageviews' table. |
| 30 | + td.trackPageview('pageviews'); |
| 31 | + console.log("Pageviews sent"); |
| 32 | + |
| 33 | + // Initialize a data layer to store the segment ids and segment names in. |
| 34 | + window.papiDataLayer = window.papiDataLayer || []; |
| 35 | + |
| 36 | + // Initialize TD. |
| 37 | + var fetchSegment = function(lookupKey, token) { |
| 38 | + // Catch and process PAPI result from TD. |
| 39 | + var successCallback = function(callbackResults) { |
| 40 | + var papiData = JSON.parse(JSON.stringify(callbackResults[0])) // PAPI response (JSON). |
| 41 | + var segmentIds = papiData["values"]; // Segment ID from PAPI response. |
| 42 | + // Note: The below reverse lookup will be unnecessary once PAPI responds with segment names as well. |
| 43 | + var servletUrl = 'aaa'; |
| 44 | + |
| 45 | + // Reverse lookup segment id to obtain segment name (servlet calling TD's Audience API in the backend). |
| 46 | + // Build the segment ids as query parameters. |
| 47 | + if (segmentIds.length > 0) { |
| 48 | + var segmentIdArr = ""; |
| 49 | + for (var j = 0; j < segmentIds.length; j++) { |
| 50 | + if(segmentIds[j]) { |
| 51 | + segmentIdArr = segmentIdArr + "segmentid=" + segmentIds[j] + "&"; |
| 52 | + } |
| 53 | + }; |
| 54 | + segmentIdArr = segmentIdArr.slice(0, -1); |
| 55 | + |
| 56 | + // Call to servlet. |
| 57 | + var xhr = new XMLHttpRequest(); |
| 58 | + xhr.onreadystatechange = function() { |
| 59 | + if (xhr.readyState == 4) { |
| 60 | + var audienceData = JSON.parse(xhr.responseText); // JSON response from servlet. |
| 61 | + // Add segment names and ids to data layer. |
| 62 | + for (var i = 0; i < audienceData.length; i++) { |
| 63 | + var dataToPush = { |
| 64 | + "segment name" : audienceData[i]["name"], // TD Segment name |
| 65 | + "segment id" : audienceData[i]["id"] // TD Segment id |
| 66 | + } |
| 67 | + papiDataLayer.push(dataToPush); |
| 68 | + } |
| 69 | + } |
| 70 | + } |
| 71 | + xhr.open('GET', servletUrl + segmentIdArr, true); |
| 72 | + xhr.send(null); |
| 73 | + } |
| 74 | + } |
| 75 | + |
| 76 | + // PAPI error handling - output to browser console. |
| 77 | + var errorCallback = function(error) { |
| 78 | + console.log(error); |
| 79 | + } |
| 80 | + |
| 81 | + // Fetch data from PAPI. |
| 82 | + td.fetchUserSegments({ |
| 83 | + audienceToken: [token], // TD PAPI token |
| 84 | + keys: {td_client_id: lookupKey} // td_client_id (first-party cookie) |
| 85 | + }, successCallback, errorCallback); |
| 86 | + } |
| 87 | + |
| 88 | + // Function to get td_client_id. |
| 89 | + // Input: cookie name, e.g. "_td" |
| 90 | + // Output: cookie value |
| 91 | + function get_cookie(cookie_name) { |
| 92 | + var result = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)'); |
| 93 | + if(result) |
| 94 | + return unescape(result[2]); |
| 95 | + else |
| 96 | + console.log("Error: Cookie not found."); |
| 97 | + } |
| 98 | + |
| 99 | + // Kick-off PAPI |
| 100 | + setTimeout(function() { |
| 101 | + var lookupKey = get_cookie("_td"); // td_client_id |
| 102 | + var token = "aaa"; // TD PAPI token |
| 103 | + fetchSegment(lookupKey, token); |
| 104 | + }, 2500); |
| 105 | + console.log("PAPI sent"); |
| 106 | +</script> |
0 commit comments