ITK märguandja
Sissejuhatus
See artikkel on kirjutatud selleks, et näidata kuidas ÕIS'is toimunud muudatustest võimalikult kiirelt e-maili teel teada saada. Antud näide on tehtud hinnetelehe jaoks, kuid peale väikest muutmist sobib ka sooritustelehe jaoks ;) Tehtud sai ta rohkem enda jaoks, kuid mõtlesin ka koolikaaslastega jagada, kategooriaks Linux, sest tegu pole ühegi õppeaine kodutööga. Kuna pole Pythoniga nii sina peal, siis on põhiosa siiski Bashis. Eks igaüks teab kas tahab teha oma elu mugavamaks või mitte.
Kiire ülevaade sellest, mida need skriptid teevad:
- script.sh logib ÕISi sisse ning salvestab küpsised faili cookies.txt
- script.sh laeb värskete küpsiste abil alla "Minu hinded" lehe
- md5sum.py arvutab vastavalt sisule unikaalse md5 räsi ning võrdleb seda juba olemas olevaga (hinded.html.old) kuuluva räsiga
- kui md5sum.py leiab, et räsi on erinev, siis liigutatakse hinded.html hinded.html.old failiks ning saadatakse mail.py abil meile e-kiri selle kohta
Paigaldamine
Töövahendid ja õpetused:
- Eeldab teksiredaktor Vi kasutamist vähemalt crontabi osas, selle kohta leiate abi siit: http://www.cs.fsu.edu/general/vimanual.html#input
- Vajalikud failid võite luua Vi abil või enda arvutis. Teisel juhul on vajalik failide üles laadimiseks Secure FTP klient, näiteks WinSCP
- Skripti lisamise jaoks crontabi on vajalik Secure Shell klient, näiteks PuTTY
Kõigepealt logime SSH kliendiga enos.itcollege.ee'sse ning loome kausta itk ja sinna samasse kausta järgnevad failid script.sh md5sum.py mail.py. Mida on vaja muuta, see on skriptides kommentaaridena kirjas.
script.sh
#!/bin/bash
kasutajanimi=snäide # muuda
salasona=ArvaÄra112 # muuda
student_id=numbridsiia # selle saad avalehelt minu hinnete lingilt
cd $HOME/itk
file=hinded.html
/usr/sfw/bin/wget --user-agent "ITK Notifier" --no-check-certificate --keep-session-cookies --save-cookies cookies.txt \
--post-data="username=$kasutajanimi&pw=$salasona&Login=Logi sisse" https://itcollege.ois.ee/auth/login -O login
/usr/sfw/bin/wget --user-agent "ITK Notifier" --no-check-certificate \
--load-cookies cookies.txt https://itcollege.ois.ee/et/grade?student_id=$student_id -O $file
rm -f login cookies.txt
check=`/usr/xpg4/bin/grep -q logout $file`
if [ -z $check ]; then
rm -f $file
exit
fi
new=`python md5sum.py $file`
if [ -f $file ] && [ -f $file.old ]; then
old=`python md5sum.py $file.old`
else
old=`python md5sum.py $file`
mv $file $file.old
fi
if [ $new = $old ]; then
rm -f $file
else
python mail.py
mv $file $file.old
fi
chmod a-rwx,u+rwx $file.old
md5sum.py
Antud fail asendab enoses puuduva md5sum tööriista, seda faili pole vaja muuta.
import md5
import sys
f = open(sys.argv[1])
h = md5.new()
h.update(f.read())
hash = h.hexdigest()
f.close()
print hash
mail.py
Et ikka meilid kohale jõuaks, siis võiks seda faili ennem muuta.
# -*- coding: utf-8 -*-
import smtplib
fromaddr = "From: ITK Notifier <ois@itcollege.ee>" # muuda kui tahad, aga ei pea
toaddrs = "To: Sinu Email <sinuemail@gmail.com>" # muuda kindlasti, muidu näed nendest meilidest ainult und
msg = fromaddr + "\n" + toaddrs + "\nSubject: Kontrolli oma hinnetelehte\n" + "\nJa nii ongi :)" # muuda enda äranägemise järgi
server = smtplib.SMTP('norman.itcollege.ee') # ei tohi muuta! (meilid ei tule kohale)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
sms.py
Juhul, kui tegemist on üliolulise hindega (eksamisooritus), saavad kannatamatud teate ka SMS peale tellida. Selleks on allpool olev Python kood, mis suhtleb Messente nimelise SMS teenusega. Vajalikud on API võtmed ja veidi seadistamist. Uue konto puhul saab märgusõnadega customer ja fortumo 3€ väärtuses testimisraha.
# -*- coding: utf-8 -*-
#!/usr/bin/python -tt
# A script to send SMS messages using Messente API
# Author Ando Roots 2011
import sys
import urllib
import urllib2
user = '921ffff8330f7873d3a2dsfec910'; # API user
key = 'dc77360a20c1ff7sdfw4f44b14c1'; # API key
reciever = '372585098003'
msg = 'ÕIS hinneteleht on muutunud!'
# Send SMS to reciever with the text msg
# See Messente API documentation for possible response codes
# If succesful, the first 2 chars are OK
def send_sms(reciever, msg):
api_url = 'https://messente.com/api/send_sms_get'
values = {'user' : user,
'api_key' : key,
'text' : msg,
'to' : reciever}
data = urllib.urlencode(values)
api_url = api_url + '?' + data
data = urllib.urlopen(api_url).read()
print data
def main():
send_sms(reciever, msg)
sys.exit(0)
if __name__ == '__main__':
main()
Teine lahendus SMS saamiseks on saata meil oma teenusepakkuja SMS gateway aadressil, nt. 37258xxxxx@sms.tele2.ee.
Failiõigused
Anname käivitamis- ja lugemisõiguse üksnes failiomanikule.
chmod 700 $HOME/itk/ | chmod 500 $HOME/itk/*
crontab
Crontabi üles seadmiseks kirjutame käsureale:
/usr/xpg4/bin/crontab -e
Avanenud tekstiredaktoris kirjeldame järgneva (soovitan kopeeri/lõika meetodit vigade vältimiseks):
1,31 * * * * /home/sinukodukataloog/itk/script.sh >/dev/null 2>&1
Ja ongi kõik! Katsetada saate muutes käsitsi hinded.html.old sisu.
Märkused
- Kui mailid läbi ei tule, siis uurige oma rämpsposti kataloogi ning lisage adressaat turvaliste saatjate loendisse.
- Juhul kui hinded.html.old puudub, siis emaili ei saadeta (tavaliselt peale paigaldamist).
Tulevikus
Kellel palju vaba aega, siis võib nokitseda näiteks järgnevate asjadega:
- Hinnetelehelt table class="data" e-kirja sisuna htmlis, et ei peaks selle jaoks ÕISi minema.
- Mitme ITK alamlehe kontrollimine ühe skriptiga, tsükli ja massiivi abil?!
- Miks mitte sarnane või parem funktsionaalsus ÕISist valikute alt leida.
Autor
--Eisok 12:00, 17 September 2010 (EEST)