勉強したことのメモ

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で外部ファイル(CSS / JS)の読み込みと共通パーツ化する方法

CodeigniterでCSSやJSファイル等の外部ファイル読み込みたかった。ま ...

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

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

CodeIgniter4の各種設定項目のまとめ記事

CodeIgniter4.4.4の各種設定項目を後から確認できるようまとめておき ...

Codeigniter4でMySQLに接続しCRUD操作する方法

Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...

CodeIgniter3で共通の変数と定数を設定する方法

CodeIgniter3系で共通する配列が入った変数と、定数を設定したかった。以 ...