繁体   English   中英

Open Library Covers API速率限制

[英]Open Library Covers API Rate Limit

我正在使用PHP / Codeigniter创建基本的库Web应用程序。 我正在从MySQL数据库检索图书ISBN,并显示标题(从我的数据库)和封面图像(从openlibrary.org)。 我每页显示10个结果,但是我计划在屏幕上使用分页的导航栏,以便用户可以浏览多个页面。

到目前为止,所有程序都运行良好,但是查看“ Open Library Covers API速率限制 ”表明:

除CoverID和OLID以外的其他ID的掩护访问是受速率限制的。 目前,每5分钟仅允许100个请求/ IP。

如果任何IP尝试访问的数量超出允​​许的限制,则该服务将返回“ 403 Forbidden”状态。

因此,如果我每页显示10条结果,那是10个单独的请求? 并且,如果有10个不同的用户同时访问我的页面,我是否认为100个单独的请求超出了限制?

避免这种情况的最佳方法是什么? 我想到了两种可能性;

  1. 通过在控制器中添加$this->output->cache($n)在Codeigniter中使用页面缓存。 启用此功能后,我可以看到在application/cache中创建了一个文件,其中包含10条记录和相应的图像。
  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);
}

除非10个用户使用相同的IP地址(不太可能),否则每个用户仅计为10个视图。 单个用户将必须打开十个选项卡,并在时间限制内(或多次刷新页面)点击页面以超过限制。

如果他们在5分钟内浏览了10页,他们将在图像中看到错误。 您可以在页面上放置一条消息来说明这一点,也可以限制他们更新页面的频率。 您可能会尝试将图像缓存在您的站点上,然后从那里显示它们(没有限制),但这可能违反了它们的服务条款。

我去了他们的网站,他们还提供了所有图像供下载。 如果您从自己的站点提供服务,则将完全避免速率限制。

使用PHP和curl,设置一个程序以定期下载图像,解压缩图像并定期下载数据文件应该是相对容易的任务。

基本上,您将:

  • 针对您要托管的每种大小(s-Small,m-Medium和l-Large)下载六个zip存档。 他们很大!
  • 下载索引文件。
  • 将它们解压缩到临时文件夹中。
  • 浏览每个文件夹,然后将.tar文件(包含实际图像)解压缩到图像文件夹中。
  • 将制表符分隔的索引文件导入数据库中的表中。

索引文件上的文档是粗略的,尚不清楚是否可以使用IBSN号查找图像文件名。 这需要一些研究和测试才能得出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM