LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (67) - Projekt - dokončujeme modul

Perl Dnes dokončíme základní modul, abychom ho vzápětí mohli použít k vytvoření samotného programu

30.4.2008 10:00 | Jiří Václavík | Články autora | přečteno 9724×

Perzistence

Když se podíváme na seznam úkolů, které by měl modul zvládat, zbývá poslední. Perzistentní uchovávání dat. Půjde jen o to, jak vhodně přepsat podprogram ziskej_zdrojovy_kod. Nadefinujeme si tedy proměnnou $cil, která bude jednoznačně identifikovat každý stažený soubor. $cil bude obsahovat cestu k souboru, kam zdrojový kód uložíme. Její tvar bude následující, podle toho, zda půjde o seznam zápasů nebo podrobnosti ke konkrétnímu zápasu.

/tmp/livescore_liga_odkaz_idzapasu
/tmp/livescore_liga

Metoda ziskej_zdrojovy_kod bude vypadat takto.

sub ziskej_zdrojovy_kod {
    my($self, $liga, $odkaz_idzapasu) = @_;
    my $url;
    my $cil;
    my $zdroj = undef;
    local $/ = "";

    if ($odkaz_idzapasu){
        $url = "http://www.livescore.com/default.dll/Game?comp=$liga&game=$odkaz_idzapasu";
        $cil = "/tmp/livescore_".$liga."_".$odkaz_idzapasu;
    }else{
        $url = "http://www.livescore.com/default.dll?page=$liga";
        $cil = "/tmp/livescore_$liga";
    }

    #získání dat ze souboru nebo stažení; uložení dat do souboru

    return $zdroj;
}

Za jakých okolností nyní budeme data stahovat a za jakých pouze kopírovat ze zálohy? Soubor musí splňovat dvě podmínky. Musí existovat a musí být mladší než nějaký interval definovaný uživatelem. Ještě předtím, než dokončíme metodu ziskej_zdrojovy_kod musíme do objektu přidat v konstruktoru parametr refresh, který implicitně nastavíme na 30 sekund. Pokud bude soubor starší, než kolik je $refresh bude stažen znovu.

$f->{"refresh"} = (int $refresh < 30) ? 30 : $refresh;

Vraťme se k metodě ziskej_zdrojovy_kod. Nyní již známe podmínky, za kterých soubor pouze zkopírujeme. Proměnnou $/ jsme nastavili proto, abychom načetli celý kód ze souboru najednou.

    if (-e $cil and time() - (stat($cil))[9] <= $self->{"refresh"}){
        open(R, $cil) or die "Nelze otevrit datovy soubor\n";
        $zdroj = <R>;
        close R;
    }else{
        #stáhneme data znovu a uložíme do zálohy
    }

Nejsou-li tyto podmínky splněny, nezbývá, než data získat znovu z internetu. Vytvořenému souboru poskytneme plná práva, aby mohli zálohu načítat a aktualizovat jiní uživatelé. To sice dává možnost falšovat data, ale vzhledem k tomu, že je stejně získáváme z webu, tak se na ně spolehnout nelze.

        unlink $cil;
        my $mech = WWW::Mechanize->new();
        $mech->get($url);
        $zdroj = ($mech->get($url))->{"_content"};
        open(W, ">$cil") or die "Nelze otevrit datovy soubor\n";
        print W $zdroj;
        close W;
        chmod 511, $cil;

Modul hotov

Až na dokumentaci jsme právě dokončili základní část modulu. Zrekapitulujme si stručně, co všechno nyní vlastně dokáže.

  • jsme schopni získat data - ať už seznam zápasů nebo seznam událostí k jednotlivým zápasům
  • tato data dokážeme perzistentně uchovat
  • z těchto surových dat dokážeme získat potřebné informace
  • tyto informace dokážeme třídit na základě kritérií

Ukázka použití modulu

Sice tušíme, jak se bude modul používat, ale měli bychom si to pro lepší pochopení alespoň stručně ukázat.

V úvodu je třeba volat dvě metody - konstruktor a metodu na získání zápasů.

my $live = Livescore->new($liga);
my @vyhovujici = $live->ziskej_zapasy_dane_ligy;

Dále zpravidla vybereme pouze zápasy vyhovující nějakým kritériím

@kriteria = qw(manchester liverpool);
@vyhovujici = $live->najdi_zapas_podle_kriterii(\@vyhovujici, \@kriteria);

Nyní můžeme udělat několik věcí. Buď data jen zobrazit za základě dat v poli @vyhovujici nebo získat podrobnosti k zápasu a zobrazit až je. Je též možné tyto podrobnosti periodicky doplňovat a tím získat program na online sledování.

my @udalosti = $live->prenos($vyhovujici_liga, $vyhovujici_idzapasu);

Tím vším se ale budeme podrobně zabývat až příště. Pokud si chcete vytvořit vlastní program využívající modul Livescore ještě dříve, než to uděláme společně v dalším pokračování seriálu, můžete si celý modul stáhnout.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

12.7.2016 13:14 /František Kučera
Spolek OpenAlt zve na 130. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 21. července od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

11.7.2016 16:53 /Redakce Linuxsoft.cz
Konference LinuxDays hledá přednášející. Přihlášky poběží do konce prázdnin, v září bude hlasování a program. Více na https://www.linuxdays.cz/2016/cfp/.
Přidat komentář

8.5.2016 17:19 /Redakce Linuxsoft.cz
PR: Dne 26.5.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, cloudové služby, infrastruktura cloudu, efektivní využití cloudu, možné nástrahy cloudů a jak se jim vyhnout
Přidat komentář

21.4.2016 8:01 /František Kučera
Spolek OpenAlt zve na 127. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 28. dubna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

2.3.2016 22:41 /Ondřej Čečák
Letošní ročník konference InstallFest již tento víkend!
Přidat komentář

14.2.2016 16:39 /Redakce Linuxsoft.cz
O víkendu 5. a 6. března 2016 proběhne na pražském Strahově 8. ročník tradiční konference InstallFest. Celkem za dva dny uvidíte ​30 přednášek​ a ​6 workshopů.
Přidat komentář

5.2.2016 17:38 /Petr Ježek
Utilitka z XFce "xfce4-power-manager" nejen umožňuje nastavení lhůty pro uspání či hybernaci, ale i zapínání a vypínání prezentačního módu pro nerušené sledování videí. Stačí ji nastavit v každém vybavenějším panelu a v jakémkoli nontiled WM/DE.
Přidat komentář

10.1.2016 11:32 /Pavel `Goldenfish' Kysilka
LinuxMarket změnil provozovatele. Nově jej provozuje Marek Pszczolka. Více info a detaily #1 a #2.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

10.6.2016 21:10 / pavel riha
FreeBSD 10.3 a virtualizace

8.6.2016 21:56 / Milan Gallas
Nevalidní prefix m

7.5.2016 14:58 / Teodor Komárek
Soubory

20.4.2016 0:07 / Jakub Cleing
Sázkový panel PHP FUSION

9.4.2016 9:43 / jiwopene@gmail.com
Re: problém s dpkg a nemožností instalovat

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2016) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze