Subiendo nuevos productos con múltiples opciones de variante.

Estoy tratando de subir productos a través de ruby ​​(no con Rails). He cargado más de 100 productos a través de API, aunque no puedo cargar un producto con más de un valor de opción. Incluso si asigno tres valores de opción, no llenará los otros dos.

Aquí está el guión:

require 'shopify_api' require 'open-uri' require 'json' begin_time = Time.now shop_url = "*https*(yes I know the * are their)://-YouWish-:-I'dShareNakedPics-@dev-tactical.myshopify.com/admin/products.json" include ShopifyAPI ShopifyAPI::Base.site ="*https*://-YouWish-:-I'dShareNakedPics-@dev-tactical.myshopify.com/admin/" raw_product_data = JSON.parse(open('omg.json') {|f| f.read }.force_encoding('UTF-8')) raw_product_data_size = raw_product_data.size puts '=========================================================================' puts "#{raw_product_data_size} seconds till explosion. assistance needed..." puts '-------------------------------------------------------------------------' single_product_begin_time = Time.now # Create new product new_product = ShopifyAPI::Product.new new_product.title = "Variants Suck" new_product.body_html = "So" new_product.product_type = "Much" new_product.vendor = "Please" new_product.tags = "Help" new_product.variants = [ { "option1" => "This One Works", "option2" => "Lost Cause", "option3" => "/wrist", "postion" => "1", "price" => "10.00", "sku" => "12345", "inventory_management" => "shopify", } ] new_product.images = [ { src: "http://sofes.miximages.com/ruby/Pro-Tapes.jpg?11603036243532110652" } ] new_product.save creation_time = Time.now - single_product_begin_time puts '-------------------------------------------------------------------------' puts "Sorry About the mess babe, atleast it only took #{begin_time - Time.now} minutes." puts '=========================================================================' 

Estoy probando esto en una tienda de desarrolladores, pero estoy intentando reconstruir algo creado previamente en magento, donde puedo hacer que las personas conviertan mi entrada de datos csv a json, luego formen una matriz / hash los datos.

Por favor, no me vincules a la información (shopify) / API. Lo he leido No entiendo el formato de la misma. Si fuera a la consola shopify-cli y pegara el ejemplo de API en IRB, no se ejecutará correctamente. Estoy seguro de que me falta el conocimiento necesario para trabajar con API, aunque si me puede ayudar un poco, sería muy apreciado.

Este script node.js agrega un elemento con variantes. La diferencia aquí es que incluye una lista de opciones en el elemento del producto. Tenga en cuenta que si comenta el elemento de opciones, obtengo el mismo problema del que informa que solo se importa la primera opción.

 var https = require('https'); var cred = new Buffer(privateAppAPIKey +":"+ privateAppPassword).toString('base64'); var headers = {Authorization: "Basic "+cred, "Content-Type": "application/json"}; var options = { host: 'kotntest1.myshopify.com', port: 443, path: '/admin/products.json', method: 'POST', headers: headers }; // Setup the request. The options parameter is // the object we defined above. var req = https.request(options, function(res) { res.setEncoding('utf-8'); var responseString = ''; res.on('data', function(data) { responseString += data; console.log(data); }); res.on('end', function() { var resultObject = JSON.parse(responseString); }); }); req.on('error', function(e) { // TODO: handle error. console.log(e); }); var product = { product:{ title:'My First Test Product', options : [ {name : "First"}, {name : "Second"}, {name : "Third"} ], variants: [ { title:'v1', option1: 'Red', option2: "Honda", option3: 'Prelude' }, { title:'v2', option1 :'Blue', option2 :'Ford', option3 :'Escort' } ] } }; req.write(JSON.stringify(product)); req.end(); 

Usé el código de @bknights como referencia y conseguí que mi código funcionara en ruby. Solo debe establecer primero los nombres de las opciones en el nivel de producto:

 new_product = ShopifyAPI::Product.new new_product.options = [{"name" => "Size"}, {"name" => "Color"}] 

Luego añadiendo variantes de trabajo:

 new_product.variants = [ { "option1" => "S", "option2" => "Black", "position" => "1", "price" => "10.00" }, { "option1" => "M", "option2" => "Black", "position" => "1", "price" => "10.00" } ] new_product.save