Cron jobs চালিয়ে Index API-তে URL request পাঠান

3 weeks ago

ক্রন জবসের মাধ্যমে Google Indexing API-তে URL জমা দেওয়া কিভাবে স্বয়ংক্রিয় করবেন: ধাপে ধাপে দেখুন

PHP এবং cron job ব্যবহার করে Google-এর Indexing API-তে URL সংগ্রহ এবং জমা দেওয়ার প্রক্রিয়া স্বয়ংক্রিয় করতে শিখুন। এই গাইডটিতে ক্রন জব সেটআপ করার পদ্ধতি বর্ণনা করা হয়েছে, যা RSS ফিড থেকে URL সংগ্রহ করে এবং ইন্ডেক্স করার জন্য জমা দেয়। অর্থাৎ আপনার ওয়েবসাইটে rss feed url থাকতে হবে।

গুগলের ইন্ডেক্সিং API-তে URL জমা দেওয়ার প্রক্রিয়া স্বয়ংক্রিয় করা আপনার নতুন কনটেন্ট দ্রুত ইন্ডেক্স করার একটি দারুণ উপায়। PHP, RSS ফিড এবং ক্রন জবের সমন্বয়ে, এই সিস্টেমটি ক্রমাগত আপনার RSS ফিড থেকে নতুন URL সংগ্রহ করতে পারে এবং সেগুলোকে ইন্ডেক্স করার জন্য গুগলে জমা দিতে পারে। এতে আপনার সময় বাঁচবে এবং SEO কর্মদক্ষতা উন্নত হবে। (WordPress দের জন্য নয়, plugin available)

এই টিউটোরিয়ালে, আমরা দুটি PHP ফাইল (collect.php এবং autoSubmit.php) ব্যবহার করে একটি সিস্টেম তৈরি করব। এই ফাইলগুলো RSS ফিড থেকে নতুন URL সংগ্রহ করে Google Indexing API-তে জমা দেবে। এছাড়াও, একটি নির্দিষ্ট সময় পর পর স্বয়ংক্রিয়ভাবে এই প্রক্রিয়া চালানোর জন্য আমরা ক্রন জব সেট আপ করব।

সিস্টেমের সংক্ষিপ্ত বিবরণ-

আমরা দুটি ধাপে একটি সিস্টেম তৈরি করছি:

  1. collect.php - RSS ফিড থেকে নতুন URL সংগ্রহ করে এবং সেগুলোকে একটি JSON ফাইলে সংরক্ষণ করে। এই ফাইলে শুধুমাত্র সাম্প্রতিক ২০টি URL থাকবে।

  2. autoSubmit.php - এই URL গুলো Google Indexing API-তে জমা দেবে এবং ডুপ্লিকেট জমা এড়াতে সাবমিশনের ইতিহাস ট্র্যাক করবে।

ধাপ ১: collect.php দিয়ে URL সংগ্রহ করা। এই সিস্টেমের প্রথম ধাপ হলো RSS ফিড থেকে URL সংগ্রহ করা। আমরা RSS ফিড থেকে URL গুলো নিয়ে, সেগুলোকে JSON ফাইলে সংরক্ষণ করব।

<?php header('Content-Type: application/json'); // RSS ফিড URL $rssUrl = 'https://newero.site/rss.xml'; // JSON ফাইলের পাথ (প্রাইভেট ডিরেক্টরি) $jsonFilePath = 'private/new.json'; // RSS ফিড থেকে ডাটা সংগ্রহ $rssContent = file_get_contents($rssUrl); if (!$rssContent) { echo json_encode(['success' => false, 'message' => 'RSS ফিড আনতে ব্যর্থ।']); exit; } $xml = simplexml_load_string($rssContent); $items = $xml->channel->item; // নতুন URLs সংগ্রহ $newUrls = []; foreach ($items as $item) { $guid = (string) $item->guid; $isPermaLink = (string) $item->guid['isPermaLink']; if ($isPermaLink === 'true') { $newUrls[] = $guid; } } // সর্বশেষ ২০টি URL সংরক্ষণ if ($newUrls) { // সর্বশেষ ২০টি URL রাখার জন্য $newUrls = array_slice(array_unique($newUrls), -20); // ফাইল আপডেট করা file_put_contents($jsonFilePath, json_encode($newUrls, JSON_PRETTY_PRINT)); echo json_encode(['success' => true, 'message' => 'নতুন URL সংগ্রহ করা হয়েছে এবং ২০টিতে সীমাবদ্ধ করা হয়েছে।', 'urls' => $newUrls]); } else { echo json_encode(['success' => true, 'message' => 'কোনো নতুন URL পাওয়া যায়নি।']); } ?>

কোডের ব্যাখ্যা:

আমরা প্রদত্ত URL থেকে RSS ফিড সংগ্রহ করি।

simplexml_load_string() ব্যবহার করে RSS ফিডের বিষয়বস্তু পার্স করা হয়।

RSS আইটেমের guid এলিমেন্টে isPermaLink="true" আছে কিনা তা পরীক্ষা করা হয়।

আমরা সমস্ত বৈধ URL সংগ্রহ করি এবং সেগুলোকে একটি JSON ফাইলে সংরক্ষণ করি, যেখানে শুধুমাত্র ২০টি সাম্প্রতিক URL থাকে।

ক্রন জব সেটআপ: এই স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে একটি নির্দিষ্ট সময় পর পর (যেমন, প্রতি ঘন্টায়) চালানোর জন্য, আপনি আপনার সার্ভারে একটি ক্রন জব সেটআপ করতে পারেন। এখানে একটি উদাহরণ দেওয়া হলো, যা প্রতি ঘন্টায় চলবে:

0 * * * * /usr/bin/php /path/to/collect.php

ধাপ ২: autoSubmit.php দিয়ে URL জমা দেওয়া

একবার URL সংগ্রহ করা হয়ে গেলে, পরবর্তী ধাপ হল Google Indexing API-তে URL জমা দেওয়া। autoSubmit.php URL গুলো প্রক্রিয়া করবে, দেখবে যে সেগুলি আগে জমা দেওয়া হয়েছে কিনা, এবং তারপর সেগুলোকে API-তে পাঠাবে।

<?php header('Content-Type: application/json'); // JSON ফাইলের পাথ $jsonFilePath = 'private/new.json'; $historyFilePath = 'private/history.json'; $serviceAccountPath = 'private/service-account.json'; // `new.json` থেকে URL লোড করুন if (!file_exists($jsonFilePath)) { echo json_encode(['success' => false, 'message' => 'প্রক্রিয়া করার জন্য কোনো URL নেই।']); exit; } $urls = json_decode(file_get_contents($jsonFilePath), true); if (empty($urls)) { echo json_encode(['success' => false, 'message' => 'প্রক্রিয়া করার জন্য কোনো URL নেই।']); exit; } // `history.json` থেকে ইতিহাস লোড করুন $history = []; if (file_exists($historyFilePath)) { $history = json_decode(file_get_contents($historyFilePath), true); if (!is_array($history)) { $history = []; } } // ইতিহাস থেকে ইতিমধ্যে জমা দেওয়া URL গুলো বাদ দিন $urlsToSubmit = array_diff($urls, $history); if (empty($urlsToSubmit)) { echo json_encode(['success' => true, 'message' => 'জমা দেওয়ার জন্য কোনো নতুন URL নেই।']); exit; } // পরিষেবা অ্যাকাউন্ট লোড করুন if (!file_exists($serviceAccountPath)) { echo json_encode(['success' => false, 'message' => 'পরিষেবা অ্যাকাউন্ট ফাইল পাওয়া যায়নি।']); exit; } $serviceAccount = json_decode(file_get_contents($serviceAccountPath), true); $privateKey = $serviceAccount['private_key']; $clientEmail = $serviceAccount['client_email']; $tokenUrl = $serviceAccount['token_uri']; // প্রমাণীকরণের জন্য JWT তৈরি করুন $jwt = createJwt($privateKey, $clientEmail, $tokenUrl); // অ্যাক্সেস টোকেন পান $postData = http_build_query([ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', 'assertion' => $jwt ]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tokenUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if (!$response) { echo json_encode(['success' => false, 'message' => 'cURL ত্রুটি: ' . curl_error($ch)]); curl_close($ch); exit; } curl_close($ch); $tokenResponse = json_decode($response, true); if (!isset($tokenResponse['access_token'])) { echo json_encode(['success' => false, 'message' => 'অ্যাক্সেস টোকেন পুনরুদ্ধার করতে ব্যর্থ।', 'error' => $tokenResponse]); exit; } $accessToken = $tokenResponse['access_token']; // ইন্ডেক্সিং API-তে URL জমা দিন $results = []; foreach ($urlsToSubmit as $url) { $url = trim($url); $apiUrl = 'https://indexing.googleapis.com/v3/urlNotifications:publish'; $postData = json_encode([ 'url' => $url, 'type' => 'URL_UPDATED' ]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . $accessToken, 'Content-Type: application/json' ]); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $apiResponse = json_decode($response, true); // ফলাফল লগ করুন $results[] = [ 'url' => $url, 'httpCode' => $httpCode, 'response' => $apiResponse ]; // সফল হলে, URL ইতিহাসে যোগ করুন if ($httpCode === 200) { $history[] = $url; } } // ইতিহাসের সীমা ৬০টি URL এ রাখুন $history = array_slice(array_unique($history), -60); // আপডেট করা ইতিহাস সেভ করুন file_put_contents($historyFilePath, json_encode($history, JSON_PRETTY_PRINT)); // `new.json` এ অবশিষ্ট URL গুলো সেভ করুন $remainingUrls = array_diff($urls, array_column($results, 'url')); file_put_contents($jsonFilePath, json_encode($remainingUrls, JSON_PRETTY_PRINT)); // ফলাফল ফেরত দিন echo json_encode(['success' => true, 'results' => $results]); // সহায়ক ফাংশন function createJwt($privateKey, $clientEmail, $tokenUrl) { $header = base64UrlEncode(json_encode(['alg' => 'RS256', 'typ' => 'JWT'])); $payload = base64UrlEncode(json_encode([ 'iss' => $clientEmail, 'scope' => 'https://www.googleapis.com/auth/indexing', 'aud' => $tokenUrl, 'exp' => time() + 3600, 'iat' => time() ])); $signature = base64UrlEncode(signData($header . '.' . $payload, $privateKey)); return $header . '.' . $payload . '.' . $signature; } function signData($data, $privateKey) { openssl_sign($data, $signature, $privateKey, 'sha256'); return $signature; } function base64UrlEncode($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } ?>

কোডের ব্যাখ্যা:

স্ক্রিপ্টটি collect.php দ্বারা সংগৃহীত URL গুলি লোড করে এবং পূর্বে জমা দেওয়া URL গুলি বাদ দেয়।

প্রমাণীকরণের জন্য একটি JWT তৈরি করা হয় এবং URL গুলো Google Indexing API-তে জমা দেওয়া হয়।

জমা দেওয়ার ফলাফল লগ করা হয় এবং সফল জমাগুলো history.json এ সংরক্ষণ করা হয়, যাতে ডুপ্লিকেট জমা প্রতিরোধ করা যায়।

ইতিহাসের আকার ৬০টি URL-এ সীমাবদ্ধ রাখা হয়েছে, যাতে ফাইলটির আকার বেশি না হয়।

ক্রন জব সেটআপ:

autoSubmit.php পর্যায়ক্রমে চালানোর জন্য, আপনি আরেকটি ক্রন জব সেটআপ করতে পারেন:

0 * * * * /usr/bin/php /path/to/autoSubmit.php

উপসংহার

এই সিস্টেমটি RSS ফিড থেকে URL সংগ্রহ করে এবং সেগুলোকে Google Indexing API-তে জমা দেওয়ার প্রক্রিয়া স্বয়ংক্রিয় করে। এই ক্রন জবগুলি সেট আপ করার মাধ্যমে, আপনি নিশ্চিত করতে পারেন যে আপনার নতুন কনটেন্ট সময়মতো ইন্ডেক্স হবে, যা ম্যানুয়াল হস্তক্ষেপ ছাড়াই আপনার SEO-এর উন্নতি ঘটাবে।