Rapor çalıştırma

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.