Kā ģenerēt RSS plūsmas vietnēm, kuru pamatā ir JavaScript

RSS Feed

Izveidojiet RSS plūsmas dinamiskām JavaScript vietnēm

RSS plūsmas ir būtisks rīks patērētājiem, kuri vēlas sekot līdzi jaunajai informācijai no savām iecienītākajām vietnēm. Lai gan daudzās statiskās vietnēs var viegli iekļaut RSS plūsmas, tādas izstrādājot ar JavaScript darbināmām vietnēm, rodas noteikti šķēršļi. Šīs vietnes bieži paļaujas uz dinamisku saturu, kas tiek ielādēts pēc lapas izveides, padarot tipiskās RSS tehnoloģijas neefektīvas.

Parastie rīki, piemēram, PolitePol vai RSS.app, labi darbojas ar statiskām vietnēm, taču cieš no vietnēm, kurās ir daudz JavaScript. Tādējādi izstrādātājiem ir grūti nodrošināt RSS plūsmu lapām, kurās netiek parādīts viss saturs uzreiz pēc ielādes.

Lai risinātu šo problēmu, izstrādātājiem bieži ir jāmeklē sarežģītāki risinājumi. Tie ietver pielāgotu skriptu izveidi vai tīmekļa skrāpēšanas paņēmienu izmantošanu, kas ņem vērā to, kā JavaScript dinamiski veido saturu lapā. Šo metožu izpratne ir ļoti svarīga, lai iespējotu RSS plūsmas tādās vietnēs kā piemērā parādītā.

Grameenphone vietnes preses relīzes daļa, kas dinamiski ielādē datus, ir lielisks šo stratēģiju piemērs. Šajā rakstā mēs apskatīsim, kā ģenerēt RSS plūsmu šādām vietnēm, izmantojot JavaScript un mūsdienu tīmekļa kopēšanas metodes.

Komanda Lietošanas piemērs
cheerio.load() Šī komanda ir īpaši piemērota Cheerio bibliotēkai un ļauj ielādēt un parsēt HTML līdzīgi kā jQuery. To izmanto, lai mainītu un nokasītu HTML tekstu no vietnes.
$('.press-release-item').each() Cheerio izmanto jQuery līdzīgu selektoru, lai pārietu pāri katram elementam ar .pres-release-item klasi, ļaujot no dinamiski ielādētiem vienumiem iegūt specifiskus raksturlielumus, piemēram, nosaukumus un URL.
feed.item() Šī komanda nāk no RSS pakotnes un tiek izmantota, lai RSS plūsmai pievienotu jaunu vienumu. Katram vienumam parasti ir atribūti, piemēram, virsraksts un URL, kas nepieciešami plūsmas ierakstu ģenerēšanai.
await axios.get() Šī komanda tiek izmantota, lai nosūtītu HTTP pieprasījumus vietnes satura izgūšanai. Axios bibliotēka nodrošina uz solījumu balstītu mehānismu, kas ļauj gaidīt, līdz saturs tiks ielādēts, pirms turpināt.
puppeteer.launch() Šī komanda no Puppeteer bibliotēkas palaiž bezgalvu pārlūkprogrammu. Tas ir paredzēts tādu vietņu nokasīšanai, kurās ir daudz JavaScript, ar dinamisku saturu, kas netiek ielādēts pirmajā lapas renderēšanas reizē.
page.evaluate() Šī komanda Puppeteer ļauj palaist JavaScript nokasītās lapas kontekstā. Tas ir būtiski, lai no vietnes iegūtu dinamiski renderētu saturu, piemēram, JavaScript ģenerētus ziņu izlaidumus.
await page.goto() Šo komandu Puppeteer izmanto, lai pārlūkotu noteiktu URL. Tas gaida, līdz vietne tiks pilnībā ielādēta, ieskaitot jebkuru dinamisko JavaScript saturu, kas nepieciešams datu nokasīšanai.
Array.from() Šī JavaScript metode pārvērš mezglu sarakstus (piemēram, tos, ko rada querySelectorAll()) masīvos, ļaujot vieglāk manipulēt, nokasot no dokumenta daudzus elementus.
feed.xml() Cita komanda RSS pakotnē feed.xml() izveido visu RSS XML virkni. Šī ir pēdējā izvade, kuru lietotāji vai programmas abonēs turpmākiem atjauninājumiem.

Izpratne par to, kā darbojas JavaScript RSS plūsmas skripti

Pirmais skripts izmanto Node.js, Cheerio un RSS moduļus, lai nokasītu saturu no vietnes, kurā ir daudz JavaScript. Galvenā problēma šeit ir tā, ka daudzas mūsdienu vietnes dinamiski ielādē materiālus, izmantojot JavaScript, tāpēc standarta skrāpēšanas metodēm ir grūti visu uztvert. Lai izgūtu mērķa vietnes neapstrādātu HTML, skripts vispirms nosūta HTTP pieprasījumu, izmantojot Axios. Pēc HTML iegūšanas Cheerio tiek izmantots, lai to parsētu un apstrādātu līdzīgi kā jQuery. Tas ļauj mums piekļūt noteiktām lapas sadaļām un izgūt tās, piemēram, preses relīzes, kas nepieciešamas RSS plūsmas izveidei.

Kad saturs ir nokasīts, tas tiek pārveidots ar RSS plūsmu saderīgā formātā. Cheerio funkcija ir īpaši noderīgs, jo tas attiecas uz katru preses relīzi un izvilk svarīgu informāciju, piemēram, nosaukumu un URL. Pēc tam izkoptie dati tiek pievienoti RSS plūsmai, izmantojot metode no RSS bibliotēkas. Pēdējais solis šajā skriptā ir ģenerēt pilnu RSS XML, izpildot . Šis XML ir tas, ko abonenti var izmantot, lai saņemtu informāciju par jauniem preses izdevumiem. Šī stratēģija labi darbojas vietnēs, kad saturs tiek dinamiski ielādēts, bet struktūra ir stabila un paredzama.

Otrā pieeja izmanto Puppeteer — pārlūkprogrammu bez galvas, kas specializējas mijiedarbībā ar tīmekļa lapām, kurās ir daudz JavaScript. Puppeteer ļauj skriptam atdarināt īstu pārlūkprogrammas sesiju, kas nozīmē, ka pirms satura izvilkšanas tas gaida, līdz JavaScript tiek pilnībā ielādēts. Tas ir īpaši svarīgi tādām lapām kā Grameenphone preses relīzes apgabals, kur materiāls tiek dinamiski ģenerēts pēc pirmās HTML lapas ielādes. Skripts sākotnēji atver Puppeteer pārlūkprogrammas gadījumu un pāriet uz mērķa URL, izmantojot metodi. Kad lapa ir pilnībā ielādēta, skripts to novērtē un izvelk atbilstošo materiālu, izmantojot izplatītas DOM manipulācijas metodes, piemēram, .

Puppeteer pārspēj pamata skrāpēšanas rīkus, piemēram, Cheerio, apstrādājot sarežģītākas un dinamiskas tīmekļa lapas. Pēc attiecīgo datu nokasīšanas tas veic līdzīgu procesu kā pirmajam skriptam, formatējot izvadi RSS plūsmā. Šī metode ir vispiemērotākā vietnēm, kurās materiāls tiek ielādēts asinhroni vai tiek izmantoti uzlaboti JavaScript ietvari, nodrošinot to daudzpusīgu alternatīvu RSS plūsmu veidošanai no modernām vietnēm. Abas opcijas, neatkarīgi no tā, vai tiek izmantota Cheerio vai Puppeteer, nodrošina, ka dinamiski ielādēts saturs tiek pārveidots lietotāja patēriņam atbilstošā RSS formātā.

RSS plūsmas izveide vietnei, kas satur daudz JavaScript, izmantojot Node.js un Cheerio

Šajā metodē tiek izmantots Node.js un Cheerio modulis, lai izvilktu dinamisku materiālu no JavaScript nodrošinātas vietnes un izveidotu RSS plūsmu.

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 plūsmas izveide, izmantojot bezgalvu pārlūkprogrammu ar Puppeteer

Šī metode izmanto Puppeteer, bezgalvu pārlūkprogrammu, lai pārvaldītu vietnes, kurās ir daudz JavaScript, un izvilktu dinamisku saturu RSS plūsmām.

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();

Dinamisku RSS plūsmu izveide vietnēm, kurās ir daudz JavaScript

Dinamiski attēlota satura tveršana RSS plūsmai dažkārt ir problēma, kas tiek ignorēta, strādājot ar JavaScript nodrošinātām vietnēm. Atšķirībā no statiskām lapām, ar JavaScript darbināmas vietnes ielādē materiāla daļas pēc sākotnējās lapas pieprasījuma, padarot tipiskas skrāpēšanas metodes bezvērtīgas. Tā kā vietnes kļūst interaktīvākas, izmantojot jaunākus ietvarus, piemēram, React, Angular un Vue.js, izstrādātāji vēlas jaunus risinājumus dinamiska satura veidošanai.

Lai šīm vietnēm izveidotu RSS plūsmu, izstrādātāji var eksperimentēt ar tādiem risinājumiem kā sērfošana bez galvas, izmantojot Puppeteer, kas simulē patiesu lietotāja pieredzi. Vēl viens veids ir izmantot API, ko nodrošina pati vietne, ja tādas ir pieejamas. Daudzas pašreizējās vietnes atklāj JSON vai RESTful API, kas atgriež datus, kas tiek parādīti priekšpusē. Izmantojot šīs API, varat nekavējoties piekļūt strukturētiem datiem, neuztraucoties par lapas izskatu. API ir arī priekšrocība, ka tās ir stabilākas nekā tīmekļa skrāpēšana, kas var sabojāties, mainot vietnes struktūru.

Turklāt API lietojuma apvienošana ar servera puses renderēšanu (SSR) varētu būt efektīva RSS ģenerēšanas metode. SSR ietvari, piemēram, Next.js, var iepriekš renderēt lapas serverī, ļaujot tvert pilnībā pabeigtu HTML, tostarp dinamiski ielādētus elementus. Pēc tam šo HTML var pārveidot par RSS plūsmu. Šie risinājumi izstrādātājiem piedāvā elastību un mērogojamību, strādājot ar pastāvīgi mainīgiem JavaScript ietvariem un dinamiskiem satura ielādes algoritmiem.

  1. Kāda ir labākā metode satura nokasīšanai no vietnēm, kurās ir daudz JavaScript?
  2. Ideāls paņēmiens ir izmantot pārlūkprogrammu bez galvas , kas var atveidot JavaScript pirms satura izvilkšanas.
  3. Vai varu izmantot Cheerio dinamisku vietņu nokasīšanai?
  4. Cheerio nav ideāli piemērots dinamiskam saturam; tomēr to var kombinēt ar tādiem instrumentiem kā lai vispirms lejupielādētu statisko HTML.
  5. Kādas ir API izmantošanas priekšrocības RSS ģenerēšanai?
  6. API atgriež strukturētus datus tieši no avota, novēršot vajadzību nokasīt. Lai piekļūtu API, izmantojiet kādu no tām vai .
  7. Kā Puppeteer palīdz ar JavaScript renderētu saturu?
  8. Puppeteer var ielādēt tīmekļa lapu, tostarp JavaScript renderētās daļas, un iegūt datus ar .
  9. Kas ir servera puses renderēšana (SSR) un kā tā ietekmē RSS plūsmas?
  10. SSR, ko ievieš tādi ietvari kā Next.js, iepriekš renderē dinamisku saturu serverī, atvieglojot RSS plūsmu izņemšanu vai tveršanu.

Lai izveidotu RSS plūsmu vietnēm, kas dinamiski ielādē materiālu, izmantojot JavaScript, ir rūpīgi jāapsver. Izstrādātāji var efektīvi izveidot noderīgas RSS plūsmas no sarežģītām vietnēm, izmantojot tādus rīkus kā Puppeteer pilnas lapas renderēšanai un Cheerio HTML parsēšanai.

Šīs stratēģijas nodrošina, ka saturs tiek efektīvi notīrīts, vienlaikus saglabājot veiktspēju un precizitāti. Ir ļoti svarīgi izprast mērķa vietnes struktūru un izvēlēties piemērotu tehnoloģiju. Šīs stratēģijas ir efektīvas un pielāgojas mūsdienu tīmekļa izstrādei neatkarīgi no tā, vai tiek veikta skrāpēšana vai API izmantošana.

  1. Informācija par to, kā nokasīt vietnes, kurās ir daudz JavaScript, tika iegūta no Leļļu dokumentācija , kas ir būtisks rīks dinamiska tīmekļa satura apstrādei.
  2. Sīkāka informācija par Cheerio izmantošanu statiskā HTML parsēšanai tika iegūta no Cheerio.js oficiālā vietne , kas nodrošina jQuery līdzīgu sintaksi servera puses DOM manipulācijām.
  3. Vadlīnijas darbam ar Node.js, lai izveidotu aizmugursistēmas skriptus, tika iegūti no Node.js dokumentācija , kas piedāvā plašu informāciju par servera puses programmēšanu.
  4. Ieskats RSS plūsmu ģenerēšanā un RSS pakotnes izmantošanā tika ņemts no RSS NPM pakotne , kas palīdz programmatiski izveidot un pārvaldīt RSS plūsmas.
  5. Preses relīžu nokopšanas piemēru no JavaScript nodrošinātas vietnes iedvesmoja saturs, kas pieejams vietnē Grameenphone mediju centrs .