Portál AbcLinuxu, 1. května 2025 01:31
Takže jak jsem slíbil, tak plním. Dneska sem dám tři skriptíky na stahování z web úložišť. Budou to ty jednodušší. Na žádosti sloučím ty tři skriptíky do jednoho.
Pro každý skript vytvořím vlastní zápisek, až je budu později upravovat, aby se to líp hledalo. Tak promiňte za tu salvu.
Stahovač na web leteckaposta.cz je jednoduchý, prakticky se dá ze stránky vzít link a pastnout na CMD line. Nejsem si teď úplně jistej, jestli leteckaposta.cz kontroluje referer, nebo striktně vyžaduje cookie, ale nějak mi to bez toho poprvý nechodilo, tak jsem to tam udělal. Skript jsem teď ověřoval, protože jsem ho drobně upravil, takže by snad měl fungovat správně.
Pokud by tenhle, nebo i nějaký jiný skript nefungoval, tak napište do diskuze a přidejte odkaz, na kterém to nefungovalo. Já to pak ověřím a pokusím se to opravit (samozřejmě, podle časových možností). Stejně tak, pokud budete mít někdo nějakou ideu, jak ten skript třeba vylepšit, tak ho opravím, ale protože ty skriptíky dávám pod GNU GPL v3, tak si je můžete klidně stáhnout a upravit je tak, aby měly třeba GUI. Ale pak už to asi ztratí to kouzlo CMD line
Předpokládám, že mi nebudete házet odkazy na soubory, které jsou už zrušené. Tohle moje skripty netestujou, takže se můžou třeba chovat podivně, ale snažil jsem se to napsat tak, aby v případě nenalezení toho správného odkazu nějak "normálně" skončil. Uch, doufám, že se nic nerozpadne při přechodu z TXT do HTML (musel jsem nahradit < za HTML sekvence <).
A ještě jenom doplnim, že pokud bude zájem, tak můžu případně některý věci objasnit. Rozhodne tady nebudu suplovat manuál, takže pro dokumentaci jednotlivých příkazů RTFM, ale spíš vysvětlím případné háčky nebo zvláštní konstrukce.
UPDATE 2008/10/14: Podle upozornění Peva, že skript nenavazuje, protože wget pojmenovává soubor i s QUERYSTRINGem, jsem skript down-ulozto upravil a použil jsem na stahování curl. Takže, pokud ho nemáte v systému, tak je mi líto, ale budete muset instalovat nebo si musíte upravit skript, aby používal něco jiného a fungoval jinak.
UPDATE 2008/12/16: Takže Pev mě upozornil a sám jsem si toho taky všimnul-ulozto přidali captchu. Sice jsem myslel, že to bude složitější a nebudu mít čas, ale čas jsem našel a složité to nebylo, takže aktualizovaný down-ulozto je na svém místě. Ještě jsem odstranil z curlu parametr --raw, který tam (snad) nebyl důležitý, ale bez něj to teď funguje i na debianu Etch se starším curlem. Poznámka k činnosti. Server uloz.to při posílání captcha obrázku nekontroluje, který obrázek zaslal prohlížeči a navíc stránka obsahuje link na vygenerování nového captcha obrázku. Captcha obrázek je URL http://img.uloz.to/captcha/XXXX.png, kde XXXX je číslo mezi 1 a 10000. Dále toto číslo ukládá do hidden proměnné ve formuláři. Díky tomu, že server nekontroluje vygenerovaný obrázek a že dovoluje generovat jiný obrázek, je možné napevno vložit číslo obrázku a kód který obsahuje, takže není nutné při každém stahování na obrázek koukat a opisovat captcha kód. Napadlo mě ještě vybudovat databázi všech 10000 captcha obrázků, ale když to jde takhle jednoduše, tak se s tím zatím nebudu zatěžovat Je mi jasný, že tohle řešení nebude fungovat navždy, tak rychle stahujme, dokud to jede
Jinak ale rychlost uloz.to je fakt "závratná" - do ciziny mi to tahá tak 20-30kB/s, do ČR tak 80-120kB/s.
UPDATE 2009/01/21: Tak jsem zjistil, že skript down-ulozto nefunguje. Myslel jsem si, že už stahovač na serveru ukládá, jakej captcha obrázek generoval a pak to kontroluje. Jednak jsem díky tomu zjistil, že napevno nastavený obrázek už obsahuje jiný kód, takže by stačilo ho změnit. Pak mě ale napadlo, že oni můžou generovat každý den novou databázi captcha obrázků, tak jsem se rozhodl přidat zadávání kódu. To jsem zkopíroval (a lehce upravil z down-megauploads). Ale ani potom to nezačalo fungovat. Zjistil jsem, že mi stránka jednoho souboru generuje pořád stejný captcha, ikdyž jdu ze tří různých IP adres a navíc po poslání kódu vždy odpoví, že je překročen počet volných slotů a mám použít VIP. Dodělal jsem teda i testování toho textu a pokud je stažený soubor menší nez 50000 bytů, příkaz file o něm prohlásí, že to je text/html a po konverzi UTF8->ISO88592->ASCII se v něm najde text o překročení limitu free slotů, tak soubor smaže. Další dependence je teda iconv a stat. Jestli budu mít možnost to ostestovat s free slotama, tak to případně ještě doladím.
UPDATE 2009/02/11: Jenom oprava textu v titulku Xdialogu u skriptu down-ulozto.
#!/bin/bash if [ $# -eq 0 ];then cat <<EndHelp Usage: $0 URL ... EndHelp else tmpdir="$( mktemp -d )" while [ $# -gt 0 ];do url1="$1" shift output1="$( wget -O - -q --keep-session-cookies --save-cookies="$tmpdir/cookies" "$url1" )" baseurl="$( echo "$url1" | perl -ne 'print "$1" if m,^(https?://[^/]+)/,i;' )" urlpath="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; print $p if ((($t)=($a=~m,(<a[^>]*class=["\x27]download-link["\x27][^>]*>),is)) and (($p)=($t=~m,href=["\x27](/file/[^"\x27]+)["\x27],is))); ' )" file="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; print $f if (($f)=($a=~m,<a[^>]*class=["\x27]download-link["\x27][^>]*>([^<]+)</a>,is)); ' )" echo "BASEURL: $baseurl" echo "URLPATH: $urlpath" echo "FILE: $file" if [ -n "$file" ] && [ -n "$urlpath" ];then wget -c -O "$file" --load-cookies="$tmpdir/cookies" --referer="$url1" "${baseurl}${urlpath}" else echo "FAILED" exit 1 fi done rm -rf "$tmpdir" fi
Tenhle skriptík jsem udělal právě teď, když jsem chtěl ověřit funkci skriptu pro uloz.to, tak jsem našel jeden odkaz a zkoušel jsem ho. A skritpik pro uloz.to nefungoval. Pak jsem si všimnul, ze odkaz neni uloz.to, ale uloz.cz. Tak jsem vytvořil i tenhle. Všechny dnešní skripty jsou pořád variací na stejné téma - stáhnout první stránku, v ní najít odkaz na požadovaný soubor a ten pak stáhnout. V případě leteckeposty je odkaz pouze cesta bez serveru, takže se ještě doplní base URL, a jméno souboru není v URL, ale pouze v textu stránky, takže se musí také vyzobnout.
#/bin/bash if [ $# -eq 0 ];then cat <<EndHelp Usage: $0 URL ... EndHelp else tmpdir="$( mktemp -d )" while [ $# -gt 0 ];do url1="$1" shift output1="$( wget -O - -q --keep-session-cookies --save-cookies="$tmpdir/cookies" "$url1" )" url2="$( echo "$output1" | perl -e ' undef $/; $a=<STDIN>; print $1 if ($a=~m,href=["\x27](http://[^/]*uloz\.cz/auth/[a-f0-9]+/file/[^"\x27]+)["\x27],is); ' )" echo "URL: $url2" if [ -n "$url2" ];then wget -c --load-cookies="$tmpdir/cookies" --referer="$url1" "$url2" else echo "FAILED" exit 1 fi done rm -rf "$tmpdir" fi
#/bin/bash console=0 if [ $# -eq 0 ];then cat <<EndHelp Usage: $0 [ { -c | -x } ] URL ... EndHelp else tmpdir="$( mktemp -d )" while [ $# -gt 0 ];do case "$1" in "-c") console=1 ;; "-x") console=0 ;; * ) url1="$1" # output1="$( wget -O - -q --keep-session-cookies --save-cookies="$tmpdir/cookies" "$url1" | perl -e 'undef $/;$_=<STDIN>;print $1 if m;(<form[^>]+name="dwn".*?</form>);is;' )" output1="$( curl -c "$tmpdir/cookies" -L -o - "$url1" | perl -e 'undef $/;$_=<STDIN>;print $1 if m;(<form[^>]+name="dwn".*?</form>);is;' )" url2="$( echo "$output1" | perl -e 'undef $/;$_=<STDIN>;print $a if (($f)=(m/(<form[^>]+>)/is)) and (($a)=($f=~m/action="([^"]+)"/is));' )" captchaimg="$( echo "$output1" | perl -e 'undef $/;$_=<STDIN>;print $a if (($f)=(m;(<img[^>]+id="captcha"[^>]+>);is)) and (($a)=($f=~m;src="([^"]+)";is));' )" captchanb="$( echo "$output1" | perl -e 'undef $/;$_=<STDIN>;print $a if (($f)=(m;(<input[^>]+id="captcha_nb"[^>]+>);is)) and (($a)=($f=~m;value="([^"]+)";is));' )" if [ -n "$captchaimg" ];then wget $rate -U "$agent" -nv -O "$tmpdir"/cap.png --load-cookies="$tmpdir"/cookies --save-cookies="$tmpdir"/cookies --keep-session-cookies "$captchaimg" if [ -n "$DISPLAY" ];then gqview "$tmpdir"/cap.png >/dev/null 2>&1 & pid="$!" ; fi code="" if [ -n "$DISPLAY" ] && [ $console -eq 0 ];then while [ -z "$code" ];do code="$( Xdialog --no-cancel --title 'Uloz.To downloader' --screen-center --stdout --inputbox 'Enter the CAPTCHA code' 10 40 )" ; if [ $? -eq 1 ];then code="-";fi;done else while [ -z "$code" ];do read -p 'Code ["-" for stop]: ' code;done fi if [ -n "$DISPLAY" ];then kill "$pid" ; fi if [ "$code" != "-" ];then postdata="captcha_nb=$captchanb&captcha_user=$code&download=%2d%2d%3e%20%53%74%c3%a1%68%6e%6f%75%74%20%73%6f%75%62%6f%72%20%3c%2d%2d" # wget --load-cookies="$tmpdir/cookies" --post-data="$postdata" --referer="$url1" "$url2" curl -b "$tmpdir/cookies" -c "$tmpdir/cookies" -C - -O -d "$postdata" -L -e "$url1" "$url2" localfile="$( basename "$url2" )" if [ -e "$localfile" ] \ && [ $( stat -c "%s" "$localfile" ) -lt 50000 ] \ && [ "$( file -bi "$localfile" )" = "text/html" ] \ && cat "$localfile" \ | iconv -f utf-8 -t l2 \ | iconv -f l2 -t ascii//TRANSLIT \ | grep -qEi 'Prekrocen[[:space:]]+pocet[[:space:]]+FREE[[:space:]]+slotu';then echo "No free slots" rm "$localfile" fi fi fi ;; esac shift done rm -rf "$tmpdir" fi
Tiskni
Sdílej:
Máš je naházet někam na webNo, na to jsem si prave myslel, ze bych mohl vyuzit blog
Hele, to je asi telepatie, právě o dotfiles jsem zcela nezávisle napsal zprávičku.
Chcete se o své konfigurační soubory podělit se světem? Nebo snad sami hledáte ukázky konfigurace či inspiraci pro vlastní nastavení?No nevim, telepatie. To spis vypada jako narazka prave na moje zapisky
Not Found The requested URL /add_file.php3 was not found on this server. Apache/2.2.3 (Debian) PHP/4.4.4-8+etch6 Server at dotfiles.com Port 80Tak asi nic. Nevim, co s tou zpravickou, mozna by ji chtelo smazat, kdyz ten projekt neni funkcni - teda castecne, data se daji cist, ale ne zapisovat. Jinak me jeste napadlo, ze tady v blogu muzu ty skripty upravovat a porad tu bude jedna kopie, kdezto na dotfiles bych musel zrejme nahravat pokazde novou verzi (nemaji tam autentizaci).
Máš je naházet někam na web a nepastovat je do blogpostu. Pak na ně stačí odkázat v jednom zápise.Je to takhle lepsi?
tak si je můžete klidně stáhnout a upravit je tak, aby měly třeba GUIHmm, mohl bych udělat nějakou tu třídu navíc do fr_czshare a bylo by to hned i s GUI (a s web interface).
Co takhle udělat jeden skript a ty druhé dva zápisky zrušitJo, myslis jako rozeznavat typ podle URL? No jo, to by mozna slo. Popremyslim nad tim, ale nechtel bych to nejak moc zeslozitovat, takhle se to bude lip menit, az se zmeni zpusob stahovani. Navic stahovac na rapidshare je o dost slozitejsi (hraju si tam s proxynama, slozitejc se z HTML vybira cilovy odkaz).
Jojo, to bys klidne mohl, tyhle tri systemy jsou opravdu jednoduchy. Pokud vim, mas ve fatratu rapidshare pro registrovany uzivatele. Pro free-users by to asi nemelo smysl, resp. bylo by to dost slozity, navic to casto meni, a navic to obvykle clovek pouziva z jedny IP adresy, takze pak musi dlouho cekat. Ikdyz fatrat s podporou anonymous rapidshare a seznamem proxy a zobrazenim captcha by mohl byt zajimavy. Jestli nebudou protesty proti tem dalsim skriptum, tak pak muzes mrknout na ten anonymous rapidshare a muzes se rozhodnout.tak si je můžete klidně stáhnout a upravit je tak, aby měly třeba GUIHmm, mohl bych udělat nějakou tu třídu navíc do fr_czshare a bylo by to hned i s GUI (a s web interface).
Založ si projekt na nějakém serveru, kde budeš mít verzovací systém* a sem napiš jen odkaz na projektNo, jak jsem psal u konfigurace WindowMakeru, SF.net jsem zkousel, ale tam mi to zamitli. GoogleCode jsem nezkousel, tak ten bych zkusit mohl. Navic verzovaci system mam pro sebe, udrzuju si v nem konfiguraci a skripty.
nebo piš, když bude nějaká významná nová verze.No, vzhledem k tomu, ze napr. rapidshare meni funkcionalitu dost casto, tak bych to oznamoval taky dost casto. Navic to nejsou nejaky super programy, jenom uzitecny skriptiky, proto jsme je chtel jednou vlozit a pak uz jenom aktualizovat, aby si ostatni mohli prijit do blogu, najit prislusnej skript na meli 99% jistotu, ze je aktualne funkcni.
A místo několika špagetových skriptů by byl lepší jeden modulární program.No, modularni program by byl super, ale to uz by pak opravdu nebyly skriptiky, ale neco jako fatrat. Ja jsem chtel neco jednoduchyho, ale muzu o tom zkusit popremyslet. Mozna by se to dalo. Navic to budu muset trosku opravit, kdyz je to bez proxy, tak mozna dalsi zapisek uz bude univerzalni skript.
Mám jednu prosbičku. Nešlo by to napsat bez Perlu? Mně podobnou práci odvede grep a sed. Na malých systémech je docela pravděpodobné, že tam Perl není.Samozrejme to napsat bez perlu jde. Napr. casto pouzivanej kod
perl -e 'undef $/;$a=<STDIN>;print $1 if ($a=~m,href=["\x27](http://[^/]*uloz\.to/[a-f0-9]+/[a-f0-9]+/[^"\x27]+)["\x27],is);'bych mohl prepsat asi takhle nejak
tr '\n' ' ' | sed -e 's,^.*href=["\x27]\(http://[^/]*uloz\.to/[a-f0-9]+/[a-f0-9]+/[^"\x27]+)["\x27].*$/\1/'Myslim, ze takhle by to melo nejak fungovat. Nicmene, osobne spis predpokladam, ze to lidi budou spoustet na pracovnich stanicich, protoze je to interaktivni a nejlipsi je, kdyz je to spoustene pod Xkama, a kdyz uz, tak se budou data stahovat na systemu s vetsi diskovou kapacitou, takze perl navic by tolik vadit nemusel, nehlede na to, ze na perlu uz byva zavisle dost veci. V tehle jednoduchych verzich by se snad jeste ten perl nahradit dal, ale v tom rapidshare bych ho zrejme stejne nechal. Pisu to proste tak, aby se mi to psalo pohodlne, neberu ohled na zavislosti ani rychlost (kdyz se mi jeden soubor taha 5 minut, tak mi je jedno, ze se mi perl spusti desetkrat). Samozrejme, kde to jde, pouzivam taky grep, sed a awk, ale proste bych to napsal asi takhle: grep+sed+awk = perl. Perl umi vsechno, co vsechny ty programy najednou a dalsi veci navic.
Uznavam, ze tri kratoucky skriptiky ve trech postech asi nebylo super, minimalne jsem je mohl poslat aspon s nejakym rozestupem, ale naopak ty skriptiky nebyly tak moc dlouhy, abych se sem neveslyTady se kód ztratí, když to hodíš k sobě na web a jen odkážeš, je to ideální.
Zatímco ty linuxové věci se týkají jen hodně úzké skupiny lidí (kolik linuxáků stahuje z Letecké pošty?), ostatní zápisky mohou zaujmout většinu.Aha, blahove jsem si myslel, ze blogy na serveru s linuxovym zamerenim budou cist prave lide linuxove zamereni. Kolik lidi stahuje z letecke posty a podobnych? To bohuzel nevim, ale muzu ja nebo nekdo jinej udelat anketu. Ja treba taky nestahuju nejak krute (to bych si asi fakt koupil ucet na rapidshare), ale obcas chci stahnout nejakej dil nejakyho serialu nebo film. Pak se ten skript hodi. Obyc useri maji bud predplatny, nebo to proste pusti v browseru a za 1-2hodiny stahnou dalsi soubor. Navic se na tom lidi muzou priucit i neco jineho, jak jsme psal, pokud by nekdo chtel neco vysvetlit, jak to funguje nebo co znamena nejakej kus kodu, tak rad vysvetlim.
Kdyby tu měly být jen IT věci, pravděpodobně bych blogy skoro přestal číst.No, ja mel dojem, ze blogovacich systemu, kde si kazdy muze psat, co chce, je spousta. Momentalne me napadaji blogy na libimseti.cz a jen tak od boku jsem zadal www.blog.cz.
No, jak uz jsem psal, k sobe na web to hodit nemuzu, protoze zadny "u me na webu" neni. Nemam potrebute mit vlastni web. Navic ja osobne bych uvazoval takhle: Chtel bych skriptik na stahovani z leteckeposty pod Linux. Zkusim se podivat na linux server (nebo to pripadne dat hledat google). Najdu ten clanek v blogu, a je tam i hned funkcni skript. V pripade, ze to hodim na nejakej web a sem dam jenom odkaz, tak by se mohlo stat, ze ten odkaz prestane fungovat, protoze se nekde neco zmeni a budu muset opravovat dve stranky - jednu s tim skriptem, druhou s tim odkazem (samozrejme, na tu s tim odkazem rychlem zapomenu, kdyz budu primarne opravovat jenom ten skript na tej druhej strance).Uznavam, ze tri kratoucky skriptiky ve trech postech asi nebylo super, minimalne jsem je mohl poslat aspon s nejakym rozestupem, ale naopak ty skriptiky nebyly tak moc dlouhy, abych se sem neveslyTady se kód ztratí, když to hodíš k sobě na web a jen odkážeš, je to ideální.
Aha, blahove jsem si myslel, ze blogy na serveru s linuxovym zamerenim budou cist prave lide linuxove zamereni.Ano, bláhově, nedává to totiž smysl. Kolik % návštěvníků může zajímat Linuxový víkend, skripty na několik download serverů nebo sshmulti a jaká diskuze se tam může rozpoutat? Všeobecná společenská témata budou mít v popularitě vždy logicky navrch.
No, ja mel dojem, ze blogovacich systemu, kde si kazdy muze psat, co chce, je spousta. Momentalne me napadaji blogy na libimseti.cz a jen tak od boku jsem zadal www.blog.cz.Jenže ta úroveň je tam i přes některé, hmm, divné zápisky, co tu bývají, o dost horší.
Z toho mi vychazi, ze az se o tomhle serveru dozvi vic lidi a ze je mozny tady blogovat, tak sem bude chodit blogovat kazdej s nizkou kvalitouNo, ja mel dojem, ze blogovacich systemu, kde si kazdy muze psat, co chce, je spousta. Momentalne me napadaji blogy na libimseti.cz a jen tak od boku jsem zadal www.blog.cz.Jenže ta úroveň je tam i přes některé, hmm, divné zápisky, co tu bývají, o dost horší.
No, domnival jsem se, ze linuxove zamereny server budou cist linuxove (nebo aspon pocitacove zamereni) lide. Dal jsem predpokladal, ze linuxove zamerene ctenare linuxove zamereneho serveru budou zajimat clanky, zpravicky a blogzapisky, ktere jsou linuxove zamerene (minialne jsou to skripty v bashi).Jenže GNU/Linux je moc široká oblast, ze které každého zajímá jen malá část. Vždyť je to celý operační systém. Nikdo nebude horlivě číst nějaký zápisek jen proto, že je tam nějaký bashový skript...
Z toho mi vychazi, ze az se o tomhle serveru dozvi vic lidi a ze je mozny tady blogovat, tak sem bude chodit blogovat kazdej s nizkou kvalitou Pak se teprve mozna ABC rozhodne zprisnit podminky.Toto je server pro linuxáky. Pubertální dívčiny (nebo co to tu bylo) už byly komunitou poslány pryč
http://uloz.to/HEX1/HEX2/FILENAME
. Čili, neměly by tam být žádné querystringy a protože to stahuju wgetem s přepínačem -c, tak by to mělo automaticky navazovat.
Jestli je to teď jinak, tak mi sem vlož nějakej link a já to prověřím. A pokud máš pravdu, tak to skript opravím.
Teď si ani nejsem jistej (možná jsem už dost unavenej), co přesně by měl dělat ten kód
local_filename=${url2/*\/}Podle man bash a moje interního debugeru byt to mělo vymazat nejdelší řetězec zakončený "/", to bych asi spíš udělal pomocí
"${url2##*/}"
, ale to je detail. Důležité je, jak vypadá originální filename a podle mě je jedno, jestli ten local_filename uděláš skriptem, nebo to vygeneruje z URL sám wget, ne?
Leda by tam byl redirect, pak bys ale ten filename neudělal ani v tom skriptu. Takže jak to je? Hoď jsme nějaký URL, ať se můžeme bavit konkrétně. A jestli zkusím, že ty cookies nejsou potřeba, tak to zruším.
BTW: Nevím, kdy se zase dostanu k blogu, takže dyžtak čekej na odpověď.
c=.....
, ktery se tam meni, to je cookie uloz-to-id, takze z toho plyne: (a) cookies nutne jsou (mozna referer neni), (b) cislo se meni s kazdym novym pripojenim.
Z toho teda plyne.
* Bud nebude navazovani vubec - protoze s -O nefunguje time-stamping ani navazovani, jak se pise v man wget a bez -O to uklada pokazdy s jinym c
* Nebo se musi nejak ukladat i cookies a pouzivat pri navazovani. Je to ale smysluplne?
* Nebo nejak donutit wget, aby neukladal querystring. Zkousel jsem i ten querystring poslat jako --post-data
, ale doslo zase k presmerovani. Hledal jsem ve wgetu a bohuzel nenasel zadny prepinac na odstraneni querystringu ze jmena souboru.
* Nebo pouzit jinej program, napr. curl. Takze jsem to ted s curlem zkousel a vypada to, ze by to mohlo jit. Curl podporuje cookies, referer, navazovani a pri ukladani do souboru je jmeno souboru bez querystringu. Za chvilku prepisu script.
Dodatek: Stahnul jsem to 23-09-08, normalne jsem to jako RAR rozbalil a AVI normalne prehraju.
aha, takže ty cookies opravdu nejsou nutné, nutný je jen vždy stejný název souboru pro stejnou url...Tak jenom, aby to bylo presne, cookies nutne jsou. Neber to jako flamewar, ted jsem to zkousel. Kdyz jsem rucne spustil oba dva wgety bez *cookies parametru, tak pri druhym (ten, co by mel stahovat) to presmerovalo na stranku
23-09-08-hleda-se-tata.rar?err=cid
. Takze cookies jsou potreba urcite a s tim souvisi i to cislo c=.....
, ktery to pak cpe do querystringu, viz. moji odpoved na tvuj zapisek s URL.
aktualizace down-ulozto pro captcha
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.