使用 Google G Suite API PHP 库处理回复

Handling responses with Google G Suite API PHP Library

我正在尝试提取有关我们的用户登录 G Suite 资产的次数的信息,以便创建图表。 (我知道此功能是本机功能,但希望通过 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]);



  }
}

?>

现在这个returns以下内容:

Number of logins (past 24 hours): 2

Google_Service_Reports_UsageReportParameters Object ( [collection_key:protected] => msgValue [boolValue] => [datetimeValue] => [intValue] => 2 [msgValue] => [name] => accounts:num_1day_logins [stringValue] => [internal_gapi_mappings:protected] => Array ( ) [modelData:protected] => Array ( ) [processed:protected] => Array ( ) )

我遇到的问题是,我发现通过密钥 ID 调用参数是无用的,因为它似乎会根据完整的 API 结果不时发生变化。使用密钥 ID 调用 api 的代码如下:

$data->getparameters()[23]->getintValue()

我发现虽然上面的key ID目前显示为23,但是这个是可以改变的。出于这个原因,我决定尝试按我需要的数据名称进行搜索,即:accounts:num_1day_logins

问题是返回数据的格式,当我为 $data->getparameters()[23] 打印数组时,我得到以下信息:

Google_Service_Reports_UsageReportParameters Object ( [collection_key:protected] => msgValue [boolValue] => [datetimeValue] => [intValue] => 2 [msgValue] => [name] => accounts:num_1day_logins [stringValue] => [internal_gapi_mappings:protected] => Array ( ) [modelData:protected] => Array ( ) [processed:protected] => Array ( ) )

如何搜索 name 并获取数组键?

我会 post 结果:$data->getparameters() 但是我担心数据隐私。

有人成功了吗?请有人帮忙。如果需要更多信息,请告诉我。

好的,这里的问题是 Google 返回的对象并不像他们告诉你的那样一致。

您需要使用 if 语句执行另一个 foreach 循环以拉取您需要的对象(基本上它 returns 一个包含多个对象的对象,我们希望通过名称拉取特定对象)

下面的代码应该这样做,你可以看到我添加了一个额外的 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);

        }

    }


  }
}

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