@Blog{zip358.com}
日常日誌からプログラムやYOUTUBER紹介、旅日記まで日々更新中です。
グーグルカレンダーの予定を一部表示させたい時のPHPコード.
2025.01.08
おはようございます.グーグルカレンダーの予定を一部表示させたい時のPHPコードは下記になります、参考にしたサイトはこちらですが参考にしただけでコードは違うものになります.APIを毎日叩いていると課金しなくてはならないかもなのでデータベースに保存する形にしました.これも良い方法かと言えばどうだろうと言う思いもあります.
<?php
ini_set('display_errors', 0);
require_once './vendor/autoload.php';
require_once './config.php';
use Carbon\Carbon;
use Google\Client;
use Google\Service\Calendar;
use Illuminate\Database\Capsule\Manager as DB;
class openSchedule
{
public $DB = null;
public function __construct()
{
$database = new DB();
$database->addConnection([
'driver' => 'mysql',
'host' => DB_HOST,
'port' => PORT,
'database' => DB_DATABASENAME,
'username' => DB_USER,
'password' => DB_PASSWORD,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
]);
$database->setAsGlobal();
$database->bootEloquent();
$this->DB = $database;
}
public function saveSchedule($dateTimeString):void
{
//$this->DB::table('schedules')->delete();
try {
$client = new Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Calendar::CALENDAR_READONLY);
$client->setAuthConfig(JSONPATH);
$service = new Calendar($client);
// カレンダーID
$calendarId = GOOGLECALENDARID;
// 取得時の詳細設定
$optParams = [
'maxResults' => 10,
'orderBy' => 'startTime',
'singleEvents' => TRUE,
'timeMin' => (new \DateTime($dateTimeString))->format(DATE_RFC3339),
'timeZone' => 'Asia/Tokyo',
];
$results = $service->events->listEvents($calendarId, $optParams);
if (empty($results->getItems())) {
echo "イベントが見つかりませんでした。";
} else {
foreach ($results->getItems() as $event) {
$this->DB::table('schedules')->insert([
'start' => Carbon::parse($event->getStart()->dateTime)->format('Y-m-d H:i:s'),
'end' => Carbon::parse($event->getEnd()->dateTime)->format('Y-m-d H:i:s'),
'title' => $event->getSummary(),
'detail'=>$event->getDescription()
]);
}
}
} catch (Google\Service\Exception $e) {
echo 'Google Service Exception: ' . $e->getMessage();
} catch (Exception $e) {
echo 'General Exception: ' . $e->getMessage();
}
}
public function getWeekDays($dateTimeString):string
{
// Carbonインスタンスに変換してフォーマット
$carbon = Carbon::parse($dateTimeString);
// 日本語の曜日名配列
$japaneseWeekdays = ['日', '月', '火', '水', '木', '金', '土'];
// 曜日の数値を取得し、日本語の曜日名に変換
$weekdayNum = $carbon->dayOfWeek;
$japaneseWeekday = $japaneseWeekdays[$weekdayNum];
return $japaneseWeekday;
}
public function getSchedule($dateTimeString):string
{
$str = '';
$events = $this->DB::table('schedules')->select(['*'])->where('start','>=',$dateTimeString)->limit(1)->get();
foreach($events as $event){
$str.= sprintf("%s <br>",$event->title);
$str.= sprintf("%s %s曜日 <br>",Carbon::parse($event->start)->format('Y年m月d日 H時i分'),$this->getWeekDays($event->start));
$str.= sprintf("%s<br>",Carbon::parse($event->end)->format('Y年m月d日 H時i分'));
}
return $str;
}
public function getLastDate():string|null
{
$lastRecord = $this->DB::table('schedules')
->orderBy('id', 'desc')
->first();
return $lastRecord?$lastRecord->start:null;
}
}
//print (new openSchedule)->getSchedule((new \DateTime())->format('Y-m-d 00:00:00'));
if(isset($argv) && $argv[0]){
$openSchedule = new openSchedule();
$dateTimeString = $openSchedule->getLastDate();
if($dateTimeString){
$date = new DateTime($dateTimeString);
$date->modify('+1 day');
$openSchedule->saveSchedule($date->format('Y-m-d 00:00:00'));
}else{
$openSchedule->saveSchedule((new \DateTime())->format('Y-m-d H:i:s'));
}
}
因みに近日中にブログに仕事の予定などを記載するようにします.近日中なのでいつになるかは未定です.
そうそうCalendarIDという物がグーグルデベロッパサイトにあると思い込んでいて馬鹿な事をしていました.皆さんは間違わないように(笑).CalendarIDはグーグルカレンダーの設定の中にあります.
明日へ続く
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, インスタンス, カレンダー, グーグルカレンダー, グーグルデベロッパサイト, コード, データベース, フォーマット, 参考, 変換, 年月日, 数値, 時分, 曜日, 曜日名, 曜日名配列, 火, 皆さん, 近日中,
24年12月26日にて仕事納めでした.10連休ですー!.
2024.12.29
おはようございます.24年12月26日にて仕事納めでした.10連休ですー!でで~ん.この記事は26日の早朝に書いた記事になります.今年より来年がより良い1年でありますように.
この10連休も毎日ブログが更新されるように仕事が終わった後から記事をある程度、貯めていこうと思っています.ちなみに今の段階で4本のストックがありますが、来年からこのブログの他にIT戦記(絵)みたいなものを始めようと思っています.リンクはこっそりフッターの兎さんにもう仕込んでいたりしてます.
そちらの日誌も書かないといけないので来年は結構大変かもと思いつつもメインのブログはこちらです.こちらは毎日更新ですねー.大変でも副収入になると思えば頑張りがいはあります.
副収入だけで生活できればそれは言う事無いですが、そんなに簡単なことではないです.
来年の目標は副収入がコンスタントに入ってくるようにしたいという思いがあります.仕事も頑張りつつ副収入も試行錯誤して安定させたい.その次の目標は副収入が給与水準になることです.
それを可能にするにはカナリ大変なことだと思いますが、今年少し希望が持てたので長期的な目標にしたいと思っています.
明日へ続く
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
かなり, コンスタント, ストック, フッター, メイン, 兎さん, 副収入, 年月日, 戦記, 日誌, 早朝, 来年, 次, 段階, 目標, 給与水準, 絵, 試行錯誤, 連休, 頑張りがい,