webhook.php
<?php require_once __DIR__.'/google-api-php-client-1.1.7/src/Google/autoload.php'; require_once __DIR__.'/functions.php'; $calendarId = '◯◯◯@group.calendar.google.com'; $allDay = 1; $startDay = date('Y-m-d'); $startTime = '00:00:00'; $endDay = date('Y-m-d'); $endTime = '00:00:00'; $update_response = file_get_contents("php://input"); $update = json_decode($update_response, true); $summary = $update["originalRequest"]["data"]["inputs"][0]["arguments"][0]["textValue"]; $description = $update_response; $event = writeGoogleCalendar($calendarId, $allDay, $startDay, $startTime, $endDay, $endTime, $summary, $description);
functions.php
<?php /** * jsonファイルからGoogleClientを生成します */ function getGoogleClientByJson() { $json_path = __DIR__.'/key/◯◯.json'; $json_string = file_get_contents($json_path, true); $json = json_decode($json_string, true); $private_key = $json['private_key']; $client_email = $json['client_email']; $scopes = array(Google_Service_Calendar::CALENDAR); $credentials = new Google_Auth_AssertionCredentials( $client_email, $scopes, $private_key ); $client = new Google_Client(); $client->setApplicationName("Google Calendar PHP API"); $client->setAssertionCredentials($credentials); if ($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion(); } return $client; } /** * カレンダーにデータを書き込む * * @param string $calendarId :カレンダーID * @param int $allDay :終日かどうか(1の場合は終日として登録) * @param string $startDay :開始日 * @param string $startTime :開始時間($allDay=1のときは無視されます) * @param string $endDay :終了日 * @param string $endTime :終了時間($allDay=1のときは無視されます) * @param string $summary :カレンダーの件名に登録されます * @param string $description:カレンダーの説明に登録されます */ function writeGoogleCalendar($calendarId, $allDay, $startDay, $startTime, $endDay, $endTime, $summary, $description) { $client = getGoogleClientByJson(); $service = new Google_Service_Calendar($client); $dt1 = new DateTime($startDay.' '.$startTime); $dt2 = new DateTime($endDay.' '.$endTime); if ($allDay == 1) { // $allDayが1であれば、終日で登録する $event = new Google_Service_Calendar_Event(array( 'summary' => $summary, 'description' => $description, 'start' => array( 'date' => $dt1->format('Y-m-d'), // 開始日 'timeZone' => 'Asia/Tokyo', ), 'end' => array( 'date' => $dt2->format('Y-m-d'), // 終了日 'timeZone' => 'Asia/Tokyo', ), )); } else { // $allDayが1以外であれば、日時で登録する $st = $dt1->getTimestamp(); $et = $dt2->getTimestamp(); $event = new Google_Service_Calendar_Event(array( 'summary' => $summary, 'description' => $description, 'start' => array( 'dateTime' => date('c', $st), // 開始日時 'timeZone' => 'Asia/Tokyo', ), 'end' => array( 'dateTime' => date('c', $et), // 終了日時 'timeZone' => 'Asia/Tokyo', ), )); } $event = $service->events->insert($calendarId, $event); }
今回は、google-api-php-client-1.1.7 を使用しましたが、2.0.0 で仕様がかなり変わっているみたいなので、その辺をまた調べないといけないみたい。