Google AnalyticsAPI:如何提取帐户,获取非对象错误

时间:2016-08-03 20:03:05

标签: php api google-analytics google-api google-analytics-api

编辑 - 本教程(虽然几乎与谷歌的教程一样)是最终使事情有效的方法:http://teev.io/blog/google-analytics-api-php

我试图按照这里提到的教程: https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-php

我已经完成了所有步骤:

  1. 创建了一个项目。
  2. 创建了一个服务帐户。 (当提示输入JSON或P12时,我选择了JSON)
  3. 我在putty中运行composer require google/apiclient:^2.0并更新了我的composer.json文件。
  4. 将我刚刚下载的service-account-credentials.json文件放入文件夹/public_html
  5. 创建文件HelloAnalytics.php并将其放入/public_html文件夹。
  6. HelloAnalytics.php:

    <?php
    
    // Load the Google API PHP Client Library.
    require_once '/home/user/vendor/autoload.php';
    
    $analytics = initializeAnalytics();
    $profile = getFirstProfileId($analytics);
    $results = getResults($analytics, $profile);
    printResults($results);
    
    function initializeAnalytics()
    {
        // Creates and returns the Analytics Reporting service object.
    
        // 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__ . '/service-account-credentials.json';
    
        // Create and configure a new client object.
        $client = new Google_Client();
        $client->setApplicationName("Hello Analytics Reporting");
        $client->setAuthConfig($KEY_FILE_LOCATION);
        $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
        $analytics = new Google_Service_AnalyticsReporting($client);
    
        return $analytics;
    }
    
    function getFirstProfileId($analytics) {
        // Get the user's first view (profile) ID.
    
        // Get the list of accounts for the authorized user.
        $accounts = $analytics->management_accounts->listManagementAccounts();
    
        if (count($accounts->getItems()) > 0) {
            $items = $accounts->getItems();
            $firstAccountId = $items[0]->getId();
    
            // Get the list of properties for the authorized user.
            $properties = $analytics->management_webproperties
                ->listManagementWebproperties($firstAccountId);
    
            if (count($properties->getItems()) > 0) {
                $items = $properties->getItems();
                $firstPropertyId = $items[0]->getId();
    
                // Get the list of views (profiles) for the authorized user.
                $profiles = $analytics->management_profiles
                    ->listManagementProfiles($firstAccountId, $firstPropertyId);
    
                if (count($profiles->getItems()) > 0) {
                    $items = $profiles->getItems();
    
                    // Return the first view (profile) ID.
                    return $items[0]->getId();
    
                } else {
                    throw new Exception('No views (profiles) found for this user.');
                }
            } else {
                throw new Exception('No properties found for this user.');
            }
        } else {
            throw new Exception('No accounts found for this user.');
        }
    }
    
    function getResults($analytics, $profileId) {
        // Calls the Core Reporting API and queries for the number of sessions
        // for the last seven days.
        return $analytics->data_ga->get(
            'ga:' . $profileId,
            '7daysAgo',
            'today',
            'ga:sessions');
    }
    
    function printResults($results) {
        // Parses the response from the Core Reporting API and prints
        // the profile name and total sessions.
        if (count($results->getRows()) > 0) {
    
            // Get the profile name.
            $profileName = $results->getProfileInfo()->getProfileName();
    
            // Get the entry for the first entry in the first row.
            $rows = $results->getRows();
            $sessions = $rows[0][0];
    
            // Print the results.
            print "First view (profile) found: $profileName\n";
            print "Total sessions: $sessions\n";
        } else {
            print "No results found.\n";
        }
    }
    

    遗憾地产生了这个错误:

      

    致命错误:在....中的非对象上调用成员函数listManagementAccounts()

    有关如何实际使用此功能的任何建议吗?

2 个答案:

答案 0 :(得分:3)

而不是:

$ ls /mingw32/include/boost/
accumulators             context                       fusion                  make_unique.hpp                predef                         spirit
algorithm                convert                       generator_iterator.hpp  math                           predef.h                       spirit.hpp
align                    convert.hpp                   geometry                math_fwd.hpp                   preprocessor                   statechart
align.hpp                core                          geometry.hpp            mem_fn.hpp                     preprocessor.hpp               static_assert.hpp
aligned_storage.hpp      coroutine                     get_pointer.hpp         memory_order.hpp               program_options                swap.hpp
any.hpp                  coroutine2                    gil                     metaparse                      program_options.hpp            system
...

这样做:

$analytics = new Google_Service_AnalyticsReporting($client);

答案 1 :(得分:1)

您的代码使用旧的v1-master分支代码,但您尝试使用composer require google/apiclient:^2.0

更新您的代码以匹配link you provided中提供的代码:

<?php

// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';

$analytics = initializeAnalytics();
$profile = getFirstProfileId($analytics);
$results = getResults($analytics, $profile);
printResults($results);
...