# Armazenamento em nuvem

Os resultados de jobs da Scraper API são armazenados em nosso storage. Você pode obter seus resultados do nosso storage por `GET`fazendo o `/results` endpoint.

Como alternativa, podemos enviar os resultados para seu armazenamento em nuvem. Assim, você não precisa fazer requisições extras para buscar resultados — tudo vai diretamente para o seu bucket de storage.

{% hint style="info" %}
A integração com storage em nuvem funciona apenas com [**Push-Pull**](https://developers.oxylabs.io/documentation/pt-br/solucoes-de-scraping/web-scraper-api/integration-methods/push-pull) método de integração.
{% endhint %}

Atualmente, suportamos estes serviços de storage em nuvem:

* [**Google Cloud Storage**](#google-cloud-storage)
* [**Amazon S3**](#amazon-s3)
* [**Alibaba Cloud Object Storage Service (OSS)**](#alibaba-cloud-object-storage-service-oss)
* [**BytePlus Torch Object Storage (TOS)**](#byteplus-tos)
* [**Outro storage compatível com S3**](#other-s3-compatible-storage)

Se você quiser usar um tipo diferente de storage, entre em contato com seu gerente de conta para discutir o cronograma de entrega do recurso.

O caminho de upload fica assim: `YOUR_BUCKET_NAME/job_ID.json`. Você encontrará o ID do job na resposta que receber de nós após enviar um job.

#### Entrada

<table><thead><tr><th>Parâmetro</th><th width="187.33333333333331">Descrição</th><th>Valores válidos</th></tr></thead><tbody><tr><td><code>storage_type</code></td><td>Seu tipo de storage em nuvem.</td><td><p><code>gcs</code> (Google Cloud Storage);</p><p><code>s3</code> (AWS S3); <code>tos</code> (BytePlus TOS); </p><p><code>s3_compatible</code> (qualquer storage compatível com S3).</p></td></tr><tr><td><code>storage_url</code></td><td>Nome do bucket / URL do seu storage em nuvem.</td><td><ul><li>Qualquer <code>s3</code> , <code>gcs</code> , ou <code>tos</code> nome do bucket;</li><li>Qualquer <code>s3-compatible</code> URL do storage.</li></ul></td></tr></tbody></table>

## **Google Cloud Storage**

O payload abaixo faz o Web Scraper API raspar `https://example.com` e colocar o resultado em um bucket do Google Cloud Storage.

```json
{
    "source": "universal",
    "query": "https://example.com",
    "storage_type": "gcs",
    "storage_url": "bucket_name/path"
}
```

Para que seus resultados de job sejam enviados para seu bucket do Google Cloud Storage, configure permissões especiais para nosso serviço conforme mostrado abaixo:

{% stepper %}
{% step %}
**Crie uma função personalizada**

<div align="left"><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FpMD51jtIU5SRROKn44uU%2Fgcs-1.png?alt=media&#x26;token=11a7b4bd-6065-4cd9-a54b-f78ba0950207" alt=""></div>
{% endstep %}

{% step %}
**Adicione `storage.objects.create` permissão**

<div align="left"><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FAGQ77gWpG52CENqdPFH6%2Fgcs-2.png?alt=media&#x26;token=dd9c9cdb-e314-4d7f-b44c-d24ade92ba03" alt=""></div>
{% endstep %}

{% step %}
**Atribua-a à Oxylabs**

No **campo Novos membros,** digite o seguinte **email da conta de serviço da Oxylabs**:

```
oxyserps-storage@oxyserps-storage.iam.gserviceaccount.com
```

<div align="left"><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FSPPnxlcOgf9M7oNgFa6p%2Fgcs-3.png?alt=media&#x26;token=c37c98fb-6465-4137-a1d6-6d13883036df" alt=""></div>
{% endstep %}
{% endstepper %}

## **Amazon S3**

O payload abaixo faz o Web Scraper API raspar `https://example.com` e coloque o resultado em um bucket do Amazon S3.

```json
{
    "source": "universal",
    "query": "https://example.com",
    "storage_type": "s3",
    "storage_url": "bucket_name/path"
}
```

Para que seus resultados de job sejam enviados para seu bucket do Amazon S3, configure permissões de acesso para nosso serviço. Para isso, acesse [**https://s3.console.aws.amazon.com/**](https://s3.console.aws.amazon.com/) → **`S3`** → **`Storage`** → **`Nome do Bucket`**` ``(se você não tiver um, crie um novo)` → **`Permissões`** → **`Política do Bucket`**.

<div align="left"><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2Fys4s7QoGvRxiqUF1HLMJ%2Fs3_bucket_policy.png?alt=media&#x26;token=bb48a995-8623-4358-bee6-b5e358874591" alt=""></div>

Você pode encontrar a política do bucket anexada abaixo ou na área de exemplos de código.

{% file src="<https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FDk6z5zm41f4Z0YMlHjmp%2Fs3_bucket_policy.json?alt=media&token=831c33a5-86c3-4627-88d9-b6dbc9bd3002>" %}
política do bucket s3
{% endfile %}

Não esqueça de alterar o nome do bucket em `YOUR_BUCKET_NAME`. Esta política nos permite gravar em seu bucket, dar acesso a você aos arquivos enviados e conhecer a localização do bucket.

```json
{
    "Version": "2012-10-17",
    "Id": "Policy1577442634787",
    "Statement": [
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME"
        },
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}
```

## Alibaba Cloud Object Storage Service (OSS)

O payload abaixo faz o Web Scraper API raspar `https://example.com` e coloque o resultado em um bucket do Alibaba Cloud OSS.&#x20;

```json
{
    "source": "universal",
    "query": "https://example.com",
    "storage_type": "s3_compatible",
    "storage_url": "https://ACCESS_KEY_ID:ACCESS_KEY_SECRET@BUCKET_NAME.oss-REGION.aliyuncs.com/FOLDER_NAME"
}
```

### Formando a Storage URL <a href="#forming-the-storage-url" id="forming-the-storage-url"></a>

Formato da Storage URL:

```http
https://ACCESS_KEY_ID:ACCESS_KEY_SECRET@BUCKET_NAME.oss-REGION.aliyuncs.com/FOLDER_NAME
```

{% hint style="warning" %}
No momento, **não podemos enviar para o bucket raiz**. Forneça, por favor, um nome de pasta específico para seus uploads.
{% endhint %}

Aqui é onde você encontrará o `BUCKET_NAME` e `oss-REGION` do seu bucket:

<figure><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2F9u06pWqKmDdieoCxhA7z%2Fimage.png?alt=media&#x26;token=5e11fd2c-1ed6-4f64-b757-5b33e332f452" alt=""><figcaption></figcaption></figure>

### Criando o Access Key e Secret <a href="#creating-the-access-key-and-secret" id="creating-the-access-key-and-secret"></a>

Para usar a interface compatível com S3 no Alibaba OSS, você deve criar o `ACCESS_KEY_ID` e `ACCESS_KEY_SECRET` conforme mostrado abaixo. Para mais informações, veja [![](https://img.alicdn.com/tfs/TB1ugg7M9zqK1RjSZPxXXc4tVXa-32-32.png)Como usar os SDKs do Amazon S3 para acessar o OSS](https://www.alibabacloud.com/help/en/oss/developer-reference/use-amazon-s3-sdks-to-access-oss?spm=a2c63.p38356.0.i1).

{% stepper %}
{% step %}
Vá ao **Menu de Conta AccessKey**

<div align="left"><figure><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2F8PTfsezldRgtJxg1BIFP%2Fimage.png?alt=media&#x26;token=b6d5a855-af2e-45a8-9089-f271f460d675" alt="" width="422"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
Faça login no **console RAM**

Acesse o [console RAM](https://ram.console.aliyun.com/) usando uma **conta Alibaba Cloud** ou um **RAM user** que possua direitos administrativos.
{% endstep %}

{% step %}
Vá para **Identidades** → **Usuários** no painel de navegação à esquerda
{% endstep %}

{% step %}
Selecione **Criar Usuário** e use o **RAM User AccessKey:**

<div align="left"><figure><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FEttslEfZDeCk3xj2JM2v%2Fimage.png?alt=media&#x26;token=47c0a6ea-1c45-410d-a3ba-9eaf386d021f" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FFPmvTj6XvjPRWEgBal9v%2Fimage.png?alt=media&#x26;token=75012ded-20e2-4b0b-9cf6-9f97c0ecd695" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Conceda permissões ao usuário RAM**

O usuário RAM recém-criado não possui permissões. Você deve conceder **AliyunOSSFullAccess** permissões ao usuário RAM. Então, o usuário RAM poderá acessar os recursos necessários do Alibaba Cloud. Para mais informações, veja [Conceder permissões a usuários RAM](https://www.alibabacloud.com/help/en/ram/user-guide/grant-permissions-to-the-ram-user#task-187800).

<div align="left"><figure><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2F5QWg84VYUgbasaDa2JVH%2Fimage.png?alt=media&#x26;token=ea29159b-2b43-4dec-bf97-5d11ecd1e21e" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
Obtenha seu **AccessKey ID** e **AccessKey Secret**

Quando as permissões forem concedidas, volte à **seção Autenticação** e, na **seção Access Key,** selecione **Criar AccessKey**. Escolha criar uma Access Key para um **serviço de Terceiros**. Você então verá um `ACCESS_KEY_ID` e `ACCESS_KEY_SECRET`, que você poderá usar em suas requisições.
{% endstep %}
{% endstepper %}

### Limites de taxa do Alibaba OSS <a href="#alibaba-oss-ratelimits" id="alibaba-oss-ratelimits"></a>

Ao fazer uploads concorrentes para o Alibaba OSS, é possível atingir os limites de taxa da conta/bucket, e os uploads começarão a expirar com o seguinte erro:

<div align="left"><figure><img src="https://1214208351-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FkTaFNVnlGImMKuAMGXso%2Fimage.png?alt=media&#x26;token=85b4ca21-c9dc-4489-bc91-da7e9ffa22e7" alt="" width="563"><figcaption></figcaption></figure></div>

Nesse caso, entre em contato com o suporte do Alibaba OSS para aumentar seus limites de taxa do OSS.

## BytePlus TOS

Você pode enviar resultados raspados diretamente para um bucket do BytePlus Torch Object Storage (TOS). Observe que você deve ter seu **bucket configurado corretamente** e ter tanto sua **access key** e **secret key** disponíveis para acesso ao storage em nuvem.

O payload de exemplo abaixo faz o Web Scraper API raspar `https://example.com` e colocar o resultado em um bucket BytePlus TOS.

```json
{
    "source": "universal",
    "query": "https://example.com",
    "storage_type": "tos",
    "storage_url": "https://access_key:secret_key@endpoint/bucket_name/path"
}
```

### Parâmetros <a href="#docs-internal-guid-dbfc45c7-7fff-9754-b71a-bacb24e2ac54" id="docs-internal-guid-dbfc45c7-7fff-9754-b71a-bacb24e2ac54"></a>

<table><thead><tr><th width="166">Parâmetro</th><th width="165">Valor</th><th>Descrição</th></tr></thead><tbody><tr><td><code>storage_type</code></td><td>tos</td><td>Especifica o BytePlus TOS como provedor de storage.</td></tr><tr><td><code>storage_url</code></td><td>String (URL)</td><td>URL autenticada para seu bucket TOS (veja o formato abaixo).</td></tr></tbody></table>

### Formato da Storage URL

O `storage_url` deve ser construído usando suas credenciais TOS e detalhes do bucket.

```bash
https://access_key:secret_key@endpoint/bucket_name/path
```

| Componente    | Descrição                                                                        |
| ------------- | -------------------------------------------------------------------------------- |
| `access_key`  | Seu access key ID do BytePlus.                                                   |
| `secret_key`  | Sua secret access key do BytePlus.                                               |
| `endpoint`    | O endpoint específico da região (por exemplo, `tos-cn-hongkong.bytepluses.com`). |
| `bucket_name` | Nome do bucket de destino.                                                       |
| `path`        | *(Opcional)* Caminho de pasta específico do Bucket.                              |

{% hint style="warning" %}
Se sua Access Key ou Secret Key contiver caracteres especiais (como `/`, `+`, ou `=`), eles **devem ser codificados em URL** antes de construir a string.
{% endhint %}

### Nomeação do Arquivo de Saída

A Oxylabs gera automaticamente nomes de arquivos para os objetos enviados com base nos detalhes do job:

* **HTML/Conteúdo:** `{query_id}_{timestamp}.html`
* **Dados Parseados:** `{query_id}_results.json`

Os arquivos estarão acessíveis em seu bucket em: `tos://{bucket_name}/{path}/{filename}`

## Outro storage compatível com S3

Se você quiser que seus resultados sejam entregues em um local compatível com S3, você precisará incluir a `ACCESS_KEY:SECRET` string de autenticação no `storage_url` valor no payload:

```json
{
    "source": "universal",
    "url": "https://example.com",
    "storage_type": "s3_compatible",
    "storage_url": "https://ACCESS_KEY:SECRET@s3.oxylabs.io/my-videos"
}
```
