Witam. Robię sklep internetowy z bielizną damską i chcę zintegrować produkty z hurtownią kontri mój kod ruby to :
require 'net/http'
require 'rexml/document'
require 'rubygems'
require 'pg'
url ='http://www.hurtowniaonline.pl/public/xml/HKPL_Hurtownia/listproducts_data_HKPL_Hurtownia_pl-PL_PLN.xml'
xml_data = Net::HTTP.get_response(URI.parse(url)).body
doc = REXML::Document.new(xml_data)
kategoria_id = []
kategoria_nazwa = []
typ_id = []
typ_nazwa = []
kolor_id = []
kolor_nazwa = []
rozmiar_id = []
rozmiar_nazwa = []
produkt_id = []
towar_nazwa = []
cena_netto = []
kategoria_kontri = []
typ_kontri = []
producent_nazwa = []
rodzaj_oferty = []
kolory_id = []
rozmiar_kontri = []
ilosc_kontri = []
kolory_ilosc_ki = []
doc.elements.each('ROOT/TOWARY/PRODUKT') do |b|
produkt_id << b.attributes["produkt_id"]
end
doc.elements.each('ROOT/TOWARY/PRODUKT/TOWAR') do |b|
towar_nazwa << b.text
end
doc.elements.each('ROOT/TOWARY/PRODUKT/CENA_NETTO') do |b|
cena_netto << b.text
end
doc.elements.each('ROOT/TOWARY/PRODUKT/KATEGORIA') do |b|
kategoria_kontri << b.text
end
doc.elements.each('ROOT/TOWARY/PRODUKT/TYP') do |b|
typ_kontri << b.text
end
doc.elements.each('ROOT/TOWARY/PRODUKT/PRODUCENT') do |b|
producent_nazwa << b.text
end
doc.elements.each('ROOT/TOWARY/PRODUKT/RODZAJ_OFERTY') do |b|
rodzaj_oferty << b.text
end
doc.elements.each('ROOT/TOWARY/PRODUKT/KOLORY/KOLOR/KOLOR_ID') do |b|
kolory_id << b.text
end
doc.elements.each('ROOT/TOWARY/PRODUKT/KOLORY/KOLOR/ROZMIAR') do |b|
rozmiar_kontri << b.text
end
doc.elements.each('ROOT/TOWARY/PRODUKT/KOLORY/KOLOR/ILOSC') do |b|
ilosc_kontri << b.text
end
doc.elements.each('ROOT/KATEGORIE/KATEGORIA') do |a|
kategoria_id << a.attributes["kategoria_id"]
end
doc.elements.each('ROOT/TYPY/TYP') do |a|
typ_id << a.attributes["typ_id"]
end
doc.elements.each('ROOT/KOLORY/KOLOR') do |a|
kolor_id << a.attributes["kolor_id"]
end
doc.elements.each('ROOT/ROZMIARY/ROZMIAR') do |a|
rozmiar_id << a.attributes["rozmiar_id"]
end
doc.elements.each('ROOT/KATEGORIE/KATEGORIA') do |ele|
kategoria_nazwa << ele.text
end
doc.elements.each('ROOT/TYPY/TYP') do |ele|
typ_nazwa << ele.text
end
doc.elements.each('ROOT/KOLORY/KOLOR') do |ele|
kolor_nazwa << ele.text
end
doc.elements.each('ROOT/ROZMIARY/ROZMIAR') do |ele|
rozmiar_nazwa << ele.text
end
conn = PGconn.connect('',5432,'','','hot')
res = conn.exec("SELECT k_id FROM kategoria")
res.each do |row|
row.each do |column|
#puts "#{column}"
end
end
produkt_id.each_with_index do |b, c|
#conn.exec("INSERT INTO towar_kontris (produkt_id, towar, cena_netto) VALUES ('#{b}','#{towar_nazwa[c].gsub(/[']/, ' ')}', '#{cena_netto[c]}')")
end
kolory_id.each_with_index do |d, e|
conn.exec("INSERT INTO kolor_kontris (kolor_id, rozmiar, ilosc) VALUES ('#{d}','#{rozmiar_kontri[e]}','#{ilosc_kontri[e]}')")
end
kategoria_id.each_with_index do |a, b|
#conn.exec("INSERT INTO kategoria (k_id, k_nazwa) VALUES ('#{a}', '#{kategoria_nazwa[b]}')")
end
typ_id.each_with_index do |a, b|
#conn.exec("INSERT INTO typs (t_id, t_nazwa) VALUES ('#{a}','#{typ_nazwa[b]}')")
end
kolor_id.each_with_index do |a, b|
#conn.exec("INSERT INTO kolors (kolor_id, kolor_nazwa) VALUES ('#{a}', '#{kolor_nazwa[b]}')")
end
rozmiar_id.each_with_index do |a, b|
#conn.exec("INSERT INTO rozmiars (r_id, r_nazwa) VALUES ('#{a}', '#{rozmiar_nazwa[b]}')")
end
redirect_to(:action => 'index')
oto część pliku xml udostępnianego przez hurtownię do integracji :
Gallantry 274-2 64.59 239 240 Gallantry.Gallantry[Gal] Oferta biezaca 99341 5 1.00 7890 5 1.00 101352 5 2.00 Kamea Virginia 13.00 239 242 Kamea.Kamea[Kam] Promocja 7644 5 11.00Problem polega na tym, iż system sam dodaje dane do tabel oddzielna jest tabela dla towarów a oddzielna dla kolorów, rekordów w tabeli towarowej jest np.: 3576 a w tabeli kolorów 57896 , nie wiem jak mam powiązać ilość towarów do ilości kolorów aby system wiedział że dany kolor należy do danego produktu. Gdyby <KOLOR_ID> posiadał, produkt_id to nie było by problemu a tak poprostu nie mogę tego ogarnąć, może ktoś już miał podobny problem.