Árvore de relacionamentos
Através da árvore de relacionamentos obtida no download e decriptação de relatórios da SP-API, é possível obter a relação de onde podem ser inseridos produtos dentro da estrutura da Amazon, bem como obter os seus Product Types.
Este caso de uso utilizou o JSON da árvore de relacionamentos que pode ser encontrado no link abaixo:
IMPORTANTE
Não recomendamos a utilização do JSON em anexo, ele pode estar desatualizado.
O recomendavel é sempre extrair o XML mais recente através do relatório GET_XML_BROWSE_TREE_DATA e então convertê-lo para o formato adequado.
Bem como o projeto json2graphql que realizou a importação desse JSON em uma instância Heroku GraphQL para testes.
Abaixo duas chaves de exemplo que ilustram a estrutura do JSON da árvore de relacionamentos:
{
"Result": {
"Node": [
{
"browseNodeId": "17938239011",
"browseNodeAttributes": {
"@count": "1",
"attribute": {
"@name": "recommended_browse_nodes",
"#text": "17938239011"
}
},
"browseNodeName": "Alexa Skills",
"browseNodeStoreContextName": "Alexa Skills",
"browsePathById": "17938238011,17938239011",
"browsePathByName": "Alexa Skills",
"hasChildren": "true",
"childNodes": {
"@count": "23",
"id": [
"18078004011",
"18078005011",
"18078006011",
"18078007011",
"18078008011",
"18078065011",
"18078009011",
"18078010011",
"18078011011",
"18078012011",
"18078013011",
"18078014011",
"18078015011",
"18078016011",
"18078017011",
"18078018011",
"18078019011",
"18078020011",
"18078021011",
"18078039011",
"18078022011",
"18078023011",
"18078024011"
]
},
"productTypeDefinitions": null,
"refinementsInformation": {
"@count": "0"
}
},
{
"browseNodeId": "18078004011",
"browseNodeAttributes": {
"@count": "1",
"attribute": {
"@name": "recommended_browse_nodes",
"#text": "18078004011"
}
},
"browseNodeName": "Carro Conectado",
"browseNodeStoreContextName": "Carro Conectado",
"browsePathById": "17938238011,17938239011,18078004011",
"browsePathByName": "Alexa Skills,Carro Conectado",
"hasChildren": "false",
"childNodes": {
"@count": "0"
},
"productTypeDefinitions": null,
"refinementsInformation": {
"@count": "0"
}
}
}
IMPORTANTE
Ao realizar a importação do JSON é necessário definir um ID para cada chave. Neste caso, o "browseNodeId" NÃO pode ser utilizado como ID (Chave primária), uma vez que existem chaves que podem repetir o mesmo "browseNodeId".
Neste caso recomenda-se criar um ID único para cada chave do JSON exemplo.
O que é a Árvore de Relacionamentos?
Analisando um Browse Node Id, existem as principais chaves:
{
"browseNodeId": "19778190011",
"browseNodeAttributes": {
"@count": "1",
"attribute": {
"@name": "recommended_browse_nodes",
"#text": "19778190011"
}
},
"browseNodeName": "Espumante e Champanhe",
"browseNodeStoreContextName": "Espumante e Champanhe",
"browsePathById": "18991079011,18991080011,19778003011,19778049011,19778190011",
"browsePathByName": "Alimentos e Bebidas,Bebidas Alcoólicas,Vinho,Espumante e Champanhe",
"hasChildren": "true",
"childNodes": {
"@count": "5",
"id": [
"19955269011",
"19955270011",
"19955271011",
"19955273011",
"19955272011"
]
},
"productTypeDefinitions": "WINE",
"refinementsInformation": {
"@count": "0"
}
}
Que podemos entender do seguinte modo (Exemplo: Espumante e Champanhe):
Chave | Descrição |
---|---|
"browseNodeId": "19778190011" | Número identificador do nó |
"browseNodeName": "Espumante e Champanhe" | Nome do nó |
"browsePathById": "18991079011, 18991080011,19778003011, 19778049011,19778190011" | Sequência dos nós predecessores (Esquerda para a Direita) de onde se encontra o nó principal: 18991079011 > 18991080011 > 19778003011 > 19778049011 > 19778190011 |
"browsePathByName": "Alimentos e Bebidas,Bebidas Alcoólicas, Vinho,Espumante e Champanhe", | Sequência da descrição dos nós predecessores (Esquerda para a Direita) de onde se encontra o nó principal: Alimentos e Bebidas > Bebidas Alcoólicas > Vinho > Espumante e Champanhe |
"hasChildren": "true", "childNodes": { "@count": "5", "id": [ "19955269011", "19955270011", "19955271011", "19955273011", "19955272011" ] }, | Se o nó atual possui filhos ou não. Neste caso, Espumante e Champanhe possuem 5 nós filhos. IMPORTANTE destacar que no processo de cadastro de produtos é sempre indicado alocar um produto em um nó que preferencialmente não possua filhos (Leaf Node), pois saberemos que este é o nível mais granular da árvore de relacionamentos. |
"productTypeDefinitions": "WINE", | Tipo do produto com o qual pode-se encontrar os atributos relevantes de cada nó. |
Exemplo - Encontrando o melhor lugar para cadastrar Vinho
Um dos casos de uso para o qual o JSON da árvore de relacionamentos pode ser utilizado é encontrar PTs (Product Types) para determinadas palavras-chave.
No exemplo abaixo foram realizadas buscas para tentar cadastrar um novo Vinho no inventário.
Essa busca utilizou simplesmente a palavra chave 'Vinho' para tentar encontrar o melhor local de inserção de um novo produto. Trazendo Product Type diferentes para o seu melhor caso de uso.
query MyQuery {
Node(where: {browsePathByName: {_ilike: "%vinho%"}}, order_by: {productTypeDefinitions: desc}, distinct_on: productTypeDefinitions) {
browseNodeName
productTypeDefinitions
browsePathByName
browseNodeId
childNodes
}
}
O resultado foi que para a palavra 'Vinho' existem 4 diferentes Product Types que podem ser utilizados, cada qual com seu atributo específico.
{
"data": {
"Node": [
{
"browseNodeName": "Crémant",
"productTypeDefinitions": "WINE",
"browsePathByName": "Alimentos e Bebidas,Bebidas Alcoólicas,Vinho,Espumante e Champanhe,Crémant",
"browseNodeId": 19955271011,
"childNodes": ""
},
{
"browseNodeName": "Vinho Tinto",
"productTypeDefinitions": "VINEGAR",
"browsePathByName": "Alimentos e Bebidas,Óleos, Azeites, Vinagres e Molhos para Salada,Vinagres,Vinho Tinto",
"browseNodeId": 19955331011,
"childNodes": ""
},
{
"browseNodeName": "Vinho e bebidas",
"productTypeDefinitions": "MOBILE_APPLICATION",
"browsePathByName": "Apps e Jogos,Estilo de vida,Vinho e bebidas",
"browseNodeId": 13941796011,
"childNodes": ""
},
{
"browseNodeName": "Jatobeba",
"productTypeDefinitions": "GROCERY",
"browsePathByName": "Alimentos e Bebidas,Bebidas Alcoólicas,Vinho,Jatobeba",
"browseNodeId": 19955265011,
"childNodes": ""
}
]
}
}
Se por acaso resolvêssemos ser um pouco mais específicos ao tentar encontrar um 'Vinagre de Vinho', a busca na árvore de nós poderia nos ajudar ao utilizar diversas palavras-chave concatenadas, por exemplo:
query MyQuery {
Node(where: {browsePathByName: {_ilike: "%vinho%"}, _and: {browsePathByName: {_ilike: "%vinagre%"}}}, order_by: {productTypeDefinitions: desc}, distinct_on: productTypeDefinitions) {
browseNodeName
productTypeDefinitions
browsePathByName
browseNodeId
childNodes
}
}
Retornando apenas o valor mais adequado possível para a inserção do produto dentro da árvore de nós e categorias da Amazon:
{
"data": {
"Node": [
{
"browseNodeName": "Vinho Tinto",
"productTypeDefinitions": "VINEGAR",
"browsePathByName": "Alimentos e Bebidas,Óleos, Azeites, Vinagres e Molhos para Salada,Vinagres,Vinho Tinto",
"browseNodeId": 19955331011,
"childNodes": ""
}
]
}
}
Updated over 1 year ago