我想每天晚上04:00向Shopify导入约24000(单一变体)产品。
默认管理的问题
Shopify API的API调用限制为每秒2个调用,一次可以突发40个调用。您可以在此处阅读有关API调用限制的更多信息。我不理解“一次可以接到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小时以下的一切都是可以接受的。
我可以尝试什么来加快速度?
这里的另一个选择是避免限制请求,直到您开始遇到shopify的速率限制错误。这可以确保您利用突发限制,并且仅在Shopify API限制您的速率时暂停。
我写了一个gem来处理检测429
错误(和其他网络错误)并根据指数退避计划自动重试。
https://github.com/iloveitaly/shopify_api_extensions/
我相信Shopify也可以选择提高您的费率限制。联系他们的支持人员,看看他们是否可以提高您的帐户限制。
简短而甜蜜的回答,使用多线程。
由于单个产品的导入需要大约3秒,我的解决方案是让5个工作人员(线程)运行产品导入并检查429个错误。如果他们遇到429,他们会暂停10秒,然后重试。目前导入约26000个产品需要大约3,6小时。
快速向导包括对注册用户、创建客服团队、集成PPCom、使用PPKefu的简要介绍。 注册用户、创建团队 打开 PPMessage官网 , 点击[开始使用PPMessage]按钮,打开PPConsole登录页面。 点击PPConsole网页右上角的注册按钮,打开注册界面。 在注册界面,填入邮箱地址(作为登录账户名),名称(作为账户显示名称)和密码,点击下方的注册按钮完成注册,进入创建团队界面。 在创
目标:在一个按钮点击中添加多个可变产品到购物车。 我试着将这段代码放入循环中,但它不起作用。 但是这种方法不能解决问题,因为我需要在一个按钮点击中添加几个产品变体。 所有的建议都将不胜感激。多谢了。
问题内容: 我需要函数或函数。 有各种和功能,但我很惊讶地发现缺少的功能。 为了使事情正常,我一直在使用这种相当慢的替代方法 我的数组通常包含32,000个元素,因此这被证明是一个瓶颈。我很想尝试,和,但是我认为我应该在这里提出问题,因为可能会有更好的解决方案。 问题答案: 我有一个更快的机制,尽管您需要运行一些测试以查看准确性是否足够。 这是原始的exp / sum / log版本: 这是一个使
我们在第 1 章已经看到了一个简单的 Hello World 的例子,相信你已经成功地把它跑起来了,下面我们对这个程序进行讲解。回顾一下这个程序: $ cat hello.py from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name_
我已经为Woocommerce开发了定制的单一产品模板,这些模板可以正常工作并符合预期。问题是,现在客户想要销售的产品有一些不同的变体,而我不知道如何添加此功能。 目前在产品页面上,我使用了the_post_thumbail()和get_post_meta()等函数来显示产品的各种信息,如价格和在产品帖子类型中输入的摘录。然后我使用do_action(woocommerce_simple_add_
面试氛围相对来说较为轻松 攒攒人品 希望大家给我点点赞 介绍一下你自己 你为什么选择产品经理岗位? 为什么想来快手呢? 了解快手电商吗?能否谈谈你对其现有功能的看法? 实习:你曾参与过哪些产品的迭代与优化?描述一个你认为最成功的案例 在制定搜索增长策略时,你会考虑哪些因素?如何评估策略的效果? 有哪些竞品是你比较关注的? 你如何看待当前电商行业的发展趋势? 当团队内部出现分歧你如何处理? 未来想在