I have created a PHP app that works fine with the Data API using OAuth. I want to adapt this to work with Analytics and Reporting API and have added the API libraries on Google cloud etc and added the PHP code to my application. When I run this I get an exception:
'The website encountered an unexpected error. Please try again later. Google\Service\Exception: { "error": { "code": 403, "message": "Forbidden", "errors": [ { "message": "Forbidden", "domain": "global", "reason": "forbidden" } ] } } in Google\Http\REST::decodeHttpResponse() (line 128 of vendor/google/apiclient/src/Http/REST.php).'
I tried the reports.query and got same result and also from the application (PHP) generated from reports.query (https://developers.google.com/youtube/analytics/reference/reports/query?...)
<?php
/**
* Sample PHP code for youtubeAnalytics.reports.query
* See instructions for running these code samples locally:
* https://developers.google.com/explorer-help/guides/code_samples#php
*/
if (!file_exists(__DIR__ . '/vendor/autoload.php')) {
throw new Exception(sprintf('Please run "composer require google/apiclient:~2.0" in "%s"', __DIR__));
}
require_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$client->setApplicationName('API code samples');
$client->setScopes([
'https://www.googleapis.com/auth/youtube.readonly',
]);
// TODO: For this request to work, you must replace
// "YOUR_CLIENT_SECRET_FILE.json" with a pointer to your
// client_secret.json file. For more information, see
// https://cloud.google.com/iam/docs/creating-managing-service-account-keys
$client->setAuthConfig('/xxx/client_secret.json');
$client->setAccessType('offline');
// Request authorization from the user.
$authUrl = $client->createAuthUrl();
printf("Open this link in your browser:\n%s\n", $authUrl);
print('Enter verification code: ');
$authCode = trim(fgets(STDIN));
// Exchange authorization code for an access token.
$accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
$client->setAccessToken($accessToken);
// Define service object for making API requests.
$service = new Google_Service_YouTubeAnalytics($client);
$queryParams = [
'endDate' => '2021-02-01',
'ids' => 'channel==xxxxxxxxxxxx,
'metrics' => 'views',
'startDate' => '2020-12-01'
];
$response = $service->reports->query($queryParams);
print_r($response);
So I think the problem is with the authorisation. Questions:
- Is there a step-by-step guide to create credentials etc to work with the Analytics and Reporting API (sample application)?
- Can the same client secret file be used for both APIs (assuming set up correctly)?
https://www.googleapis.com/auth/yt-analytics.readonly
? In general, you can use the same OAuth client (and credentials) to access more than one API. – Trey Griffith