KORITENJE MRENIH SERVISA ZA RAZMJENU METEOROLOKIH PODATAKA
Dubrovnik, prosinac 2010. SVEUILITE U DUBROVNIKU ODJEL ZA ELEKTROTEHNIKU I RAUNARSTVO STUDIJ POSLOVNO RAUNARSTVO
DIPLOMSKI RAD KORITENJE MRENIH SERVISA ZA RAZMJENU METEOROLOKIH PODATAKA
Mentor: Diplomant: Dr.sc. Mario Milievi Zlatko Bara Komentor: Mr. sc. Krunoslav ubrini
Dubrovnik, prosinac 2010. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara I
Sadraj 1 Uvod ............................................................................................................................. 1 2 Teorijske postavke ....................................................................................................... 2 2.1 Mreni servisi.......................................................................................................... 2 2.2 XML ........................................................................................................................ 2 2.3 REST ....................................................................................................................... 3 2.4 Meteoroloki podaci ............................................................................................... 6 3 Struktura aplikacije ...................................................................................................... 8 3.1 Baza podataka ......................................................................................................... 8 3.2 Opis aplikacije ...................................................................................................... 10 3.2.1 Posluiteljski dio aplikacije ........................................................................... 10 3.2.2 Prijava korisnika i dodjeljivanje prava .......................................................... 12 3.2.3 Servisi ............................................................................................................ 34 3.2.4 Nain rada servisa .......................................................................................... 38 4 Opis aplikacije za razmjenu meteorolokih podataka ................................................ 45 4.1 Ulazni dio .............................................................................................................. 45 4.2 Korisniki dio ....................................................................................................... 47 4.3 Administracija ....................................................................................................... 47 4.4 Prognoze ............................................................................................................... 48 4.4.1 Ureivanje ..................................................................................................... 48 4.4.2 Brisanje .......................................................................................................... 50 4.5 Upozorenja ............................................................................................................ 50 4.5.1 Ureivanje ..................................................................................................... 51 4.5.2 Brisanje .......................................................................................................... 53 4.6 Postaje ................................................................................................................... 53 4.6.1 Podaci o postaji .............................................................................................. 53 4.6.2 Brisanje .......................................................................................................... 54 4.7 Pregledi (klijentski dio)......................................................................................... 54 5 Klijentski dio .............................................................................................................. 58 Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara II
5.1 Rukovanje XML formatom u aplikaciji ................................................................ 58 5.2 Primjer klijenta - pregled prognoza ...................................................................... 61 5.3 Primjer klijenta - pregled upozorenja ................................................................... 63 5.3.1 Prikazivanje opisa .......................................................................................... 64 5.3.2 Rukovanje XML datotekama......................................................................... 65 5.4 Primjer klijenta - slanje podataka s postaje ........................................................... 68 5.4.1 Programski kod za slanje podataka ............................................................... 70 6 Zakljuak .................................................................................................................... 72 7 Literatura .................................................................................................................... 73 8 Prilozi ......................................................................................................................... 74 8.1 Popis slika ............................................................................................................. 74 8.2 Popis ispisa ........................................................................................................... 75 9 Saetak ....................................................................................................................... 77 10 Kljune rijei .............................................................................................................. 78 11 Summary .................................................................................................................... 79 12 Keywords ................................................................................................................... 80
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 1
1 Uvod Web aplikacija je aplikacija koja se izvodi na mrenom posluitelju koji se obino nalazi na Internetu. Mreni servis je aplikacija ili njen dio koji se takoer izvodi na posluitelju i prua odreene usluge korisniku. Npr. moe se raditi o pruanju servisa za dohvat rezultata pretrage ili o servisu koji korisniku prua informacije o aktualnom stanju na cestama. Primjene su neograniene. U ovom dokumentu je opisan mreni servis koji korisniku prua informacije o vremenu, konkretnije korisniku se prua servis koji nudi vremensku prognozu i upozorenja o nevremenu. Ciljani korisnici ovakvih servisa su ponajvie internetski portali i razne druge informativne stranice. Njima je omoguen jednostavan pristup pouzdanim vremenskim prognozama. Takoer su dostupne informacije o upozorenjima za vremenske neprilike to moe biti korisno raznim stranicama koje se bave pomorstvom ili poljoprivredom. S obzirom na jednostavnost pristupa servisu ciljani korisnici su i tvrtke koje se bave razvojem programa za mobilne ureaje jer mogu jednostavno implementirati pristup servisu u aplikaciju koja prikazuje prognozu i potencijalne opasnosti korisnicima te aplikacije, ponajvie avanturistima i moreplovcima. Korisniku se takoer nudi i jedan servis ija je namjena primanje podataka, a on se koristi za slanje podataka s meteorolokih postaja i njihovu pohranu na posluitelj. S obzirom na otvorenost protokola kojim komunicira postaja preko serijskog porta ovaj servis je zanimljiv programeru koji eli izraditi program koji oitava podatke sa postaje i alje ih na internet. Cilj ovog rada je napraviti aplikaciju u PHP programskom jeziku koja e se izvoditi na posluitelju i korisniku pruati navedene usluge. U drugom poglavlju opisane su teorijske postavke rada: mreni servisi, detalji XML formata i REST arhitekture te nain pripreme, prikupljanja i koritenja meteorolokih podataka. U treem poglavlju opisana je arhitektura posluiteljskog dijela aplikacije, dok je u etvrtom poglavlju detaljno analiziran programski kod posluiteljskog dijela aplikacije kao i primjena aplikacije. U petom poglavlju su opisani primjeri klijenata koji koriste realizirani web servis. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 2
2 Teorijske postavke 2.1 Mreni servisi Mreni servisi omoguavaju korisniku razmjenu podataka i izvravanje odreenih zahtjeva na posluitelju. Korisnik posluitelju alje upit, a posluitelj zatim izvri potrebne radnje i vraa korisniku rezultate tog upita. Rezultati su obino formatirani u XML formatu. Najee se za komunikaciju koristi HTTP protokol. W3C konzorcij [1] definira mreni servis kao : Programski sustav dizajniran tako da podrava meusobnu stroj-stroj interakciju preko mree. Mreni servis moe imati suelje opisano u formatu koji je mogue strojno obraivati, konkretno WDSL [2] formatu. Drugi sustavi komuniciraju s mrenim servisom putem SOAP [3] poruka, najee koristei HTTP protokol i XML format datoteka, uz eventualno koritenje i drugih standarda vezanih uz Internet. Osim komunikacije putem SOAPa mogue je komunicirati i primjenom REST [4] principa koji je jednostavniji za koritenje. Ne posjeduje opisne datoteke pa korisnik mora imati informaciju kakve usluge servis nudi kako bi ih mogao koristiti. U nastavku e biti opisani protokoli i formati datoteka koje koriste mreni servisi. 2.2 XML XML [6] je kratica koja oznaava EXtensible Markup Language, odnosno jezik za opis podataka. Ideja koja stoji iza XMLa je stvaranje jednostavnog opisnog jezika koji bi bio itljiv i ljudima i strojevima, za razliku od npr. binarnih datoteka koje su teko itljive ljudima i tekstualnih datoteka kojima manjka opis podataka. Oznake koje se koriste u XML jeziku su dosta sline onima koje koristi HTML jezik. Razlika je u tome to HTML ima strogo definirane oznake (tagove) koji se smiju koristiti, dok je kod XMLa to puno fleksibilnije, odnosno ostavljeno na volju korisniku. XML je naao brojne primjene, tako se koristi za odvajanje podataka od prezentacije (npr. HTML je prezentacijski jezik), razmjenu podataka (npr. kod mrenih servisa), spremanje Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 3
podataka (npr. program moe svoje postavke uvati u XML datoteci koja pomalo zamjenjuje standardnu .ini datoteku), itd. XML je zamiljen tako da podatke uva u tekstualnom obliku, ali da ih uokviruje oznakama koje govore o kakvom se podatku radi. Na taj nain je XML jednostavno itljiv ovjeku (tekst), a raunalo jednostavno nalazi potrebne podatke koristei oznake (tagove). Raunalo to radi putem programa koji pretrauje datoteku i izdvaja i grupira podatke ovisno o oznakama koje ih okruuju (parsera). Zahtjevi koje je W3C postavio pred XML poetkom devedesetih godina i koji su karakteristike XML jezika [6] : 1. XML mora biti izravno primjenjiv preko Interneta. 2. XML mora podravati irok spektar primjena. 3. XML mora biti kompatibilan sa SGML-om [7]. 4. Mora biti lako pisati programe koji procesiraju (parsiraju) XML dokumente. 5. Broj opcionalnih "feature-a" u XML-u mora biti apsolutno minimalan, u idealnom sluaju jednak nuli. 6. XML dokumenti moraju biti itljivi ljudima, te u razumnoj mjeri jednostavni. 7. Standard mora biti specificiran to prije. 8. Dizajn XML-a mora biti formalan i precizan. 9. Kreiranje XML dokumenata mora biti jednostavno. 10. Saetost kod oznaavanja dokumenta XML-om je od minimalnog znaaja. 2.3 REST REST je kratica od Representational State Transfer i oznaava nain komunikacije izmeu klijenta i posluitelja pri koritenju mrenih resursa pomou HTTP protokola. Klijent alje zahtjev prema posluitelju, posluitelj prima zahtjev i u skladu s traenim resursom formira odgovor i vraa ga klijentu. Resurs moe biti bilo to, recimo tekstualni podaci, slika ili neki jednostavni odgovor u obliku broja. Klijent u bilo kojem trenutku izmeu zahtjeva moe biti u stanju "odmora", odnosno omoguava interakciju s korisnikom, ali pri tom ne kreira promet prema posluitelju. Klijent poinje slanje zahtjeva prema posluitelju Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 4
kad je spreman za prebacivanje u novo stanje. Dok god se jedan ili vie zahtjeva izvrava smatra se da je klijent u stanju prijelaza [5]. REST arhitektura koristi mogunosti HTTP protokola i pritom omoguava da proxy posluitelji i pristupnici (engl. gateway) takoer procesiraju isti HTTP promet koji prolazi kroz njih. REST koristi pristup slian CRUD pristupu kod SQL jezika u relacijskim bazama podataka, i za svaku jednostavnu operaciju (dohvat resursa, stvaranje resursa, brisanje resursa i auriranje resursa) koristi po jednu metodu HTTP protokola. Za dohvat resursa se koristi GET, za brisanje DELETE, a za stvaranje i auriranje POST i PUT metode. Problem kod praktine primjere REST pristupa je to mrena infrastruktura i programski jezici jo uvijek najee dozvoljavaju koritenje samo GET i POST metoda koje su uobiajene pri koritenju web preglednika za dohvat web stranica. Koritenje drugih metoda (PUT i DELETE) se najee zabranjuje. Zbog toga se u praksi koriste dvije vrste REST sustava. Sustavi koji koriste sve etiri metode prema navedenom principu nazivaju se RESTful sustavi, a sustavi koji se baziraju na koritenju samo dvije metode (GET i POST) u skladu s navedenim arhitekturnim pristupom nazivaju se REST sustavi. Oni koriste hibridni pristup kod kojeg se za dohvat resursa koristi GET metoda, a sve ostale operacije nad resursima obavljaju se koritenjem POST metode. REST ima neka temeljna ogranienja, odnosno naputke po kojima treba dizajnirati aplikacije koje koriste REST arhitekturu, dok su detalji dizajna ostavljeni programeru. Ta ogranienja su : Klijentsko-posluiteljski odnos: Klijent i posluitelj su odvojeni odreenim sueljem. To znai da npr. klijenta ne zanima nain skladitenja podataka na posluitelju nego je pristup njima uniformiran, tako da je portabilnost koda klijenta poveana. Posluitelj s druge strane ne zanima korisnikovo suelje ili stanje pojedinog korisnika tako da posluitelj moe biti jednostavan i skalabilan. Posluitelji se takoer mogu mijenjati i programirati po elji dok god je suelje kojem klijent pristupa isto. Tako je mogue npr. u potpunosti promijeniti posluitelj iz PHP baziranog u ASP bazirani dok god je nain pristupa klijenta isti. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 5
Bez stanja (engl. stateless): Posluitelj ne sprema kontekst konekcije izmeu zahtjeva klijenta. Svaki zahtjev od korisnika zahtjeva sve informacije potrebne da bi posluitelj razumio zahtjev, tako da posluitelj ne mora pamtiti podatke izmeu pojedinih zahtjeva. Tako klijent moe pristupati resursu jednostavno preko URLa. Ovo olakava nadzor posluitelja i ini ga pouzdanijim. Pohrana podataka (engl. cache) : Klijentu je omogueno da privremeno sprema odgovore posluitelja. Ovo u nekim sluajevima olakava rad i smanjuje broj potrebnih zahtjeva prema posluitelju. Slojeviti sustav : S obzirom da klijent ne zna da li je spojen direktno na posluitelj ili na neki od njegovih posrednika, ovo moe posluiti za poboljanje performansi, npr. putem load balancera koji ujednauju promet, omoguavaju skalabilnost i rastereuju pojedini posluitelj. Korist moe biti i sa strane sigurnosti jer je mogue implementirati razne vatrozidove (engl. firewall) i ostale kontrolore prometa. Code on demand : Ovo je opcionalna mogunost, posluitelj moe korisniku poslati podatke koji e mu omoguiti proirenje ili poboljanje mogunosti. Dobar primjer za ovo je koritenje REST pristupa iz okruenja skriptnog jezika JavaScript. Uniformirano suelje : Suelje izmeu posluitelja i klijenta mora potovati odreene smjernice kako bi sustav servis bio RESTful, odnosno REST kompatibilan. Od gore navedenih pet stavki samo je Code on demand opcionalna, sve ostale moraju biti potovane kako bi servis bio REST kompatibilan. Potovanje navedenih smjernica omoguava bilo kakvom distribuiranom hipermedijskom sustavu da ima atribute koji su poeljni : uinkovitost, skalabilnost, jednostavnost, izmjenjivost, vidljivost, prenosivost i pouzdanost. Neki od kljunih ciljeva kojima tei primjena REST arhitekture : Skalabilnost interakcije komponenti; Generalnost suelja; Neovisno plasiranje komponenti; Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 6
Meukomponente ija namjena je smanjenje latencije, pojaanje sigurnosti i enkapsulacija postojeih sustava [5]. Prilikom koritenja REST arhitekture kroz HTTP za dohvat podataka najee se primjenjuju GET zahtjevi, dok su druge vrste zahtjeva rezervirane za auriranje resursa. 2.4 Meteoroloki podaci Meteorologija je znanost o Zemljinoj atmosferi i promjenama u njoj. Spada u skupinu geofizikih znanosti i bavi se prouavanjem promjena vremena na Zemlji. Jedna od grana meteorologije, sinoptika meteorologija analizira podatke o aktualnim i proteklim vremenskim prilikama na odreenom podruju kako bi ih upotrijebila za prognoziranje buduih. Prouavaju se razni parametri atmosfere, a najbitniji su temperatura, vjetar, tlak i oborine. Podatke o vremenskim prilikama skupljaju meteoroloke postaje i zatim ih alju na posluitelje gdje se podaci iz razliitih izvora prikupljaju i analiziraju. Za analizu se koriste fizikalni modeli koji se s vremenom usavravaju kako bi bili to precizniji. Te modele obrauju u pravilu vrlo jaka raunala. Bitno je spomenuti da je obrada tih podataka vrlo zahtjevna i nekad je bila rezervirana za velike institute i organizacije koje mogu uloiti puno novca u raunalne resurse potrebne za obradu podataka. Napretkom raunalne tehnologije i padom cijene ti resursi postaju dostupni i manjim organizacijama, pa i amaterskim skupinama koje meteorologija interesira. Fizikalni modeli su dostupni, potrebno je ubaciti to vie podataka u njih i prepustiti da raunalo koristei model izrauna kretanja vremenskih prilika. Ovo je primjenjivo na manjim podrujima, velike i detaljne analize se i dalje rade na superraunalima. U Hrvatskoj ve vie od sedam godina djeluje udruga Crometeo koja okuplja ljude koje zanima meteorologija. Radi se o ljudima raznih struka kojima je zajednika poveznica zanimanje za vremenske prilike i neprilike. Udruga se bavi prouavanjem i prognoziranjem vremena, dokumentiranjem i fotodokumentiranjem raznih vremenskih pojava (posebno onih ekstremnih), kao i postavljanjem meteorolokih postaja diljem Hrvatske. Trenutno postoji preko 70 postaja diljem Hrvatske, a sve zajedno su ukljuene u projekt koji objedinjuje sve podatke na stranici http://pljusak.com. [8] Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 7
Osim prikupljanja podatka rade se i analize podataka i davanje prognoza. Udruga ima svoje serversko raunalo koje na jakim Intelovim Xeon procesorima izraunava model za podruje Hrvatske. Prognoze se objavljuju na serveru http://crometeo.hr [9], a takoer i u mnogim lokalnim medijima, npr. Dubrovaki vjesnik [10] objavljuje prognozu lana Crometeo udruge. Podatke s postaja zasad prikuplja softver koji dolazi uz postaju, a koji ima odreenih prednosti i nedostataka. Glavni nedostatak je to meteoroloka postaja treba uz sebe imati vezano raunalo da bi se podaci prikupljali. S obzirom na postojanje dokumentiranih protokola kojim program komunicira sa stanicom ovdje ima dosta mjesta za poboljanja, npr. izradom vrlo jednostavnih programa koji nemaju dio za analitiku i statistike nego im je namjena samo komunikacija na relaciji postaja-internet. Za takvu primjenu bi bio idealan servis kao to je onaj opisan u ovom radu. Takoer bi servis mogli koristiti i razni ureaji koji nisu sami po sebi postaja nego npr. data logger koji podatke sprema odreeno vrijeme i nakon toga ih prosljeuje na mreni posluitelj kako bi bili dostupni za analizu. Sa dananjim jednostavnim i jeftinim usmjerivaima koje pokree Linux operacijski sustav, a koji imaju USB i serijski port mogue je napraviti ureaj koji prati odreene parametre, poput temperature, vlage i vjetra te ih prosljeuje na posluitelj. Za sve te namjene mreni servis baziran na REST protokolu je puno pogodniji od raznih sloenih klijent-posluitelj rjeenja. to se vremenskih prognoza tie, i ti podaci su potrebni raznim internetskim portalima ili drugim web stranicama koje ele imati pristup do podataka vremenske prognoze, a nemaju vlastiti tim koji ju pie. Oni mogu jednostavno putem mrenog servisa preuzeti podatke i preko modula koji sami izrade ukomponirati ih u web stranicu na nain koji im odgovara, bez da im servis namee pravila prezentacije podataka. Danas se podaci veinom prezentiraju preko ve unaprijed napravljenih vizualnih modula koji se ugrauju u stranicu, a koji esto nisu ba pogodni jer se ne mogu uklopiti u izgled stranice, bez obzira na (ograniene) mogunosti prilagoavanja. Sa mrenim servisom koji alje iste tekstualne podatke tog problema nema, a vizualna prezentacija je ostavljena na volju dizajneru stranice. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 8
3 Struktura aplikacije Posluiteljski dio aplikacije je u cijelosti izraen u PHP programskom jeziku. Koriten je tekst editor s podrkom za osvjetljavanje sintakse, a za testiranje je koriten Wamp posluitelj instaliran na lokalnom raunalu. Nakon to je aplikacija izraena prebaena je na web posluitelj i dodatno testirana. Nakon toga je klijentski dio prebaen na drugi posluitelj radi testiranja funkcionalnosti mrenog servisa.U ovom poglavlju opisana je sama struktura aplikacije, s primjerima programskom koda i detaljnijim objanjenjem naina rada same aplikacije. 3.1 Baza podataka Kako bi aplikacija mogla pohranjivati i itati podatke potrebno je koristiti bazu podataka. U ovom sluaju izbor je pao na mySQL bazu podataka koja je besplatno dostupna za koritenje. Dolazi kao dio Wamp posluitelj paketa koji je koriten za testiranje aplikacije. Unutar baze podataka definirane su etiri tablice, to su : t_korisnik t_postaja t_prognoza t_upozorenja Na slici 3.1 vidljive su navedene tablice koje se koriste u aplikaciji. Budui da se tablice koriste za spremanje podataka koji meusobno nisu vezani, tablice su izraene svaka za sebe i nisu ni na koji nain ovisne jedna o drugoj. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
t_prognoza PK podatakid datum doba regija tekst tmin tmax vbrz vsmj obtip obkol
t_upozorenja PK podatakid upDatum zupanija opis stupanj autor zadnja_izmjena
Slika 3.1Tablice unutar baze podataka Polja u koritenim tablicama su slijedea: t_korisnik, slui za pohranu podataka o registriranim korisnicima : userid - identifikacijski broj korisnika, ova vrijednost se dodjeljuje automatski uIme - ime korisnika uPrezime - prezime korisnika uUser - korisniko ime za prijavu na sustav uPassword - korisnika lozinka, saeta kao md5 string uOdobren - status korisnika, moe biti 'da' ili 'ne' uPostaja - ime korisnikove meteoroloke postaje uHash - lozinka za korisnikovu meteoroloku postaju t_postaja, slui za pohranu podataka koje postaja alje prema servisu : podatakid - autoinkrementalna vrijednost, automatski se dodjeljuje imePostaje - ime postaje koje se prikazuje u pregledima datum - datum podatka vrijeme - vrijeme podatka temperatura - vrijednost temperature vjetar - brzina vjetra smjer - smjer vjetra Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 10
vlaga - relativna vlaga kisa - koliina oborina t_prognoza, slui za spremanje podataka o prognozama, podaci su dostupni putem mrenog servisa : podatakid - autoinkrementalna vrijednost, automatski se dodjeljulje datum - datum prognoze doba - doba dana prognoze, moe biti 'jutro', 'popodne' ili 'noc' regija - klimatska regija za koju prognoza vrijedi tekst - tekst prognoze tmin - minimalna oekivana temperatura tmax - maksimalna oekivana temperatura vbrz - oekivana brzina vjetra vsmj - oekivani smjer vjetra obtip - oekivani tip oborina obkol - oekivana koliina oborina t_upozorenja, slui za spremanje podataka o upozorenjima, podaci su dostupni putem mrenog servisa : podatakid - autoinkrementalna vrijednost, automatski se dodjeljuje upDatum - datum za koji upozorenje vrijedi zupanija - zupanija za koju upozorenje vrijedi opis - opis opasnosti stupanj - stupanj opasnosti autor - autor upozorenja zadnja_izmjena - vrijeme zadnje izmjene podataka 3.2 Opis aplikacije 3.2.1 Posluiteljski dio aplikacije Na slici 3.2 prikazana je logika struktura posluiteljskog dijela aplikacije. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 11
Poetna stranica Unos korisnika Unos OK Odobrenj e Odobri prij ava Config Spaj anj e na bazu Odj ava Glavni izbornik Upozorenj a + Auri ranj e + Auri ranj e upozorenj a + Bri sanj e + Bri sanj e upozorenj a + Obrada upozorenj a + Pregl ed upozorenj a + Unos + Unos upozorenj a + Upozorenj e Prognoze + Bri sanj e + Bri sanj e prognoza + Izmj ena + Izmj ena prognoze + Obrada prognoza + Pregl ed prognoza + Prognoza + Unos + Upi s prognoza Postaj e + Bri sanj e + Bri sanj e postaj e + Izmj ena + Izmj ena postaj e + Obrada postaj a + Postaj a + Pregl ed postaj a + Upi s + Upi s postaj e Servisi + Krei ranj e XMLa + Postaj e + Prognoza po datumu + Prognoze + Suel j e servi sa + Upozorenj a + Upozorenj a po datumu + Upozorenj a po godi nama redi rect use use use use use use use use use
Slika 3.2 Logika struktura posluiteljskog dijela aplikacije Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 12
Aplikacija evidentira tri skupine podataka: podatke o meteorolokim postajama, prognozama i upozorenjima. U administratorskom dijelu aplikacije korisniku je omogueno auriranje (unos, izmjena i brisanje) te pregled tih podataka. Da bi mogao administrirati podatke, korisnik se mora prijaviti u aplikaciju i dobiti odgovarajue ovlasti. 3.2.2 Prijava korisnika i dodjeljivanje prava S obzirom da se mogunosti registriranog i odobrenog korisnika razlikuju od mogunosti neregistriranog i/ili neodobrenog korisnika bilo je potrebno ugraditi mehanizam koji e prepoznavati o kakvom se tipu korisnika radi i prema tome mu omoguiti pristup odreenim dijelovima aplikacije. Proces prijave je mogu za svakog korisnika, tu se uzimaju osnovni podaci i upisuju u bazu, a pritom se status odobren postavlja u ne. Ovaj dio obavlja programski modul unos_korisnika.php, koji se sastoji od jedne forme za unos, a pri slanju forme (submit) poziva samog sebe i provjerava je li se pozvao sa submit opcijom ili je pozvan bez nje. Ukoliko je pozvan s njom slijedi provjera parametara proslijeenih kroz $_POST polje. if (isset($_POST['submit'])) { if (!$_POST['username'] | !$_POST['pass'] | !$_POST['pass2'] ) { die('Nisu popunjena sva polja!'); }
$korprovjera = $_POST['username'];
$zahtjev = mysql_query("SELECT uUser FROM t_korisnik WHERE uUser = '$korprovjera'") or die(mysql_error()); $provjera = mysql_num_rows($zahtjev); if ($provjera != 0) { die('Korisniko ime '.$_POST['username'].' ve postoji.'); } if ($_POST['pass'] != $_POST['pass2']) { die('Lozinke nisu dobro unesene. '); }
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
header("Location: poruka_ok.php?tip=registracijaok&sljedeca=glavni_meni.php"); } Ispis 3.1 Osnova modula unos_korisnika.php Iz priloenog koda u ispisu 3.1 vidljiva je cijela procedura provjere pojedinih parametara. Prvo se provjerava jesu li unesena sva tri kljuna polja, a to su korisniko ime, lozinka i ponovljena lozinka. Zatim se s korisnikim imenom ide prema bazi i provjerava se je li taj korisnik ve registriran, ukoliko jest prekida se unos jer ne mogu postojati dva ista korisnika imena. Slijedi provjera je li lozinka dvaput isto unesena, ako jest formira se hash lozinke preko md5 algoritma, kako se lozinka ne bi spremala u bazu u obinom tekstualnom formatu. Ukoliko su svi podaci ispravno uneseni radi se unos sloga u bazu preko insert SQL naredbe. Svi potrebni podaci se kao i u prethodnom dijelu modula vade iz $_POST polja koji sadri sve vrijednosti poslane putem forme. Nakon to se unos obavi aplikacija se preusmjerava na modul za ispis poruke da je akcija uspjeno obavljena, to je poruka_ok.php, koji kao parametre prihvaa tip obavijesti i putanju do sljedeeg PHP modula na koji e pokazivati poveznica "Nastavi". Unosom u bazu korisnik jo nije dobio nikakva prava pristupa aplikaciji, da bi ih dobio administrator mu mora odobriti pristup, i to tako to polje "odobren" koje je inicijalno postavljeno na "ne" mijenja u "da". Ovu radnju administrator radi preko modula sistem_odobrenje.php i njegovog pomonog modula sistem_odobri.php. Prvi modul sadrava vizualni dio stranice odobrenja, dok drugi odrauje transakciju prema bazi ovisno o parametrima koji mu se poalju. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 14
Modul sistem_odobrenje.php dohvaa iz baze sve korisnike i njihov status odobrenja i to ispisuje u obliku tablice. Pritom ovisno o statusu odobrenja formira link prema modulu sistem_odobri.php s parametrom "da" ili "ne". Primjerice ako se korisnika treba odobriti link e glasiti : http://.../sistem_odobri.php?korisnik=pero&status=da Zatim modul sisem_odobri.php ovisno o primljenim parametrima odrauje transakciju prema bazi i odobrava, odnosno onemoguava korisnika. Na ispisu 3.2 vidljiv je glavni dio modula za odobrenje korisnika. Prvo se provjerava je li modul primio oba potrebna parametra (korisnik i status). Ukoliko su ispravno proslijeeni formira se UPDATE SQL zahtjev prema bazi koji aurira status korisnika. Tijek aplikacije se zatim preusmjerava nazad na modul pozivatelj, a to je sistem_odobrenje.php. <?php if (!isset($_GET['korisnik']) || !isset($_GET['status'])) header("Location: poruka_notok.php?tip=nijelogiran");
$pKorisnik = $_GET['korisnik']; $pStatus = $_GET['status']; $podaci = mysql_query("update t_korisnik set uOdobren='$pStatus' where uUser='$pKorisnik'")or die(mysql_error()); $rezultat=mysql_query($podaci); header("Location: sistem_odobrenje.php"); ?> Ispis 3.2 Modul sistem_odobri.php Sada kad je korisnik unesen u bazu i dodijeljeno mu je odobrenje korisnik se moe prijaviti u aplikaciju. To radi putem modula koji se inicijalno pojavljuje, a to je sistem_prijava.php. Ovaj modul je na neki nain glavni meni za neregistriranog korisnika. Ovaj modul prvo provjerava je li korisnik prijavljen, a to se vidi po postavljenim kolaiima (engl. cookie) u web pregledniku. Ispis 3.3 prikazuje osnovnu provjeru je li korisnik prijavljen. Ovo se u ostalom dijelu aplikacije radi putem posebnog modula, no o tome e kasnije biti rijei. Prvo se provjerava jeli postavljen kolai dpKorisnik, preko polja $_COOKIE preko kojeg PHP pristupa Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 15
kolaiima u web pregledniku. Ukoliko je sve u redu dohvaa se vrijednost toga i dpHash kolaia koji predstavlja hashirani oblik korisnikove lozinke. Zatim se putem mysql_query zahtjeva pristupa bazi i pokuava se dohvatiti slog korisnika po imenu, s time da se kao uvjet postavlja i da je korisnik aktivan (uOdobren='da'). Ukoliko se u dohvaenom slogu pronae korisnik koji se trai provjerava se je li mu lozinka u redu i ako jest prosljeuje ga se na glavni_meni.php koji predstavlja glavni meni za registrirane korisnike. if(isset($_COOKIE['dpKorisnik'])) { $username = $_COOKIE['dpKorisnik']; $pass = $_COOKIE['dpHash']; $check = mysql_query("SELECT * FROM t_korisnik WHERE uOdobren='da' and uUser = '".$username."'")or die(mysql_error()); while($info = mysql_fetch_array( $check )) { if ($pass == $info['uPassword']) header("Location: glavni_meni.php"); } } Ispis 3.3 Detalj modula sistem_prijava.php Ukoliko je ovaj dio uspjeno odraen korisnik se nalazi u modulu glavni_meni.php, no ukoliko nije (dakle korisnik nije prijavljen), provjeriti e se je li se modul pozvao putem submita iz forme, to bi znailo da je korisnik upisao lozinku i ime i da treba provjeriti je li aktivan. Prethodni dio aplikacije je provjerio je li korisnik ve prijavljen, dok ispis 3.4 provjerava da li se korisnik upravo prijavljuje.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 16
if (isset($_POST['submit'])) { if(!$_POST['username'] || !$_POST['pass']) header("Location: poruka_notok.php?tip=nepopunjeno"); $check = mysql_query("SELECT * FROM t_korisnik WHERE uUser = '".$_POST['username']."'")or die(mysql_error()); $check2 = mysql_num_rows($check); if ($check2 == 0) header("Location: poruka_notok.php?tip=nepostojeci"); while($info = mysql_fetch_array( $check )) { $_POST['pass'] = stripslashes($_POST['pass']); $info['uPassword'] = stripslashes($info['uPassword']); $_POST['pass'] = md5($_POST['pass']); if ($_POST['pass'] != $info['uPassword']) header("Location: poruka_notok.php?tip=loginkriv"); else { if ($info['uOdobren']!="da") header("Location: poruka_notok.php?tip=neaktivan"); else { $_POST['username'] = stripslashes($_POST['username']); $hour = time() + 3600; setcookie(dpKorisnik, $_POST['username'], $hour); setcookie(dpHash, $_POST['pass'], $hour); header("Location: glavni_meni.php"); } } } } else { ?> <html> <head> <title>Prijava na sustav</title> Ispis 3.4 Prijava korisnika Prvi dio ispisanog koda provjerava je li se modul pozvao kroz submit, ako jest provjerava jesu li popunjena potrebna polja (korisniko ime i lozinka) i ukoliko jesu alje zahtjev Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 17
prema bazi za dohvaanje podataka o korisniku. Zatim se provjerava lozinka i ukoliko je sve u redu slijedi postavljanje kolaia. Dohvaa se trenutno vrijeme, dodaje mu se 3600 sekundi (1 sat), i postavlja se kolai dpKorisnik koji sadri korisniko ime, a trajanje mu se postavlja na sat vremena od trenutnog vremena. Isto se radi i s dpHash. Time e korisnik biti prijavljen sljedeih sat vremena, pa ukoliko se zaboravi odjaviti njegova prijava e svejedno istei u razumnom roku. Dio koda na kraju ispisa koji poinje s else smjernicom se izvrava ukoliko modul nije pozvan preko submit zahtjeva i on ispisuje normalnu formu za prijavu na sustav. Kljuni dijelovi su sama forma, dva polja za unos i tipka za prijavu, prikazani ispisom 3.5. <form align="center" action="sistem_prijava.php" method="post"> <input type="text" name="username" id="PlitkiTextBox" maxlength="50"> <input type="password" name="pass" id="PlitkiTextBox" maxlength="16"> <input type="submit" name="submit" id="PlitkaTipka" value="Prijava">
</form> Ispis 3.5 Detalji pojedinih elemenata forme Nakon to je izvrena prijava korisnika on moe koristiti dio aplikacije za registrirane korisnike. Kako bi se tijekom rada aplikacije znalo da je korisnik registriran i kako bi se izbjeglo zaobilaenje koritenja povlatenih dijelova aplikacije upisivanjem kompletne adrese u adresno polje preglednika ugraen je dodatni mehanizam koji se poziva na poetku svakog modula i provjerava je li korisnik prijavljen u sustav i samo u sluaju da jest mu dozvoljava nastavak, u protivnom ga vraa na formu za prijavu u sustav. Navedena funkcionalnost je radi jednostavnosti koritenja napravljena u obliku jednog modula koji se onda kasnije koristi preko include direktive. Taj modul je sistem_spojen.php prikazan ispisom 3.6.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
$zahtjev = mysql_query("SELECT * FROM t_korisnik WHERE uOdobren='da' and uUser = '".$korisnik_cookie."'")or die(mysql_error()); $brred = mysql_num_rows($zahtjev); if ($brred == 0) header("Location: poruka_notok.php?tip=nepostojeci");
while($info = mysql_fetch_array( $zahtjev )) { $spKorisnik=$info['uUser']; $spIme=$info['uIme']; $spPrezime=$info['uPrezime']; $spPostaja=$info['uPostaja']; $spHash=$info['uHash']; $info['uPassword'] = stripslashes($info['uPassword']); if ($pass_cookie != $info['uPassword']) header("Location: poruka_notok.php?tip=loginkriv"); } $spojen_var="true"; } else { $spojen_var="false"; header("Location: poruka_notok.php?tip=nijelogiran"); die(''); } Ispis 3.6 Modul sistem_spojen.php Njegov nain funkcioniranja je dosta jednostavan, dohvaaju se dva kolaia (dpKorisnik i dpHash), zatim se radi zahtjev prema bazi i provjerava se jesu li podaci ispravni. Ukoliko Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 19
se tijekom provjere doe do toga da na bilo koji nain podaci govore da korisniku treba uskratiti pristup putem zaglavlja (header) se tijek aplikacije preusmjerava na poruku o greci i zatim na formu za prijavu u sustav. Ukoliko je sve prolo dobro i dokazano je da je korisnik prijavljen na sustav varijabla spojen_var se postavlja na true, inae se postavlja na false. Ovo je samo pomoni mehanizam koji moe nekom modulu rei rezultat izvravanja modula, ali kljuni dio je usmjeravanje korisnika putem zaglavlja i nedoputanje nastavka rada ukoliko nije prijavljen u sustav. Jo je jedna akcija preostala to se tie ovog dijela aplikacije, a to je odjava. Ona se radi kroz modul sistem_odjava.php. U ispisu 3.7 je kompletan modul sistem_odjava.php koji je dosta jednostavan, uzima se trenutno vrijeme, stavlja se na 100 sekundi u prolost i zatim se kolaii dpKorisnik i dpHash auriraju s tim vremenom. Time je kolaiu rok vaenja ve istekao i web preglednik e ga automatski obrisati ili smatrati neispravnim. <?php $past = time() - 100; setcookie(dpKorisnik, gone, $past); setcookie(dpHash, gone, $past); header("Location: sistem_prijava.php"); ?> Ispis 3.7 Modul sistem_odjava.php 3.2.2.1 Unos i brisanje podataka Nakon to se korisnik uspjeno prijavio u sustav omoguen mu je unos i brisanje podataka, ta radnja je podijeljena na tri osnovna dijela, to su upozorenja, prognoze i postaje. Radi pojednostavljenja procesa dio koda za spajanje na bazu je izdvojen u dva zasebna modula. Uobiajeno je da se podaci za spajanje izdvoje u zasebnu config.php ili slinu datoteku radi fleksibilnosti i jednostavnosti izmjene prilikom promjene baze ili premjetanja na drugi posluitelj. U ovom sluaju tu funkciju ima datoteka Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 20
sistem_config.php, koja sadri inicijalizaciju etiri varijable potrebne za interakciju s bazom. <?php $host = "localhost"; $user = "diplomac"; $pass = "_lozinka_"; $database = "my_diplomski"; ?> Ispis 3.8 Datoteka sistem_config.php Ispis 3.8 prikazuje inicijalizaciju varijabli. Za spajanje na mySQL bazu potrebna su etiri podatka, to su ime posluitelja na kojoj je baza, u ovom sluaju su baza i ova datoteka na istom posluitelju pa je kao posluitelj dovoljno staviti localhost. Zatim je potrebno ime korisnika koji ima dozvolu za interakciju s bazom i njegova lozinka. etvrti potrebni parametar je ime baze. Na ovaj nain se jednostavnom include direktivom moe kod iz ovog modula ukljuiti i u bilo koji drugi i tako inicijalizirati podatke potrebne za spajanje na bazu. Samo spajanje je isto proces koji je uvijek isti pa ga je logino izdvojiti u zaseban moduli pozivati preko include direktive. U ovom sluaju spajanje na bazu je definirano u modulu sistem_spajanje.php. Ispis 3.9 prikazuje sadraj vrlo jednostavnog modula za spajanje na bazu, koji putem naredbi mysql_connect i mysql_select_db kreira link na bazu i spaja se. Bitno je prije poziva ovog modula pozvati mogul sistem_config.php kako bi se uitale varijable koje se koriste u ovom modulu. <?php $linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host."); mysql_select_db($database, $linkID) or die("Could not find database."); ?> Ispis 3.9 Sadraj modula sistem_spajanje.php Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 21
3.2.2.2 Obrada upozorenja Na slici 3.3 prikazana je logika struktura posluiteljskog dijela aplikacije koji slui za obradu upozorenja. Aplikacija omoguuje unos, izmjenu, brisanje i pregled upozorenja. Obrada upozorenj a Unos upozorenj a Pregled upozorenj a Brisanj e upozorenj a Brisanj e Auriranj e upozorenj a Auriranj e Unos Upozorenj e
Slika 3.3 Obrada upozorenja Unos i brisanje upozorenja su realizirani preko nekoliko modula, oni su redom : unos_upozorenja.php - forma za odabir datuma za unos upozorenja upis_upozorenja.php - modul za interakciju s bazom to se upozorenja tie forma_upozorenja.php - forma za unos upozorenja brisanje_upozorenja.php - forma za odabir datuma za brisanje upozorenja brisi_upozorenja.php - modul za interakciju s bazom za brisanje upozorenja Prilikom unosa ili auriranja upozorenja prvo se odabire datum za koji se unose odnosno auriraju upozorenja. Takoer je mogue unijeti novi datum, a za pomo korisniku ponuen je i odabir trenutnog. Taj dio odrauje modul unos_upozorenja.php. Dio njegovog koda slijedi. Na ispisu 3.10 je prikazan dio modula unos_upozorenja.php koji je identian u veini modula koji ine aplikaciju. U njemu se uitavaju konfiguracijske varijable, spaja na bazu i Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 22
poziva modul za provjeru je li korisnik prijavljen na sustav. Ako je sve u redu nastavlja se prema ispisu HTML dijela stranice. <?php
include 'sistem_config.php'; include 'sistem_spajanje.php';
include 'sistem_spojen.php'; if($spojen_var=="false") header("Location: poruka_notok.php?tip=nijelogiran");
//ako je spojen ide dalje ?> <html> <head>
Ispis 3.10 Dio modula unos_upozorenja.php HTML dio stranice na odreenim mjestima ponovno koristi PHP, npr. kako bi napunio polje za izbor datuma vrijednostima iz baze. Osnovne provjere se obavljaju putem JavaScript programskog jezika. function nowStr() { var sad=new Date(); document.GlavnaForma.godina.value=sad.getFullYear(); document.GlavnaForma.mjesec.value=sad.getMonth()+1; document.GlavnaForma.dan.value=sad.getDate(); return false; } Ispis 3.11 Primjer JavaScript funkcije Na ispisu 3.11 je primjer jedne od nekoliko JavaScript funkcija napravljenih za odreene radnje unutar forme. Konkretno ova funkcija puni polja za unos trenutnim datumom kad se klikne na tipku "Trenutni". JavaScript se takoer koristi za jednostavne provjere je li unesen ispravan datum, jesu li popunjena odreena polja i slino.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 23
<select name="datumiPostojeci" onChange="comboIzmjena()" width="10" id="datumiPostojeci"> <option>0000-00-00</option> <?php if (isset($_GET['datum'])) $odDatum=$_GET['datum']; else $odDatum=""; $datumi = mysql_query("SELECT distinct upDatum FROM t_upozorenja")or die(mysql_error()); while($info = mysql_fetch_array( $datumi )) { if ($info['upDatum']==$odDatum) echo "<option SELECTED>".$info['upDatum']."</option>"; else echo "<option>".$info['upDatum']."</option>"; } ?> </select> Ispis 3.12 Detalj modula unos_upozorenja.php Ispis 3.12 prikazuje kako se padajua lista puni datumima iz baze. Unutar HTML koda u dijelu gdje je potrebno navesti vrijednosti pojedinih linija kontrolu preuzima ubaena PHP skripta koja generira zahtjev prema bazi i zatim dohvaene vrijednosti formatira u ispravne HTML tagove i tako puni padajuu listu. Kad se izabere datum klikom na tipku "Uredi" se otvara forma za unos upozorenja, koja je sadrana u modulu forma_upozorenja.php. Ova forma se radi veeg broja polja uglavnom dinamiki generira tako to su dijelovi imena polja navedeni u PHP varijablama tipa polje (array) i zatim se izvrte preko for petlje. Imena upanija koja se ispisuju na formi definirana su u programu. For petlja e proi kroz sve elemente polja i ispisati retke tablice koristei vrijednosti definirane u poljima. Tako je sam fiksni dio HTML koda dosta reduciran i pojednostavljen. Ispis 3.13 prikazuje kako se podaci o upozorenjima dohvaaju iz baze. U ovom dijelu modula se jo uvijek ne pune u polja na formi. Bitno je navesti da se traeni datum alje s Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 24
prethodnog modula kroz skrivenu varijablu datumSkriveni koja je definirana kao skriveni tekst, tako da se na formi ne prikazuje, ali svejedno postoji u obliku varijable koja se prosljeuje kad se pozove submit. $podaci = mysql_query("SELECT * FROM t_upozorenja where upDatum='".$_POST['datumSkriveni']."'")or die(mysql_error()); while($info = mysql_fetch_array( $podaci )) { for ($i=1;$i<22;$i++) { if ($info['zupanija']==$arZupanijeEn[$i]) { $arOpisi[$i]=$info['opis']; $arStupnjevi[$i]=$info['stupanj']; break; } } } Ispis 3.13 Punjenje polja s podacima Na ispisu 3.14 je izlistan cijeli dio za generiranje redaka u tablici. Tu se ispisuje ime upanije, kreira polje sa stupnjem upozorenja, fokus se stavlja na trenutno odabranu vrijednost i zatim se ispisuju polja s opisima upozorenja. Na ovaj nain je vei dio tablice generiran dinamiki preko PHP skripte. Imena polja sa stupnjem upozorenja su tipa zup_01 do zup_21, a s opisima zup_01_opis do zup_21_opis. Ovako je postignuto da se jednostavnim etanjem s for petljom mogu pokupiti sve vrijednosti bez da se svaka uzima posebno. for ($j=1;$j<=21;$j++) { $imeZup="zup_".sprintf("%02d",$j);
?> Ispis 3.14 Detalj modula forma_upozorenja.php Klikom na "Spremi" se poziva modul upis_upozorenja.php koji nema svoj vizualni dio nego odrauje posao prijenosa podataka iz forme u bazu podataka. Podatke prima od forme za unos preko $_POST polja i upisuje u bazu. Na ispisu 3.15 je detalj modula upis_upozorenja.php koji prikazuje kako se podaci iz $_POST polja preuzimaju i zatim prosljeuju funkciji za upis u bazu. Radi lakeg rukovanja podacima definirana su dva polja koja olakavaju transformaciju podataka iz forme u format namijenjen bazi podataka. Primjer za ovo je stupanj upozorenja koji se na formi prikazuje kao boja, dok se u bazi vodi kao cjelobrojni podatak. Preko indeksa polja s definiranim bojama se lako znakovni niz pretvori u odgovarajuu cjelobrojnu vrijednost. $lista = array ( "Bijelo" =>0, "Zeleno" =>1, "uto" =>2, "Naranasto" =>3, "Crveno" =>4 ); Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
ubaciBaza($zup_string,$out,$dat_cijeli,$korisnik_ime,$vrijeme,$op is_string); } Ispis 3.15 Sakupljanje podataka iz forme Na ispisu 3.16 je kompletna funkcija za upis podataka o upozorenjima. Vidljiv je i dio gdje se navode moduli za uitavanje konfiguracijskih podataka i spajanje na bazu. Zatim se u bazi provjerava postoji li ve slog za datum koji se upisuje. Ako postoji izvrava se UPDATE zahtjev prema bazi, ako ne postoji radi se INSERT u bazu. Tako je jednom funkcijom rijeen i novi upis i auriranje podataka. function ubaciBaza($zupanija,$stupanj,$datum,$korisnik,$vrijeme,$opis) {
include 'sistem_config.php'; include 'sistem_spajanje.php';
$podatak = mysql_query("select distinct upDatum from t_upozorenja where upDatum='".$datum."' and zupanija='".$zupanija."'")or die(mysql_error()); Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 27
$dodano=mysql_fetch_assoc($podatak);
if ($datum==$dodano['upDatum']) { $novi = mysql_query("update t_upozorenja set opis='".$opis. "', stupanj='".$stupanj."',zadnja_izmjena='".$korisnik.":".$vrijeme."' where upDatum='".$datum."' and zupanija='".$zupanija."'")or die(mysql_error()); } else { $novi = mysql_query("insert into t_upozorenja (upDatum,zupanija,stupanj,autor,zadnja_izmjena,opis) values ('".$datum."','".$zupanija."','".$stupanj."','".$korisnik."','".$korisnik .":".$vrijeme."','".$opis."')")or die(mysql_error()); }
$dodano=mysql_query($novi); } Ispis 3.16 Funkcija za upis podataka Osim unosa i izmjene korisnik upozorenja moe i brisati. Ovu funkciju obavljaju dva modula, to su brisanje_upozorenja.php i brisi_upozorenja.php. Slino kao kod unosa jedan modul je za odabir datuma, a drugi nema vizualni dio nego je namijenjen interakciji prema bazi. Nain dohvata raspoloivih datuma je isti kao i kod odabira datuma za ureenje. Na ispisu 3.17 je prikazan nain na koji se korisnika pita je li siguran da eli brisati podatak. Ako jest vrijednost padajue liste se preslikava u skrivenu varijablu datumSkriveni koju e sljedei modul primiti preko $_POST polja. Ukoliko korisnik klikne cancel nee se dogoditi nita, odnosno podatak nee biti obrisan.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 28
function provjera() { if (confirm("Jeste li sigurni da elite obrisati podatak?")) { var selNum = GlavnaForma.datumiPostojeci.selectedIndex; var selText = GlavnaForma.datumiPostojeci.options[selNum].text;
GlavnaForma.datumSkriveni.value=selText; return(true); } else return(false); } Ispis 3.17 Detalj modula brisanje_upozorenja.php Na ispisu 3.18 je prikazan gotovo cijeli modul za brisanje. Preko forme na prethodnom modulu se preko submita prosljeuje datum koji je potrebno obrisati, ovaj modul ga prihvaa i prosljeuje bazi DELETE SQL naredbu. Nakon toga korisnika preusmjerava na obavijest da je brisanje uspjeno odraeno. $dat_cijeli=$_POST['datumSkriveni'];
$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host."); mysql_select_db($database, $linkID) or die("Could not find database.");
$podatak = mysql_query("delete from t_upozorenja where upDatum='".$dat_cijeli."'")or die(mysql_error()); $obrisano=mysql_query($podatak);
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 29
3.2.2.3 Obrada prognoze Na slici 3.4 prikazana je logika struktura posluiteljskog dijela aplikacije koji slui za obradu prognoza. Aplikacija omoguuje unos, izmjenu, brisanje i pregled prognoza. Obrada prognoza Upis prognoza Pregled prognoza Brisanj e prognoza Brisanj e Izmj ena prognoze Izmj ena Unos Prognoza
Slika 3.4 Logika struktura dijela aplikacije za obradu prognoza Unos prognoza je izgledom dosta slian unosu upozorenja i sastoji se od slinih modula. Zbog toga e biti opisan ukratko kako se ne bi ponavljale iste stvari. Moduli od kojih se ovaj dio aplikacije sastoji su : brisanje_prognoza.php - modul za odabir datuma za brisanje brisi_prognoze.php - modul za interakciju s bazom kod brisanja forma_prognoze.php - modul s formom za unos prognoza pregled_prognoza.php - modul za pregled prognoza na posluitelju unos_prognoza.php - modul za odabir datuma za obradu prognoza upis_prognoza.php - modul za interakciju s bazom kod upisa Slino kao kod upozorenja modul unos_prognoza.php nudi listu postojeih datuma i omoguava odabir pojedinog od njih kao i unos novog. Razlika je to se prognoze unose za Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 30
tri razdoblja dana pa su sukladno tome ovdje tri tipke za unos, svaka za pojedino doba dana. Da bi modul koji poziva unos znao o kojem dobu dana se radi napravljena je JavaScript funkcija koja vrijednost izabrane tipke sprema u skrivenu varijablu. Na ispisu 3.19 je vidljivo kako se kroz JavaScript funkciju postavlja vrijednost skrivenog polja koje e se svejedno poslati modulu kojeg poziva klik na bilo koju od tri submit tipke. function datNovi(tip) { if (tip=='jutro') GlavnaForma.dobaSkriveno.value="jutro"; if (tip=='popodne') GlavnaForma.dobaSkriveno.value="popodne"; if (tip=='noc') GlavnaForma.dobaSkriveno.value="noc"; } Ispis 3.19 Detalj modula unos_prognoza.php Datumi se u padajuu listu pune na isti nain kao kod unosa upozorenja. Takoer funkcije za provjeru ispravnosti datuma su iste kao i ona za punjenje trenutnog datuma. Kad se klikne na tipku za neko doba dana otvara se forma za unos prognoze, forma_prognoze.php. Na ispisu 3.20 su prikazane dvije funkcije ija je namjena prikazivanje uputa (hint) korisniku kako bi znao detaljnije o vrijednosti koja se upisuje u odgovarajue polje. Upute se prikazuju kad se miem pree preko odgovarajueg podatka u zaglavlju tablice. Na kraju ispisa je primjer (za jedno polje) kako funkciju pozvati kad se miem pree preko zaglavlja. function misVan() { document.GlavnaForma.hint.value=""; }
function misUnutra(tipka) { if (tipka==8) Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 31
document.GlavnaForma.hint.value="Podruje za koje prognoza vrijedi"; if (tipka==1) document.GlavnaForma.hint.value="Tekst prognoze"; if (tipka==2) document.GlavnaForma.hint.value="Minimalna oekivana temperatura u C"; if (tipka==3) document.GlavnaForma.hint.value="Maksimalna oekivana temperatura u C"; if (tipka==4) document.GlavnaForma.hint.value="Oekivana brzina vjetra u km/h"; if (tipka==5) document.GlavnaForma.hint.value="Oekivani smjer vjetra"; if (tipka==6) document.GlavnaForma.hint.value="Tip oborina"; if (tipka==7) document.GlavnaForma.hint.value="Koliina oborina - kia u cm po metru kvadratnom, snijeg u centimetrima"; } ... <td bgcolor="#AAAAAA" onMouseOver="misUnutra(8)" onMouseOut="misVan()">Podruje</td> Ispis 3.20 Detalj modula forma_prognoze.php Ova forma se veim dijelom generira dinamiki uz koritenje polja definiranih u PHP skripti u kombinaciji s podacima koji se dohvaaju iz baze. Klikom na tipku "Spremi" poziva se modul upis_prognoza.php koji putem $_POST polja prima podatke od forme, transformira ih i u interakciji s bazom provjerava treba li napraviti INSERT ili UPDATE i tako obnavlja polja. Ukoliko je neko od polja bilo popunjeno, ali se aurira kako prazno modul e obrisati taj slog iz baze kako ne bi dolazilo do nepotrebnog dranja sloga u bazi ukoliko on ne sadri nikakvu korisnu informaciju. Brisanje prognoza se radi na isti nain koji je opisan kod brisanja upozorenja. Prvo modul brisanje_prognoze.php nudi listu datuma, odabirom datuma i odreenog doba dana se poziva modul brisi_prognoze.php koji u interakciji s bazom brie odgovarajui slog. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 32
Ukoliko se odabere opcija "Sve" onda se kod brisanja kao uvjet ne uzima doba dana nego samo datum tako da se briu sva tri doba dana za konkretni datum. Na ispisu 3.21 je vidljiv nain provjere brie li se samo jedno doba dana ili sva tri, i prema tome odgovarajui zahtjev prema bazi. if ($tip_cijeli=="sve") $podatak = mysql_query("delete from t_prognoza where datum='".$dat_cijeli."'")or die(mysql_error()); else $podatak = mysql_query("delete from t_prognoza where datum='".$dat_cijeli."' and doba='".$tip_cijeli."'")or die(mysql_error()); Ispis 3.21 Detalj modula brisi_prognoze.php 3.2.2.4 Obrada meteorolokih postaja Na slici 3.5 prikazana je logika struktura posluiteljskog dijela aplikacije koji slui za obradu meteorolokih postaja. Aplikacija omoguuje unos, brisanje i pregled podataka. Unos podataka vri se od strane udaljenog raunala meteoroloke postaje koji dostavlja podatke. Obrada postaj a Meteoroloka postaj a Pregled postaj a Brisanj e postaj e Brisanj e Upis postaj e Postaj a HTTP
Slika 3.5 Logika struktura dijela aplikacije za evidenciju meteorolokih postaja Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 33
Aplikacija sadri i dio za unos podataka o postajama. Ovaj dio se razlikuje od dijelova za unos prognoza i upozorenja po tome to se podaci koje postaja alje ne unose runo nego ih radi program koji se vrti na odreenom raunalu i alje ih putem GET zahtjeva prema servisu. Meutim neke informacije o postajama je potrebno unijeti kako bi servis dobro radio, pa za to slui dio aplikacije iji opis slijedi. Taj dio ine sljedei moduli : brisanje_postaja.php - brie podatke koje je postaja poslala brisi_postaja.php - interakcija prema bazi kod brisanja pregled_postaja.php - pregled podataka koje je postaja poslala, na posluitelju unos_postaja.php - unos osnovnih podataka o postajama Modul unos_postaja.php slui kako bi se postaji pojedinog korisnika pridruilo ime i neka vrsta identifikacijske lozinke koju postaja mora poslati kako bi uspjeno upisala slog u bazu. Za ime korisnika se automatski uzima ime trenutno prijavljenog korisnika i dohvaa se njegov slog iz baze kako bi se provjerilo je li njegova postaja ve ima ime i lozinku. Ukoliko ima ti e se podaci prikazati u kuicama za unos i mogue ih je promijeniti. Ukoliko nema podaci e biti prazni i mogue ih je upisati. Vaan podatak je lozinka postaje koja se mora slati prema servisu kako bi upis bio uspjean. Preporueno je da se odabere neka lozinka koju nije jednostavno pogoditi kako bi se osigurala autentinost podataka. Ovdje kao pomo korisniku postoji funkcija koja generira sluajnu lozinku od 20 slova i brojeva. Funkcija prikazana na ispisu 3.22 je napisana u JavaScriptu i iz niza koji sadri sva velika i mala slova i brojeve uzima sluajne pozicije 20 puta i tako formira lozinku. <script language="JavaScript"> function Generiraj() { var skup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; var izlaz = ""; var slucajna;
for(var i = 0; i < 20; i ++) { slucajna=Math.floor(Math.random()*60) Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 34
izlaz=izlaz+skup[slucajna]; } document.Glavna.hash.value=izlaz; } </script> Ispis 3.22 JavaScript funkcija za generiranje lozinke Poto postaje alju podatke prema servisu koji ih upisuje u bazu nekad je te podatke potrebno i obrisati. Zato je napravljen modul koji omoguava brisanje i to po dva kriterija, jedan je datum, a drugi je ime postaje. Modul brisanje_postaja.php u padajuim listama daje imena postaja i datume za koje postoje podaci, izborom odreenog podatka i klikom na odgovarajuu tipku podaci se prosljeuju modulu brisi_postaja.php koji zatim radi interakciju prema bazi i brie podatak. 3.2.3 Servisi U dosad opisanoj funkcionalnosti aplikacije navedeni su detalji o posluiteljskom dijelu i upisu podatka koje servis stavlja na raspolaganje korisniku. No da bi se podaci iz baze preslikali u XML datoteke koje servisi nude potrebno je bilo napraviti nekoliko modula koji e obnaati tu funkcionalnost. To su sljedei moduli : xml_pos_podaci.php - generira XML datoteku s podacima od postaja xml_pro_datumi.php - generira XML datoteku s datumima prognoza xml_pro_podaci.php - generira XML datoteku s podacima prognoza xml_upo_godine.php - generira XML datoteku s godinama za upozorenja xml_upo_datumi.php - generira XML datoteku s datumima za upozorenja xml_upo_podaci.php - generira XML datoteku s podacima za upozorenja Svi navedeni moduli imaju zajedniku namjenu, a to je generiranje XML datoteka s podacima koje korisnik servisa trai. Ovi moduli "sjede" izmeu baze i korisnika servisa i posreduju tako to korisniku daju podatke bez potrebe za direktnom interakcijom s bazom podataka. Na taj nain je sustav sigurniji, a podaci su jednostavno dostupni korisniku. Na slici 3.6 prikazana je logika struktura posluiteljskog dijela aplikacije koji funkcionira kao web servis. Dio web servisa (njegove suelje) je izloen vanjskim klijentima koji Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 35
koriste njegove funkcionalnost. Podaci koji se pritom koriste evidentirani su u drugim dijelovima aplikacije. Suelj e servisa Kreiranj e XMLa Prognoza po datumu Prognoze Upozorenj a Upozorenj a po datumu Upozorenj a po godinama Postaj e
Slika 3.6 Logika struktura dijela aplikacije koji nudi funkcionalnost web servisa Za kreiranje XML datoteka koristi se PHP skripta koja formira stringove koji sadre podatak zatvoren u odgovarajue tagove. Radi preglednijeg formatiranja XML datoteke napisana je funkcija koja kao parametar prima ime taga, sadraj podatka i razinu kako bi se moglo napraviti pomicanje udesno radi dobivanja itljivije datoteke. Funkcija je prikazana ispisom 3.23. function pXml($razina,$polje,$vrijednost) { $pomak=""; $pomak=str_repeat("\t",$razina); $povrat=$pomak."<".$polje.">".$vrijednost."</".$polje.">\n"; return $povrat; } Ispis 3.23 PHP funkcija za ograivanje sadraja tagovima Npr. ako korisnik eli vidjeti za koje su mu datume raspoloive prognoze dovoljno je da pozove URL : http://posluitelj/xml_pro_datumi.php Rezultat e biti XML formatirana datoteka primjer koje je prikazan ispisom 3.24. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 36
<podaci> <datum>2010-11-25</datum> <datum>2010-11-23</datum> <datum>2010-11-20</datum> </podaci> Ispis 3.24 XML datoteka za prognoze Korisnik servisa zatim moe po listi raspoloivih datuma zatraiti podatke za pojedini datum na sljedei nain : http://posluitelj/xml_pro_podaci.php?datum=2010-11-23 Na ispisu 3.25 prikazana je datoteka koja e biti generirana i poslana korisniku servisa kao rezultat zahtjeva prema servisu da vrati prognozu za 23-11-2010. <podaci> <jutro> <DU> <tekst>Lijepo jutro u Dubrovniku</tekst> <tmin>10</tmin> <tmax>12</tmax> <vbrz>5</vbrz> <vsmj>NE</vsmj> <obtip/> <obkol/> <autor/> </DU> <ZG> <tekst>Lijepo jutro u Zagrebu</tekst> <tmin>11</tmin> <tmax>15</tmax> <vbrz>1</vbrz> <vsmj>SE</vsmj> <obtip/> <obkol/> <autor/> </ZG> </jutro> <popodne> Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 37
<DU> <tekst>Popodne naoblaka</tekst> <tmin>10</tmin> <tmax>10</tmax> <vbrz>2</vbrz> <vsmj>SE</vsmj> <obtip/> <obkol/> <autor/> </DU> </popodne> </podaci> Ispis 3.25 XML datoteka s podacima o prognozama Na slian nain rade i ostali moduli koji generiraju XML datoteke. Tako se npr. za upozorenja prvo poziva modul koji e vratiti listu godina : http://posluitelj/xml_upo_godine.php Nakon to servis vrati listu godina mogu se zatraiti raspoloivi datumi za pojedinu godinu http://posluitelj/xml_upo_datumi.php?godina=2010 Rezultat je ponovno XML datoteka s listom raspoloivih datuma, i sad je mogue zatraiti podatke za pojedini datum : http://posluitelj/xml_upo_podaci.php?datum=2010-11-25 Na ovaj zahtjev posluitelj vraa XML datoteku s podacima za pojedini datum. Tu su sve upanije, stupanj upozorenja i tekst upozorenja. Korisnik servisa zatim moe te podatke prezentirati na odgovarajui nain. Ukoliko bi korisnik htio dohvatiti podatke koje su postaje prikupile pozvao bi sljedei URL : http://posluitelj/xml_pos_podaci.php Kao rezultat bi dobio listu podataka s svih postaja po svim datumima. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 38
3.2.4 Nain rada servisa U prethodnom dijelu ovog poglavlja opisano je kako se alje zahtjev prema servisu i kakve on podatke vraa. U ovom potpoglavlju slijedi detaljniji opis naina rada servisa, odnosno programskog koda koji omoguuje da servis radi. Za primjer e biti opisan nain rada pojedinih modula koji pruaju korisniku servisa podatke o upozorenjima. Prvi je modul xml_upo_godine.php koji vraa listu raspoloivih godina. <?php header("Content-type: text/xml; charset=Windows-1250"); $xml_output = "<?xml version=\"1.0\" encoding=\"Windows-1250\"?>\n"; $xml_output .= "<podaci>\n";
include 'sistem_config.php'; include 'sistem_spajanje.php';
$query = "SELECT distinct YEAR(datum) as godina FROM t_prognoza ORDER BY datum DESC"; $resultID = mysql_query($query, $linkID);// or die("Nema podataka."); for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){ $row = mysql_fetch_assoc($resultID); $xml_output .= "\t\t<godina>" . $row['godina'] . "</godina>\n"; } $xml_output .= "</podaci>"; echo $xml_output; ?> Ispis 3.26 Servis koji vraa podatke o godinama za upozorenja Kao to je vidljivo iz ispisa 3.26 generiranje XML datoteke poinje ubacivanjem njenih zaglavlja, odnosno headera. Nakon toga se formira poetni tag <podaci> koji e se pojaviti i ako podataka nema, ali e izmeu njega i njegovog zatvorenog taga </podaci> biti prazno. Zatim slijedi konekcija na bazu preko dva modula koji slue za tu svrhu. Kad se uspjeno povezalo na bazu postavlja se SQL zahtjev koji uzima sve godine za datume koji su upisani pazei da ne uzima dvaput isti pa koristi DISTINCT naredbu. Takoer se podaci sortiraju prema godini, u padajuem redoslijedu. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 39
Zatim se svaki proitani podatak ograuje odgovarajuim tagom kako bi se znalo o kojem se podatku radi. Na kraju kad se petlja zavri generira se zavrni tag koji zatvara podatke i kompletna XML datoteka se preko echo naredbe iz varijable alje na izlaz. Taj izlaz prima klijent i to su podaci koje on vidi. Cijelo spajanje na bazu i dohvat podataka je za njega transparentan. Nakon to je korisnik dobio podatke o godinama moe na raun njih zahtijevati da mu se poalju datumi za te godine. To e uiniti pozivom drugog modula, a to je xml_upo_datumi.php. Na ispisu 3.27 je modul koji generira XML datoteku s popisom datuma za odreenu godinu. Dio za spajanje na bazu i generiranje zaglavlja je iz ovog ispisa izbaen radi jednostavnosti, a u praksi je isti kao kod prethodnog modula. Ovaj modul se malo razlikuje od prethodnog jer prima parametar datum preko URLa. Ukoliko mu je taj parametar ispravno poslan radi se zahtjev prema bazi i dohvaaju se slogovi koji zadovoljavaju uvjet. Zatim se jedan po jedan slog ograuje tagovima i prosljeuje izlaznoj varijabli. Na kraju se varijabla prosljeuje na izlaz i tako ini dostupnom korisniku. <?php ... //odrezan dio za spajanje na bazu if (isset($_GET['godina'])) { $trazena = $_GET['godina']; $query = "SELECT distinct(upDatum) FROM t_upozorenja where YEAR(upDatum)= " . $trazena . " ORDER BY upDatum DESC"; $resultID = mysql_query($query, $linkID);// or die(""); for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){ $row = mysql_fetch_assoc($resultID); $xml_output .= "\t\t<datum>" . $row['upDatum'] . "</datum>\n"; } } $xml_output .= "</podaci>"; echo $xml_output; ?> Ispis 3.27 Modul xml_upo_datumi.php Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 40
Korisnik sad ima jo jednu mogunost, a to je da odabere neki od datuma i za njega zatrai konkretne podatke, to je smisao ovog servisa. Te podatke e mu vratiti modul xml_upo_podaci.php. prikazan na ispisu 3.28. <?php ... //izbaen dio radi jednostavnosti prikaza if (isset($_GET['datum'])) $trazena = $_GET['datum']; else $trazena="0000-00-00";
$query = "SELECT zupanija,stupanj,opis FROM t_upozorenja where upDatum= '" . $trazena . "'";
$resultID = mysql_query($query, $linkID);// or die("Nema podataka.");
$xml_output .= "\t\t<opis>" . $row['opis'] . "</opis>\n"; $xml_output .= "\t</entry>\n"; } $xml_output .= "</entries>"; echo $xml_output; ?> Ispis 3.28 Modul xml_upo_podaci.php Ovaj modul prima parametar datum kojeg koristi da bi preko SQL zahtjeva dobio podatke za konkretan datum. Dohvaene podatke zatim ograuje tagovima i alje na izlaz. Za Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 41
vrijednost opis se poduzimaju dodatne radnje kako bi se osiguralo da neki od nedozvoljenih znakova ne zavri u izlazu i tako stvori neispravno formatiranu XML datoteku. U ovom poglavlju je opisano na jednom primjeru kako aplikacija putem odreenih modula generira XML formatirani izlaz koji je onda pogodan za koritenje od strane korisnika servisa koji ne mora imati pristup bazi jer to posredovanje za njega odrauje servis. Osim to se korisniku mogu ponuditi servisi za preuzimanje podataka mogue mu je ponuditi i servis za slanje podataka. Ova aplikacija nudi i to, korisnik moe preko REST protokola poslati odreene podatke na posluitelj i to putem jednostavnih GET zahtjeva. Pritom je potrebno da zna kako formatirati zahtjev kako bi ga servis ispravno prihvatio. Ispis 3.29 prikazuje kompletan servis za primanje podataka od strane korisnika servisa. Njegova namjena je da iz GET zahtjeva primljenog od korisnika preuzme poslane vrijednosti i ukoliko su ispravno formirane proslijedi ih u bazu podataka. Na taj nain korisnik opet nema direktnog kontakta prema bazi nego za njega to odrauje servis. <?php
date_default_timezone_set('CET');
if (isset($_GET['datum'])) $datum = $_GET['datum']; else $datum=date("Y-m-d");
if (isset($_GET['vrijeme'])) $vrijeme = $_GET['vrijeme']; else $vrijeme=date("H:i:s");
$datum=navod($datum); $vrijeme=navod($vrijeme);
if (isset($_GET['hash'])) $hash = $_GET['hash']; Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 42
else { echo "ERROR-HASH"; return; }
if (isset($_GET['temp'])) $temperatura = navod($_GET['temp']); else $temperatura="NULL";
if (isset($_GET['vjetar'])) $vjetar = navod($_GET['vjetar']); else $vjetar="NULL";
if (isset($_GET['smjer'])) $smjer = navod($_GET['smjer']); else $smjer="NULL";
if (isset($_GET['vlaga'])) $vlaga = navod($_GET['vlaga']); else $vlaga="NULL";
if (isset($_GET['kisa'])) $kisa = navod($_GET['kisa']); else $kisa="NULL";
include 'sistem_config.php'; include 'sistem_spajanje.php';
$linkID = mysql_connect($host, $user, $pass) or die("ERROR-DBCONNECT"); mysql_select_db($database, $linkID) or die("ERROR-DBLINK");
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 43
$podatak=$check = mysql_query("SELECT uPostaja FROM t_korisnik where uHash='".$hash."'")or die(mysql_error()); $info = mysql_fetch_array( $check );
if ($info['uPostaja']=="") { echo "ERROR-POSTAJA"; return; } else $imePostaje=navod($info['uPostaja']);
$podatak = mysql_query("insert into t_postaja (imePostaje,datum,vrijeme,temperatura,vjetar,smjer,vlaga,kisa) values (".$imePostaje.",".$datum.",".$vrijeme.",".$temperatura.",".$vjetar.",".$ smjer.",".$vlaga.",".$kisa.")")or die("ERROR".mysql_error());
if ($podatak==1) echo "OK"; else echo "ERROR-NODATA";
function navod($ulaz) { return "'".$ulaz."'"; }
?> Ispis 3.29 Modul rest_slanje.php Sam nain rada ovog servisa je dosta jednostavan. Preko isset funkcije se provjerava koje vrijednosti su poslane servisu. One koje su poslane se preslikavaju u varijable. Neke od vrijednosti (npr. hash) su obavezne, pa ukoliko nisu poslane dolazi do poruke o greci. Neke nisu obavezne pa njihovo nepostojanje nee stopirati servis nego e on u bazu upisati NULL vrijednosti na odgovarajue pozicije. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 44
Ukoliko doe do greke servis e kao povratnu vrijednost javiti ERROR-kod_greke, dok e kod uspjenog upisa poslati povratnu vrijednost OK. Na ovaj nain pozivatelj servisa ima informaciju kako je transakcija prola i donekle ima uvid u to to je krivo napravljeno ako transakcija nije prola. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 45
4 Opis aplikacije za razmjenu meteorolokih podataka Realizirana aplikacija za razmjenu meteorolokih podataka ima dvije glavne namjene. Prva je pruiti servis za praenje meteorolokih podataka i to na nain da korisnik s pravima za ureivanje unosi podatke preko web suelja, a klijenti pozivom dostupnih servisa mogu te podatke dohvatiti u obliku XML datoteka. Na takav nain klijenti nemaju direktnu interakciju s bazom nego interakciju obavlja posluitelj koji klijentu daje pripremljene i formatirane podatke. Druga namjena aplikacije je pruiti servis za primanje podataka s meteorolokih postaja. Za potrebe demonstracije koritenje napravljenih web servisa napravljena je aplikacija sa servisom za primanje i davanje meteorolokih podataka. Dio aplikacije dostupan registriranom korisniku nudi mogunost ureivanja pojedinih podataka koje e servis nuditi klijentima. Taj dio je podijeljen na dva osnovna dijela: prognoze i upozorenja. Prognoze sadre podatke o predvienom kretanju meteorolokih prilika, dok upozorenja sadre podatke koji upozoravaju na mogunost oluja i ostalih vremenskih neprilika. 4.1 Ulazni dio Kada korisnik pristupi aplikaciji nude mu se dvije opcije, moe se ili prijaviti na sustav i ureivati podatke ili moe ostati neprijavljen i pregledavati podatke, ali bez mogunosti mijenjanja. Ako se radi o novom korisniku koji eli imati pristup ureivanju podataka on moe odabrati opciju 'dodavanje novog korisnika' i upisati svoje podatke.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 46
Na slici 4.1 je vidljiv izgled zaslona kad korisnik koji nije prijavljen pristupi aplikaciji.
Slika 4.1 Poetna stranica Na slici 4.2 vidljiv je izgled zaslona za prijavu novog korisnika. Potrebno je upisati osnovne podatke, a to su ime i prezime, odabrati korisniko ime s kojim e se prijavljivati u sustav i lozinku. Kada se novi korisnik registrira njegovi podaci e biti upisani u bazu, ali jo uvijek nee imati mogunost ureivanja podataka. Da bi dobio tu mogunost administrator ga prvo mora odobriti.
Slika 4.2 Prijava novog korisnika
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 47
U sluaju da se pokua prijaviti dok nije odobren javiti e mu se poruka da mora priekati odobrenje i ta poruka je prikazana na slici 4.3.
Slika 4.3 Pokuaj prijave neaktivnog korisnika 4.2 Korisniki dio Ako je korisnik ve odobren moe se prijaviti u aplikaciju sa svojim podacima. Provjerava se lozinka i korisniko ime, a ako podaci nisu odgovarajui korisniku se ne doputa ulaz u korisniki dio. Isto vrijedi i ako korisnik nije odobren. Slika 4.4 prikazuje izgled zaslona nakon to se korisnik uspjeno prijavio. Korisniku se nude opcije ureivanja podataka, a u svakom sluaju mu ostaju i pregledi koje ima i neregistrirani korisnik. Kad je gotov s radom registrirani korisnik se moe odjaviti iz aplikacije.
Slika 4.4 Korisniki izbornik 4.3 Administracija Ovaj dio aplikacije sadri administrativni dio gdje se mogu vidjeti korisnici i mogu se omoguiti odnosno onemoguiti. Korisnik kojemu se eli zabraniti pristup aplikaciji se jednostavno onemogui i iako e i dalje postojati kao korisnik nee moi ui u korisniki dio aplikacije. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 48
Na slici 4.5 vidljiv je izgled zaslona s listom korisnika, a nudi se i mogunost odobravanja, odnosno zabranjivanja pristupa pojedinom korisniku. Administratorski raun se ne moe onemoguiti jer bi u tom sluaju bilo nemogue pristupiti aplikaciji.
Slika 4.5 Administrativni dio aplikacije 4.4 Prognoze U ovom dijelu aplikacije korisnik moe unositi ili brisati pojedine prognoze. Prvo se korisniku nudi da izabere konkretnu prognozu koju eli ureivati. 4.4.1 Ureivanje Slika 4.6 prikazuje izgled zaslona za odabir konkretne prognoze.
Slika 4.6 Odabir datuma prognoze Tri su osnovne mogunosti: 1. Korisnik moe iz padajueg izbornika izabrati neki od datuma za koji je prognoza ve upisana pa je zatim ureivati, 2. Korisnik moe klikom na tipku "Trenutni" odabrati dananji datum, a moe i runo upisati datum u odgovarajue kuice za unos. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 49
3. U sluaju da korisnik upie datum za koji ve postoji prognoza automatski se otvara ve unesena koju je onda mogue dalje ureivati. Prognoze su podijeljene po dva kriterija, prvi je po razdoblju dana, a to su jutro, popodne i no, a drugi kriterij je klimatoloka cjelina. Nakon to se odabere datum prognoze klikom na jednu od tri tipke se ulazi u ureivanje pojedinog dijela dana. Slika 4.7 prikazuje zaslon za ureivanje prognoza. U samom naslovu tablice je naveden datum i doba dana za koje se prognoza ureuje. Prognoza je u ovom dijelu podijeljena na osam klimatolokih cjelina Hrvatske. Za prognoze ova podjela je loginija nego podjela na etiri regije ili po upanijama. Razlog tome je to pojedine upanije nemaju iste klimatoloke prilike u svim svojim dijelovima. Osam podruja je navedeno prema najveim gradovima unutar njih.
Slika 4.7 Ureivanje prognoza U ovom dijelu programa mogue je upisivati podatke bitne za prognozu. Najvee polje je tekst prognoze koji prate numerike i opisne vrijednosti. One su redom: minimalna oekivana temperatura, maksimalna oekivana temperatura, jaina vjetra, smjer vjetra, tip oborina, koliina oborina. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 50
Svi podaci osim opisa su proizvoljni, mogu se upisati, ali i ne moraju. Ako se ne upie tekst prognoze ostali podaci e biti vidljivi na ovom zaslonu, ali servis nee slati korisniku te podatke za konkretnu klimatoloku cjelinu, doba dana i datum. Na zaslonu su vidljive i dvije naizgled iste opcije, premda su u praksi znatno razliite. One su "Resetiraj" i "Oisti". Funkcija tipke "Resetiraj" je da podatke u tablici vrati na zadnje spremljeno stanje, dok tipka "Oisti" sve podatke iz tablice brie. Ako se nakon toga pritisne tipka "sauvaj" rezultat e biti isti kao da su podaci obrisani. Tipka "sauvaj" sprema u bazu trenutni izgled tablice. 4.4.2 Brisanje Za odreeni datum i razdoblje dana mogue je i obrisati unesene podatke o prognozi. Na slici 4.8 vidljiv je zaslon za brisanje prognoza. Padajua lista nudi sve datume za koje postoje upisane prognoze i onda je mogue klikom na odgovarajuu tipku odabrati brisanje jednog razdoblja dana ili sva tri.
Slika 4.8 Brisanje prognoza 4.5 Upozorenja Slino kao i prognoze mogue je ureivati i brisati i upozorenja. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 51
4.5.1 Ureivanje Na slici 4.9 je vidljiv izgled zaslona za izbor ureivanja upozorenja. Dosta je slian onome za ureivanje prognoza, s razlikom da je ovdje samo jedna opcija ureenja budui da upozorenja vae za cijeli dan, a ne samo dio dana kao prognoze. Ostali izbori su isti, mogue je odabrati ve postojei datum, unijeti novi ili trenutni.
Slika 4.9 Izbor datuma upozorenja Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 52
Na slici 4.10 prikazan je zaslon za ureivanje upozorenja. Za razliku od prognoza upozorenja su rasporeena po upanijama. Tu je 20 upanija i grad Zagreb. U naslovu tablice je navedeno za koji se datum ureuju upozorenja.
Slika 4.10 Ureivanje upozorenja Za svaku upaniju mogue je iz padajueg izbornika izabrati jednu od pet boja koje predstavljaju stupanj opasnosti. Bijela boja znai da nema podataka, zelena da nema opasnosti, a stupanj opasnosti raste od ute preko naranaste do crvene. Odmah pored izbora boje su kuice za unos teksta koji poblie objanjava zato je upozorenje izdano. Ovdje i jedno i drugo polje mogu, ali i ne moraju biti popunjeno, primjerice mogue je da opasnost postoji samo na krajnjem jugu pa e se onda za najjuniju upaniju unijeti podaci, a ostale e ostati prazne. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 53
4.5.2 Brisanje Kao i prognoze, upozorenja je takoer mogue brisati. Na slici 4.11 je vidljivo kako izgleda okvir za brisanje upozorenja, izgledom je isto kao okvir za brisanje prognoza.
Slika 4.11 Brisanje upozorenja 4.6 Postaje Za meteoroloke postaje je takoer mogue ureivati podatke 4.6.1 Podaci o postaji Na slici 4.12 se vidi kako izgledaju podaci o postaji. U naslovu tablice naveden je trenutno prijavljeni korisnik, a ispod toga ime njegove postaje. To ime se moe mijenjati i ono e se prikazivati u pregledima podataka po postajama. Drugi podatak koji se moe ureivati je lozinka za postaju. Taj podatak postaja mora poslati skupa s podacima kako bi se identificirala i kako bi joj se dozvolio unos podataka u bazu. Klikom na "random" ova lozinka e se generirati sluajnim odabirom slova i brojeva jamei tako veliku razinu jedinstvenosti.
Slika 4.12 Podaci o postaji Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 54
4.6.2 Brisanje Budui da postaje imaju mogunost slanja podataka prema posluitelju nekad se javlja potreba da se dio podataka i obrie, recimo ako je ustanovljeno da je postaja neko vrijeme bila u kvaru pa su podaci neispravni ili ako je neka postaja izala iz sustava pa ju je potrebno ukloniti iz pregleda. Na slici 4.13 je prikazan okvir za brisanje podataka koje postaje alju. Tri su mogua kriterija, moe se brisati odabirom datuma, odabirom postaje ili odabirom oba podatka.
Slika 4.13 Brisanje podataka postaje Ovim pregledom opisane su sve funkcije koje ima prijavljeni korisnik. Budui da neprijavljeni korisnik ima funkcije kao i korisnik servisa te funkcije e biti opisane kroz opis rada servisa. Sve dosad navedeno kroz opis korisnikog suelja vrijedi za unos, brisanje i ureivanje podataka. To su funkcije dostupne samo prijavljenim korisnicima. to se tie pregleda podataka on je omoguen i neprijavljenim korisnicima putem mrenog servisa koji u XML obliku servira podatke zainteresiranim korisnicima. Pritom korisnik mora znati kako postaviti zahtjev posluitelju, a isto tako mora znati kako protumaiti primljene podatke. 4.7 Pregledi (klijentski dio) Budui da aplikacija daje servis na koritenje vanjskim programima za demonstraciju rada servisa izraeno je nekoliko primjera pregleda podataka. To su pregled upozorenja, prognoza i podataka s postaja.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 55
Na slici 4.14 su prikazane opcije koje se klijentu nude, klikom na odgovarajuu poveznicu otvara se neki od pregleda.
Slika 4.14 Izbor pregleda na strani klijenta Klikom na pregled upozorenja se otvara zaslon kao na slici 4.15, gdje su preko Flash objekta predstavljene razine opasnosti po upanijama.
Slika 4.15 Pregled upozorenja Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 56
upanije su obojane odgovarajuim bojama da vizualno istaknu stupanj opasnosti, a prelaskom pokazivaa mia preko odreene upanije se u okviru s informacijama pojavljuje detaljniji opis opasnosti. Korisnik takoer preko padajuih izbornika moe odabrati datum za koji eli pregledati upozorenja. Na slici 4.16 je prikazan primjer kako klijent za pregled prognoza moe izgledati, korisniku se prvo nudi lista raspoloivih datuma, kad odabere odreeni datum za njega se otvara lista prognoza. Ako za neko podruje ili doba dana nije upisana prognoza ona se nee pojaviti u pregledu. Ovo je ostavljeno na izbor programeru klijentskog dijela, isto tako je moglo biti napravljeno da za podruja i doba dana za koja nema podataka pie npr. "nema podataka".
Slika 4.16 Pregled prognoza Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 57
Na slici 4.17 je primjer klijenta koji prikazuje podatke o postajama. U ovom sluaju su postaje grupirane prema imenu, a podaci pojedine postaje su jo sloeni po datumu, poevi od najsvjeijeg podatka.
Slika 4.17 Pregled podataka za postaje Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 58
5 Klijentski dio Primarna svrha opisane aplikacije je pruanje mrenih servisa vanjskim korisnicima na koritenje. No u svrhu demonstracije rada servisa napravljeno je i nekoliko klijentskih modula koji pomau u prikazu rada aplikacije. Pritom je iskoriteno vie naina prikaza, jedan od njih je prikaz putem HTML stranice, a drugi je grafiki prikaz kroz Flash objekt. 5.1 Rukovanje XML formatom u aplikaciji Klijentski dio aplikacije prima XML datoteku i prezentira podatke iz nje na vizualno jednostavan nain. Za parsiranje XML datoteke iskoritena je biblioteka, odnosno klasa simpleXML. Njeno koritenje je relativno jednostavno, a prilikom instalacije PHP interpretera se automatski instalira pa je logian izbor. To nije jedina klasa za rukovanje XML datotekama, no s obzirom da ima sve potrebno nema potrebe za koritenje drugih, esto komercijalnih rjeenja. Uitavanje XML datoteke putem simpleXML klase se moe izvesti na dva naina, jedan je da se prvo dohvate XML podaci i spreme u varijablu pa se zatim pretvore u XML element, a drugi nain je da se direktno otvori URL ili datoteka s podacima. Primjer 1 : $moji_podaci=simplexml_load_file('podaci.xml'); ... // rad s XML podacima Primjer 2 : $moji_podaci=SimpleXMLElement('http://www.posluitelj.com/datoteka.xml',n ull,true); Primjer 3 : $datoteka=file_get_contents('podaci.xml'); $moji_podaci = SimpleXMLElement($datoteka); Ispis 5.1 Primjeri koritenja simpleXML klase Ispis 5.1 prikazuje tri razliite mogunosti primjene simpleXML klase. U opisanoj aplikaciji se koristi metoda iz primjera 2, koja podatke dohvaa direktno iz URLa u Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 59
varijablu i dalje rukuje njima putem funkcija koje SimpleXML biblioteka nudi. Kao prvi parametar se navodi URL koji sadrava XML datoteku, drugi parametar su opcije, a trei je true ako se alje ime datoteke, a false ako se alju konkretni XML podaci, odnosno varijabla koja ih sadri. 5.1.1.1 Detaljni opis simpleXML klase SimpleXMLElement SimpleXMLElement klasa SimpleXMLElement::addAttribute dodaje atribut SimpleXML elementu SimpleXMLElement::addChild dodaje pod-granu XML grani SimpleXMLElement::asXML Vraa ispravno formirani XML string SimpleXMLElement::attributes Prikazuje atribute elementa SimpleXMLElement::children Nalazi pod-grane SimpleXMLElement::__construct Kreira novi SimpleXMLElement objekt SimpleXMLElement::count Prikazuje broj pod-grana SimpleXMLElement::getDocNamespaces Vraa namespace-ove definirane unutar dokumenta SimpleXMLElement::getName Daje ime XML elementa SimpleXMLElement::getNamespaces Vraa namespaceove SimpleXMLElement::registerXPathNamespace Kreira kontekst za XPath zahtjev SimpleXMLElement::saveXML Isto to i asXML metoda SimpleXMLElement::xpath Pokree XPath zahtjev
SimpleXML funkcije simplexml_import_dom Daje SimpleXMLElement objekt iz DOM vora simplexml_load_file Uitava XML datoteku u objekt simplexml_load_string Uitava XML string u objekt
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 60
Primjer stvorenog XML dokumenta iz aplikacije prikazan je ispisom 5.2, a programski kod koji stvara XML dokument ispisom 5.3 <podaci> <podatak> <temperatura>5</temperatura> <vjetar>10</vjetar> ... </podatak> <podatak> <temperatura>8</temperatura> <vjetar>9</vjetar> ... </podatak> ... </podaci> Ispis 5.2 XML datoteka koju alje servis $bazniUrl="http://www.dubrovnikmedia.com/dip/"; $zahtjev=$bazniUrl.'xml_pos_podaci.php'; $slogovi = new SimpleXMLElement($zahtjev, null, true);
echo "<table><tr>"; foreach ($slogovi as $slog) { echo "<td>".$slog->temperatura."</td>\n"; echo "<td>".$slog->vjetar."</td>\n"; ... } echo "</tr></table>"; Ispis 5.3 Preuzimanje datoteke i ispis podataka U ispisu 5.3 se datoteka uitava putem URLa kao SimpleXML element, i zatim se za svaki njen podatak pristupanjem preko imena vora dohvaa njegova vrijednost koja se ispisuje u obliku tablice.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 61
Foreach je primijenjen jer dohvaa sve vorove, ali mogue je pristupiti i svakom posebno. Takav nain pristupa prikazan je ispisom 5.4. echo " Temper at ur a za dr ugi sl og j e : " . $sl ogovi - >sl og[ 1] - >t emper at ur a; Ispis 5.4 Pristup pojedinom elementu stabla Kad bi taj vor imao atribut njemu bi se isto moglo direktno pristupiti. Primjer pristupa atributu prikazan je ispisom 5.5 echo " At r i but za dr ugi sl og j e : " . $sl ogovi - >sl og[ 1] [ ' at r i but ' ] ; Ispis 5.5 Pristup odreenom atributu 5.2 Primjer klijenta - pregled prognoza Pregled prognoza predstavlja modul koji se vrti na klijentskoj strani, preuzima podatke iskljuivo putem XML datoteke preko SimpleXML klase i prezentira ih kroz HTML stranicu. Ispis 5.6 prikazuje dio koda koji preuzima XML datoteku s posluitelja, i zatim ju pretrauje kako bi se vidjelo koji su podaci dostupni. Preslikavanje je napravljeno u dvodimenzionalno polje, jednu dimenziju predstavlja podruje, a drugu doba dana. Tako je na kraju rezultat matrica koja sadri plusove za odgovarajue doba dana i podruje ukoliko postoje podaci za njega. Ukoliko ne postoje, matrica na tom polju ima vrijednost praznog niza. $zahtjev=$bazniUrl.'xml_pro_podaci.php?datum='.$izabrani; $records = new SimpleXMLElement($zahtjev, null, true);
for ($j=1;$j<9;$j++) for ($i=1;$i<4;$i++) if (isset($records->$doba_var[$i]->$grad_var[$j]->tekst)) { $gradIma[$j][$i]="+"; $sveIma="+"; }
Ispis 5.6 Detalj klijenta za pregled prognoza Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 62
Zatim se ovisno o tome koje vrijednosti postoje formira tablica koja sadri proitane podatke. Na ispisu 5.7 vidljiv je nain prezentacije podataka. Dvije ugnijeene petlje (jedna za podruje, jedna za doba dana) pregledavaju prethodno formirano polje koje ima indikatore postojanja podataka za pojedino doba dana i podruje i onda ovisno o tome postoje li podaci ispisuje konkretne podatke iz XML datoteke. XML datoteku od trenutka uitavanja predstavlja varijabla $records koja sadri unutar sebe sve podatke koje je XML datoteka vratila. Na isti nain radi i pregled postaja. for ($j=1;$j<9;$j++) { if ($gradIma[$j][1].$gradIma[$j][2].$gradIma[$j][2]!="") { echo "<tr><td align='center' bgcolor='#CCCCCC'><b>Podaci za podruje : ".$grad_ime[$j]."</b></td></tr>"; echo "<tr><td>"; for ($i=1;$i<4;$i++) { if (isset($records->$doba_var[$i]->$grad_var[$j]->tekst)) { echo "<b>".$doba_ime[$i]." : </b>"; echo "".$records->$doba_var[$i]->$grad_var[$j]->tekst.", "; if ($records->$doba_var[$i]->$grad_var[$j]->tmin=="") echo "Nema podataka o temperaturi,"; else echo "temperatura e biti od : ".$records->$doba_var[$i]- >$grad_var[$j]->tmin." do ".$records->$doba_var[$i]->$grad_var[$j]- >tmax." stupnjeva celzijevih,"; if ($records->$doba_var[$i]->$grad_var[$j]->vbrz=="") echo " a vjetra nee biti. "; else echo " a brzina vjetra : ".$records->$doba_var[$i]- >$grad_var[$j]->vbrz." metara u sekundi, smjer ".$records->$doba_var[$i]- >$grad_var[$j]->vsmj.". "; if ($records->$doba_var[$i]->$grad_var[$j]->obtip=="") echo "Oborine se ne oekuju.<br>"; Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 63
else echo "Oekivani tip oborina : ".$records->$doba_var[$i]- >$grad_var[$j]->obtip.", u koliinama ".$records->$doba_var[$i]- >$grad_var[$j]->obkol." l/m2<br>"; } } } echo "</td></tr>"; } Ispis 5.7 Detalj modula za prikaz prognoza 5.3 Primjer klijenta - pregled upozorenja Za razliku od pregleda postaja i prognoza koji se prezentiraju kroz HTML stranicu, pregled upozorenja je izraen koritenjem Adobe Flash aplikacije. Grafiki elementi su napravljeni kroz grafiko suelje, a programski kod je napisan kao ActionScript, a to je programski jezik ugraen u Adobe Flash. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 64
Na slici 5.1 prikazano je koriteno razvojno okruenje za razvoj Adobe Flash aplikacija.
Slika 5.1 Adobe Flash razvojno okruje 5.3.1 Prikazivanje opisa Svaka upanija je izraena kao zaseban objekt i dodane su mu akcije koje se automatski izvravaju nakon to pokaziva mia doe iznad njega, odnosno kad izae s njega. To je napravljeno putem ActionScripta. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 65
Na ispisu 5.8 vidljiv je programski kod koji prilikom prelaska mia u okviru za prikaz podataka (boxxy) prikazuje odgovarajui lan polja opisi u kojeg su prilikom uitavanja XML datoteke preneseni opisi upozorenja za pojedinu upaniju. Isto tako se i tekst polju naslovLabel pridruuje vrijednost iz polja zupanijeAr koje sadri ve uitana imena svih upanija. Kad pokaziva mia izae van polja poziva se kod u on(rollOut) bloku i tekst i naslov postavlja na prazan niz. on ( rollOver) { _root.boxxy.text=_root.opisi[12]; _root.naslovLabel.text=_root.zupanijeAr[12]; }
on ( rollOut) { _root.boxxy.text=""; _root.naslovLabel.text=""; } Ispis 5.8 Rukovanje rollover dogaajima 5.3.2 Rukovanje XML datotekama Flash objekt preuzima od mrenog servisa podatke u XML formatu i zatim ih je potrebno parsirati kako bi se mogli pretvoriti u pregledne podatke. Prvo je potrebno definirati da e se koristiti XML datoteka to je prikazano na ispisu 5.9.. var theXMLg:XML = new XML(); theXMLs.ignoreWhite = true; ispis xx - deklaracija varijable Ispis 5.9 Definicija koritenje XML podataka Pri uitavanju XMLa se poziva metoda onLoad, pa je potrebno u nju ubaciti radnje koje se izvravaju kod uitavanja. Na ispisu 5.10 je vidljiv nain uitavanja XML datoteke, u konkretnom sluaju datoteke koja sa servisa preuzima listu raspoloivih godina. Varijabli nodes se pridruuje XML datoteka. Zatim se obave pripremne radnje za vizualne dijelove Flash objekta i nakon toga kroz for petlju prolazi cijela XML datoteka iji podaci se prebacuju u theListGod objekt, koji predstavlja padajui izbornik za odabir godina. Nakon toga se selektira prva Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 66
raspoloiva godina i za nju se uitavaju datumi. Funkcija koja uitava datume je slina ovdje navedenoj i takoer e odabrati prvi raspoloivi datum i pozvati funkciju za uitavanje podataka. theXMLg.onLoad = function() { var nodes:Array = this.firstChild.childNodes; var vStu, vZup, vOpi:String; bojajZupaniju("255","sve"); puniOpis("prazno","0"); theListGod.removeAll();
theListGod.addItem("..."); for (i=0; i<nodes.length; i++) { theListGod.addItem(nodes[i].firstChild.nodeValue,i); } theListGod.setSelectedIndex(1); ucitajDatume(theListGod.getSelectedItem().label); } Ispis 5.10 onLoad funkcija Na ispisu 5.11 je vidljivo to se dogaa kod uitavanja podataka o upozorenjima putem XML datoteke koja se dobije od servisa. Iz XML datoteke se izdvaja ime upanije, stupanj opasnosti i opis opasnosti. Zatim se pomou funkcije bojajZupaniju postavlja boja objekta koji predstavlja upaniju, a sukladno uitanom stupnju opasnosti. Funkcija puniOpis u polje s opisima dodaje opis opasnosti za trenutno uitavanu upaniju kako bi kasnije bilo mogue taj opis prikazati prilikom prijelaza kursora preko upanije. theXMLz.onLoad = function() { var nodes:Array = this.firstChild.childNodes; var vStu, vZup, vOpi:String;
bojajZupaniju("255","sve");
for (i=0; i<nodes.length; i++) { vZup = nodes[i].childNodes[0].firstChild.nodeValue; vStu = nodes[i].childNodes[1].firstChild.nodeValue; vOpi = nodes[i].childNodes[2].firstChild.nodeValue; Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 67
bojajZupaniju(vStu,vZup); puniOpis(vZup,vOpi); } }; Ispis 5.11 Uitavanje podataka o upanijama 5.3.2.1 Postavke Ovaj Flash objekt osim preuzimanja podataka putem servisa i za svoje postavke koristi XML datoteku koja je spremljena lokalno. U njoj su navedene lokacije servisa kako bi Flash objekt mogao jednostavno dohvaati podatke, a takoer kako bi se mogli adrese servisa mijenjati bez potrebe za ponovnim prevoenjem samog objekta. Datoteka s postavkama sadri tri varijable, budui da Flash objekt uitava tri razliita podatka sa servisa. Na ispisu 5.12 prikazan je izgled konfiguracijske datoteke za Flash objekt. U realnom sluaju se posluitelj zamjenjuje stvarnom lokacijom posluitelja. <postavke> <godine>http://posluitelj/xml_upo_godine.php?</godine> <datumi>http://posluitelj/xml_upo_datumi.php?</datumi> <podaci>http://posluitelj /xml_upo_podaci.php?</podaci> </postavke> Ispis 5.12 Sadraj datoteke s postavkama Na ispisu 5.13 je vidljiv cijeli proces rukovanja postavkama. Prvo se definira objekt koji e primiti XML podatke, zatim se definira to e se dogoditi prilikom uitavanja, a to je preslikavanje podataka u tri varijable, i na kraju se pri inicijalizaciji programa poziva uitavanje postavki. Nakon to program ima ove tri varijable moe preko njih uitati XML podatke od servisa. //kreiranje XML objekta var theXMLs:XML = new XML(); theXMLs.ignoreWhite = true; //definiranje onLoad funkcije theXMLs.onLoad = function() { Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 68
var nodes:Array = this.firstChild.childNodes;
for (i=0; i<nodes.length; i++) { if (nodes[i].nodeName=="godine") urlGodine=nodes[i].firstChild.nodeValue; if (nodes[i].nodeName=="datumi") urlDatumi=nodes[i].firstChild.nodeValue; if (nodes[i].nodeName=="podaci") urlPodaci=nodes[i].firstChild.nodeValue; } } //poziv uitavanja podataka theXMLs.load("./postavke.xml"); Ispis 5.13 Rukovanje postavkama Na ispisu 5.14 je vidljivo kako se varijabla uitana iz postavki (urlGodine) koristi kako bi se pozvala adresa servisa i preuzeli podaci u varijablu theXMLg i kasnije obradili putem theXMLg.onLoad funkcije. Kako bi se izbjeglo cachiranje podataka servisu se uvijek alje razliiti upit tako to se kao jedan od parametara pridruuje trenutno vrijeme. Servis e taj podatak ignorirati, ali e efikasno sprijeiti cachiranje i uitavanje podataka koji su ve bili uitani, ali su se u meuvremenu promijenili. function ucitajGodine() { dontCache = getTimer(); theXMLg.load(urlGodine+"nema_cache="+dontCache); } Ispis 5.14 Uitavanje podataka sa servisa 5.4 Primjer klijenta - slanje podataka s postaje Osim servisa za slanje podataka klijentu aplikacija sadri i servis namijenjen primanju podataka. Za demonstraciju njegovog rada napravljena je Windows aplikacija koja simulira rad postaje. U realnom sluaju bi se koristio program koji od stvarne postaje oitava podatke putem serijskog porta, transformira ih u oblik pogodan za slanje na servis i zatim alje. S obzirom da bi takva aplikacija bila prekomplicirana za izradu samo radi demonstracije rada servisa, umjesto toga je napravljena jednostavnija aplikacija koja Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 69
podatke generira umjesto da ih oitava s postaje. Takvi generirani podaci se transformiraju i alju prema servisu. Klijent je u ovom sluaju izraen u Borland Delphi [11] razvojnom alatu za Windows operacijski sustav. Na slici 5.2 je vidljiv jednostavan klijent napravljen za demonstraciju rada mrenog servisa koji prima podatke. Klijentu se predaje osnovni URL na kojem se nalazi servis, a klijent formira ostatak URLa i poziva ga, ime servis prima podatke. Osim podataka s postaje potrebno je poslati i lozinku kako bi se podaci prihvatili. Lozinka se konfigurira na posluiteljskom dijelu aplikacije.
Slika 5.2 Izgled Windows klijenta Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 70
Slika 5.3 prikazuje kako e na posluitelju izgledati pregled nakon to je klijent poslao podatke prikazane na slici 5.2.
Slika 5.3 Poslani podaci 5.4.1 Programski kod za slanje podataka Kao to je spomenuto klijent je dosta jednostavan, koristi jednu funkciju koja alje GET zahtjev prema posluitelju i drugu koja generira podatke i poziva prvu funkciju. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 71
Kao to je vidljivo na ispisu 5.15 timer periodino poziva funkciju koja generira sluajne podatke, pakira ih u format URLa koji servis prepoznaje i zatim alje GET zahtjev prema servisu koji taj zahtjev preuzima, vadi podatke iz njega preko $_GET polja i sprema ih u bazu. procedure TGlavnaForm.GlavniTimerTimer(Sender: TObject); var temp,vjeb,vlaga,kisa:longint; vjes,izlaz,rez,hash:string; const smjer:array[0..7] of string = ('N','E','W','S','NE','NW','SE','SW'); begin temp:=random(80)-40; vjeb:=random(30); vlaga:=random(20); kisa:=random(10); vjes:=smjer[random(8)]; hash:=HashEdit.Text;
GlavniRichEdit.lines.add(izlaz); rez:=GetUrlContent(izlaz); //poziv funkcije koja otvara URL if (rez='OK') then GlavniRichEdit.lines.add('Slanje uspjeno') else GlavniRichEdit.lines.add('Slanje neuspjeno, povratna vrijednost : '+rez); end; Ispis 5.15 Funkcija za slanje podataka
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 72
6 Zakljuak Razvojem PHPa i ostalih alata koji se izvravaju na strani posluitelja stvoreno je dosta mogunosti za laki i jednostavniji razvoj mrenih servisa. Takoer jednostavna razmjena podataka putem XMLa je dodatno olakala cijeli proces izrade i koritenja kako posluitelja tako i klijenta. Opisana aplikacija demonstrira kako na relativno jednostavan nain izraditi mreni servis koji koristi REST arhitekturu za komunikaciju klijenta i posluitelja. Na taj nain je aplikacija uinjena fleksibilnom i lako proirivom, a kao to je demonstrirano jednostavno je izraditi klijente u raznim tehnologijama, ne samo PHPu. Prilikom izrade aplikacije steeno je vrijedno teorijsko iskustvo s podruja RESTful mrenih servisa, kao i praktino iskustvo s podruja programiranja u PHP programskom jeziku. Steeno je i znanje vezano uz samu REST arhitekturu i praktinu implementaciju iste u posluiteljsku aplikaciju kao i u razne tipove klijenata. Prilikom izrade aplikacije nije bilo veih problema, dokumentacija koja opisuje arhitekturu, kao i ona koja opisuje rukovanje XML formatom u PHPu je dosta dobra i lako dostupna. PHP je verzijom 5 olakao rukovanje XMLom u odnosu na prethodnu verziju ugradnjom klase SimpleXML. Jedino podruje gdje je bilo malo tee nai dokumentaciju je izrada Flash klijenta. Aplikacija je izraena kao potpuno funkcionalna i cilj joj je demonstrirati poznavanje rada sa REST arhitekturom i poznavanje naina funkcioniranja mrenih servisa. Dorade su kao i uvijek mogue, a neka od podruja gdje ima mjesta doradama bi se mogla istaknuti bolja sigurnost pri komunikaciji izmeu klijenta i posluitelja, provjera korisnika, eventualno kreiranje korisnikih grupa i razliita razina prava za pojedine korisnike. Trenutna verzija implementira funkcije za dvije vrste korisnika, a to su prijavljeni i neprijavljeni korisnik. Jo jedno od podruja gdje su dorade mogue i poeljne je korisniko suelje. Prilikom izrade aplikacije naglasak je stavljen na funkcionalnost suelja, no sigurno je da ima jo mjesta i estetskim doradama. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 73
7 Literatura [1]. World Wide Web Consortium (W3C), http://www.w3.org/, (14.12.2010) [2]. W3C, WDSL, http://www.w3.org/TR/wsdl, (20.12.2010) [3]. Wikipedia: SOAP, http://en.wikipedia.org/wiki/SOAP, (30.12.2010) [4]. Wikipedia: REST, http://en.wikipedia.org/wiki/Representational_State_Transfer, (30.12.2010) [5]. R. T. Fielding, Architectural Styles and the Design of Network-based Software Architectures, Doctoral Dissertation, University of California, Irvnine, 2000. http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm [6]. Wikipedia: XML, http://en.wikipedia.org/wiki/XML, (30.12.2010) [7]. Wikipedia: SGML, http://en.wikipedia.org/wiki/Standard_Generalized_Markup_Language, (30.12.2010) [8]. Pljusak.com, http://pljusak.com/, (30.12.2010) [9]. Crometeo.net, http://www.crometeo.net/site/index.php, (30.12.2010) [10]. Dubrovaki Vjesnik, http://dubrovacki.hr/, (30.12.2010) [11]. Borland Delphi, http://www.borland.com/, (30.12.2010)
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 74
8 Prilozi 8.1 Popis slika Slika 3.1Tablice unutar baze podataka .................................................................................. 9 Slika 3.2 Logika struktura posluiteljskog dijela aplikacije .............................................. 11 Slika 3.3 Obrada upozorenja ............................................................................................... 21 Slika 3.4 Logika struktura dijela aplikacije za obradu prognoza ....................................... 29 Slika 3.5 Logika struktura dijela aplikacije za evidenciju meteorolokih postaja ............. 32 Slika 3.6 Logika struktura dijela aplikacije koji nudi funkcionalnost web servisa ........... 35 Slika 4.1 Poetna stranica .................................................................................................... 46 Slika 4.2 Prijava novog korisnika ........................................................................................ 46 Slika 4.3 Pokuaj prijave neaktivnog korisnika................................................................... 47 Slika 4.4 Korisniki izbornik ............................................................................................... 47 Slika 4.5 Administrativni dio aplikacije .............................................................................. 48 Slika 4.6 Odabir datuma prognoze ...................................................................................... 48 Slika 4.7 Ureivanje prognoza ............................................................................................ 49 Slika 4.8 Brisanje prognoza ................................................................................................. 50 Slika 4.9 Izbor datuma upozorenja ...................................................................................... 51 Slika 4.10 Ureivanje upozorenja ....................................................................................... 52 Slika 4.11 Brisanje upozorenja ............................................................................................ 53 Slika 4.12 Podaci o postaji .................................................................................................. 53 Slika 4.13 Brisanje podataka postaje ................................................................................... 54 Slika 4.14 Izbor pregleda na strani klijenta ......................................................................... 55 Slika 4.15 Pregled upozorenja ............................................................................................. 55 Slika 4.16 Pregled prognoza ................................................................................................ 56 Slika 4.17 Pregled podataka za postaje ............................................................................... 57 Slika 5.1 Adobe Flash razvojno okruje .............................................................................. 64 Slika 5.2 Izgled Windows klijenta ....................................................................................... 69 Slika 5.3 Poslani podaci ...................................................................................................... 70 Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 75
8.2 Popis ispisa Ispis 3.1 Osnova modula unos_korisnika.php ..................................................................... 13 Ispis 3.2 Modul sistem_odobri.php ..................................................................................... 14 Ispis 3.3 Detalj modula sistem_prijava.php ........................................................................ 15 Ispis 3.4 Prijava korisnika ................................................................................................... 16 Ispis 3.5 Detalji pojedinih elemenata forme ........................................................................ 17 Ispis 3.6 Modul sistem_spojen.php ..................................................................................... 18 Ispis 3.7 Modul sistem_odjava.php ..................................................................................... 19 Ispis 3.8 Datoteka sistem_config.php .................................................................................. 20 Ispis 3.9 Sadraj modula sistem_spajanje.php .................................................................... 20 Ispis 3.10 Dio modula unos_upozorenja.php ..................................................................... 22 Ispis 3.11 Primjer JavaScript funkcije ................................................................................ 22 Ispis 3.12 Detalj modula unos_upozorenja.php .................................................................. 23 Ispis 3.13 Punjenje polja s podacima .................................................................................. 24 Ispis 3.14 Detalj modula forma_upozorenja.php................................................................. 25 Ispis 3.15 Sakupljanje podataka iz forme ............................................................................ 26 Ispis 3.16 Funkcija za upis podataka ................................................................................... 27 Ispis 3.17 Detalj modula brisanje_upozorenja.php ............................................................. 28 Ispis 3.18 Brisanje prognoza ............................................................................................... 28 Ispis 3.19 Detalj modula unos_prognoza.php ..................................................................... 30 Ispis 3.20 Detalj modula forma_prognoze.php ................................................................... 31 Ispis 3.21 Detalj modula brisi_prognoze.php ...................................................................... 32 Ispis 3.22 JavaScript funkcija za generiranje lozinke.......................................................... 34 Ispis 3.23 PHP funkcija za ograivanje sadraja tagovima ................................................. 35 Ispis 3.24 XML datoteka za prognoze ................................................................................. 36 Ispis 3.25 XML datoteka s podacima o prognozama .......................................................... 37 Ispis 3.26 Servis koji vraa podatke o godinama za upozorenja ......................................... 38 Ispis 3.27 Modul xml_upo_datumi.php ............................................................................... 39 Ispis 3.28 Modul xml_upo_podaci.php ............................................................................... 40 Ispis 3.29 Modul rest_slanje.php ......................................................................................... 43 Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 76
Ispis 5.1 Primjeri koritenja simpleXML klase ................................................................... 58 Ispis 5.2 XML datoteka koju alje servis ............................................................................ 60 Ispis 5.3 Preuzimanje datoteke i ispis podataka .................................................................. 60 Ispis 5.4 Pristup pojedinom elementu stabla ....................................................................... 61 Ispis 5.5 Pristup odreenom atributu ................................................................................... 61 Ispis 5.6 Detalj klijenta za pregled prognoza ...................................................................... 61 Ispis 5.7 Detalj modula za prikaz prognoza ........................................................................ 63 Ispis 5.8 Rukovanje rollover dogaajima ............................................................................ 65 Ispis 5.9 Definicija koritenje XML podataka..................................................................... 65 Ispis 5.10 onLoad funkcija .................................................................................................. 66 Ispis 5.11 Uitavanje podataka o upanijama ..................................................................... 67 Ispis 5.12 Sadraj datoteke s postavkama ........................................................................... 67 Ispis 5.13 Rukovanje postavkama ....................................................................................... 68 Ispis 5.14 Uitavanje podataka sa servisa ........................................................................... 68 Ispis 5.15 Funkcija za slanje podataka ................................................................................ 71
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 77
9 Saetak U ovom diplomskom radu opisana je aplikacija koja koristi mrene servise za razmjenu meteorolokih podataka. Koritenje podataka je slobodno svim zainteresiranim korisnicima dok je administrativni dio aplikacije rezerviran za korisnike koji su prijavljeni u sustav i kojima je odobren rad s podacima od strane administratora. Posluiteljski dio aplikacije koji prua mrene servise je napisan u PHP programskom jeziku uz koritenje mySQL baze za pohranu podataka. Klijentski dio aplikacije je izraen dijelom u HTMLu i PHP programskom jeziku, bez koritenja baze podataka, a dio je napravljen koritenjem Adobe Flash tehnologije. Opisan je nain rada servisa i tehnologija koje se koriste pri njihovom koritenju te nain koritenja aplikacije uz popratne slike. Opisan je i nain razmjene podatka izmeu klijenta i posluitelja s detaljima programskog koda. Demonstriran je proces prijave, unosa, pregleda i brisanja podataka. Takoer je opisan proces registracije korisnika i odobravanja istog od strane administratora. Opisani su i demonstrirani primjeri klijentskih aplikacija koje koriste navedene mrene servise. Na kraju rada, u zakljuku su navedena iskustva steena tijekom izrade aplikacije kao i mogunosti proirenja iste.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 78
10 Kljune rijei Mreni servisi, XML, mySQL, Adobe Flash, REST. Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 79
11 Summary This document describes web application that uses web services for weather data exchange. Web service is open to all users willing to use it, while administration part is reserved only for registered and approved users. Server based part of application is written in HTML and PHP programming language using mySQL database for storage. Client part of application is built using HTML and PHP without database, and one of client applications is built using Adobe Flash. The document describes how web service works and which technologies are used in its development. Also, document contains description and images of how to use application. Data exchange between server and client is also described. The document demonstrates user's login to system and usage of data. Description contains examples of client programs that consume described web service. At the end of the document there is description of experiences gained in application design along with possibilities of application upgrades.
Sveuilite u Dubrovniku Koritenje mrenih servisa za razmjenu meteorolokih podataka
Zlatko Bara 80
12 Keywords Web services, XML, mySQL, Adobe Flash, REST.