2016-06-12 203 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