Extract data from Google Analytics Data API (Ga4) via oauth2 (consent screen)

3.1k Views Asked by At

Is it possible to extract data from Google Analytics Data API (GA4 accounts) not via service account? I can extract normally using service accounts (example below), but I needed authorization via oauth (consent screen) and I found absolutely nothing related.

<?php
require 'vendor/autoload.php';

use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;

$client = new BetaAnalyticsDataClient(['credentials' => 'MY-CREDENTIALS.json']);

$response = $client->runReport([
    'property' => 'properties/MY-ID',
    'dateRanges' => [
        new DateRange([
            'start_date' => '2020-03-31',
            'end_date' => 'today',
        ]),
    ],
    'dimensions' => [new Dimension(
        [
            'name' => 'city',
        ]
    ),
    ],
    'metrics' => [new Metric(
        [
            'name' => 'activeUsers',
        ]
    )
    ]
]);

print 'Report result: ' . PHP_EOL;

foreach ($response->getRows() as $row) {
    print $row->getDimensionValues()[0]->getValue()
        . ' ' . $row->getMetricValues()[0]->getValue() . PHP_EOL;
}
2

There are 2 best solutions below

0
On BEST ANSWER

I got it as follows:

$client = new BetaAnalyticsDataClient( [
    'credentials' => Google\ApiCore\CredentialsWrapper::build( [
        'scopes'  => [
            'https://www.googleapis.com/auth/analytics',
            'openid',
            'https://www.googleapis.com/auth/analytics.readonly',
        ],
        'keyFile' => [
            'type'          => 'authorized_user',
            'client_id'     => 'MY-CLIENT-ID',
            'client_secret' => 'MY-CLIENT-SECRET',
            'refresh_token' => 'REFRESH-TOKEN' // https://stackoverflow.com/questions/10827920/not-receiving-google-oauth-refresh-token
        ],
    ] ),
] );
0
On

for nodejs and as per sample on github of the library

const oAuth2Client = await getOAuth2Client();
const analyticsDataClient = getAnalyticsDataClient(oAuth2Client);