Google Analytics API V3 / OAuth 2

Ho disperatamente cercato di capire per conto mio, e non voglio venire COSÌ, con questa domanda, ma io sono al mio fine ingegno (non grazie alle api /oauth docs).

Sto lavorando in PHP e sto cercando di evitare di utilizzare il Google_Client e AnalyticsService classi, utilizzando RESTO sul analytics.data.ga.get metodo.

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

Vado al api console e creare un progetto con servizi di analisi e di ottenere un OAuth Client ID e Segreto.

Ho l’impressione che posso creare un ID Client per un Applicazione Installata o un Applicazione Web perché io sto facendo il token iniziale di sincronizzazione manualmente. Per favore mi corregga se sbaglio.

Creare un ID Client per applicazioni web e di ottenere il mio Client ID xxxxxxxxxxxxxx.apps.googleusercontent.com, Client segreto yyyyyyyyyyyyyyy, e il mio Redirect URI è http://localhost:9002

STEP #2: Request initial API access

Inserisco questo link; 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

Il access_type=offline è perché sto usando RESTO, e non si aspettano “l’utente” (io) manualmente affrontare reindirizza /popup ogni volta che ho bisogno di un nuovo token.

Richiesta di cui sopra che restituisce http://localhost:9002?code=4/KModH0K_xxxxxxxxxxxxxxxxxxx9Iw.gikOaYRDWywTshQV0ieZDArCOX8XdwI

Codice 4/KModH0K_xxxxxxxxxxxxxxxxxxx9Iw.gikOaYRDWywTshQV0ieZDArCOX8XdwI è la mia autorizzazione a richiedere l’API Token.

STEP #3: Request First Token

A causa della mia azienda, NON problemi, sono costretto a utilizzare PHP 5.2.17 e non ho accesso al cURL di PHP, quindi sto usando file_get_contents e stream_context_create.

Il primo token è richiesto con 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);

I parametri di contenuto deve essere una riga singola.

Il codice di cui sopra, ritorna la mia access_token e refresh_token in formato json

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

Il refresh token devo memorizzare in un posto sicuro, come un DB o protette da un file txt, che è chiamato quando il mio access_token è scaduta.

STEP #4: Request Analytics Data

Ora da quello che ho capito, io sono pronto a rotolare e dovrebbe essere in grado di utilizzare il mio access_token per effettuare richieste di https://www.googleapis.com/analytics/v3/data/ga.

Faccio questo con l’invio della presente richiesta;

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

Questa richiesta restituisce un 401 Unauthorized errore. Prendo questo, nel senso che la mia richiesta sia adeguatamente formato e di effettuare la connessione per https://www.googleapis.com/analytics/v3/data/ga.

Inoltre, secondo questo doc Ottenendo La Quota, posso fare la richiesta con il access_token nell’URL come questo;

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

Questo periodo di tempo ho ricevuto 403 error, in cui google include la risposta User does not have sufficient permissions for this profile.

QUESTION #1

Am mi manca qualcosa nell’API console o di un processo in token di acquisizione? Sto dando per scontato che io non sono, perché sono, in definitiva, di acquisire il access_token=ya29 e refresh token.

QUESTION #2
Forse sono completamente fuori base supponendo che io possa fare questo con un semplice https reqests? Devo usare il Google_Client e AnalyticsService classi? Non credo che questo è il caso, ma forse mi sbaglio.

QUESTION #3
Ho bisogno di utilizzare una ‘chiave’ in la mia richiesta?
&key=bbbbbbbbbbbbbbbb

QUESTION #4

Utilizzando PHP 5.2.17 mi manca qualcosa? (oltre 5.3 o 5.4 stessi)

Per esempio, in alcune versioni di PHP, in stream_context_create, l’intestazione dovrebbe essere in un array e non una stringa, come questo;

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

Ma non credo che sia un problema nel mio caso. Sono solo curioso di sapere se questi richiesta HTTP bisogno di essere formata in modo diverso (senza usare curl).

Intuizioni e pensieri sarebbe molto apprezzato

  • Non si guarda nel 403 – insufficiente errore di autorizzazioni e assicurarsi che l’onu/pw combo che si sta utilizzando ha accesso al profilo?
  • Token di accesso durare 1 ora prima hanno bisogno di essere aggiornati. State ottenendo un nuovo Token di Accesso con il Refresh token?
  • Io non sono sicuro di cosa si intende con nome utente e password combo. Non access_token rappresentano le credenziali? Non ho visto ovunque nel docs (a parte forse quando si utilizzano le classi) che un/pw sono necessari. Sicuramente non ho visto tutti i parametri per semplici richieste di tipo get.
  • Schenkel Sì, sto controllando lo stato di ‘access_token’ con l’endpoint https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.AHES6wwwwwwwwwwwwwwwVEBXE6XRbC-Q-pP0wZWdoIm9H804ro e rinfrescante quando necessario.
  • BTW, qui ci sono i documenti che descrivono tutti i parametri per https://www.googleapis.com/analytics/v3/data/ga Ottenendo la Quota Come si può vedere nei Parametri di Query di Riepilogo – non ci sono parametri per il nome utente e la password.
  • Quello che voglio dire è: È l’utente con un/pw combo che si sta utilizzando aggiunto con le autorizzazioni necessarie per la GA profilo che si sta cercando di estrarre i dati? Aggiungere/modificare/eliminare utenti
  • Vedo. Si intende l’aggiunta di api indirizzo e-mail [email protected] come utente al profilo di analytics? Sì, che non ha funzionato neanche.
  • Inavvertitamente mi ha aiutato a risolvere il mio problema da farmi pensare password. Ho fatto un errore idiota. Grazie per il vostro aiuto. Vedere di seguito.
  • A volte succede. Noi tutti lo facciamo da tempo a tempo.

InformationsquelleAutor bmorenate | 2012-12-13

 

3 Replies
  1. 13

    Ecco il mio dim-witted errore che mi ha quasi dato un attacco di cuore.

    Io di solito fare il mio lavoro di sviluppo di google Chrome. E il mio browser Chrome è stato firmato in il mio account gmail [email protected]. Tuttavia, il mio account analytics, che è sotto il mio [email protected] è stato aperto in FireFox (provate a non ridere duro).

    Io non sono sicuro al 100% che questo è corretto, ma credo che questo sia il flusso generale. Quando ho fatto STEP #2: Request initial API access, questo l’ho fatto io nel mio browser Chrome. L’endpoint https://accounts.google.com/o/oauth2/auth era la mia autorizzazione [email protected] account. E il mio PASSO #4 richiesta di API https://www.googleapis.com/analytics/v3/data/ga era alla ricerca di un profilo google analytics sotto il mio [email protected] account. Il che naturalmente non esiste.

    Ho letteralmente sprecato 15 ore su questo. Questo è più scemo di cercare di risolvere i problemi di un aggiornamento… e dimenticare di svuotare la cache.

    Mi dispiace per sprecare il vostro tempo.

    MODIFICA REFRESH TOKEN

    Ho di nuovo problemi con questa API e scoperto nel modo più duro che GA revoca Refresh Token se troppo diversi clienti l’utilizzo del token, almeno credo che sia stato il problema.

    Ulteriore lettura può essere trovate qui.

    • Grazie. Ho dovuto tornare a questo post ancora a capire i miei errori con questa API. Non è mai facile.
    • Questi tipi di problemi sono tranquilla comune con autenticazione penso. Forse ci dovrebbe essere un modo migliore per eseguire il debug di loro.
  2. 10

    Ho avuto un 403 oggi e ho trovato la causa: nel get funzione stavo usando l’ID account, anziché l’ID del profilo. Di commutazione per l’ID del profilo fisso per me.

    • Sì esatto, è sempre il “Profilo ID” e non l’account o ID di proprietà (che assomiglia a “UA-xxx”). L’ID del Profilo è per una specifica proprietà web e può essere trovato in Admin->Profili->scheda Impostazioni Profilo, è un numero intero senza trattini.
  3. 0

    Potrebbe essere un problema con richiesta riccio. Nel GoogleAnalyticsAPI.class.php > class Http > function curl (around line 720) aggiungere una opzione in più per fermare CURL da verificare i certificati dei peer:

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

Lascia un commento