2015-08-23 3 views
3

Я пытаюсь загрузить продукты через рубин (не с рельсами). Я загрузил 100 + продуктов через API, хотя я не могу загрузить продукт с более чем одним значением параметра. Даже если я назначу три значения параметра, он не будет заполнять два других.Загрузка новых продуктов с несколькими вариантами вариантов

Вот сценарий:

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

begin_time = Time.now 

shop_url = "*https*(yes I know the * are their)://-YouWish-:-I'[email protected]/admin/products.json" 
include ShopifyAPI 

ShopifyAPI::Base.site ="*https*://-YouWish-:-I'[email protected]/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: "https://cdn.shopify.com/s/files/1/0750/0067/files/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 '=========================================================================' 

Я проверяю это на Dev магазин, но я пытаюсь восстановить что-то ранее построенный на Magento, где я могу иметь людей преобразовать свою запись данных в формате CSV в формате JSON, затем массивы/хэш-данные.

Пожалуйста, не связывайте меня с информацией (shopify)/API. Я прочитал его. Я не понимаю его форматирование. Если бы я попробовал консоль shopis-cli и вставлял пример api в irb, он не будет выполняться должным образом. Я уверен, что мне просто не хватает необходимых знаний о работе с API-интерфейсами, хотя, если вы можете немного помочь мне, это будет очень признательно.

+0

Я также борется много с этим. Вы нашли решение? – amorimluc

+0

Я нашел ответ, вам просто нужно сначала задать параметры продукта. Я добавил свой код в ответы. – amorimluc

ответ

1

Этот скрипт node.js добавляет элемент с вариантами. Разница здесь в том, что она включает в себя список опций элемента продукта. Обратите внимание, что если вы закомментируете элемент options, я получаю ту же проблему, о которой вы сообщаете, только импортированный только первый вариант.

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(); 
0

Я использовал код @bknights как ссылку и получил свой код для работы в рубине. Вы просто должны установить имена опций на уровне продукта первой:

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

Затем добавляющие варианты работы:

new_product.variants = [ 
    { 
     "option1" => "S", 
     "option2" => "Black", 
     "position" => "1", 
     "price" => "10.00" 
    }, 
    { 
     "option1" => "M", 
     "option2" => "Black", 
     "position" => "1", 
     "price" => "10.00" 
    } 
] 
new_product.save 
Смежные вопросы