使用 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);
}
}
}
}
我不能保证它是最干净的解决方案,但应该有效!
我正在尝试提取有关我们的用户登录 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);
}
}
}
}
我不能保证它是最干净的解决方案,但应该有效!