Google Calendar APIを使うための事前準備ガイド
の続きになっております
4.エディターにコードを書きイベントを作成
5.ルートを作成しテスト実施(api.php)
6.ルートを作成しテスト実施(web.php)
について説明します。Google Calender Apiの準備はできているけどコードの書き方がわからないという方は参考にしてもらえたらなと思います。
環境は以下のようになっています
php: PHP 8.2.9
DB: MySql
エディター: vscode
4.エディターにコードを書きイベントを作成
4-1: Googleが提供するPHP用のGoogle APIクライアントライブラリをインストールします。言語によってコマンドが違います。
composer require google/apiclient:^2.0
4-2: コードを書くコントローラーを作成します
php artisan make:controller GoogleCalendarController
4-3: イベント作成のコードを書いていきます。
詳細はApiリファレンスのイベント/Insertで確認できます
https://developers.google.com/calendar/api/v3/reference/events/insert?hl=ja
<?php
namespace App\Http\Controllers;
use Google\Client;
use Google\Service\Calendar\Event as Google_Service_Calendar_Event;
use Google\Service\Calendar as Calendar;
class GoogleCalendarController extends Controller
{
public function createEvent()
{
$client = new Client();
// 認証情報を設定(.envでサービスアカウントJSONファイルのパスを設定)
$client->setAuthConfig(env('GOOGLE_CALENDAR_API_KEY'));
//Google カレンダーにアクセスするための権限をリクエスト
$client->addScope(Calendar::CALENDAR);
//Google Calendar API へのアクセスを提供するサービスオブジェクトを作成
$service = new Calendar($client);
// イベントの詳細を設定 //ここは自由に設定してください
$event = new Google_Service_Calendar_Event([
'summary' => 'テストイベント',
'location' => '東京都',
'description' => 'このイベントはテストです。',
'start' => [
'dateTime' => '2024-11-24T10:00:00',
'timeZone' => 'Asia/Tokyo',
],
'end' => [
'dateTime' => '2024-11-24T12:00:00',
'timeZone' => 'Asia/Tokyo',
],
]);
//カレンダーIDを取得 //.envに貼り付けたカレンダーIdを読み込む
$calendarId = env('GOOGLE_CALENDAR_ID');
try {
//指定したカレンダーに新しいイベントを追加
$event = $service->events->insert($calendarId, $event);
return response()->json([
'message' => 'イベントが作成されました。',
'eventId' => $event->getId()
]);
} catch (\Exception $e) {
return response()->json([
'error' => 'イベント作成に失敗しました: ' . $e->getMessage()
], 500);
}
}
}
今回はまだ試作段階ですのでこのような感じになっております。
setAuthConfigにサービスアカウントを作成した際にダウンロードされたJsonファイルのpathをenv経由で読み込む
$calendarIdに自身のGoogle CalenderのIdをenv経由で読み込む
詳細は前章に記載しております。
5: postmanでのテストを行い、Google Calenderを見ていきます。
テストを行うにあたりルートをapi.phpを作成する必要があるため作成します。
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
//先ほど作成したGoogleCalendarControllerを読み込む
use App\Http\Controllers\GoogleCalendarController;
Route::post('/create-event', [GoogleCalendarController::class, 'createEvent']);
リクエストを送ります。今回はリクエスト内容をコードに書きましたのでbodyは空で行います。
Google Calenderを見てみます。
GoogleCalenderControllerでdatetimeに設定した日付を確認します。以下のように予約が入ります。
6 postmanを使わずweb.phpにルートを書き行なってみます。
イベントを作成するのにGETを使うと違和感がありますが、コード内でイベントの作成をまずは行いたいためこのまま進めます。
6-1: ルートの作成
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\GoogleCalendarController;
//プラウザではGETメソッドでアクセスするため、Route::getを使用
Route::get('/create-event', [GoogleCalendarController::class, 'createEvent']);
GoogleCalendarControllerの方で予約の日付を25日へ変更しました。
先ほどweb.phpで作成したルートをプラウザで叩きます。
http://127.0.0.1:8000/create-event
Google Calendarで確認すると同様に予約ができています。
最後に
Google Calendar APIを使用し予約アプリを作りたいと思い今回作成しました。今のままだとコードに書いた予約しか作れないため今後、改良していきたいと思っております。
ご覧いただきありがとうございます。
以上になります。