

# Conexão com o WooCommerce
<a name="connecting-to-data-woocommerce"></a>

O WooCommerce é uma solução de software flexível de código aberto criada para sites baseados em WordPress. É comumente usado para criar lojas de comércio eletrônico online. Com essa solução de software, qualquer pessoa pode transformar seu site comum em uma loja online totalmente funcional.

**Topics**
+ [Suporte do AWS Glue para o WooCommerce](woocommerce-support.md)
+ [Políticas que contêm as operações de API para criar e usar conexões](woocommerce-configuring-iam-permissions.md)
+ [Configuração do WooCommerce](woocommerce-configuring.md)
+ [Configuração de conexões do WooCommerce](woocommerce-configuring-connections.md)
+ [Leitura de entidades do WooCommerce](woocommerce-reading-from-entities.md)
+ [Opções de conexão do WooCommerce](woocommerce-connection-options.md)

# Suporte do AWS Glue para o WooCommerce
<a name="woocommerce-support"></a>

O AWS Glue oferece suporte ao WooCommerce da seguinte forma:

**Compatível como fonte?**  
Sim. É possível usar trabalhos de ETL do AWS Glue para consultar seus dados do WooCommerce.

**Compatível como destino?**  
Nº

**Versões da API do WooCommerce com suporte**  
Versões da API do WooCommerce com suporte:
+ v3

# Políticas que contêm as operações de API para criar e usar conexões
<a name="woocommerce-configuring-iam-permissions"></a>

O exemplo de política a seguir descreve as permissões necessárias do AWS IAM para criar e usar conexões. Se você estiver criando um novo perfil, crie uma política que contenha o seguinte:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Se você não quiser usar o método acima, como alternativa use as seguintes políticas do IAM gerenciadas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – Concede acesso a recursos que vários processos do AWS Glue exigem para fazer a execução em seu nome. Esses recursos incluem o AWS Glue, Amazon S3, IAM, CloudWatch Logs e Amazon EC2. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os processos do AWS Glue terão as permissões necessárias. Esta política geralmente é anexada a funções especificadas durante a definição de crawlers, trabalhos e endpoints de desenvolvimento.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): concede acesso total aos recursos do AWS Glue quando uma identidade à qual a política está anexada usa o Console de Gerenciamento da AWS. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os usuários poderão acessar todos os recursos do console. Esta política geralmente é anexada aos usuários do console do AWS Glue.

# Configuração do WooCommerce
<a name="woocommerce-configuring"></a>

Antes de poder usar o AWS Glue para transferir dados do WooCommerce, os seguintes requisitos deverão ser atendidos:

## Requisitos mínimos
<a name="woocommerce-configuring-min-requirements"></a>

Estes são os requisitos mínimos:
+ Você tem uma conta do WooCommerce com um `consumerKey` e um `consumerSecret`.
+ Sua conta do WooCommerce tem acesso à API com uma licença válida.

Se você atender a esses requisitos, poderá conectar o AWS Glue à conta do WooCommerce. Para conexões típicas, você não precisa fazer mais nada no WooCommerce.

# Configuração de conexões do WooCommerce
<a name="woocommerce-configuring-connections"></a>

O WooCommerce oferece suporte à autenticação personalizada. Para obter a documentação pública do WooCommerce sobre a geração das chaves de API necessárias para autorização personalizada, consulte [Autenticação – Documentação da API REST do WooCommerce](https://woocommerce.github.io/woocommerce-rest-api-docs/#authentication).

Para configurar uma conexão do WooCommerce:

1. No AWS Secrets Manager, crie um segredo com os seguintes detalhes:
   + Para uma aplicação conectada gerenciada pelo cliente, o segredo deve conter o segredo do consumidor da aplicação conectada com `consumerKey` e `consumerSecret` como chaves. Observação: é preciso criar um segredo por conexão em AWS Glue.

1. No AWS Glue Glue Studio, crie uma conexão em **Conexões de dados** seguindo estas etapas:

   1. Ao selecionar um **Tipo de conexão**, escolha WooCommerce.

   1. Forneça o `INSTANCE_URL` da instância do WooCommerce à qual você deseja se conectar.

   1. Selecione o perfil do AWS IAM que o AWS Glue pode assumir e tem permissões para as seguintes ações:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Selecione o `secretName` que você deseja usar para essa conexão no AWS Glue para colocar os tokens.

   1. Selecione as opções de rede se quiser usar sua rede.

1. Conceda permissão ao perfil do IAM associado ao seu trabalho do AWS Glue para ler `secretName`.

# Leitura de entidades do WooCommerce
<a name="woocommerce-reading-from-entities"></a>

**Pré-requisito**

Um objeto do WooCommerce do qual você deseja ler. Você precisará do nome do objeto, como cupom, pedido, produto, etc.

**Entidades compatíveis quanto à origem**:


| Entidade | Pode ser filtrada | Oferece suporte a limite | Oferece suporte a Ordenar por | Oferece suporte a Selecionar \$1 | Oferece suporte a particionamento | 
| --- | --- | --- | --- | --- | --- | 
| Cupom | Sim | Sim | Sim | Sim | Sim | 
| Total do cupom | Não | Não | Não | Sim | Não | 
| Total de clientes | Não | Não | Não | Sim | Não | 
| Ordem | Sim | Sim | Sim | Sim | Sim | 
| Total de pedidos | Não | Não | Não | Sim | Não | 
| Gateway de pagamento | Não | Não | Não | Sim | Não | 
| Produto | Sim | Sim | Sim | Sim | Sim | 
| Atributo do produto | Sim | Sim | Sim | Sim | Sim | 
| Categoria do produto | Sim | Sim | Sim | Sim | Sim | 
| Análise do produto | Sim | Sim | Sim | Sim | Sim | 
| Classe de envio do produto | Sim | Sim | Sim | Sim | Sim | 
| Tag do produto | Sim | Sim | Sim | Sim | Sim | 
| Variação do produto | Sim | Sim | Sim | Sim | Sim | 
| Total de produtos | Não | Não | Não | Sim | Não | 
| Relatório (lista) | Não | Não | Não | Sim | Não | 
| Total de análises | Não | Não | Não | Sim | Não | 
| Relatório de vendas | Sim | Não | Não | Sim | Não | 
| Método de envio | Não | Não | Não | Sim | Não | 
| Zona de envio | Não | Não | Não | Sim | Não | 
| Localização da zona de envio | Não | Não | Não | Sim | Não | 
| Método da zona de envio | Não | Não | Não | Sim | Não | 
| Alíquota | Sim | Sim | Sim | Sim | Sim | 
| Classe fiscal | Não | Não | Não | Sim | Não | 
| Relatório dos mais vendidos | Sim | Não | Não | Sim | Não | 

**Exemplo:**

```
woocommerce_read = glueContext.create_dynamic_frame.from_options(
    connection_type="glue.spark.woocommerce",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "coupon",
        "API_VERSION": "v3",
        "INSTANCE_URL": "instanceUrl"
    }
```

**Detalhes de entidade e campo do WooCommerce**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/woocommerce-reading-from-entities.html)

**nota**  
Os tipos de dados Struct e List são convertidos no tipo de dados String, e o tipo de dados DateTime é convertido em Timestamp na resposta dos conectores.

## Particionamento de consultas
<a name="woocommerce-reading-partitioning-queries"></a>

**Particionamento com base em registros**:

É possível fornecer a opção adicional `NUM_PARTITIONS` do Spark se quiser utilizar a simultaneidade no Spark. Com esses parâmetros, a consulta original seria dividida em `NUM_PARTITIONS` subconsultas, que poderiam ser executadas pelas tarefas do Spark simultaneamente.

No particionamento com base em registros, o número total de registros presentes é consultado na API do WooCommerce e dividido por um número `NUM_PARTITIONS` fornecido. O número resultante de registros é então buscado simultaneamente por cada subconsulta.
+ `NUM_PARTITIONS`: o número de partições.

As entidades a seguir oferecem suporte ao particionamento baseado em registros:
+ cupon
+ ordem
+ product
+ product-attribute
+ product-attribute-term
+ product-category
+ product-review
+ product-shipping-class
+ product-tag
+ product-variation
+ tax-rate

Exemplo:

```
woocommerce_read = glueContext.create_dynamic_frame.from_options(
    connection_type="glue.spark.woocommerce",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "coupon",
        "API_VERSION": "v3",
        "INSTANCE_URL": "instanceUrl"
        "NUM_PARTITIONS": "10"
    }
```

**Particionamento com base em registros**:

A consulta original é dividida em `NUM_PARTITIONS` subconsultas que podem ser executadas pelas tarefas do Spark simultaneamente:
+ `NUM_PARTITIONS`: o número de partições.

Exemplo:

```
WooCommerce_read = glueContext.create_dynamic_frame.from_options(
    connection_type="WooCommerce",
    connection_options={
        "connectionName": "connectionName",
        "REALMID": "1234567890123456789",
        "ENTITY_NAME": "Bill",
        "API_VERSION": "v3",
        "NUM_PARTITIONS": "10"
    }
```

# Opções de conexão do WooCommerce
<a name="woocommerce-connection-options"></a>

Estas são as opções de conexão do WooCommerce:
+ `ENTITY_NAME`(string): (obrigatório) usado para leitura. O nome do seu objeto no WooCommerce.
+ `API_VERSION`(string): (obrigatório) usado para leitura. Versão da API Rest do WooCommerce que você deseja usar.
+ `REALM_ID`(string): um ID que identifica uma empresa individual do WooCommerce Online para a qual você envia solicitações.
+ `SELECTED_FIELDS`(Lista<String>): padrão: vazio(SELECIONE \$1). Usado para leitura. Colunas que deseja selecionar para o objeto.
+ `FILTER_PREDICATE`(string): padrão: vazio. Usado para leitura. Deve estar no formato Spark SQL.
+ `QUERY`(String): padrão: vazia. Usado para leitura. Consulta completa do Spark SQL.
+ `INSTANCE_URL`(string): (obrigatório) um URL de instância do WooCommerce válida com o formato: https://<instância>.wpcomstaging.com
+ `NUM_PARTITIONS`(Inteiro): padrão: 1. Usado para leitura. Número de partições para leitura.