PHP/Codeigniterを使用して、基本的なライブラリWebアプリケーションを作成しています。私はMySQLデータベースから本のISBNを取り出し、タイトル(私のデータベースから)とカバーイメージ(openlibrary.orgから)を表示しています。私は1ページに10の結果を表示していますが、画面上にページ区切りのナビゲーションバーを配置して、複数のページを閲覧することができます。オープンライブラリカバーAPIレート制限
これまでのところ、すべてがうまくいきましたが、Open Library Covers API Rate Limitingを見てください。
CoverIDとOLID以外のIDによるカバーアクセスはレート制限されています。 現在、5つのリクエストごとに100件のリクエスト/ IPしか許可されていません。
いずれかのIPが許可された制限を超えてアクセスしようとすると、サービス は「403禁止」ステータスを返します。
ページごとに10件の結果が表示されている場合、10回の個別リクエストですか? 10人の異なるユーザーが同時に私のページにアクセスした場合、私はそれが100回の別々の要求であると思うのですか、私は私の限界を超えましたか?
このようなシナリオを避けるにはどうすればよいでしょうか?私は2つの可能性を考えました。
- Codeigniterでページキャッシュを使用するには、コントローラに
$this->output->cache($n)
を追加します。私がこれを有効にすると、ファイルが10レコードとそれに対応する画像を含むapplication/cache
に作成されていることがわかります。 - ページの読み込み時にAPIルックアップを実行し、返されたデータ(表紙イメージ)をデータベースに保存します。私はこれを行う方法がわからないのですか?何かアドバイスをいただきました。
おそらくこれにアプローチする別の方法がありますか?
これが役立つ場合は、私の作業コードは以下のとおりです。
モデル
public function itemList() {
$this->db->select('item_id, item_title, item_isbn');
$this->db->from('item');
$query = $this->db->get();
return $query->result_array();
}
ビュー
<?php foreach ($items as $item):?>
<h3><?php echo $item['item_title'] ?></h3>
<img class="img-responsive thumbnail" src="http://covers.openlibrary.org/b/isbn/<?php echo $item['item_isbn']; ?>-M.jpg">
<?php endforeach; ?>
コントローラ
public function index() {
$data = array(
'items' => $this->items_model->itemList()
);
$this->load->view('item_view', $data);
}