یک عملیات اجرای گزارش به صورت ناهمزمان به عنوان یک عملیات طولانی مدت اجرا میشود که توسط شیء Operation نمایش داده میشود. خروجی یک عملیات اجرای گزارش، نتایج گزارش بر اساس شیء Report است.
این راهنما توضیح میدهد که چگونه میتوانید از API مربوط به Curation Partners برای دریافت یک عملیات اجرای گزارش، نظرسنجی از وضعیت عملیات و دریافت نتایج گزارش عملیات اجرای گزارش تکمیلشده استفاده کنید.
قبل از اینکه شروع کنی
قبل از ادامه، باید موارد زیر را تکمیل کنید:
- احراز هویت را تنظیم کنید .
- برای بدست آوردن نام منبع عملیات طولانی مدت، یک اجرای گزارش را آغاز کنید .
وضعیت نظرسنجی از اجرای گزارش
برای بررسی وضعیت اجرای یک عملیات اجرای گزارش، از متد curators.reports.operations.get استفاده کنید.
مثال زیر یک درخواست GET برای نظرسنجی از یک عملیات ارسال میکند:
استراحت
درخواست
curl \
'https://curationpartners.googleapis.com/v1/curators/ACCOUNT_ID/reports/123456789/operations/10486370264' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--header 'Accept: application/json' \
--compressed
موارد زیر را جایگزین کنید:
-
ACCOUNT_ID: شناسه حساب شما. -
ACCESS_TOKEN: توکن دسترسی شما.
پاسخ
وقتی با موفقیت انجام شد، پاسخ یک Operation با فیلد done تنظیم شده روی true است و payload response با نام منبع reportResult پر میشود:
{
"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"
}
}
جاوا
/* * 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); } } }
در ادامه نحوه استفاده از فیلد done برای مشاهده وضعیت عملیات توضیح داده شده است:
- اگر فیلد
doneدر پاسخ مقدارfalseداشته باشد، عملیات اجرای گزارش هنوز در حال پردازش است. - اگر فیلد
doneدر پاسخ، مقدارtrueباشد، عملیات اجرای گزارش کامل شده است. شیءOperationدر بدنه پاسخ نیز شامل یکی از فیلدهای زیر است:-
response: نشان میدهد که عملیات اجرای گزارش موفقیتآمیز بوده است. این فیلد یک شیء است که با فیلد@typeکه روی نوعtype.googleapis.com/google.ads.curationpartners.v1.RunReportResponseتنظیم شده است، پر شده است. نوعRunReportResponseبا یک فیلدreportResultحاوی نامresultگزارش مربوطه پر شده است. -
error: نشان میدهد که عملیات اجرای گزارش موفقیتآمیز نبوده است. فیلدerrorبا یک شیءStatusپر میشود که دلیل عدم موفقیت اجرای گزارش را شرح میدهد.
-
دریافت ردیفها از یک گزارش تکمیلشده
شما میتوانید محتویات یک عملیات اجرای گزارش تکمیلشده را با متد curators.reports.results.fetchRows بازیابی کنید. شما باید پارامتر name path را برای نتیجه گزارش وارد کنید، که نام منبع از فیلد reportResult یک عملیات اجرای گزارش کامل است.
مثال زیر یک درخواست GET برای دریافت ردیفهای نتیجه ارسال میکند:
استراحت
درخواست
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
پاسخ
{
"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=="
}
جاوا
/* * 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); } } }
میتوانید پارامترهای پرسوجوی زیر را مشخص کنید:
-
pageSize: حداکثر تعداد ردیفهایی که باید برگردانده شوند. مقدار پیشفرض ۱۰۰۰ ردیف و حداکثر ۱۰۰۰۰ ردیف است. -
pageToken: توکن صفحهای که در پاسخ قبلیfetchRowsبرای واکشی دسته بعدی سطرها برگردانده شده است.
پاسخ شامل فیلدهای زیر است:
-
rows: آرایهای از اشیاءRow. هر ردیف شامل موارد زیر است:-
dimensionValues: مقادیری برای هر بُعد درخواستی، که دقیقاً مطابق با ابعاد موجود در تعریف گزارش مرتب شدهاند. -
metricValueGroups: گروههایی از مقادیر معیار مربوط به محدودههای زمانی. هر گروه شامل یک لیستprimaryValuesاست که به طور یکسان با معیارهای موجود در تعریف گزارش مرتب شدهاند.
-
-
dateRanges: محدودههای تاریخ ثابت محاسبهشده برای گزارش. فیلدdateRangesفقط در بدنه پاسخ صفحه اول قرار میگیرد. -
totalRowCount: تعداد کل ردیفها در نتیجه گزارش. فیلدtotalRowCountفقط در بدنه پاسخ صفحه اول قرار میگیرد. -
nextPageToken: توکنی که در درخواستهای بعدی برای بازیابی صفحه بعدی ردیفها ارسال میشود. اگر ردیف اضافی وجود نداشته باشد، API مربوط به Curation Partners این فیلد را از بدنه پاسخ حذف میکند.
در مثال curators.reports.results.fetchRows REST، هر آیتم در rows مستقیماً به ReportDefinition پیکربندیشده در گزارش نگاشت میشود:
-
dimensionValues: شامل مقادیر مربوط به هر بُعد در فیلدreportDefinition.dimensionsبه ترتیب دقیقی که شما مشخص کردهاید، میباشد. در مثال، مقدار اول2026-08-01مربوط به بُعدDATEو مقدار دوم،segment-1001، مربوط به بُعدCURATION_DATA_SEGMENT_IDاست. metricValueGroups: شامل مقادیر معیار گروهبندیشده در محدودههای تاریخ گزارش است. در هر گروه، فیلدprimaryValuesشامل مقادیر مربوط به هر معیار در فیلدreportDefinition.metricsبه ترتیب دقیقی است که شما مشخص کردهاید. در این مثال، چهار مقدار مربوط به مقادیر شمارشیMetricزیر هستند:-
IMPRESSIONS:150000 -
CLICKS:3200 -
SPEND:450.75 -
CURATION_PARTNER_FEE:45.08
-
dateRanges: شامل محدوده تاریخ ثابتی است که گوگل برای محدوده نسبیTHIS_MONTH_TO_DATEکه در تعریف گزارش پیکربندی شده است، محاسبه کرده است.
مراحل بعدی
- یاد بگیرید که چگونه با استفاده از API Curation Partners گزارشها را ایجاد و اصلاح کنید .
- یاد بگیرید که چگونه گزارشهای موجود را با رابط برنامهنویسی کاربردی Curation Partners مشاهده کنید .
- یاد بگیرید که چگونه گزارشها را با رابط برنامهنویسی کاربردی Curation Partners اجرا کنید .