You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:12:02