2015-03-18 13 views
9

मेरे पास एक विशेष स्थिति है जहां साइट विज़िटर किसी निश्चित डोमेन से पृष्ठ तक पहुंच सकते हैं लेकिन कोई अन्य नहीं। इसलिए जब तक वे सर्वर पर संग्रहीत होते हैं तब तक HTML और संपत्ति कोई समस्या नहीं होती है। दूसरी ओर Google Analytics को Googles सर्वर से analytics.js डाउनलोड करने की आवश्यकता है, जो असंभव है।Google Analytics प्रॉक्सी

तो मैं इसे प्रॉक्सी करने का एक तरीका ढूंढ रहा हूं। वेबसर्वर के पास इंटरनेट का उपयोग होता है और यह ट्रैफिक रिले कर सकता है। मेरे पृष्ठ दृश्य के बारे में Google को रिपोर्ट करने के लिए, यहां वर्णित Google से एक पिक्सेल जीआईएफ डाउनलोड किया गया है: https://developers.google.com/analytics/resources/concepts/gaConceptsTrackingOverview

मुझे लगता है कि जीआईएफ में सभी पैरामीटर प्राप्त करना और मापने के लिए माप प्रोटोकॉल का उपयोग करना आसान होगा सर्वर से Google - लेकिन यह सब जानकारी सर्वर पर यह जानकारी प्राप्त करना मुश्किल है। Analytics.js को डाउनलोड करने और इसे अपने सर्वर पर जाने के लिए संशोधित करने के लिए मुझे एक हैक के रूप में लगता है जो भविष्य में सबूत नहीं है। उपयोगकर्ता से सर्वर पर वर्तमान पृष्ठ प्राप्त करने के लिए एक बड़ा सौदा नहीं है, लेकिन हम उपयोगकर्ता आईडी, ब्राउज़र संस्करण और Analytics के साथ जो कुछ भी प्राप्त करते हैं उसे प्राप्त करना चाहते हैं।

आप यह कैसे करेंगे? क्या आपको इसके लिए समाधान मिल रहा है?

+0

इससे पहले कि मैं इसका जवाब दे सकूं, इसमें कुछ समय लगेगा (यह कुछ समझाता है और मैं अभी काम पर हूं), लेकिन इस पल के लिए कि आपके लिंक की जानकारी पुरानी है। जीए जावास्क्रिप्ट क्लाइंट का वर्तमान संस्करण स्वयं माप प्रोटोकॉल पर बना है और इस प्रकार माप प्रोटोकॉल एंडपॉइंट (जो अभी भी एक gif देता है) को डेटा भेजता है, और पैरामीटर नाम बदल गए हैं। –

+0

ठीक है, जानना अच्छा है! मैं बाद में आपसे अधिक मदद की उम्मीद कर रहा हूं :) अब तक धन्यवाद। –

+0

सिर्फ जिज्ञासा के लिए, क्या आपने कभी इसे उत्पादन में उपयोग किया है और यह कैसे काम करता है? –

उत्तर

15

जैसा कि मेरी टिप्पणी में बताया गया है utm.gif अब उपयोग नहीं किया गया है। Google Analytics ने मापन प्रोटोकॉल पर पूरी तरह से स्विच किया है और डेटा अब google-analytics.com/collect पर मापन प्रोटोकॉल के लिए एंडपॉइंट पर भेजा गया है। असल में यह एक पारदर्शी पिक्सेल लौटाता है क्योंकि पैरामीटर के साथ एक छवि को कॉल करने से डोमेन सीमाओं में सूचनाओं को प्रसारित करने का एक संभावित तरीका है।

अब, आप केवल अपने मापन प्रोटोकॉल को अपने स्वयं के Google Analytics ट्रैकर को लागू करने के लिए कर सकते हैं।

quote myself करने के लिए:

प्रत्येक कॉल आपने जिस खाते, आपको क्लाइंट ID कि सत्र में समूह बातचीत के लिए अनुमति देता डेटा भेजने के लिए चाहते हैं के कम से कम आईडी भी शामिल है (तो यह प्रति आगंतुक अद्वितीय होना चाहिए , लेकिन इसे उपयोगकर्ता व्यक्तिगत रूप से पहचानना नहीं चाहिए), एक इंटरैक्शन प्रकार (पृष्ठदृश्य, घटना, समय इत्यादि, कुछ इंटरैक्शन प्रकारों को अतिरिक्त पैरामीटर की आवश्यकता होती है) और का प्रोटोकॉल जिसका उपयोग आप कर रहे हैं (फिलहाल केवल एक ही है संस्करण)।

तो एक पृष्ठ दृश्य रिकॉर्ड करने के लिए सबसे बुनियादी उदाहरण इस प्रकार दिखाई देगा:

www.google-analytics.com/collect/v=1 & टीआईडी ​​= UA-XXXXY & सीआइडी = 555 & टी = पृष्ठदृश्य & डीपी =% 2 फ़्मीपेज

शायद आप उपयोगकर्ता आईपी (स्वचालित रूप से अनामित हो जाएगा) और उपयोगकर्ता एजेंट जोड़ना चाहते हैं।

हालांकि ऐसा लगता है कि आप डेटा एकत्र करने के लिए मानक Analytics कोड का उपयोग करना पसंद करते हैं और ट्रैकिंग सर्वर को अपने सर्वर के माध्यम से रिले करते हैं। जबकि मैंने उत्पादन में निम्नलिखित का उपयोग नहीं किया है, मुझे कोई कारण नहीं दिख रहा है कि यह क्यों काम नहीं करेगा।

सबसे पहले आपको analytics.js फ़ाइल की आवश्यकता है। फाइल को स्वत: होस्ट करना निराश है, लेकिन दिया गया कारण यह है कि कोड कभी-कभी Google द्वारा अपडेट किया जाता है और यदि आप इसे स्वयं होस्ट करते हैं तो आप अपडेट को याद कर सकते हैं। इसका उपयोग क्रॉन जॉब को सेट करके किया जा सकता है जो फ़ाइल को नियमित रूप से आपके सर्वर पर डाउनलोड करता है ताकि आपके पास हमेशा एक मौजूदा संस्करण हो।

इसके बाद आप अपने खुद के सर्वर से कोड को लोड करने जीए बूटस्ट्रैप समारोह अनुकूलन चाहते हैं:

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    })(window,document,'script','//www.myserver.com/analytics.js','ga'); 
अब आप कोड है, लेकिन अभी भी ट्रैकिंग कॉल में यानी एनालिटिक्स सर्वर पर भेज दिया जाएगा (

आपका मामला यह बिल्कुल नहीं भेजा जाएगा)। इसलिए आपको अपने सर्वर के माध्यम से कॉल को फिर से रूट करने की आवश्यकता है।

यह संभव बनाने के लिए Google (सार्वभौमिक) Analytics कोड में feature called "tasks". कार्य ट्रैकिंग कोड के भीतर कार्य हैं जिसमें ट्रैकिंग कॉल एकत्र किया जा रहा है।

कार्यकर्ता ऑब्जेक्ट के "सेट" फ़ंक्शन का उपयोग कर कार्य को संशोधित करना संभव है, कार्यनाम का उपयोग पैरामीटर के रूप में करते हुए और कार्य फ़ंक्शन को ओवरराइट/अधिभारित करने वाले फ़ंक्शन को पास करना संभव है।

पीछा कर रहा है काफी गूगल दस्तावेज़ से उदाहरण (सिवाय मैं हिस्सा है जहां डेटा अभी भी गूगल के लिए भेजा जा रहा है छोड़े गए - आप इस बिंदु पर यह जरूरत नहीं है):

ga('create', 'UA-XXXXX-Y', 'auto'); 

ga(function(tracker) { 

    tracker.set('sendHitTask', function(model) { 
    var payLoad = model.get('hitPayload'); 
    var gifRequest = new XMLHttpRequest(); 
    var gifPath = "/__ua.gif"; 
    gifRequest.open('get', gifPath + '?' + payLoad, true); 
    gifRequest.send(); 
    }); 
}); 

ga('send', 'pageview'); 

अब इस डेटा को अपने सर्वर पर __ua.gif नामक फ़ाइल में भेजता है (यदि आपको डेटा क्रॉस-डोमेन भेजने की आवश्यकता है तो आप बस एक var ua = नई छवि कर सकते हैं; ua.src = gifPath + '?' + छवि बनाने के लिए payLoad निवेदन)।

sendHitTask-मॉडल में मॉडल पैरामीटर (पेलोड के बहुत सारे ओवरहेड के अलावा) है, जो असेंबल क्वेरी स्ट्रिंग है जिसमें एनालिटिक्स डेटा होता है। फिर आप अपनी _ua.gif एक स्क्रिप्ट बना सकते हैं जो google-analytics.com/collect के अनुरोध को प्रॉक्सी करता है।

इस बिंदु पर तो आप & यूआईपी (उपयोगकर्ता आईपी ओवरराइड) और & ua (उपयोगकर्ता एजेंट ओवरराइड) मानकों (https://groups.google.com/forum/#!msg/google-analytics-measurement-protocol/8TAp7_I1uTk/KNjI5IGwT58J) शामिल करनी होगी उपयोगकर्ता एजेंट, अपनी स्क्रिप्ट और आईपी पते अपने सर्वर की है कि हो जाएगा हो जाएगा करने के लिए भौगोलिक और तकनीकी जानकारी प्राप्त करें।

यदि आप अधिक साहसी महसूस कर रहे हैं तो आप इसके बजाय buildHitTask ओवरराइड कर सकते हैं और वहां अतिरिक्त पैरामीटर को जोड़ने और जोड़ने की संभावना है (संभवतः आपको कहीं से अधिक आईपी पता प्राप्त करने की आवश्यकता होगी)।

अतिरिक्त पैरामीटर के लिए analytics.js और Measurement Protocol के संदर्भ देखें।

+0

क्या एक उत्कृष्ट जवाब है! आपका बहुत बहुत धन्यवाद। मैं कार्यों के बारे में कुछ और पढ़ूंगा और हम देखेंगे कि मैं इसे ठीक करने का प्रबंधन करता हूं :) –

+0

अब एक समस्या जो दिमाग में आती है वह यह है कि टाइमआउट सेट करना मुश्किल है - मोबाइल उपयोगकर्ताओं के लिए 1s इतना नहीं है, और यदि मैं इसे बढ़ाएं कुछ रिकॉर्ड खो जाएंगे। मैं पहले AJAX के साथ analytics.js लोड करने का प्रयास करूंगा, और यदि यह सफल होता है - सामान्य स्निपेट करें (यदि मैं भाग्यशाली हूं तो ब्राउज़र इसे कैश करेगा और इसे दो बार डाउनलोड नहीं करेगा)। –