# Almacenamiento en la nube

Los resultados de trabajos de Scraper API se almacenan en nuestro almacenamiento. Puede obtener sus resultados de nuestro almacenamiento mediante `GET`iendo el `/results` endpoint.

Como alternativa, podemos subir los resultados a su almacenamiento en la nube. De este modo, no tendrá que hacer solicitudes adicionales para obtener resultados: todo va directamente a su bucket de almacenamiento.

{% hint style="info" %}
La integración con almacenamiento en la nube funciona solo con [**Push-Pull**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/integration-methods/push-pull) método de integración.
{% endhint %}

Actualmente, soportamos estos servicios de almacenamiento en la nube:

* [**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)
* [**Otro almacenamiento compatible con S3**](#other-s3-compatible-storage)

Si desea usar un tipo diferente de almacenamiento, póngase en contacto con su gerente de cuenta para discutir el cronograma de entrega de la función.

La ruta de carga se ve así: `YOUR_BUCKET_NAME/job_ID.json`. Encontrará el ID del trabajo en la respuesta que recibe de nosotros después de enviar un trabajo.

#### Entrada

<table><thead><tr><th>Parámetro</th><th width="187.33333333333331">Descripción</th><th>Valores válidos</th></tr></thead><tbody><tr><td><code>storage_type</code></td><td>Su tipo de almacenamiento en la nube.</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> (cualquier almacenamiento compatible con S3).</p></td></tr><tr><td><code>storage_url</code></td><td>El nombre / URL del bucket de su almacenamiento en la nube.</td><td><ul><li>Cualquiera <code>s3</code> , <code>gcs</code> , o <code>tos</code> nombre del bucket;</li><li>Cualquiera <code>s3-compatible</code> URL de almacenamiento.</li></ul></td></tr></tbody></table>

## **Google Cloud Storage**

La carga útil a continuación hace que Web Scraper API raspee `https://example.com` y coloque el resultado en un bucket de Google Cloud Storage.

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

Para que los resultados de su trabajo se carguen en su bucket de Google Cloud Storage, configure permisos especiales para nuestro servicio como se muestra a continuación:

{% stepper %}
{% step %}
**Crear un rol personalizado**

<div align="left"><img src="https://338917265-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 %}
**Agregar `storage.objects.create` permiso**

<div align="left"><img src="https://338917265-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 %}
**Asígnelo a Oxylabs**

En el **Nuevos miembros** campo, ingrese lo siguiente **Correo electrónico de la cuenta de servicio de Oxylabs**:

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

<div align="left"><img src="https://338917265-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**

La carga útil a continuación hace que Web Scraper API raspee `https://example.com` y coloque el resultado en un bucket de Amazon S3.

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

Para que los resultados de su trabajo se carguen en su bucket de Amazon S3, configure permisos de acceso para nuestro servicio. Para ello, vaya a [**https://s3.console.aws.amazon.com/**](https://s3.console.aws.amazon.com/) → **`S3`** → **`Almacenamiento`** → **`Nombre del bucket`**` ``(si no tiene uno, cree uno nuevo)` → **`Permisos`** → **`Política de bucket`**.

<div align="left"><img src="https://338917265-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>

Puede encontrar la política del bucket adjunta abajo o en el área de ejemplos de código.

{% file src="<https://338917265-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 de bucket s3
{% endfile %}

No olvide cambiar el nombre del bucket bajo `YOUR_BUCKET_NAME`. Esta política nos permite escribir en su bucket, darle acceso a usted a los archivos subidos y conocer la ubicación del 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)

La carga útil a continuación hace que Web Scraper API raspee `https://example.com` y coloque el resultado en un bucket de 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"
}
```

### Formación de la URL de almacenamiento <a href="#forming-the-storage-url" id="forming-the-storage-url"></a>

Formato de URL de almacenamiento:

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

{% hint style="warning" %}
Actualmente, **no podemos subir al bucket raíz**. Proporcione un nombre de carpeta específico para sus cargas.
{% endhint %}

Aquí es donde encontrará el `BUCKET_NAME` y `oss-REGION` de su bucket:

<figure><img src="https://338917265-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>

### Creación del Access Key y Secret <a href="#creating-the-access-key-and-secret" id="creating-the-access-key-and-secret"></a>

Para usar la interfaz compatible con S3 con Alibaba OSS, debe crear el `ACCESS_KEY_ID` y `ACCESS_KEY_SECRET` como se muestra a continuación. Para más información, vea [![](https://img.alicdn.com/tfs/TB1ugg7M9zqK1RjSZPxXXc4tVXa-32-32.png)Cómo usar los SDK de Amazon S3 para acceder a OSS](https://www.alibabacloud.com/help/en/oss/developer-reference/use-amazon-s3-sdks-to-access-oss?spm=a2c63.p38356.0.i1).

{% stepper %}
{% step %}
Vaya al **Menú de cuenta AccessKey**

<div align="left"><figure><img src="https://338917265-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 %}
Inicie sesión en la **RAM console**

Acceda al [RAM console](https://ram.console.aliyun.com/) usando una **cuenta de Alibaba Cloud** o un **RAM user** que tenga derechos administrativos.
{% endstep %}

{% step %}
Vaya a **Identidades** → **Usuarios** en el panel de navegación lateral izquierdo
{% endstep %}

{% step %}
Seleccione **Crear usuario** y use el **RAM User AccessKey:**

<div align="left"><figure><img src="https://338917265-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://338917265-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 %}
**Conceder permisos al usuario RAM**

El usuario RAM recién creado no tiene permisos. Debe otorgar **AliyunOSSFullAccess** permisos al usuario RAM. Luego, el usuario RAM podrá acceder a los recursos requeridos de Alibaba Cloud. Para más información, vea [Conceder permisos a usuarios 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://338917265-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 %}
Obtenga su **AccessKey ID** y **AccessKey Secret**

Cuando se otorguen los permisos, vuelva a la **Autenticación** sección y, en la **Clave de acceso** sección, seleccione **Crear AccessKey**. Elija crear una Access Key para un **servicio de terceros**. Entonces verá un `ACCESS_KEY_ID` y `ACCESS_KEY_SECRET`, que podrá usar en sus solicitudes.
{% endstep %}
{% endstepper %}

### Límites de tasa de Alibaba OSS <a href="#alibaba-oss-ratelimits" id="alibaba-oss-ratelimits"></a>

Al hacer cargas concurrentes a Alibaba OSS, es posible alcanzar los límites de tasa de cuenta/bucket, y las cargas comenzarán a agotar tiempo con el siguiente error:

<div align="left"><figure><img src="https://338917265-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>

En ese caso, póngase en contacto con el soporte de Alibaba OSS para aumentar sus límites de tasa de OSS.

## BytePlus TOS

Puede subir los resultados raspados directamente a un bucket de BytePlus Torch Object Storage (TOS). Tenga en cuenta que debe tener su **bucked set up correctly** y tener tanto su **access key** y **secret key** disponibles para el acceso al almacenamiento en la nube.

La carga útil de ejemplo a continuación hace que Web Scraper API raspee `https://example.com` y coloque el resultado en un bucket de 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>Descripción</th></tr></thead><tbody><tr><td><code>storage_type</code></td><td>tos</td><td>Especifica BytePlus TOS como el proveedor de almacenamiento.</td></tr><tr><td><code>storage_url</code></td><td>String (URL)</td><td>URL autenticada a su bucket TOS (ver formato más abajo).</td></tr></tbody></table>

### Formato de URL de almacenamiento

El `storage_url` debe construirse usando sus credenciales TOS y los detalles del bucket.

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

| Componente    | Descripción                                                                          |
| ------------- | ------------------------------------------------------------------------------------ |
| `access_key`  | Su ID de access key de BytePlus.                                                     |
| `secret_key`  | Su secret access key de BytePlus.                                                    |
| `endpoint`    | El endpoint específico de la región (por ejemplo, `tos-cn-hongkong.bytepluses.com`). |
| `bucket_name` | Nombre del bucket de destino.                                                        |
| `path`        | *(Opcional)* Ruta de carpeta específica del bucket.                                  |

{% hint style="warning" %}
Si su Access Key o Secret Key contiene caracteres especiales (tales como `/`, `+`, o `=`), éstos **deben codificarse en URL** antes de construir la cadena.
{% endhint %}

### Nomenclatura de archivos de salida

Oxylabs genera automáticamente nombres de archivo para los objetos subidos basados en los detalles del trabajo:

* **HTML/Contenido:** `{query_id}_{timestamp}.html`
* **Datos analizados:** `{query_id}_results.json`

Los archivos serán accesibles en su bucket en: `tos://{bucket_name}/{path}/{filename}`

## Otro almacenamiento compatible con S3

Si desea que sus resultados se entreguen a una ubicación de almacenamiento compatible con S3, deberá incluir la `ACCESS_KEY:SECRET` cadena de autenticación en el `storage_url` valor en la carga útil:

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