Yapılandırılmış Veri Dosyaları (SDF'ler) özel olarak biçimlendirilmiş, virgülle ayrılmış değerlerdir (CSV) Display &Video 360 hakkında verileri almak ve güncellemek için kullanılan dosyalar Video 360 kaynakları: toplu hale getirir. Görüntülü Reklam Ağı ve özel SDF'ler oluşturabilir ve indirebilirsiniz. Böylece, Görüntülü Reklam Ağı ve Görüntülü Reklam Ağı'ndaki Video 360 kaynaklar.
Bu kılavuzda, bir SDF İndirme işleminin nasıl oluşturulacağı ve işlemini yapabilir ve elde edilen SDF'leri indirebilirsiniz.
SDF biçimi ve sürümü ile ilgili bilgiler şurada bulunabilir: SDF referans belgeleri
Görev oluşturma
SDF'ler, sdfdownloadtask
adı verilen eşzamansız bir işlemle oluşturulur.
Bu görevi oluştururken, istediğiniz SDF'lerle ilgili parametreleri tanımlarsınız.
Bu işlem, sdfdownloadtasks.create
yöntemiyle yapılır. İlgili içeriği oluşturmak için kullanılan
Aşağıdaki alt bölümlerde, ayarlayabileceğiniz parametreler açıklanmaktadır.
Sürüm belirtin
Yapılandırılmış Veri Dosyası biçimi, Görüntülü Reklam ve Yeni sürümleri yayınlanan ve eski sürümleri içeren Video 360 API düzenli olarak kullanımdan kaldırılmıştır. Bu nedenle, kullanıcıların her zaman SDF'nin en son sürümünü kullanmaları önerilir.
İstediğiniz SDF'nin SDF sürümünü
version
alanına ekleyebilirsiniz. Ayarlanmadıysa veya ayarlanmışsa
SDF_VERSION_UNSPECIFIED
değerine ayarlanırsa görev,
SDF içeriğinin bağlamı olarak kullanılan reklamveren veya iş ortağı kaynağı.
Bağlamı belirleme
Kullanabileceğiniz herhangi bir kaynakla ilgili verileri içeren bir SDF oluşturabilirsiniz ancak
herhangi bir SDF, yalnızca tek bir bağlam içindeki içeriği döndürebilir.
iş ortağı veya reklamveren olabilir. Bu bağlam, istek gövdesinde
partnerId
veya
advertiserId
alanına giriş yapın. Tam olarak bu ikisinden biri
alanlarının ayarlanması gerekir.
Oluşturulan SDF'ye yalnızca belirtilen bağlamdaki kaynaklar dahil edilir. Belirtilen iş ortağına ait olmayan bir kaynağa göre filtrelemeye çalışırsanız veya altındaki içerik de bu karara dahil edilemeyecek, sonuç. Yalnızca bu dahil edilmemiş kaynaklara göre filtre uygularsanız ortaya çıkan dosyalar boş görünür. Belirtilen bağlam dışındaki kaynaklara göre filtrelemeye çalışma bir hata döndürmez. Bu nedenle, bağlamınızın doğru olduğundan emin olun doğru.
Doğru filtreyi seçin
Yukarıdaki içeriğe ek olarak, oluşturmak istediğiniz dosya türlerini belirterek oluşturulan Yapılandırılmış Veri Dosyaları ve dahil etmek istediğiniz belirli kaynakları veya kaynak ailesini seçin.
sdfdownloadtask
için üç filtre bulunur. Bu filtrelerin her biri
bir spesifikasyon türü olabilir. Her biri için yalnızca bir değer atayabilirsiniz
sdfdownloadtask
ParentEntityFilter
ParentEntityFilter
mevcut seçenekler arasından en geniş olanıdır
filtrelerine dokunun.
fileType
alanını kullanarak, istediğiniz tüm anahtar kelimeleri listeleyebilirsiniz.
Görevinizle oluşturmak istediğiniz dosya türlerini seçin. Bu
gerekir ve boş bırakılırsa ya da FILE_TYPE_UNSPECIFIED
olarak ayarlanırsa
sdfdownloadtask
hatasıyla tamamlanacak.
filterType
ve
filterIds
alanlarını kullanarak sonuçlarınızı daha da hassaslaştırabilirsiniz.
filterType
, türünü belirtir
kaynaklara göre filtreleyin ve filterIds
bu kaynakları benzersiz kimliklerine göre tanımlar. Ortaya çıkan SDF'ler,
fileType
tarafından tanımlanan veya
kaynakları ya da alt öğelerini
filterType
ve filterIds
.
IdFilter
IdFilter
, isteğinizi yalnızca kaynakları içerecek şekilde filtreler
belirler.
IdFilter
'te, Envanter hariç her SDF türü için bir alan bulunur
Kaynak. Bu alanların her biri, müşterinin kimliğini tanımlayan benzersiz kimliklerin
oluşturulan SDF'nize dahil etmek istediğiniz belirli kaynaklar. Sağlanan kimlikler
belirlenen bağlam içinde olması gerekir. Ancak bunların doğrudan ilişkili olmaları gerekmez. Siz
Bir satır öğesini istemek için belirli bir kampanyayı istemesi gerekmez
ve tam tersi de geçerlidir. Oluşturulacak dosya türleri yalnızca onlardan olacaktır
IdFilter
'nda belirtilen kaynaklara karşılık gelecek şekilde hazırlanır.
InventorySourceFilter
InventorySourceFilter
yalnızca filtrelemeye izin verir
ve Envanter Kaynağı kaynaklarını içeren SDF'lerin indirilmesini sağlar. Sadece bu
filtre uygulayabilirsiniz.
InventorySourceFilter
adlı işletmenin tekil bir değeri var
Benzersiz Search Ads 360'ı tanımladığınız inventorySourceIds
alanı
SDF'nize dahil etmek istediğiniz envanter kaynağı kaynaklarının kimlikleri. Öğe
inventorySourceIds
adresine sağlanan liste boş, tümü
belirlenen bağlamdaki envanter kaynakları, oluşturulan SDF'ye dahil edilir.
İstekte bulunun
İstediğiniz SDF'nin parametrelerini öğrendikten sonra, isteği oluşturabilirsiniz.
ve sdfdownloadtask
oluşturun.
Aşağıda,sdfdownloadtask
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());
İsteğinizi kontrol etme ve indirme yolunu öğrenme
Bir sdfdownloadtask
oluşturduğunuzda bir işlem nesnesi
geri döndü. Bu işlem, eşzamansız SDF'nizin durumunu gösterir
projenin oluşturulduğu aşamadır. İşleminizi şu şekilde kontrol edebilirsiniz:
tamamlanıp indirilmeye hazır olup olmadığını veya hata verip vermediğini anlamak için
sdfdownloadtasks.operations.get
yöntemini kullanır.
Tamamlandıktan sonra, döndürülen işlemde null olmayan bir değer olacaktır
done
alanına giriş yapın. Tamamlanan işlem,
bir response
veya error
girin. Bu seçenek varsa error
alanında bir
Hata kodu içeren Status
ve
mesaj görünmektedir. Bu mesaj,
meydana geldi. response
alanı varsa
oluşturulan dosyayı tanımlayan resourceName
değerine sahip bir nesne olacaktır
indirilecek dosya.
Aşağıda, eksponansiyel geri yükleme kullanarak isteğinizi nasıl kontrol edeceğinize dair bir örnek verilmiştir:
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'] );