【PHP】Google Home Mini と Google Assistant と PHP を使って、Google Calendar 登録をしてみた

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 で仕様がかなり変わっているみたいなので、その辺をまた調べないといけないみたい。

関連記事

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA