می توانید با استفاده از Ad Manager API یک گزارش تعاملی ایجاد کنید، یک گزارش موجود را اجرا کنید و نتایج گزارش را بخوانید.
اگر با گزارشهای تعاملی در Ad Manager آشنا نیستید، برای مروری بر نحوه استفاده از گزارشهای تعاملی در رابط کاربری Ad Manager به ایجاد گزارش تعاملی مراجعه کنید.
برای گزارشهای پیچیده، میتوانید از رابط کاربری Ad Manager برای بررسی سازگاری ابعاد و متریک استفاده کنید. همه گزارش های UI را می توان با API اجرا کرد.
این راهنما نحوه شروع اجرای ناهمزمان یک Report
، نظرسنجی وضعیت Operation
بازگشتی، به دست آوردن نام منبع Result
از Operation
تکمیل شده و واکشی یک مجموعه صفحه بندی شده از Rows
نتیجه را پوشش می دهد.
پیش نیاز
قبل از ادامه، مطمئن شوید که به یک شبکه Google Ad Manager دسترسی دارید. برای دسترسی، به شروع با Google Ad Manager مراجعه کنید.
یک گزارش اجرا کنید
برای اجرای یک گزارش، به شناسه گزارش نیاز دارید. میتوانید شناسه گزارش را در رابط کاربری Ad Manager از طریق URL گزارش دریافت کنید. برای مثال، در URL https://www.google.com/admanager/234093456#reports/interactive/detail/report_id=4555265029
شناسه گزارش 4555265029
است.
همچنین میتوانید با استفاده از روش networks.reports.list
گزارشهایی را بخوانید که کاربر به آنها دسترسی دارد و شناسه را از نام منبع دریافت کنید:
networks/234093456/reports/4555265029
پس از اینکه شناسه گزارش خود را دریافت کردید، می توانید یک اجرای ناهمزمان گزارش را با استفاده از روش networks.reports.run
آغاز کنید. این روش نام منبع یک Operation
طولانی مدت را برمی گرداند. توجه داشته باشید که در کد مثال زیر، [REPORT]
یک مکان نگهدار برای شناسه گزارش و [NETWORK]
یک مکان نگهدار برای کد شبکه شما است. برای پیدا کردن کد شبکه خود، به یافتن اطلاعات حساب مدیر آگهی مراجعه کنید.
جاوا
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();
}
}
}
پایتون
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)
دات نت
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
درخواست کنید
curl -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" \ "https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/{$REPORT_ID}:run"
پاسخ
{ "name": "networks/234093456/operations/reports/runs/6485392645", "metadata": { "@type": "type.googleapis.com/google.ads.admanager.v1.RunReportMetadata", "report": "networks/234093456/reports/4555265029" } }
وضعیت گزارش را نظرسنجی کنید
اگر از یک کتابخانه سرویس گیرنده استفاده می کنید، کد مثال بخش قبل وضعیت Operation
اجرای گزارش را در فواصل زمانی توصیه شده بررسی می کند و نتیجه را پس از تکمیل آن ارائه می دهد. برای اطلاعات بیشتر در مورد فواصل نظرسنجی توصیه شده، به networks.reports.run
مراجعه کنید.
اگر میخواهید کنترل بیشتری روی نظرسنجی داشته باشید، با استفاده از روش networks.operations.reports.runs.get
یک درخواست جداگانه برای بازیابی وضعیت فعلی گزارش در حال اجرا ارائه دهید:
جاوا
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();
}
}
پایتون
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)
دات نت
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
درخواست کنید
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/operations/reports/runs/${OPERATION_ID}"
پاسخ
{ "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, }
نام منبع نتیجه را دریافت کنید
پس از اتمام Operation
اجرای گزارش، نام منبع Result
را شامل می شود.
جاوا
RunReportResponse response = reportServiceClient.runReportAsync(name).get();
// Result name in the format networks/[NETWORK_CODE]/reports/[REPORT_ID]/results/[RESULT_ID]
String resultName = response.getReportResult();
پایتون
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
دات نت
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
درخواست کنید
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/operations/reports/runs/${OPERATION_ID}"
پاسخ
{ "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" } }
ردیف های نتیجه را بخوانید
منبع Result
یک روش دارد، networks.reports.results.fetchRows
، برای خواندن فهرست صفحه بندی شده ردیف ها. هر ردیف فهرستی از مقادیر ابعاد و فهرستی از مقادیر متریک گروه بندی شده دارد. هر گروه حاوی مقدار متریک و هر مقدار مقایسه یا پرچم است. برای اطلاعات بیشتر درباره پرچمها، به استفاده از پرچمها در گزارش تعاملی خود مراجعه کنید.
برای گزارشهایی که هیچ مقایسه یا تقسیمبندی محدوده تاریخ ندارند، یک MetricValueGroup
با مقادیر متریک (مثلاً نمایشها یا کلیکها) برای کل محدوده تاریخ گزارش وجود دارد.
ترتیب ابعاد و مقادیر متریک مانند ترتیب در ReportDefinition
Report
است.
در زیر یک مثال JSON از ReportDefinition
و پاسخ fetchRows
مربوطه است:
{
"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
}
اگر از کتابخانه مشتری استفاده میکنید، پاسخ دارای یک تکرارکننده است که با تنبلی صفحات اضافی را درخواست میکند. همچنین می توانید از پارامترهای pageToken
و pageSize
استفاده کنید. برای جزئیات بیشتر در مورد این پارامترها، به پارامترهای Query مراجعه کنید. اگر صفحه دیگری وجود داشته باشد، پاسخ حاوی یک فیلد nextPageToken
با نشانه برای استفاده در درخواست بعدی است.
جاوا
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()) {
}
}
}
}
پایتون
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)
دات نت
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
درخواست اولیه
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/${REPORT_ID}/results/${RESULT_ID}:fetchRows"
درخواست صفحه بعد
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
"https://admanager.googleapis.com/v1/networks/${NETWORK_CODE}/reports/${REPORT_ID}/results/${RESULT_ID}:fetchRows?pageToken=${PAGE_TOKEN}"
عیب یابی مشکلات با گزارش
- چرا گزارش من در API برگردانده نمی شود؟
- اطمینان حاصل کنید که کاربر Ad Manager که احراز هویت می کنید به گزارش تعاملی دسترسی دارد. فقط میتوانید گزارشهای تعاملی را از Ad Manager API بخوانید.
- چرا نتایج گزارش در شبکه آزمایشی من خالی است؟
- شبکههای آزمایشی تبلیغات ارائه نمیکنند، بنابراین گزارشهای تحویل دادهای ندارند.
- چرا نتایج گزارش در شبکه تولید من خالی است؟
- کاربری که احراز هویت میکنید ممکن است به دادههایی که میخواهید گزارش دهید دسترسی نداشته باشد. بررسی کنید که مجوزهای نقش و تیم آنها به درستی تنظیم شده باشد.
- چرا کلیک ها یا نمایش های مادام العمر با گزارش من در رابط کاربری مطابقت ندارند؟
- نمایشهای مادامالعمر برای کل عمر مورد خط، صرفنظر از محدوده تاریخ گزارش، هستند. اگر یک مورد خطی همچنان در حال تحویل است، ممکن است مقدار آن بین دو اجرا از همان گزارش تغییر کند.