API YouTube Analytics в PHP: я продолжаю получать недостаточные разрешения при аутентификации

Я пытаюсь получить доступ к API YouTube Analytics в PHP, используя OAUTH2. В моем сценарии я сначала извлекаю данные канала, которые отлично работают (даже с аутентифицированными сегментами). Затем я анализирую идентификатор канала в своем вызове Analytics. API YouTube Analytics активирован в моей консоли разработчика Google. Я получаю следующую ошибку:

Произошла ошибка клиента: ошибка при вызове GET https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3D##MY_CHANNEL_ID##&start-date=2014-01.-01&end-date=2014-01-25&metrics=views&dimensions=7DayTotals&sort=day: (403) Недостаточно прав

Вот мой код. Обратите внимание, что я добавил свой идентификатор канала вручную, чтобы убедиться, что он абсолютно правильный. Как я уже сказал: аутентификация работает для API данных YouTube, но не может подключиться к Analytics-API.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$OAUTH2_CLIENT_ID = '##MY_CLIENT_ID##';
$OAUTH2_CLIENT_SECRET = '##MY_SECRET##';

set_include_path('##PATH_TO_CLIENT_LIBRARY##');
require_once 'Google/Client.php';
require_once 'Google/Service/YouTube.php';
require_once 'Google/Service/YouTubeAnalytics.php';

session_start();

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/yt-analytics.readonly');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);

$youtube = new Google_Service_YouTube($client);

if (isset($_SESSION['token'])) {
  $client->setAccessToken($_SESSION['token']);
}

if ($client->getAccessToken()) {
    $analytics = new Google_Service_YouTubeAnalytics($client);

    $id = 'channel==##MY_CHANNEL_ID##';
    $start_date = '2014-01-01';
    $end_date = '2014-01-20';
    $optparams = array(
        'dimensions' => '7DayTotals',
        'sort' => 'day',
    );

    $metrics = array(
        'views',
        'estimatedMinutesWatched',
        'averageViewDuration',
        'comments',
        'favoritesAdded',
        'favoritesRemoved',
        'likes',
        'dislikes',
        'shares',
        'subscribersGained',
        'subscribersLost'
    );

    $api_response = $metrics;

    foreach ($metrics as $metric)
    {
        $api = $analytics->reports->query($id, $start_date, $end_date, $metric, $optparams);
        if (isset($api['rows'])) $api_response[$metric] = $api['rows'][0][0];
    }
}

?>

Кстати, если у кого-то есть примеры работающих PHP-скриптов с использованием API YouTube Analytics, буду очень рад, если вы ими поделитесь. Я еще не видел ни одного работающего примера на всей WWW.


person Geoffrey    schedule 25.01.2014    source источник


Ответы (1)


Я уже сам нашел ответ. Проблема была в линии

$client->setScopes('https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/yt-analytics.readonly');

Изменение этого на строку ниже заставило скрипт работать:

$client->setScopes(array('https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/yt-analytics.readonly'));
person Geoffrey    schedule 27.01.2014
comment
Я столкнулся с той же проблемой. Даже я не могу установить токен. Когда я пытаюсь print_r $client->getAccessToken(), он отвечает мне нулевым значением. пожалуйста, помогите мне! - person Rahul; 07.09.2016