我想每天晚上04:00将~24000(单一变化)产品导入Shopify。
默认Admin > Products > Import > CSV
方法的问题是,完成时间过长了不可接受的时间。所以我开始使用Shopify API使用Ruby gem。
Shopify API的API调用限制为每秒2次呼叫,一次可以突发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 :(得分:1)
简短而甜蜜的回答,使用多线程。
由于单个产品需要大约3秒钟才能导入,我的解决方案是有5个工作人员(线程)运行产品导入并检查429个错误。如果他们达到429,他们会暂停10秒然后重试。目前进口~26000产品需要约3,6小时。
答案 1 :(得分:0)
这里的另一个选择是避免限制请求,直到您开始从shopify中达到速率限制错误。这可以确保您正在利用突发限制,并且仅在Shopify API对您进行速率限制时暂停。
我写了一个gem来处理检测429
错误(以及其他网络错误)并根据指数退避计划自动重试。
https://github.com/iloveitaly/shopify_api_extensions/
我相信Shopify还可以选择提高你的价格限制。联系他们的支持,看看他们是否可以提高您帐户的限额。