2016-06-12 60 views
-1

我使用Shopify的Ruby Gem在产品商店中整理智能收藏。基本上,我试图对这些集合上的产品订单进行夜间更新(它们的排序顺序设置为手动)。目标是根据销售数据对产品进行分类,但也会在清单末尾列出缺货产品。Shopify API - 如何使用数千种产品更新智能收藏上的产品订单?

我设法编写一个脚本,在大多数藏品效果很好:

@scs = ShopifyAPI::SmartCollection.find(:all,params: {limit: 250}) 
@scs.each do |sc| 
     sc.order(products: @products_in_order) 
     sc.save 
end 

不幸的是,如果集合比一对夫妇大种产品中,URI太长,我得到这个错误:

ActiveResource::ClientError: Failed. Response code = 414. Response message = Request-URI Too Large.

有没有办法以高效的方式更新大型智能收藏上的产品订单?我的一些收藏品有超过1000种产品,我不想单独更新每个“收藏”,因为我将每天运行此脚本。

任何意见表示赞赏。

回答

0

您目前的技术有限。你可能想要做的第一件事是通过分页迭代所有的集合。不分页意味着你永远不会触及集合中超过250种产品的所有产品。

其次,在页面中,按集合构建一个散列,其中包含对它们进行排序所需的详细信息。否则,你正在存储一大堆内存饥饿的河马,这会让你的内存占用空间大打折扣。使用哈希来订购产品并保存它们。

而且由于这是脚本,并且可以在夜间运行,因此可以将它吸收并按产品分类/存储。不像你用你的蛮力去挑选西红柿或西瓜。

+0

嗨大卫,谢谢你的回应。我确实拉了所有的产品。上述限制是针对集合查询(我拥有的集合少于250个)。变量@products_in_order包含集合中的所有产品。问题在于,如果有数百种产品,则API调用的URI会变得太长。除非产品有数千种和数百种集合,否则按产品分配排序顺序是没有问题的......这可能很容易转变到每天30k的API调用,似乎并不是最明智的资源使用... –

+0

为什么你要这么做呢?无论如何,拥有1000个产品的集合变得相当笨拙(客户不会全部翻阅)。无论如何,这听起来像代码被破坏。更新的顺序应该是PUT,所以不应该有任何URI长度的考虑。如果这实际上是错误的,并且Shopify错误地标记了分批更新时会发生什么情况?如果您申请一组100个产品,那么当您应用第二组100个产品ID时会发生什么? – bknights