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

> Perl (64) - Projekt - čtečka sportovních výsledků

Perl Protože jsme se dosud zabývali výhradně teorií, věnujeme následujících 6 dílů na napsání snad prvního smysluplného programu v tomto seriálu.

5.10.2007 06:00 | Jiří Václavík | Články autora | přečteno 15062×

Dosud jsme v seriálu uváděli pouze minimum příkladů. Byly to příklady pro příklady - tedy vesměs co nejstručnější vyumělkované programy bez většího smyslu. Jejich účelem bylo pouze demonstrovat určitou část syntaxe.

Dnes zahájíme práci na textové čtečce sportovních výsledků, což by mělo přinést zpetření seriálu.

Práci na každém větším projektu lze rozdělit do několika etap. Programování je pouze jednou z nich. Podle velikosti projektu se těmto etapám přisoudí důležitost, která se projeví zejména na časové organizaci. Čím větší projekt, tím je obvykle čas na programování v porovnání s analyzováním a přípravou menší. Na velikosti projektu také záleží to, z kterých fází se bude postup skládat.

Nás toto členění však zase tolik trápit nemusí, protože půjde pouze o poměrně malý projekt. Spoustu fází, jako například hardwarové nároky tak nemusíme řešit vůbec.

První věcí, kterou bychom si tedy nyní měli ujasnit je, co vlastně budeme psát.

Cíl projektu

Jak již bylo řečeno, napíšeme program pro čtení výsledků kopané. Výsledky budeme získávat extrakcí z vybrané internetové stránky. Zmiňme rovnou, že to bude napevno www.livescore.com. Toto řešení má sice několik zásadních nevýhod, ale ukážeme si na něm některé zajímavé postupy.

Prvotní představa o tom, co by náš program měl umět, je taková:

  • vypsat všechny zápasy, které se hrají dnes (tedy v podstatě seznam zápasů na www.livescore.com/default.dll?page=home)
  • vypsat všechny zápasy z národních resp. mezinárodních soutěží (získávat je budeme z www.livescore.com/default.dll?page=jméno_soutěže)
  • každý zápas může být v době volání v jedné ze tří fází.
    1. zápas ještě nezačal
    2. zápas se právě hraje
    3. zápas se již dohrál
    Tyto fáze musíme ve výpisech zápasů zřetelně odlišíme
  • u každého zápasu by měla být informace o názvu soutěže, údaj kdy zápas začne a pokud již začal tak buď průběžný nebo konečný výsledek.
  • zobrazit detail vybraného zápasu - střelci branek, případně karty apod. (tedy to, co je dostupné na www.livescore.com/default.dll/Game?comp=soutěž&game=id_hry)
  • sledovat zápas online, pokud se hraje

Použití programu by mělo být nanejvýš jednoduché a intuitivní. Jediným zadaným příkazem do shellu bychom měli obdržet požadovanou informaci. Abychom získali alespoň jistou představu, uveďme si, jak by taková volání mohla vypadat.

Program pojmenujeme live a bude se spouštět stejnojmenným příkazem. Bude k dispozici několik možností volání. Pro zobrazení zápasů, které se hrají dnes bude sloužit tento příkaz.

$ live

Pokud zadáme argument, vypíše se pouze zápasy, které vyhovují vzoru.

$ live manchester

Dále bude program přijímat několik argumentů z příkazového řádku. Pomocí volby -league nebo -l zadáme stát nebo mezinárodní soutěž, jejíž zápasy se mají vypisovat a to v takovém tvaru, v jakém ji uvádí livescore.com. Tedy například tento příkaz zobrazí zápasy v Anglii.

$ live -l england

Dále zde bude volba -o nebo -online, která bude zobrazovat detail zápasu. V případě, že se zápas hraje, spustí se online přenos. Pokud se již dohrál, zobrazí se střelci branek, průběh apod.

$ live -o

Pokud nezadáme žádný argument, program zobrazí seznam zápasů a zeptá se, který z nich chceme zobrazit. Zadávat mu budeme část názvu týmu, podle kterého již program požadovaný zápas určí. Pokud nebude zadání jednoznačné, zeptá se na další informaci. Pokud však hodnotu vložíme, program podle ní zápas určí automaticky.

$ live -o manchester

A nakonec zde bude volba -r nebo -refresh, pomocí které nastavíme sekundový interval pro aktualizaci při online přenosu. Nicméně protože nastravíme nějakou rozumnou implicitní hodnotu, bude používán jen zřídka.

$ live -r 30 -o manchester

Rozbor

Ponechme stranou pro nás irelevantní (jinak však nezbytné) otázky typu "v čem psát" a pojďme udělat několik důležitých rozhodnutí o tom "jak psát".

Nejprve poznámku o stylu programování. Program nebudeme ladit až k naprosté dokonalosti. Budeme dbát zejména na názornost. Pokud narazíme na problém, který bude chod programu ovlivňovat jen minimálně, ale jehož řešení by zabralo relativně mnoho času, pouze ho zmíníme, případně nastíníme řešení a většinou necháme být.

Koncepce

K návrhu programu použijeme objektově orientované programování. Program se bude sestávat z několika částí. Je třeba se rozhodnout pro konkrétní variantu.

Předně vytvoříme modul s názvem Livescore, který se bude starat o získávání a zpracovávání dat. Nebude řešit věci jako je zobrazování dat, data bude pouze poskytovat.

Zpracování dat můžeme udělat několika způsoby. Buď můžeme napsat mezičlánek mezi modulem Livescore a programem live, např. modul Livescore::Text, který bude řešit zobrazování dat podle požadavků programu live. Výhodou tohoto postupu je, že bychom později mohli dopsat např. moduly Livescore::Qt, Livescore::Curses apod., které bychom mohli snadno použít při tvorbě uživatelských rozhraní.

A nebo napíšeme pouze program live, který bude zpracovávat data od Livescore sám.

Druhá varianta je jednodušší a protože našemu zadání plně postačuje, zvolíme právě ji.

Modul Livescore

Co by měl umět modul? Shrňme požadavky na něj do několika bodů.

  • Základním požadavkem na modul je získat data. Proto zde bude existovat funkce ziskej_zdrojovy_kod, která stáhne z www.livescore.com tu stránku, která bude zrovna požadována.
  • S předcházejícím bodem tane na mysli další otázka. Otázka perzistence. Budeme stahovat pokaždé, když bude program volán nebo si stránku "někam" uložíme? Tento problém je třeba důkladně zvážit, neboť bude program pravděpodobně často volán opakovaně. Rozhodněme se pro následující řešení. Každý stažený soubor uložíme do adresáře /tmp a po každém volání se podíváme, zda náhodou již vhodný soubor nemáme. Budeme muset brát zřetel na stáří souboru. Další podotázka je, jak se budeme zbavovat starých tmp souborů? Vyřešíme to jednoduše. Nijak. Moc místa zabírat nebudou a čas od času každý stejně tempy maže...
  • Dále by měl modul extrahovat data na základě zdrojového kódu. K tomu budeme muset pečlivě prostudovat HTML kódy z livescore.com.
  • Další vlastností bude hledání zápasu podle daných kritérií.
  • A na závěr se nabízí otázka, jak udělat online přenos? Protože o formu zobrazování dat se modul nestará, tak se tato otázka vyřeší sama. Odpovědnost za online přenos bude mít program live. Modul Livescore bude pouze na požádání posílat průběžná (nebo konečná) data.

Program live

Jak již bylo řečeno, live se stará o kontakt uživatelem a formu zobrazování dat. Vytvořme opět nějakou osnovu, na které budeme moci stavět. I když tentokrát nebude příliš konkrétní.

  • Je třeba obsloužit volání uživatele.
  • Na základě dat z modulu Livescore bude třeba zobrazit aktuální zápasy, případně detail zápasu. Online přenos bude řešen cyklickým doplňováním nových informací.
  • V zadání projektu jsme rozdělili zápasy na 3 typy, podle toho, v jakém jsou stavu z hlediska časového postupu. Tyto druhy rozlišíme barvami.

Správa projektu

Budeme se zabývat pouze programováním. Nicméně nepíšeme program na 10 řádků a asi by tedy bylo žádoucí použít nějaký program na správu verzí.

Dokumentace

Použití našeho programu bude poměrně jednoduché, u modulu to bude složitější. Měli bychom vytvořit dvě manuálové stránky ve formátu POD. Jednu pro modul a další pro příkaz live. Dokumentací POD se v rámci seriálu ještě budeme podrobně zabývat.

Co se týče komentářů v kódu, tak je samozřejmě dobré komentovat nejasná místa. Protože používáme objektově orientované programování, neměly by být u dobře navrženého projektu nároky na komentáře příliš vysoké. Nelze říct, že dobrý kód komentáře nepotřebuje, ale že v dobrém kódu je na první pohled jasné, co se právě děje a nejasná místa vznikají daleko méně.

Závěr

Úspěšně jsme dokončili naši minianalýzu a příště se pustíme již do programování.

Verze pro tisk

pridej.cz

 

DISKUZE

Super článek 9.10.2007 17:17 Petr Zajíc




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

14.11.2017 16:56 /František Kučera

Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).


Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

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

> Poslední diskuze

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

27.7.2017 12:24 / Jaromir Obr
Cteni/zapis

Více ...

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