Googleカレンダーの予定をV3 APIでPHPからJSONを取得してWebページに表示する
2020/09/07
Googleカレンダーを使って管理しているライブスケジュールを日付によって、
未来はライブ告知、過去は終わったライブとしてWebページに表示します。
目次
Google側の設定とキー取得
下記の順番で設定します。
設定方法は様々なサイトで紹介されていますので「Google Calendar API v3」とかで検索してください。
- プロジェクトの作成
- APIの有効化
- クライアントID作成
- APIキー取得
Pear HTTPライブラリの準備
今回は共用レンタルサーバー上で実装しなければならず、HTTP RequestやHTTP Clientをインストール出来なかったので、ダウンロードしてからFTP経由で配置しています。
配置したライブラリ
- Pear.php
- HTTP/Request.php
- HTTP/Client.php
- Net/Socket.php
- Net/URL.php
Pear ダウンロードサイトでPackage検索でそれぞれ探してダウンロードしました。
ライブラリの配置先にパスを通す
レンタルサーバーなので実行時にパスを通す必要があります。
なので、set_include_path(get_include_path() . PATH_SEPARATOR . $path);としています。
詳しくは下部をご参照ください。
カレンダーを取得して表示する
このカレンダーから取得しています。
ライブ情報の例です。
※過去のライブは逆に今日より過去のスケジュールを取得しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?php $path = '/originalpath/lib/'; set_include_path(get_include_path() . PATH_SEPARATOR . $path); require_once('HTTP/Request.php'); require_once('HTTP/Client.php'); function getLiveSched($dist) { $calId = "(カレンダーID)"; $apiKey = "(API key)"; $start = date("Y-m-d")."T".date("H:i:s")."Z"; $client = new HTTP_Client(); $client->get('https://www.googleapis.com/calendar/v3/calendars/' . $calId . '/events', array( 'key' => $apiKey, 'timeMin' => $start, 'orderBy' => 'startTime', 'singleEvents' => 'true' )); $response = $client->currentResponse(); $results = json_decode($response['body']); $loopcnt = 1; foreach ($results->items as $item){ if ($loopcnt == 1) { switch($dist) { case 0 : echo '<span class="live_infomation">' . date("Y") . '年ライブ情報</span><br/>'; break; case 1 : break; } } $title = (string) $item->summary; $content = (string) $item->description; $startDateTime = strtotime($item->start->dateTime); $stdateStr = date('Y/m/d', (int)$startDateTime); $sttimeStr = date('H:i', (int)$startDateTime); $where = (string) $item->location; $wpos = strpos($content, '[with]'); $apos = strpos($content, '[ADV]'); $dpos = strpos($content, '[DOOR]'); $winf = 'w/' . substr($content, $wpos + 6, $apos - $wpos - 6); $ainf = 'ADV.' . substr($content, $apos + 5, $dpos - $apos - 5) . ' '; $dinf = 'DOOR.' . substr($content, $dpos + 6) . ' '; echo '<a href="live.php"><span class="info">' . $stdateStr . ' ' . $title . '</a> @'.$where.'<br />'; echo $winf . '<br/>'; echo $ainf . $dinf . 'START.' . $sttimeStr; echo '<br/>'; $loopcnt++; } } |
パラメータはこちらのオフィシャルサイトをご覧ください。
https://developers.google.com/google-apps/calendar/v3/reference/events/list
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
ホームページやサイトがiPhone,iPadのホーム画面に追加された時のアイコンを設定しておく
headタグでapple-touch-iconを指定 [html] [/html …
-
「Cloud Vision Api & Tensorflow勉強会」に行ってきました
「Cloud Vision Api & Tensorflow勉強会」に行 …
-
youtube-container クラスのheightを調整
当ブログにGoogleカレンダーとかGoogleフォームを埋め込むと、heigh …
-
trafficbot.liveからのスパムアクセス
ある日のGoogleAnalyticsで、5,000を超えるページビューがtra …
-
EC-CUBE 4のレイアウトをカスタマイズ
EC-CUBEのデフォルトトップ画面 EC-CUBEインストール後、トップ画面が …
-
Google Apps ScriptでAdmin SDK Directory Serviceを使ってユーザの最終ログイン情報一覧を出力する
GoogleAppsで使わなくなったアカウントを確認する方法として、最終ログイン …
-
Redmine 3.0.0 のメールサーバーでGoogleApps SMTPサーバーを利用する
Redmineのメール通知サーバーとしてGoogleAppsを使用する方法です。 …
-
Googleナレッジパネルの認証を受けるために申請してみた
Googleでエゴサーチしていると、ナレッジパネルなるものがあることに気づきまし …
-
ホームページ、自作サイトにアメブロの新着情報を掲載する
MagipieRSSを使用 なので下記サイトでダウンロード http://mag …
-
chromium OS をインストールするためのUSBをMacで作る
別にChromeBookを購入するお金をけちるわけではないのですが。 chrom …