Anket yapma ve tamamlanan raporları görüntüleme

Rapor çalıştırma işlemi, Operation nesnesiyle temsil edilen uzun süreli bir işlem olarak eşzamansız şekilde yürütülür. Rapor çalıştırma işleminin çıktısı, Report nesnesine dayalı rapor sonuçlarıdır.

Bu kılavuzda, Curation Partners API'yi kullanarak işlem durumunu yoklamak için bir rapor çalıştırma işlemi alma ve tamamlanan rapor çalıştırma işleminin rapor sonuçlarını getirme hakkında bilgi verilmektedir.

Başlamadan önce

Devam etmeden önce aşağıdakileri tamamlamanız gerekir:

Rapor çalıştırmanın durumunu yoklama

Bir rapor çalıştırma işleminin yürütme durumunu kontrol etmek için curators.reports.operations.get yöntemini kullanın.

Aşağıdaki örnek, bir işlemi yoklamak için GET isteğinde bulunur:

REST

İstek

curl \
  'https://curationpartners.googleapis.com/v1/curators/ACCOUNT_ID/reports/123456789/operations/10486370264' \
  --header 'Authorization: Bearer ACCESS_TOKEN' \
  --header 'Accept: application/json' \
  --compressed

Aşağıdakini değiştirin:

  • ACCOUNT_ID: Hesap kimliğiniz.
  • ACCESS_TOKEN: erişim jetonunuz.

Yanıt

Başarıyla tamamlandığında yanıt, Operation olur. done alanı true olarak ayarlanır ve response yükü reportResult kaynak adıyla doldurulur:

{
  "name": "curators/ACCOUNT_ID/reports/123456789/operations/10486370264",
  "done": true,
  "metadata": {
    "@type": "type.googleapis.com/google.ads.curationpartners.v1.RunReportMetadata",
    "percentComplete": 100
  },
  "response": {
    "@type": "type.googleapis.com/google.ads.curationpartners.v1.RunReportResponse",
    "reportResult": "curators/ACCOUNT_ID/reports/123456789/results/10486370264"
  }
}

Java

/*
 * Copyright (c) 2026 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package com.google.api.services.samples.curationpartners.v1.curators.reports.operations;

import com.google.api.services.curationpartners.v1.CurationPartners;
import com.google.api.services.curationpartners.v1.model.Operation;
import com.google.api.services.samples.curationpartners.v1.Utils;
import java.io.IOException;
import java.security.GeneralSecurityException;
import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;

public class GetReportOperation {

  /**
   * Executes the get operation for a report operation.
   *
   * @param curationPartnersClient the initialized Curation Partners API client.
   * @param accountId the account ID of the curator.
   * @param reportId the resource ID of the report.
   * @param operationId the resource ID of the report operation.
   * @throws IOException if the API returns an error.
   */
  public static void execute(
      CurationPartners curationPartnersClient,
      Long accountId,
      String reportId,
      String operationId)
      throws IOException {
    String name =
        String.format(
            "curators/%s/reports/%s/operations/%s", accountId, reportId, operationId);

    System.out.printf("Getting report operation with name \"%s\".%n", name);

    // Get the status of the report operation.
    Operation operation =
        curationPartnersClient
            .curators()
            .reports()
            .operations()
            .get(name)
            .execute();

    System.out.println("Successfully retrieved report operation:");
    Utils.jsonPrettyPrint(operation);
  }

  /**
   * Creates and configures the ArgumentParser for this sample.
   *
   * @return the configured ArgumentParser.
   */
  private static ArgumentParser createArgumentParser() {
    ArgumentParser parser =
        ArgumentParsers.newFor("GetReportOperation")
            .build()
            .defaultHelp(true)
            .description("Gets the status of a long-running report operation. If the " +
                "operation is done, you can view the report contents with the " +
                "`curators.reports.results.fetchRows` method.");

    // Required arguments.
    parser
        .addArgument("-a", "--account_id")
        .help("The account ID of the curator.")
        .required(true)
        .type(Long.class);
    parser
        .addArgument("-r", "--report_id")
        .help("The resource ID of the report.")
        .required(true);
    parser
        .addArgument("-o", "--operation_id")
        .help("The resource ID of the report operation to retrieve.")
        .required(true);

    return parser;
  }

  public static void main(String[] args) {
    ArgumentParser parser = createArgumentParser();

    Namespace parsedArgs = null;
    try {
      parsedArgs = parser.parseArgs(args);
    } catch (ArgumentParserException ex) {
      parser.handleError(ex);
      System.exit(1);
    }

    CurationPartners client = null;
    try {
      client = Utils.getCurationPartnersClient();
    } catch (IOException ex) {
      System.out.printf("Unable to create Curation Partners API service:%n%s", ex);
      System.out.println("Did you specify a valid path to a service account key file?");
      System.exit(1);
    } catch (GeneralSecurityException ex) {
      System.out.printf("Unable to establish secure HttpTransport:%n%s", ex);
      System.exit(1);
    }

    try {
      execute(
          client,
          parsedArgs.getLong("account_id"),
          parsedArgs.getString("report_id"),
          parsedArgs.getString("operation_id"));
    } catch (IOException ex) {
      System.out.printf("Curation Partners API returned error response:%n%s", ex);
      System.exit(1);
    }
  }
}

Aşağıda, işlemin durumunu yoklamak için done alanını nasıl kullanabileceğiniz açıklanmaktadır:

  • Yanıtın done alanında false değeri varsa rapor çalıştırma işlemi hâlâ işleniyor demektir.
  • Yanıtın done alanında true değeri varsa rapor çalıştırma işlemi tamamlanmıştır. Yanıt gövdesindeki Operation nesnesi de aşağıdaki alanlardan birini içerir:
    • response: Rapor çalıştırma işleminin başarılı olduğunu gösterir. Bu alan, @type alanı type.googleapis.com/google.ads.curationpartners.v1.RunReportResponse türüne ayarlanmış şekilde doldurulmuş bir nesnedir. RunReportResponse türü, ilgili raporun adını içeren bir reportResult alanıyla doldurulur result.
    • error: Rapor çalıştırma işleminin başarılı olmadığını gösterir. error alanı, rapor çalıştırmanın neden başarısız olduğunu açıklayan bir Status nesnesiyle doldurulur.

Tamamlanmış bir rapordan satırları getirme

Tamamlanan bir rapor çalıştırma işleminin içeriğini curators.reports.results.fetchRows yöntemiyle alabilirsiniz. Rapor sonucu için name yol parametresini doldurmanız gerekir. Bu parametre, tam bir rapor çalıştırma işleminin reportResult alanındaki kaynak adıdır.

Aşağıdaki örnek, sonuç satırlarını getirmek için GET isteğinde bulunur:

REST

İstek

curl \
  'https://curationpartners.googleapis.com/v1/curators/ACCOUNT_ID/reports/123456789/results/10486370264:fetchRows?pageSize=1' \
  --header 'Authorization: Bearer ACCESS_TOKEN' \
  --header 'Accept: application/json' \
  --compressed

Yanıt

{
  "rows": [
    {
      "dimensionValues": [
        {
          "stringValue": "2026-08-01"
        },
        {
          "stringValue": "segment-1001"
        }
      ],
      "metricValueGroups": [
        {
          "primaryValues": [
            {
              "intValue": "150000"
            },
            {
              "intValue": "3200"
            },
            {
              "doubleValue": 450.75
            },
            {
              "doubleValue": 45.08
            }
          ]
        }
      ]
    }
  ],
  "runTime": "2026-08-05T12:00:00Z",
  "dateRanges": [
    {
      "startDate": {
        "year": 2026,
        "month": 7,
        "day": 6
      },
      "endDate": {
        "year": 2026,
        "month": 8,
        "day": 4
      }
    }
  ],
  "totalRowCount": 2,
  "nextPageToken": "QC7nzW91c2VTcGFubmVyQ29udGlubWF0aW6uVG9wZY45NP=="
}

Java

/*
 * Copyright (c) 2026 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package com.google.api.services.samples.curationpartners.v1.curators.reports.results;

import com.google.api.services.curationpartners.v1.CurationPartners;
import com.google.api.services.curationpartners.v1.model.FetchReportResultRowsResponse;
import com.google.api.services.samples.curationpartners.v1.Utils;
import java.io.IOException;
import java.security.GeneralSecurityException;
import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;

public class FetchReportResultRows {

  /**
   * Executes the fetchRows operation for report result rows.
   *
   * @param curationPartnersClient the initialized Curation Partners API client.
   * @param accountId the account ID of the curator.
   * @param reportId the resource ID of the report.
   * @param resultId the resource ID of the report result.
   * @param pageSize the maximum number of rows to return per page.
   * @param pageToken the page token from a previous response, if any.
   * @throws IOException if the API returns an error.
   */
  public static void execute(
      CurationPartners curationPartnersClient,
      Long accountId,
      String reportId,
      String resultId,
      Integer pageSize,
      String pageToken)
      throws IOException {
    String name = String.format("curators/%s/reports/%s/results/%s", accountId, reportId, resultId);

    System.out.printf("Fetching report result rows for \"%s\".%n", name);

    CurationPartners.Curators.Reports.Results.FetchRows request =
        curationPartnersClient.curators().reports().results().fetchRows(name);

    if (pageSize != null) {
      request.setPageSize(pageSize);
    }
    if (pageToken != null) {
      request.setPageToken(pageToken);
    }

    FetchReportResultRowsResponse response = request.execute();

    System.out.println("Successfully fetched report result rows:");
    Utils.jsonPrettyPrint(response);
  }

  /**
   * Creates and configures the ArgumentParser for this sample.
   *
   * @return the configured ArgumentParser.
   */
  private static ArgumentParser createArgumentParser() {
    ArgumentParser parser =
        ArgumentParsers.newFor("FetchReportResultRows")
            .build()
            .defaultHelp(true)
            .description("Fetches rows for a completed report result.");

    // Required arguments.
    parser
        .addArgument("-a", "--account_id")
        .help("The account ID of the curator.")
        .required(true)
        .type(Long.class);
    parser
        .addArgument("-r", "--report_id")
        .help("The resource ID of the report.")
        .required(true);
    parser
        .addArgument("--result_id")
        .help("The resource ID of the report result. This is identical to the resource ID of " +
            "the corresponding report run operation.")
        .required(true);

    // Optional arguments.
    parser
        .addArgument("--page_size")
        .help("The maximum number of rows to return per page.")
        .type(Integer.class);
    parser
        .addArgument("--page_token")
        .help("A page token, received from a previous `FetchReportResultRows` call.");

    return parser;
  }

  public static void main(String[] args) {
    ArgumentParser parser = createArgumentParser();

    Namespace parsedArgs = null;
    try {
      parsedArgs = parser.parseArgs(args);
    } catch (ArgumentParserException ex) {
      parser.handleError(ex);
      System.exit(1);
    }

    CurationPartners client = null;
    try {
      client = Utils.getCurationPartnersClient();
    } catch (IOException ex) {
      System.out.printf("Unable to create Curation Partners API service:%n%s", ex);
      System.out.println("Did you specify a valid path to a service account key file?");
      System.exit(1);
    } catch (GeneralSecurityException ex) {
      System.out.printf("Unable to establish secure HttpTransport:%n%s", ex);
      System.exit(1);
    }

    try {
      execute(
          client,
          parsedArgs.getLong("account_id"),
          parsedArgs.getString("report_id"),
          parsedArgs.getString("result_id"),
          parsedArgs.getInt("page_size"),
          parsedArgs.getString("page_token"));
    } catch (IOException ex) {
      System.out.printf("Curation Partners API returned error response:%n%s", ex);
      System.exit(1);
    }
  }
}

Aşağıdaki sorgu parametrelerini belirtebilirsiniz:

  • pageSize: Döndürülecek maksimum satır sayısı. Varsayılan değer 1.000 satır, maksimum değer ise 10.000 satırdır.
  • pageToken: Bir önceki fetchRows yanıtında döndürülen sayfa jetonu, bir sonraki satır grubunu getirmek için kullanılır.

Yanıtta aşağıdaki alanlar bulunur:

  • rows: Row nesneleri dizisi. Her satırda:
    • dimensionValues: İstenen her boyutun değerleri, rapor tanımındaki boyutlarla aynı sırada.
    • metricValueGroups: Tarih aralıklarına karşılık gelen metrik değer grupları. Her grup, rapor tanımındaki metriklerle aynı şekilde sıralanmış bir primaryValues listesi içerir.
  • dateRanges: Rapor için hesaplanan sabit tarih aralıkları. dateRanges alanı yalnızca ilk sayfanın yanıt gövdesine dahil edilir.
  • totalRowCount: Rapor sonucundaki toplam satır sayısı. totalRowCount alanı yalnızca ilk sayfanın yanıt gövdesine dahil edilir.
  • nextPageToken: Satırların bir sonraki sayfasını almak için sonraki isteklere iletilecek jeton. Başka satır yoksa Curation Partners API bu alanı yanıt gövdesinden çıkarır.

curators.reports.results.fetchRows REST örneğinde, rows içindeki her öğe doğrudan raporda yapılandırılan ReportDefinition ile eşlenir:

  • dimensionValues: reportDefinition.dimensions alanındaki her boyuta karşılık gelen değerleri, tam olarak belirttiğiniz sırayla içerir. Örnekte, ilk değer 2026-08-01, DATE boyutuna, ikinci değer segment-1001 ise CURATION_DATA_SEGMENT_ID boyutuna karşılık gelir.
  • metricValueGroups: Rapordaki tarih aralıklarında gruplandırılmış metrik değerlerini içerir. Her grupta, primaryValues alanı, tam olarak belirttiğiniz sırada reportDefinition.metrics alanındaki her metriğe karşılık gelen değerleri içerir. Bu örnekte, dört değer aşağıdaki Metric enum değerlerine karşılık gelir:

    • IMPRESSIONS: 150000
    • CLICKS: 3200
    • SPEND: 450.75
    • CURATION_PARTNER_FEE: 45.08
  • dateRanges: Google'ın rapor tanımında yapılandırılan göreli aralık THIS_MONTH_TO_DATE için hesapladığı sabit tarih aralığını içerir.

Sonraki adımlar