Published in 20:56 of 01/15/2017 by Bruno Rocha
Bruno Rocha There is more to life than increasing its speed!

Published in 20:56 of 01/15/2017

←Home

Migrando e-commerce do Iluria para o Shopify (usando Python)

Iluria

Ilúria é uma empresa brasileira de e-commerce que fornece uma plataforma bastante interessante para quem está começando uma loja virtual e precisa de algo simples e funcional. O sistema do Ilúria é realmente simples e de fácil uso, por isso continuo recomendando essa plataforma caso a sua necessidade seja básica e seu negócio ainda estiver começando.

Porém quando você começar a ter necessidades mais específicas, personalizações no sistema de sua loja e melhor colocação nas buscas o Ilúria infelizmente deixará de te atender e surgirá a necessidade de migrar para uma plataforma mais completa.

Vantagens do Iluria

  • É uma plataforma brasileira!
    • E isso ajuda a obter suporte.
    • É legal colaborar com o crescimento de empresas nacionais!
  • O preço é bom!
    • Eles fornecem 15 dias grátis
    • Para um catálogo de 50 produtos custa R$ 9,90, 200 produtos R$ 29,90 e o preço vai aumentando de acordo com a quantidade produtos cadastrados.
  • É fácil de usar
    • A plataforma tem uma admin bastante simples e fácil de usar.

Desvantagens do Iluria

  • GOOGLE & SEO
    • Apesar de o site dizer que é otimizado para o Google, o Iluria não fornece muitas opções de fácil acesso para otimizar o SEO da loja, não tem area para customizar URLs, descriptions, tags, sitemap etc... e isso seria possível apenas programando o template.
    • As configurações padrão de SEO não são suficientes para uma boa colocação no Google.
  • Falta de relatórios analíticos
    O Iluria não oferece muitos relatórios analíticos e isso torna bastante difícil fazer re-marketing.
    • Carrinho abandonado
      O Iluria não tem controle de carrinho de compras abandonado e isso impossibilita que você lembre seu cliente sobre compras esquecidas, e está é uma das melhoras práticas para recuperar vendas.
    • Buscas
      Outro relatório interessante seria o relatório de buscas, o cliente entra na sua loja e digita na busca "azul" mas não encontra as camisetas azuis que você tem no seu catálogo e então vai para outra loja. O iluria deveria ter um relatório para te informar isso, pois dessa forma você pode melhorar a descrição e tags de seus produtos que da próxima vez a "camiseta azul" seja encontrada!
  • Não tem API
    Essa é gravíssima, injustificável, imperdoável !!!!
    Estamos em 2017 e o mundo da web gira em torno de API qualquer possibilidade de estender, criar plugins, melhorar seria através de APIs, eu enviei um e-mail para o Iluria perguntando e disseram que simplesmente não tem nenhum tipo de API e isso é injustificável para uma empresa já estabelecida como a Iluria. Sem API os problemas são:
    • Não é possível estender as funcionalidades da plataforma.
    • Não é possível programar web-hooks para disparar envios de e-mails por exemplo usando IFTTT, Zapier e outras tecnologias de automação.
    • Não é possível cadastrar produtos em massa que você já tenha em seu banco de dados ou planilha.
    • Não é possível integrar com market places como MercadoLivre e Buscapé.
    • Não ajuda nem na hora de migrar para outra plataforma como vocês verão nos códigos a seguir.
  • Seus dados não te pertencem
    Bom, pelo menos é o que parece, e isso me leva a creditar que a falta de uma API possa fazer parte de alguma estratégia do Iluria para não permitir a saída dos clientes.
    • Exportar lista de clientes e produtos é limitada. No admin até existem as opções exportar para a lista de produtos e clientes, mas as informações exportadas não são suficientes. (mostrarei em seguida)

[IMG API]

Eu ainda continuo recomendando o Ilúria para quem está começando no e-commerce é com certeza a plataforma mais acessível. Mas realmente gostaria que essa empresa abrisse os olhos para a oportunidade que eles tem em mãos e trabalhassem para oferecer mais funcionalidades para os clientes, evitando assim que abandonem a plataforma quando começarem a crescer e eu ficaria mais feliz em estar aqui falando apenas das vantagens de uma plataforma nacional de e-commerce.

Preciso migrar e agora?

Na hora que precisar migrar para outra plataforma você precisa ter certeza de que o seu histórico não será perdido, e no caso do Iluria isso é em difícil pois as opções existentes não fornecem muitos dados.

O que você precisa manter:

  • Cadastro de produtos e variantes (contendo imagens)
  • Histórico de vendas
  • Cadastro de clientes

O primeiro desafio é conseguir esses dados, no caso do projeto em que eu trabalhei na migração decidimos não migrar nem o cadastro de clientes (pois já existia um cadastro em paralelo no MailChimp) e nem o histórico de vendas (pois é possível ter esta informação no gateway de pagamento).

Portanto o que posso mostrar aqui neste post é como migrar a sua lista de produtos cadastrados e para isso utilizei a lista limitada fornecida pelo Iluria como ponto de partida e também um script em Python para pegar os dados dos produtos via crawler.

Para exportar a lista de produtos utilize o menu relatórios -> estoque de produtos conforma a imagem abaixo:

[IMG EXPORT PROD]

Você irá baixar um arquivo .csv com o seguinte formato:

Produto;Nome;Varia��o 1;Varia��o 2;Varia��o 3;Estoque;Pre�o;Pre�o de custo;Nome do fornecedor
3F553C;Madeira 147;1,40 x 1,40;;;Sob encomenda;160,00;;
3F553B;Diversos 115;1,40 x 1,40;;;Sob encomenda;160,00;;
3F553B;Diversos 115;1,40 x 2,00;;;Sob encomenda;220,00;;

Você deve estar se perguntando o porquê dos caracteres no exemplo acima?

Bom como se já não bastasse tudo o que relacionei acima o Iluria ainda surpreende com mais isso, OS DADOS ESTÃO em codificação ISO-8859-1 e mais uma vez me perguntei em que ano estamos? porquê não está em UTF-8??

E as minhas imagens?

Bom, agora que entra a parte divertida, como percebem o arquivo que exportamos acima não traz muita informação sobre o produto, não tem o texto de descrição e também não tem uma referência para a imagem do produto, portanto resolveremos isso com Python!!!

Python FTW

Puxando os dados do Iluria através de crawling

O código dessa parte é bem simples (pode melhorar) mas o que apresento aqui é o que funcionou para mim nesta migração:

primeiro vamos criar um arquivo chamado utils.py

# coding: utf-8
import csv
import shutil
import requests
from bs4 import BeautifulSoup


def get_image_and_description(produto, link):
    """Baixa a imagem do iluria e salva no diretório atual
    Pega o texto de descrição do produto e retorna
    se não encontrar retorna None.
    """

    user_agent = {'User-agent': 'Mozilla/5.0'}
    response = requests.get(link, headers = user_agent)
    if response.status_code != 200:
        return
    soup = BeautifulSoup(response.content, "html.parser")

    image_element = soup.find("img", {"id": "big-image"})
    if image_element:
        image_url = "http:{0}".format(image_element['src'])
        image_url = image_url.replace("450xN", "850xN")

        image_content = requests.get(image_url, stream=True)
        if image_content.status_code == 200:
            filename = "{0}.jpg".format(produto)
            with open(filename, "wb") as image_file:
                shutil.copyfileobj(image_content.raw, image_file)
            del image_content

    description_element = soup.find(
        "div", {"class": "product-description"}, text=True)

    if description_element:
        return description_element[0]


# HACK ALLERT!!
# A função abaixo "imita" uma classe
def IluriaDictReader(data, **kwargs):
    """Lê o csv do Iluria em ISO-8859-1"""
    csv_reader = csv.DictReader(data, **kwargs)
    for row in csv_reader:
        yield {
          key: value.decode('iso-8859-1').encode('utf8')
          for key, value in row.iteritems()
        }

A primeira função acima irá fazer o download da imagem do Iluria e também salvar a descrição do produto já que essas informações não tem no csv exportado e caso você precise de outras informação basta adicionar mais elementos ao soup.find e retornar os dados.

Até aqui com as 2 funções acima já é possível imaginar em como fazer uma migração mas agora você tem que decidir para qual plataforma migrar, vamos falar delas!

Para onde ir?

Para este projeto analisamos algumas alternativas ao Iluria e tentamos dar preferência a alternativas nacionais e vamos falar delas.

  • Box Loja Essa pareceu ser uma opção bem próxima ao Iluria, os preços são bons entre 20 e 50 por mês de acordo com a quantidade de produtos, não cobram taxas por cada venda efetuada e parece ter algumas facilidades para customização. Porém mais uma vez o que tirou essa plataforma da lista de candidatos foi a falta e API, eu vasculhei o site deles, fóruns e Google, vi até em sites de freelancers pessoas procurando quem fizesse isso via algum script robô para migrar dados de Magento para o Box loja pelo fato deles ainda não terem API. E no rodapé do site deles não tem um link bem claro escrito developers ou API, e isso foi motivo suficiente para eliminar apesar de parecer uma boa opção.

  • Loja Integrada (recomendado !!!)
    Tá aqui mais uma opção que parece ser fantástica, e como nome sugere eles fornecem uma API!!! e por isso estão de parabéns!!! Esta plataforma é muito bem falada, e realmente parece uma plataforma de e-commerce que está a frente dos concorrentes, eu gostaria muito de ter migrado este projeto para o Loja Integrada, porém aqui pesou a questão comercial, os preços do Loja Integrada ainda não são tão convidativos quanto dos concorrentes acima, e isso parece ser justo pois oferecem mais vantagens, porém neste ponto aqui o Shopify acabou ganhando

Shopify

Shopify é uma empresa Canadense que oferece uma das mais utilizadas plataformas de e-commerce do mundo (supostamente 150 mil lojas) é escrita em Ruby on Rails, mas apesar disso possui uma API bastante completa e muito bem documentada. Além disso o Shopify criou o Liquid uma linguagem de template bastante fácil e inspirada no já conhecido Jinja portante muito confortável para qualquer programador Python interagir.

enter image description here

Vantagens do Shopify

  • Confiável
    • Uma empresa do porte do Shopify mantém um suporte bastante ativo e o minimo que podemos esperar é uma plataforma estável e confiável.
  • Integrada
    • A API do Shopify é muito bem escrita e com documentação completa tornando fácil interagir tanto para importar e exportar dados, quanto para criar aplicações que estendam as funcionalidades.
  • APPs
    • Por conta da API citada acima, o Shopify oferece um market place de APPs é possível encontra ruma variedade de plugins tando gratuitos quanto comerciais para instalar na sua loja e você também pode usar a API para criar seus próprios APPs.
  • Temas!!!
    • Isso é muito importante e o Shopify parece ter feito da forma certa, pois como já mencionei a linguagem de templates é fácil de usar então isto resulta em muitos templates disponíveis gratuitamente e também empresas como Envato, Themes Monster etc oferecendo várias opções comerciais, e isto também fácil para encontrar desenvolvedores para customizar temas.
  • SEO, Google, Buscas
    • Essa é uma parte muito interessante, de maneira simples é possível customizar as opções de SEO e os resultados são muito bons, poucas horas depois de migrar já tínhamos resultados diferentes no Google. (analisados através do Google developer tools)
  • Relatórios
    • O Shopify oferece desde o plano mais básico alguns relatórios essenciais como o controle de carrinhos abandonados, buscas efetuadas, balanço de vendas etc.. E os planos mais superiores ainda oferecem relatórios customizados.
  • Smart Collections
    • Aqui está outro recurso interessante, para quem tem muitos produtos e não quer ficar organizando manualmente é possível criar regras para que os produtos sejam automaticamente colocados em determinadas categorias/menus usando condições simples como sempre que aparecer 'camiseta' no título colocar este produto na categoria 'roupas', etc...
  • Preço
    • O plano básico do Shopify custa 30 dólares (pouco mais de 100,00) e oferece um grande número de funcionalidades e ainda é possível incluir APPs para obter ainda mais recursos.
  • Biliotecas
    • O próprio Shopify mantém bibliotecas em algumas linguagens como Ruby, Java, C#, Python e PHP para interagir com a API deles :)

Desvatagens do Shopify

  • Admin em Inglês
    • Os temas de front-end podem ser traduzidos para qualquer lingua, mas o admin apenas em inglês e isso dificulta bastante a adoção mesmo para quem fala a lingua inglesa pois alguns termos como "fulfillment" não são de fácil tradução.
  • Complexidade do Admin
    • Este problema só ocorre na primeira semana de uso, em pouco tempo você já se acostuma com a UI do admin, porém nas primeiras horas navegando você irá soltar muitos "What The Fuck???"
  • Compatibilidade com a realidade brasileira
    • O Shopify já atende bem tudo o que uma loja brasileira precisa, porém é bem claro que estão preparados para um estilo diferente de comércio, algumas coisas como taxas, estoque etc são feitas de um modo que não é usual no Brasil mas isso acredito que seja mais um problema de adaptação pois talvez nossos comércios que precisem se adaptar a um esquema mais organizado, e isso exige tempo e paciência.
  • Meios de pagamento
    • É possível configurar Paypal, PagSeguro, Mercadopago, Moip, Bitcoins entre outros. Eles tem o sistema preparado para trabalhar bem com todas essas plataformas, porém você só pode escolher Paypal + 1 para ser ativado em sua loja simultaneamente, ou seja, Paypal + Pagseguro, ou Paypal + Mercado Pago. Não é possível dar opção de seu cliente escolher qual gateway deseja usar.
  • Correios só através de app
    • Até existe um cálculo de correio integrado, mas é por faixa de CEP e você precisa configurar os preços manualmente, para ter um frete automático você precisa usar um APP adicional, é muito fácil de instalar, basta clicar em um botão! mas você tem que pagar + 5 dólares por mês para usar.

Mesmo com as desvantagens listadas acima o Shopify pareceu uma boa escolha, e a empresa está ativamente respondendo questões de brasileiros no seu fórum indicando que logo irão implementar mais facilidades e resolver essas limitações.

Decidimos migrar para o Shopify!!!

Interagindo com a API do Shopify via Python

Apesar do Shopify manter uma biblioteca Python para interagir com a API deles, eu analisei e achei que a solução mantida por eles não é muito Pythonica então continuei procurando.

Encontrei o projeto Python-Shopify que ainda não estava totalmente funcional e então fiz um fork e comecei a contribuir, arrumei alguns bugs e fiz o release para o PyPI. portanto agora é possível usar com pip install python-shopify.

Portanto em nosso projeto agora é a hora de criar o código que vai popular os produtos no banco de dados do Shopify usando aqueles dados que extraímos no código que mostrei acima.

Rode pip install python-shopify slugify tqdm e então no arquivo api.py

import os
from slugify import slugify
from shopify.products import (
    ProductsApiWrapper, Product, Image, Variant, Option
)


# FILL THE DATA below with data generated in Shopify-> admin -> apps
api_key = ''  
password = '' 
store_name = 'sua-loja'

paw = ProductsApiWrapper(api_key, password, store_name)

# Get a list of existing products, limited to 250 :(
existing = [item.title for item in paw.list(limit=250)]


def create_product(items):
    """Items is a list of dictionaries representing each product variant
    of the same product with the same ID and other data
    keys: ['description', 'price', 'name', 'link', 'size', 'stock']
    items = [
        # first variant holds full data and is default
        {'name': 'Awesome t-shirt',
         'code': '123456',
         'description': '<html>',
         'size': 'P',
         'price': '22.5',
         'stock': 2},
        # Other variants
        {'size': 'M',
         'price': '25.5',
         'stock': 2},
        {'size': 'G',
         'price': '29.5',
         'stock': 0},
    ]
    """

    # The first item should be the complete item holding all the fields
    # other items can have only the variants
    data = items[0]

    # Iluria gives us ISO-8859-1 :(
    name = data['name'].decode('utf-8')


    if name in existing or paw.list(title=name):
        # skip existing
        print "Already registered, skipping..."
        # or perform an update!!!
        return

    product = Product(
        title=data['name'],
        body_html=data['description'],
    )

    # There should be a 123456.jpg file in the same folder
    # alternatively you can use a URL provided in data
    image_filename = "{0}.jpg".format(data['code'])
    if os.path.exists(image_filename):
        image = Image()
        image.attach(image_filename)
        product.add_image(image)
    elif data.get('image_url'):
        product.add_image(Image(src=data['image_url']))

    # using the first word in title as tag
    # Product "T-shirt Blue 09" got tag "t-shirt"
    tag = data['name'].split()[0]
    tag = u''.join(i for i in tag if not i.isdigit())

    product.add_tags(tag.strip().lower())

    # You can add only 3 options
    # at positions 1, 2 and 3
    # you should add options before adding its variants
    product.add_option(
      Option(
        name="Size",
        position=1,
      )
    )

    for item in items:
        product.add_variant(
            Variant(
                option1=item['size'],
                # option2=data['size'],
                # option3=data['size'],
                title="Size",
                price=item['price'],
                # SKU should be different for each variant
                sku=data["code"] + slugify(item['size']), 
                position=1,
                inventory_policy="continue",
                fulfillment_service="manual",
                inventory_management="shopify",
                inventory_quantity=int(item['stock']),
                taxable=False,
                weight=300,
                weight_unit="g", # g, kg
                requires_shipping=True
            )
        )

    try:
        product = paw.create(product)
    except Exception as e:
        # do a proper logging here please!!!
        print e
        print product
        print items

    return product

Eu inclui o exemplo acima no repositório do Python-Shopify

Migrando do Iluria para o Shopify!!!

Agora precisamos juntar nossos 2 arquivos utils.py e api.py em um script e ai rodar a migração dos produtos.

import os
from collections import defaultdict
from tqdm import tqdm

from api import create_product
from utils import get_image_and_description, IluriaDictReader

BASE_URL = "http://www.sua_loja_iluria.com.br/pd-"
reader = IluriaDictReader(open('iluria_produtos_estoque.csv'), delimiter=";")
produtos = defaultdict(list)

for item in reader:
    size = item['Varia\xe7\xe3o 1']
    produtos[item["Produto"]].append(
       {
        "link": "{base}{slug}.html".format(
            base=BASE_URL, slug=item['Produto']
        ),
        "name": item["Nome"],
        "size": size,
        "price": item['Pre\xe7o'].replace(",", "."),
        "stock": item['Estoque'],
        "code": item['Produto']
       }
    )

for produto, items in tqdm(produtos.items()):
    data = items[0]  # cada item é uma lista com variações

    # pegamos a descrição e já fazemos o download da imagem
    # idealmente teriamos 2 funções, mas estamos só hackeando!!! :)
    data['description'] = get_image_and_description(
        data['code'], data['link']
    )

    if not os.path.exists('{0}.jpg'.format(produto)):
        # sem imagem sem cadastro!!!
        continue

    if not data['name']:
        # name é obrigatório
        continue

    # criamos o produto na API do Shopify e success!!!
    create_product(items)

Após o término do script você terá seus produtos cadastrados no Shopify e então os próximos passos será escolher e customizar seu tema (ou criar um próprio) e ai configurar sua loja, dominios, frete etc..

Apps recomendados:

Conclusão

Iluria uma empresa que tem uma boa plataforma mas que está perdendo a oportunidade de se tornar a maior plataforma de e-commerce brasileira por simplesmente não investir em evolução tecnológica de sua plataforma.

Loja Integrada aparentemente a melhor opção para quem quer se manter em uma plataforma brasileira, não tenho mais informações pois não cheguei realmente a utilizar, mas eles poderiam melhorar os preços de entrada, assim iriam atrair as lojas que inevitavelmente irão sair do Iluria

Shopify uma ótima opção, com muita coisa a melhorar para o público brasileiro mas mesmo assim com um pouco de dedicação e leitura das documentações é possível criar uma loja 100% funcional em poucas horas!!!

Para referencia: A loja que migramos no projeto citado é a https://fundosemtecido.com.br/ que comercializa fundos fotográficos para fotógrafos e conseguimos efetuar a migração desde a exportação dos dados, criação de tema personalizado, configurações de admin até colocar no ar em apenas 2 dias.

Links:

Python-Shopify

  • Consumindo e Publicando web APIs - PyData São Paulo - 2017 in Slides · 00:58 of 03/29/2017
  • AsyncIO - O futuro do Python mudou completamente! in python · 16:02 of 11/26/2016
  • Castálio Podcast Especial Python Brasil in podcast · 13:29 of 11/07/2016

  • comments powered by Disqus Go Top