2017-03-29 20 views
0

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つの可能性を考えました。

  1. Codeigniterでページキャッシュを使用するには、コントローラに$this->output->cache($n)を追加します。私がこれを有効にすると、ファイルが10レコードとそれに対応する画像を含むapplication/cacheに作成されていることがわかります。
  2. ページの読み込み時に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); 
} 

答えて

1

10人のユーザーが同じIP広告でない限りドレス(そうでない可能性があります)は、それぞれが10回のビューとしてカウントされます。 1人のユーザーは、制限時間を超えて10個のタブを開き、ページをヒット(またはページを数回リフレッシュ)しなければなりません。

5分以内に10ページを閲覧すると、画像にエラーが表示されます。これを説明するメッセージをページに挿入するか、ページの更新頻度を制限することができます。あなたのサイトに画像をキャッシュしてそこから表示するかもしれませんが(制限なし)、それはTOSに違反する可能性があります。

私は自分のサイトに行って、ダウンロードしたすべての画像も提供しています。サイトから配信する場合は、レート制限を完全に回避します。

イメージを定期的にダウンロードするプログラムを設定すると、イメージを解凍して定期的にデータファイルをダウンロードするのは、PHPとカールを使用して比較的簡単な作業にする必要があります。

基本的に、あなたがなります

  • は、あなたが(S-小、M-ミディアム、およびL-大)をホストする各サイズのために6つのzipアーカイブをダウンロードしてください。彼らは巨大です!
  • インデックスファイルをダウンロードします。
  • これらを一時フォルダに解凍します。
  • 各フォルダを開き、.tarファイル(実際のイメージを含む)をイメージフォルダに解凍します。
  • タブ区切りのインデックスファイルをDBのテーブルにインポートします。

インデックスファイルのドキュメントは不完全で、イメージファイル名を参照するためにIBSN番号を使用できるかどうかは不明です。それはうまくいくためにいくつかの研究とテストが必要です。