Berichte erstellen und ausführen

Mit der Ad Manager API können Sie interaktive Berichte erstellen und ausführen. Weitere Informationen zur interaktiven Berichterstellung in Ad Manager finden Sie unter Interaktiven Bericht erstellen. Mit interaktiven Berichten können Sie Folgendes tun:

  • Erstellen Sie einen neuen Bericht mit der API und starten Sie einen Lauf.
  • Führen Sie einen vorhandenen Bericht aus, den Sie auf der Ad Manager-Benutzeroberfläche erstellt haben.

Nachdem Sie die Ausführung eines Berichts initiiert haben, können Sie den Status des Berichts abrufen und die Ergebnisse nach Abschluss lesen.

In diesem Leitfaden wird beschrieben, wie Sie einen Bericht erstellen, einen asynchronen Lauf von Report initiieren, den zurückgegebenen Status von Operation abrufen, den Ressourcennamen von Result aus dem abgeschlossenen Operation abrufen und einen paginierten Satz von Ergebnissen Rows abrufen.

Voraussetzungen

Prüfen Sie, ob Sie Zugriff auf ein Google Ad Manager-Netzwerk haben. Weitere Informationen finden Sie unter Erste Schritte mit Google Ad Manager und unter Berechtigungen für Nutzerrollen für Berichte.

Bericht erstellen

Mit der Methode networks.reports.create können Sie ein Report-Objekt erstellen.

Im folgenden Beispiel wird ein Bericht erstellt, in dem die Impressionen von gestern nach Position aufgeschlüsselt sind:

Java

import com.google.ads.admanager.v1.CreateReportRequest;
import com.google.ads.admanager.v1.NetworkName;
import com.google.ads.admanager.v1.Report;
import com.google.ads.admanager.v1.ReportServiceClient;

public class SyncCreateReport {

  public static void main(String[] args) throws Exception {
    syncCreateReport();
  }

  public static void syncCreateReport() throws Exception {
    try (ReportServiceClient reportServiceClient = ReportServiceClient.create()) {
      Report report =
        Report.newBuilder()
            .setDisplayName("My API Report")
            .setReportDefinition(
                ReportDefinition.newBuilder()
                    .addDimensions(Dimension.LINE_ITEM_NAME)
                    .addDimensions(Dimension.LINE_ITEM_ID)
                    .addMetrics(Metric.AD_SERVER_IMPRESSIONS)
                    .setDateRange(DateRange.newBuilder().setRelative(RelativeDateRange.YESTERDAY))
                    .setReportType(ReportType.HISTORICAL)
                    .build())
            .build();
      CreateReportRequest request =
          CreateReportRequest.newBuilder()
              .setParent(NetworkName.of("NETWORK_CODE").toString())
              .setReport(report)
              .build();
      Report response = reportServiceClient.createReport(request);
    }
  }
}

Python

from google.ads import admanager_v1
from google.ads.admanager_v1 import Report


def sample_create_report():
    # Create a client
    client = admanager_v1.ReportServiceClient()

    # Initialize request argument(s)
    report = admanager_v1.Report(
        display_name="My API Report",
        report_definition=admanager_v1.ReportDefinition(
            dimensions=[
                Report.Dimension.LINE_ITEM_NAME,
                Report.Dimension.LINE_ITEM_ID,
            ],
            metrics=[
                Report.Metric.AD_SERVER_IMPRESSIONS,
            ],
            date_range=Report.DateRange(
                relative=Report.DateRange.RelativeDateRange.YESTERDAY
            ),
            report_type=Report.ReportType.HISTORICAL,
        )
    )

    
    
    

    request = admanager_v1.CreateReportRequest(
        parent="networks/NETWORK_CODE",
        report=report,
    )

    # Make the request
    response = client.create_report(request=request)

    # Handle the response
    print(response)

.NET

using Google.Ads.AdManager.V1;
using Dimension = Google.Ads.AdManager.V1.Report.Types.Dimesnsion;
using Metric = Google.Ads.AdManager.V1.Report.Types.Metric;

public sealed partial class GeneratedReportServiceClientSnippets
{
    public void CreateReport()
    {
        // Create client
        ReportServiceClient reportServiceClient = ReportServiceClient.Create();
        // Initialize request argument(s)
        string parent = "networks/NETWORK_CODE";
        Report report = new Report
        {
            DisplayName = "My API Report",
            ReportDefinition = new ReportDefinition
            {
                Dimensions = { Dimension.LineItemName, Dimension.LineItemId },
                Metrics = { Metric.AdServerImpressions },
                DateRange = new Report.Types.DateRange
                {
                    Relative = Report.Types.DateRange.Types.RelativeDateRange.Yesterday
                },
                ReportType = Report.Types.ReportType.Historical
            }
        };

        // Make the request
        Report response = reportServiceClient.CreateReport(parent, report);
    }
}

PHP


use Google\Ads\AdManager\V1\Client\ReportServiceClient;
use Google\Ads\AdManager\V1\CreateReportRequest;
use Google\Ads\AdManager\V1\Report\DateRange;
use Google\Ads\AdManager\V1\Report\Dimension;
use Google\Ads\AdManager\V1\Report\Metric;
use Google\Ads\AdManager\V1\Report\DateRange\RelativeDateRange;
use Google\Ads\AdManager\V1\Report;
use Google\Ads\AdManager\V1\ReportDefinition;
use Google\Ads\AdManager\V1\Report\ReportType;

function createReport(): void
{
    $client = new ReportServiceClient();
    $report = (new Report())
        ->setDisplayName('My API Report')
        ->setReportDefinition((new ReportDefinition())
            ->setDimensions([
                Dimension::LINE_ITEM_NAME,
                Dimension::LINE_ITEM_ID
            ])
            ->setMetrics([
                Metric::AD_SERVER_IMPRESSIONS
            ])
            ->setDateRange((new DateRange)
                ->setRelative(RelativeDateRange::YESTERDAY)
            )
            ->setReportType(ReportType::HISTORICAL)
        );

    $request = new CreateReportRequest([
        'parent' => "networks/NETWORK_CODE",
        'report' => $report
    ]);

    $response = $client->createReport($request);
    print_r($response);
}

Ruby

require "google/ads/ad_manager/v1"

def create_report
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Ads::AdManager::V1::ReportService::Rest::Client.new

  report = Google::Ads::AdManager::V1::Report.new(
    display_name: "My API Report",
    report_definition: Google::Ads::AdManager::V1::ReportDefinition.new(
      dimensions: [
        :LINE_ITEM_NAME,
        :LINE_ITEM_ID
      ],
      metrics: [
        :AD_SERVER_IMPRESSIONS
      ],
      date_range: Google::Ads::AdManager::V1::Report::DateRange.new(
        relative: :YESTERDAY
      ),
      report_type: :HISTORICAL
    )
  )

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Ads::AdManager::V1::CreateReportRequest.new(
    parent: 'networks/NETWORK_CODE'
    report: report
  )

  # Call the create_report method.
  result = client.create_report request

  # The returned object is of type Google::Ads::AdManager::V1::Report.
  p result
end

Node.js

const parent = 'networks/NETWORK_CODE';

const report = {
  displayName: 'My API Report',
  reportDefinition: {
    dimensions: ['LINE_ITEM_NAME', 'LINE_ITEM_ID'],
    metrics: ['AD_SERVER_IMPRESSIONS'],
    dateRange: {
      relative: 'YESTERDAY',
    },
    reportType: 'HISTORICAL',
  },
};


// Imports the Admanager library
const {ReportServiceClient} = require('@google-ads/admanager').v1;

// Instantiates a client
const admanagerClient = new ReportServiceClient();

async function callCreateReport() {
  // Construct request
  const request = {
    parent,
    report,
  };

  // Run request
  const response = await admanagerClient.createReport(request);
  console.log(response);
}

callCreateReport();

cURL

Anfrage

curl -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
  "report": {
    "displayName": "My API Report",
    "reportDefinition": {
      "dimensions": ["LINE_ITEM_NAME", "LINE_ITEM_ID"],
      "metrics": ["AD_SERVER_IMPRESSIONS"],
      "dateRange": {
        "relative": "YESTERDAY"
      },
      "reportType": "HISTORICAL"
    }
  }
}' \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports"

Antwort

{
  "name": "networks/234093456/reports/4555265029",
  "displayName": "My API Report",
  "reportId": "4555265029",
  "reportDefinition": {
    "dimensions": [
      "LINE_ITEM_NAME",
      "LINE_ITEM_ID"
    ],
    "metrics": [
      "AD_SERVER_IMPRESSIONS"
    ],
    "dateRange": {
      "relative": "YESTERDAY"
    },
    "reportType": "HISTORICAL"
  },
  "visibility": "HIDDEN"
}

Nachdem Sie einen Bericht erstellt haben, können Sie ihn mit dem zurückgegebenen reportId ausführen.

Bericht erstellen

Zum Ausführen eines Berichts benötigen Sie die Berichts-ID. Sie können eine Berichts-ID in der Ad Manager-Benutzeroberfläche über die Berichts-URL abrufen. In der URL https://admanager.google.com/234093456#reports/interactive/detail/report_id=4555265029 ist die Berichts-ID beispielsweise 4555265029.

Sie können auch Berichte lesen, auf die Ihr Nutzer Zugriff hat, indem Sie die Methode networks.reports.list verwenden und die ID aus dem Ressourcennamen abrufen:

networks/234093456/reports/4555265029

Nachdem Sie die Berichts-ID haben, können Sie mit der Methode networks.reports.run eine asynchrone Ausführung des Berichts initiieren. Diese Methode gibt den Ressourcennamen eines Vorgangs mit langer Ausführungszeit Operation zurück. Im folgenden Beispielcode ist REPORT_ID ein Platzhalter für die Berichts-ID und NETWORK_CODE ein Platzhalter für Ihren Netzwerkcode. Informationen zum Ermitteln des Netzwerkcodes

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_ID");
      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_ID",
    )

    # 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_ID");
        // 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;
        }
    }
}

PHP


use Google\Ads\AdManager\V1\Client\ReportServiceClient;
use Google\Ads\AdManager\V1\RunReportRequest;
use Google\Ads\AdManager\V1\RunReportResponse;
use Google\ApiCore\ApiException;
use Google\ApiCore\OperationResponse;
use Google\Rpc\Status;

function run_report_sample(string $formattedName): void
{
    // Create a client.
    $reportServiceClient = new ReportServiceClient();

    // Prepare the request message.
    $request = (new RunReportRequest())
        ->setName($formattedName);

    // Call the API and handle any network failures.
    try {
        $response = $reportServiceClient->runReport($request);
        $response->pollUntilComplete();

        if ($response->operationSucceeded()) {
            $result = $response->getResult();
            printf('Operation successful with response data: %s' . PHP_EOL, $result->serializeToJsonString());
        } else {
            $error = $response->getError();
            printf('Operation failed with error data: %s' . PHP_EOL, $error->serializeToJsonString());
        }
    } catch (ApiException $ex) {
        printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
    }
}

function callSample(): void
{
    $formattedName = ReportServiceClient::reportName('NETWORK_CODE', 'REPORT_ID');

    run_report_sample($formattedName);
}

Ruby

require "google/ads/ad_manager/v1"

def run_report
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Ads::AdManager::V1::ReportService::Rest::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Ads::AdManager::V1::RunReportRequest.new(
    :name => 'networks/NETWORK_CODE/reports/REPORT_ID'
  )

  # Call the run_report method.
  result = client.run_report request

  # The returned object is of type Gapic::Operation. You can use it to
  # check the status of an operation, cancel it, or wait for results.
  # Here is how to wait for a response.
  result.wait_until_done! timeout: 60
  if result.response?
    p result.response
  else
    puts "No response received."
  end
end

Node.js

const name = 'networks/NETWORK_CODE/reports/REPORT_ID';

// Imports the Admanager library
const {ReportServiceClient} = require('@google-ads/admanager').v1;

// Instantiates a client
const admanagerClient = new ReportServiceClient();

async function callRunReport() {
  // Construct request
  const request = {
    name,
  };

  // Run request
  const [operation] = await admanagerClient.runReport(request);
  const [response] = await operation.promise();
  console.log(response);
}

callRunReport();

cURL

Anfrage

curl -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/{$REPORT_ID}:run"

Antwort

{
  "name": "networks/234093456/operations/reports/runs/6485392645",
  "metadata": {
    "@type": "type.googleapis.com/google.ads.admanager.v1.RunReportMetadata",
    "report": "networks/234093456/reports/4555265029"
  }
}

Berichtsstatus abrufen

Wenn Sie eine Clientbibliothek verwenden, wird im Beispielcode aus dem vorherigen Abschnitt der Status der Berichtsausführung Operation in den empfohlenen Intervallen abgefragt und das Ergebnis bereitgestellt, sobald es fertig ist. Weitere Informationen zu den empfohlenen Abfrageintervallen finden Sie unter networks.reports.run.

Wenn Sie mehr Kontrolle über das Polling haben möchten, können Sie mit der Methode networks.operations.reports.runs.get eine einzelne Anfrage senden, um den aktuellen Status eines laufenden Berichts abzurufen. Einige Clientbibliotheken unterstützen auch das Festlegen benutzerdefinierter Polling-Strategien:

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;
}

PHP


$options = [
    'initialPollDelayMillis' => 500, // Initial delay of 500ms
    'pollDelayMultiplier' => 1.5,
    'maxPollDelayMillis' => 30000, // Max poll delay of 30 seconds
    'totalPollTimeoutMillis' => 60 * 60 * 1000, // Total timeout of 1 hour in milliseconds
];

$response = $reportServiceClient->runReport($request);
$response->pollUntilComplete($options);

Ruby

options = {
  initial_delay: 0.5, # Initial delay of 500ms (0.5 seconds)
  multiplier: 1.5,
  max_delay: 30.0, # Max poll delay of 30 seconds
  timeout: 60 * 60 # Total timeout of 1 hour in seconds
}
result = client.run_report request
result.wait_until_done!(retry_policy: options)
if result.response?
  p result.response
else
  puts "No response received."
end

Node.js

const options = {
  initialRetryDelayMillis: 500, // Initial delay of 500ms
  retryDelayMultiplier: 1.5,
  maxRetryDelayMillis: 30, // Max poll delay of 30 seconds
  totalTimeoutMillis: 60 * 60 * 1000 // Total timeout of 1 hour
}

const [operation] = await admanagerClient.runReport(request);
operation.backoffSettings = options;
const [response] = await operation.promise();
console.log(response);

cURL

Anfrage

curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/operations/reports/runs/${OPERATION_ID}"

Antwort

{
  "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,
}

Ressourcennamen des Ergebnisses abrufen

Nachdem der Berichtslauf Operation abgeschlossen ist, enthält er den Ressourcennamen von Result.

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;

PHP


$response = $reportServiceClient->runReport($request);
$response->pollUntilComplete();

if ($response->operationSucceeded()) {
    $result = $response->getResult();
    // Result name in the format networks/[NETWORK_CODE]/reports/[REPORT_ID]/results/[RESULT_ID]
    $resultName = $result->getReportResult();
}

Ruby

result = client.run_report request

result.wait_until_done!
if result.response?
  # Result name in the format networks/[NETWORK_CODE]/reports/[REPORT_ID]/results/[RESULT_ID]
  p result.response.report_result
else
  puts "No response received."
end

Node.js

// Run request
const [operation] = await admanagerClient.runReport(request);
const [response] = await operation.promise();
// Result name in the format networks/[NETWORK_CODE]/reports/[REPORT_ID]/results/[RESULT_ID]
console.log(response.reportResult);

cURL

Anfrage

curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/operations/reports/runs/${OPERATION_ID}"

Antwort

{
  "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"
  }
}

Ergebniszeilen lesen

Die Ressource Result hat eine einzelne Methode, networks.reports.results.fetchRows, zum Lesen einer paginierten Liste von Zeilen. Jede Zeile enthält eine Liste mit Dimensionswerten und eine Liste mit gruppierten Messwerten. Jede Gruppe enthält den Messwert und alle Vergleichswerte oder Flags. Weitere Informationen zu Flags finden Sie unter Flags in interaktiven Berichten verwenden.

Bei Berichten ohne Vergleiche oder Aufschlüsselungen nach Zeitraum gibt es ein einzelnes MetricValueGroup mit Messwertdaten (z. B. Impressionen oder Klicks) für den gesamten Zeitraum des Berichts.

Die Reihenfolge der Dimensions- und Messwerte entspricht der Reihenfolge in ReportDefinition des Report.

Hier sehen Sie ein JSON-Beispiel für eine ReportDefinition-Anfrage und eine entsprechende fetchRows-Antwort:

Berichtdefinition

{
  "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": {}
}

Antwort für fetchRows

{
  "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
}

Wenn Sie eine Clientbibliothek verwenden, enthält die Antwort einen Iterator, der zusätzliche Seiten verzögert anfordert. Sie können auch die Parameter pageToken und pageSize verwenden. Weitere Informationen zu diesen Parametern finden Sie unter Abfrageparameter. Wenn eine weitere Seite vorhanden ist, enthält die Antwort das Feld nextPageToken mit dem Token, das in der nächsten Anfrage verwendet werden soll.

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(
        name = "networks/NETWORK_CODE/reports/REPORT_ID/results/RESULT_ID")

    # 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, ReportDataTable.Types.Row> response = reportServiceClient.FetchReportResultRows(name);

        // Iterate over all response items, lazily performing RPCs as required
        foreach (ReportDataTable.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 (ReportDataTable.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<ReportDataTable.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 (ReportDataTable.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;
    }
}

PHP


use Google\Ads\AdManager\V1\Client\ReportServiceClient;
use Google\Ads\AdManager\V1\FetchReportResultRowsRequest;
use Google\Ads\AdManager\V1\FetchReportResultRowsResponse;
use Google\ApiCore\ApiException;

function fetch_report_result_rows_sample(): void
{
    // Create a client.
    $reportServiceClient = new ReportServiceClient();

    // Prepare the request message.
    $request = (new FetchReportResultRowsRequest())
        ->setName('networks/NETWORK_CODE/reports/REPORT_ID/results/RESULT_ID');

    // Call the API and handle any network failures.
    try {
        $response = $reportServiceClient->fetchReportResultRows($request);
        printf('Response data: %s' . PHP_EOL, $response->serializeToJsonString());
    } catch (ApiException $ex) {
        printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
    }
}

Ruby

require "google/ads/ad_manager/v1"

def fetch_report_result_rows
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Ads::AdManager::V1::ReportService::Rest::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Ads::AdManager::V1::FetchReportResultRowsRequest.new(
    :name => 'networks/NETWORK_CODE/reports/REPORT_ID/results/RESULT_ID'
  )

  # Call the fetch_report_result_rows method.
  result = client.fetch_report_result_rows request

  # The returned object is of type Gapic::PagedEnumerable. You can iterate
  # over elements, and API calls will be issued to fetch pages as needed.
  result.each do |item|
    # Each element is of type ::Google::Ads::AdManager::V1::Report::DataTable::Row.
    p item
  end
end

Node.js

const name = 'networks/NETWORK_CODE/reports/REPORT_ID/results/RESULT_ID';

// Imports the Admanager library
const {ReportServiceClient} = require('@google-ads/admanager').v1;

// Instantiates a client
const admanagerClient = new ReportServiceClient();

async function callFetchReportResultRows() {
  // Construct request
  const request = {
    name,
  };

  // Run request
  const iterable = admanagerClient.fetchReportResultRowsAsync(request);
  for await (const response of iterable) {
      console.log(response);
  }
}

callFetchReportResultRows();

cURL

Erste Anfrage

curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/${REPORT_ID}/results/${RESULT_ID}:fetchRows"

Anfrage für die nächste Seite

curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/${REPORT_ID}/results/${RESULT_ID}:fetchRows?pageToken=${PAGE_TOKEN}"

Probleme mit einem Bericht beheben

Warum wird mein Bericht nicht in der API zurückgegeben?
Der Ad Manager-Nutzer, mit dem Sie sich authentifizieren, muss Zugriff auf den interaktiven Bericht haben. Interaktive Berichte können nur über die Ad Manager API gelesen werden.
Warum sind die Berichtergebnisse in meinem Testnetzwerk leer?
In Testnetzwerken werden keine Anzeigen ausgeliefert. Daher enthalten Auslieferungsberichte keine Daten.
Warum sind die Berichtsergebnisse in meinem Produktionsnetzwerk leer?
Der Nutzer, als der Sie sich authentifizieren, hat möglicherweise keinen Zugriff auf die Daten, die Sie in Berichten verwenden möchten. Prüfen Sie, ob die Rollenberechtigungen und Teams richtig eingestellt sind.
Warum stimmen die Klicks oder Impressionen über den gesamten Zeitraum nicht mit meinem Bericht auf der Benutzeroberfläche überein?
Lifetime-Impressionen beziehen sich auf die gesamte Laufzeit der Werbebuchung, unabhängig vom Zeitraum des Berichts. Wenn eine Werbebuchung noch ausgeliefert wird, kann sich der Wert zwischen zwei Ausführungen desselben Berichts ändern.