I file di dati strutturati (SDF) sono valori separati da virgole (CSV) con formati speciali utilizzati per recuperare e aggiornare i dati relativi a Display & Risorse Video 360 in collettivo. Tramite il display e l'API Video 360, puoi generare e scaricare file SDF personalizzati, che ti consente di recuperare dati organizzati e filtrati sulle tue immagini Video a 360° Google Cloud.
Questa guida descrive come creare un'operazione di download di SDF, monitorare operativa e scaricare gli SDF risultanti.
Per informazioni sul formato e sul controllo delle versioni dei file SDF, consulta la documentazione di riferimento per i file SDF.
Creare un'attività
Gli SDF vengono generati da un'operazione asincrona, denominata sdfdownloadtask
.
Quando crei questa attività, definisci i parametri relativi agli SDF desiderati.
A questo scopo, viene usato il metodo sdfdownloadtasks.create
. La
le seguenti sottosezioni descrivono i parametri che puoi impostare.
Specifica una versione
Il formato dei file di dati strutturati viene aggiornato regolarmente indipendentemente dal Display e API Video 360, con nuove versioni rilasciate e vecchie ritirate regolarmente. Per questo motivo, consigliamo sempre agli utenti di utilizzare la versione più recente di SDF.
Devi impostare la versione SDF dell'SDF desiderato utilizzando
version
nel corpo della richiesta. Se non impostato o impostato
a SDF_VERSION_UNSPECIFIED
, l'attività utilizzerà la versione predefinita dell'SDF
risorsa dell'inserzionista o del partner utilizzata come contesto dei contenuti dei file SDF.
Definisci il contesto
Puoi generare un SDF contenente dati su qualsiasi risorsa a tua disposizione, ma
un singolo SDF può restituire contenuti esclusivamente nel contesto di un singolo
partner o inserzionista. Questo contesto viene definito nel corpo della richiesta da
partnerId
o
advertiserId
. Esattamente uno di questi due
è necessario impostare i campi.
Nel file SDF risultante saranno incluse solo le risorse all'interno di un determinato contesto. Se tenti di filtrare in base a una risorsa che non è di proprietà del partner specificato o l'inserzionista, né questo né i relativi contenuti saranno inclusi nel che consentono di analizzare i dati e visualizzare i risultati. Se filtri solo in base a queste risorse non incluse, i file risultanti sarà vuoto. Tentativo di filtrare in base alle risorse esterne al contesto specificato non restituirà un errore, quindi assicurati di verificare che il tuo contesto sia risposta esatta.
Scegli il filtro giusto
Oltre al contesto impostato sopra, puoi filtrare ulteriormente l'ambito generati file di dati strutturati specificando i tipi di file che vuoi e le risorse o la famiglia di risorse specifiche che vuoi includere.
Sono disponibili tre filtri per sdfdownloadtask
, ognuno dei quali si adatta
un particolare tipo di specifica. Puoi assegnarne solo uno per singola
sdfdownloadtask
.
ParentEntityFilter
ParentEntityFilter
è il più ampio
filtri corretti.
Utilizzando il campo fileType
, puoi elencare tutte le query
i tipi di file che vuoi generare con l'attività. Questo è
e, se lasciato vuoto o impostato su FILE_TYPE_UNSPECIFIED
, il valore
sdfdownloadtask
verrà completato per errore.
Utilizzando i filterType
e
filterIds
, puoi perfezionare ulteriormente i risultati.
filterType
specifica il tipo di
risorse in base ai quali filtrare e filterIds
identifica queste risorse tramite il loro ID univoco. Gli SDF risultanti includeranno
le risorse identificate da fileType
che sono
le risorse o gli elementi secondari delle risorse identificate
filterType
e filterIds
.
IdFilter
IdFilter
filtra la richiesta per includere solo le risorse
identificati.
IdFilter
dispone di un campo per ogni tipo di SDF, escluso l'inventario
Fonte. Ciascuno di questi campi è un elenco di ID univoci che identificano
risorse specifiche che vuoi includere nel tuo SDF generato. Gli ID forniti
devono rientrare nel contesto, ma non è necessario che siano direttamente correlate. Tu
non hanno bisogno di una determinata campagna per richiedere un elemento pubblicitario,
contiene e viceversa. Gli unici tipi di file generati saranno questi
corrispondenti alle risorse identificate nella IdFilter
.
InventorySourceFilter
InventorySourceFilter
consente di applicare solo il filtro
e il download di SDF contenenti le risorse origine dell'inventario. È l'unico
che puoi utilizzare per ottenere informazioni sulle risorse di origine dell'inventario.
InventorySourceFilter
ha un singolare
Campo inventorySourceIds
in cui identifichi l'ID univoco
Gli ID delle risorse dell'origine dell'inventario da includere nel file SDF. Se
l'elenco fornito a inventorySourceIds
è vuoto,
le origini dell'inventario nel contesto impostato verranno incluse nell'SDF generato.
Fai una richiesta
Una volta identificati i parametri dell'SDF desiderato, puoi creare la richiesta
e crea sdfdownloadtask
.
Ecco un esempio di come creare un sdfdownloadtask
utilizzando un
ParentEntityFilter
:
Java
// Create the filter structure ParentEntityFilter parentEntityFilter = new ParentEntityFilter(); parentEntityFilter.setFileType(sdf-file-type-list); parentEntityFilter.setFilterType(sdfFilterType); parentEntityFilter.setFilterIds(filter-id-list); // Configure the sdfdownloadtasks.create request Sdfdownloadtasks.Create request = service .sdfdownloadtasks() .create( new CreateSdfDownloadTaskRequest() .setVersion(sdfVersion) .setAdvertiserId(advertiserId) .setParentEntityFilter(parentEntityFilter) ); // Create the sdfdownloadtask Operation operationResponse = request.execute(); System.out.printf("Operation %s was created.\n", operationResponse.getName());
Python
# Configure the sdfdownloadtasks.create request createSdfDownloadTaskRequest = { 'version': sdf-version, 'advertiserId': advertiser-id, 'parentEntityFilter': { 'fileType': sdf-file-type-list, 'filterType': sdf-filter-type, 'filterIds': filter-id-list } } # Create the sdfdownloadtask operation = service.sdfdownloadtasks().create( body=createSdfDownloadTaskRequest).execute(); print("Operation %s was created." % operation["name"])
PHP
// Create the sdfdownloadtasks.create request structure $createSdfDownloadTaskRequest = new Google_Service_DisplayVideo_CreateSdfDownloadTaskRequest(); $createSdfDownloadTaskRequest->setAdvertiserId(advertiser-id); $createSdfDownloadTaskRequest->setVersion(sdf-version); // Create and set the parent entity filter $parentEntityFilter = new Google_Service_DisplayVideo_ParentEntityFilter(); $parentEntityFilter->setFileType(sdf-file-type-list); $parentEntityFilter->setFilterType(sdf-filter-type); if (!empty(filter-id-list)) { $parentEntityFilter->setFilterIds(filter-id-list); } $createSdfDownloadTaskRequest->setParentEntityFilter($parentEntityFilter); // Call the API, creating the SDF Download Task. $operation = $this->service->sdfdownloadtasks->create( $createSdfDownloadTaskRequest ); printf('Operation %s was created.\n', $operation->getName());
Controlla la richiesta e ottieni il percorso di download
Quando crei un sdfdownloadtask
, viene generato un oggetto operation
restituito. Questa operazione rappresenta lo stato del tuo SDF asincrono
al momento della creazione. Puoi controllare l'operazione per
verifica se l'aggiornamento è stato completato ed è pronto per il download o se ha generato un errore utilizzando
il metodo sdfdownloadtasks.operations.get
.
Al termine, l'operazione restituita avrà un valore diverso da null
done
. L'operazione completata includerà
A response
o error
. Se presente, il campo error
avrà un
Oggetto Status
contenente un codice di errore e
message, che fornisce i dettagli dell'errore che
si è verificato un errore. Se è presente il campo response
,
avrà un oggetto con un valore resourceName
che identifica l'oggetto
file per il download.
Ecco un esempio di come verificare la tua richiesta utilizzando il backoff esponenziale:
Java
String operationName = operationResponse.getName(); // Configure the Operations.get request Sdfdownloadtasks.Operations.Get operationRequest = service .sdfdownloadtasks() .operations() .get(operationName); // Configure exponential backoff for checking the status of our operation ExponentialBackOff backOff = new ExponentialBackOff.Builder() .setInitialIntervalMillis(5000) // setting initial interval to five seconds .setMaxIntervalMillis(300000) // setting max interval to five minutes .setMaxElapsedTimeMillis(18000000) // setting max elapsed time to five hours .build(); while (operationResponse.getDone() == null) { long backoffMillis = backOff.nextBackOffMillis(); if (backoffMillis == ExponentialBackOff.STOP) { System.out.printf("The operation has taken more than five hours to complete.\n"); return; } Thread.sleep(backoffMillis); // Get current status of operation operationResponse = operationRequest.execute(); } // Check if the operation finished with an error and return if (operationResponse.getError() != null) { System.out.printf("The operation finished in error with code %s: %s\n", operationResponse.getError().getCode(), operationResponse.getError() .getMessage()); return; } System.out.printf( "The operation completed successfully. Resource %s was created.\n", operationResponse.getResponse().get("resourceName").toString());
Python
# The following values control retry behavior while # the report is processing. # Minimum amount of time between polling requests. Defaults to 5 seconds. min_retry_interval = 5 # Maximum amount of time between polling requests. Defaults to 5 minutes. max_retry_interval = 5 * 60 # Maximum amount of time to spend polling. Defaults to 5 hours. max_retry_elapsed_time = 5 * 60 * 60 # Configure the Operations.get request get_request = service.sdfdownloadtasks().operations().get( name=operation["name"] ) sleep = 0 start_time = time.time() while True: # Get current status of operation operation = get_request.execute() if "done" in operation: if "error" in operation: print("The operation finished in error with code %s: %s" % ( operation["error"]["code"], operation["error"]["message"])) else: print("The operation completed successfully. Resource %s was created." % operation["response"]["resourceName"]) break elif time.time() - start_time > max_retry_elapsed_time: print("Generation deadline exceeded.") sleep = next_sleep_interval(sleep) print("Operation still running, sleeping for %d seconds." % sleep) time.sleep(sleep) def next_sleep_interval(previous_sleep_interval): """Calculates the next sleep interval based on the previous.""" min_interval = previous_sleep_interval or min_retry_interval max_interval = previous_sleep_interval * 3 or min_retry_interval return min(max_retry_interval, random.randint(min_interval, max_interval))
PHP
// The following values control retry behavior // while the task is processing. // Minimum amount of time between polling requests. Defaults to 5 seconds. $minRetryInterval = 5; // Maximum amount of time between polling requests. Defaults to 5 minutes. $maxRetryInterval = 300; // Maximum amount of time to spend polling. Defaults to 5 hours. $maxRetryElapsedTime = 18000; $operationName = $operation->getName(); $sleepInterval = 0; $startTime = time(); while (!$operation->getDone()) { if ($sleepInterval != 0) { printf( 'The operation is still running, sleeping for %d seconds\n', $sleepInterval ); } // Sleep before retrieving the SDF Download Task again. sleep($sleepInterval); // Call the API, retrieving the SDF Download Task. $operation = $this->service->sdfdownloadtasks_operations->get( $operation->getName() ); // If the operation has exceeded the set deadline, throw an exception. if (time() - $startTime > $maxRetryElapsedTime) { printf('SDF download task processing deadline exceeded\n'); throw new Exception( 'Long-running operation processing deadline exceeded' ); } // Generate the next sleep interval using exponential backoff logic. $sleepInterval = min( $maxRetryInterval, rand( max($minRetryInterval, $previousSleepInterval), max($minRetryInterval, $previousSleepInterval * 3) ) ); } // If the operation finished with an error, throw an exception. if($operation->getError() !== null) { $error = $operation->getError(); printf( 'The operation finished in error with code %s: %s\n', $error->getCode(), $error->getMessage() ); throw new Exception($error->getMessage()); } // Print successfully generated resource. $response = $operation->getResponse(); printf( 'The operation completed successfully. Resource %s was ' . 'created. Ready to download.\n', $response['resourceName'] );