Ad Manager API'yi kullanarak etkileşimli rapor oluşturabilir, mevcut bir raporu çalıştırabilir ve rapor sonuçlarını okuyabilirsiniz.
Ad Manager'daki etkileşimli raporları bilmiyorsanız Ad Manager kullanıcı arayüzünde etkileşimli raporların nasıl kullanılacağına dair genel bakış için Etkileşimli rapor oluşturma başlıklı makaleyi inceleyin.
Karmaşık raporlarda, boyut ve metrik uyumluluğunu kontrol etmek için Ad Manager kullanıcı arayüzünü kullanabilirsiniz. Tüm kullanıcı arayüzü raporları API ile çalıştırılabilir.
Bu kılavuzda, Report
için eşzamansız çalıştırma işleminin nasıl başlatılacağı, döndürülen Operation
durumunun nasıl sorgulandığı, tamamlanan Operation
işlemden Result
kaynak adının nasıl alınacağı ve sayfalandırılmış bir sonuç kümesinin nasıl getirileceği Rows
açıklanmaktadır.
Ön koşul
Devam etmeden önce bir Google Ad Manager ağına erişiminiz olduğundan emin olun. Erişim elde etmek için Google Ad Manager'ı kullanmaya başlama başlıklı makaleyi inceleyin.
Rapor çalıştırma
Rapor çalıştırmak için rapor kimliğine ihtiyacınız vardır. Rapor URL'si aracılığıyla Ad Manager kullanıcı arayüzünde bir rapor kimliği edinebilirsiniz. Örneğin, https://www.google.com/admanager/234093456#reports/interactive/detail/report_id=4555265029
URL'sinde rapor kimliği 4555265029
'dır.
Ayrıca, networks.reports.list
yöntemini kullanarak kullanıcınızın erişebildiği raporları okuyabilir ve kaynak adından kimliği alabilirsiniz:
networks/234093456/reports/4555265029
Rapor kimliğinizi aldıktan sonra networks.reports.run
yöntemini kullanarak raporun eşzamansız çalıştırılmasını başlatabilirsiniz. Bu yöntem, uzun süredir çalışan bir Operation
kaynağının adını döndürür.
Aşağıdaki örnek kodda [REPORT]
'ün rapor kimliği için, [NETWORK]
'un ise ağ kodunuz için yer tutucu olduğunu unutmayın. Ağ kodunuzu bulmak için Ad Manager hesap bilgilerini bulma başlıklı makaleyi inceleyin.
Java
import com.google.ads.admanager.v1.ReportName;
import com.google.ads.admanager.v1.ReportServiceClient;
import com.google.ads.admanager.v1.RunReportResponse;
public class SyncRunReportReportname {
public static void main(String[] args) throws Exception {
syncRunReportReportname();
}
public static void syncRunReportReportname() throws Exception {
try (ReportServiceClient reportServiceClient = ReportServiceClient.create()) {
ReportName name = ReportName.of("[NETWORK_CODE]", "[REPORT]");
RunReportResponse response = reportServiceClient.runReportAsync(name).get();
}
}
}
Python
from google.ads import admanager_v1 def sample_run_report(): # Create a client client = admanager_v1.ReportServiceClient() # Initialize request argument(s) request = admanager_v1.RunReportRequest( name="networks/[NETWORK_CODE]/reports/[REPORT]", ) # Make the request operation = client.run_report(request=request) print("Waiting for operation to complete...") response = operation.result() # Handle the response print(response)
.NET
using Google.Ads.AdManager.V1;
using Google.LongRunning;
public sealed partial class GeneratedReportServiceClientSnippets
{
public void RunReportResourceNames()
{
// Create client
ReportServiceClient reportServiceClient = ReportServiceClient.Create();
// Initialize request argument(s)
ReportName name = ReportName.FromNetworkCodeReport("[NETWORK_CODE]", "[REPORT]");
// Make the request
Operation<RunReportResponse, RunReportMetadata> response = reportServiceClient.RunReport(name);
// Poll until the returned long-running operation is complete
Operation<RunReportResponse, RunReportMetadata> completedResponse = response.PollUntilCompleted();
// Retrieve the operation result
RunReportResponse result = completedResponse.Result;
// Or get the name of the operation
string operationName = response.Name;
// This name can be stored, then the long-running operation retrieved later by name
Operation<RunReportResponse, RunReportMetadata> retrievedResponse = reportServiceClient.PollOnceRunReport(operationName);
// Check if the retrieved long-running operation has completed
if (retrievedResponse.IsCompleted)
{
// If it has completed, then access the result
RunReportResponse retrievedResult = retrievedResponse.Result;
}
}
}
cURL
İstek
curl -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" \ "https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/{$REPORT_ID}:run"
Yanıt
{ "name": "networks/234093456/operations/reports/runs/6485392645", "metadata": { "@type": "type.googleapis.com/google.ads.admanager.v1.RunReportMetadata", "report": "networks/234093456/reports/4555265029" } }
Rapor durumunu sorgulayın
İstemci kitaplığı kullanıyorsanız önceki bölümdeki örnek kod, önerilen aralıklarla Operation
rapor çalıştırmanın durumunu sorar ve tamamlandığında sonucu sağlar. Önerilen anket aralıkları hakkında daha fazla bilgi için networks.reports.run
bölümüne bakın.
Anket üzerinde daha fazla kontrol sahibi olmak istiyorsanız networks.operations.reports.runs.get
yöntemini kullanarak çalışan bir raporun mevcut durumunu almak için ayrı bir istek gönderin:
Java
import com.google.ads.admanager.v1.ReportServiceSettings;
import com.google.api.gax.longrunning.OperationalTimedPollAlgorithm;
import com.google.api.gax.retrying.RetrySettings;
import com.google.api.gax.retrying.TimedRetryAlgorithm;
import java.time.Duration;
public class SyncRunReport {
public static void main(String[] args) throws Exception {
syncRunReport();
}
public static void syncRunReport() throws Exception {
ReportServiceSettings.Builder reportServiceSettingsBuilder = ReportServiceSettings.newBuilder();
TimedRetryAlgorithm timedRetryAlgorithm =
OperationalTimedPollAlgorithm.create(
RetrySettings.newBuilder()
.setInitialRetryDelayDuration(Duration.ofMillis(500))
.setRetryDelayMultiplier(1.5)
.setMaxRetryDelayDuration(Duration.ofMillis(5000))
.setTotalTimeoutDuration(Duration.ofHours(24))
.build());
reportServiceSettingsBuilder
.createClusterOperationSettings()
.setPollingAlgorithm(timedRetryAlgorithm)
.build();
}
}
Python
from google.ads import admanager_v1 from google.longrunning.operations_pb2 import GetOperationRequest def sample_poll_report(): # Run the report client = admanager_v1.ReportServiceClient() response = client.run_report(name="networks/[NETWORK_CODE]/reports/[REPORT_ID]") # Check if the long-running operation has completed operation = client.get_operation( GetOperationRequest(name=response.operation.name)) if(operation.done): # If it has completed, then access the result run_report_response = admanager_v1.RunReportResponse.deserialize(payload=operation.response.value)
.NET
Operation<RunReportResponse, RunReportMetadata> retrievedResponse = reportServiceClient.PollOnceRunReport(operationName); // Check if the retrieved long-running operation has completed if (retrievedResponse.IsCompleted) { // If it has completed, then access the result RunReportResponse retrievedResult = retrievedResponse.Result; }
cURL
İstek
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/operations/reports/runs/${OPERATION_ID}"
Yanıt
{ "name": "networks/234093456/operations/reports/runs/6485392645", "metadata": { "@type": "type.googleapis.com/google.ads.admanager.v1.RunReportMetadata", "percentComplete": 50, "report": "networks/234093456/reports/4555265029" }, "done": false, }
Sonuç kaynağının adını alma
Rapor çalıştırma Operation
işlemi tamamlandıktan sonra Result
kaynağının adını içerir.
Java
RunReportResponse response = reportServiceClient.runReportAsync(name).get();
// Result name in the format networks/[NETWORK_CODE]/reports/[REPORT_ID]/results/[RESULT_ID]
String resultName = response.getReportResult();
Python
operation = client.run_report(request=request)
response = operation.result()
# Result name in the format networks/[NETWORK_CODE]/reports/[REPORT_ID]/results/[RESULT_ID]
result_name = response.report_result
.NET
Operation<RunReportResponse, RunReportMetadata> response = reportServiceClient.RunReport(request);
// Poll until the returned long-running operation is complete
Operation<RunReportResponse, RunReportMetadata> completedResponse = response.PollUntilCompleted();
RunReportResponse result = completedResponse.Result;
// Result name in the format networks/[NETWORK_CODE]/reports/[REPORT_ID]/results/[RESULT_ID]
string resultName = result.ReportResult;
cURL
İstek
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/operations/reports/runs/${OPERATION_ID}"
Yanıt
{ "name": "networks/234093456/operations/reports/runs/6485392645", "metadata": { "@type": "type.googleapis.com/google.ads.admanager.v1.RunReportMetadata", "percentComplete": 100, "report": "networks/234093456/reports/4555265029" }, "done": true, "response": { "@type": "type.googleapis.com/google.ads.admanager.v1.RunReportResponse", "reportResult": "networks/234093456/reports/4555265029/results/7031632628" } }
Sonuç satırlarını okuma
Result
kaynağında, sayfaya bölünmüş bir satır listesini okumak için networks.reports.results.fetchRows
adlı tek bir yöntem bulunur. Her satırda boyut değerlerinin ve gruplandırılmış metrik değerlerinin bir listesi bulunur. Her grup, metrik değerini ve tüm karşılaştırma değerlerini veya işaretlerini içerir. İşaretler hakkında daha fazla bilgi için Etkileşimli raporunuzda işaretleri kullanma başlıklı makaleyi inceleyin.
Tarih aralığı karşılaştırması veya bölme içermeyen raporlarda, raporun tüm tarih aralığı için metrik değerlerini (ör. gösterimler veya tıklamalar) içeren tek bir MetricValueGroup
bulunur.
Boyut ve metrik değerlerinin sırası, Report
'in ReportDefinition
bölümündeki sırayla aynıdır.
Aşağıda, ReportDefinition
ve buna karşılık gelen fetchRows
yanıtının JSON örneği verilmiştir:
{
"name": "networks/234093456/reports/4555265029",
"visibility": "SAVED",
"reportId": "4555265029",
"reportDefinition": {
"dimensions": [
"LINE_ITEM_NAME",
"LINE_ITEM_ID"
],
"metrics": [
"AD_SERVER_IMPRESSIONS"
],
"currencyCode": "USD",
"dateRange": {
"relative": "YESTERDAY"
},
"reportType": "HISTORICAL"
},
"displayName": "Example Report",
"updateTime": "2024-09-01T13:00:00Z",
"createTime": "2024-08-01T02:00:00Z",
"locale": "en-US",
"scheduleOptions": {}
}
{
"rows": [
{
"dimensionValues": [
{
"stringValue": "Line Item #1"
},
{
"intValue": "6378470710"
}
],
"metricValueGroups": [
{
"primaryValues": [
{
"intValue": "100"
}
]
}
]
},
{
"dimensionValues": [
{
"stringValue": "Line Item #2"
},
{
"intValue": "5457147368"
}
],
"metricValueGroups": [
{
"primaryValues": [
{
"intValue": "95"
}
]
}
]
}
],
"runTime": "2024-10-02T10:00:00Z",
"dateRanges": [
{
"startDate": {
"year": 2024,
"month": 10,
"day": 1
},
"endDate": {
"year": 2024,
"month": 10,
"day": 1
}
}
],
"totalRowCount": 2
}
İstemci kitaplığı kullanıyorsanız yanıtta, ek sayfaları istekte bulunan bir iteratör bulunur. pageToken
ve pageSize
parametrelerini de kullanabilirsiniz. Bu parametrelerle ilgili ayrıntılı bilgi için Sorgu parametreleri bölümüne bakın.
Başka bir sayfa varsa yanıtta, sonraki istekte kullanılacak jetonu içeren bir nextPageToken
alanı bulunur.
Java
import com.google.ads.admanager.v1.Report;
import com.google.ads.admanager.v1.ReportServiceClient;
public class SyncFetchReportResultRowsString {
public static void main(String[] args) throws Exception {
syncFetchReportResultRowsString();
}
public static void syncFetchReportResultRowsString() throws Exception {
try (ReportServiceClient reportServiceClient = ReportServiceClient.create()) {
String name = "networks/[NETWORK_CODE]/reports/[REPORT_ID]/results/[RESULT_ID]";
for (Report.DataTable.Row element :
reportServiceClient.fetchReportResultRows(name).iterateAll()) {
}
}
}
}
Python
from google.ads import admanager_v1
def sample_fetch_report_result_rows():
# Create a client
client = admanager_v1.ReportServiceClient()
# Initialize request argument(s)
request = admanager_v1.FetchReportResultRowsRequest(
)
# Make the request
page_result = client.fetch_report_result_rows(request=request)
# Handle the response
for response in page_result:
print(response)
.NET
using Google.Ads.AdManager.V1;
using Google.Api.Gax;
using System;
public sealed partial class GeneratedReportServiceClientSnippets
{
public void FetchReportResultRows()
{
// Create client
ReportServiceClient reportServiceClient = ReportServiceClient.Create();
// Initialize request argument(s)
string name = "";
// Make the request
PagedEnumerable<FetchReportResultRowsResponse, Report.Types.DataTable.Types.Row> response = reportServiceClient.FetchReportResultRows(name);
// Iterate over all response items, lazily performing RPCs as required
foreach (Report.Types.DataTable.Types.Row item in response)
{
// Do something with each item
Console.WriteLine(item);
}
// Or iterate over pages (of server-defined size), performing one RPC per page
foreach (FetchReportResultRowsResponse page in response.AsRawResponses())
{
// Do something with each page of items
Console.WriteLine("A page of results:");
foreach (Report.Types.DataTable.Types.Row item in page)
{
// Do something with each item
Console.WriteLine(item);
}
}
// Or retrieve a single page of known size (unless it's the final page), performing as many RPCs as required
int pageSize = 10;
Page<Report.Types.DataTable.Types.Row> singlePage = response.ReadPage(pageSize);
// Do something with the page of items
Console.WriteLine($"A page of {pageSize} results (unless it's the final page):");
foreach (Report.Types.DataTable.Types.Row item in singlePage)
{
// Do something with each item
Console.WriteLine(item);
}
// Store the pageToken, for when the next page is required.
string nextPageToken = singlePage.NextPageToken;
}
}
cURL
İlk istek
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/${REPORT_ID}/results/${RESULT_ID}:fetchRows"
Sonraki sayfa isteği
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/${REPORT_ID}/results/${RESULT_ID}:fetchRows?pageToken=${PAGE_TOKEN}"
Raporlarla ilgili sorunları giderme
- Raporum API'de neden döndürülmüyor?
- Kimliğini doğruladığınız Ad Manager kullanıcısının Etkileşimli rapora erişebildiğinden emin olun. Etkileşimli raporları yalnızca Ad Manager API'den okuyabilirsiniz.
- Test ağımdaki rapor sonuçları neden boş?
- Test ağları reklam yayınlamadığından teslimat raporlarında veri yoktur.
- Üretim ağımdaki rapor sonuçları neden boş?
- Kimliğini doğruladığınız kullanıcı, raporlamaya çalıştığınız verilere erişemiyor olabilir. Rollerin izinlerinin ve ekipler'in doğru şekilde ayarlandığından emin olun.
- Kullanım ömrü boyunca yapılan tıklamalar veya gösterimler neden kullanıcı arayüzündeki raporumla eşleşmiyor?
- Kullanım süresi boyunca gösterim sayısı, raporun tarih aralığından bağımsız olarak satır öğesinin tüm ömrü için geçerlidir. Bir satır öğesi hâlâ yayınlanıyorsa değer, aynı raporun iki çalıştırması arasında değişebilir.