मैंने अपने आप को यह समझने की सख्त कोशिश की है, और इस सवाल के साथ 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 अनुरोधों को एक अलग तरीके से बनाया जाना चाहिए (कर्ल का उपयोग किए बिना)।
किसी अंतर्दृष्टि और विचारों की बहुत सराहना की जाएगी
आप 403 पर गौर किया - अपर्याप्त अनुमतियों त्रुटि और यह सुनिश्चित करें संयुक्त राष्ट्र/पीडब्लू कॉम्बो उपयोग कर रहे हैं का उपयोग कर सकते है कि बनाने के प्रोफाइल के लिए? –
एक्सेस टोकन रीफ्रेश होने की आवश्यकता से 1 घंटे पहले तक चलते हैं। क्या आपको रीफ्रेश टोकन के साथ एक नया एक्सेस टोकन मिल रहा है? –
@jk मुझे यकीन नहीं है कि आप उपयोगकर्ता नाम और पासवर्ड कॉम्बो द्वारा क्या मतलब है। क्या 'access_token' प्रमाण-पत्रों का प्रतिनिधित्व नहीं करता है? मैंने दस्तावेज़ों में कहीं भी नहीं देखा (कक्षाओं का उपयोग करते समय शायद) कि un/pw आवश्यक हैं। मैंने निश्चित रूप से सरल अनुरोधों के लिए कोई पैरामीटर नहीं देखा है। – bmorenate