ডায়নামিক জাভাস্ক্রিপ্ট-চালিত ওয়েবসাইটের জন্য RSS ফিড তৈরি করা
আরএসএস ফিড হল একটি অত্যাবশ্যক টুল ভোক্তাদের জন্য যারা তাদের পছন্দের ওয়েবসাইট থেকে নতুন তথ্য পেতে চান। যদিও অনেক স্ট্যাটিক ওয়েবসাইট সহজেই RSS ফিডগুলিকে অন্তর্ভুক্ত করতে পারে, জাভাস্ক্রিপ্ট-চালিত সাইটগুলির জন্য একটি বিকাশ করা স্বতন্ত্র বাধা নিয়ে আসে। এই ওয়েবসাইটগুলি প্রায়শই পৃষ্ঠাটি তৈরি হওয়ার পরে লোড হওয়া গতিশীল সামগ্রীর উপর নির্ভর করে, যা সাধারণ RSS প্রযুক্তিগুলিকে অকার্যকর করে তোলে।
সাধারণ টুল, যেমন PolitePol বা RSS.app, স্ট্যাটিক সাইটগুলির সাথে ভাল কাজ করে কিন্তু জাভাস্ক্রিপ্ট-ভারী ওয়েবসাইটগুলির সাথে ক্ষতিগ্রস্ত হয়। এটি লোড হওয়ার সাথে সাথে তাদের সমস্ত সামগ্রী প্রদর্শন করে না এমন পৃষ্ঠাগুলির জন্য একটি RSS ফিড প্রদান করা ডেভেলপারদের পক্ষে কঠিন করে তোলে৷
এই সমস্যাটি সমাধান করার জন্য, বিকাশকারীদের প্রায়শই আরও জটিল সমাধানগুলি সন্ধান করতে হবে। এর মধ্যে রয়েছে বেসপোক স্ক্রিপ্ট তৈরি করা বা ওয়েব স্ক্র্যাপিং কৌশলগুলি নিয়োগ করা যা জাভাস্ক্রিপ্ট কীভাবে গতিশীলভাবে একটি পৃষ্ঠায় সামগ্রী তৈরি করে তা বিবেচনা করে। উদাহরণে দেখানো একটির মতো ওয়েবসাইটগুলিতে RSS ফিডগুলি সক্ষম করার জন্য এই পদ্ধতিগুলি বোঝা গুরুত্বপূর্ণ৷
গ্রামীণফোনের ওয়েবসাইটের প্রেস রিলিজ অংশ, যা গতিশীলভাবে ডেটা লোড করে, এই কৌশলগুলির একটি চমৎকার উদাহরণ। এই নিবন্ধে, আমরা জাভাস্ক্রিপ্ট এবং সমসাময়িক ওয়েব স্ক্র্যাপিং কৌশলগুলি ব্যবহার করে এই জাতীয় ওয়েবসাইটের জন্য কীভাবে একটি RSS ফিড তৈরি করতে হয় তা দেখব।
আদেশ | ব্যবহারের উদাহরণ |
---|---|
cheerio.load() | এই কমান্ডটি Cheerio লাইব্রেরির জন্য বিশেষ এবং আপনাকে jQuery-এর অনুরূপভাবে HTML লোড ও পার্স করতে দেয়। এটি একটি ওয়েবসাইট থেকে HTML পাঠ্য পরিবর্তন এবং স্ক্র্যাপ করতে ব্যবহৃত হয়। |
$('.press-release-item').each() | চেরিও একটি jQuery-এর মতো নির্বাচক ব্যবহার করে প্রতিটি উপাদানের উপর লুপ করার জন্য. প্রেস-রিলিজ-আইটেম ক্লাস, যা আপনাকে গতিশীলভাবে লোড করা আইটেমগুলি থেকে শিরোনাম এবং URL এর মতো নির্দিষ্ট বৈশিষ্ট্যগুলি বের করতে দেয়৷ |
feed.item() | এই কমান্ডটি RSS প্যাকেজ থেকে আসে এবং RSS ফিডে একটি নতুন আইটেম যোগ করতে ব্যবহৃত হয়। প্রতিটি আইটেমের সাধারণত শিরোনাম এবং url-এর মতো বৈশিষ্ট্য থাকে, যা ফিডের এন্ট্রি তৈরি করতে প্রয়োজনীয়। |
await axios.get() | এই কমান্ডটি ওয়েবসাইটের বিষয়বস্তু পুনরুদ্ধার করতে HTTP অনুরোধ পাঠাতে ব্যবহৃত হয়। Axios লাইব্রেরি একটি প্রতিশ্রুতি-ভিত্তিক প্রক্রিয়া প্রদান করে যা আপনাকে এগিয়ে যাওয়ার আগে বিষয়বস্তু লোড হওয়ার জন্য অপেক্ষা করতে দেয়। |
puppeteer.launch() | Puppeteer লাইব্রেরির এই কমান্ডটি একটি হেডলেস ব্রাউজার চালু করে। এটি গতিশীল সামগ্রী সহ জাভাস্ক্রিপ্ট-ভারী ওয়েবসাইটগুলিকে স্ক্র্যাপ করার জন্য ডিজাইন করা হয়েছে যা প্রথম পৃষ্ঠায় রেন্ডারে লোড হয় না। |
page.evaluate() | এই Puppeteer কমান্ড আপনাকে স্ক্র্যাপ করা পৃষ্ঠার প্রসঙ্গে জাভাস্ক্রিপ্ট চালানোর অনুমতি দেয়। এটি একটি ওয়েবসাইট থেকে গতিশীলভাবে রেন্ডার করা বিষয়বস্তু পাওয়ার জন্য অপরিহার্য, যেমন জাভাস্ক্রিপ্ট-জেনারেটেড নিউজ রিলিজ। |
await page.goto() | এই কমান্ডটি Puppeteer দ্বারা একটি নির্দিষ্ট URL-এ ব্রাউজ করতে ব্যবহৃত হয়। ডেটা স্ক্র্যাপ করার জন্য প্রয়োজনীয় যেকোন গতিশীল জাভাস্ক্রিপ্ট সামগ্রী সহ ওয়েবসাইটটি সম্পূর্ণ লোড হওয়ার জন্য এটি অপেক্ষা করে। |
Array.from() | এই জাভাস্ক্রিপ্ট পদ্ধতিটি নোডলিস্টগুলিকে রূপান্তর করে (যেমন querySelectorAll()) দ্বারা উত্পাদিত অ্যারেতে, নথি থেকে অনেক উপাদান স্ক্র্যাপ করার সময় সহজে ম্যানিপুলেশন করার অনুমতি দেয়। |
feed.xml() | RSS প্যাকেজের আরেকটি কমান্ড, feed.xml(), সম্পূর্ণ RSS XML স্ট্রিং তৈরি করে। এটি চূড়ান্ত আউটপুট যা ব্যবহারকারী বা প্রোগ্রাম ভবিষ্যতের আপডেটের জন্য সদস্যতা নেবে। |
জাভাস্ক্রিপ্ট আরএসএস ফিড স্ক্রিপ্ট কিভাবে কাজ করে তা বোঝা
প্রথম স্ক্রিপ্টটি জাভাস্ক্রিপ্ট-ভারী ওয়েবসাইট থেকে সামগ্রী স্ক্র্যাপ করতে Node.js, Cheerio এবং RSS মডিউল ব্যবহার করে। এখানে প্রধান সমস্যা হল যে অনেক আধুনিক ওয়েবসাইট জাভাস্ক্রিপ্ট ব্যবহার করে গতিশীলভাবে উপাদান লোড করে, যা স্ট্যান্ডার্ড স্ক্র্যাপিং পদ্ধতির জন্য সবকিছু দখল করা কঠিন করে তোলে। লক্ষ্য ওয়েবসাইটের কাঁচা HTML পুনরুদ্ধার করতে, স্ক্রিপ্টটি প্রথমে Axios-এ একটি HTTP অনুরোধ পাঠায়। এইচটিএমএল আনার পরে, চেরিও এটিকে jQuery-এর মতো পার্স এবং ম্যানিপুলেট করতে ব্যবহৃত হয়। এটি আমাদের পৃষ্ঠার নির্দিষ্ট বিভাগগুলি অ্যাক্সেস করতে এবং পুনরুদ্ধার করতে দেয়, যেমন প্রেস রিলিজ, যা একটি RSS ফিড তৈরির জন্য প্রয়োজনীয়।
বিষয়বস্তু স্ক্র্যাপ হয়ে গেলে, এটি একটি RSS ফিড-সামঞ্জস্যপূর্ণ ফর্ম্যাটে রূপান্তরিত হয়। চিরিও ফাংশন $('.প্রেস-রিলিজ-আইটেম').each() এটি বিশেষভাবে উপযোগী কারণ এটি প্রতিটি প্রেস রিলিজের উপর চলে এবং শিরোনাম এবং URL এর মতো গুরুত্বপূর্ণ বিবরণ বের করে। স্ক্র্যাপ করা ডেটা তারপর ব্যবহার করে RSS ফিডে যোগ করা হয় feed.item() RSS লাইব্রেরি থেকে পদ্ধতি। এই স্ক্রিপ্টের চূড়ান্ত ধাপটি কার্যকর করার মাধ্যমে সম্পূর্ণ RSS XML তৈরি করা feed.xml(). এই XML হল গ্রাহকরা নতুন প্রেস রিলিজ সম্পর্কে অবহিত হতে ব্যবহার করতে পারেন। এই কৌশলটি ওয়েবসাইটগুলির জন্য ভাল কাজ করে যখন বিষয়বস্তু গতিশীলভাবে লোড করা হয় তবে কাঠামোটি স্থিতিশীল এবং অনুমানযোগ্য।
দ্বিতীয় পদ্ধতিটি Puppeteer ব্যবহার করে, একটি হেডলেস ব্রাউজার যা জাভাস্ক্রিপ্ট-ভারী ওয়েবপৃষ্ঠাগুলির সাথে ইন্টারঅ্যাক্ট করতে বিশেষজ্ঞ। Puppeteer স্ক্রিপ্টটিকে একটি সত্যিকারের ব্রাউজার সেশন অনুকরণ করতে সক্ষম করে, যার মানে বিষয়বস্তু বের করার আগে এটি জাভাস্ক্রিপ্ট সম্পূর্ণরূপে লোড হওয়ার জন্য অপেক্ষা করে। গ্রামীণফোন প্রেস রিলিজ এলাকার মতো পৃষ্ঠাগুলির জন্য এটি বিশেষভাবে গুরুত্বপূর্ণ, যেখানে প্রথম HTML পৃষ্ঠা লোড হওয়ার পরে উপাদানটি গতিশীলভাবে তৈরি হয়। স্ক্রিপ্টটি প্রাথমিকভাবে একটি Puppeteer ব্রাউজার ইনস্ট্যান্স খোলে এবং টার্গেট URL-এ নেভিগেট করে page.goto() পদ্ধতি পৃষ্ঠাটি সম্পূর্ণরূপে লোড হওয়ার পরে, স্ক্রিপ্ট এটিকে মূল্যায়ন করে এবং সাধারণ DOM ম্যানিপুলেশন পদ্ধতিগুলি ব্যবহার করে প্রাসঙ্গিক উপাদান টেনে নেয় querySelectorAll.
Puppeteer আরও জটিল এবং গতিশীল ওয়েব পৃষ্ঠাগুলি পরিচালনা করার জন্য Cheerio-এর মতো মৌলিক স্ক্র্যাপিং সরঞ্জামগুলিকে ছাড়িয়ে যায়৷ প্রাসঙ্গিক ডেটা স্ক্র্যাপ করার পরে, এটি প্রথম স্ক্রিপ্টের অনুরূপ প্রক্রিয়ার মধ্য দিয়ে যায়, আউটপুটটিকে একটি RSS ফিডে ফর্ম্যাট করে। এই পদ্ধতিটি ওয়েবসাইটগুলির জন্য সবচেয়ে উপযুক্ত যেগুলি অ্যাসিঙ্ক্রোনাসভাবে উপাদান লোড করে বা আরও উন্নত জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক ব্যবহার করে, এটি আধুনিক ওয়েবসাইটগুলি থেকে RSS ফিড তৈরির জন্য একটি বহুমুখী বিকল্প দেয়৷ উভয় বিকল্প, চেরিও বা পাপেটিয়ার ব্যবহার করে, নিশ্চিত করে যে গতিশীলভাবে লোড করা সামগ্রী ব্যবহারকারীর ব্যবহারের জন্য একটি সঠিক RSS ফর্ম্যাটে রূপান্তরিত হয়েছে।
Node.js এবং Cheerio সহ একটি জাভাস্ক্রিপ্ট-ভারী ওয়েবসাইটের জন্য একটি RSS ফিড তৈরি করা
এই পদ্ধতিটি জাভাস্ক্রিপ্ট-চালিত ওয়েবসাইট থেকে গতিশীল উপাদান স্ক্র্যাপ করতে এবং একটি RSS ফিড তৈরি করতে Node.js এবং Cheerio মডিউল ব্যবহার করে।
const axios = require('axios');
const cheerio = require('cheerio');
const RSS = require('rss');
async function fetchPressReleases() {
try {
const { data } = await axios.get('https://www.grameenphone.com/about/media-center/press-release');
const $ = cheerio.load(data);
let releases = [];
$('.press-release-item').each((i, el) => {
const title = $(el).find('h3').text();
const url = $(el).find('a').attr('href');
releases.push({ title, url });
});
return releases;
} catch (error) {
console.error('Error fetching press releases:', error);
}
}
async function generateRSS() {
const feed = new RSS({ title: 'Press Releases', site_url: 'https://www.grameenphone.com' });
const releases = await fetchPressReleases();
releases.forEach(release => {
feed.item({ title: release.title, url: release.url });
});
console.log(feed.xml());
}
generateRSS();
পাপেটিয়ারের সাথে হেডলেস ব্রাউজার ব্যবহার করে একটি আরএসএস ফিড তৈরি করা
এই পদ্ধতিটি জাভাস্ক্রিপ্ট-ভারী ওয়েবসাইটগুলি পরিচালনা করতে এবং RSS ফিডগুলির জন্য গতিশীল সামগ্রী বের করতে পাপেটিয়ার, একটি হেডলেস ব্রাউজার ব্যবহার করে।
const puppeteer = require('puppeteer');
const RSS = require('rss');
async function fetchDynamicContent() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.grameenphone.com/about/media-center/press-release');
const releases = await page.evaluate(() => {
return Array.from(document.querySelectorAll('.press-release-item')).map(el => ({
title: el.querySelector('h3').innerText,
url: el.querySelector('a').href
}));
});
await browser.close();
return releases;
}
async function generateRSS() {
const feed = new RSS({ title: 'Dynamic Press Releases', site_url: 'https://www.grameenphone.com' });
const releases = await fetchDynamicContent();
releases.forEach(release => {
feed.item({ title: release.title, url: release.url });
});
console.log(feed.xml());
}
generateRSS();
জাভাস্ক্রিপ্ট-ভারী ওয়েবসাইটগুলির জন্য গতিশীল RSS ফিড তৈরি করা
জাভাস্ক্রিপ্ট-চালিত ওয়েবসাইটগুলির সাথে কাজ করার সময় একটি RSS ফিডের জন্য গতিশীলভাবে প্রদর্শিত বিষয়বস্তু ক্যাপচার করা একটি কখনও কখনও উপেক্ষিত অসুবিধা। স্ট্যাটিক পৃষ্ঠাগুলির বিপরীতে, জাভাস্ক্রিপ্ট-চালিত ওয়েবসাইটগুলি প্রাথমিক পৃষ্ঠার অনুরোধের পরে উপাদানের কিছু অংশ লোড করে, সাধারণ স্ক্র্যাপিং পদ্ধতিগুলিকে মূল্যহীন করে দেয়। যেহেতু ওয়েবসাইটগুলি নতুন ফ্রেমওয়ার্ক যেমন React, Angular, এবং Vue.js এর সাথে আরও বেশি ইন্টারেক্টিভ হয়, বিকাশকারীরা গতিশীল সামগ্রী উত্পাদন পরিচালনা করার জন্য নতুন সমাধান চান৷
এই সাইটগুলির জন্য একটি RSS ফিড তৈরি করতে, বিকাশকারীরা পাপেটিয়ারের সাথে হেডলেস সার্ফিংয়ের মতো সমাধান নিয়ে পরীক্ষা করতে পারে, যা একটি সত্যিকারের ব্যবহারকারীর অভিজ্ঞতাকে অনুকরণ করে। আরেকটি উপায় হল ওয়েবসাইট দ্বারা সরবরাহ করা API ব্যবহার করা, যদি উপলব্ধ থাকে। অনেক বর্তমান ওয়েবসাইট JSON বা RESTful APIs প্রকাশ করে যা সামনের প্রান্তে প্রদর্শিত ডেটা ফেরত দেয়। এই APIগুলি ব্যবহার করে, আপনি পৃষ্ঠাটি কেমন দেখাচ্ছে তা নিয়ে চিন্তা না করেই অবিলম্বে কাঠামোগত ডেটা অ্যাক্সেস করতে পারেন৷ এপিআইগুলির ওয়েব স্ক্র্যাপিংয়ের চেয়ে আরও স্থিতিশীল হওয়ার সুবিধা রয়েছে, যা কোনও ওয়েবসাইট কাঠামো পরিবর্তন করলে ভেঙে যেতে পারে।
উপরন্তু, সার্ভার-সাইড রেন্ডারিং (SSR) এর সাথে API ব্যবহার একত্রিত করা একটি কার্যকর RSS প্রজন্মের পদ্ধতি হতে পারে। SSR ফ্রেমওয়ার্ক, যেমন Next.js, সার্ভারে পৃষ্ঠাগুলিকে প্রাক-রেন্ডার করতে পারে, যা আপনাকে গতিশীলভাবে লোড করা উপাদানগুলি সহ সম্পূর্ণ সম্পূর্ণ HTML ক্যাপচার করতে দেয়৷ এই HTML তারপর একটি RSS ফিডে রূপান্তর করা যেতে পারে. এই সমাধানগুলি বিকাশকারীদের নমনীয়তা এবং স্কেলেবিলিটি অফার করে যখন সবসময় পরিবর্তনশীল জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক এবং গতিশীল সামগ্রী লোডিং অ্যালগরিদমগুলির সাথে কাজ করে৷
জাভাস্ক্রিপ্ট ওয়েবসাইটের জন্য RSS ফিড তৈরির বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্ন
- জাভাস্ক্রিপ্ট-ভারী ওয়েবসাইটগুলি থেকে সামগ্রী স্ক্র্যাপ করার সর্বোত্তম পদ্ধতি কী?
- আদর্শ কৌশল হল একটি হেডলেস ব্রাউজার ব্যবহার করা puppeteer.launch(), যা সামগ্রী বের করার আগে জাভাস্ক্রিপ্ট রেন্ডার করতে পারে।
- আমি কি ডায়নামিক ওয়েবসাইট স্ক্র্যাপ করার জন্য চিরিও ব্যবহার করতে পারি?
- চেরিও গতিশীল বিষয়বস্তুর জন্য আদর্শ নয়; যাইহোক, এটি যেমন সরঞ্জামগুলির সাথে মিলিত হতে পারে axios.get() প্রথমে স্ট্যাটিক এইচটিএমএল ডাউনলোড করতে।
- আরএসএস প্রজন্মের জন্য একটি API ব্যবহার করার সুবিধা কি?
- APIগুলি স্ক্র্যাপিংয়ের প্রয়োজনীয়তা দূর করে সরাসরি উত্স থেকে কাঠামোগত ডেটা ফেরত দেয়। APIs অ্যাক্সেস করতে, উভয় ব্যবহার করুন fetch() বা axios.get().
- কিভাবে Puppeteer জাভাস্ক্রিপ্ট-রেন্ডার করা সামগ্রীতে সাহায্য করে?
- Puppeteer জাভাস্ক্রিপ্ট-রেন্ডার করা অংশ সহ একটি ওয়েবপৃষ্ঠা লোড করতে পারে এবং এর সাথে ডেটা বের করতে পারে page.evaluate().
- সার্ভার-সাইড রেন্ডারিং (SSR) কী এবং এটি কীভাবে RSS ফিডগুলিকে প্রভাবিত করে?
- SSR, যেমন Next.js এর মতো ফ্রেমওয়ার্ক দ্বারা বাস্তবায়িত হয়, সার্ভারে গতিশীল বিষয়বস্তু প্রাক-রেন্ডার করে, যা RSS ফিডের জন্য স্ক্র্যাপ বা ক্যাপচার করা সহজ করে তোলে।
জাভাস্ক্রিপ্ট-ভিত্তিক আরএসএস ফিডের প্রক্রিয়াটি মোড়ানো
জাভাস্ক্রিপ্টের সাথে গতিশীলভাবে উপাদান লোড করে এমন ওয়েবসাইটগুলির জন্য একটি RSS ফিড তৈরি করা সতর্কতার সাথে বিবেচনা করা প্রয়োজন। বিকাশকারীরা পূর্ণ পৃষ্ঠা রেন্ডারিংয়ের জন্য পাপেটিয়ার এবং এইচটিএমএল পার্সিংয়ের জন্য চিরিওর মতো সরঞ্জামগুলি ব্যবহার করে জটিল সাইটগুলি থেকে কার্যকরভাবে কার্যকর RSS ফিড তৈরি করতে পারে।
এই কৌশলগুলি নিশ্চিত করে যে কার্যকারিতা এবং নির্ভুলতা বজায় রেখে বিষয়বস্তু কার্যকরভাবে স্ক্র্যাপ করা হয়েছে। লক্ষ্য ওয়েবসাইটের কাঠামো বোঝা এবং উপযুক্ত প্রযুক্তি নির্বাচন করা গুরুত্বপূর্ণ। APIs স্ক্র্যাপ করা বা ব্যবহার করা হোক না কেন, এই কৌশলগুলি কার্যকর এবং আধুনিক ওয়েব বিকাশের জন্য অভিযোজিত।
জাভাস্ক্রিপ্ট ওয়েবসাইট থেকে আরএসএস ফিড তৈরির জন্য উৎস এবং তথ্যসূত্র
- জাভাস্ক্রিপ্ট-ভারী ওয়েবসাইটগুলিকে কীভাবে স্ক্র্যাপ করা যায় সে সম্পর্কে তথ্যগুলি থেকে নেওয়া হয়েছিল পুতুল ডকুমেন্টেশন , গতিশীল ওয়েব বিষয়বস্তু পরিচালনার জন্য একটি অপরিহার্য টুল।
- স্ট্যাটিক এইচটিএমএল পার্স করার জন্য Cheerio ব্যবহার সম্পর্কে বিশদ থেকে প্রাপ্ত করা হয়েছিল Cheerio.js অফিসিয়াল ওয়েবসাইট , যা সার্ভার-সাইড DOM ম্যানিপুলেশনের জন্য jQuery-এর মতো সিনট্যাক্স প্রদান করে।
- ব্যাকএন্ড স্ক্রিপ্ট তৈরি করতে Node.js এর সাথে কাজ করার জন্য নির্দেশিকা এসেছে Node.js ডকুমেন্টেশন , যা সার্ভার-সাইড প্রোগ্রামিং সম্পর্কে বিস্তৃত তথ্য প্রদান করে।
- আরএসএস ফিড তৈরি করা এবং আরএসএস প্যাকেজ ব্যবহারের অন্তর্দৃষ্টিগুলি থেকে নেওয়া হয়েছে৷ RSS NPM প্যাকেজ , যা প্রোগ্রামগতভাবে RSS ফিড তৈরি ও পরিচালনা করতে সাহায্য করে।
- জাভাস্ক্রিপ্ট-চালিত সাইট থেকে প্রেস রিলিজ স্ক্র্যাপ করার উদাহরণ এখানে উপলব্ধ সামগ্রী দ্বারা অনুপ্রাণিত হয়েছিল গ্রামীণফোনের মিডিয়া সেন্টার .