如何在Laravel中使用Google Calendar API Batch Request批量操作日历事件
Google Calendar API 批量请求 Laravel 实现方案
1. 前置依赖安装
先通过composer安装官方PHP客户端:
composer require google/apiclient:^2.15
2. 初始化客户端与Calendar服务
use Google\Client; use Google\Service\Calendar; // 初始化Google客户端,替换为你自己的鉴权配置 $client = new Client(); $client->setAuthConfig(storage_path('app/google-credentials.json')); $client->addScope(Calendar::CALENDAR); $client->setAccessType('offline'); // 开启批量请求模式 $client->setUseBatch(true); // 初始化Calendar服务 $service = new Calendar($client);
3. 批量操作具体实现
Google Calendar API单批次最多支持100个请求,超出需要拆分多批次处理。
3.1 批量新增事件示例
$batch = $service->createBatch(); // 待新增的事件列表,替换为你的业务数据 $eventList = [ [ 'summary' => '会议1', 'start' => ['dateTime' => '2024-06-01T10:00:00+08:00'], 'end' => ['dateTime' => '2024-06-01T11:00:00+08:00'] ], [ 'summary' => '会议2', 'start' => ['dateTime' => '2024-06-02T14:00:00+08:00'], 'end' => ['dateTime' => '2024-06-02T15:00:00+08:00'] ] ]; foreach ($eventList as $key => $eventData) { $event = new \Google\Service\Calendar\Event($eventData); // calendarId替换为你要操作的日历ID,常用primary代表用户主日历 $req = $service->events->insert('primary', $event); // 第二个参数为请求唯一标识,方便后续匹配返回结果 $batch->add($req, 'event-insert-' . $key); } // 执行批量请求 $results = $batch->execute();
3.2 批量更新事件示例
$batch = $service->createBatch(); // 待更新的事件列表,包含eventId和要修改的字段 $updateList = [ [ 'event_id' => 'xxx1', 'summary' => '修改后的会议1' ], [ 'event_id' => 'xxx2', 'start' => ['dateTime' => '2024-06-02T15:00:00+08:00'] ] ]; foreach ($updateList as $key => $updateData) { $eventId = $updateData['event_id']; unset($updateData['event_id']); // 先获取原有事件,再合并修改内容 $event = $service->events->get('primary', $eventId); $event->map($updateData); $req = $service->events->update('primary', $eventId, $event); $batch->add($req, 'event-update-' . $key); } $results = $batch->execute();
3.3 批量删除事件示例
$batch = $service->createBatch(); // 待删除的事件ID列表 $deleteIds = ['xxx1', 'xxx2', 'xxx3']; foreach ($deleteIds as $key => $eventId) { $req = $service->events->delete('primary', $eventId); $batch->add($req, 'event-delete-' . $key); } $results = $batch->execute();
4. 结果处理与错误规避
- 批量请求返回结果为关联数组,键名是你添加请求时设置的
response-xxx(xxx为你设置的请求标识),可直接遍历判断每个请求是否执行成功 - 每批次请求控制在50个以内,批次之间增加1-2秒延迟,可进一步降低触发速率限制的概率
- 若仍偶发限速错误,可配合
retry-after响应头实现指数退避重试逻辑
内容的提问来源于stack exchange,提问作者Raj Sf
相关产品推荐
相关产品推荐

