Portál AbcLinuxu, 3. května 2025 03:45

Vyhledávání dopravních spojení popáté a tečka

31.7.2008 14:28 | Přečteno: 1512× | poslední úprava: 2.8.2008 21:56

Je tu další pokrok ve vývoji skriptu pro hledání dopravních spojení v CLI. Tohle bude nejspíš na delší dobu poslední zápis. Nechci tak často okupovat titulní stránku s blogy, takže pokud se stane, že bych skript v budoucnu ještě upravoval, slibuji, že už mu věnuji samostatnou stránku někde na webu a informace o jeho adrese bude na toto téma poslední. A nebo možná ne.

!!!UPDATE!!! Tak se i stalo, domovská stránka projektu je na http://code.google.com/p/spoje/.

Ještě než se vrhnu na novinky, chtěl bych poděkovat všem dobrým duším za pozitivní ohlasy a náměty na zlepšení. A o čem se bude po dnešním zápisku mluvit?

Implementace vypisování detailů o jednotlivých spojích (no, prakticky jen zastávky, časy příjezdů a odjezdů a nějaký ten balast okolo) se ukázala být ne až tak složitá. Sice jsem skript zase trochu zamotal, nicméně se dílo podařilo a komu tato funkce chyběla, nechť pátrá po přepínačích "-z" a "-Z".

Přidání podpory pro vyhledávání podle času příjezdu se ukázalo být intelektuální výzvou. Úprava skriptu byla triviální, horší bylo vymyslet jak tuto funkci jednoduše zpřístupnit. Chtěů jsem přitom zachovat parametr "-c". Prvním nápadem byla specifikace času ve formátu "-c <10:00". I ti průměrní jistě tuší, že toto řešení je poměrně nešťastné. Já se přiznám, že mi to došlo až při pokusu o spuštění. Nebudu to protahovat, projel jsem na celé čáře a uchýlil se k formátu "-c 10:00p" ("p" jako příjezd). Tak nevím, jestli by "-C" nebylo lepší. Bude-li mít někdo jiné preference, nechť dá vědět, v dalších verzích to může být jinak. Na nějakou zpětnou kompatibilitu se tu nehraje.

Zbytek úprav jsou jen formality: přepracoval jsem nápovědu a při zadávání datumu není nyní nutné uvádět rok. To je myslím vše.

Plány do budoucna jsem již naznačil v úvodu. Střízlivé náměty na zlepšení a jiné ohlasy pište ještě do diskuze, v budoucnu pak na moji adresu uvedenou ve skriptu. Podle ankety má skript cca 7 uživatelů. Pevně věřím, že bude-li při nás stát štěstí, do konce roku překročíme desítku a za dalších deset let dvacítku. To bude ta správná chvíle na vydání fanouškovských triček, nízký počet uživatelů zaručí dostatečnou exkluzivitu a originalitu.

Skript je ke stažení na stále stejné adrese. Na závěr pár ilustrací z terminálu:

# Nasledujici prikazem vyhledame dopravni spojeni z Hlavniho nadrazi na Uvoz 
# s prijezdem na Uvoz do 17:58 (vcetne). Mohli bychom tak povzbuzovat obsluhu 
# v Pomalem baru pri otviracce, pokud by teda nebyl momentalne zavreny... 
# nebo ze by uz ne?

$./spoje.py -c 17:58p -s 3 brno "hlavni nadrazi" uvoz 
--------------------
Datum: 31.7.
  *    17:36  Hlavní nádraží, 100, tramvaj 4
17:45    *    Úvoz, 100

Pozn.: 9 min, 2 km, Základní 10 Kč
--------------------
Datum: 31.7.
  *    17:42  Hlavní nádraží, 100, tramvaj 4
17:51    *    Úvoz, 100

Pozn.: 9 min, 2 km, Základní 10 Kč
--------------------
Datum: 31.7.
  *    17:48  Hlavní nádraží, 100, tramvaj 4
17:57    *    Úvoz, 100

Pozn.: 9 min, 2 km, Základní 10 Kč


# Vyhledame nejblizsi vlakovy spoj z Olomouce do Plzne a vypiseme detaily 
# o trase pouzitych vlaku. 
# Pro vypis pouze zastavek na trase slouzi parametr -z.

$./spoje.py -s 1 -Z vlak olomouc plzen
--------------------
Datum: 31.7.
  *    14:17  Olomouc hl.n., vlak SC 506 SC PENDOLINO
16:32    *    Praha-Holešovice, přesun asi 30 min
  *    17:24  Praha-Smíchov, vlak R 456 ALBERT EINSTEIN
18:50    *    Plzeň hl.n.

Pozn.: 4 hod 33 min, 360 km, 648 Kč / 422 Kč (zákaznické jízdné)

=== SC 506 SC PENDOLINO ===    Příj.   Odj.  Pozn.
 Ostrava hl.n.                        13:20           0 km
 Ostrava-Svinov                13:26  13:28           5 km
*OLOMOUC HL.N.                 14:15  14:17         106 km
 Pardubice hl.n.               15:33  15:34         252 km
*PRAHA-HOLEŠOVICE              16:32                356 km

=== R 456 ALBERT EINSTEIN ===    Příj.   Odj.  Pozn.
*PRAHA-SMÍCHOV                          17:24           0 km
 Beroun                          17:53  17:54          39 km
 Hořovice                        18:08  18:09          58 km
 Rokycany                        18:30  18:31          87 km
*PLZEŇ HL.N.                     18:50  19:00         110 km
 Domažlice                       19:44  19:46         169 km
 Furth i Wald                    20:11  20:21         191 km
 Cham(Oberpf)                    20:36  20:37         210 km
 Schwandorf                      21:05  21:21         258 km
 Regensburg Hbf                  21:48  21:57         300 km
 Neufahrn(Niederbay)             22:19  22:20         338 km
 Landshut(Bay)Hbf                22:34  22:36         361 km
 Freising                        22:56  22:57         395 km
 München Hbf                     23:21                436 km


# a na zaver nova a ukecanejsi napoveda

$./spoje.py

    Skript hleda dopravni spoje prostrednictvim serveru idos.cz
    Verze 0.45

    Pouziti:  spoje.py [prepinace] typ_spoje odkud[:kod] kam[:kod]

    Argumenty:
        typ_spoje  jedna z nasledujicich moznosti:
                     vlak - vlakova spojeni v CR
                     bus - autobusove spoje v CR
                     komb - kombinace autobusovych a vlakovych spoju v CR
                     brno - MHD v Brne (vcetne IDS JMK)
                     praha - MHD v Praze
                     ostrava - MHD v Ostrave
                     liberec - MHD v Liberci
        odkud      Retezec urcujici misto (zastavku) odjezdu. Viceslovny nazev
                   je treba (spolu s pripadnym kodem) uzavrit do uvozovek nebo
                   apostrofu.
        kam        Retezec urcujici misto (zastavku) prijezdu. Viceslovny nazev
                   je treba (spolu s pripadnym kodem) uzavrit do uvozovek nebo
                   apostrofu.
        kod        Retezec identifikujici misto v pripade nejednoznacneho zadani.

    Prepinace:
        -b         Batch mode - nepta se na pripadne upresneni spoje.
        -c cas     Cas odjezdu resp. prijezdu (do cilove stanice) hledaneho
                   spojeni (defaultni hodnotou je aktualni cas).
                   Cas odjezdu specifikujeme napriklad '-c 10:00'.
                   Cas prijezdu se specifikuje pomoci znaku 'p' hned za zadanou
                   hodnotou, tedy napriklad '-c 10:00p' oznacuje spojeni s casem
                   prijezdu pred 10:00.
        -d datum   Datum odjezdu/prijezdu (defaultni hodnotou je aktualni datum)
                   pouziti napriklad '-d 25.7.' nebo '-d 25.7.2008'.
                   Pri neuvedeni roku se pouzije aktualni kalendarni rok.
        -p cislo   Maximalni pocet prestupu (defaultni hodnota 3)
        -s cislo   Pocet hledanych spoju (defaultni hodnota 5)
        -z         U kazdeho spoje vypise seznam zastavek na trase
        -Z         U kazdeho spoje vypise seznam vsech zastavek

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

31.7.2008 15:08 xaxa
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Odpovědět | Sbalit | Link | Blokovat | Admin
$ chmod +x spoje.py $ ./spoje.py bash: ./spoje.py: /usr/bin/python: bad interpreter: No such file or directory $
31.7.2008 15:11 fakenickname | skóre: 42 | blog: fakeblog
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Jeste jednou a lepe..
$ ./spoje
bash: ./spoje: No such file or directory
$ chmod +x spoje.py 
$ ./spoje.py 
bash: ./spoje.py: /usr/bin/python: bad interpreter: No such file or directory
$ whereis python
python: /usr/local/bin/python /usr/local/man/man1/python.1.gz /usr/ports/lang/python
$ head -n1 spoje.py 
#!/usr/bin/python 
$ 
Pro tyhle veci by se mel pouzivat nejaky kouzelny prikaz misto samotne absolutni cesty, ale za boha si nemuzu vzpomenout jaky..
31.7.2008 15:21 fakenickname | skóre: 42 | blog: fakeblog
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
ah.. uz sem to nasel.. http://en.wikipedia.org/wiki/Shebang_(Unix).. hlavne sekce "Portability"
31.7.2008 15:27 fakenickname | skóre: 42 | blog: fakeblog
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
a jinak diky za pekny skriptik.. bude se hodit..
31.7.2008 15:30 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Diky za pripomenuti, tohle je ta vec, co jsem chtel upravit a zapomnel. Musim si to psat. :-D
31.7.2008 15:31 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Ehm, tim jsem chtel rict, ze uz je to opraveno.
1.8.2008 09:46 miro
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Odpovědět | Sbalit | Link | Blokovat | Admin

Časy příjezdů jsou paráda, moc díky za to. Ještě jednou smekám, moc užitečná věcička.

Měl bych ještě jeden tip, když tu byla nad vaším předchozím blogpostem ta debata o conky. Bylo by fajn mít možnost zobrazit zpoždění vlaku (pokud je na cestě), případně mít možnost zobrazit zpoždění přímým zadáním čísla nebo názvu (příp. části názvu) vlaku (pokud ho znám). Ta druhá možnost asi není realizovatelná přes jizdnirady.idnes.cz (nikde jsem tam tuhle volbu nenašel) ani přes cd.cz (tam možnost zjistit polohu vlaku podle jeho čísla existuje, ale formulář je chráněný captchou), ale existuje možnost brát data odsud a odsud. Když mám jít někomu naproti k vlaku, hodilo by se mít v conky na ploše údaj o tom, kolik mám ještě času.

Pokud už pro vás tenhle námět nebude taková výzva, abyste se tím zabýval, nevadí, i tak velký dík za stávající aplikaci. Ale pokud byste měl aspoň tip na nějaké šikovné howto kterak rozparsovat html v bashi (k pythonu jsem ještě vůbec nedostal, musel bych se ho naučit komplet od začátku), uvítám info, časem bych to případně zkusil sám (najdu-li čas na studium).

1.8.2008 10:52 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Jak jsem to zacal cist, tak jsem si rikal, ze priste nekdo dalsi bude chtit hodinky s vodotriskem. :-D Ale o tech strankach se zpozdenim jsem nevedel. Jak budu mit cas, kouknu na to. Nemusel by to byt az takovej problem, ale nic neslibuju.
1.8.2008 11:47 miro
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
priste nekdo dalsi bude chtit hodinky s vodotriskem. :-D
Nic ve zlém, já to bral spíš jako
Střízlivé náměty na zlepšení a jiné ohlasy pište ještě do diskuze (...)
:-)
2.8.2008 13:19 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Vsak jasne, ja jen ze nez jsem se docetl k tem odkazum, tak mi to moc strizlivy neprislo. :-D Ale dik za namet, libi se mi to, tak na tom zapracuju.
2.8.2008 14:32 miro
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
No, já jsem původně myslel, že není moc reálná ani ta první možnost (tj. zobrazit zpoždění vlaku ne podle jeho čísla ale u vyhledaného spoje, který je už na cestě, tj. u spoje je ikonka hodin s javascriptovým popupem), ale když jsem viděl, že jste dokázal vyparsovat zastávky vyhledaných spojů (což je zřejmě dost totéž [?])... BTW by údaj získaný z originálních stránek byl o něco aktuálnější, na babitronu by měly být polohy osobáků "do 15 minut" od oficiálního zveřejnění, u ostatních vlaků "do 5 minut" (viz mnou odkazované stránky - poznámka v jejich zdrojovém kódu úplně dole). Ale ono to z babitronu většinou bude stačit (člověk zpravidla potřebuje sledovat rychlíky jedoucí z větších vzdáleností).

BTW zdá se mi to, nebo poslední verze vašeho skriptu (na rozdíl od předchozích) už neukazuje spoje jedoucí až další den (speciálně jsem si toho všimnul u vlaků, které si zobrazuju v conky)?
2.8.2008 16:05 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Aha, no ja totiz vubec nevedel, ze z originalnich stranek lze ziskat ten udaj o zpozdeni. Az tak jsem je nikdy nevyuzival, spis na tu hromadnou dopravu, takze tahle informace me uplne mijela. Nicmene ted kdyz to vim, tak ten udaj budu tahat z idosu.

Pokud jde o ty spoje jedouci dalsi den, tak v tomhle ohledu jsem nic nemenil. Takze by to melo byt zpusobeno tim, ze ty spoje idos proste nevraci. Ja vyuzivam rozhrani vlak.cz, muzete se teda kdyztak podivat, jake spoje to dava tam. Ale podle toho, co jsem zkousel, tak to ty spoje dalsi den proste nevraci. Bohuzel. Kdyztak zkuste, jestli v tomto ohledu najdete nejaky rozdil v chovani mezi idos.cz a vlaky.cz.
2.8.2008 21:53 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Tak uz mam ta zpozdeni vlaku pokusne implementovana. Zatim je to dostupne ve vyvojove verzi, jez je k dispozici prostrednictvim subversion, vice viz viz http://code.google.com/p/spoje/. Prohlednete si napovedu programu, trochu jsem zmenil prepinace.
3.8.2008 12:23 miro
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Díky za vylepšení, bohužel mi právě začíná dovolená, tak se nebudu moci přiřadit k testerům. Ale těším se na to po návratu.
1.8.2008 14:48 Jiří Jakeš | skóre: 22 | blog: Linuxovna_JJ | Taipei
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
ad babitron: Informace jsou k dispozici také výhradně v plain textu (Verze pro internet v mobilu).
1.8.2008 15:11 miro
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Vida, tohle jsem neznal, to už (snad) dokonce zvládnu naparsovat i sám :-)
Limoto avatar 1.8.2008 12:44 Limoto | skóre: 32 | blog: Limotův blog
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Odpovědět | Sbalit | Link | Blokovat | Admin
Myslím, že by ses měl naučit s nějakým VCS a použít nějakej jeho veřejnej hosting.
2.8.2008 13:17 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Myslels asi CVS. No, prijde mi to na ten skript zbytecny. Vyhodou by snad mohla byt snazsi aktualizace pro uzivatele, ale pro me by byl spis komplikaci.
2.8.2008 21:50 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
No, tak nakonec jsem projekt nahral na googlecode a tim padem jsem se dostal i k subversion, viz http://code.google.com/p/spoje/
Limoto avatar 3.8.2008 19:57 Limoto | skóre: 32 | blog: Limotův blog
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Myslel jsem VCS (Version Control System) obecně, CVS je konkrétní (mj. asi nejhorší) implementace.
3.8.2008 21:27 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení popáté a tečka
Ach tak.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.