থার্ড-পার্টি API

Google Ads স্ক্রিপ্টের একটি শক্তিশালী ফিচার হল থার্ড-পার্টি API থেকে ডেটা এবং পরিষেবার সাথে ইন্টিগ্রেট করার ক্ষমতা।

এই গাইডে নিম্নলিখিত ধারণাগুলি কভার করা হয়েছে যা আপনাকে অন্যান্য পরিষেবার সাথে কানেক্ট করার জন্য স্ক্রিপ্ট লিখতে সাহায্য করতে পারে:

  • HTTP অনুরোধ করা: কীভাবে UrlFetchApp ব্যবহার করে এক্সটার্নাল API অ্যাক্সেস করবেন।
  • যাচাইকরণ: আমরা যাচাইকরণের কিছু সাধারণ পরিস্থিতি কভার করি।
  • রেসপন্স পার্স করা: ফেরত আসা JSON ও XML ডেটা কীভাবে প্রসেস করতে হয়।

এছাড়াও, আমরা বেশ কিছু জনপ্রিয় API-এর জন্য স্যাম্পেল অন্তর্ভুক্ত করি যা এইসব ধারণা ব্যাখ্যা করে।

UrlFetchApp-এর মাধ্যমে ডেটা ফেচ করুন

UrlFetchApp থার্ড-পার্টি API-এর সাথে ইন্টার‍্যাক্ট করার জন্য প্রয়োজনীয় মূল কার্যকারিতা প্রদান করে।

নিচের উদাহরণে দেখানো হয়েছে যে কীভাবে OpenWeatherMap থেকে আবহাওয়া সংক্রান্ত ডেটা ফেচ করা হয়। আমরা OpenWeatherMap বেছে নিয়েছি কারণ এর তুলনামূলকভাবে সহজ অনুমোদন স্কিম এবং API।

একটি অনুরোধ জানান

OpenWeatherMap ডকুমেন্টেশন বর্তমান আবহাওয়ার তথ্য জানার জন্য অনুরোধ করার ফর্ম্যাট এইভাবে নির্দিষ্ট করে:

http://api.openweathermap.org/data/2.5/weather?q=[location]&apikey=[apikey]

URL-টি আমাদের অনুমোদনের প্রথম উদাহরণ প্রদান করে: apikey প্যারামিটারটি প্রয়োজন, এবং মান প্রতিটি ব্যবহারকারীর জন্য অনন্য। সাইন-আপ করার মাধ্যমে এই 'কী' পাওয়া যায়।

সাইন-আপ করার পরে, 'কী' ব্যবহার করে অনুরোধ এইভাবে ইস্যু করা যেতে পারে:

const location = 'London,uk';
const apikey = 'da.......................81'; // Replace with your API key
const currentWeatherUrl = `http://api.openweathermap.org/data/2.5/weather?q=${location}&apiKey=${apiKey}`;
const response = UrlFetchApp.fetch(currentWeatherUrl);
console.log(response.getContentText());

এই কোডটি এক্সিকিউট করলে, Google Ads স্ক্রিপ্টের লগিং উইন্ডোতে JSON টেক্সটের একটি দীর্ঘ স্ট্রিং লেখা হয়।

পরবর্তী ধাপ হল এটিকে এমন একটি ফর্ম্যাটে কনভার্ট করা যা আপনার স্ক্রিপ্টের মধ্যে ব্যবহার করা যেতে পারে।

JSON ডেটা

অনেক API, JSON ফর্ম্যাটে উত্তর দেয়। এটি JavaScript অবজেক্টের সিরিয়ালাইজেশনকে দেখায়, যাতে অবজেক্ট, অ্যারে ও বেসিক ধরনকে স্ট্রিং হিসেবে দেখানো ও ট্রান্সফার করা যায়।

OpenWeatherMap থেকে পাওয়া JSON স্ট্রিংয়ের মতো কোনও স্ট্রিংকে জাভাস্ক্রিপ্ট অবজেক্টে কনভার্ট করতে, বিল্ট-ইন JSON.parse পদ্ধতি ব্যবহার করুন। আগের উদাহরণ থেকে চালিয়ে যাওয়া:

const json = response.getContentText();
const weatherData = JSON.parse(json);
console.log(weatherData.name);
//  "London"

JSON.parse পদ্ধতি স্ট্রিংকে অবজেক্টে কনভার্ট করে, যার একটি প্রপার্টি name আছে।

বিভিন্ন ফর্ম্যাটে API রেসপন্স নিয়ে কাজ করার বিষয়ে আরও জানতে রেসপন্স পার্স করুন বিভাগ দেখুন।

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

স্ক্রিপ্টে থার্ড-পার্টি API নিয়ে কাজ করার সময় সমস্যা সমাধান করা একটি গুরুত্বপূর্ণ বিষয়, কারণ থার্ড-পার্টি API প্রায়শই পরিবর্তন হয় এবং অপ্রত্যাশিত রেসপন্স ভ্যালু তৈরি করে, যেমন:

  • API-এর URL বা প্যারামিটার আপনার অজান্তেই পরিবর্তন হতে পারে।
  • আপনার API কী (বা অন্য ব্যবহারকারীর ক্রেডেনশিয়াল) মেয়াদ শেষ হয়ে যেতে পারে।
  • কোনও বিজ্ঞপ্তি ছাড়াই উত্তরের ফর্ম্যাট পরিবর্তন হতে পারে।

HTTP স্ট্যাটাস কোড

অপ্রত্যাশিত রেসপন্সের সম্ভাবনা থাকায়, আপনাকে HTTP স্ট্যাটাস কোড চেক করতে হবে। ডিফল্ট হিসেবে, HTTP সমস্যার কোড দেখা গেলে UrlFetchApp একটি ব্যতিক্রম থ্রো করবে। এই আচরণ পরিবর্তন করতে, নিম্নলিখিত উদাহরণের মতো একটি ঐচ্ছিক প্যারামিটার পাস করা প্রয়োজন:

const options = {
  muteHttpExceptions: true
}
const response = UrlFetchApp.fetch(url, options);
// Any status code greater or equal to 400 is either a client or server error.
if (response.getResponseCode() >= 400) {
  // Error encountered, send an email alert to the developer
  sendFailureEmail();
}

উত্তরের স্ট্রাকচার

থার্ড-পার্টি API পরিবর্তন হলে, আপনার স্ক্রিপ্টকে প্রভাবিত করতে পারে এমন পরিবর্তন সম্পর্কে আপনি হয়ত সাথে সাথে জানতে পারবেন না। যেমন, OpenWeatherMap-এর উদাহরণে দেখানো name প্রপার্টি পরিবর্তন করে locationName করা হলে, এই প্রপার্টি ব্যবহার করা স্ক্রিপ্ট কাজ করবে না।

এই কারণে, রিটার্ন করা স্ট্রাকচারটি প্রত্যাশিত কিনা তা পরীক্ষা করা উপকারী হতে পারে, যেমন:

const weatherData = JSON.parse(json);
if (weatherData && weatherData.name) {
  console.log('Location is : ' + name);
} else {
  console.log('Data not in expected format');
}

UrlFetchApp-এর মাধ্যমে POST ডেটা

OpenWeatherMap-এর সাথে ভূমিকা সংক্রান্ত উদাহরণ শুধুমাত্র ডেটা ফেচ করেছে। সাধারণত, যেসব API কল রিমোট সার্ভারে স্টেট পরিবর্তন করে না, সেগুলি HTTP GET পদ্ধতি ব্যবহার করে।

UrlFetchApp-এর জন্য GET পদ্ধতি ডিফল্ট হিসেবে সেট করা থাকে। তবে, কিছু API কল, যেমন এসএমএস মেসেজ পাঠায় এমন পরিষেবায় কল করার জন্য, অন্যান্য পদ্ধতির প্রয়োজন হবে, যেমন POST বা PUT।

UrlFetchApp-এর সাথে POST কল ব্যবহার করে বোঝাতে, নিম্নলিখিত উদাহরণটি Slack-এর সাথে ইন্টিগ্রেশন দেখায়, যা একটি কোলাবোরেটিভ মেসেজিং অ্যাপ্লিকেশন, Slack ব্যবহারকারী এবং গ্রুপে Slack মেসেজ পাঠানোর জন্য।

Slack সেট-আপ করুন

এই নির্দেশিকা ধরে নেয় যে আপনি আগেই Slack অ্যাকাউন্টের জন্য সাইন-আপ করেছেন।

আগের উদাহরণে OpenWeatherMap-এর মতো, মেসেজ পাঠানোর সুবিধা চালু করতে টোকেন পাওয়া প্রয়োজন। Slack আপনাকে একটি অনন্য URL প্রদান করে যার মাধ্যমে আপনি নিজের টিমকে মেসেজ পাঠাতে পারেন, এটিকে ইনকামিং ওয়েবহুক বলা হয়।

ইনকামিং ওয়েবহুক ইন্টিগ্রেশন যোগ করুন বিকল্পে ক্লিক করে এবং নির্দেশাবলী অনুসরণ করে ইনকামিং ওয়েবহুক সেট-আপ করুন। এই প্রক্রিয়াটি মেসেজ পাঠানোর জন্য একটি URL ইস্যু করবে।

পোস্ট রিকোয়েস্ট করা

আপনার ইনকামিং ওয়েবহুক সেট-আপ করার পরে, POST অনুরোধ করার জন্য UrlFetchApp.fetch-এ পাস করা options প্যারামিটারে কিছু অতিরিক্ত প্রপার্টি ব্যবহার করতে হবে:

  • method: যেমন উল্লেখ করা হয়েছে, এটি ডিফল্ট হিসেবে GET-এ সেট করা থাকে, তবে এখানে আমরা এটিকে ওভাররাইড করে POST-এ সেট করেছি।
  • payload: POST অনুরোধের অংশ হিসেবে এই ডেটা সার্ভারে পাঠানো হবে। এই উদাহরণে, Slack একটি অবজেক্টকে JSON ফর্ম্যাটে সিরিয়ালাইজ করতে চায় যেমন Slack ডকুমেন্টেশনে বর্ণনা করা হয়েছে। এর জন্য, [JSON.stringify][json-stringify-url] পদ্ধতি ব্যবহার করা হয় এবং Content-Type-কে application/json-এ সেট করা হয়।

      // Change the URL for the one issued to you from 'Setting up Slack'.
      const SLACK_URL = 'https://hooks.slack.com/services/AAAA/BBBB/CCCCCCCCCC';
      const slackMessage = {
        text: 'Hello, slack!'
      };
    
      const options = {
        method: 'POST',
        contentType: 'application/json',
        payload: JSON.stringify(slackMessage)
      };
      UrlFetchApp.fetch(SLACK_URL, options);
    

Slack-এর বড় করা উদাহরণ

Slack-এ ইনকামিং মেসেজ চালু করার জন্য প্রয়োজনীয় ন্যূনতম কোড আগের উদাহরণে দেখানো হয়েছে। একটি বর্ধিত স্যাম্পেল ক্যাম্পেনের পারফর্ম্যান্স রিপোর্ট তৈরি করা এবং একটি গ্রুপে পাঠানো, সেইসাথে কিছু ফর্ম্যাটিং এবং ডিসপ্লে বিকল্পের উদাহরণ দেয়।

ইনকামিং মেসেজ

Slack মেসেজ সম্পর্কে আরও জানতে Slack ডকুমেন্টেশনে মেসেজ ফর্ম্যাটিং দেখুন।

ফর্ম ডেটা

আগের উদাহরণে POST অনুরোধের জন্য payload প্রপার্টি হিসেবে JSON স্ট্রিং ব্যবহার করা দেখানো হয়েছে।

payload-এর ফর্ম্যাটের উপর নির্ভর করে, UrlFetchApp POST অনুরোধ তৈরি করার জন্য বিভিন্ন পদ্ধতি গ্রহণ করে:

  • payload স্ট্রিং হলে, স্ট্রিং আর্গুমেন্ট অনুরোধের বডি হিসেবে পাঠানো হয়।
  • payload যখন কোনও অবজেক্ট হয়, যেমন ভ্যালুর ম্যাপ:

    {to: 'mail@example.com', subject:'Test', body:'Hello, World!'}
    

    কী-ভ্যালু পেয়ার ফর্ম-ডেটাতে কনভার্ট করা হয়:

    subject=Test&to=mail@example.com&body=Hello,+World!
    

    এছাড়াও, অনুরোধের জন্য Content-Type হেডার application/x-www-form-urlencoded-এ সেট করা আছে।

POST অনুরোধ জমা দেওয়ার সময় কিছু API-এর ক্ষেত্রে ফর্ম ডেটা ব্যবহার করতে হয়, তাই JavaScript অবজেক্ট থেকে ফর্ম ডেটায় অটোমেটিক কনভার্ট করার বিষয়টি মনে রাখা প্রয়োজন।

HTTP বেসিক যাচাইকরণ

HTTP বেসিক যাচাইকরণ হল যাচাইকরণের সবচেয়ে সহজ ফর্মগুলির মধ্যে একটি এবং এটি অনেক API দ্বারা ব্যবহৃত হয়।

প্রতিটি অনুরোধে HTTP হেডারে এনকোড করা ইউজারনেম ও পাসওয়ার্ড অ্যাটাচ করার মাধ্যমে যাচাইকরণ করা হয়।

HTTP বেসিক যাচাইকরণ

অনুরোধ তৈরি করা

যাচাই করা অনুরোধ তৈরি করতে নিম্নলিখিত ধাপগুলি অনুসরণ করতে হবে:

  1. ইউজারনেম ও পাসওয়ার্ড কোলন দিয়ে একসাথে যুক্ত করে পাসফ্রেজ তৈরি করুন, যেমন username:password।
  2. Base64 পাসফ্রেজ এনকোড করে, যেমন username:password হয়ে যায় dXNlcm5hbWU6cGFzc3dvcmQ=।
  3. অনুরোধে Authorization হেডার অ্যাটাচ করুন, Authorization: Basic <encoded passphrase> ফর্মে

Google Ads স্ক্রিপ্টে এটি কীভাবে করা যায় তা নিম্নলিখিত স্নিপেট থেকে বোঝা যাবে:

const USERNAME = 'your_username';
const PASSWORD = 'your_password';
const API_URL = 'http://<place_api_url_here>';

const authHeader = 'Basic ' + Utilities.base64Encode(USERNAME + ':' + PASSWORD);
const options = {
  headers: {Authorization: authHeader}
}
// Include 'options' object in every request
const response = UrlFetchApp.fetch(API_URL, options);

সাধারণ যাচাইকরণের স্যাম্পেল

কোডের নমুনা বিভাগে দুটি নমুনা আছে যা HTTP বেসিক অথেন্টিকেশন ব্যবহার করে:

Plivo

Plivo হল এমন একটি পরিষেবা যা তাদের API-এর মাধ্যমে এসএমএস মেসেজ পাঠানো এবং রিসিভ করার সুবিধা প্রদান করে। এই স্যাম্পেল মেসেজ পাঠানোর প্রক্রিয়া ব্যাখ্যা করে।

  1. Plivo-এর সাথে রেজিস্টার করুন।
  2. Google Ads-এ নতুন স্ক্রিপ্টে স্যাম্পেল স্ক্রিপ্ট পেস্ট করুন।
  3. PLIVO_ACCOUNT_AUTHID এবং PLIVO_ACCOUNT_AUTHTOKEN ভ্যালু ম্যানেজমেন্ট ড্যাশবোর্ড থেকে পাওয়া ভ্যালু দিয়ে পরিবর্তন করুন।
  4. স্ক্রিপ্টে যেভাবে উল্লেখ করা আছে সেইভাবে আপনার ইমেল আইডি লিখুন যাতে কোনও সমস্যা হলে আপনাকে বিজ্ঞপ্তি পাঠানো যায়।
  5. Plivo ব্যবহার করতে, আপনাকে নম্বর কিনতে হবে অথবা ট্রায়াল অ্যাকাউন্টে নম্বর যোগ করতে হবে। ট্রায়াল অ্যাকাউন্টের সাথে ব্যবহার করা যেতে পারে এমন স্যান্ডবক্স নম্বর যোগ করুন।
  6. প্রেরক হিসেবে যে নম্বরটি দেখানো হবে এবং প্রাপকের নম্বর, দুটিই যোগ করুন।
  7. স্ক্রিপ্টে PLIVO_SRC_PHONE_NUMBER আপডেট করে এইমাত্র রেজিস্টার করা স্যান্ডবক্স নম্বরগুলির একটিতে পরিবর্তন করুন। এতে আন্তর্জাতিক দেশের কোড অন্তর্ভুক্ত থাকতে হবে, যেমন যুক্তরাজ্যের নম্বরের জন্য 447777123456।

Twilio

Twilio হল আরেকটি পরিষেবা যা তাদের API-এর মাধ্যমে এসএমএস মেসেজ পাঠানো এবং গ্রহণ করার সুবিধা প্রদান করে। এই স্যাম্পেল মেসেজ পাঠানোর প্রক্রিয়া ব্যাখ্যা করে।

  1. Twillio-এর সাথে রেজিস্টার করুন।
  2. Google Ads-এ নতুন স্ক্রিপ্টে স্যাম্পেল স্ক্রিপ্ট পেস্ট করুন।
  3. TWILIO_ACCOUNT_SID এবং TWILIO_ACCOUNT_AUTHTOKEN ভ্যালুর জায়গায় অ্যাকাউন্ট কনসোল পৃষ্ঠায় দেখানো ভ্যালু লিখুন।
  4. TWILIO_SRC_PHONE_NUMBER-এর জায়গায় ড্যাশবোর্ড থেকে পাওয়া নম্বরটি লিখুন--এটি হল মেসেজ পাঠানোর জন্য Twilio-র অনুমোদিত নম্বর।

OAuth 1.0

অনেক জনপ্রিয় পরিষেবা যাচাইকরণের জন্য OAuth ব্যবহার করে। OAuth-এর বিভিন্ন ফ্লেভার ও ভার্সন আছে।

HTTP বেসিক যাচাইকরণ-এর ক্ষেত্রে ব্যবহারকারীর শুধুমাত্র একটি ইউজারনেম ও পাসওয়ার্ড থাকে, কিন্তু OAuth-এর মাধ্যমে থার্ড-পার্টি অ্যাপ্লিকেশনকে ব্যবহারকারীর অ্যাকাউন্ট ও ডেটা অ্যাক্সেস করার অনুমতি দেওয়া যায়, এর জন্য থার্ড-পার্টি অ্যাপ্লিকেশনের নির্দিষ্ট ক্রেডেনশিয়াল ব্যবহার করা হয়। এছাড়াও, অ্যাক্সেসের সীমাও সেই অ্যাপ্লিকেশনের জন্য নির্দিষ্ট হবে।

OAuth 1.0 সম্পর্কে আরও জানতে, OAuth Core গাইড দেখুন। বিশেষ করে, ৬ দেখুন। OAuth-এর মাধ্যমে যাচাই করা হচ্ছে। সম্পূর্ণ থ্রি-লেগড OAuth 1.0-এ, প্রসেসটি এইরকম:

  1. অ্যাপ্লিকেশন ("গ্রাহক") একটি অনুরোধ টোকেন পায়।
  2. ব্যবহারকারী অনুরোধ টোকেন অনুমোদন করেন।
  3. অ্যাপ্লিকেশনটি অ্যাক্সেস টোকেনের জন্য অনুরোধ টোকেনটি এক্সচেঞ্জ করে।
  4. পরবর্তী সব রিসোর্স অনুরোধের জন্য, অ্যাক্সেস টোকেন একটি স্বাক্ষরিত অনুরোধে ব্যবহার করা হয়।

থার্ড-পার্টি পরিষেবার জন্য ব্যবহারকারীর ইন্টার‍্যাকশন ছাড়া OAuth 1.0 ব্যবহার করতে (যেমন Google Ads স্ক্রিপ্টের জন্য প্রয়োজন হবে) ধাপ ১, ২ এবং ৩ সম্ভব নয়। তাই, কিছু পরিষেবা তাদের কনফিগারেশন কনসোল থেকে একটি অ্যাক্সেস টোকেন ইস্যু করে, যা অ্যাপ্লিকেশনটিকে সরাসরি ধাপ ৪-এ যেতে দেয়। এটি ওয়ান-লেগড OAuth 1.0 নামে পরিচিত।

OAuth1

Google Ads স্ক্রিপ্টে OAuth 1.0

Google Ads স্ক্রিপ্টের ক্ষেত্রে, প্রতিটি স্ক্রিপ্টকে সাধারণত একটি অ্যাপ্লিকেশন হিসেবে ব্যাখ্যা করা হয়। পরিষেবার জন্য কনসোল বা অ্যাডমিনিস্ট্রেশন সেটিংস পৃষ্ঠার মাধ্যমে, সাধারণত এগুলি করা প্রয়োজন:

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

OAuth 2.0

ব্যবহারকারীর ডেটায় অ্যাক্সেস দিতে জনপ্রিয় API-তে OAuth 2.0 ব্যবহার করা হয়। কোনও থার্ড-পার্টি পরিষেবার অ্যাকাউন্টের মালিক নির্দিষ্ট অ্যাপ্লিকেশনকে ব্যবহারকারীর ডেটা অ্যাক্সেস করার অনুমতি দেন। মালিকের সুবিধা হল:

  • অ্যাপ্লিকেশনের সাথে তাদের অ্যাকাউন্ট ক্রেডেনশিয়াল শেয়ার করতে হবে না।
  • কোন কোন অ্যাপ্লিকেশন ডেটা অ্যাক্সেস করতে পারবে এবং কতটা অ্যাক্সেস করতে পারবে তা আলাদাভাবে নিয়ন্ত্রণ করতে পারে। (যেমন, শুধু পড়ার অ্যাক্সেস দেওয়া হতে পারে অথবা ডেটার সাবসেটের অ্যাক্সেস দেওয়া হতে পারে।)

Google Ads স্ক্রিপ্টে OAuth 2.0-চালু করা পরিষেবা ব্যবহার করতে, কয়েকটি ধাপ রয়েছে:

আপনার স্ক্রিপ্টের বাইরে

থার্ড-পার্টি API-এর মাধ্যমে আপনার ব্যবহারকারীর ডেটা অ্যাক্সেস করার জন্য Google Ads স্ক্রিপ্টকে অনুমোদন দিন। বেশিরভাগ ক্ষেত্রে, এর জন্য থার্ড-পার্টি পরিষেবার কনসোলে একটি অ্যাপ্লিকেশন সেট-আপ করতে হবে। এই অ্যাপ্লিকেশন আপনার স্ক্রিপ্টকে দেখায়।

Google Ads স্ক্রিপ্ট অ্যাপ্লিকেশনকে কোন অ্যাক্সেস অধিকার দেওয়া উচিত তা আপনি নির্দিষ্ট করেন এবং সাধারণত এটিকে একটি ক্লায়েন্ট আইডি অ্যাসাইন করা হবে। এর ফলে, আপনি OAuth 2.0-এর মাধ্যমে, থার্ড-পার্টি পরিষেবায় আপনার ডেটা কোন কোন অ্যাপ্লিকেশনের অ্যাক্সেস আছে এবং সেই ডেটার কোন কোন দিক তারা দেখতে বা পরিবর্তন করতে পারে তা নিয়ন্ত্রণ করতে পারবেন।

আপনার স্ক্রিপ্টে

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

API অনুরোধ করা। প্রতিটি অনুরোধের সাথে অ্যাক্সেস টোকেন পাস করুন।

অনুমোদন ফ্লো

প্রতিটি গ্র্যান্ট টাইপ এবং সংশ্লিষ্ট ফ্লো বিভিন্ন ব্যবহারের পরিস্থিতি পূরণ করে। যেমন, ব্যবহারকারী কোনও ইন্টার‍্যাক্টিভ সেশনে অংশগ্রহণ করলে, ব্যাকগ্রাউন্ডে কোনও অ্যাপ্লিকেশন চালানোর জন্য প্রয়োজনীয় পরিস্থিতির তুলনায় আলাদা ফ্লো ব্যবহার করা হয়।

API প্রদানকারী সিদ্ধান্ত নেবে যে তারা কোন গ্র্যান্ট টাইপ গ্রহণ করবে এবং এটি ব্যবহারকারীকে তাদের API ইন্টিগ্রেট করার ব্যাপারে নির্দেশ দেবে।

প্রয়োগ

সব ধরনের OAuth ফ্লোয়ের ক্ষেত্রে, অ্যাক্সেস টোকেন পাওয়াটাই হল মূল লক্ষ্য, যা সেশনের বাকি অংশে অনুরোধ যাচাই করার জন্য ব্যবহার করা যেতে পারে।

স্যাম্পেল লাইব্রেরি, প্রতিটি আলাদা ফ্লো টাইপের জন্য কীভাবে যাচাই করতে হয় তা ব্যাখ্যা করে। এইসব পদ্ধতির প্রতিটি এমন একটি অবজেক্ট রিটার্ন করে যা অ্যাক্সেস টোকেন পায় ও স্টোর করে এবং যাচাই করা অনুরোধের সুবিধা প্রদান করে।

সাধারণত যেভাবে ব্যবহার করা হয়:

// Authenticate using chosen flow type
const urlFetchObj = OAuth2.<flow method>(args);
// Make request(s) using obtained object.
const response1 = urlFetchObj.fetch(url1);
const response2 = urlFetchObj.fetch(url2, options);

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

[ক্লায়েন্ট ক্রেডেনশিয়াল গ্র্যান্ট][client-credentials-rfc] হল OAuth2 ফ্লোয়ের একটি সহজ ফর্ম, যেখানে অ্যাপ্লিকেশন একটি আইডি এবং সিক্রেট এক্সচেঞ্জ করে, যা অ্যাপ্লিকেশনের জন্য অনন্য, বিনিময়ে একটি সীমিত সময়ের অ্যাক্সেস টোকেন ইস্যু করা হয়।

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

// Access token is obtained and cached.
const authUrlFetch = OAuth2.withClientCredentials(
    tokenUrl, clientId, clientSecret, optionalScope));
// Use access token in each request
const response = authUrlFetch.fetch(url);
// ... use response

রিফ্রেশ টোকেন গ্রান্ট

রিফ্রেশ টোকেন গ্র্যান্ট ক্লায়েন্ট ক্রেডেনশিয়াল গ্র্যান্টের মতোই, যেখানে সার্ভারে করা অনুরোধের উত্তরে একটি অ্যাক্সেস টোকেন পাওয়া যায় যা সেশনে ব্যবহার করা যেতে পারে।

রিফ্রেশ টোকেন

রিফ্রেশ টোকেন পাওয়া

রিফ্রেশ টোকেন গ্র্যান্টের সাথে পার্থক্য হল, ক্লায়েন্ট ক্রেডেনশিয়াল গ্র্যান্টের জন্য প্রয়োজনীয় বিবরণ অ্যাপ্লিকেশন কনফিগারেশন থেকে আসে (যেমন, পরিষেবার কন্ট্রোল প্যানেলে), রিফ্রেশ টোকেন আরও জটিল ফ্লোয়ের অংশ হিসেবে গ্র্যান্ট করা হয়, যেমন [অনুমোদন কোড গ্র্যান্ট][authorization-code-rfc], যার জন্য ব্যবহারকারীর ইন্টার‍্যাকশন প্রয়োজন:

অনুমোদন কোড

রিফ্রেশ টোকেন পেতে OAuth Playground ব্যবহার করা

OAuth2 প্লেগ্রাউন্ড একটি UI প্রদান করে যা ব্যবহারকারীকে রিফ্রেশ টোকেন পেতে অনুমোদন কোড অনুদানের মাধ্যমে এগিয়ে যেতে দেয়।

উপরের ডানদিকে সেটিংস বোতামটি আপনাকে OAuth ফ্লোতে ব্যবহার করার জন্য সমস্ত প্যারামিটার নির্ধারণ করতে দেয়, যার মধ্যে রয়েছে:

  • অনুমোদনের এন্ডপয়েন্ট: অনুমোদনের জন্য ফ্লো শুরু করতে ব্যবহার করা হয়।
  • টোকেন এন্ডপয়েন্ট: অ্যাক্সেস টোকেন পেতে রিফ্রেশ টোকেন-এর সাথে ব্যবহার করা হয়।
  • ক্লায়েন্ট আইডি ও সিক্রেট: অ্যাপ্লিকেশনের ক্রেডেনশিয়াল।

    OAuth Playground

রিফ্রেশ টোকেনের ব্যবহার

প্রাথমিক অনুমোদন হয়ে গেলে, পরিষেবাগুলি একটি রিফ্রেশ টোকেন ইস্যু করতে পারে যা পরে ক্লায়েন্ট ক্রেডেনশিয়াল ফ্লোয়ের মতো একইভাবে ব্যবহার করা যেতে পারে:

const authUrlFetch = OAuth2.withRefreshToken(tokenUrl, clientId, clientSecret,
    refreshToken, optionalScope);
const response = authUrlFetch.fetch(url);
// ... use response

Search Ads 360-এর উদাহরণ

Search Ads 360 হল এমন একটি API-এর উদাহরণ যা রিফ্রেশ টোকেনের সাথে ব্যবহার করা যেতে পারে। এই স্যাম্পেলে, একটি স্ক্রিপ্ট রিপোর্ট জেনারেট করে এবং ফেরত দেয়। অন্যান্য যেসব অ্যাকশন করা যেতে পারে তার সম্পূর্ণ বিবরণ পেতে Search Ads 360 API রেফারেন্স দেখুন।

স্ক্রিপ্ট তৈরি করুন
  1. Google Cloud কনসোলে নতুন প্রোজেক্ট তৈরি করুন এবং Search Ads 360 গাইডে উল্লেখ করা পদ্ধতি অনুসরণ করে ক্লায়েন্ট আইডি, ক্লায়েন্ট সিক্রেট ও রিফ্রেশ টোকেন পান। Search Ads 360 API চালু করেছেন কিনা তা নিশ্চিত করুন।
  2. Google Ads-এ নতুন স্ক্রিপ্টে [স্যাম্পেল স্ক্রিপ্ট][search-ads-360-example] পেস্ট করুন।
  3. কোড তালিকার নিচে [sample OAuth2 library][oauth20-library-example] পেস্ট করুন।
  4. ক্লায়েন্ট আইডি, ক্লায়েন্ট সিক্রেট ও রিফ্রেশ টোকেনের সঠিক ভ্যালু যোগ করার জন্য স্ক্রিপ্ট সংশোধন করুন।

Apps Script Execution API-এর উদাহরণ

এই উদাহরণে Apps Script Execution API ব্যবহার করে Apps Script-এ ফাংশন এক্সিকিউট করার পদ্ধতি দেখানো হয়েছে। এটি আপনাকে Google Ads স্ক্রিপ্ট থেকে Apps স্ক্রিপ্ট কল করতে দেয়।

একটি অ্যাপ্স স্ক্রিপ্ট স্ক্রিপ্ট তৈরি করুন

নতুন স্ক্রিপ্ট তৈরি করুন। নিম্নলিখিত স্যাম্পেল Drive থেকে ১০টি ফাইল তালিকাভুক্ত করবে:

function listFiles() {
  const limit = 10;
  const files = [];
  const fileIterator = DriveApp.getFiles();
  while (fileIterator.hasNext() && limit) {
    files.push(fileIterator.next().getName());
    limit--;
  }
  return files;
}
এক্সিকিউশনের জন্য Apps Script কনফিগার করুন
  1. স্ক্রিপ্ট সেভ করুন।
  2. রিসোর্স > Cloud Platform প্রোজেক্ট বিকল্পে ক্লিক করুন।
  3. Google Cloud Console-এ নেভিগেট করতে প্রোজেক্টের নামে ক্লিক করুন।
  4. API ও পরিষেবা বিকল্পে নেভিগেট করুন।
  5. উপযুক্ত API চালু করুন, এই ক্ষেত্রে Drive API এবং Apps Script Execution API।
  6. মেনুর ক্রেডেনশিয়াল আইটেম থেকে OAuth ক্রেডেনশিয়াল তৈরি করুন।
  7. আপনার স্ক্রিপ্টে ফিরে যান, প্রকাশ করুন > API এক্সিকিউটেবল হিসেবে ডিপ্লয় করুন বিকল্প থেকে এক্সিকিউশনের জন্য স্ক্রিপ্টটি প্রকাশ করুন।
Google Ads স্ক্রিপ্ট তৈরি করা
  1. Google Ads-এ নতুন স্ক্রিপ্টে স্যাম্পেল স্ক্রিপ্ট পেস্ট করুন।
  2. এছাড়াও, কোড তালিকার নিচে [sample OAuth2 library][oauth20-library-example] পেস্ট করুন।
  3. ক্লায়েন্ট আইডি, ক্লায়েন্ট সিক্রেট ও রিফ্রেশ টোকেনের সঠিক ভ্যালু যোগ করার জন্য স্ক্রিপ্ট সংশোধন করুন।

পরিষেবা অ্যাকাউন্ট

গ্র্যান্ট টাইপের বিকল্প হল পরিষেবা অ্যাকাউন্ট-এর ধারণা।

সার্ভিস অ্যাকাউন্ট গ্র্যান্ট টাইপের থেকে আলাদা কারণ এটি ব্যবহারকারীর ডেটা অ্যাক্সেস করার জন্য ব্যবহার করা হয় না: যাচাইকরণের পরে, অ্যাপ্লিকেশনের পক্ষ থেকে সার্ভিস অ্যাকাউন্ট অনুরোধ করে, প্রজেক্টের মালিক হতে পারেন এমন ব্যবহারকারী হিসেবে নয়। যেমন, কোনও ফাইল তৈরি করার জন্য পরিষেবা অ্যাকাউন্ট যদি Drive API ব্যবহার করে, তাহলে ফাইলটি পরিষেবা অ্যাকাউন্টের অধীনে থাকবে এবং ডিফল্ট হিসেবে প্রোজেক্টের মালিক সেটি অ্যাক্সেস করতে পারবেন না।

Google ন্যাচারাল ল্যাঙ্গুয়েজ API-এর উদাহরণ

[ন্যাচারাল ল্যাঙ্গুয়েজ API][natural-language-api-docs] টেক্সটের জন্য [সেন্টিমেন্ট বিশ্লেষণ][sentiment-analysis-api-docs] এবং [এনটিটি বিশ্লেষণ][entity-analysis-api-docs] প্রদান করে।

এই উদাহরণটি বিজ্ঞাপনের টেক্সটের জন্য [সেন্টিমেন্ট][sentiment-api-docs] গণনা করার পদ্ধতি ব্যাখ্যা করে—যার মধ্যে শিরোনাম বা বিবরণ অন্তর্ভুক্ত। এটি মেসেজটি কতটা ইতিবাচক এবং মেসেজের পরিমাপের একটি পরিমাপ প্রদান করে: কোনটি ভাল, আমরা কেক বিক্রি করি বা আমরা লন্ডনে সেরা কেক বিক্রি করি। আজই কিনুন!?

স্ক্রিপ্ট সেট-আপ করুন
  1. Google Cloud কনসোল-এ নতুন প্রোজেক্ট তৈরি করুন।
  2. [Natural Language API][natural-language-api] চালু করুন।
  3. প্রোজেক্টের জন্য বিলিং চালু করুন।
  4. [পরিষেবা অ্যাকাউন্ট তৈরি করুন][create-service-account]। ক্রেডেনশিয়াল JSON ফাইল ডাউনলোড করুন।
  5. Google Ads-এ নতুন স্ক্রিপ্টে [স্যাম্পেল স্ক্রিপ্ট][natural-language-example] পেস্ট করুন।
  6. এছাড়াও, কোড তালিকার নিচে [sample OAuth2 library][oauth20-library-example] পেস্ট করুন।
  7. প্রয়োজনীয় ভ্যালু পরিবর্তন করুন:
    • serviceAccount: পরিষেবা অ্যাকাউন্টের ইমেল আইডি, যেমন xxxxx@yyyy.iam.gserviceaccount.com।
    • key: পরিষেবা অ্যাকাউন্ট তৈরি করার সময় ডাউনলোড করা JSON ফাইল থেকে পাওয়া কী। -----BEGIN PRIVATE KEY...-এ শুরু হয়ে ...END PRIVATE KEY-----\n-এ শেষ হবে।

API রেসপন্স

API বিভিন্ন ফর্ম্যাটে ডেটা দেখাতে পারে। এর মধ্যে সবচেয়ে উল্লেখযোগ্য হল XML ও JSON।

JSON

রেসপন্স ফর্ম্যাট হিসেবে কাজ করার জন্য JSON সাধারণত XML-এর চেয়ে সহজ। তবে, এখনও কিছু সমস্যা হতে পারে।

উত্তর যাচাইকরণ

API-তে কল করার পরে সঠিক উত্তর পাওয়ার পরে, সাধারণত পরবর্তী ধাপ হল JSON.parse ব্যবহার করে JSON স্ট্রিংকে JavaScript অবজেক্টে পরিবর্তন করা। এই পর্যায়ে, পার্সিং ব্যর্থ হলে, সেই কেসটি হ্যান্ডেল করা বুদ্ধিমানের কাজ হবে:

const json = response.getContentText();
try {
  const data = JSON.parse(json);
  return data;
} catch(e) {
  // Parsing of JSON failed - handle error.
}

এছাড়াও, API আপনার নিয়ন্ত্রণে না থাকলে, মনে রাখবেন যে উত্তরের স্ট্রাকচার পরিবর্তন হতে পারে এবং প্রপার্টি আর নাও থাকতে পারে:

// Less good approach
// Assumes JSON was in form {"queryResponse": ...} when parsed.
const answer = data.queryResponse;

// Better approach
if (data && data.queryResponse) {
  const answer = data.queryResponse;
} else {
  // Format of API response has changed - alert developer or handle accordingly
}

XML

XmlService আপনার স্ক্রিপ্টকে XML রেসপন্স বডি থেকে ডেটা পার্স ও এক্সট্র্যাক্ট করার অনুমতি দেয়।

যাচাইকরণ

API তৈরি করার জন্য XML এখনও একটি জনপ্রিয় ফর্ম্যাট। API কল থেকে পাওয়া উত্তর XmlService parse পদ্ধতি ব্যবহার করে পার্স করা যেতে পারে:

const responseText = response.getContentText();
try {
  const document = XmlService.parse(responseText);
} catch(e) {
  // Error in XML representation - handle accordingly.
}

XmlService.parse XML-এ সমস্যা শনাক্ত করে এবং সেই অনুযায়ী ব্যতিক্রম দেখায়, তবে এটি স্কিমার সাথে XML যাচাই করার সুবিধা প্রদান করে না।

রুট এলিমেন্ট

XML ডকুমেন্ট সফলভাবে পার্স করার পরে, getRootElement() পদ্ধতি ব্যবহার করে রুট এলিমেন্ট পাওয়া যায়:

const document = XmlService.parse(responseText);
const rootElement = document.getRootElement();

নেমস্পেস

নিচের উদাহরণে, বেছে নেওয়া ম্যাচের জন্য ফুটবল খেলার ফলাফল পেতে Sportradar API ব্যবহার করা হয়েছে। XML রেসপন্স নিম্নলিখিত ফর্ম্যাট অনুসরণ করে:

<schedule_schedules xmlns="http://schemas.sportradar.com/sportsapi/soccer/v4">
  <schedule>
     ...
  </schedule>
</schedule_schedules>

রুট এলিমেন্টে কীভাবে নেমস্পেস নির্দিষ্ট করা হয়েছে তা লক্ষ্য করুন। এই কারণে, এটি প্রয়োজনীয়:

  • ডকুমেন্ট থেকে নেমস্পেস অ্যাট্রিবিউট এক্সট্র্যাক্ট করুন।
  • চাইল্ড এলিমেন্ট ট্রাভার্স ও অ্যাক্সেস করার সময় এই নেমস্পেস ব্যবহার করুন।

নিম্নলিখিত স্যাম্পেল থেকে জানা যায় যে, কীভাবে <schedule> এলিমেন্ট অ্যাক্সেস করতে হয় এবং আগের ডকুমেন্ট স্নিপেটে এর <sport_event> চাইল্ড এলিমেন্ট খুঁজতে হয়:

const document = XmlService.parse(xmlText);
const rootElement = document.getRootElement();
// The namespace is required for accessing child elements in the schema.
const namespace = rootElement.getNamespace();
const scheduleElement = rootElement.getChild('schedule', namespace);
const sportEvents = scheduleElement.getChildren('sport_event', namespace);

ভ্যালু পান

ফুটবল শিডিউল থেকে স্যাম্পেল দেওয়া হল:

<sport_event_status status="..." ... />

অ্যাট্রিবিউট ফিরিয়ে আনা যেতে পারে, যেমন:

const statusElement = sportEventElement.getChild('sport_event_status', namespace);
const status = statusElement.getAttribute('status').getValue();

getText() ব্যবহার করে কোনও এলিমেন্টের মধ্যে থাকা টেক্সট পড়া যেতে পারে, তবে কোনও এলিমেন্টের একাধিক চাইল্ড টেক্সট থাকলে, সেগুলি কনক্যাটিনেট করা হবে। একাধিক টেক্সট চাইল্ডের সম্ভাবনা থাকলে, getChildren() ব্যবহার করে প্রতিটি চাইল্ডের উপর ইটারেট করার কথা বিবেচনা করুন।

Sportradar-এর উদাহরণ

এই সম্পূর্ণ Sportradar উদাহরণ ফুটবল ম্যাচের বিবরণ, বিশেষ করে ইংলিশ প্রিমিয়ার লিগ ম্যাচের বিবরণ দেখায়। Sportradar-এর অফার করা বিভিন্ন ধরনের স্পোর্টস ফিডের মধ্যে Soccer API অন্যতম।

Sportradar অ্যাকাউন্ট সেট-আপ করা
  1. Sportradar ডেভেলপার সাইটে নেভিগেট করুন
  2. ট্রায়াল অ্যাকাউন্টের জন্য রেজিস্টার করুন।
  3. রেজিস্টার করার পরে, আপনার অ্যাকাউন্টে সাইন-ইন করুন।
  4. লগ-ইন করার পরে, আমার অ্যাকাউন্ট বিকল্পে যান।

Sportradar বিভিন্ন খেলাকে বিভিন্ন API-তে আলাদা করে। যেমন, আপনি হয়তো সকার API-এর অ্যাক্সেস কিনবেন কিন্তু টেনিস API-এর নয়। আপনার তৈরি করা প্রতিটি অ্যাপ্লিকেশনে বিভিন্ন খেলা এবং বিভিন্ন 'কী' থাকতে পারে।

  1. অ্যাপ্লিকেশন বিকল্পের মধ্যে নতুন অ্যাপ্লিকেশন তৈরি করুন বিকল্পে ক্লিক করুন। অ্যাপ্লিকেশনের নাম ও বিবরণ দিন এবং ওয়েবসাইটের ফিল্ডটি এড়িয়ে যান।
  2. শুধু Soccer Trial Europe v2-এর জন্য নতুন কী ইস্যু করুন বিকল্পটি বেছে নিন।
  3. অ্যাপ্লিকেশন রেজিস্টার করুন বিকল্পে ক্লিক করুন।

এটি সম্পূর্ণ হলে, আপনার নতুন API key সহ একটি পৃষ্ঠা দেখতে পাবেন।

  1. Google Ads-এ নতুন স্ক্রিপ্টে স্ক্রিপ্টের স্যাম্পেল পেস্ট করুন।
  2. তালিকায় API কী-এর জায়গায় নতুন ইস্যু করা কী লিখুন এবং ইমেল আইডি ফিল্ড এডিট করুন।

সমস্যার সমাধান

থার্ড-পার্টি API-এর সাথে কাজ করার সময়, বিভিন্ন কারণে সমস্যা হতে পারে, যেমন:

  • API-এর প্রত্যাশিত নয় এমন ফর্ম্যাটে ক্লায়েন্ট সার্ভারে অনুরোধ পাঠাচ্ছে।
  • ক্লায়েন্টরা যে ফর্ম্যাটে উত্তর পেয়েছেন তার থেকে আলাদা ফর্ম্যাটে উত্তর আশা করছেন।
  • ক্লায়েন্ট ভুল টোকেন বা কী ব্যবহার করছেন অথবা ভ্যালু প্লেসহোল্ডার হিসেবে রেখে দিয়েছেন।
  • ক্লায়েন্ট ব্যবহারের সীমায় পৌঁছে যাচ্ছে।
  • ক্লায়েন্ট ভুল প্যারামিটার প্রদান করছে।

এইসব ক্ষেত্রে এবং অন্যান্য ক্ষেত্রে, সমস্যার কারণ শনাক্ত করার জন্য প্রথম ভালো পদক্ষেপ হল যে উত্তরের কারণে সমস্যা হচ্ছে তার বিবরণ পরীক্ষা করা।

উত্তর পার্স করুন

ডিফল্ট হিসেবে, কোনও রেসপন্স যদি এরর (৪০০ বা তার বেশি স্ট্যাটাস কোড) দেখায়, তাহলে Google Ads স্ক্রিপ্ট ইঞ্জিন সেটি বাতিল করে দেবে।

এই আচরণ প্রতিরোধ করতে এবং ত্রুটি ও ত্রুটি মেসেজ যাতে পরীক্ষা করা যায় তার জন্য, ঐচ্ছিক প্যারামিটারের muteHttpExceptions প্রপার্টি UrlFetchApp.fetch-এ সেট করুন। যেমন:

const params = {
  muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(url, params);
if (response.getResponseCode() >= 400) {
  // ... inspect error details...
}

সাধারণ স্ট্যাটাস কোড

  • 200 OK থেকে বোঝা যায় যে এটি সফল হয়েছে। উত্তরে প্রত্যাশিত ডেটা না থাকলে, এগুলি বিবেচনা করুন:

    • কিছু API কোন ফিল্ড, উত্তর ফর্ম্যাট বা দুটিই ব্যবহার করতে হবে তা নির্দিষ্ট করার অনুমতি দেয়। এই বিষয়ে বিস্তারিত জানতে API ডকুমেন্টেশন চেক করুন।
    • একটি API-তে একাধিক রিসোর্স থাকতে পারে যা কল করা যেতে পারে। অন্য কোনও রিসোর্স ব্যবহার করা আরও উপযুক্ত হবে কিনা এবং আপনার প্রয়োজনীয় ডেটা পাওয়া যাবে কিনা তা নির্ধারণ করতে ডকুমেন্টেশন দেখুন।
    • কোড লেখার পর থেকে API পরিবর্তন হয়ে থাকতে পারে। আরও জানতে ডকুমেন্টেশন বা ডেভেলপারের সাথে যোগাযোগ করুন।
  • 400 Bad Request-এর অর্থ হল, সার্ভারে পাঠানো অনুরোধের ফর্ম্যাটিং বা স্ট্রাকচারে কিছু ভুল আছে। অনুরোধটি পরীক্ষা করুন এবং API স্পেসিফিকেশনের সাথে তুলনা করে দেখুন যে এটি প্রত্যাশা অনুযায়ী কাজ করছে কিনা। অনুরোধ কীভাবে পরীক্ষা করতে হয় সেই সম্পর্কে বিস্তারিত জানতে অনুরোধ পরীক্ষা করুন বিকল্প দেখুন।

  • 401 Unauthorized-এর অর্থ হল, সাধারণত অনুমোদন প্রদান বা সম্পূর্ণ না করেই API কল করা হচ্ছে।

    • API যদি প্রাথমিক অনুমোদন ব্যবহার করে, তাহলে নিশ্চিত করুন যে Authorization হেডার তৈরি করা হচ্ছে এবং অনুরোধে সরবরাহ করা হচ্ছে।
    • API যদি OAuth 2.0 ব্যবহার করে, তাহলে দেখে নিন যে অ্যাক্সেস টোকেন পাওয়া গেছে এবং বিয়ারার টোকেন হিসেবে সেটি প্রদান করা হচ্ছে।
    • অনুমোদনের অন্য কোনও ভেরিয়েশনের জন্য, অনুরোধের প্রয়োজনীয় ক্রেডেনশিয়াল প্রদান করা হয়েছে কিনা তা নিশ্চিত করুন।
  • 403 Forbidden থেকে বোঝা যায় যে ব্যবহারকারীর কাছে অনুরোধ করা রিসোর্সের জন্য অনুমতি নেই।

    • ব্যবহারকারীকে প্রয়োজনীয় অনুমতি দেওয়া হয়েছে কিনা তা নিশ্চিত করুন, যেমন, ফাইল-ভিত্তিক অনুরোধে ব্যবহারকারীকে কোনও ফাইলের অ্যাক্সেস দেওয়া।
  • 404 Not Found-এর অর্থ হল, অনুরোধ করা রিসোর্সটি নেই।

    • API এন্ডপয়েন্টের জন্য ব্যবহার করা URL সঠিক কিনা তা চেক করুন।
    • রিসোর্স ফেচ করার সময়, রেফারেন্স করা রিসোর্সটি আছে কিনা তা চেক করুন (যেমন, ফাইল-ভিত্তিক API-এর জন্য ফাইলটি আছে কিনা)।

অনুরোধ পরীক্ষা করুন

API রেসপন্স থেকে যখন বোঝা যায় যে অনুরোধটি সঠিকভাবে তৈরি করা হয়নি, যেমন, 400 স্ট্যাটাস কোড, তখন অনুরোধটি পরীক্ষা করা উপযোগী হয়। অনুরোধ পরীক্ষা করতে সাহায্য করার জন্য, UrlFetchApp-এর fetch() পদ্ধতির একটি কম্প্যানিয়ন পদ্ধতি আছে, যাকে getRequest(url, params) বলা হয়

সার্ভারে অনুরোধ পাঠানোর পরিবর্তে, এই পদ্ধতিটি অনুরোধ তৈরি করে যা পাঠানো হত এবং তারপর এটি ফেরত দেয়। এটি ব্যবহারকারীকে অনুরোধের এলিমেন্ট পরীক্ষা করার অনুমতি দেয় যাতে অনুরোধটি সঠিক দেখায়।

যেমন, আপনার অনুরোধে ফর্ম ডেটা যদি একসাথে কনক্যাটিনেট করা অনেক স্ট্রিং নিয়ে গঠিত হয়, তাহলে সেই ফর্ম ডেটা তৈরি করার জন্য আপনার তৈরি করা ফাংশনে সমস্যা থাকতে পারে। সহজ কথায়:

const request = UrlFetchApp.getRequest(url, params);
console.log(request);
// Now make the fetch:
const response = UrlFetchApp.fetch(url, params);
// ...

আপনাকে অনুরোধের এলিমেন্টগুলি পরীক্ষা করার অনুমতি দেবে।

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

থার্ড-পার্টি API-তে অনুরোধ ও উত্তর চেক করার সম্পূর্ণ প্রসেসে সাহায্য করতে, অনুরোধ ও উত্তর, দুটিরই লগ রাখতে, UrlFetchApp.fetch()-এর ড্রপ-ইন রিপ্লেসমেন্ট হিসেবে নিম্নলিখিত হেল্পার ফাংশন ব্যবহার করা যেতে পারে।

  1. আপনার কোডে UrlFetchApp.fetch()-এর সব ইনস্ট্যান্স logUrlFetch() দিয়ে পরিবর্তন করুন।

  2. আপনার স্ক্রিপ্টের শেষে নিম্নলিখিত ফাংশন যোগ করুন।

    function logUrlFetch(url, opt_params) {
     const params = opt_params || {};
     params.muteHttpExceptions = true;
     const request = UrlFetchApp.getRequest(url, params);
     console.log('Request:       >>> ' + JSON.stringify(request));
     const response = UrlFetchApp.fetch(url, params);
     console.log('Response Code: <<< ' + response.getResponseCode());
     console.log('Response text: <<< ' + response.getContentText());
     if (response.getResponseCode() >= 400) {
       throw Error('Error in response: ' + response);
     }
     return response;
    }
    

আপনার স্ক্রিপ্ট এক্সিকিউট করার সময়, সব অনুরোধ ও উত্তরের বিবরণ কনসোলে লগ করা হয়, যার ফলে ডিবাগ করা সহজ হয়।

[json-stringify-url]: //developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify [client-credentials-rfc]: //datatracker.ietf.org/doc/html/rfc6749#section-4.4 [authorization-code-rfc]: //datatracker.ietf.org/doc/html/rfc6749#section-1.3.1 [oauth20-library-example]: /google-ads/scripts/docs/examples/oauth20-library [search-ads-360-example]: /google-ads/scripts/docs/examples/search-ads-360 [natural-language-api]: //console.developers.google.com/apis/api/language.googleapis.com/overview [create-service-account]: //console.developers.google.com/apis/credentials/serviceaccountkey [natural-language-example]: /google-ads/scripts/docs/examples/natural-language [natural-language-api-docs]: //cloud.google.com/natural-language/docs/ [sentiment-api-docs]: //cloud.google.com/natural-language/docs/reference/rest/v1beta2/Sentiment [sentiment-analysis-api-docs]: //cloud.google.com/natural-language/docs/analyzing-sentiment [entity-analysis-api-docs]: //cloud.google.com/natural-language/docs/analyzing-entities