إنشاء التقارير وتنفيذها

باستخدام Ad Manager API، يمكنك إنشاء "تقارير تفاعلية" وتشغيلها. للاطّلاع على تفاصيل حول التقارير التفاعلية في "مدير إعلانات Google"، راجِع مقالة إنشاء تقرير تفاعلي. باستخدام التقارير التفاعلية، يمكنك إجراء ما يلي:

  • أنشئ تقريرًا جديدًا باستخدام واجهة برمجة التطبيقات، وابدأ عملية تشغيل.
  • تنفيذ تقرير حالي أنشأته في واجهة مستخدم "مدير الإعلانات"

بعد بدء تشغيل تقرير، يمكنك الاستعلام عن حالة التقرير وقراءة النتائج بعد اكتمالها.

يشرح هذا الدليل كيفية إنشاء تقرير وبدء عملية تنفيذ غير متزامنة لـ Report، والتحقّق من حالة Operation التي تم عرضها، والحصول على اسم مورد Result من عملية التنفيذ المكتملة Operation، وجلب مجموعة من النتائج Rows مقسمة إلى صفحات.

المتطلبات الأساسية

قبل المتابعة، تأكَّد من إمكانية الوصول إلى شبكة "مدير إعلانات Google". للحصول على إذن الوصول، اطّلِع على بدء استخدام "مدير إعلانات Google" وأذونات دور المستخدم في التقارير.

إنشاء تقرير

باستخدام طريقة networks.reports.create، يمكنك إنشاء كائن Report.

ينشئ المثال التالي تقريرًا يعرض مرّات الظهور في اليوم السابق، مع تقسيمها حسب عنصر الحملة:

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

طلب

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"

الردّ

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

بعد إنشاء تقرير، يمكنك استخدام reportId الذي تم عرضه لتشغيله.

تنفيذ تقرير

لتنفيذ تقرير، يجب توفير معرّف التقرير. يمكنك الحصول على رقم تعريف التقرير في واجهة مستخدم "مدير إعلانات Google" من خلال عنوان URL الخاص بالتقرير. على سبيل المثال، في عنوان URL https://admanager.google.com/234093456#reports/interactive/detail/report_id=4555265029 يكون معرّف التقرير هو 4555265029.

يمكنك أيضًا قراءة التقارير التي يمكن للمستخدم الوصول إليها باستخدام طريقة networks.reports.list والحصول على المعرّف من اسم المورد:

networks/234093456/reports/4555265029

بعد الحصول على معرّف التقرير، يمكنك بدء عملية تنفيذ غير متزامنة للتقرير باستخدام الطريقة networks.reports.run. تعرض هذه الطريقة اسم المورد الخاص بعملية طويلة الأمد Operation. يُرجى العِلم أنّ REPORT_ID في نموذج الرمز البرمجي التالي هو عنصر نائب لمعرّف التقرير، وأنّ NETWORK_CODE هو عنصر نائب لرمز شبكتك. للعثور على رمز شبكتك، اطّلِع على العثور على معلومات حساب "مدير إعلانات Google".

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

طلب

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. تتيح بعض مكتبات العملاء أيضًا إعداد استراتيجيات استطلاع مخصّصة:

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

طلب

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.

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

طلب

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

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
}

إذا كنت تستخدم مكتبة برامج، سيتضمّن الردّ مكرّرًا يطلب بشكل غير مباشر صفحات إضافية. يمكنك أيضًا استخدام المَعلمتَين pageToken وpageSize. للحصول على تفاصيل حول هذه المَعلمات، يُرجى الاطّلاع على مَعلمات طلب البحث. إذا كانت هناك صفحة أخرى، سيتضمّن الردّ الحقل nextPageToken مع الرمز المميز الذي يجب استخدامه في الطلب التالي.

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

الطلب الأوّلي

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

تحديد المشاكل المتعلّقة بتقرير وحلّها

لماذا لا يتم عرض تقريري في واجهة برمجة التطبيقات؟
تأكَّد من أنّ مستخدم "مدير إعلانات Google" الذي يتمّ إثبات هويته لديه إذن الوصول إلى "التقرير التفاعلي". يمكنك قراءة "التقارير التفاعلية" فقط من خلال واجهة برمجة التطبيقات في "إدارة إعلانات Google".
لماذا تكون نتائج التقارير على شبكتي الاختبارية فارغة؟
لا تعرض الشبكات الاختبارية إعلانات، وبالتالي لا تتضمّن تقارير العرض أي بيانات.
لماذا تكون نتائج التقرير على شبكة الإنتاج فارغة؟
قد لا يكون لدى المستخدم الذي تحاول المصادقة عليه إذن بالوصول إلى البيانات التي تحاول إعداد تقارير بشأنها. تأكَّد من ضبط أذونات الدوروالفِرق بشكل صحيح.
لماذا لا تتطابق النقرات أو مرّات الظهور منذ إنشاء الحساب مع تقريري في واجهة المستخدم؟
عدد مرّات الظهور منذ إنشاء تفاصيل الإعلان يشمل الفترة منذ إنشائها بالكامل، بغض النظر عن النطاق الزمني للتقرير. إذا كان عنصر الحملة لا يزال يعرض الإعلانات، قد تتغيّر القيمة بين تشغيلَين للتقرير نفسه.