2012-12-13 23 views
8

मैंने अपने आप को यह समझने की सख्त कोशिश की है, और इस सवाल के साथ SO में नहीं आना चाहता था, लेकिन मैं अपने wits अंत में हूं (एपीआई/ओथ डॉक्स)।Google Analytics API V3/OAuth 2

मैं PHP में काम कर रहा हूं और मैं analytics.data.ga.get विधि पर REST का उपयोग कर Google_Client और AnalyticsService कक्षाओं का उपयोग करने से बचने की कोशिश कर रहा हूं।

STEP #1: Create an API Project for a Web Application

मैं api console के पास जाकर विश्लेषण सेवाओं के साथ एक परियोजना बना सकते हैं और एक OAuth क्लाइंट ID और सीक्रेट मिलता है।

मैं इस धारणा के तहत हूं कि मैं Installed Application या Web Application के लिए क्लाइंट आईडी बना सकता हूं क्योंकि मैं प्रारंभिक टोकन हैंडशेकिंग मैन्युअल रूप से कर रहा हूं। कृपया मुझे सुधारें अगर मैं गलत हूं।

मैं वेब अनुप्रयोगों के लिए एक क्लाइंट आईडी बनाएं और गुप्त yyyyyyyyyyyyyyy मेरी ग्राहक आईडी xxxxxxxxxxxxxx.apps.googleusercontent.com, ग्राहक मिलता है, और मेरी पुनर्निर्देशन यूआरआई http://localhost:9002

STEP #2: Request initial API access

मैं इस लिंक दर्ज है; https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=xxxxxxxxxxxxxx.apps.googleusercontent.com&redirect_uri=http://localhost:9002&scope=https://www.googleapis.com/auth/analytics.readonly&access_type=offline

access_type=offline इसलिए है क्योंकि मैं आरईएसटी का उपयोग कर रहा हूं, और हर बार मुझे रीफ्रेश किए गए टोकन की आवश्यकता होने पर "उपयोगकर्ता" (खुद को) रीडायरेक्ट/पॉपअप से मैन्युअल रूप से निपटने की अपेक्षा न करें।

ऊपर अनुरोध रिटर्न http://localhost:9002?code=4/KModH0K_xxxxxxxxxxxxxxxxxxx9Iw.gikOaYRDWywTshQV0ieZDArCOX8XdwI

कोड 4/KModH0K_xxxxxxxxxxxxxxxxxxx9Iw.gikOaYRDWywTshQV0ieZDArCOX8XdwI API टोकन का अनुरोध करने के लिए मेरी अनुमति है।

STEP #3: Request First Token

अपनी कंपनी के IT मुद्दों के कारण, मैं PHP 5.2.17 का उपयोग करने के लिए मजबूर कर रहा हूँ और मैं PHP cURL के लिए उपयोग की जरूरत नहीं है, इसलिए मैं file_get_contents और stream_context_create उपयोग कर रहा हूँ।

पहला टोकन एक PHP file_get_contents() के साथ अनुरोध किया गया है;

$opts = array(
    'http' => array(
     'method' => 'POST', 
     'header' => 'Content-Type: application/x-www-form-urlencoded', 
     'content' => 'code=4/KModH0K_xxxxxxxxxxxxxxxxxxx9Iw.gikOaYRDWywTshQV0ieZDArCOX8XdwI&client_id=xxxxxxxxxxxxxx.apps.googleusercontent.com&client_secret=yyyyyyyyyyyyyyy&redirect_uri=http://localhost:9002&grant_type=authorization_code' 
    ) 
); 

$context = stream_context_create($opts); 

$result = file_get_contents('https://accounts.google.com/o/oauth2/token', false, $context); 
var_dump($result); 

सामग्री पैरामीटर एक पंक्ति में होना चाहिए।

ऊपर कोड लौटाता है मेरी access_token और JSON प्रारूप में refresh_token

string(195) "{ "access_token" : "ya29.AHES6wwwwwwwwwwwwwwwVEBXE6XRbC-Q-pP0wZWdoIm9H804ro", "token_type" : "Bearer", "expires_in" : 3600, "refresh_token" : "1/8tXvdUKcSEcaaxVqqqqqqqqqqqqqoYpj2KSS9qwWI" }"

ताज़ा टोकन मैं एक सुरक्षित जगह में स्टोर करना चाहिए, एक डीबी की तरह या संरक्षित txt फ़ाइल है, जो जब मेरे ACCESS_TOKEN आह्वान किया जाता है समय समाप्त हो गया है

STEP #4: Request Analytics Data

अब से मैं क्या समझ, मैं रोल करने के लिए तैयार हूँ और https://www.googleapis.com/analytics/v3/data/ga करने के लिए अपने access_token अनुरोध करने के लिए उपयोग करने के लिए सक्षम होना चाहिए।

मैं यह अनुरोध भेजकर ऐसा करता हूं;

$request = 'https://www.googleapis.com/analytics/v3/data/ga' . 
    '?ids=ga%3Aaaaaaaaa' . 
    '&start-date=2012-12-07' . 
    '&end-date=2012-12-09' . 
    '&metrics=ga%3Avisits'; 

$opts = array(
    'http' => array(
     'method' => 'GET', 
     'header' => 'Content-Type: application/x-www-form-urlencoded\r\n' . 
        'Authorization: Bearer ya29.AHES6wwwwwwwwwwwwwwwVEBXE6XRbC-Q-pP0wZWdoIm9H804ro \r\n' 
     ) 
); 

$context = stream_context_create($opts); 

$result = file_get_contents($request, FALSE, $context); 
var_dump($result); 

यह अनुरोध 401 Unauthorized त्रुटि देता है। मैं इसे अर्थ के रूप में लेता हूं मेरा अनुरोध सही ढंग से गठित किया गया है और https://www.googleapis.com/analytics/v3/data/ga से कनेक्शन बना रहा है।

इसके अलावा, इस दस्तावेज़ Getting Full Quota के अनुसार, मैं इस तरह के यूआरएल में access_token के साथ अनुरोध कर सकता हूं;

$request = 'https://www.googleapis.com/analytics/v3/data/ga' . 
    '?ids=ga%3A48564799' . 
    '&access_token=ya29.AHES6wwwwwwwwwwwwwwwVEBXE6XRbC-Q-pP0wZWdoIm9H804ro' . 
    '&start-date=2012-12-07' . 
    '&end-date=2012-12-09' . 
    '&metrics=ga%3Avisits'; 

$result = file_get_contents($request, FALSE); 

$result = json_decode($result); 

var_dump($result); 

इस बार मैं 403 error प्राप्त करते हैं, जिसमें गूगल प्रतिक्रिया User does not have sufficient permissions for this profile भी शामिल है।

QUESTION #1

एम आई या टोकन अधिग्रहण में API कंसोल में कुछ एक प्रक्रिया याद कर रहा हूँ? मुझे लगता है कि मैं नहीं हूं, क्योंकि मैं अंत में access_token=ya29 प्राप्त कर रहा हूं और टोकन रीफ्रेश कर रहा हूं।

QUESTION #2 शायद मैं यह मानने में पूरी तरह से बंद हूं कि मैं इसे सरल https रिकॉर्ड्स के साथ कर सकता हूं? क्या मुझे और AnalyticsService कक्षाओं का उपयोग करना है? मुझे नहीं लगता कि यह मामला है, लेकिन शायद मैं गलत हूँ।

QUESTION #3 क्या मुझे अपने अनुरोध में 'कुंजी' का उपयोग करने की आवश्यकता है? &key=bbbbbbbbbbbbbbbb

QUESTION #4

पीएचपी 5.2.17 का उपयोग करके कर रहा हूँ मैं कुछ याद आ रही? (5.3 या 5.4 स्वयं के अलावा)

उदाहरण के लिए, PHP के कुछ संस्करणों में, stream_context_create में, हेडर एक सरणी में होना चाहिए और स्ट्रिंग नहीं, इस तरह;

$opts = array(
    'http' => array(
     'method' => 'GET', 
     'header' => array(
      'Content-Type: application/x-www-form-urlencoded', 
      'Authorization: Bearer ya29.AHES6wwwwwwwwwwwwwwwVEBXE6XRbC-Q-pP0wZWdoIm9H804ro ' 
     ) 
    ) 
); 

लेकिन मुझे नहीं लगता कि यह मेरे मामले में एक मुद्दा है। मैं सिर्फ उत्सुक हूं अगर इन HTTP अनुरोधों को एक अलग तरीके से बनाया जाना चाहिए (कर्ल का उपयोग किए बिना)।

किसी अंतर्दृष्टि और विचारों की बहुत सराहना की जाएगी
+0

आप 403 पर गौर किया - अपर्याप्त अनुमतियों त्रुटि और यह सुनिश्चित करें संयुक्त राष्ट्र/पीडब्लू कॉम्बो उपयोग कर रहे हैं का उपयोग कर सकते है कि बनाने के प्रोफाइल के लिए? –

+0

एक्सेस टोकन रीफ्रेश होने की आवश्यकता से 1 घंटे पहले तक चलते हैं। क्या आपको रीफ्रेश टोकन के साथ एक नया एक्सेस टोकन मिल रहा है? –

+0

@jk मुझे यकीन नहीं है कि आप उपयोगकर्ता नाम और पासवर्ड कॉम्बो द्वारा क्या मतलब है। क्या 'access_token' प्रमाण-पत्रों का प्रतिनिधित्व नहीं करता है? मैंने दस्तावेज़ों में कहीं भी नहीं देखा (कक्षाओं का उपयोग करते समय शायद) कि un/pw आवश्यक हैं। मैंने निश्चित रूप से सरल अनुरोधों के लिए कोई पैरामीटर नहीं देखा है। – bmorenate

उत्तर

13

यहां मेरी मंद गलती हुई गलती है जिसने मुझे दिल का दौरा दिया है।

मैं आमतौर पर क्रोम में अपना विकास कार्य करता हूं। और मेरा क्रोम ब्राउज़र मेरे जीमेल खाते [email protected] में साइन इन किया गया था। हालांकि, मेरे एनालिटिक्स अकाउंट, जो मेरे [email protected] के तहत है फ़ायरफ़ॉक्स में खुला था (कड़ी मेहनत करने की कोशिश न करें)।

मुझे 100% यकीन नहीं है कि यह सही है, लेकिन मुझे लगता है कि यह सामान्य प्रवाह है। जब मैंने STEP #2: Request initial API access किया, तो मैंने इसे अपने क्रोम ब्राउज़र में किया। एंडपॉइंट https://accounts.google.com/o/oauth2/auth मेरे व्यक्तिगत@gmail.com खाते को अधिकृत कर रहा था। और मेरा STEP # 4 API अनुरोध https://www.googleapis.com/analytics/v3/data/ga मेरे व्यक्तिगत@gmail.com खाते के अंतर्गत एक विश्लेषिकी प्रोफ़ाइल ढूंढ रहा था। निश्चित रूप से मौजूद नहीं है।

मैंने सचमुच 15 घंटे बर्बाद कर दिया। अद्यतन की समस्या निवारण करने की कोशिश करने से यह डम्बर है ... और कैश को फ्लश करना भूल गया है।

अपना समय बर्बाद करने के लिए खेद है।

संपादित रीफ़्रेश टोकन

मैं गया है एक बार फिर से इस एपीआई में समस्याएं आती हैं और कठिन रास्ता है कि जीए ताज़ा टोकन निरस्त हो जाएगी यदि बहुत अधिक अलग-अलग ग्राहकों टोकन का उपयोग पता चला, कम से कम मुझे लगता है कि समस्या थी

और पढ़ना found here हो सकता है।

+0

प्लस वन इसे साझा करने पर। मैं हमेशा इसे ध्यान में रखूंगा;)। –

+0

धन्यवाद। इस एपीआई के साथ मेरी गलतियों को समझने के लिए मुझे फिर से इस पोस्ट पर वापस जाना पड़ा। यह कभी आसान नहीं है। – bmorenate

+0

मुझे लगता है कि प्रमाणीकरण के साथ इस तरह की समस्याएं शांत हैं। शायद उन्हें डीबग करने का एक बेहतर तरीका होना चाहिए। – elif

10

मुझे आज 403 मिल गया और कारण मिला: get फ़ंक्शन में मैं प्रोफ़ाइल आईडी के बजाय खाता आईडी का उपयोग कर रहा था। प्रोफाइल आईडी पर स्विच करने से यह मेरे लिए तय हो गया।

+3

हां यह सही है, यह हमेशा "प्रोफाइल आईडी" होता है, न कि खाता या संपत्ति आईडी (जो "UA-xxx" जैसा दिखता है)। प्रोफाइल आईडी एक विशिष्ट वेब प्रॉपर्टी के लिए है और व्यवस्थापक-> प्रोफाइल-> प्रोफाइल सेटिंग्स टैब में पाया जा सकता है, यह कोई डैश नहीं है। – bmorenate

+0

प्रोफ़ाइल और विचारों के बीच क्या अंतर है? – nbro

0

यह कर्ल अनुरोध के साथ एक समस्या हो सकती है। GoogleAnalyticsAPI.class.php > class Http > function curl (around line 720) में सहकर्मी के प्रमाणपत्र की पुष्टि करने से कर्ल को रोकने के लिए एक और विकल्प जोड़ने:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^