Отчет о запросах Google Analytics - PHP - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь отобразить отчет Google Analytics в своем веб-приложении, которое должно отображать 10 лучших страниц и количество браузеров, я использую эту ссылку Hello Analytics Reporting API v4;PHP быстрый старт для сервисной учетной записи для его разработки.Я получаю сообщение об ошибке ниже,

Ошибка вызова POST https://analyticsreporting.googleapis.com/v4/reports:batchGet: (401) В запросе отсутствуют необходимые учетные данные аутентификации.Ожидаемый токен доступа OAuth 2, файл cookie для входа в систему или другие действительные учетные данные для аутентификации

КОД:

$analytics = initializeAnalytics();
$response = getReport($analytics);
printResults($response);


function initializeAnalytics()
{

    // Use the developers console and download your service account
    // credentials in JSON format. Place them in this directory or
    // change the key file location if necessary.
    $KEY_FILE_LOCATION = __DIR__ . '/preprod-b18917fe321f.json';

    // Create and configure a new client object.
    $client = new Google_Client();
    $client->setApplicationName("Hello Analytics Reporting");
    $client->setAuthConfig('{"web":{}}'); // provided the .json credentials
    $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
    $analytics = new Google_Service_AnalyticsReporting($client);

    return $analytics;
}


function getReport($analytics) {

    // Replace with your view ID, for example XXXX.
    $VIEW_ID = "xxxxxx";

    // Create the DateRange object.
    $dateRange = new Google_Service_AnalyticsReporting_DateRange();
    $dateRange->setStartDate("7daysAgo");
    $dateRange->setEndDate("today");

    // Create the Metrics object.
    $sessions = new Google_Service_AnalyticsReporting_Metric();
    $sessions->setExpression("ga:sessions");
    $sessions->setAlias("sessions");

    // Create the ReportRequest object.
    $request = new Google_Service_AnalyticsReporting_ReportRequest();
    $request->setViewId($VIEW_ID);
    $request->setDateRanges($dateRange);
    $request->setMetrics(array($sessions));

    $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
    $body->setReportRequests( array( $request) );
    return $analytics->reports->batchGet( $body );
}


/**
 * Parses and prints the Analytics Reporting API V4 response.
 *
 * @param An Analytics Reporting API V4 response.
 */
function printResults($reports) {
    for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
        $report = $reports[ $reportIndex ];
        $header = $report->getColumnHeader();
        $dimensionHeaders = $header->getDimensions();
        $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
        $rows = $report->getData()->getRows();

        for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
            $row = $rows[ $rowIndex ];
            $dimensions = $row->getDimensions();
            $metrics = $row->getMetrics();
            for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
                print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
            }

            for ($j = 0; $j < count($metrics); $j++) {
                $values = $metrics[$j]->getValues();
                for ($k = 0; $k < count($values); $k++) {
                    $entry = $metricHeaders[$k];
                    print($entry->getName() . ": " . $values[$k] . "\n");
                }
            }
        }
    }
}

Кто-нибудь, пожалуйста, дайте мне идею, чтобы избавиться от этой ошибки.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Ошибка говорит нам, что пользователь должен войти в систему. Вам просто нужно добавить часть аутентификации.

Я предлагаю вам посмотреть пример Google Oauth & Analytics v4 на PHP .

0 голосов
/ 28 января 2019

Ошибка вызова POST https://analyticsreporting.googleapis.com/v4/reports:batchGet: (401) В запросе отсутствуют необходимые учетные данные для аутентификации.Ожидаемый токен доступа OAuth 2, файл cookie для входа в систему или другие действительные учетные данные для аутентификации

Означает, что вы не вошли в систему, не выполняете надлежащую аутентификацию клиента перед запуском кода.

возможные проблемы с учетными записями служб

  1. Проверьте $client->setAuthConfig('{"web":{}}'); и убедитесь, что это правильный путь к файлу ключа json.должно быть $KEY_FILE_LOCATION
  2. Убедитесь, что вы создали учетные данные учетной записи службы на консоли разработчика Google, а не что-то еще, этот код будет работать только с файлом ключа учетной записи службы.
  3. Убедитесь, что выпредоставил доступ учетной записи службы к вашей учетной записи Google Analytics.Возьмите адрес электронной почты учетной записи службы и добавьте его в качестве пользователя в Google Analytics на уровне учетной записи.

Проблема с расположением файла json

Если у вас все еще естьпроблемы с файлом, вы можете поместить местоположение в env

// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';
// Use the developers console and download your service account
// credentials in JSON format. Place the file in this directory or
// change the key file location if necessary.
putenv('GOOGLE_APPLICATION_CREDENTIALS='.__DIR__.'/service-account.json');
/**
 * Gets the Google client refreshing auth if needed.
 * Documentation: https://developers.google.com/identity/protocols/OAuth2ServiceAccount
 * Initializes a client object.
 * @return A google client object.
 */
function getGoogleClient() {
    return getServiceAccountClient();
}
/**
 * Builds the Google client object.
 * Documentation: https://developers.google.com/api-client-library/php/auth/service-accounts
 * Scopes will need to be changed depending upon the API's being accessed. 
 * array(Google_Service_Analytics::ANALYTICS_READONLY, Google_Service_Analytics::ANALYTICS)
 * List of Google Scopes: https://developers.google.com/identity/protocols/googlescopes
 * @return A google client object.
 */
function getServiceAccountClient() {
    try {   
        // Create and configure a new client object.        
        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope([YOUR SCOPES HERE]);
        return $client;
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}

ServiceAccount.php

...