勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

CodeIgniter4で祝日一覧APIにCURLでリクエストし結果をファイルキャッシュする方法

   2024/01/31  PHP CodeIgniter

Codeigniter4.4.4で祝日一覧APIにCURLでリクエストしたい。尚、毎回APIにリクエストするのも相手側に迷惑がかかるし、祝日自体そう頻繁に変わるわけではないのでリクエスト後の戻り値は適当に有効期限を決めてファイルキャッシュさせたい。以下に実装方法をメモ。

 

リファレンス

CURL関連

https://codeigniter4.github.io/userguide/libraries/curlrequest.html

キャッシュ関連

https://codeigniter.com/user_guide/libraries/caching.html

 

ソースコード

public function index()
{

    //キャッシュが取得できない、もしくは有効期限切れの場合
    if( !$holidays = cache('holidays') ){

        //祝日APIのデータを取得
        $url = 'https://holidays-jp.github.io/api/v1/date.json';
        $client = \Config\Services::curlrequest();
        $response = $client->request('GET', $url);

        //ステータスコードが200(成功)の場合
        if( $response->getStatusCode() == 200 ){

            //APIのレスポンスを変数にセット
            $holidays = $response->getBody();

            //キャッシュファイルを作成(key, value, 有効時間を秒で指定)
            cache()->save('holidays', $holidays, 10);

        //エラー処理
        }else{
            log_message('error', 'APIからデータを取得できませんでした。');
        }
    }

    var_dump($holidays);

}

解説

キャッシュ方法

コメントの通り「save(key, value, 有効時間を秒で指定);」という形でキャッシュできる。

キャッシュファイルの保存場所

キャッシュファイルはデフォルトで「/codeigniter4/writable/cache」ディレクトリに保存される。上記ソースコードだと「holidays」というファイルが生成され、以下のような内容が記述される。

a:3:{s:4:"time";i:1705556379;s:3:"ttl";i:10;s:4:"data";s:1958:"{
    "2022-01-01": "元日",
    "2022-01-10": "成人の日",
    "2022-02-11": "建国記念の日",
    "2022-02-23": "天皇誕生日",
    "2022-03-21": "春分の日",
    "2022-04-29": "昭和の日",
    "2022-05-03": "憲法記念日",
    "2022-05-04": "みどりの日",
    "2022-05-05": "こどもの日",
    "2022-07-18": "海の日",
    "2022-08-11": "山の日",
    "2022-09-19": "敬老の日",
    "2022-09-23": "秋分の日",
    "2022-10-10": "スポーツの日",
    "2022-11-03": "文化の日",
    "2022-11-23": "勤労感謝の日",
    "2023-01-01": "元日",
    "2023-01-02": "休日 元日",
    "2023-01-09": "成人の日",
    "2023-02-11": "建国記念の日",
    "2023-02-23": "天皇誕生日",
    "2023-03-21": "春分の日",
    "2023-04-29": "昭和の日",
    "2023-05-03": "憲法記念日",
    "2023-05-04": "みどりの日",
    "2023-05-05": "こどもの日",
    "2023-07-17": "海の日",
    "2023-08-11": "山の日",
    "2023-09-18": "敬老の日",
    "2023-09-23": "秋分の日",
    "2023-10-09": "スポーツの日",
    "2023-11-03": "文化の日",
    "2023-11-23": "勤労感謝の日",
    "2024-01-01": "元日",
    "2024-01-08": "成人の日",
    "2024-02-11": "建国記念の日",
    "2024-02-12": "建国記念の日 振替休日",
    "2024-02-23": "天皇誕生日",
    "2024-03-20": "春分の日",
    "2024-04-29": "昭和の日",
    "2024-05-03": "憲法記念日",
    "2024-05-04": "みどりの日",
    "2024-05-05": "こどもの日",
    "2024-05-06": "こどもの日 振替休日",
    "2024-07-15": "海の日",
    "2024-08-11": "山の日",
    "2024-08-12": "休日 山の日",
    "2024-09-16": "敬老の日",
    "2024-09-22": "秋分の日",
    "2024-09-23": "秋分の日 振替休日",
    "2024-10-14": "スポーツの日",
    "2024-11-03": "文化の日",
    "2024-11-04": "文化の日 振替休日",
    "2024-11-23": "勤労感謝の日"
}";}

 

所感

キャッシュファイル作成の際、簡単な名前だと被ったりしそう(チーム開発の場合等)。

被った場合は上書き保存されると思われるので、キャッシュファイル生成時は名前を「【Model / Controller名】_【メソッド名】_【キャッシュファイル名】」とかにしておいた方が安全かも。

 - PHP CodeIgniter

  関連記事

CodeIgniter3でファイルキャッシュする方法

CodeIgniterでファイルキャッシュが楽に導入できた。そこそこ使いそうなの ...

CodeIgniter4でGET / POSTパラメータの受け取りとルーティング設定方法

CodeIgniter4.4.4でページを開いた際にGET / POSTパラメー ...

CodeIgniter3でログをファイルに出力する方法

Codeigniter3でエラーログの設定を行い特定のファイルに出力させ当該ログ ...

CodeIgniterのバージョンの調べ方

CodeIgniterを使っているシステムがあったが、どうも記憶しているディレク ...

Codeigniter3で異なるデータベースを使用する

Codeigniterで2つのコンテンツがあって、それぞれ別のデータベースを使用 ...