2014-10-17 13 views
6

Sono in grado di inoltrare richieste all'API di YouTube Analytics tramite API Explorer. Il mio codice sta tentando di utilizzare la libreria client PHP di Google, in particolare la classe Google_Service_YouTubeAnalytics. Sfortunatamente, non c'è documentazione su questa classe.Tutte le richieste all'API di YouTube Analytics tramite Google PHP Risultati della libreria in 400 Richiesta errata

Sto impostando le credenziali ID e Asserzione sul client. Sono abbastanza sicuro questo funziona correttamente, perché se cambio la chiave privata a qualcosa che so essere errato, ottengo:

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

Ma quando inserisco la chiave privata corretta, ottengo il seguente risposta:

{"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."}

non mi dire che cosa non è valido sulla query (che sarebbe incredibilmente utile), quindi non ho idea di cosa potrei fare in modo non corretto. Qualsiasi aiuto è apprezzato.

Ecco il mio codice che effettua la richiesta:

$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

Inoltre, sto utilizzando la libreria client di Google Analytics nel mio codice e ciò funziona correttamente. Sto usando il codice quasi nello stesso modo. Uggh. –

+0

La tua app sta effettivamente inviando la stringa "channel == CHANNEL_ID" come valore del parametro ids, o è la tua modifica quando hai incollato il codice di errore in SO? – jlmcdonald

+0

No, l'ho modificato per nascondere il mio ID canale effettivo in questo post. Nel mio codice, è il mio valore ID del canale. –

risposta

0

è necessario aggiungere un API di Google chiave

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} 

Anche io non sono sicuro se "% 2Cuniques" => "utenti unici" è una metrica valida

È possibile utilizzare lo strumento automatico di Google per generare un collegamento valido.

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

1

State facendo una query non supportato, non è possibile utilizzare vista & unici senza dimensioni fornite. Puoi verificarlo in Youtube's Analytics API Reference.

Prova aggiungere una dimensione come giorni e funzionerà:

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

Quella domanda otterrà una risposta simile a:

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 è uno strumento molto utile al fine di prova le tue domande


Per scopi di documentazione si può avere uno sguardo al codice sorgente e le classi stesse, sono molto ben documentati e "forse" auto-esplicativo.


Un approccio più recente è quello di rendere le richieste a questa API usando il protocollo OAuth 2.0 per autorizzare l'accesso.
Google fornisce una risorsa straordinaria per provare tutta questa roba: OAuth 2.0 Playground

In sostanza, è necessario per ottenere un token di accesso e il suo gettone di aggiornamento da applicare quando la prima scadenza.

$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); 

Spero che sia d'aiuto!

Problemi correlati