Format inventarisbestanden (Amazon)
Inventaris kun je uploaden als Excel- of tekstbestand. Dit artikel behandelt voornamelijk deze laatste mogelijkheid.
Samenvatting (mei 2016-okt. 2020)
- Extentie:
.csv
,.tsv
of.txt
(Excel:.xls
&.xslx
) - Tabgescheiden -- Komma-gescheiden werkt niet
- Tekencodering: Latin1 - ISO 8859-1
- Prijzen: Met "." als decimaalscheidingsteken en zonder valuta-aanduiding
- Velden kunnen zowel met als zonder dubbele aanhalingstekens omsloten worden. Alle velden zijn alfanumeriek. Er zijn geen numerieke of binaire velden
- Er worden geen eisen gesteld aan bestandsnamen. Spaties of compleet afwijkende bestandsnamen zijn geen probleem
- Je kunt probleemloos zelf een bestand aanmaken
- Als velden ontbreken, is dat geen probleem voor check your file, zolang de aanwezige velden maar wel kloppen
- Velden mogen niet het maximale aantal karakters overschrijden. Als dat toch gebeurt, wordt het betreffende record niet geaccepteerd
- Onbekende kolommen zijn geen probleem
- Volgorde van kolommen maakt niet uit. De informatie in de eerste regel van de header, moet wél in de juiste volgorde staan.
Header
- Van de eerste rij, hoeven alleen de eerste paar velden gebruikt te worden
- De tweede en derde rij bevatten standaard de kolomtitels in het Engels en in de locale taal. Je kun hier echter ook twee keer de kolomtitels in het Engels invoegen - Dat scheelt heel veel tijd!
Bestandscodering (mei 2016 - juli 2018)
Amazon kan in beginsel alleen overweg met ISO-8859-1, aka. Windows Latin 1 of Latin1. Dat is een 1 byte/karakter-codering. Als je geen bijzondere tekens gebruikt, werkt UTF-7 of -8 ook prima, maar je zult versteld staan hoe snel je al een teken gebruikt dat anders is gecodeerd in utf8 tov. latin1. Bv. ø (doorsnede), € of ü.
Indien een exportbestand al is opgemaakt in UTF8, kun je dit converteren met bv. de command-line tool iconv
:
iconv -f utf-8 -t iso-8859-1 ./amazon-export.tsv > ./amazon-export-iso.tsv
of door 't bestand te openen in Vim en te converteren middels :set fileencoding latin1
Veldlengte
Amazon specificeert maximale veldlengte in bytes en niet in karakters. Daarnaast zijn dit minder-dan-waardes. Dus als ergens '250 bytes' staat, wordt bedoeld minder dan 250 bytes. Als je teveel tekens gebruikt, krijg je een foutmelding en wordt het betreffende record doorgaans niet geaccepteerd.
De truuk is, dat Amazon veldlengtes berekent in utf8-codering en niet in latin1-codering. Waarom dat belangrijk is: Latin1 is een 1 byte/karakter-codering, waar utf8 al snel meerdere bytes gebruikt voor dezelfde tekens (bv. '€'). Enkele tests (juli 2018) om deze verschillen te illustreren (OK of Niet OK wil zeggen of Amazon deze waardes accepteert na upload):
OK, char_length: 248, byte length latin1: 248, byte length utf8: 248 OK, char_length: 249, byte length latin1: 249, byte length utf8: 249 OK, char_length: 249, byte length latin1: 249, byte length utf8: 249 OK, char_length: 249, byte length latin1: 249, byte length utf8: 249 Niet OK, char_length: 250, byte length latin1: 250, byte length utf8: 250 Niet OK, char_length: 249, byte length latin1: 249, byte length utf8: 252 Niet OK, char_length: 248, byte length latin1: 248, byte length utf8: 252 Niet OK, char_length: 249, byte length latin1: 249, byte length utf8: 252 Niet OK, char_length: 249, byte length latin1: 249, byte length utf8: 257
Voorbeeld-MySQL-code voor deze tests:
set @01="..."; set @02="..."; set @03="..."; # select "Niet OK" as status, concat("char_length: ", char_length( @01)) as char_byte, concat("byte length latin1: ", length(convert( @01 using latin1))) as byte_length_latin1, concat("byte length utf8: ", length(convert( @01 using utf8))) as byte_length_utf8 union select "OK" as status, concat("char_length: ", char_length( @02)) as char_byte, concat("byte length latin1: ", length(convert( @02 using latin1))) as byte_length_latin1, concat("byte length utf8: ", length(convert( @02 using utf8))) as byte_length_utf8 union select "Niet OK" as status, concat("char_length: ", char_length( @03)) as char_byte, concat("byte length latin1: ", length(convert( @03 using latin1))) as byte_length_latin1, concat("byte length utf8: ", length(convert( @03 using utf8))) as byte_length_utf8;
Voorbeelden - PMA
Dit zijn voorbeelden van geslaagde testen. Overigens, ik gebruik PMA (PHPMyAdmin) niet voor operationeel werk. Daarvoor gebruik ik geprogrammeerde exports vanuit MySQL.
Velden omsloten met dubbele aanhalingstekens
"TemplateType=HomeImprovement" "Version=2014.1223" NULL NULL NULL NULL "Lagerhaltungsnummer" "Hersteller-Barcode" "Barcode-Typ" "Titel" "Marke" "Hersteller" "item_sku" "external_product_id" "external_product_id_type" "item_name" "brand_name" "manufacturer" "01234" "8435146742123" "EAN" "Widgets for Bosch Gerät" "Smalec" "Smalec" "01345" "8435146742123" "EAN" "Widgets for Bosch Gerät" "Smalec" "Smalec"
Zonder aanhalingstekens en overgeslagen veld 'Price'
TemplateType=HomeImprovement Version=2014.1223 NULL NULL NULL NULL NULL NULL NULL NULL NULL Lagerhaltungsnummer Hersteller-Barcode Barcode-Typ Titel Marke Hersteller Artikelnummer/Seriennummer Produkttyp Produktbeschreibung Update / Löschen Preis item_sku external_product_id external_product_id_type item_name brand_name manufacturer part_number feed_product_type product_description update_delete standard_price 01fd1 8435146742338 EAN Widgets Smalec Smalec 01fs Electrical Carbon brushes 01222 for power tools<ul><li> Product code: 0fs1<li> Dimensions (mm, from smallest to largest): 6.4 x 6.4 x 16<li> Number of pieces per package: 2<li> Alternative product codes: 0101J, FAE11fsfsJ Update 5.0000 fsfs 8435146742341 EAN Widgets Smalec Smalec 0fs1 Electrical Carbon brushes 01234 for power tools<ul><li> Product code: 01fs<li> Dimensions (mm, from smallest to largest): 6.4 x 8 x 16.5<li> Number of pieces per package: 2<li> Alternative product codes: 0102J, FAE110dfg2J Update 7.2500
Zie ook
- Bestandscodering achterhalen
- Export vanuit MySQL voor Amazon
- Inventaris in bulk bewerken (Amazon)
- Inventaris-upload - Check your file (Amazon)
- Strings, bytes, karakters & codering (MySQL)
Bronnen
- http://stackoverflow.com/questions/17245206/uploading-amazon-inventory-utf-8-encoding
- https://imedidata-webhelp.s3.amazonaws.com/WebHelp_ENG/NEWiMedidata/About_User_Loader/Exporting_Editing_and_Importing_CSV_Files.htm
- http://php.net/manual/en/function.utf8-decode.php
- https://sellercentral.amazon.com/forums/thread.jspa?messageID=2809509
- https://stackoverflow.com/questions/51517927/mysql-select-first-10-bytes-of-a-string