グーグルカレンダーの予定を一部表示させたい時の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で応援を送る

タグ

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

windows10から7に戻して仮復旧。

2017.03.03

Logging


windows10から7に戻して仮復旧を
昨日の朝行いました。
7にして思ったことは7ってこんなUIだったけと・・・。
久しぶりに7を触って10にもうどっぷり何だと。
ちなみに仮復旧したのは良いのだけど
ビデオボードが何やら怪しい気配・・・。
認識がうまく行えていないみたいで、再度10に
置き換えるときに対応しないと・・・。
Cドライブには殆どデータを入れていなかったけれど
音楽データは全部、クラウドから落とし直さないといけないので
フォーマットは極力したくないですね。
自作PCを新しくする計画があるのですが(先の話
組み立ては業者に頼むつもりでいます、昔は組み立てていたけれど
自分が組み立てると、やはり配線がごちゃごちゃして
しまうのです。そして結構不器用なので
PCケースは一番大きなケースです。
ウィンドウズ10が壊れて学んだことは
DVDでOSを購入するべし、何故ならネットで
購入した場合、再インストールができない場合があります。
なので、自作の場合、DSP版を購入すべしです。
 

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

Cドライブ, DSP版, PCケース, Windows10, ウィンドウズ, ウィンドウズ10, クラウド, ビデオボード, フォーマット, 仮復旧, 再インストール, 怪しい気配, 業者, 殆どデータ, 組み立て, 自作, 自作PC, 認識, 配線, 音楽データ,

Inateck HDDスタンド HDD/SSD対応でクローンする方法:うまくいかない時の対処法。

2015.08.05

Logging


Inateck HDDスタンド HDD/SSD対応でクローンする方法(うまくいかない時の対処法)を載せときます。まず、このInateck HDDスタンド製品ですが、マニュアルが英語なので英語があまりわからない自分は直感で何とかしたのです。同じように英語があまりわからない方へ対処法を載せときます。まず、WindowsのOSまるごとコピーする媒体(HDDやSSD)をA差込口に、Bの差込口に新規の媒体を挿入します。

Inateck HDDスタンドの電源を入れます、A側がコピー元の媒体、B側がコピー先の媒体であることを確認し、CLONEのボタン長押しします(3秒ぐらい)。指をはなすと100%と記載されている部分のLEDが点灯します。点灯確認したら、直ぐに再度、CLONEのボタン長押しします(2?3秒ぐらい)。再度、指を離すと25%の部分のLEDが点滅します。点滅を確認したら100%のLEDが点灯になるまで待ちます。
※ちなみにLEDが点滅中はコピー中なので電源を落とさないように!!

※尚、事前に新規媒体のフォーマットを行いましょう。フォーマットの仕方に関してはInateck HDDに新規の媒体を指しInateck HDDの電源をONにします。次にInateck HDDとWindowsパソコンをUSBで繋ぎます。繋いだあとウィンドウズのコンピューター管理より媒体のフォーマットを行います。具体的な手順に関してはぐぐってください。


著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

B, CLONE, HDD, Inateck HDD, Inateck HDDスタンド, Inateck HDDスタンド製品, LED, ON, OSまるごとコピー, SSD, USB, ウィンドウズ, フォーマット, マニュアル, 媒体, 指しInateck, 点滅, 点灯, 直感, 電源,

ブルーレイに外付けの自作USBハードディスクを取り付ける方法(ソニー)(`・ω・´)。

2015.01.20

Logging


 
ブルーレイに外付けの自作USBハードディスクを取り付ける方法(ソニー)ですが、意外にも簡単でUSBハードディスクを購入するよりも安価なので方法を伝授します。まず3.5型のHDDケースとHDD3.5インチを用意します(USBケーブルが必要な場合あり:だいたい3.5型のHDDケースを購入すると付属してます)。用意出来ましたら、3.5型のHDDケースを開けてHDD3.5インチを取り付けるだけです。取り付けと言っても差しこむだけですので誰でも出来ます。注意点はケースがSATA規格でHDDはIDE規格だったりすると差込口があわないので変換機を別途用意しないといけなくなります。現在の主流はSATA規格なのでまず間違えることはないと思います。差し込みが終わったら、USBをブルーレイに差しこむだけであとはブルーレイが勝手に認識してくれます(`・ω・´)。その後、ブルーレイのマニュアル(ソニー)に従ってHDDを登録(フォーマット)すれば増設、終わりです。ちなみにHDDとブルーレイの相性で認識しない場合があります(古いブルーレイなどに有りがち)。そういう場合は諦めてパソコンの外付けHDDとして使用しましょう(`・ω・´)・・・・。
自作外付けHDDのメリットはHDDの取っ替え引っ替えができちゃう事です。録画したHDD消したくないなぁと思った場合、HDDだけ交換すれば良いというメリットがあります。外付けHDDの交換より比較的に安価だということです(容量が増えれば増えるほど)。
※HDD3.5インチで容量が3TB(3テラバイト)の価格が1万円弱ぐらいです。

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

3テラバイト, HDD3.5インチ, HDDケース, IDE規格, SATA規格, USBケーブル, ソニー, フォーマット, ブルーレイ, マニュアル, メリット, , 古いブルーレイ, 変換機, 外付けHDD, 容量, 差し込み, 方法, 注意点, 自作USBハードディスク, 自作外付けHDD,