我正在使用PHP / Codeigniter来创建基本的库Web应用程序。我正从MySQL数据库中检索书籍ISBN并显示标题(来自我的数据库)和封面图片(来自openlibrary.org)。我每页显示10个结果,但我计划在屏幕上显示分页导航栏,以便用户可以浏览多个页面。
到目前为止一切运作良好,但是看着Open Library Covers API Rate Limiting它说的那样;
CoverID和OLID以外的ID的封面访问权限受到限制。 目前,每5分钟只允许100个请求/ IP。
如果有任何IP尝试访问超出允许限制的服务 将返回" 403 Forbidden"状态。
那么,如果我每页显示10个结果,那10个单独的请求呢?如果有10位不同的用户同时访问我的网页,我是否正确地认为有100个单独的请求,我是否超出了我的限制?
避免这种情况的最佳方法是什么?我已经想到了两种可能性;
$this->output->cache($n)
,在Codeigniter中使用页面缓存。启用此功能后,我可以看到在application/cache
中创建的文件包含10条记录和相应的图像。也许有另一种方法来解决这个问题?
如果有帮助,我的工作代码如下。
模型
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);
}
答案 0 :(得分:1)
除非10个用户使用相同的IP地址(不太可能),否则每个用户只能计为10个视图。单个用户必须打开十个选项卡并在时间限制内点击页面(或多次刷新页面)以超出限制。
如果他们在5分钟内浏览了10页,他们就会看到图片中的错误。您可以在页面上放置一条消息来解释这一点,也可以限制他们更新页面的频率。您可能会尝试在您的网站上缓存图像,然后从那里显示它们(没有限制),但这可能违反了他们的服务条款。
我去了他们的网站,他们还提供了所有图片供下载。如果您从自己的网站提供服务,则可以完全避免费率限制。
设置程序定期下载图像,解压缩它们并定期下载数据文件应该是一个相对容易的任务,使用PHP和curl。
基本上,你会:
索引文件的文档很粗略,如果您可以使用IBSN编号查找图像文件名,则不清楚。这需要一些研究和测试才能解决。