CodeIgniter4で祝日一覧APIにCURLでリクエストし結果をファイルキャッシュする方法
2024/01/31
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名】_【メソッド名】_【キャッシュファイル名】」とかにしておいた方が安全かも。
関連記事
-
Codeigniter4で独自・外部ライブラリの作成と呼び出し方法
Codeigniter4で独自ライブラリを作成し、コントローラー側で呼び出したい ...
-
CodeIgniter3で共通の変数と定数を設定する方法
CodeIgniter3系で共通する配列が入った変数と、定数を設定したかった。以 ...
-
CodeIgniter4 & jQueryを用いて同一サイト内でajax通信する方法
CodeIgniter4.4.4 & jQueryを用いて同一サイト内で ...
-
CodeIgniter3でCronを実行する方法
CodeIgniter3系で特定の処理をCronで自動実行したかった。以下に設定 ...
-
CodeIgniter4.4.4のインストールからHello Worldページ表示まで行う方法
以前CodeIgniter3を勉強したことがあったが新バージョンの4系がリリース ...