@blowstack/ceneo-xml-generator

A lightweight node.js package for generating valid xml feed for popular polish product search engine Ceneo.

Usage no npm install needed!

<script type="module">
  import blowstackCeneoXmlGenerator from 'https://cdn.skypack.dev/@blowstack/ceneo-xml-generator';
</script>

README

Ceneo XML generator

NPM package

A lightweight node.js package for generating valid xml feed for popular polish product search engine Ceneo.

Installation

yarn add @blowstack/ceneo-xml-generator npm i @blowstack/ceneo-xml-generator

Usage

A function generateXML() produces feed for Ceneo as an XML file. It takes three obligatory arguments respectively:

  • array of objects that implements ProductInterface
  • path to output file
  • encoding
export const generateXML = async (Products: ProductInterface[], filePath: string, encoding: encodings): Promise<void> => {...}
const {generateXML, Product} = require('@blowstack/ceneo-xml-generator')

let product1 = new Product
product1.id = '5f46228a1f97180000cff447'
product1.url = 'http://your-shop-address.com/product/5f46228a1f97180000cff447'
product1.price = 356.99
product1.stock = 10
product1.avail = Product.getAvailability('oneDay')
product1.set = Product.isSet(false)
product1.productName = 'AMD Ryzen 3700X'
product1.categoryName = 'Procesory'
product1.desc = '8 core 3,6 Ghz processor BOX version'
product1.img = {
    mainUrl: 'https://image.ceneostatic.pl/data/products/83359728/i-amd-ryzen-7-3700x-3-6ghz-box-100-100000071box.jpg',
    additionalUrls: [
        'https://image.ceneostatic.pl/data/products/83359728/i-amd-ryzen-7-3700x-3-6ghz-box-100-100000071box.jpg',
        'https://image.ceneostatic.pl/data/products/83359728/i-amd-ryzen-7-3700x-3-6ghz-box-100-100000071box.jpg',
    ]
}
product1.attrs = {
    producerName: 'AMD',
    producerCode: '100100000031BOX',
    ean: '1234567890123',
}

generateXML([product1], 'ceneo.xml', "UTF-8")       

Product Interface

You can pass to generateXML() any array of objects if they adhere to Product Interface.


export default interface ProductInterface {
    id: string
    url: string
    price: number
    avail: number
    set: number
    weight: number
    basket: number
    stock: number
    categoryName: string
    productName: string
    img: ImgsInterface
    desc: string
    attrs: AttributesInterface
    attrsAdditional: [AdditionalAttributeInterface]
}

export default interface AttributesInterface {
    producerName: string
    producerCode: string
    ean: string
}

export default interface AttributesInterface {
    mainUrl: string
    additionalUrls: string[]
}

export default interface AdditionalAttributeInterface {
    name: string
    value: string
}

Enums

    export const enum avail {
        oneDay = 1,
        threeDays = 3,
        week = 7,
        atLeastWeek = 14,
        checkInStore = 99
    }

    export const enum basket {
        yes = 1,
        no = 0
    }

    export const enum set {
        yes = 1,
        no = 0
    }
    export const enum encodings {
        'UTF8' = 'UTF-8',
        'ISO8859-2' = 'ISO-8859-2'
    }

Static Product class methods

static getAvailability(span: string): avail {...}
static isSet(isSet: boolean): set {...}
static isBasket(isBasket: boolean): basket {...}

Can be useful when proving data to Product object. Use enums as arguments for them. i.e

Product.getAvailability('oneDay')