GroupSession WebAPIを使ってPHPで施設の予約内容を取得する

:::note info
APIの概要は「無料版GroupSessionの設計書（WEB API 仕様書）」をダウンロードしてください。
:::
例として今日の設備予約内容を取得する。

※取りあえず動くことだけを目的としているので「ここがおかしい」「こうしたほうがよい」などあればお知らせください。

# 準備
GroupSesseion のインストールや初期設定は割愛。

1\. admin 以外の管理者ユーザーを１つ作成する。

2\. GroupSesseion のプラグインマネージャで「WebAPI」を「使用」にする。

3\. WebAPI の管理者設定 ⇒ Web API基本設定 ⇒ トークン認証を「使用する」

4\. WebAPI の管理者設定 ⇒ Web APIトークン管理 ⇒ トークン発行。1で作った管理者ユーザーを選択してトークンを発行する。生成されたトークン文字列は、このあとすぐに使います。


# 実装
## 施設名と施設SIDを取得する
```sample1.php
<?php
$server='http://XXX.XXX.XXX.XXX:8080/gsession'; // GroupSessionのインストール場所
$token='abcdefghijklmnopqrstuvwxyz='; // トークン

$options = array(
  'http' => array(
    'method' => 'POST',
    'header'=> "Authorization: Bearer ".$token."\r\n"
    )
);

$url1 = $server."/api/reserve/list.do";

$context1 = stream_context_create( $options );
$result1 = file_get_contents( $url1, false, $context1 );
$reader1 = new SimpleXMLElement($result1);
//var_dump($reader1);

foreach ($reader1->Result as $shisetsu) {
        echo "施設名称：".$shisetsu->RsdName.",";
        echo "施設SID：".$shisetsu->RsdSid."<br />\r\n";
}
?>
```

サーバーの IPアドレスを２行目に記載する。
準備4で取得したトークンを３行目に貼り付け。
ここまでで、施設名と施設SID の一覧が表示されるはずです。
うまく表示されなければ、var_dump のコメントを外してエラー内容を確認してください。

施設SID は、施設名をクリックしたときに表示される施設ID ではなく、内部ID です（このあと使います）。


## 施設ごとの予定を取得する
例えば、施設SID が1の施設の今日の予定を取得するなら、

```sample2.php
<?php
$server='http://XXX.XXX.XXX.XXX:8080/gsession'; // GroupSessionのインストール場所
$token='abcdefghijklmnopqrstuvwxyz='; // トークン

$options = array(
  'http' => array(
    'method' => 'POST',
    'header'=> "Authorization: Bearer ".$token."\r\n"
    )
);

$n = new DateTime();
$start= $n->format('Y/m/d 00:00');
$end  = $n->format('Y/m/d 23:59');

$url2 = $server."/api/reserve/yoyaku/search.do?rsdSid=1&startTime=".urlencode($start)."&endTime=".urlencode($end);

$context2 = stream_context_create( $options );
$result2 = file_get_contents( $url2, false, $context2 );
$reader2 = new SimpleXMLElement($result2);
//var_dump($reader2);

foreach ($reader2->Result as $yotei) {
        echo "予約日時：".$yotei->StartDateTime."～";
        echo $yotei->EndDateTime;
        echo " 利用目的：".$yotei->Title."<br />\r\n";
}
?>
```
$url2 の「rsdSid=1」にて施設SIDを指定しています。
今回も、うまく表示されなければ var_dump のコメントを外してエラー内容を確認してください。

サイボウズ API と違って予約日時順でソート済みの結果が返ってくるので楽ちん(*^^)v


## 特定の施設IDの、今日の予約を一覧表示する
というわけで全文。
```sample.php
<?php
$shisetsuID='9999'; // 施設名をクリックしたときに表示される施設ID
$server='http://XXX.XXX.XXX.XXX:8080/gsession'; // GroupSessionのインストール場所
$token='abcdefghijklmnopqrstuvwxyz='; // トークン

$options = array(
  'http' => array(
    'method' => 'POST',
    'header'=> "Authorization: Bearer ".$token."\r\n"
    )
);

// 施設情報を取得する
$url1 = $server."/api/reserve/list.do";

$context1 = stream_context_create( $options );
$result1  = file_get_contents( $url1, false, $context1 );
$reader1  = new SimpleXMLElement($result1);

foreach ($reader1->Result as $shisetsu) {
    if ($shisetsu->RsdId==$shisetsuID) {
        $shisetsuName = $shisetsu->RsdName;
        $shisetsuSID  = $shisetsu->RsdSid;
    }
}

// 今日の予約を取得する
$n = new DateTime();

$start= $n->format('Y/m/d 00:00');
$end  = $n->format('Y/m/d 23:59');

$url2 = $server."/api/reserve/yoyaku/search.do?rsdSid=".$shisetsuSID."&startTime=".urlencode($start)."&endTime=".urlencode($end);

$context2 = stream_context_create( $options );
$result2  = file_get_contents( $url2, false, $context2 );
$reader2  = new SimpleXMLElement($result2);

// 表示する
echo $shisetsuName."の今日の予約内容\r\n";
foreach ($reader2->Result as $yotei) {
        echo "予約日時：".$yotei->StartDateTime."～";
        echo $yotei->EndDateTime;
        echo " 利用目的：".$yotei->Title."<br />\r\n";
}
?>
```

## 全施設の今日の予約を一覧表示する
別な例として、すべての施設の当日の予約を表示する。
```sample2.php
<?php
$server='http://XXX.XXX.XXX.XXX:8080/gsession'; // GroupSessionのインストール場所
$token='abcdefghijklmnopqrstuvwxyz='; // トークン

$options = array(
  'http' => array(
    'method' => 'POST',
    'header'=> "Authorization: Bearer ".$token."\r\n"
    )
);

// 今日の予約を取得する
$n = new DateTime();

$start= $n->format('Y/m/d 00:00');
$end  = $n->format('Y/m/d 23:59');

$url2 = $server."/api/reserve/yoyaku/search.do?startTime=".urlencode($start)."&endTime=".urlencode($end);

$context2 = stream_context_create( $options );
$result2  = file_get_contents( $url2, false, $context2 );
$reader2  = new SimpleXMLElement($result2);

// 表示する
foreach ($reader2->Result as $yotei) {
        echo "予約日時：".$yotei->StartDateTime;
        echo "～".$yotei->EndDateTime;
        echo " 施設：".$yotei->RsdName;
        echo " 利用目的：".$yotei->Title."<br />\r\n";
}
?>
```

***
### 余談
他システムからGroupSessionに自動ログイン
```
http://（サーバーのIPアドレス）:8080/gsession/common/cmn001.do?cmn001Userid=（ユーザー名）&cmn001Passwd=（パスワード）&CMD=login
```
:::note warn
パスワードが丸見えなので使いどころには注意してください。
:::