2014-10-17 16 views
6

में Google PHP लाइब्रेरी परिणाम के माध्यम से यूट्यूब Analytics API के सभी अनुरोध एपीआई एक्सप्लोरर के माध्यम से मैं यूट्यूब Analytics API को सफलतापूर्वक अनुरोध करने में सक्षम हूं। मेरा कोड Google PHP क्लाइंट लाइब्रेरी, विशेष रूप से Google_Service_YouTubeAnalytics क्लास का उपयोग करने का प्रयास कर रहा है। दुर्भाग्यवश, इस वर्ग पर कोई दस्तावेज नहीं है।400 खराब अनुरोध

मैं ग्राहक पर आईडी और दावा प्रमाण-पत्र सेट कर रहा हूं। मैं काफी आश्वस्त इस सही ढंग से काम कर रहा है, क्योंकि मैं गलत पता है कि मैं कुछ करने के लिए निजी कुंजी को बदलने हूँ, मैं मिलता है:

{"code":400,"error":"Error refreshing the OAuth2 token, message: '{\n \"error\" : \"invalid_grant\"\n}'"}

लेकिन जब मैं सही निजी कुंजी डालें, मैं निम्नलिखित मिल प्रतिक्रिया:

{"code":400,"error":"Error calling GET https:\/\/www.googleapis.com\/youtube\/analytics\/v1\/reports?ids=channel%3D%3DCHANNEL_ID&start-date=2014-09-01&end-date=2014-09-05&metrics=views%2Cuniques: (400) Invalid query. Query did not conform to the expectations."}

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

यहाँ मेरी कोड अनुरोध करता है वह यह है कि:

$client = new \Google_Client(); 
$client->setApplicationName(self::APP_NAME); 

// set some stuff 
$client->setClientId(self::CLIENT_ID); 
$client->setClientSecret(self::CLIENT_SECRET); 
$client->setAssertionCredentials(new \Google_Auth_AssertionCredentials(
    self::CRED_ID, 
    [ 
     "https://www.googleapis.com/auth/youtube.readonly", 
     'https://www.googleapis.com/auth/yt-analytics.readonly' 
    ], 
    self::youtubeKey() 
)); 

$youtubeService = new \Google_Service_YouTubeAnalytics($client); 
$resp = $youtubeService->reports->query(
    self::CHANNEL_ID, 
    '2014-09-01', 
    '2014-09-05', 
    'views,uniques' 
); 
+0

इसके अलावा, मैं अपने कोड में Google Analytics क्लाइंट लाइब्रेरी का उपयोग कर रहा हूं, और यह ठीक काम करता है। मैं लगभग उसी तरह से कोड का उपयोग कर रहा हूँ। Uggh। –

+0

क्या आपका ऐप वास्तव में "चैनल == CHANNEL_ID" स्ट्रिंग को ids पैरामीटर के मान के रूप में भेज रहा है, या जब आपने SO में त्रुटि कोड चिपकाया है तो क्या आपका संशोधन है? – jlmcdonald

+0

नहीं, मैंने इस पोस्ट में अपनी वास्तविक चैनल आईडी को छिपाने के लिए बदल दिया है। मेरे कोड में, यह मेरा चैनल आईडी मान है। –

उत्तर

0

एक Google API कुंजी

https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel_ID&start-date=2014-09-01&end- 
date=2014-10-01&metrics=views%2Cuniques&key={YOUR_API_KEY} 

इसके अलावा मुझे यकीन है कि नहीं कर रहा हूँ जोड़ने की जरूरत है, तो "% 2Cuniques" => "विशिष्ट आवृत्तियां" मान्य मीट्रिक है।

आप वैध लिंक उत्पन्न करने के लिए Google स्वचालित टूल का उपयोग कर सकते हैं।

https://developers.google.com/youtube/analytics/v1/

1

आप एक समर्थित नहीं क्वेरी कर रहे हैं, यह दृश्यों का उपयोग करने के लिए कोई संभव है & विशिष्ट आवृत्तियां प्रदान की कोई आयामों के साथ। आप इसे Youtube's Analytics API Reference में देख सकते हैं।

दिन जैसे कि यह एक आयाम जोड़ की कोशिश करो और यह काम करेगा:

200 OK 

- Show headers - 

{ 
"kind": "youtubeAnalytics#resultTable", 
"columnHeaders": [ 
    { 
    "name": "day", 
    "columnType": "DIMENSION", 
    "dataType": "STRING" 
    }, 
    { 
    "name": "views", 
    "columnType": "METRIC", 
    "dataType": "INTEGER" 
    }, 
    { 
    "name": "uniques", 
    "columnType": "METRIC", 
    "dataType": "INTEGER" 
    } 
], 
"rows": [ 
    [ 
    "2014-09-04", 
    1250, 
    621 
    ], 
    [ 
    "2014-09-05", 
    1265, 
    577 
    ], 
    [ 
    "2014-09-03", 
    1255, 
    557 
    ], 
    [ 
    "2014-09-01", 
    1076, 
    532 
    ], 
    [ 
    "2014-09-02", 
    1182, 
    570 
    ] 
] 
} 

Google's APIs Explorer करने के लिए एक बहुत ही उपयोगी उपकरण है:

$youtubeService = new \Google_Service_YouTubeAnalytics($client); 
$resp = $youtubeService->reports->query(
    self::CHANNEL_ID, 
    '2014-09-01', 
    '2014-09-05', 
    'views,uniques', 
    array('dimensions' => 'day') 
); 

कि क्वेरी एक रिस्पांस के समान हो जाएगा अपने प्रश्नों का परीक्षण करें।


प्रलेखन प्रयोजनों के लिए यदि आप स्रोत कोड और वर्गों खुद को देख सकते हैं, वे बहुत अच्छी तरह से प्रलेखित और "शायद" स्वतः स्पष्ट हैं।


एक नया दृष्टिकोण इस API एक्सेस को प्राधिकृत करने के लिए OAuth 2.0 प्रोटोकॉल का उपयोग करने के लिए अनुरोध करने के लिए है।OAuth 2.0 Playground

मूल रूप से, आप एक पहुँच टोकन और जब पहले समाप्त हो रहा है इसे लागू करने के लिए अपने ताज़ा टोकन प्राप्त करने की जरूरत है:
गूगल यह सब सामान की कोशिश के लिए एक अद्भुत संसाधन प्रदान करता है।

$client = new \Google_Client(); 
$client->setApplicationName(self::APP_NAME); 

// set some stuff 
$client->setClientId(self::CLIENT_ID); 
$client->setClientSecret(self::CLIENT_SECRET); 

// Set oAuth info 
$client->addScope(\Google_Service_YouTubeAnalytics::YT_ANALYTICS_READONLY); 
$client->setAccessToken($accessToken); 

// Check if token is expired 
if ($client->isAccessTokenExpired()) { 
    $client->refreshToken($refreshToken()); 
    $newToken = $client->getAccessToken(); 

    $authObj = json_decode($newToken); 
    if (!is_object($authObj)) { 
     throw new \Google_Auth_Exception('Error on updating oAuth tokens'); 
    } 

    //update tokens 
    //...    
} 

$youtubeService = new \Google_Service_YouTubeAnalytics($client); 

उम्मीद है कि यह मदद करता है!

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