我想使用 Symfony 命令(批量)通过 API 在 Google 日历中插入事件。
当我插入 ID 类似于“event01487”的事件时,它会抛出以下错误:“code”:400,“message”:“无效的资源 id 值。”
这个 ID 是唯一的,因为没有插入任何事件 - 它甚至没有插入一次。该 ID 似乎符合 Google 要求...
你知道我为什么得到这个吗?
foreach($bookingsToSync as $booking){
$event = new Google_Service_Calendar_Event();
$event->setId($booking['id']);
$event->setSummary($booking['title']);
$event->setDescription($booking['description']);
$start = new \Google_Service_Calendar_EventDateTime();
$start->setDateTime($booking['startDate']->format(DateTime::ATOM));
$event->setStart($start);
$end = new \Google_Service_Calendar_EventDateTime();
$end->setDateTime($booking['endDate']->format(DateTime::ATOM));
$event->setEnd($end);
$output->writeln($event->getId());
$service->events->insert($calendarId, $event);
}
您必须遵循此处定义的指南:https://developers.google.com/google-apps/calendar/v3/reference/events/insert
基本上,ID 必须介于 5 到 1024 个字符之间,并且由以下字母表中的字符组成:0123456789abcdefghijklmnopqrstuv
你应该将你的id编码为base32
$encoded = bin2hex( $booking['id'] );
解码
$decoded = hex2bin( $encoded );
用它来十六进制转换
eventId
字符串。这是最好的方法,因为它确实保留了原始 ID 的唯一性。
/**
* Converts a given string to its hexadecimal representation.
*
* @param {string} str - The input string to be converted.
* @return {string} The hexadecimal representation of the input string.
*/
public static stringToHex(str: string): string {
return str.split("")
.map((char) => char.charCodeAt(0).toString(16).padStart(2, "0"))
.join("");
}