Portál AbcLinuxu, 4. května 2025 09:11

Vyhledávání dopravních spojení počtvrté a naposledy?

26.7.2008 12:27 | Přečteno: 1257× | poslední úprava: 26.7.2008 13:51

Po krátké době další zápisek ohledně mého skriptu na vyhledávání dopravních spojení. Tentokrát to ale nebude jen o úpravách skriptu samotného, ale i o aplikaci do mobilu a CGI skriptu, který to oboje propojí. To bude do jisté míry završení mého úsilí.

Začneme tradične s popisem změn v původním skriptu pro CLI. Doplnil jsem do skriptu alespoň jakés takés komentáře. Odstranil jsem zbytečné fragmenty kódu, které zůstaly ze starších verzí a již nebyly potřeba. Také jsem využil generátorů (díky JS za nakopnutí), což vedlo k malémů zkrácení skriptu, ale hlavně jej to snad učinilo krapet přehlednějším. Snad jsem na nic důležitého nezapomněl. Skript se tak dostává do verze 0.41.

Novinkou je zveřejnění i mé Java aplikace do mobilu, jejímž smyslem existence bylo stát se mobilní variantou skriptu pro CLI. Neručím za přehlednost či krásu kódu (ikdyž jsem se snažil). Nejsem zrovna fanouškem Javy, tudíž jediným kritériem bylo, aby to fungovalo na mém obstarožním mobilu. Z toho důvodu jsem také použil pouze MIDP 1.0. Nemůžu zaručit, že to bude funkční zrovna na Vašem telefonu.

Aplikace samotná je vcelku jednoduchá a věřím, že ji není nutné blíže popisovat. Zmíním pouze možnosti nastavení, které mají zajistit jistit, aby nebylo nutné kompilovat a nahrávat do mobilu novější verzi kdykoliv je předchozí skript obohacen o novou dovednost (vyhledávání dopravních spojení v dalším městě). V menu lze nastavit tři údaje. Prvním je seznam položek, které se objeví v hlavním menu. To proto, že někdo může preferovat krátké a přehledné menu před větším množstvím položek, které nepotřebuje. Druhým je seznam vyhledávacích kódů. Jedná se o dvojice "Položka v menu":"vyhledávací kód", přičemž vyhledávací kód je předáván CGI skriptu, jež je jakýmsi prostředníkem mezi Java aplikací a skriptem pro CLI. Třetí nastavitelnou položkou je práve adresa tohoto CGI skriptu.

Komunikace tedy probíhá následovně:

  1. V Java aplikaci zadáme údaje o spojení a spustíme vyhledávání.
  2. Aplikace se spojí s CGI skriptem a předá mu požedované parametry.
  3. CGI skript spustí skript pro hledání v CLI, odstraní z výstupu diakritiku pomocí cstocs a výsledek předá zpět Java aplikaci, jež jej zobrazí uživateli. Pokud nebyl počáteční či koncový bod jednoznačně určen, dostane Java aplikace seznam možností, z nichž si uživatel vybere a celý proces se ještě jednou zopakuje.
Komunikaci se serverem Idos obstarává CLI skript, jež jsem tu popisoval v předcházajících zápiscích. Výhodou této komunikace je minimální objem dat přenášených přes GPRS a tedy i "náklady", jež činí něco mezi 10 a 20 haléři.

Tohle chci taky! Co je k tomu potřeba?

  1. Skript pro vyhledávání v CLI, momentálně je k dispozici verzi 0.41.
  2. Java aplikaci do mobilu (momentálně verze 0.4), tj. JAR a JAD soubory, k dispozici je i zdrojový kód.
  3. CGI skript, jež bude prostředníkem mezi Java aplikací a skriptem pro CLI. Uvedená verze je funkční, nicméně za její bezpečnost neručím. Tento CGI skript také potřebuje program cstocs na odstranění diakritiky (nejspíše budete muset u konverze změnit kódování).
  4. Ověřit funkčnost CLI a CGI skriptů.
  5. Spustit v mobilu Java aplikaci a v nastavení zadat URL Vašeho CGI skriptu.

To by mělo být vše. Vyzkoušejte a uvidíte. Doufám, že budete s tímto dílkem spokojeni a pokud se Vám zalíbí, přihlašte se v anketě. Rád bych měl alespoň přibližnou představu o počtu uživatelů. V diskuzi samozřejmě uvítám Vaše komentáře, případně mě můžete kontaktovat mailem. Díky.

       

Hodnocení: 91 %

        špatnédobré        

Anketa

Používáte můj program?
 (11 %)
 (22 %)
 (0 %)
 (0 %)
 (67 %)
Celkem 27 hlasů

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ář

thingie avatar 26.7.2008 12:33 thingie | skóre: 8
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Odpovědět | Sbalit | Link | Blokovat | Admin
No, já bych byl třeba rád, kdyby to umělo zobrazit plánované výluky, ukázalo odkaz na koupení jízdenky, řazení vlaku a další fičury :-)
Růžové lži.
26.7.2008 12:54 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
No, to by opravdu byly ficury, nicmene takovou komplexnost jsem pro program nikdy neplanoval. Predpokladane vyuziti bylo spise neco jako "Stihnu jeste jedno pivko nez mi pojede vlak?". :-)
26.7.2008 12:56 JS
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Odpovědět | Sbalit | Link | Blokovat | Admin
Jeste jednu poznamku k tem generatorum: Funkci generator_dat byste vubec nepotreboval, staci misto ni pouzit enumerate(self.DATA.splitlines()). Bohuzel funkce splitlines() vraci seznam, bylo by imho mnohem lepe, kdyby take vracela jenom iterator, ale pro funkcnost programu to neni podstatne.
26.7.2008 13:13 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Mam dotaz trochu mimo. Da se v Pythonu nejak docilit toho, abych v jednom kroku provedl prirazeni a zaroven i otestoval uvedenou hodnotu? Tj. misto dvou prikazu: r = funkce(), if r:, by byl jen jeden prikaz, podobne jako to jde (myslim) v C.
thingie avatar 26.7.2008 13:21 thingie | skóre: 8
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Přiřazení by se mělo zrušit :-)
Růžové lži.
26.7.2008 13:49 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
No, mne jde konkretne o kus kodu, ktery jsem zapsal jako:
r = 0
while not r:
    radek = gen.next()
    r = re.search(u'<td align="right">(.{,6}?)<', radek)
spoj_datum = r.group(1)
Kdy bych rad presunul vyhledavani regularniho vyrazu do podminky, nicmene potrebuji dale pracovat i s tim vracenym objektem (v pripade nalezu). Takhle, jak to mam, se mi to moc nelibi.
26.7.2008 16:39 JS
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
V Pythonu prirazeni a test podminky soucasne nejde. Prirazeni zkratka neni vyraz, narozdil od C.
26.7.2008 16:42 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
To vim, ja jen, jestli neni nejaky elegantni zpusob, jak to resit.
26.7.2008 21:14 JS
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Konkretne v tom priklade by bylo mozne pouzit "poor man's until":
while True:
  .. neco delej
  r=vysledek regularniho vyrazu
  if not r: break
  .. jeste treba neco delej
Tenhle idiom obcas pouzivam, ma tu vyhodu, ze si muzu koncovou podminku smycky dat presne kam potrebuji.
27.7.2008 00:33 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Hm, prijde mi to jako z blata do louze. :-) Ale asi to bude tak, ze kde nic neni...
27.7.2008 08:57 JS
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Na druhou stranu, musim uznat, ze mi ta soucasna situace vyhovuje. Napsat = misto == v podmince je asi nejcastejsi chyba, kterou v Pythonu delam.
26.7.2008 14:24 Kappi-tux | blog: kappiho_tuxik
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Odpovědět | Sbalit | Link | Blokovat | Admin
Asi si začnu hrát s conky aby mi pořád ukazoval aktuální časy odjezdů :-) měl by někdo nápad jak to udělat?
Zkušenost je věc, kterou získáš až potom, cos ji potřeboval.
26.7.2008 14:28 bibri | skóre: 33 | Olomouc
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Rozparsovat externím skriptem nějaký wget...
26.7.2008 14:38 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
No, zkuste kouknout na ten CLI skript, myslim, ze ta data nebude problem z vystupu ziskat.
31.7.2008 00:33 miro
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?

Díky za inspiraci, už se mi to povedlo. Cron spustí skript a výstup přesměruje do txt souboru (ještě ho před tím přegrepuju, aby v conky zbytečně nezabíral místo řádek "Datum" a řádek s výší jízdného). Do ~/.conkyrc pak už jen stačí dát na správné místo řádek ${offset 0}${color}${exec cat /cesta/k/souboru.txt}

Občas by se mohla hodit i volba času příjezdu do cílové stanice, nešlo by to přihodit do wishlistu? BTW po programátorské stránce to sice ocenit neumím, ale jako nanejvýš spokojený koncový uživatel vám tleskám.

31.7.2008 10:41 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Vida, zapomnel jsem odpovedet na Vas dotaz. Ted uz je to s krizkem po funuse, nicmene... Ja si s tim grepovanim hral a pro odjezdy tramvaji jsem pouzival treba
./spoje.py -s 10 brno cervinkova skacelova | grep tramvaj | awk '{print $2 " " $3 " " $5 " "$6}' | head -n 3
Pro konkretni spoj jen zadam treba nasledujici dve zastavky, "-s 10" mi zajisti dostatek nalezenych spojeni, ze kterych pak vyhazi ty co me nezajimaji a ze zbytku vezmu jen prvni tri. V awku se moc nevyznam, asi to jde udelat i lepe... A dal to s tim cronem a conky jste uz popsal.

Co se tyce casu prijezdu, tak jsem na to koukal uz drive, ale pak jsem to z nejakeho duvodu (asi neprehlednost kodu) zavrhl. Jeste na to kouknu, mozna to ted uz bude lepsi. Momentalne dokoncuji vypis zastavek na trase, co by rad David Watzke, tak snad pak.
26.7.2008 20:29 zruda
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Odpovědět | Sbalit | Link | Blokovat | Admin
Skript dobrý. Dokonce jsem díky němu přišel, že už asi opravili nepříjemnou chybu, která způsobovala, že při zadání Liptovský Mikuláš to nehledalo autobusy, protože ty tam měly zastávku danou jako Lipt. Mikuláš :-)
27.7.2008 12:37 nula | skóre: 22 | blog: archaic
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Odpovědět | Sbalit | Link | Blokovat | Admin
Díky moc - zkusil jsem ten skipt v pythonu a naprosto se mi to líbí. Asi si to dám na všechny pomalejší počítače :-)

Javu v mobilu bohužel ani nevyzkouším.
multi avatar 28.7.2008 14:10 multi | skóre: 38 | blog: JaNejsemOdsut
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Odpovědět | Sbalit | Link | Blokovat | Admin
super web idos.cz se me vubec neliby, todle je dokonale rozhrani
Fitness ajťák: kutilův web; bezdrátová čidla teploty vývoj softwaru linux server
David Watzke avatar 28.7.2008 22:46 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Odpovědět | Sbalit | Link | Blokovat | Admin
Tak jsem to zkusil a je to skvělý, díky. Jsem nadšenej z toho, že to nemá žádný Pythoní závislosti. Pak to snad zkusím i na mobilu. Feature request: bylo by hezký, kdyby to umělo vypsat detaily spojení.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
29.7.2008 06:42 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Co presne myslis temi detaily spojeni? Detail o konkretnim vlaku/busu (pres ktere zastavky jede)? A nebo to, co se v novem rozhrani idosu jmenuje "detail spojeni", otevre se v novem okne a je tam prakticky napsane to, co bylo uz na strance predchozi? To prvni by mozna i slo, ikdyz me nenapada, jak to prehledne zakomponovat do toho CLI rozhrani. To druhe pujde tezko, jelikoz skript nepracuje skrz to nove idos rozhrani a tudiz zadnou takovou nabidku nemam. A nebo treti moznost a myslis ty priznaky jako "preprava kol, jidelni vuz,..."?
David Watzke avatar 29.7.2008 10:14 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Myslím ten detail spojení, jak je tam přes který zastávky jede a kdy tam je... je to to okno co vyskočí.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
29.7.2008 11:08 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Aha. No, zkusim vymyslet jak to zakomponovat do te aplikace. Ty vypisy byvaji dost dlouhy, tak aby to neprekazelo. Nejspis bych vypisoval jen ty zastavky, ktere se tykaji hledane trasy. Ale stejne se to natahne. Nejaky napad? Jak bude cas (a vule :-)), tak se do toho pustim.
David Watzke avatar 29.7.2008 12:05 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Napadá mě vypisovat je jenom na požádání (přepínač) nebo jenom když -s 1.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
29.7.2008 12:46 kkaarreell | skóre: 6 | blog: perkele
Rozbalit Rozbalit vše Re: Vyhledávání dopravních spojení počtvrté a naposledy?
Jasny, prepinac je samozrejmost. A snad bude i stacit. Tak vyckej casu a nech se prekvapit. :-)

Založit nové vláknoNahoru

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