2014-09-22 56 views
2

我想每天晚上04:00向Shopify輸入~24000(單個變體)產品。快速向Shopify輸入24000單個變體產品

問題與默認Admin > Products > Import > CSV方法是,它需要一個無法接受的時間很長的時間才能完成。所以我開始使用Ruby gemShopify API一起工作。

Shopify API具有每秒2個調用的API調用限制,並且可以一次觸發40個調用。您可以閱讀更多關於API調用限制here的信息。我不明白「一次打40個電話的空間」部分。

一個Shopify員工告訴我下面對通過API進口產品:

如果你做的是包括在其中的 變種信息產品創建API請求(假設每個產品3種變體)和 使用默認的API限制(每秒刷新2個請求或2個 併發請求),您可能會在大約67分鐘內完成創建所有這些 產品。

我寫了下面的Ruby腳本導入所有產品Shopify:

require 'shopify_api' 
require 'open-uri' 
require 'json' 

begin_time = Time.now 

shop_url = "https://<API_KEY>:<PASSWORD>@<SHOPNAME>.myshopify.com/admin" 

ShopifyAPI::Base.site = shop_url 

raw_product_data = JSON.parse(open('<LINK>') {|f| f.read }.force_encoding('UTF-8')) 
raw_product_data_size = raw_product_data.size 

puts '=========================================================================' 
puts "#{raw_product_data_size} products loaded. Starting import now..." 
puts '-------------------------------------------------------------------------' 

raw_product_data.each_with_index do |item, index| 
    single_product_begin_time = Time.now 

    # Store item data in variables 
    <DATA> 

    # Create new product 
    new_product = ShopifyAPI::Product.new 
    new_product.title = title 
    new_product.body_html = body 
    new_product.product_type = type 
    new_product.vendor = vendor 
    new_product.tags = tags 

    new_product.variants = [ 
    { 
     "option_1" => "First", 
     "price" => variant_price, 
     "sku" => variant_sku 
    } 
    ] 

    new_product.images = [ 
    { 
     src: image_src 
    } 
    ] 

    new_product.save 

    creation_time = Time.now - single_product_begin_time 

    puts "#{((index/raw_product_data_size.to_f) * 100).round(2)}% - #{index} - #{variant_sku} added in #{creation_time.round(2)} seconds" 
end 

puts '-------------------------------------------------------------------------' 
puts "Done. It took #{begin_time - Time.now} minutes." 
puts '=========================================================================' 

但我不是67分鐘附近的任何地方獲得。

目前大約需要3秒鐘才能添加單個產品。以此速度增加24000個產品需要20個小時。這是不可接受的。 2小時內的任何事情都可以接受

我可以嘗試什麼來加快速度?

+0

它可能是因爲他們將API放在與常規Web應用程序相同的服務器上,這是很慢的,可能超賣* 10。 – mxmissile 2014-09-22 17:19:06

回答

0

短而甜蜜的答案,使用多線程。

由於單個產品需要大約3秒才能導入,我的解決方案是有5個工人(線程)運行產品導入並檢查429個錯誤。如果他們命中429,他們暫停10秒,然後重試。目前需要約3.6小時才能進口〜26000產品。

0

此處的另一個選擇是避免調節請求,直到您開始從shopify觸及速率限制錯誤。這可確保您充分利用突發限制,並在Shopify API限速時停止使用。

我寫了一個gem,它處理檢測到429錯誤(和其他網絡錯誤)並根據指數退避計劃自動重試。

https://github.com/iloveitaly/shopify_api_extensions/

我相信Shopify也有增加的速率限制的選項。請聯繫他們的支持人員,看他們是否可以提高您帳戶的限額。