Compartir a través de


API de plataforma digital: formato de archivo AVRO de BSS

En este documento se explica cómo preparar los archivos de audiencia mediante el formato de archivo AVRO e incorporar los datos a la plataforma. AVRO es necesario para cargar audiencias que contengan identificadores extendidos y identificadores proporcionados por el publicador, y el formato de archivo BSS heredado no admite los tipos de identificador de usuario más recientes.

Procedimientos recomendados

  • Tamaño de archivo recomendado: 100-300 mb por archivo
  • Compresión de archivos recomendada: deflate
  • Método de entrega recomendado: Carga pasiva de segmentos (póngase en contacto con el Administrador de cuentas para obtener acceso)
  • Actualizar segmentos: en lugar de volver a enviar las pertenencias a la audiencia completa, solo puede cargar los cambios para los segmentos existentes. Esto reducirá el tamaño de los datos y la posibilidad de alcanzar los límites de carga diarios.

Información general sobre los pasos

  • Descripción del registro de segmentos de usuario
  • Instalación de la biblioteca de herramientas de AVRO
  • Descarga del archivo de esquema Xandr AVRO
  • Generación del archivo de audiencia de AVRO

Registro de segmentos de usuario

Un registro de usuario tiene dos elementos de nivel superior:

  • Id. de usuario (uid)
  • matriz de segmentos

Tipos de identificador de usuario

Solo se puede cargar un tipo de identificador por registro uid (por ejemplo, id. de usuario de Xandr, IFA, id. de dispositivo, eid).

En esta sección, busque los distintos tipos de identificador de usuario admitidos junto con sus descripciones y un ejemplo de biblioteca de Java y biblioteca de Python para cada uno.

AppNexus/Xandr User ID (ANID)

Id. de Xandr, también conocido como user_id_64.

Ejemplo de biblioteca de Java:

{"uid":
{"long":12345},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}

Ejemplo de biblioteca de Python:

{'uid': 64, 'segments': [seg1]}

Device ID

Utilidad similar a ifa (identificador de publicidad). Indica el tipo de dispositivo móvil que se va a incorporar. El device_id registro consta de dos campos:

  • domain (enum): los valores posibles son idfa, sha1udid, md5udid, openudid, aaid, windowsadid, rida, tifa, vida y lgudid.
  • id (cadena)

Ejemplo de biblioteca de Java:

{"uid":
{"device_id":
{"id":"958cba26-f338-43f3-8bb0-ed821582daae",
"domain":"idfa"}},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}

Ejemplo de biblioteca de Python:

{'uid': {'id': 'qweqeqweq', 'domain': 'idfa'}, 'segments': [seg1]}

Extended ID's(eid) or Publisher-provided ID's(PPID)

Id. extendido: indica el tipo de identificador universal o identificador de publicador que se va a incorporar. El registro eid consta de dos campos:

  • source (cadena): origen del identificador. Los valores permitidos son orígenes definidos por miembros con permiso.
  • id (cadena): id. del publicador o del sector.

En la actualidad, estos son los dos únicos disponibles para la incorporación de público.

Ejemplo de biblioteca de Java:

{"uid":
{"eid":
{"source":"liveramp.com",
"id":"123123123"}},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}

Ejemplo de biblioteca de Python:

{'uid': {'id': 'qweqeqweq', 'source': 'liveramp.com'}, 'segments': [seg1]}

External ID

Identificador externo: indica el identificador definido por el miembro que se va a incorporar. El external_id registro consta de dos campos:

  • member_id (int): identificador de miembro del miembro propietario de external_id.
  • id (cadena): valor correspondiente de member_id.

Ejemplo de biblioteca de Java:

{"uid":
{"external_id":
{"id":"clientid1",
"member_id":958}},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}

Ejemplo de biblioteca de Python:

{'uid': {'id': 'extid1', 'member_id': 914}, 'segments': [seg1]}

Identifier for Advertising (or IFA)

Identificador de publicidad: indica el tipo de dispositivo que se va a incorporar. El registro ifa consta de dos campos:

  • tipo (cadena): tipo de identificador.
  • id (cadena): id. de IFA, que representa el IFA en formato UUID.

Consulte Device Extension Object (Objeto de extensión de dispositivo) para ver los tipos ifa admitidos.

Ejemplo de biblioteca de Java:

{"uid":
{"ifa":
{"id":"99136473264876328",
"type":"atif"}},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}

Ejemplo de biblioteca de Python:

{'uid': {'id': 'qweqeqweq', 'type': 'atif'}, 'segments': [seg1]}

Objeto Segments

Puede cargar en varios segmentos dentro del mismo registro uid creando una matriz de objetos de segmento.

Archivo Tipo Descripción
code string Código de segmento Xandr.
expiration Entero Expiración del segmento en minutos. Establézcalo en:
- 0 expiración máxima (180 días).
- -1 para la eliminación de segmentos.
- -2 para la expiración predeterminada del miembro.
id Entero Id. de segmento de Xandr
member_id Entero Id. de miembro del segmento. Necesario cuando se especifica código
timestamp largo Segmentar el tiempo de activación en segundos desde la época. Especifica cuándo se convierte el segmento en "dinámico". Establezca en 0 para activar el segmento inmediatamente.
value Entero Valor de segmento

Instalación de la biblioteca de herramientas de AVRO

  • Biblioteca de Java
curl -o http://archive.apache.org/dist/avro/avro-1.10.1/java/avro-tools-1.10.1.jar
  • Biblioteca de Python
python3 -m pip install avro

Descarga del esquema de Xandr Avro

Puede descargar el esquema Xandr Avro desde aquí.

Generación del archivo de audiencia de AVRO

Consulte a continuación los ejemplos que usan las bibliotecas de Java y Python:

Ejemplo de Java

Create un archivo de audiencia

{"uid":{"long":12345},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
{"uid":{"external_id":{"id":"clientid1","member_id":958}},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
{"uid":{"ifa":{"id":"99136473264876328","type":"atif"}},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
{"uid":{"device_id":{"id":"958cba26-f338-43f3-8bb0-ed821582daae","domain":"idfa"}},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
{"uid":{"eid":{"source":"liveramp.com","id":"123123123"}},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}

Conversión del archivo de audiencia en AVRO

Ejecute el siguiente comando:

java -jar avro-tools-1.10.1.jar fromjson --codec deflate --schema-file xandr_schema.avsc sample.json > sample.avro  

Dónde

  • xandr_schema.avsc = el archivo de esquema Xandr Avro proporcionado;
  • sample.json = el archivo de audiencia;
  • and sample.avro = archivo AVRO de salida

Ejemplo de Python

Nota:

  • Nuestros ejemplos son para la biblioteca avro de Python y no deben confundirse con la biblioteca de Fast Avro.

  • La biblioteca de Avro de Python no usa nombres de tipo de unión uid. En su lugar, determina el tipo uid por coincidencia completa de nombres de campo.

Ejemplo: {'uid': {'id': 'qweqeqweq', 'domain': 'idfa'}, 'segments': […]}

  • La biblioteca de Fast Avro usa sugerencias para especificar el tipo exacto de uid similar a la biblioteca de Java.

Ejemplo: {'uid': ('external_id', {'id':'exitd1', 'member_id': 914}), 'segments': [{'expiration': 259200, 'id': 25815407}]}

  • DataFileWriter.append() acepta un tipo de diccionario de Python (dict), no un JSON.

Creación de un archivo de audiencia de AVRO

Script de ejemplo mediante la biblioteca avro de Python:

import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter
  
# the supplied xandr schema
schema = avro.schema.parse(open("xandr_schema.avsc", "rb").read())
  
# output avro file 
writer = DataFileWriter(open("sample.avro", "wb"), DatumWriter(), schema, codec=’deflate’)
   
# segments
seg1 = {'id': 1000, 'code': '', 'member_id': 0, 'expiration': 0, 'timestamp': 0, 'value': 0}
   
# anid
writer.append({'uid': 64, 'segments': [seg1]})
   
# external id
writer.append({'uid': {'id': 'exitd1', 'member_id': 914}, 'segments': [seg1]})
   
# idfa
writer.append({'uid': {'id': 'qweqeqweq', 'domain': 'idfa'}, 'segments': [seg1]})
   
# eid (or ppid)
writer.append({'uid': {'id': 'qweqeqweq', 'source': 'liveramp.com'}, 'segments': [seg1]})
writer.append({'uid': {'id': 'qweqeqweq', 'source': 'netid.de'}, 'segments': [seg1]})
   
writer.close()