使用Google G Suite API PHP库处理响应

使用Google G Suite API PHP库处理响应,php,arrays,google-api-php-client,google-api-client,google-client,Php,Arrays,Google Api Php Client,Google Api Client,Google Client,我正在尝试提取我们的用户登录到我们的G套件房地产的次数信息,以便创建一个图表。我知道这个功能是本机的,但是我希望通过API调用来实现,因为我们以后还需要其他数据 我陷入困境的是如何处理回应。我的代码当前如下所示: <?php require_once __DIR__ . '/vendor/autoload.php'; putenv('GOOGLE_APPLICATION_CREDENTIALS=credentials.json'); define('SCOPES', implode('

我正在尝试提取我们的用户登录到我们的G套件房地产的次数信息,以便创建一个图表。我知道这个功能是本机的,但是我希望通过API调用来实现,因为我们以后还需要其他数据

我陷入困境的是如何处理回应。我的代码当前如下所示:

<?php
require_once __DIR__ . '/vendor/autoload.php';

putenv('GOOGLE_APPLICATION_CREDENTIALS=credentials.json');
define('SCOPES', implode(' ', array(
  Google_Service_Reports::ADMIN_REPORTS_USAGE_READONLY,
  Google_Service_Reports::ADMIN_REPORTS_AUDIT_READONLY)
));


$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->setScopes(SCOPES);
$client->setAccessType('offline');
$client->setSubject('administrator@mydomain.com');

// Get the API client and construct the service object.
$service = new Google_Service_Reports($client);

// API CALL

$date = '2017-01-19';
$optParams = array(

);


$results = $service->customerUsageReports->get(
    $date, $optParams);


if (count($results->getusageReports()) == 0) {
  print "No logins found.\n";
} else {
  foreach ($results->getusageReports() as $data) {

    print("Number of logins (past 24 hours): " . $data->getparameters()[23]->getintValue() . "<br />");

    echo "<br />";


    // Use this for checking array values
    print_r($data->getparameters()[23]);



  }
}

?>
我的问题是,我发现通过键ID调用参数是没有用的,因为它似乎会根据完整的API结果不时地改变。使用密钥ID调用api的代码如下:

$data->getparameters[23]->getintValue

我发现,尽管上面的密钥ID当前显示为23,但这可能会改变。出于这个原因,我决定尝试按所需数据的名称进行搜索,即:accounts:num\u 1day\u logins

问题在于返回数据的格式,当我打印$data->getparameters[23]的数组时,我得到以下结果:

Google_Service_Reports_UsageReportParameters Object[collection\u key:protected]=>msgValue[boolValue]=>[datetimeValue]=>[intValue]=>2[msgValue]=>[name]=>accounts:num_1day\u logins[stringValue]=>[internal\u gapi\u mappings:protected]=>Array[modelData:protected]=>Array[processed:protected]=>Array[processed:protected]=>Array

如何搜索名称并获取数组键

我会发布:$data->getparameters的结果,但是我担心数据隐私


有人用过这个吗?请有人帮忙。如果需要更多信息,请告诉我。

好的,这里的问题是,返回的谷歌对象没有他们想告诉你的那么一致

您需要使用if语句执行另一个foreach循环来提取所需的对象。基本上,它返回一个包含多个对象的对象,我们希望按名称提取特定对象

下面的代码应该可以做到这一点,您可以看到我添加了一个额外的foreach循环来循环父对象中的对象,if语句确保我们只处理我们想要的对象

if (count($results->getusageReports()) == 0) {
  print "No logins found.\n";
} else {
  foreach ($results->getusageReports() as $data) {

    foreach ($data->getparameters() as $pizza) {

        if ($pizza->name == "accounts:num_1day_logins"){

          var_dump ($pizza);

        }

    }


  }
}
我不能保证这是最干净的解决方案,但应该有效

if (count($results->getusageReports()) == 0) {
  print "No logins found.\n";
} else {
  foreach ($results->getusageReports() as $data) {

    foreach ($data->getparameters() as $pizza) {

        if ($pizza->name == "accounts:num_1day_logins"){

          var_dump ($pizza);

        }

    }


  }
}