ITK märguandja

From ICO wiki
Jump to navigationJump to search

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:


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.

Asjast on tehtud ka versioon Google Appengine peale, vaata itknotifier.appspot.com [1]

Autor

--Eisok 12:00, 17 September 2010 (EEST)