好吧,这是一个从里面吃我的问题,所以任何帮助都会受到赞赏。 我有一个返回项目列表的Web服务。返回的项目数由两个变量' page'和' per_page'。所以像
这样的网址abc.com?page=10&per_page=100
将显示包含100个项目的第10页。我必须有效地查询此服务,并且只获取在最后一次获取后添加的项目。所以说我已经将所有项目缓存到#1024,然后又添加了12个项目,使计数达到1036。 如何计算页面和per_page值,以便在单页中获取所有添加的项目,同时保持per_page qunatity尽可能接近新添加的项目。例如:在这种情况下,per_page应该接近但不小于12.我已经知道缓存的最后计数和当前的项目总数。如果获取的页面具有先前缓存的项目,则可以。我试图找到最佳的响应而不是最准确的。我使用的语言是python,但只是一个算法或伪代码将是非常受欢迎的。
注意:该服务首先为我提供最早的物品。因此,最新的条目总是添加到最后一页
答案 0 :(得分:2)
是否有令人信服的理由不过度请求?
abc.com?page=2&per_page=1024
始终设置page=2
和per_page
=缓存的项目数。
唯一奇怪的情况是,添加元素的数量大于缓存的项目数,在这种情况下,您必须abc.com?page=1&per_page=99999
答案 1 :(得分:2)
首先要知道您需要per_page
至少等于新项目的数量(假设您希望它们都在同一页面上)
def items_per_page(total_item_count,new_item_count):
for i in itertools.count(new_item_count):
if total_items % i>= new_item_count:
return i
total_count = 136 #including the new items
new_count = 12
ct_per_page = items_per_page(total_count,new_count)
page_num = total_count//ct_per_page + 1 # the last page
print my_url+"?page="+page_num+"&per_page="+ct_per_page
至少我非常肯定会一直给你一个最佳的结果:)
最佳我指的是per_page
答案 2 :(得分:0)
这是带有小错误修复的代码,以提供最佳页面大小(建议的代码不会返回精确划分总计数的页面大小)。
def items_per_page(total_item_count,new_item_count):
for i in itertools.count(new_item_count):
if total_items % i>= new_item_count or total_items %i == 0:
return i
total_count = 136 #including the new items
new_count = 12
ct_per_page = items_per_page(total_count,new_count)
page_num = total_count//ct_per_page + 1 # the last page
print my_url+"?page="+page_num+"&per_page="+ct_per_page