Skript na sťahovanie tutoriálov
Neviem, ako vy, ale ja nerád čítam dlhšie texty z monitora. Papier je predsa len papier, pokojne si ho vezmete na posteľ, do električky, rýchlo upracete do vaku a a aj rýchlo vytiahnete. Preto si všetky tutoriály, návody a články z webu, ktoré sú buď príliš dlhé alebo nemám čas si ich hneď prečítať, dávam vytlačiť. Keďže väčšina vecí sú hlavne www stránky, tak je s tým občas trošku problém. Hlavne, ak chce mať človek vytlačené všetky diely tutoriálu pokope a chce si z nich urobiť knižku.
Tlačiť každý dokument zvlášť, aj s hlavičkou a pätou dokumentu, nemusí byť to pravé. Nebolo by lepšie všetky diely tutoriálu pospájať do jedného súboru a vytlačiť ich tak? Určite bolo.
Nejaký čas som to všetko robil prácne ručne. Otvoril som si všetky články tutoriálu, ktorý ma práve zaujímal, poukladal je den po druhom. Všetky otvoril v textovom editore, upravil, nakoniec zlepil do jedného dokumentu a ten dal vytlačiť.
Dnes mám na to skript. Najskôr si pozbieram url linky článkov tutoriálu a všetky vložím do textového súboru. Jeden riadok, jedna linka. Následne si otvorím jeden skript, tam upravím dva regulárne výrazy, ktoré mi z každého článku odrežú nepotrebné html hlavičky a pätu, uložím. Skript spustím a jeho výsledok presmerujem do nejakého súboru. Nakoniec v tomto súbore pridám vlastné html hlavičky a hotovo. Môže sa tlačiť. Z hodinovej roboty sú zrazu dve-tri minúty.
Takže ešte raz:
- Všetky linky uložíme do jedného súboru linky.txt
- Upravíme regulárne výrazy v skripte
- Spustíme:
perl stiahni-clanky.pl linky.txt > clanky.html
- Otvoríme clanky.html a pridáme vlastné html hlavičky
- Dáme tlačiť
A tu je zdrojový kód skriptu v jazyku Perl. Tento má regulárne výrazy upravené pre server interval.cz.
#!/usr/bin/perl # vim:set shiftwidth=4 tabstop=4 expandtab foldmethod=marker: # use strict; use warnings; use LWP::UserAgent; die "Nebol zadany subor so zoznamom liniek" unless $ARGV[0]; my @urls = (); open FH, "<", $ARGV[0]; while (my $line = <FH>) { $line =~ s/^s+|s+$//; # medzery na zaciatku a konci riadku ignorujeme push @urls, $line; } close FH; my $ua = new LWP::UserAgent; $ua->agent ("Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.1) Gecko/2008071420 Iceweasel/3.0.1 (Debian-3.0.1-1)"); foreach my $url (@urls) { my $response = $ua->get ($url); my $content = $response->as_string; # regularny vyraz pre odrezanie hlavicky dokumentu $content =~ s/^.+?<h2>/<h2>/s; # regularny vyraz pre odrezanie paty dokumentu $content =~ s/(<div id='article-author'>.*?</div>).*$/<br /><br />/s; print $content, " "; }
Zatiaľ nie sú žiadne komentáre.