批量发送请求到多个不同的API

时间:2018-10-19 05:46:01

标签: php google-api google-drive-api google-api-php-client google-sheets-api

我收到一封电子邮件,指出我的Google Cloud Project使用了计划于2019年3月25日关闭的Global HTTP Batch服务终结点。

经过研究,我发现了一些与here相关的内容,

“正在中断的是在单个批处理中向多个不同的API发送请求...

所以我怀疑这是因为我在Google Cloud Project中的代码:

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Sheets::SPREADSHEETS);
$client->addScope(Google_Service_Drive::DRIVE);
print_r($client);

//create new spreadsheet
$sheetService = new Google_Service_Sheets($client);
$requestBody = new Google_Service_Sheets_Spreadsheet([
                  'properties' => [
                      'title' => $new_sheet_title
                  ]
               ]);
$response = $sheetService->spreadsheets->create($requestBody);
$spreadsheetId = $response->spreadsheetId;

$driveService = new Google_Service_Drive($client);

$client->setUseBatch(true);
$batch = $driveService->createBatch();

$userPermission = new Google_Service_Drive_Permission(array(
                      'type' => 'user',
                      'role' => 'writer',
                      'emailAddress' => 'mypersonalemail@gmail.com'
                  ));
$request = $driveService->permissions->create(
              $spreadsheetId, $userPermission, array('fields' => 'id'));
$batch->add($request, 'user'); 
$results = $batch->execute();  
$client->setUseBatch(false); 

//then no longer using Drive API, only using Sheet API to do formatting...

当我$ _print(r)我的$ client时,我看到了:

[requestedScopes:protected] => Array
    (
        [0] => https://www.googleapis.com/auth/spreadsheets
        [1] => https://www.googleapis.com/auth/drive
    )

我正在使用 Google Sheet API 创建电子表格,并使用 Drive API 允许我的个人电子邮件获得许可(嗯,为什么我用这种方式是另一回事...) 顺便说一句,我正在使用 Google客户端库(v2.2.1)php beta

所以我想我要做的是

$client = new Google_Client();
$client->useApplicationDefaultCredentials();

//using setScopes to overwrite original scopes
$client->setScopes(Google_Service_Sheets::SPREADSHEETS);
$sheetService = new Google_Service_Sheets($client);
//create my spreadsheet

$client->setScopes(Google_Service_Drive::DRIVE);
$driveService = new Google_Service_Drive($client);
//allow permission to my personal email

//then set it back & do formatting to my spreadsheet
$client->setScopes(Google_Service_Sheets::SPREADSHEETS);
$sheetService = new Google_Service_Sheets($client);

...

我已经测试过,并且可以肯定

所以我的问题是:
1。我的代码的哪一部分将批处理请求发送到Sheet和Driver API?当我检查批量更新请求时,未找到调用这两个API的请求。 (请参阅here

2。我不确定我的新脚本是否可以解决问题。由于Google尚未拒绝服务,因此我不确定我的新脚本在2019年3月25日之后是否可以继续使用

我希望我清楚地表达我的关注。随意询问更多细节。 在此先感谢:)

1 个答案:

答案 0 :(得分:0)

您的代码似乎正在向Google驱动器api发送批处理请求。

$client->setUseBatch(true);
$batch = $driveService->createBatch();

$userPermission = new Google_Service_Drive_Permission(array(
                      'type' => 'user',
                      'role' => 'writer',
                      'emailAddress' => 'mypersonalemail@gmail.com'
                  ));
$request = $driveService->permissions->create(
              $spreadsheetId, $userPermission, array('fields' => 'id'));
$batch->add($request, 'user'); 
$results = $batch->execute();  
$client->setUseBatch(false); 

您在此批处理请求中的所有请求似乎都将发送到google Drive API。我完全看不到任何迹象表明您正在混合使用api。更改不会影响您。