Recursos · CSV i feeds

Sincronització per CSV: especificació completa

Especificació del CSV d'articles: camps, límits, atributs de cotxe i moto, i enviament per SFTP o per URL.

Per a la sincronització entre els clients i Portal Hero fem servir un sistema de fitxers CSV. El principal fitxer CSV és el d'articles (o feed d'articles), on es llisten tots els articles que es publiquen als diferents portals. En aquest fitxer es troben els articles amb les seves característiques.

Funcionament de la sincronització

La manera d'identificar cada article serà mitjançant el camp id en el qual ens basarem com a identificador únic per decidir si un article s'actualitza o deixa d'existir. Quan un article aparegui per primera vegada al feed d'articles, aquest es pujarà a tots els portals seleccionats pel client. Quan un article deixi d'estar present al feed es marcarà com a venut i quan es canviï qualsevol dada de l'article també serà actualitzat als portals. Per tenir més detalls de la sincronització en si els pots consultar aquí.

El format general d'aquests arxius CSV és el següent:

  • Camps separats per comes
  • La capçalera ha d'estar present per poder identificar els camps
  • Camps delimitats per doble cometa (si és necessari o sempre)
  • Codificació de l'arxiu UTF-8

Compartició d'arxius

Tenim dues opcions per fer-nos arribar l'arxiu:

  • SFTP
    Disposem d'un SFTP per compartir els arxius i facilitar l'intercanvi d'informació de manera segura. Es facilitaran les dades d'accés a l'SFTP (usuari i contrasenya) durant el procés d'onboarding.
    La resta de dades comunes de connexió són les següents:
    • Host: sftp.portalhero.pro
    • Port: 2222

    A més l'SFTP està securitzat i restringit a nivell de xarxa i necessitarem una o diverses IPs per afegir-les a la nostra llista d'IPs d'accés permeses.
    Dins de l'SFTP hi ha creada una carpeta anomenada upload on s'escriuran els arxius: Per al d'articles el nom de l'arxiu serà: item_feed.csv
  • url
    El feed d'articles pot ser enviat també via una URL pública des d'on el procés de Portal Hero el descarregarà en cada execució diària del procés.
    La URL haurà de ser informada per part del client durant el procés d'onboarding. En cas de requerir més mesures de seguretat, ens pots facilitar qualsevol header(s) que afegirem a la petició.

Format dels arxius CSV

Relació dels camps, tipologia de detalls i exemples de l'arxiu CSV d'articles:

NomTipusObligatoriDescripcióExemple
idstringSíIdentificador únic de l'article. Ha de ser únic per a tots els articles i és el que farem servir per fer referència als articles en les nostres comunicacions. (Longitud màxima: 150 caràcters)wer432r
pricedoubleSíPreu en € amb una precisió de 2 decimals (no obligatoris) de l'article.344.95
external_categorystringSíIdentificador de la categoria on pujar l'article. Ha de ser un text amb la categoria, no un identificador numèric. Pot ser directament la categoria que hi hagi al teu sistema.Camisetas manga corta
statusstringSíCondició de l'article. Els valors estan acotats a una enumeració que també es proporciona més endavant.good
titlestringSíTítol de l'article. Màxim 60 caràcters.Camiseta verde
descriptionstringSíDescripció de l'article. Màxim 600 caràcters.Camiseta verde talla M…
imageslist stringSíCamp compost creat amb la concatenació mitjançant "|" (pipe) de les diferents urls de les imatges de l'article. Aquestes han de ser públicament accessibles i en format jpg. Màxim 10 imatges.https://image-cdn.com/image1.jpg|https://image-cdn.com/image2.jpg|https://image-cdn.com/image3.jpg
storelist stringNoIdentificador del compte al portal on publicar aquest article. Només és necessari en cas de comptar amb més d'un compte on publicar articles. En el cas de tenir més d'un compte o més d'un portal associat al producte, ha de ser una llista d'enters separats per "|" (pipe).2|F5
portal_statusstringNoEstat de publicació de l'article. Estats possibles: “active”, “reserved”active
shippingboolNoBooleà per indicar si s'accepten enviaments dins del portal per a l'article.true
shipping_weight_kgintNoCamp associat al camp "shipping", és necessari si el camp shipping és true. Indica el pes en kg (arrodonit cap amunt sense decimals) de l'article.3
free_shippingboolNoBooleà per indicar si és el venedor qui assumeix els costos de l'enviament i per tant són gratis per al comprador.true
hashtagsstringNoCamp compost creat amb la concatenació mitjançant "|" (pipe) dels diferents hashtags. Cadascun d'ells és una sola paraula sense espais i sense l'etiqueta (#) precedent.bluetooth|bajoconsumo|geek
brandStringNoMarca de l'articleApple
modelStringNoModel de l'articleiPhone 15 pro
stockintNoNombre d'articles3
attributesstrNoCamp per a atributs addicionals de l'article. Depenent de la categoria, alguns d'aquests atributs poden ser obligatoris. *additional attributes

* Per als articles de cotxes, s'han de proporcionar els següents atributs al camp 'attributes' com una cadena JSON serialitzada:

Respecte al camp status que fa referència a l'estat dels articles, les opcions són les següents:

["new", "as_good_as_new", "good", "fair", "has_given_it_all"]

Atributs del Cotxe

Els atributs del cotxe són un conjunt de característiques que descriuen un cotxe. Es fan servir al feed i per publicar-lo als marketplaces.

NomTipusObligatoriDescripcióExemple
versionStringSíVersió del motor o nivell d'acabat del cotxe.1.6 TDI
yearIntSíAny de fabricació.2018
kmIntSíQuilometratge en quilòmetres.60000
horse_powerIntSíPotència del motor en CV (DIN).105
doorsIntNoNombre de portes.5
body_typeStringNoTipus de cos o estil. Valors possibles:'small_car', 'coupe_cabrio', 'sedan', 'family_car', 'mini_van', 'four_x_four', 'van', 'others'sedan
engineStringSíTipus de combustible. Valors possibles:'gasoil', 'gasolina', 'electric_hybrid', 'others'gasoil
gear_boxStringSíTipus de caixa de canvis. Valors possibles are:'manual', 'automatic'manual

Exemple (python):

car_attrs = {
    "version": "1.6 TDI Toyota",
    "year": "2018",
    "horse_power": 100,
    "mileage": 12000,
    "engine": "gasoil",
    "gearbox": "manual"
}

attributes = json.dumps(car_attrs)

Atributs de la moto

Per integrar motos, l'article ha d'incloure la informació específica del vehicle. Les dades tècniques s'envien serialitzades com a JSON al camp 'attributes', mentre que la marca i el model viatgen als camps 'brand' i 'model' del CSV.

El camp 'external_category' ha de prendre un dels valors '2', 'Motos', 'Motorbikes' perquè l'article es processi com a moto. Aquesta integració requereix tenir actiu el servei d'ERP de motos al teu compte.

Els valors de 'brand' i 'model' han de coincidir exactament amb els de la nostra taxonomia de motos. Per consultar els valors vàlids disposem de dos endpoints públics (requereixen autenticació i el servei ERP de motos actiu):

  • GET /motorbike_brands — retorna la llista completa de marques disponibles, amb el seu 'uid' i 'value'.
  • GET /motorbike_models?brand_id={uid} — retorna els models associats a la marca indicada mitjançant 'brand_id'.

Tingues en compte que el títol de l'article es genera automàticament a partir de la marca, el model, la versió (si s'informa) i l'any, per la qual cosa el valor del camp 'title' serà sobreescrit en les motos.

NomTipusObligatoriDescripcióExemple
yearIntSíAny de matriculació. Valor entre 1950 i l'any següent a l'actual.2020
versionStringNoNom comercial o versió del model. S'afegeix al títol generat automàticament.modelo actual
kmIntSíQuilometratge en quilòmetres. No pot ser negatiu.5420
horse_powerIntNoPotència del motor en CV. Ha de ser un valor positiu.47
engine_capacity_ccIntNoCilindrada del motor en centímetres cúbics. Ha de ser un valor positiu.400
fuel_typeStringNoTipus de combustible. Valors possibles: 'gasoline', 'electric'. Si no s'informa, per defecte és 'gasoline'.gasoline
license_plateStringNoMatrícula del vehicle.1234 ABC

Exemple (python):

motorbike_attrs = {
    "year": 2020,
    "version": "modelo actual",
    "km": 5420,
    "horse_power": 47,
    "engine_capacity_cc": 400,
    "fuel_type": "gasoline",
    "license_plate": "1234 ABC"
}

attributes = json.dumps(motorbike_attrs)