グーグルカレンダーの予定を一部表示させたい時のPHPコード.

2025.01.08

Logging

おはようございます.グーグルカレンダーの予定を一部表示させたい時の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

OFUSEで応援を送る

タグ

```, インスタンス, カレンダー, グーグルカレンダー, グーグルデベロッパサイト, コード, データベース, フォーマット, 参考, 変換, 年月日, 数値, 時分, 曜日, 曜日名, 曜日名配列, , 皆さん, 近日中,

Raspberry Pi 2を使った自作IoT体験キットが玄人志向から売られてた。

2016.01.12

Logging


Raspberry Pi 2を使った自作IoT体験キットが玄人志向から売られてた。
このRaspberry Pi 2(ラズベリーパイ)ですがLinuxの雑誌には大体、登場しています。
去年辺りから火がついてきた品物ですがこれを使っていろいろな事ができるです。簡単にいえば昔のポケコンのLinuxバージョンだと思っていただけるとわかりやすいと思います。
Raspberry Pi 2からWindows10もサポートされているみたいですが、動作しないとかBBSに書き込まれています。
実際、キワモノの商品なので玄人志向の方々にしか使用が難しいのかも?Iot=モノインターネットのがじわじわと侵食してきています。
でも、いまのところ流行というよりはじわじわと試行錯誤しながら、新しい家電製品などに組み込まれているIot、そんなIotを格安で楽しめちゃうのが、Raspberry Pi 2という認識でいる自分。
実際、温度計センサーとRaspberry Pi 2を結びつけて、ある温度になると暑いとつぶやき事も可能です、他にもカメラと結びつけることも可能ですし、使いみちはいろいろとあると思います。
自分もちょっと興味ありです。
http://www.kuroutoshikou.com/product/others/others_iot/kuro-iotexp_kit/

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

10, 2, BBS, IoT, Linux, Pi, Raspberry, Windows, いま, いろいろ, インターネット, キット, キワ, これ, サポート, センサー, ところ, バージョン, はい, ポケコン, もの, ラズベリー, , 体験, 使用, 侵食, 動作, 去年, 品物, 商品, 大体, 実際, 家電, 志向, 方々, , 格安, 流行, 温度計, , 玄人, 登場, 簡単, 自作, 自分, 製品, 試行錯誤, 認識, 雑誌,

VRは直ぐには流行らない予感。起爆剤はやはりゲーム!?

2016.01.07

Logging


VR直ぐには流行らない予感。特にゲームのVRは・・・流行らない予感が強い。
余程、良質なゲームでもない限りVRは流行らない予感がします。
体験が売りなVR(仮想現実)です、直ぐには流行らない、火が付いたら
じわじわとVRが盛り上がってきそうな気がしますが、おそらく3Dディスプレイと同じ運命になる予感がします。それなりに定着はするけどっていう感じで浸透はしないと自分は考えています。
VRゲームの初期タイトルの映像を見てもプレイしてみたいものがないのが現状です。
唯一、Rezはアメリカでは受けが良さそうな気がします。ただ、Rezを知っているユーザーはどう思うかは、クエッションマークです。サマーレッスンに関して一部のコアユーザーには支持されている模様ですが、TGSなどでは酷評だったみたいです。
ただ、英語の勉強には持って来いだったらそれなりに良いかもしれないなと思う反面、おそらくそれもイマイチ感が強そうです。
発売未定ですので、Rezにしてもサマーレッスンにしても新鮮な驚きや感動があればVRヒットするかもしれません。おそらくVRは自身が体験してみないことには分からないモノだと。
なので、ユーザーが体験できる機会を増やすことこそがヒットする要(かなめ)になると思います。

“PlayStation VR” トレーラー「体験者の声」篇
PlayStation Experience 2015: Rez Infinite – Live Debut | PS VR
Summer Lesson – VR Tech Demo – E3 2015

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

, Rez, TGS, Vr, アメリカ, いまいち, クエッション, ゲーム, コア, サマーレ, サマーレッスン, それ, タイトル, ディスプレイ, プレイ, マーク, もの, ユーザー, 一部, 予感, 仮想, 体験, 初期, 勉強, 反面, 唯一, 売り, 定着, , 感じ, 持って来い, 支持, 映像, 未定, 模様, , 浸透, , 現実, 現状, 発売, 直ぐ, 自分, 良質, 英語, 起爆剤, 運命, 酷評, 限り,

Photo by Pixabay on Pexels.com

意味のない事はしない。{炎上について}

2015.10.13

Logging


炎上するといろいろな意見を書き込まれたりします。
その時、反論しない事をオススメします。
これが普通できないです。
人は自己防衛ため、殆どの人が反論します。
こういう行為は執着心のようなもの。
男の人の脳は執着心が強いとか言われていますが実際は、女性、男性関係なく、脳の一部の機能が強いひとは執着心が強いという事が言われています。
炎上して反論する行為とはこれは本能的なものです。自分を守ったりするため(自我を守る)の機能とも言え、自己防衛とも言えます。
人は自分が不利益を被ると無意識的に自我を守る行為をします。自分が誰かと妬んでいる(嫉妬)とか
そういう行為を行っていると思う人は基本的に脳の機能が人より強いだなと自覚したほうが良いです。
対処法は相手のことを気にしないということに限ります。
それには自我が強い人ではないといけません。
自我を強くするためには反論せずに毎日見てください、そうすると相手が何を言わんとしているかが
理解できます。それと同時に自分と相手を冷静に見ることが出来ます。
冷静に見ることが出来るとどうなるかは炎上した人ならわかると思いますが、早い話、匿名の他人は
重箱の隅をつつくような行為をします。
それに対して怒らないことです。
怒ると自己防衛にひとは走ってしまい火に油を注ぐ行為をしているのと同じです。自身が精神的に弱っていると思えば鎮静するのを待つ事が懸命です。
自分に否がない精神的にも叩かれても大丈夫な人はあえて火に油を注ぎもっと燃やしてあげましょう。
そうすると燃えて灰しかのこらないから…。
元ネタ
昨日、ある人が炎上に合うのをみました。ある人はコメントを書けなくする
対応取りました。
おそらく自分もそうするでしょう。

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

ひと, 他人, 元ネタ昨日, 匿名, , 執着心, 嫉妬, 強いひと, 意見, 殆ど, , , , 炎上, , 自己防衛, 自我, 行為, 重箱, ,