2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Outlookカレンダー情報を取得する(Laravel)

Last updated at Posted at 2023-02-12

始めに

Outlookのカレンダー情報を取得する機能を、Graph API, Laravel(PHP)を用いて
実装したので、備忘録として残します。

環境

開発環境 バージョン
Laravel 8.83.19
PHP 7.3.10

準備すること

・Microsoft365アカウントは持っている前提とします。
・お試し開発環境を作成したい方はこちらから作成できます。(たしか期間3か月)
 ( https://developer.microsoft.com/en-us/microsoft-365/dev-program )
・HTTPリクエスト等の検証は「Postman」がおすすめ

手順概要

Azureコンソール画面
1. アプリを登録する
2. アプリ情報を設定する(APIアクセス許可)
3. カレンダー情報取得に必要な情報をメモする

実装
4. SDKをインストールする
5. アクセストークンを取得する
6. カレンダー情報(イベント)を取得する

1.アプリを登録する

画像に沿ってアプリを登録します。

1-1.png

1-2.png

1-3.png

2.アプリ情報を設定する(APIのアクセス許可)

画像の手順に沿ってアプリ情報を設定していきます。(APIのアクセス許可)

2-1.png

2-2.png

2-3.png

2-4.png

2-5.png

2-6.png

3.カレンダー情報取得に必要な情報をメモする

画像に沿ってアクセストークン取得に必要な情報をメモします。

3-1.png

3-2.png

3-3.png

3-4.png

3-5.png

※クライアント シークレットの値は、一度しか表示されませんので注意してください。
3-6.png

4.SDKをインストールする

Microsoft Graph PHP SDK をインストールします。

composer require microsoft/microsoft-graph

5.アクセストークンを取得する

CalendarController.php
use Illuminate\Support\Facades\Log;
use Microsoft\Graph\Graph;

/**
* Outlookカレンダーからイベント情報を取得する
*/
public function getOutlookCalendarEvent()
{
    Log::debug(__FUNCTION__);

    // 初期設定
    $tenant_id     = 'テナントID'
    $client_id     = 'クライアントID'
    $client_secret = 'クライアントシークレット'
    $user_id       = 'ユーザー情報';

    // guzzleインスタンス生成
    $guzzle = new \GuzzleHttp\Client();

    // URIを作成する
    $url_access_token = 'https://login.microsoftonline.com/'.$tenant_id.'/oauth2/v2.0/token';

    // アクセストークンを取得する
    $token = json_decode($guzzle->post($url_access_token, [
        'form_params' => [
            'client_id'     => $client_id,
            'client_secret' => $client_secret,
            'scope'         => 'https://graph.microsoft.com/.default',
            'grant_type'    => 'client_credentials',
        ],
    ])->getBody()->getContents());
    $accessToken = $token->access_token;

    // Graphインスタンスを生成する
    $graph = new Graph();
    $graph->setAccessToken($accessToken);

    ーー 省略 ーー
}

6.カレンダー情報(イベント)を取得する

CalendarController.php
use Illuminate\Support\Facades\Log;
use Microsoft\Graph\Graph;

**
* Outlookカレンダーからイベント情報を取得する
* 
*/
public function getOutlookCalendarEvent()
{

    ーー 省略 ーー

    // Graphインスタンスを生成する
    $graph = new Graph();
    $graph->setAccessToken($accessToken);

    // 取得したい日時範囲を設定する
    $dateTimeStart = "'2023-02-10T00:00:00'";
    $dateTimeEnd   = "'2023-02-10T23:59:59'";
    $url_time_filter = "?".'$filter'."=start/dateTime+ge+"."$dateTimeStart"."+and+end/dateTime+le+".$dateTimeEnd;

    // 取得したい値のキーを設定する
    $url_select      = '$select'."=subject,id,bodyPreview,start,end";

    // URIを作成する
    $url_calendar    = "/users/".$user_id."/events".$url_time_filter."&".$url_select;
    // $url_time_filter, $url_selectは、オプションなので /events まででも取得できます。

    // イベント情報を取得する
    $event  = $graph->createRequest("GET", $url_calendar)->addHeaders(["Prefer" => 'outlook.timezone="Tokyo Standard Time"'])->execute();
    $events = $event->getBody();

    Log::debug($event);
}

終わりに

テクニカルサポートは外国の方が対応となります。
正直言って、素晴らしい対応をしてくださいます。本当にありがたいです。
テクニカルサポートとのやり取りは基本英語です。
頼めば、メールは日本語に訳してく送ってくれます。
しかし、電話、Teams通話(画面共有あり)の場合は英語のみとなります。

最後まで閲覧ありがとうございます。
ご指摘、意見ありましたら、コメントお願いいたします。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?