Java

Ad Manager API-এর সাথে ইন্টার‍্যাক্ট করার জন্য Google একটি Java ক্লায়েন্ট লাইব্রেরি প্রদান করে। Apache Maven বা Gradle-এর সাথে ক্লায়েন্ট লাইব্রেরি ব্যবহার করার সাজেশন দেওয়া হয়।

শুরু করতে, আপনার পছন্দের IDE-তে একটি নতুন প্রোজেক্ট তৈরি করুন অথবা আগে থেকে থাকা প্রোজেক্টে ডিপেন্ডেন্সি যোগ করুন। Google, ক্লায়েন্ট লাইব্রেরি আর্টিফ্যাক্টকে Maven সেন্ট্রাল রিপোজিটরিতে com.google.api-ads/ad-manager হিসেবে প্রকাশ করে।

Maven

<!-- pom.xml -->
<dependency>
  <groupId>com.google.api-ads</groupId>
  <artifactId>ad-manager</artifactId>
  <version>0.58.0</version>
</dependency>

Gradle

implementation 'com.google.api-ads:ad-manager:0.58.0'

ক্রেডেনশিয়াল কনফিগার করা

যাচাইকরণের জন্য Java ক্লায়েন্ট লাইব্রেরি OAuth2 এবং অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল (ADC) ব্যবহার করে।

ADC নিম্নলিখিত লোকেশনগুলিতে ক্রম অনুযায়ী ক্রেডেনশিয়াল সার্চ করে:

  1. GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবল।
  2. Google Cloud CLI (gcloud CLI)-এর মাধ্যমে সেট-আপ করা ব্যবহারকারীর ক্রেডেনশিয়াল।
  3. Google Cloud-এ রান করার সময়, Google Cloud রিসোর্সের সাথে অ্যাটাচ করা পরিষেবা অ্যাকাউন্ট।

আপনার ADC ক্রেডেনশিয়াল তৈরি ও কনফিগার করার জন্য, যাচাইকরণ দেখুন।

আপনার প্রথম অনুরোধ করা

প্রতিটি পরিষেবায় ServiceClient অবজেক্ট থাকে এবং প্রতিটি REST পদ্ধতির জন্য সিঙ্ক্রোনাস ও অ্যাসিঙ্ক্রোনাস পদ্ধতি থাকে। নিচের উদাহরণটি Network সিঙ্ক্রোনাস পদ্ধতিতে পড়ে।

import com.google.ads.admanager.v1.GetNetworkRequest;
import com.google.ads.admanager.v1.Network;
import com.google.ads.admanager.v1.NetworkName;
import com.google.ads.admanager.v1.NetworkServiceClient;

public class SyncGetNetwork {

  public static void main(String[] args) throws Exception {
    syncGetNetwork();
  }

  public static void syncGetNetwork() throws Exception {
    try (NetworkServiceClient networkServiceClient = NetworkServiceClient.create()) {
      GetNetworkRequest request =
          GetNetworkRequest.newBuilder()
              .setName(NetworkName.of("[NETWORK_CODE]").toString())
              .build();
      Network response = networkServiceClient.getNetwork(request);
    }
  }
}

অন্যান্য পদ্ধতি ও রিসোর্সের উদাহরণ দেখতে, GitHub রিপোজিটরি googleapis/google-cloud-java দেখুন।

HTTP অনুরোধ ও উত্তর লগ করা

com.google.api.client.http.HttpTransport ক্লাস সব HTTP অনুরোধ করে। এই ক্লাসটি URL, হেডার এবং কন্টেন্ট সহ HTTP অনুরোধ এবং প্রতিক্রিয়া সংক্রান্ত বিবরণ লগ করার জন্য java.util.logging (JUL) ব্যবহার করে।

লগিং চালু করতে, এই ক্লাসের জন্য লগারকে CONFIG বা তার বেশি লগ লেভেলে সেট করুন। আপনি কোন লগিং ইমপ্লিমেন্টেশন ব্যবহার করছেন তার উপর নির্ভর করে এই ধাপগুলি আলাদা হয়।

JUL

লগিং চালু করতে, আপনার logging.properties ফাইলে com.google.api.client.http.level-এর মান CONFIG বা তার বেশি হিসেবে সেট করুন।

handlers=java.util.logging.ConsoleHandler
com.google.api.client.http.level=CONFIG
java.util.logging.ConsoleHandler.level=CONFIG

বিকল্প হিসেবে, আপনার Java কোডে লগিং চালু করতে পারেন।


import com.google.api.client.http.HttpTransport;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

public static void enableLogging() {
  Logger logger = Logger.getLogger(HttpTransport.class.getName());
  logger.setLevel(Level.CONFIG);
  ConsoleHandler handler = new ConsoleHandler();
  handler.setLevel(Level.CONFIG);
  logger.addHandler(handler);
}

Log4j

আপনি লগ করার জন্য Log4j ব্যবহার করলে, JUL মেসেজ লগ করার জন্য Log4j JDK লগিং অ্যাডাপ্টর ব্যবহার করতে পারবেন। এটি SystemProperty-এর মাধ্যমে বা Log4jBridgeHandler ও JUL logging.properties ফাইল ব্যবহার করে কনফিগার করা যেতে পারে।

সিস্টেম প্রপার্টি

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

Log4j ব্রিজ হ্যান্ডলার

handlers = org.apache.logging.log4j.jul.Log4jBridgeHandler
org.apache.logging.log4j.jul.Log4jBridgeHandler.propagateLevels = true

এইসব সেটিংস Ad Manager API লগকে CONFIG বা তার বেশি লেভেলের যেকোনও Logger-এ লেখে। নিচে দেওয়া উদাহরণ log4j2.xml ফাইলটি এমন একটি লগার কনফিগার করে যা System.out-এ লেখে।

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Logger name="com.google.api.client.http.HttpTransport" level="debug">
      <AppenderRef ref="Console"/>
    </Logger>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

সমস্যা ম্যানেজ করা

Java ক্লায়েন্ট লাইব্রেরিতে ApiException এর সব Ad Manager API সমস্যা হল সাবক্লাস।

ApiException.getReason() মেথড এমন একটি স্ট্রিং রিটার্ন করে যা অনন্যভাবে সমস্যার ধরন শনাক্ত করে। সমস্যা কীভাবে সমাধান করবেন তা নির্ধারণ করতে এটি ব্যবহার করুন।

404 Not Found ও 401 Unauthorized ছাড়া সব সমস্যার ক্ষেত্রেই ErrorDetails অতিরিক্ত তথ্য দেওয়া আছে। 400 Bad Request সমস্যার ক্ষেত্রে, ErrorDetails BadRequest অবজেক্টে FieldViolations-এর তালিকা থাকে।

try {
  // ...
} catch (ApiException apiException) {
  // HTTP status code enum
  com.google.api.gax.rpc.StatusCode statusCode = apiException.getStatusCode();

  // Unique identifier for the type of error
  String errorCode = apiException.getReason();

  // Human readable error message
  String errorMessage = apiException.getMessage();

  // Additional information is available in ErrorDetails.
  ErrorDetails errorDetails = apiException.getErrorDetails();
  if (errorDetails != null) {
    // Additional information for 400 Bad Request errors
    if (errorDetails.getBadRequest() != null) {
      // List of field violations
      List<BadRequest.FieldViolation> fieldViolations =
          errorDetails.getBadRequest().getFieldViolationsList();
    }
  }
}

এছাড়াও, Ad Manager API সংক্রান্ত সমস্যার মধ্যে একটি অনন্য request_id থাকে যা আপনি সমস্যার সমাধান করার ব্যাপারে সহায়তা পেতে সহায়তা টিমের সাথে শেয়ার করতে পারেন। নিচের উদাহরণটি request_id এক্সট্র্যাক্ট করে।

ErrorDetails errorDetails = apiException.getErrorDetails();
if (errorDetails != null && errorDetails.getRequestInfo() != null) {
  // Unique request identifier.
  String requestId = errorDetails.getRequestInfo().getRequestId();
}

রিসোর্সের নাম তৈরি করা

ক্লায়েন্ট লাইব্রেরি, আইডি থেকে রিসোর্স নাম তৈরি করার জন্য সহায়ক ক্লাস প্রদান করে।

import com.google.ads.admanager.v1.OrderName;

// ...

//  Constructs a String in the format:
//  "networks/{networkCode}/orders/{orderId}"
OrderName.of("123", "789");

প্রক্সি সেটিংস কনফিগার করা

Java ক্লায়েন্ট লাইব্রেরি http.proxyHost এবং https.proxyHost সিস্টেম প্রপার্টি সেটিংস, দুটিকেই সম্মান করে। এইসব সেটিংস সম্পর্কে আরও জানতে, Java নেটওয়ার্কিং ও প্রক্সি দেখুন।