

# Conexión a Anuncios de Facebook
<a name="connecting-to-data-facebook-ads"></a>

Anuncios de Facebook es una potente plataforma de publicidad digital que utilizan empresas de todos los tamaños para llegar a su público objetivo y lograr diversos objetivos de marketing. La plataforma permite a los anunciantes crear anuncios personalizados que se pueden mostrar en toda la familia de aplicaciones y servicios de Facebook, incluidos Facebook y Messenger. Gracias a sus capacidades de segmentación avanzadas, Anuncios de Facebook permite que las empresas lleguen a grupos demográficos, intereses, comportamientos y ubicaciones específicos.

**Topics**
+ [Compatibilidad de AWS Glue con Anuncios de Facebook](facebook-ads-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](facebook-ads-configuring-iam-permissions.md)
+ [Configuración de Anuncios de Facebook](facebook-ads-configuring.md)
+ [Configuración de las conexiones de Anuncios de Facebook](facebook-ads-configuring-connections.md)
+ [Lectura desde entidades de Anuncios de Facebook](facebook-ads-reading-from-entities.md)
+ [Opciones de conexión de Anuncios de Facebook](facebook-ads-connection-options.md)
+ [Limitaciones y notas del conector de Anuncios de Facebook](facebook-ads-connector-limitations.md)

# Compatibilidad de AWS Glue con Anuncios de Facebook
<a name="facebook-ads-support"></a>

AWS Glue es compatible con Anuncios de Facebook de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede usar los trabajos de ETL de AWS Glue para consultar datos de Anuncios de Facebook.

**¿Es compatible como destino?**  
No.

**Versiones de la API de Anuncios de Facebook compatibles**  
Las siguientes versiones de la API de Anuncios de Facebook son compatibles:
+ v17.0
+ v18.0
+ v19.0
+ v20.0

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="facebook-ads-configuring-iam-permissions"></a>

En el siguiente ejemplo de política se describen los permisos de AWS IAM necesarios para crear y utilizar conexiones. Si va a crear un nuevo rol, cree una política que contenga lo siguiente:

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

****  

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

------

Si no desea utilizar el método anterior, puede utilizar las siguientes políticas de IAM administradas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): da acceso a recursos que precisan diversos procesos de AWS Glue para ejecutarse en su nombre. Entre estos recursos se incluyen AWS Glue, Amazon S3, IAM, CloudWatch Logs y Amazon EC2. Si aplica la convención de nomenclatura en los recursos especificados en esta política, los procesos de AWS Glue tienen los permisos necesarios. Normalmente, esta política se asocia a los roles que se especifican a la hora de definir rastreadores, trabajos y puntos de conexión de desarrollo.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): otorga acceso total a los recursos de AWS Glue cuando una identidad a la que está asociada la política utiliza la Consola de administración de AWS. Si sigue la convención de nomenclatura para los recursos especificados en esta política, los usuarios dispondrán de todas las funciones de la consola. Esta política se suele adjuntar a los usuarios de la consola AWS Glue.

# Configuración de Anuncios de Facebook
<a name="facebook-ads-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos hacia o desde Anuncios de Facebook, debe cumplir estos requisitos:

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

Los requisitos mínimos son los siguientes:
+ Se accede a las cuentas estándar de Facebook directamente a través de Facebook.
+ Se necesita la autenticación del usuario para generar el token de acceso.
+ El conector del SDK de Anuncios de Facebook implementará el flujo *OAuth del token de acceso de usuario*.
+ Usamos OAuth 2.0 para autenticar nuestras solicitudes de API en Anuncios de Facebook. Esta autenticación basada en la web pertenece a la arquitectura de autenticación multifactor (MFA), que es un superconjunto de 2FA.
+ El usuario debe conceder permisos para acceder a los puntos de conexión. Para acceder a los datos del usuario, la autorización del punto de conexión se administra mediante [permisos](https://developers.facebook.com/docs/permissions) y [características](https://developers.facebook.com/docs/features-reference).

## Obtención de las credenciales de OAuth 2.0
<a name="facebook-ads-configuring-creating-facebook-ads-oauth2-credentials"></a>

Para obtener las credenciales de la API para poder hacer llamadas autenticadas a la instancia, consulte la [API de REST](https://developers.facebook-ads.com/rest-api/) en la guía para desarrolladores de Anuncios de Facebook.

# Configuración de las conexiones de Anuncios de Facebook
<a name="facebook-ads-configuring-connections"></a>

Anuncios de Facebook admite el tipo de concesión AUTHORIZATION\$1CODE para OAuth 2.
+ Este tipo de concesión se considera un OAuth de tres vías, ya que se basa en redirigir a los usuarios al servidor de autorización externo para autenticar al usuario. Se utiliza para crear conexiones a través de la consola de AWS Glue.
+ Los usuarios aún pueden optar por crear su propia aplicación conectada en Anuncios de Facebook y proporcionar su propio ID y secreto de cliente al crear conexiones a través de la consola de AWS Glue. En este caso, se les continuará redirigiendo a Anuncios de Facebook para iniciar sesión y autorizar a AWS Glue para que acceda a sus recursos.
+ Este tipo de concesión da como resultado un token acceso. Un token de usuario del sistema que caduca es válido durante 60 días a partir de la fecha de generación o actualización. Para crear continuidad, el desarrollador debe actualizar el token de acceso en un plazo de 60 días. De lo contrario, se pierde el token de acceso y es necesario que el desarrollador obtenga uno nuevo para recuperar el acceso a la API. Consulte [Actualización del identificador de acceso](https://developers.facebook.com/docs/marketing-api/system-users/install-apps-and-generate-tokens/).
+ Para ver la documentación pública de Anuncios de Facebook sobre cómo crear una aplicación conectada para el flujo de OAuth con código de autorización, consulte [Cómo usar OAuth 2.0 para acceder a las API de Google](https://developers.google.com/identity/protocols/oauth2) en la guía de Google para desarrolladores.

Configuración de una conexión con Anuncios de Facebook:

1. En AWS Glue Glue Studio, cree una conexión en **Conexiones de datos** según los pasos que se indican a continuación:

   1. Al seleccionar un **Tipo de conexión**, seleccione Anuncios de Facebook.

   1. Proporcione la `INSTANCE_URL` de la instancia de Anuncios de Facebook a la que desea conectarse.

   1. Seleccione el rol de AWS IAM que AWS Glue pueda asumir y que tenga permisos para las siguientes acciones:

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

****  

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

------

   1. Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens.

   1. Seleccione las opciones de red si quiere usar su red.

1. Conceda el rol de IAM asociado a su permiso de trabajo de AWS Glue para leer `secretName`.

# Lectura desde entidades de Anuncios de Facebook
<a name="facebook-ads-reading-from-entities"></a>

**Requisito previo**

Un objeto de Anuncios de Facebook desde el cual le gustaría leer. Necesitará el nombre del objeto. En las siguientes tablas se muestran las entidades admitidas.

**Entidades compatibles como origen:**


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| Campaña | Sí | Sí | No | Sí | Sí | 
| Conjunto de anuncios | Sí | Sí | No | Sí | Sí | 
| Anuncios | Sí | Sí | No | Sí | Sí | 
| Creatividad de anuncios | No | Sí | No | Sí | No | 
| Información: cuenta | No | Sí | No | Sí | No | 
| Adaccounts | Sí | Sí | No | Sí | No | 
| Información: anuncio | Sí | Sí | No | Sí | Sí | 
| Información: conjunto de anuncios | Sí | Sí | No | Sí | Sí | 
| Información: campaña | Sí | Sí | No | Sí | Sí | 

**Ejemplo:**

```
FacebookAds_read = glueContext.create_dynamic_frame.from_options(
    connection_type="FacebookAds",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0"
    }
```

## Detalles de la entidad y el campo de Anuncios de Facebook
<a name="facebook-ads-reading-entity-and-field-details"></a>

Para obtener más información acerca de las entidades y los detalles de los campos, consulte:
+ [Cuenta de anuncios](https://developers.facebook.com/docs/marketing-api/reference/ad-account)
+ [Campaña](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group)
+ [Conjunto de anuncios](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign)
+ [Anuncio](https://developers.facebook.com/docs/marketing-api/reference/adgroup)
+ [Creatividad de anuncios](https://developers.facebook.com/docs/marketing-api/reference/ad-creative)
+ [Información: cuenta de anuncios](https://developers.facebook.com/docs/marketing-api/reference/ad-account/insights)
+ [Información: anuncios](https://developers.facebook.com/docs/marketing-api/reference/adgroup/insights/)
+ [Información: conjunto de anuncios](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign/insights)
+ [Información: campañas](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group/insights)

Para obtener más información, consulte [API de marketing](https://developers.facebook.com/docs/marketing-api/reference/v21.0).

**nota**  
Los tipos de datos de estructura y lista se convierten en tipos de datos de cadena en respuesta a los conectores.

## Consultas de particionamiento
<a name="facebook-ads-reading-partitioning-queries"></a>

Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere utilizar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.
+ `PARTITION_FIELD`: el nombre del campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`: un valor de límite inferior **inclusivo** del campo de partición elegido.

  En el campo DateTime, aceptamos el formato de marca de tiempo de Spark que se utiliza en las consultas de Spark SQL.

  Ejemplo de valor válido:

  ```
  "2022-01-01"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
FacebookADs_read = glueContext.create_dynamic_frame.from_options(
    connection_type="FacebookAds",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0",
        "PARTITION_FIELD": "created_time"
        "LOWER_BOUND": "2022-01-01"
        "UPPER_BOUND": "2024-01-02"
        "NUM_PARTITIONS": "10"
    }
```

# Opciones de conexión de Anuncios de Facebook
<a name="facebook-ads-connection-options"></a>

Las siguientes son opciones de conexión para Anuncios de Facebook:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre de su objeto en Anuncios de Facebook.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. API de REST de Anuncios de Facebook que desea utilizar. Por ejemplo: v1.
+ `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Columnas que desee seleccionar para el objeto.
+ `FILTER_PREDICATE`(cadena): predeterminado: vacío. Se usa para leer. Debe estar en el formato de Spark SQL.
+ `QUERY`(cadena): predeterminado: vacío. Se usa para leer. Consulta completa de Spark SQL.
+ `PARTITION_FIELD`(cadena): se usa para lectura. Campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`(cadena): se usa para lectura. Un valor de límite inferior inclusivo del campo de partición elegido.
+ `UPPER_BOUND`(cadena): se usa para lectura. Un valor límite superior exclusivo del campo de partición elegido. 
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer.
+ `TRANSFER_MODE`(cadena): Predeterminado: SYNC. Se utiliza para la lectura asíncrona.

# Limitaciones y notas del conector de Anuncios de Facebook
<a name="facebook-ads-connector-limitations"></a>

Las siguientes son limitaciones o notas para el conector de Anuncios de Facebook:
+ Como Anuncios de Facebook admite metadatos dinámicos, se pueden consultar todos los campos. Todos los campos permiten filtrar y los registros se recopilan si los datos están disponibles. De lo contrario, Facebook devuelve una respuesta a una solicitud incorrecta (400) con el mensaje de error adecuado.
+ El recuento de llamadas de una aplicación es el número de llamadas que un usuario puede hacer durante un periodo continuo de una hora, multiplicado por 200 por el número de usuarios. Para obtener información sobre los límites de frecuencia, consulte [Límites de frecuencia](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/) y [Límites de frecuencia de casos de uso comercial](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/#buc-rate-limits).