Portál AbcLinuxu, 30. dubna 2025 11:22
Občas si ubastlím nějaký "užitečný" skriptík. Co dnes: Skript, který mi každý den pošle SMS s přehledem suplování. | Přidání diakritiky ke stránce. | Referendum v Bashi.
Gymnasium, které navštěvuji, používá IS Bakaláři. Ten vyblívá suplování do HTML souboru. Co kdyby se cronem spouštěl skript, který mi pošle SMS, jestli je nějaké suplování? Člověk by se ráno nemusel tlačit u Nastěnky...
#!/bin/bash # Parsování suplování z Bakalářů # Nedostatečně otestovaná alfaverze (prověří Čas). Používejte na vlastní risiko. # Jan Hrach, <jenda zav hrach t eu> # # Skript by pravděpodobně mohl fungovat i s jinými versemi Bakalářů, # ale formát tabulky se může změnit. # Zejména další třída nemusí začínat " " (dvěma mezerami), ale # jen jednou (v jiné versi to tak skutečně je). # # Skript má jediný parametr a tím je třída, pro kterou má získat suplování. # # Testovací tabulky: # http://gomora.hrach.eu/misc/suplobec-sample.htm (GSG Praha, na ní je skript odladěn) # http://www.horackova.cz/suplovani/suplobec.htm (jiná verse BK) # SOUBOR=suplobec.htm TRIDA="$1" # wget a tak... # přihlášení a uložení sušenky, u nás má oficiálně platnost do konce session, takže by to # s --keep-session-cookies mělo stačit tak jednou za rok wget --save-cookies cookie.txt --keep-session-cookies "https://www.gsgpraha.cz/login.php" \ --post-data="return=%2Fintranet%2F&username=hrachj&pass=----&loginButton=P%F8ihl%E1sit+se" -q -O /dev/null \ --no-check-certificate # Tajné služby právě získaly vaše heslo. Gratulujeme. # Bohužel je stejně self-signed a nikde ve škole nevisí jeho fingeprint# UPDATE: Centrální Mozek Lidstva dovoluje přihlásit se jenom jednou sušenkou najednou
# stáhnutí stránky se suplováním wget --load-cookies cookie.txt https://www.gsgpraha.cz/intranet/rozvrhy/suplobec.htm -O - -q \ --no-check-certificate |\ # Tajné služby právě získaly vaši sušenku. Gratulujeme. # je to ve win1250 s CRLF konci řádků recode cp1250..utf8 > $SOUBOR parsni_tr() { #vygrepnutí zpracovávaného řádku grep " "$TRIDA $SOUBOR -A $((7 + $1)) | tail -n 7 |\ #smazání tagů, komprese mezer - SMS musí být krátká, odstranění diakritiky, převedení na jeden řádek sed -e 's/<[^>]*>//g' | tr -d " " | iconv -f utf-8 -t us-ascii//translit | tr "\n" " " |\ # když supluje, nemusí být uvedena cílová učebna sed -e 's/\ \;/ - /g' #|\ # vyříznutí jen těch informací, které chci #cut -d " " -f 1,2,3,4,5,6 } if grep " "$TRIDA $SOUBOR > /dev/null; then # datum MESSAGE=`grep textlarge_3 $SOUBOR | cut -d " " -f 3` SUPL_NUM=0 while true; do if [ $SUPL_NUM -gt 0 ]; then if grep " "$TRIDA $SOUBOR -A $((7 + $SUPL_NUM * 10 )) | tail -n 8 | grep -E '(<p> |</table>)' > /dev/null; then break fi fi if [ $SUPL_NUM -gt 100 ]; then # fallback # 1) může mu rupnout v kouli # 2) formát souboru se může změnit break fi SUPL_RES=`parsni_tr $(( $SUPL_NUM * 10 ))` MESSAGE="$MESSAGE $SUPL_RES," SUPL_NUM=$(( $SUPL_NUM + 1 )) done else MESSAGE="$MESSAGE bohuzel nebylo tazeno zadne suplovani" fi MESSAGE=`echo $MESSAGE |\ # misc. optimalisace délky sed -e 's/.hod/h/g' -e 's/ - /-/g' -e 's/supluje/supl/g' -e 's/spoji/spoj/g' -e 's/\,$//g' -e 's/odpada/odpad/g' -e 's/presun>>/pres/g' -e 's/presun/pres/g'` # Já si to posílám na mobil v síti T-Mobile # http://jenda.blog.root.cz/2007/10/29/sledovani-zmen-a-posilani-sms/ echo $MESSAGE #| mail -s "SPL" ----@t-email.cz
Tady sídlí skript, kterému do formuláře dáte text a on vám ho vrátí ohákovaný. Je to ale dost opruz. Co si udělat bookmarklet - po kliknutí na záložku se vám stránka zobrazí ohákovaná? Použitelné hlavně při čtení NetMagu. Má to ještě trochu problémy s kódováním...
Budete potřebovat webserver s Bashem. V LigHTTPd se to dělá takhle:
cgi.assign = ( ".sh" => "/bin/bash" )
Potom si přidáte do prohlížeče bookmark:
javascript:window.location.href%20=%20"http://gomora.hrach.eu/ohakovani.sh?"%20+%20window.location.href;
gomora.hrach.eu je můj experimentální server, můžete ho k tomu použít, ale nezaručuji, že bude mít 100% dostupnost. Skriptík vypadá takto a můžete si ho dát k sobě na server:
echo "X-Powered-By: /bin/bash" echo "Content-type: text/html; charset=UTF-8" echo "" STRANKA=`wget -q -O - "$QUERY_STRING" | sed -e 's/\&/%26/g'` wget -q -O - --post-data="usepre=1&text=$STRANKA" http://nlp.fi.muni.cz/cz_accent/index.php | tr -d "\n" | recode iso8859-2..utf8 | sed -e 's/.* <TABLE cellpadding=10><TR><TD bgcolor=#b0e0ff>\(.*\)<\/PRE><\/TD><\/TR><\/TABLE>.*/\1/g' -e 's/\<\;/</g' -e 's/\>\;/>/g' -e 's/\&\;quot\;/\"/g' -e 's/\"\;/\"/g' -e 's/<PRE>//g' -e 's/\&\;nbsp\;/\ \;/g'
Výsledek může vypadat třeba takto.
REPLY=n; until [ "$REPLY" = y ]; do read -n 1 -s -p $'Souhlasíte s Lisabonskou smlouvou? [y/n]\n'; done; echo "Lisabonská smlouva schválena"
Tiskni
Sdílej:
To suplování je dobrej nápad. To si taky pořídím
Google je svině
Jo, má... Ale skript si stejně napíšu vlastní
remember Bobby TablesBakaláři používají jako databázi Postgres, tak to by mě zajímalo, jestli by to někoho s takovým jménem oescapovalo
diky za info o hackujicim serveru, to jsem neznalAno, je škoda, že to někteří autoři zdejších blogů nepoužívají. Občas to sice doplní špatně (když je víc možností s různým smyslem - hackujícím, háčkujícím ;), ale i tak se výsledný text čte lépe než dlouhý text bez diakritiky.
add referendum - uvozovky a read ma i parametr -p :)Dobrý nápad
read -h
^C
...
STRANKA=`wget -q -O - $QUERY_STRING | sed -e 's/\&/%26/g'`to je dobrej backdoor...
" | touch /tmp/soubor"
a nějak se mi nedaří...
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.