RSS srautų tvarkymas su Yahoo Pipes

2008-10-6 · 16 comments

in Howto,Internetas

Periodiškai kas kelis mėnesius prisėdu pertvarkyti savo RSS skaitytuvo srautus. Išmetu senus ir tuos, kurių nebeskaitau, jei reikia – pertvarkau grupes, susidedu naujus. Manau, tą darote ir jūs. Paskutinis apsitvarkymas buvo kiek kitoks nei įprastai. Visų pirma nuo Bloglines perbėgau prie Google Reader – šiek tiek nusprendžiau pakeisti RSS skaitymo įpročius. Antra – optimizavau kaikurių srautų teikiamą informaciją. Apie tai ir yra šis įrašas.

Yahoo Pipes

Ką aš vadinu informacijos optimizavimu? Tai tiesiog kelių panašių srautų sujungimas į vieną, nedominančio turinio žinučių pašalinimas ir rezultatų rikiavimas pagal tam tikrus parametrus. Šiam darbui atlikti naudojausi Yahoo Pipes. Pipes yra įrankis, skirtas interneto turinio nuskaitymui ir manipuliavimui juo. Jo pagalba galima nuskaityti turinį iš web puslapio ar RSS srauto (resursų gali būti daugiau nei vienas), išrinkti dominančias žinutes arba išmesti netinkamas, jas surikiuoti ir viską pateikti naujo RSS srauto pavidalu. Pati Yahoo Pipes tarnyba pasirodė ganėtinai senai – praeitų metų pradžioje, tačiau aš nepastebėjau didesnio susidomėjimo ja. Betkokiu atveju ji mums labai tinka.

Ką ruošiausi daryti su Pipes’ais?

  • Delfi RSS naujienas galima prenumeruoti pasirenkant konkrečią temą. Temos yra dviejų lygių: smulkesnės ir apibendrintos. Pavyzdžiui temai “Dienos naujienos” priklauso mažesnės temos: Lietuvoje, Užsienyje, Euronaujienos, Nusikaltimai ir nelaimės, Mokslas, Sveikata, Jaunimo sodas, Pikantiškos naujienos, Vox Populi. Galima pasirinkti kiekvienos iš jų srautą arba bendrą “Dienos naujienų” srautą. Iš šio sąrašo mane domina tik Lietuvos, užsienio, mokslo ir nusikaltimų naujienos. Tad sujungiau šiuos keturis srautus į vieną. Žinoma, galima buvo prenumeruoti visus keturis srautus atskirai, tačiau vienas bendras naujienų srautas atrodo estetiškiau ir patogiau. Betkada galėsiu prijungti naujienas iš kitų šaltinių.
  • Lifehacker yra puikus tinklaraštis. Per dieną jame pasirodo ganėtinai nemažai įrašų, tarp kurių pasitaiko ir man neaktualių. Norėčiau, kad mane pasiektų tik man įdomi informacija. Dėl to sukūriau srautą, kuriame nėra įrašų apie Apple, Mac, iPhone ar Windows programas.
  • Kaip dauguma lietuvių, domiuosi europietišku krepšiniu. Tad pasidariau srautą iš kelių šaltinių (Delfi, Eurobasket ir Lrytas) ir išmečiau visas naujienas apie NBA – tas cirkas manęs nedomina. Būtent šį srautą ir panagrinėsim.

Imamės darbo!

Norėdami naudotis Yahoo Pipes, privalote būti susikūrę Yahoo vartotoją. Jei jau jį turite, galime imtis darbo. Atsiverčiame pipes.yahoo.com puslapį ir pasirenkame naujo srauto kūrimą. Mus pasitinka ganėtinai neįprastas langas, demonstruojantis YUI JavaScript bibliotekos galimybes.

Yahoo Pipes

Kairėje pusėje matome modulių sąrašą, apačioje – derintuvą (debuggerį), o centre – redaktoriaus langą. Norėdami pridėti modulį, jį išsirinkę tiesiog nutempkite į redaktoriaus langą arba spauskite prie modulio pavadinimo esantį pliusą. Labai naudingas dalykas yra debuggeris. Pasirinkus kurį nors modulį, debuggeryje matysite kokie rezultatai gaunami apdorojus srautus tame modulyje. Galite stebėti ar rezultatai yra tikrai tie, kurių tikėjotės.

Kaip minėjau anksčiau, kursime srautą, kuris sujungs kelis krepšinio naujienų srautus. Tam panaudosime Fetch Feed modulį iš Sources modulių šeimos. Pridėjus modulį, ekrane atsiras du elementai: pats modulis ir Pipe Output elementas. Šis elementas yra viso mūsų srauto rezultatas. T.y. ką išveda Pipe Output’as, tą ir gausime mūsų kuriamame sraute. Įrašom kelis srautų adresus į Fetch Feed ir prijungiam jį prie Pipe Output.

Fetch Feed

Pirmas mūsų Pipe’as baigtas! Galite išsisaugoti ir naudoti. Atkreipkite dėmesį į debuggerį – jame vaizduojama ką išveda Fetch Feed modulis. Tačiau mes dar nebaigėme, toliau filtruosime duomenis. Kiekvienas programuotojas privalo žinoti, kad duomenys yra filtruojami iškart po jų nuskaitymo, kad tolesnius veiksmus (rikiavimą, tvarkymą ir t.t.) programa atliktų tik su reikalingais duomenimis, pvz. kad nebūtų rikiuojami tie duomenys, kuriuos vėliau pašalinsime. Kaip rašiau anksčiau, nesidomiu NBA, todėl norėčiau, kad mane pasiektų tik tie įrašai, kuriuose nėra rašoma apie NBA. Tam pridedame modulį FilterOperators šeimos. Filtre nustatom, kad būtų blokuojami tie įrašai, kurių tekste yra žodis “NBA”. Taip pat galime pridėti tuos pačius apribojimus ir įrašo antraštei.

Filter

Srauto rezultatai maždaug tokie:

Lietuvė užkariavo Amžinąjį miestą
Olimpiada prie televizoriaus išgydė D.Songailos nugarą
A.Sireika: „Žalgiris“ nustebino anksčiau“
„Barcelona“ gretas papildė D.Santiago

Viskas kaip ir tvarkoje, užtektų tik susirikiuoti įrašus pagal datą ir galima naudoti. Tačiau įrašus nuskaitom iš skirtingų šaltinių, tad būtų patogu, kad kiekvienos antraštės pradžioje būtų nurodomas šaltinis. Norėčiau kažko panašaus į tai:

[delfi.lt]: Lietuvė užkariavo Amžinąjį miestą
[delfi.lt]: Olimpiada prie televizoriaus išgydė D.Songailos nugarą
[eurobasket.lt]: A.Sireika: „Žalgiris“ nustebino anksčiau“
[lrytas.lt]: „Barcelona“ gretas papildė D.Santiago

Tam reikėtų iškažkur gauti srauto resurso pavadinimą ir jį prilipdyti prie kiekvienos naujienos antraštės. Resurso pavadinimą galime gauti iš įrašo URL, nuskaitę tam tikrą jos dalį, pvz. iš http://www.delfi.lt/blah/blah/…/ pasiimsim “delfi.lt” ir jį prirašysim žinutės antraštės pradžioje. Visa struktūra atrodo taip (paspauskite ant paveiksliuko, norėdami jį išdidinti):

Domain

Čia naudojami 5 moduliai:

  • Rename – modulis skirtas pervadinti arba kopijuoti srauto įrašų elementus. Čia nukopijuojam įrašo nuorodą į naują elementą – domain.
  • Regex – apdoroja eilutę reguliariąja išraiška. Išrenka ir atvaizduoja tai, ką norime. Išraiška ^http://\w+.(\w+.\w+).+ iš nuorodos paima domeną su galūne. Sritį kurią norime priskirti kintamąjam, apskliaudžiame skliaustais. Atvaizduojamos informacijos aprašymas [$1] reiškia, kad pirmąjį kintamąjį atvaizduosim tarp laužtinių skliaustų. Taip tiesiog gražiau. Nesu reguliariųjų išraiškų guru, tad tikiu jog ją galima aprašyti ir geriau, tačiau svarbiausia – savo darbą ji atlieka.
  • Private string skirtas tiesiog aprašyti kažkokią eilutę. Naudojam pridėti dvitaškį ir tarpą po domeno.
  • String builder formuoja rezultatą sudėdamas kelis nurodytus string tipo elementus. Faktiškai, čia visi duomenys yra string tipo :-) Kaip matome pavyzdyje, rezultatas bus sudarytas iš trijų eilučių: domeno, dvitaškio su tarpu (iš private string modulio) ir naujienos antraštės.
  • Paskutinis modulis – Loop. Tai ciklas, pereinantis per visus įrašus. Į šį modulį reikia įterpti kitą modulį. Modulio paveiktą rezultatą galima priskirti vienam iš įrašo parametrų. Į ciklą patalpinau string builder’į, kuris kiekvienam įrašui suformuoja antraštę pagal anksčiau minėtas taisykles.

Galiausiai turime tokį rezultatą, kokio norėjome. Belieka tik surikiuoti informaciją pagal žinučių paskelbimo datą nuo naujausių iki seniausių (modulis Sort).

Sort

Tikiu, kad perskaičius šį mano įrašą viskas atrodo kiek painu. Patogiausia perprasti veikiančią sistemą – ją ardyti ir modifikuoti. Peržiūrėti šį mano pipe’ą galite čia. Tiesiog pasinagrinėkite kaip jis veikia, pakeiskite kaikuriuos parametrus ir greitai viską perprasit. O jei turėsit kokių klausimų – aš pasiruošęs atsakyti.

Nuorodos

  • http://liudas.sodonis.lt/rasliavos lfx

    Kaip tik vakar galvojau apie tobula rss skaityklę, šie vamzdžiai pravers :)
    Geras straipsnis :)

  • Euphorbium

    Gaila, kad yahoo. Palauksiu, kol google pasiūlys identišką paslaugą.

  • http://pawka.linija.net/ Pawka

    Euphorbium, gi jokio skirtumo kieno ta paslauga. Rezultate gauni įprastą RSS srautą, kurį gali naudoti kur tik nori, kad ir su tuo pačiu Google Readeriu.

  • Pingback: Google RSS visam internetui : nežinau.lt()

  • ichmbch

    wow!!! čia tai bent! visada galvojau apie būtent kažką tokio. Tik įdomu kaip dažnai šitas reikalas surenka RSS srautus. Kas valanda? ar keletą kartų per dieną?

  • http://pawka.linija.net/ Pawka

    ichmbch, čia jau priklauso nuo tavo RSS readerio. Yahoo Pipes, kaip ir paprastas RSS srautas, pateikia duomenis, kurie yra duomenų bazėje. Žodžiu, kai yra kreipiamasi į tavo padarytą srautą, yahoo pipes nuskaito duomenis iš šaltinių, paredaguoja ir prafiltruoja pagal tavo sudarytas taisykles ir pateikia tau naujausius rezultatus.

  • ichmbch

    mmmm… realtime? Tuomet labai faina. Bet tai katastrofiškai brangiai kainuoja resursai serverio :) Aš maniau, kad čia kaip kad dauguma tarnybų, laiks nuo laiko surenka RSS srautus (tuo pačiu juos apdoroja, jei reikia) ir kai siuntiesi iš jų, tai paduoda naujausią variantą ir tiek.

    Bet matyt Yahoo yra Yahoo :)

  • http://pawka.linija.net/ Pawka

    Tai taip ir veikia, kai siunti užklausą – viską nusiskaito ir apdoroja. Nuolat nesiurbia jie tų srautų, kol tu nesikreipi.

  • mnd

    Nesuprantu, kam reikia maklintis su google readeriu ar yahoo pipes. Man pats geriausias readeris – http://www.netvibes.com. Super patogus isdestymas, labai daug informacijos telpa viename lange, galima daryti teminius tabus, yra visokiausi widget’ai (gmail, ebay, oras, notes ir t.t.) Pasiziurekit – galimybiu ir aplikacijus labai daug. As galutinai perejau ant netvibes ir i visus kitus net neziuriu – jiems toli iki to.

  • http://pawka.linija.net/ Pawka

    Netvibes, RSS Readeriai (Bloglines, Google Reader ar kiti) ir tuo labiau Yahoo Pipes yra trys skirtingi dalykai.

    P.S. Google turi Netvibes atitikmenį – iGoogle: http://www.google.lt/ig . Tai tik dar įrodo, kad Google Readeris yra ne tas pats kas Netvibes.

  • http://www.kuzmarskis.lt taspats

    O kaip išfiltruoti iš blogeriai.net srauto nepatinkančius autorius?

  • http://pawka.linija.net/ Pawka

    taspats, tam tau reiks dviejų modulių:
    1. Fetch Feed;
    2. Filter;

    Į Fetch Feed įrašai blogeriai.net įrašo srautą: http://www.blogeriai.net/feed/ ir prijungi Filter modulį. Kiekvienas blogeriai.net įrašas turi parametrą item.dc:creator, kur nurodomas įrašo autorius. Nustatai Filter parametrus: BLOCK items that match ANY of the following. O tada jau susidedi autorius kuriuos nori blokuoti. Jei kils kokių klausimų – sakyk.

  • http://www.kuzmarskis.lt taspats

    Taigi dar klausimukas. Kaip pasidaryti vamzdį kuris ištrauktų pilnus straipsnius pvz. iš Delfi? Čia http://www.nezinau.lt/pilno-srauto-problema komentaruose užsimenama, kad taip galima padaryti, bet tiksliai kaip, nerašoma :)

  • http://pawka.linija.net/ Pawka

    taspats, tokio dalyko nedariau, tačiau kiek įsivaizduoju pipe’as turėtų atrodyti maždaug taip:
    1. Nuskaito Delfio RSS’ą (su nepilnais įrašais);
    2. Iš kiekvieno įrašo nuskaito jo URL;
    3. Kiekvieną URL atsidaro ir nuskaito kontentą tarp kažkokių nurodytų tag’ų.
    4. Viską sumeta į vieną srautą;

    Jei tau nesigaus, ateityje pabandysiu padaryt šitą.

  • http://www.kuzmarskis.lt taspats

    “Jei tau nesigaus, ateityje pabandysiu padaryt šitą.”
    Nesigauna. Būtų labai malonu, kad padarytumei.

  • http://youlikeit.lt Eugenijus

    Kai padarysit tokius srautus prašau ir man pranešti el. paštu asmeniškai ;)

Previous post:

Next post: