Synchronisation par CSV : spécification complète
Spécification du CSV d'articles : champs, limites, attributs de voiture et de moto, et envoi par SFTP ou par URL.
Pour la synchronisation entre les clients et Portal Hero, nous utilisons un système de fichiers CSV. Le principal fichier CSV est celui des articles (ou flux d'articles), où sont listés tous les articles publiés sur les différents portails. Ce fichier contient les articles avec leurs caractéristiques.
Fonctionnement de la synchronisation
La manière d'identifier chaque article se fait via le champ id, sur lequel nous nous baserons comme identifiant unique pour décider si un article est mis à jour ou cesse d'exister. Lorsqu'un article apparaît pour la première fois dans le flux d'articles, il est envoyé sur tous les portails sélectionnés par le client. Lorsqu'un article n'est plus présent dans le flux, il est marqué comme vendu, et lorsqu'une donnée de l'article change, il est également mis à jour sur les portails. Pour plus de détails sur la synchronisation elle-même, vous pouvez les consulter ici.
Le format général de ces fichiers CSV est le suivant :
- Champs séparés par des virgules
- L'en-tête doit être présent pour pouvoir identifier les champs
- Champs délimités par des guillemets doubles (si nécessaire ou toujours)
- Encodage du fichier UTF-8
Partage des fichiers
Nous avons deux options pour nous transmettre le fichier :
- SFTP
Nous disposons d'un SFTP pour partager les fichiers et faciliter l'échange d'informations de manière sécurisée. Les données d'accès au SFTP (identifiant et mot de passe) seront fournies lors du processus d'onboarding.
Les autres données de connexion communes sont les suivantes :- Host :
sftp.portalhero.pro - Port :
2222
De plus, le SFTP est sécurisé et restreint au niveau réseau et nous aurons besoin d'une ou plusieurs IPs pour les ajouter à notre liste d'IPs d'accès autorisées.
À l'intérieur du SFTP, un dossier nommé upload est créé où les fichiers seront écrits : pour celui des articles, le nom du fichier sera : item_feed.csv - Host :
- url
Le flux d'articles peut également être envoyé via une URL publique depuis laquelle le processus de Portal Hero le téléchargera à chaque exécution quotidienne du processus.
L'URL devra être renseignée par le client lors du processus d'onboarding. Si des mesures de sécurité supplémentaires sont nécessaires, vous pouvez nous fournir n'importe quel(s) header(s) que nous ajouterons à la requête.
Format des fichiers CSV
Liste des champs, typologie des détails et exemples du fichier CSV d'articles :
| Nom | Type | Obligatoire | Description | Exemple |
|---|---|---|---|---|
| id | string | Oui | Identifiant unique de l'article. Il doit être unique pour tous les articles et c'est celui que nous utiliserons pour référencer les articles dans nos communications. (Longueur maximale : 150 caractères) | wer432r |
| price | double | Oui | Prix en € avec une précision de 2 décimales (non obligatoires) de l'article. | 344.95 |
| external_category | string | Oui | Identifiant de la catégorie où publier l'article. Il doit s'agir d'un texte avec la catégorie, pas d'un identifiant numérique. Il peut s'agir directement de la catégorie présente dans votre système. | Camisetas manga corta |
| status | string | Oui | Condition de l'article. Les valeurs sont limitées à une énumération également fournie plus loin. | good |
| title | string | Oui | Titre de l'article. Maximum 60 caractères. | Camiseta verde |
| description | string | Oui | Description de l'article. Maximum 600 caractères. | Camiseta verde talla M… |
| images | list string | Oui | Champ composé créé par la concaténation au moyen de "|" (pipe) des différentes urls des images de l'article. Celles-ci doivent être accessibles publiquement et au format jpg. Maximum 10 images. | https://image-cdn.com/image1.jpg|https://image-cdn.com/image2.jpg|https://image-cdn.com/image3.jpg |
| store | list string | Non | Identifiant du compte sur le portail où publier cet article. Nécessaire uniquement si vous disposez de plusieurs comptes où publier des articles. Si vous avez plus d'un compte ou plus d'un portail associé au produit, il doit s'agir d'une liste d'entiers séparés par "|" (pipe). | 2|F5 |
| portal_status | string | Non | État de publication de l'article. États possibles : “active”, “reserved” | active |
| shipping | bool | Non | Booléen pour indiquer si les expéditions sont acceptées au sein du portail pour l'article. | true |
| shipping_weight_kg | int | Non | Champ associé au champ "shipping", nécessaire si le champ shipping est true. Indique le poids en kg (arrondi à l'entier supérieur sans décimales) de l'article. | 3 |
| free_shipping | bool | Non | Booléen pour indiquer si c'est le vendeur qui assume les frais d'expédition et donc s'ils sont gratuits pour l'acheteur. | true |
| hashtags | string | Non | Champ composé créé par la concaténation au moyen de "|" (pipe) des différents hashtags. Chacun d'eux est un seul mot sans espaces et sans le dièse (#) précédent. | bluetooth|bajoconsumo|geek |
| brand | String | Non | Marque de l'article | Apple |
| model | String | Non | Modèle de l'article | iPhone 15 pro |
| stock | int | Non | Nombre d'articles | 3 |
| attributes | str | Non | Champ pour des attributs supplémentaires de l'article. Selon la catégorie, certains de ces attributs peuvent être obligatoires. * | additional attributes |
* Pour les articles de voitures, les attributs suivants doivent être fournis dans le champ 'attributes' sous forme de chaîne JSON sérialisée :
Concernant le champ status qui fait référence à l'état des articles, les options sont les suivantes :
["new", "as_good_as_new", "good", "fair", "has_given_it_all"]
Attributs de la voiture
Les attributs de la voiture sont un ensemble de caractéristiques qui décrivent une voiture. Ils sont utilisés dans le flux et pour la publier sur les marketplaces.
| Nom | Type | Obligatoire | Description | Exemple |
|---|---|---|---|---|
| version | String | Oui | Version du moteur ou niveau de finition de la voiture. | 1.6 TDI |
| year | Int | Oui | Année de fabrication. | 2018 |
| km | Int | Oui | Kilométrage en kilomètres. | 60000 |
| horse_power | Int | Oui | Puissance du moteur en CV (DIN). | 105 |
| doors | Int | Non | Nombre de portes. | 5 |
| body_type | String | Non | Type de carrosserie ou style. Valeurs possibles :'small_car', 'coupe_cabrio', 'sedan', 'family_car', 'mini_van', 'four_x_four', 'van', 'others' | sedan |
| engine | String | Oui | Type de carburant. Valeurs possibles :'gasoil', 'gasolina', 'electric_hybrid', 'others' | gasoil |
| gear_box | String | Oui | Type de boîte de vitesses. Valeurs possibles :'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)
Attributs de la moto
Pour intégrer des motos, l'article doit inclure les informations spécifiques du véhicule. Les données techniques sont envoyées sérialisées en JSON dans le champ 'attributes', tandis que la marque et le modèle voyagent dans les champs 'brand' et 'model' du CSV.
Le champ 'external_category' doit prendre l'une des valeurs '2', 'Motos', 'Motorbikes' pour que l'article soit traité comme une moto. Cette intégration nécessite d'avoir le service ERP de motos actif sur votre compte.
Les valeurs de 'brand' et 'model' doivent correspondre exactement à celles de notre taxonomie de motos. Pour consulter les valeurs valides, nous disposons de deux endpoints publics (ils nécessitent une authentification et le service ERP de motos actif) :
GET /motorbike_brands— renvoie la liste complète des marques disponibles, avec leur 'uid' et 'value'.GET /motorbike_models?brand_id={uid}— renvoie les modèles associés à la marque indiquée au moyen de 'brand_id'.
Notez que le titre de l'article est généré automatiquement à partir de la marque, du modèle, de la version (si renseignée) et de l'année, de sorte que la valeur du champ 'title' sera écrasée pour les motos.
| Nom | Type | Obligatoire | Description | Exemple |
|---|---|---|---|---|
| year | Int | Oui | Année de mise en circulation. Valeur entre 1950 et l'année suivant l'année actuelle. | 2020 |
| version | String | Non | Nom commercial ou version du modèle. Il est ajouté au titre généré automatiquement. | modelo actual |
| km | Int | Oui | Kilométrage en kilomètres. Ne peut pas être négatif. | 5420 |
| horse_power | Int | Non | Puissance du moteur en CV. Doit être une valeur positive. | 47 |
| engine_capacity_cc | Int | Non | Cylindrée du moteur en centimètres cubes. Doit être une valeur positive. | 400 |
| fuel_type | String | Non | Type de carburant. Valeurs possibles : 'gasoline', 'electric'. Si non renseigné, par défaut c'est 'gasoline'. | gasoline |
| license_plate | String | Non | Plaque d'immatriculation du véhicule. | 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)