Google CalendarをLaravelから操作

laravel
Google CalendarをLaravelから操作 | アールエフェクト
Laravelでアプリケーションを構築する際にカレンダー機能との連携が必要になる場合があります。その場合にGoogle Calendar APIを使うことでLaravelからGoogle Calendarを操作することができます。

 Laravelで構築したアプリケーション内で カレンダーを利用したいという要件がある場合に Google Calendar  APIを利用することで LaravelからGoogle Calenderを操作することができます。

本文書では Laravelを利用してGoogle  Calendarを操作するまでの設定と使用方法について2つの方法で行っています。一つはgoogle/apiclientパッケージを直接利用する方法もう一方は Laravelからより簡単に カレンダーを操作するために作成されたspatie/ laravel google-calendarパッケージを利用した方法です。

最初にgoogle/apiclientを使って動作確認を行い確認し、その後spatie/ laravel google-calendarを使った方法でイベントの取得を行います。

spatie/ laravel google-calendarパッケージも内部ではgoogle/apiclientを利用しています。

PHPで Google Calendarを操作したい場合は以下の文章が参考になります。

 あわせて読みたい

PHPとGoogle APIでGoogle Calendarを操作する(取得、追加、更新)

目次

環境設定

認証設定

 Laravelフレームワークやプログラム言語に関わらず API経由で Google Calendarを操作するためには認証設定を行う必要があります。認証設定についてはプログラム言語を超えて共通なものなので以下の文書を参考に設定をおこなってください。

 あわせて読みたい

Google APIを利用するためのサービスアカウントの設定(認証)

認証の設定作業が完了するとサービスアカウントIDとアクセスに必要な秘密鍵の情報等が含まれるキーファイルを取得することができます。サービスアカウントIDは Google Calendarのアクセス設定、キーファイルはアクセスする際に利用します。

Google Calendarの設定

 Google Calendar上ではアクセス許可の設定を行う必要があります。サービスアカウントを作成したユーザで Google Calendarにログインしてください。

 カレンダーの追加

既存の カレンダーを利用することもできますが動作確認用に新規でカレンダーの追加を行います。マイカレンダーから新しいカレンダーを作成するをクリックします。

既存のカレンダーを利用する場合は新しくカレンダーを追加する必要はありませんので カレンダーのアクセス設定に進んでください。

新しいカレンダーの作成
新しい カレンダーの作成

名前は動作確認用カレンダーとします。名前は任意なので好きな名前をつけてカレンダーを作成ボタンをクリックしてください。

新しいカレンダーの作成
新しいカレンダーの作成

カレンダーのアクセス設定

新しい カレンダーを作成後、 Google Calendarの画面の右上部にある歯車のアイコン、設定をクリックしてください。

カレンダー設定
 カレンダー設定

設定画面が開いたら、左側のメニューにある動作確認用カレンダーを選択してください。

動作確認用カレンダーの選択
動作確認用 カレンダーの選択

左側のメニューの特定のユーザとの共有をクリックするか右側の画面をスクロールして特定のユーザーとの共有画面にログインしたユーザのメールアドレスが表示されていることを確認し、その下のユーザーを追加をクリックしてください。

特定のユーザとの共有画面
特定のユーザとの共有画面

ここでは認証設定で取得したサービスアカウントIDを入力します。

ユーザの設定画面
ユーザの設定画面

メールアドレスを入力後、権限は予定の変更権限に変更し送信ボタンをクリックしてください。

サービスアカウントIDの設定
サービスアカウントIDの設定

送信により追加が完了するとgoogleアカウントの下にサービスアカウントIDの情報が表示されます。ユーザの追加は完了です。

追加したユーザ
追加したユーザ

作成した カレンダーのIDを取得

次に カレンダーの統合に移動して、カレンダーのIDを取得してください。 APIでアクセスする際に必要となるIDです。

カレンダーの統合画面
カレンダーの統合画面

Laravelのインストール

composerコマンドを使って Laravelのインストールを行います。


 $ composer create-project --prefer-dist laravel/laravel laravel_google_calendar

インストールした Laravelのバージョンは6.11.0です。


 $ php artisan -V
Laravel Framework 6.11.0

google/apiclientパッケージのインストール

 Google Calendar API経由でアクセスするためにgoogle/apiclientパッケージを利用します。google/apiclientパッケージもcomposerコマンドでインストールを行います。


$ composer require google/apiclient:^2.0

秘密鍵のキーファイルの保存

認証設定で取得した秘密鍵のキーファイルを Laravelからアクセスできる場所に保存します。 Laravelのインストールディレクトリのstorage/appの下に google-calendarディレクトリを作成しキーファイルを保存します。

Google Calenderの操作

コントローラーファイルの作成

動作確認用にコントローラーファイルを作成します。


 $ php artisan make:controller GoogleCalendarController

web.phpファイルにはルーティングを追加します。


Route::get('/', function () {
    return view('welcome');
});

Route::resource('/calendar', 'GoogleCalendarController');

環境変数の設定

 カレンダーIDは.envファイルに登録を行います。.envファイルの最後に追加してください。GOOGLE_ CALENDAR_IDは任意の名前をつけることができます。


GOOGLE_CALENDAR_ID = "XXXXXXXXX@group.calendar.google.com"

GOOGLE_ CALENDAR_IDの値はgoogle  calendar内で取得した カレンダーIDです。環境によって異なる値です。

イベント一覧を取得

Google CalendarController.phpファイルを使って Google Calendarに登録されているイベントを取得します。


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Google_Client;

use Google_Service_Calendar;

class GoogleCalendarController extends Controller
{
    public function index(){

      $client = $this->getClient();

      $service = new Google_Service_Calendar($client);

      $calendarId = env('GOOGLE_CALENDAR_ID');

      $optParams = [];

      $results = $service->events->listEvents($calendarId, $optParams);

      $events = $results->getItems();

      foreach($events as $event){
        echo $event->getSummary().'';
      }


    }

    public function getClient()
    {

      $client = new Google_Client();

      $client->setApplicationName('Google Calendar API plus Laravel');

      $client->setScopes(Google_Service_Calendar::CALENDAR_READONLY);

      $client->setAuthConfig(storage_path('app/google-calendar/XXXXXXX.json'));

      return $client;

    }

}

 カレンダーのIDについては.envファイルに保存されているのでヘルパー関数envにパラメータを設定して取得しています。

$client->setAuthConfigメソッドではキーファイルを指定しています。保存した場合はヘルパー関数のstorage_pathを利用しています。

ブラウザでhttp://127.0.0.1:8000/ calendarへアクセスを行います。

ブラウザでアクセスする前は必ずphp artisan servコマンドで開発サーバを起動させておく必要があります。

コードの中でイベントのタイトルのみ表示されるので以下の2つが表示されます。

イベントのタイトル取得
イベントのタイトル取得

 カレンダーは下記のようになっています。

イベントの更新
イベントの更新

spatie/laravel-google-calendarパッケージを利用

インストールや初期設定についてはhttps://github.com/spatie/laravel-google-calendarを参考に行なっています。

パッケージのインストールと設定

spatie/ laravel google-calendarパッケージはcomposerコマンドでインストールを行います。


$ composer require spatie/laravel-google-calendar

サービスプロバイダーの設定を行います。config¥app.phpファイルを開いて下記を追加します。


'providers' => [
    ・
    ・

    Spatie\GoogleCalendar\GoogleCalendarServiceProvider::class,

],

設定ファイルの作成を行います。configディレクトリに google-calendar.phpファイルが作成されます。


 $ php artisan vendor:publish --provider="Spatie\GoogleCalendar\GoogleCalendarServiceProvider"
Copied File [/vendor/spatie/laravel-google-calendar/config/google-calendar.php] To [/config/google-calendar.php]
Publishing complete.
Publishing complete.

中身は下記の通りで秘密鍵のキーファイルと カレンダーIDの設定を行なっています。


<?php

return [

    /*
     * Path to the json file containing the credentials.
     */
    'service_account_credentials_json' => storage_path('app/google-calendar/service-account-credentials.json'),

    /*
     *  The id of the Google Calendar that will be used by default.
     */
    'calendar_id' => env('GOOGLE_CALENDAR_ID'),
];

.envファイルへのGOOGLE_ CALENDAR_IDの設定は完了していますが、キーファイルのファイル名が異なっているので、保存したファイルをservice-account-credentials.jsonに変更するか google-calendar.phpファイル内の設定値を変更するかどちらかの変更を行なってください。

カレンダーのイベントの取得

Google CalendarController.phpファイルを以下のように書き換えます。spatie/ laravel google-calendarでは下記のように短いコードで Google Calendarからイベントを取得することができます。


namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Spatie\GoogleCalendar\Event;

class GoogleCalendarController extends Controller
{
    public function index(){

      $event = new Event;

      $events = Event::get();

      foreach($events as $event){
        echo $event->name.'';
      }

    }

}
イベントのタイトル取得
イベントのタイトル取得

google/apiclientでもspatie/ laravel google-calendarでもイベントを取得することは可能ですがspatie/ laravel google-calendarを利用したほうが短いコードで記述できることが確認できました。

 同じカテゴリーのおすすめ記事

 あわせて読みたい

Laravelでファイルをアップロードする方法を詳細解説 あわせて読みたい入門者のためのLaravelのバリデーションとエラーメッセージ あわせて読みたいLaravel5.7で初めてのルーティングでHello World あわせて読みたいlaravel-dompdfバージョン7.0環境での日本語環境でPDFを作成 あわせて読みたいLaravel5.8+vue.jsのHot Module Replacement

コメント

タイトルとURLをコピーしました