当前位置: 首页 > 知识库问答 >
问题:

向Shopify导入24000个单一变体产品的快速方式

罗鸿福
2023-03-14

我想每天晚上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小时以下的一切都是可以接受的。

我可以尝试什么来加快速度?

共有2个答案

魏晨
2023-03-14

这里的另一个选择是避免限制请求,直到您开始遇到shopify的速率限制错误。这可以确保您利用突发限制,并且仅在Shopify API限制您的速率时暂停。

我写了一个gem来处理检测429错误(和其他网络错误)并根据指数退避计划自动重试。

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

我相信Shopify也可以选择提高您的费率限制。联系他们的支持人员,看看他们是否可以提高您的帐户限制。

邹英悟
2023-03-14

简短而甜蜜的回答,使用多线程。

由于单个产品的导入需要大约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_

  • 面试氛围相对来说较为轻松 攒攒人品 希望大家给我点点赞 介绍一下你自己 你为什么选择产品经理岗位? 为什么想来快手呢? 了解快手电商吗?能否谈谈你对其现有功能的看法? 实习:你曾参与过哪些产品的迭代与优化?描述一个你认为最成功的案例 在制定搜索增长策略时,你会考虑哪些因素?如何评估策略的效果? 有哪些竞品是你比较关注的? 你如何看待当前电商行业的发展趋势? 当团队内部出现分歧你如何处理? 未来想在