রিপোর্ট চালান

আপনি একটি ইন্টারেক্টিভ রিপোর্ট তৈরি করতে পারেন, একটি বিদ্যমান রিপোর্ট চালাতে পারেন এবং অ্যাড ম্যানেজার API ব্যবহার করে রিপোর্টের ফলাফল পড়তে পারেন।

আপনি যদি অ্যাড ম্যানেজারে ইন্টারেক্টিভ রিপোর্টিংয়ের সাথে অপরিচিত হন, তাহলে অ্যাড ম্যানেজার UI-তে ইন্টারেক্টিভ রিপোর্টগুলি কীভাবে ব্যবহার করবেন তার একটি ওভারভিউয়ের জন্য একটি ইন্টারেক্টিভ রিপোর্ট তৈরি করুন দেখুন।

জটিল প্রতিবেদনের জন্য, আপনি মাত্রা এবং মেট্রিক সামঞ্জস্যতা পরীক্ষা করতে অ্যাড ম্যানেজার UI ব্যবহার করতে পারেন। সমস্ত UI রিপোর্ট API এর সাথে চালানো যেতে পারে।

এই নির্দেশিকাটি কভার করে যে কীভাবে একটি Report একটি অ্যাসিঙ্ক্রোনাস রান শুরু করতে হয়, ফিরে আসা Operation স্থিতি পোল করতে হয়, সম্পূর্ণ Operation থেকে Result সংস্থানের নাম পেতে হয় এবং ফলাফলের Rows একটি পৃষ্ঠাযুক্ত সেট আনতে হয়।

পূর্বশর্ত

চালিয়ে যাওয়ার আগে, নিশ্চিত করুন যে আপনার কাছে একটি Google Ad Manager নেটওয়ার্ক অ্যাক্সেস আছে। অ্যাক্সেস পেতে, Google অ্যাড ম্যানেজার দিয়ে শুরু করুন দেখুন।

একটি প্রতিবেদন চালান

একটি রিপোর্ট চালানোর জন্য, আপনার রিপোর্ট আইডি প্রয়োজন। আপনি রিপোর্ট ইউআরএলের মাধ্যমে অ্যাড ম্যানেজার UI-তে একটি রিপোর্ট আইডি পেতে পারেন। উদাহরণস্বরূপ, URL-এ https://www.google.com/admanager/234093456#reports/interactive/detail/report_id=4555265029 রিপোর্ট ID হল 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 আছে।

মাত্রার ক্রম এবং মেট্রিক মানগুলি Report ReportDefinition ক্রম হিসাবে একই।

নিম্নলিখিতটি একটি ReportDefinition এবং একটি সংশ্লিষ্ট fetchRows প্রতিক্রিয়ার একটি JSON উদাহরণ:

{
  "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 প্যারামিটার ব্যবহার করতে পারেন। এই পরামিতিগুলির বিশদ বিবরণের জন্য, ক্যোয়ারী প্যারামিটারগুলি দেখুন। অন্য পৃষ্ঠা বিদ্যমান থাকলে, প্রতিক্রিয়াটিতে পরবর্তী অনুরোধে ব্যবহার করার জন্য টোকেন সহ একটি 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 API থেকে ইন্টারেক্টিভ রিপোর্ট পড়তে পারেন।
আমার পরীক্ষার নেটওয়ার্কে রিপোর্টের ফলাফল খালি কেন?
টেস্ট নেটওয়ার্ক বিজ্ঞাপন পরিবেশন করে না, তাই ডেলিভারি রিপোর্টে ডেটা থাকে না।
আমার প্রোডাকশন নেটওয়ার্কে রিপোর্টের ফলাফল খালি কেন?
আপনি যে ব্যবহারকারী হিসাবে প্রমাণীকরণ করছেন সেই ডেটাতে অ্যাক্সেস নাও থাকতে পারে যা আপনি রিপোর্ট করার চেষ্টা করছেন৷ যাচাই করুন যে তাদের ভূমিকা অনুমতি এবং দল সঠিকভাবে সেট করা আছে।
কেন আজীবন ক্লিক বা ইম্প্রেশনগুলি UI-তে আমার রিপোর্টের সাথে মেলে না?
লাইফটাইম ইম্প্রেশনগুলি লাইন আইটেমের সমগ্র জীবনের জন্য, প্রতিবেদনের তারিখের পরিসর নির্বিশেষে। যদি একটি লাইন আইটেম এখনও প্রদান করে, তাহলে একই রিপোর্টের দুটি রানের মধ্যে মান পরিবর্তন হতে পারে।