zlatko barac diplomski zavrsna · internet. cilj ovog rada je napraviti aplikaciju u php...
TRANSCRIPT
SVEUČILIŠTE U DUBROVNIKU
ODJEL ZA ELEKTROTEHNIKU I RAČUNARSTVO STUDIJ POSLOVNO RAČUNARSTVO
Zlatko Barać
DIPLOMSKI RAD
KORIŠTENJE MREŽNIH SERVISA ZA RAZMJENU METEOROLOŠKIH PODATAKA
Dubrovnik, prosinac 2010.
SVEUČILIŠTE U DUBROVNIKU
ODJEL ZA ELEKTROTEHNIKU I RAČUNARSTVO STUDIJ POSLOVNO RAČUNARSTVO
DIPLOMSKI RAD
KORIŠTENJE MREŽNIH SERVISA ZA RAZMJENU METEOROLOŠKIH PODATAKA
Mentor: Diplomant: Dr.sc. Mario Miličević Zlatko Barać Komentor: Mr. sc. Krunoslav Žubrinić
Dubrovnik, prosinac 2010.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać I
Sadržaj
1 Uvod ............................................................................................................................. 1
2 Teorijske postavke ....................................................................................................... 2
2.1 Mrežni servisi.......................................................................................................... 2
2.2 XML ........................................................................................................................ 2
2.3 REST ....................................................................................................................... 3
2.4 Meteorološki podaci ............................................................................................... 6
3 Struktura aplikacije ...................................................................................................... 8
3.1 Baza podataka ......................................................................................................... 8
3.2 Opis aplikacije ...................................................................................................... 10
3.2.1 Poslužiteljski dio aplikacije ........................................................................... 10
3.2.2 Prijava korisnika i dodjeljivanje prava .......................................................... 12
3.2.3 Servisi ............................................................................................................ 34
3.2.4 Način rada servisa .......................................................................................... 38
4 Opis aplikacije za razmjenu meteoroloških podataka ................................................ 45
4.1 Ulazni dio .............................................................................................................. 45
4.2 Korisnički dio ....................................................................................................... 47
4.3 Administracija ....................................................................................................... 47
4.4 Prognoze ............................................................................................................... 48
4.4.1 Uređivanje ..................................................................................................... 48
4.4.2 Brisanje .......................................................................................................... 50
4.5 Upozorenja ............................................................................................................ 50
4.5.1 Uređivanje ..................................................................................................... 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
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 Zaključak .................................................................................................................... 72
7 Literatura .................................................................................................................... 73
8 Prilozi ......................................................................................................................... 74
8.1 Popis slika ............................................................................................................. 74
8.2 Popis ispisa ........................................................................................................... 75
9 Sažetak ....................................................................................................................... 77
10 Ključne riječi .............................................................................................................. 78
11 Summary .................................................................................................................... 79
12 Keywords ................................................................................................................... 80
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 1
1 Uvod Web aplikacija je aplikacija koja se izvodi na mrežnom poslužitelju koji se obično nalazi
na Internetu. Mrežni servis je aplikacija ili njen dio koji se također izvodi na poslužitelju i
pruža određene usluge korisniku. Npr. može se raditi o pružanju servisa za dohvat rezultata
pretrage ili o servisu koji korisniku pruža informacije o aktualnom stanju na cestama.
Primjene su neograničene.
U ovom dokumentu je opisan mrežni servis koji korisniku pruža informacije o vremenu,
konkretnije korisniku se pruža servis koji nudi vremensku prognozu i upozorenja o
nevremenu. Ciljani korisnici ovakvih servisa su ponajviše internetski portali i razne druge
informativne stranice. Njima je omogućen jednostavan pristup pouzdanim vremenskim
prognozama. Također su dostupne informacije o upozorenjima za vremenske neprilike što
može 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 uređaje jer mogu jednostavno implementirati pristup
servisu u aplikaciju koja prikazuje prognozu i potencijalne opasnosti korisnicima te
aplikacije, ponajviše avanturistima i moreplovcima.
Korisniku se također nudi i jedan servis čija je namjena primanje podataka, a on se koristi
za slanje podataka s meteoroloških postaja i njihovu pohranu na poslužitelj. S obzirom na
otvorenost protokola kojim komunicira postaja preko serijskog porta ovaj servis je
zanimljiv programeru koji želi izraditi program koji očitava podatke sa postaje i šalje ih na
internet.
Cilj ovog rada je napraviti aplikaciju u PHP programskom jeziku koja će se izvoditi na
poslužitelju i korisniku pružati navedene usluge.
U drugom poglavlju opisane su teorijske postavke rada: mrežni servisi, detalji XML
formata i REST arhitekture te način pripreme, prikupljanja i korištenja meteoroloških
podataka. U trećem poglavlju opisana je arhitektura poslužiteljskog dijela aplikacije, dok je
u četvrtom poglavlju detaljno analiziran programski kod poslužiteljskog dijela aplikacije
kao i primjena aplikacije. U petom poglavlju su opisani primjeri klijenata koji koriste
realizirani web servis.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 2
2 Teorijske postavke
2.1 Mrežni servisi Mrežni servisi omogućavaju korisniku razmjenu podataka i izvršavanje određenih zahtjeva
na poslužitelju. Korisnik poslužitelju šalje upit, a poslužitelj zatim izvrši potrebne radnje i
vraća korisniku rezultate tog upita. Rezultati su obično formatirani u XML formatu.
Najčešće se za komunikaciju koristi HTTP protokol.
W3C konzorcij [1] definira mrežni servis kao : “Programski sustav dizajniran tako da
podržava međusobnu stroj-stroj interakciju preko mreže“. Mrežni servis može imati sučelje
opisano u formatu koji je moguće strojno obrađivati, konkretno WDSL [2] formatu. Drugi
sustavi komuniciraju s mrežnim servisom putem SOAP [3] poruka, najčešće koristeći
HTTP protokol i XML format datoteka, uz eventualno korištenje i drugih standarda
vezanih uz Internet. Osim komunikacije putem SOAPa moguće je komunicirati i
primjenom REST [4] principa koji je jednostavniji za korištenje. 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 mrežni servisi.
2.2 XML XML [6] je kratica koja označava 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 teško čitljive
ljudima i tekstualnih datoteka kojima manjka opis podataka. Oznake koje se koriste u
XML jeziku su dosta slične 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 našao brojne primjene, tako se koristi za odvajanje podataka od prezentacije (npr.
HTML je prezentacijski jezik), razmjenu podataka (npr. kod mrežnih servisa), spremanje
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 3
podataka (npr. program može svoje postavke čuvati u XML datoteci koja pomalo
zamjenjuje standardnu .ini datoteku), itd.
XML je zamišljen tako da podatke čuva u tekstualnom obliku, ali da ih uokviruje
oznakama koje govore o kakvom se podatku radi. Na taj način je XML jednostavno čitljiv
čovjeku (tekst), a računalo jednostavno nalazi potrebne podatke koristeći oznake (tagove).
Računalo to radi putem programa koji pretražuje datoteku i izdvaja i grupira podatke
ovisno o oznakama koje ih okružuju (parsera).
Zahtjevi koje je W3C postavio pred XML početkom devedesetih godina i koji su
karakteristike XML jezika [6] :
1. XML mora biti izravno primjenjiv preko Interneta.
2. XML mora podržavati š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
slučaju 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. Sažetost kod označavanja dokumenta XML-om je od minimalnog značaja.
2.3 REST REST je kratica od Representational State Transfer i označava način komunikacije između
klijenta i poslužitelja pri korištenju mrežnih resursa pomoću HTTP protokola. Klijent šalje
zahtjev prema poslužitelju, poslužitelj prima zahtjev i u skladu s traženim resursom
formira odgovor i vraća ga klijentu. Resurs može biti bilo što, recimo tekstualni podaci,
slika ili neki jednostavni odgovor u obliku broja. Klijent u bilo kojem trenutku između
zahtjeva može biti u stanju "odmora", odnosno omogućava interakciju s korisnikom, ali pri
tom ne kreira promet prema poslužitelju. Klijent počinje slanje zahtjeva prema poslužitelju
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 4
kad je spreman za prebacivanje u novo stanje. Dok god se jedan ili više zahtjeva izvršava
smatra se da je klijent u stanju prijelaza [5].
REST arhitektura koristi mogućnosti HTTP protokola i pritom omogućava da proxy
poslužitelji i pristupnici (engl. gateway) također procesiraju isti HTTP promet koji prolazi
kroz njih.
REST koristi pristup sličan CRUD pristupu kod SQL jezika u relacijskim bazama
podataka, i za svaku jednostavnu operaciju (dohvat resursa, stvaranje resursa, brisanje
resursa i ažuriranje resursa) koristi po jednu metodu HTTP protokola. Za dohvat resursa se
koristi GET, za brisanje DELETE, a za stvaranje i ažuriranje POST i PUT metode.
Problem kod praktične primjere REST pristupa je što mrežna infrastruktura i programski
jezici još uvijek najčešće dozvoljavaju korištenje samo GET i POST metoda koje su
uobičajene pri korištenju web preglednika za dohvat web stranica. Korištenje drugih
metoda (PUT i DELETE) se najčešće 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 korištenju 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 korištenjem POST metode.
REST ima neka temeljna ograničenja, odnosno naputke po kojima treba dizajnirati
aplikacije koje koriste REST arhitekturu, dok su detalji dizajna ostavljeni programeru. Ta
ograničenja su :
• Klijentsko-poslužiteljski odnos: Klijent i poslužitelj su odvojeni određenim
sučeljem. To znači da npr. klijenta ne zanima način skladištenja podataka na
poslužitelju nego je pristup njima uniformiran, tako da je portabilnost koda klijenta
povećana. Poslužitelj s druge strane ne zanima korisnikovo sučelje ili stanje
pojedinog korisnika tako da poslužitelj može biti jednostavan i skalabilan.
Poslužitelji se također mogu mijenjati i programirati po želji dok god je sučelje
kojem klijent pristupa isto. Tako je moguće npr. u potpunosti promijeniti poslužitelj
iz PHP baziranog u ASP bazirani dok god je način pristupa klijenta isti.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 5
• Bez stanja (engl. stateless): Poslužitelj ne sprema kontekst konekcije između
zahtjeva klijenta. Svaki zahtjev od korisnika zahtjeva sve informacije potrebne da
bi poslužitelj razumio zahtjev, tako da poslužitelj ne mora pamtiti podatke između
pojedinih zahtjeva. Tako klijent može pristupati resursu jednostavno preko URLa.
Ovo olakšava nadzor poslužitelja i čini ga pouzdanijim.
• Pohrana podataka (engl. cache) : Klijentu je omogućeno da privremeno sprema
odgovore poslužitelja. Ovo u nekim slučajevima olakšava rad i smanjuje broj
potrebnih zahtjeva prema poslužitelju.
• Slojeviti sustav : S obzirom da klijent ne zna da li je spojen direktno na poslužitelj
ili na neki od njegovih posrednika, ovo može poslužiti za poboljšanje performansi,
npr. putem load balancera koji ujednačuju promet, omogućavaju skalabilnost i
rasterećuju pojedini poslužitelj. Korist može biti i sa strane sigurnosti jer je moguće
implementirati razne vatrozidove (engl. firewall) i ostale kontrolore prometa.
• Code on demand : Ovo je opcionalna mogućnost, poslužitelj može korisniku poslati
podatke koji će mu omogućiti proširenje ili poboljšanje mogućnosti. Dobar primjer
za ovo je korištenje REST pristupa iz okruženja skriptnog jezika JavaScript.
• Uniformirano sučelje : Sučelje između poslužitelja i klijenta mora poštovati
određene 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 poštovane kako bi servis bio REST kompatibilan. Poštovanje
navedenih smjernica omogućava bilo kakvom distribuiranom hipermedijskom
sustavu da ima atribute koji su poželjni : učinkovitost, skalabilnost, jednostavnost,
izmjenjivost, vidljivost, prenosivost i pouzdanost.
Neki od ključnih ciljeva kojima teži primjena REST arhitekture :
• Skalabilnost interakcije komponenti;
• Generalnost sučelja;
• Neovisno plasiranje komponenti;
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 6
• Međukomponente čija namjena je smanjenje latencije, pojačanje sigurnosti i
enkapsulacija postojećih sustava [5].
Prilikom korištenja REST arhitekture kroz HTTP za dohvat podataka najčešće se
primjenjuju GET zahtjevi, dok su druge vrste zahtjeva rezervirane za ažuriranje resursa.
2.4 Meteorološki podaci Meteorologija je znanost o Zemljinoj atmosferi i promjenama u njoj. Spada u skupinu
geofizičkih znanosti i bavi se proučavanjem promjena vremena na Zemlji. Jedna od grana
meteorologije, sinoptička meteorologija analizira podatke o aktualnim i proteklim
vremenskim prilikama na određenom području kako bi ih upotrijebila za prognoziranje
budućih. Proučavaju se razni parametri atmosfere, a najbitniji su temperatura, vjetar, tlak i
oborine.
Podatke o vremenskim prilikama skupljaju meteorološke postaje i zatim ih šalju na
poslužitelje gdje se podaci iz različitih izvora prikupljaju i analiziraju. Za analizu se koriste
fizikalni modeli koji se s vremenom usavršavaju kako bi bili što precizniji. Te modele
obrađuju u pravilu vrlo jaka računala. Bitno je spomenuti da je obrada tih podataka vrlo
zahtjevna i nekad je bila rezervirana za velike institute i organizacije koje mogu uložiti
puno novca u računalne resurse potrebne za obradu podataka. Napretkom računalne
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 više podataka u njih i prepustiti da računalo koristeći model
izračuna kretanja vremenskih prilika. Ovo je primjenjivo na manjim područjima, velike i
detaljne analize se i dalje rade na superračunalima.
U Hrvatskoj već više od sedam godina djeluje udruga Crometeo koja okuplja ljude koje
zanima meteorologija. Radi se o ljudima raznih struka kojima je zajednička poveznica
zanimanje za vremenske prilike i neprilike. Udruga se bavi proučavanjem i prognoziranjem
vremena, dokumentiranjem i fotodokumentiranjem raznih vremenskih pojava (posebno
onih ekstremnih), kao i postavljanjem meteoroloških postaja diljem Hrvatske. Trenutno
postoji preko 70 postaja diljem Hrvatske, a sve zajedno su uključene u projekt koji
objedinjuje sve podatke na stranici http://pljusak.com. [8]
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 7
Osim prikupljanja podatka rade se i analize podataka i davanje prognoza. Udruga ima
svoje serversko računalo koje na jakim Intelovim Xeon procesorima izračunava model za
područje Hrvatske. Prognoze se objavljuju na serveru http://crometeo.hr [9], a također i u
mnogim lokalnim medijima, npr. Dubrovački vjesnik [10] objavljuje prognozu člana
Crometeo udruge.
Podatke s postaja zasad prikuplja softver koji dolazi uz postaju, a koji ima određenih
prednosti i nedostataka. Glavni nedostatak je što meteorološka postaja treba uz sebe imati
vezano računalo da bi se podaci prikupljali. S obzirom na postojanje dokumentiranih
protokola kojim program komunicira sa stanicom ovdje ima dosta mjesta za poboljšanja,
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. Također bi servis mogli koristiti i razni
uređaji koji nisu sami po sebi postaja nego npr. data logger koji podatke sprema određeno
vrijeme i nakon toga ih prosljeđuje na mrežni poslužitelj kako bi bili dostupni za analizu.
Sa današnjim jednostavnim i jeftinim usmjerivačima koje pokreće Linux operacijski
sustav, a koji imaju USB i serijski port moguće je napraviti uređaj koji prati određene
parametre, poput temperature, vlage i vjetra te ih prosljeđuje na poslužitelj. Za sve te
namjene mrežni servis baziran na REST protokolu je puno pogodniji od raznih složenih
klijent-poslužitelj rješenja.
Što se vremenskih prognoza tiče, 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 piše. Oni mogu jednostavno putem mrežnog servisa preuzeti podatke i
preko modula koji sami izrade ukomponirati ih u web stranicu na način koji im odgovara,
bez da im servis nameće pravila prezentacije podataka.
Danas se podaci većinom prezentiraju preko već unaprijed napravljenih vizualnih modula
koji se ugrađuju u stranicu, a koji često nisu baš pogodni jer se ne mogu uklopiti u izgled
stranice, bez obzira na (ograničene) mogućnosti prilagođavanja. Sa mrežnim servisom koji
šalje čiste tekstualne podatke tog problema nema, a vizualna prezentacija je ostavljena na
volju dizajneru stranice.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 8
3 Struktura aplikacije
Poslužiteljski dio aplikacije je u cijelosti izrađen u PHP programskom jeziku. Korišten je
tekst editor s podrškom za osvjetljavanje sintakse, a za testiranje je korišten Wamp
poslužitelj instaliran na lokalnom računalu. Nakon što je aplikacija izrađena prebačena je
na web poslužitelj i dodatno testirana. Nakon toga je klijentski dio prebačen na drugi
poslužitelj radi testiranja funkcionalnosti mrežnog servisa.U ovom poglavlju opisana je
sama struktura aplikacije, s primjerima programskom koda i detaljnijim objašnjenjem
načina rada same aplikacije.
3.1 Baza podataka
Kako bi aplikacija mogla pohranjivati i čitati podatke potrebno je koristiti bazu podataka.
U ovom slučaju izbor je pao na mySQL bazu podataka koja je besplatno dostupna za
korištenje. Dolazi kao dio Wamp poslužitelj paketa koji je korišten 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. Budući da se tablice
koriste za spremanje podataka koji međusobno nisu vezani, tablice su izrađene svaka za
sebe i nisu ni na koji način ovisne jedna o drugoj.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 9
t_korisnik
PK userid
uImeuPrezimeuUseruPassworduOdobrenuPostajauHash
t_prognoza
PK podatakid
datumdobaregijateksttmintmaxvbrzvsmjobtipobkol
t_upozorenja
PK podatakid
upDatumzupanijaopisstupanjautorzadnja_izmjena
Slika 3.1Tablice unutar baze podataka
Polja u korištenim tablicama su slijedeća:
t_korisnik, služi za pohranu podataka o registriranim korisnicima :
• userid - identifikacijski broj korisnika, ova vrijednost se dodjeljuje automatski
• uIme - ime korisnika
• uPrezime - prezime korisnika
• uUser - korisničko ime za prijavu na sustav
• uPassword - korisnička lozinka, sažeta kao md5 string
• uOdobren - status korisnika, može biti 'da' ili 'ne'
• uPostaja - ime korisnikove meteorološke postaje
• uHash - lozinka za korisnikovu meteorološku postaju
t_postaja, služi 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
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 10
• vlaga - relativna vlaga
• kisa - količina oborina
t_prognoza, služi za spremanje podataka o prognozama, podaci su dostupni putem
mrežnog servisa :
• podatakid - autoinkrementalna vrijednost, automatski se dodjeljulje
• datum - datum prognoze
• doba - doba dana prognoze, može biti 'jutro', 'popodne' ili 'noc'
• regija - klimatska regija za koju prognoza vrijedi
• tekst - tekst prognoze
• tmin - minimalna očekivana temperatura
• tmax - maksimalna očekivana temperatura
• vbrz - očekivana brzina vjetra
• vsmj - očekivani smjer vjetra
• obtip - očekivani tip oborina
• obkol - očekivana količina oborina
t_upozorenja, služi za spremanje podataka o upozorenjima, podaci su dostupni putem
mrežnog 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 Poslužiteljski dio aplikacije
Na slici 3.2 prikazana je logička struktura poslužiteljskog dijela aplikacije.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 11
Početna stranica
Unos korisnika
Unos OK
Odobrenje
Odobri
prijav a
Config
Spajanje na bazu
Odjav aGlav ni izbornik
Upozorenja
+ Ažuriranje+ Ažuriranje upozorenja+ Brisanje+ Brisanje upozorenja+ Obrada upozorenja+ Pregled upozorenja+ Unos+ Unos upozorenja+ Upozorenje
Prognoze
+ Brisanje+ Brisanje prognoza+ Izmjena+ Izmjena prognoze+ Obrada prognoza+ Pregled prognoza+ Prognoza+ Unos+ Upis prognoza
Postaje
+ Brisanje+ Brisanje postaje+ Izmjena+ Izmjena postaje+ Obrada postaja+ Postaja+ Pregled postaja+ Upis + Upis postaje
Serv isi
+ Kreiranje XMLa+ Postaje+ Prognoza po datumu+ Prognoze+ Sučelje servisa+ Upozorenja+ Upozorenja po datumu+ Upozorenja po godinama
«redirect»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
Slika 3.2 Logička struktura poslužiteljskog dijela aplikacije
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 12
Aplikacija evidentira tri skupine podataka: podatke o meteorološkim postajama,
prognozama i upozorenjima. U administratorskom dijelu aplikacije korisniku je
omogućeno ažuriranje (unos, izmjena i brisanje) te pregled tih podataka. Da bi mogao
administrirati podatke, korisnik se mora prijaviti u aplikaciju i dobiti odgovarajuće ovlasti.
3.2.2 Prijava korisnika i dodjeljivanje prava
S obzirom da se mogućnosti registriranog i odobrenog korisnika razlikuju od mogućnosti
neregistriranog i/ili neodobrenog korisnika bilo je potrebno ugraditi mehanizam koji će
prepoznavati o kakvom se tipu korisnika radi i prema tome mu omogućiti pristup
određenim 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 proslijeđenih 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('Korisničko ime '.$_POST['username'].' već postoji.');
}
if ($_POST['pass'] != $_POST['pass2']) {
die('Lozinke nisu dobro unesene. ');
}
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 13
$_POST['pass'] = md5($_POST['pass']);
$unos = "INSERT INTO t_korisnik (uUser,uPassword,uIme,uPrezime)
VALUES ('".$_POST['username']."', '".$_POST['pass']."',
'".$_POST['ime']."', '".$_POST['prezime']."')";
$podatak = mysql_query($unos);
header("Location:
poruka_ok.php?tip=registracijaok&sljedeca=glavni_meni.php");
}
Ispis 3.1 Osnova modula unos_korisnika.php
Iz priloženog koda u ispisu 3.1 vidljiva je cijela procedura provjere pojedinih parametara.
Prvo se provjerava jesu li unesena sva tri ključna polja, a to su korisničko ime, lozinka i
ponovljena lozinka. Zatim se s korisničkim imenom ide prema bazi i provjerava se je li taj
korisnik već registriran, ukoliko jest prekida se unos jer ne mogu postojati dva ista
korisnička 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 običnom
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 sadrži sve vrijednosti poslane putem forme.
Nakon što se unos obavi aplikacija se preusmjerava na modul za ispis poruke da je akcija
uspješno obavljena, to je poruka_ok.php, koji kao parametre prihvaća tip obavijesti i
putanju do sljedećeg 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 pomoćnog modula sistem_odobri.php. Prvi modul
sadržava vizualni dio stranice odobrenja, dok drugi odrađuje transakciju prema bazi ovisno
o parametrima koji mu se pošalju.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 14
Modul sistem_odobrenje.php dohvaća 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 odrađuje transakciju
prema bazi i odobrava, odnosno onemogućava 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 proslijeđeni
formira se UPDATE SQL zahtjev prema bazi koji ažurira 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 može prijaviti
u aplikaciju. To radi putem modula koji se inicijalno pojavljuje, a to je
sistem_prijava.php. Ovaj modul je na neki način glavni meni za neregistriranog
korisnika.
Ovaj modul prvo provjerava je li korisnik prijavljen, a to se vidi po postavljenim
kolačićima (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 riječi. Prvo se provjerava
jeli postavljen kolačić dpKorisnik, preko polja $_COOKIE preko kojeg PHP pristupa
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 15
kolačićima u web pregledniku. Ukoliko je sve u redu dohvaća se vrijednost toga i dpHash
kolačića koji predstavlja hashirani oblik korisnikove lozinke. Zatim se putem mysql_query
zahtjeva pristupa bazi i pokušava se dohvatiti slog korisnika po imenu, s time da se kao
uvjet postavlja i da je korisnik aktivan (uOdobren='da'). Ukoliko se u dohvaćenom slogu
pronađe korisnik koji se traži provjerava se je li mu lozinka u redu i ako jest prosljeđuje 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 uspješno odrađen 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 značilo 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.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 (korisničko ime i lozinka) i ukoliko jesu šalje zahtjev
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 17
prema bazi za dohvaćanje podataka o korisniku. Zatim se provjerava lozinka i ukoliko je
sve u redu slijedi postavljanje kolačića.
Dohvaća se trenutno vrijeme, dodaje mu se 3600 sekundi (1 sat), i postavlja se kolačić
dpKorisnik koji sadrži korisničko ime, a trajanje mu se postavlja na sat vremena od
trenutnog vremena. Isto se radi i s dpHash. Time će korisnik biti prijavljen sljedećih sat
vremena, pa ukoliko se zaboravi odjaviti njegova prijava će svejedno isteći u razumnom
roku.
Dio koda na kraju ispisa koji počinje s else smjernicom se izvršava ukoliko modul nije
pozvan preko submit zahtjeva i on ispisuje normalnu formu za prijavu na sustav. Ključni
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 izvršena prijava korisnika on može koristiti dio aplikacije za registrirane
korisnike. Kako bi se tijekom rada aplikacije znalo da je korisnik registriran i kako bi se
izbjeglo zaobilaženje korištenja povlaštenih dijelova aplikacije upisivanjem kompletne
adrese u adresno polje preglednika ugrađen je dodatni mehanizam koji se poziva na
početku svakog modula i provjerava je li korisnik prijavljen u sustav i samo u slučaju da
jest mu dozvoljava nastavak, u protivnom ga vraća na formu za prijavu u sustav.
Navedena funkcionalnost je radi jednostavnosti korištenja napravljena u obliku jednog
modula koji se onda kasnije koristi preko include direktive. Taj modul je
sistem_spojen.php prikazan ispisom 3.6.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 18
if(isset($_COOKIE['dpKorisnik']))
{
$korisnik_cookie=$_COOKIE['dpKorisnik'];
$pass_cookie=$_COOKIE['dpHash'];
$pass_cookie = stripslashes($pass_cookie);
$korisnik_cookie = stripslashes($korisnik_cookie);
$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 način funkcioniranja je dosta jednostavan, dohvaćaju se dva kolačića (dpKorisnik i
dpHash), zatim se radi zahtjev prema bazi i provjerava se jesu li podaci ispravni. Ukoliko
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 19
se tijekom provjere dođe do toga da na bilo koji način podaci govore da korisniku treba
uskratiti pristup putem zaglavlja (header) se tijek aplikacije preusmjerava na poruku o
grešci i zatim na formu za prijavu u sustav.
Ukoliko je sve prošlo dobro i dokazano je da je korisnik prijavljen na sustav varijabla
spojen_var se postavlja na true, inače se postavlja na false. Ovo je samo pomoćni
mehanizam koji može nekom modulu reći rezultat izvršavanja modula, ali ključni dio je
usmjeravanje korisnika putem zaglavlja i nedopuštanje nastavka rada ukoliko nije
prijavljen u sustav.
Još je jedna akcija preostala što se tiče 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 prošlost i zatim se kolačići dpKorisnik i
dpHash ažuriraju s tim vremenom. Time je kolačiću rok važenja 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 uspješno prijavio u sustav omogućen 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. Uobičajeno je da se podaci za spajanje izdvoje u zasebnu config.php ili sličnu
datoteku radi fleksibilnosti i jednostavnosti izmjene prilikom promjene baze ili
premještanja na drugi poslužitelj. U ovom slučaju tu funkciju ima datoteka
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 20
sistem_config.php, koja sadrži 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 poslužitelja na kojoj je baza, u ovom slučaju su baza i ova datoteka na
istom poslužitelju pa je kao poslužitelj 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 način se jednostavnom include direktivom može kod iz
ovog modula uključiti 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 logično izdvojiti u zaseban moduli
pozivati preko include direktive. U ovom slučaju spajanje na bazu je definirano u modulu
sistem_spajanje.php.
Ispis 3.9 prikazuje sadržaj 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 učitale 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 Sadržaj modula sistem_spajanje.php
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 21
3.2.2.2 Obrada upozorenja
Na slici 3.3 prikazana je logička struktura poslužiteljskog dijela aplikacije koji služi za
obradu upozorenja. Aplikacija omogućuje unos, izmjenu, brisanje i pregled upozorenja.
Obrada upozorenja
Unos upozorenja
Pregled upozorenja
Brisanje upozorenja
Brisanje
Ažuriranje upozorenja
Ažuriranje
Unos
Upozorenje
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 tiče
• 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 ažuriranja upozorenja prvo se odabire datum za koji se unose odnosno
ažuriraju upozorenja. Također je moguće unijeti novi datum, a za pomoć korisniku
ponuđen je i odabir trenutnog. Taj dio odrađuje modul unos_upozorenja.php. Dio
njegovog koda slijedi.
Na ispisu 3.10 je prikazan dio modula unos_upozorenja.php koji je identičan u većini
modula koji čine aplikaciju. U njemu se učitavaju konfiguracijske varijable, spaja na bazu i
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 određenim 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 određene
radnje unutar forme. Konkretno ova funkcija puni polja za unos trenutnim datumom kad se
klikne na tipku "Trenutni". JavaScript se također koristi za jednostavne provjere je li
unesen ispravan datum, jesu li popunjena određena polja i slično.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 padajuća lista puni datumima iz baze. Unutar HTML koda u
dijelu gdje je potrebno navesti vrijednosti pojedinih linija kontrolu preuzima ubačena PHP
skripta koja generira zahtjev prema bazi i zatim dohvaćene vrijednosti formatira u ispravne
HTML tagove i tako puni padajuću listu.
Kad se izabere datum klikom na tipku "Uredi" se otvara forma za unos upozorenja, koja je
sadržana u modulu forma_upozorenja.php. Ova forma se radi većeg broja polja
uglavnom dinamički 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 proći kroz
sve elemente polja i ispisati retke tablice koristeći vrijednosti definirane u poljima. Tako je
sam fiksni dio HTML koda dosta reduciran i pojednostavljen.
Ispis 3.13 prikazuje kako se podaci o upozorenjima dohvaćaju iz baze. U ovom dijelu
modula se još uvijek ne pune u polja na formi. Bitno je navesti da se traženi datum šalje s
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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
prosljeđuje 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 način je veći dio tablice
generiran dinamički 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);
echo "<tr>\n<td width=\"30%\" bgcolor=".$bgcolor.">\n";
echo $arZupanije[$j] . " : ";
echo "</td>\n<td width=\"70%\" bgcolor=".$bgcolor.">\n";
echo "<select name=" . "\"" . $imeZup . "\"" . " id=". "\"" .$imeZup.
"\"" . " selected=2/>";
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 25
for ($i=0;$i<=4;$i++)
{
if ($arStupnjevi[$j]==$i)
echo "<option SELECTED>" . $lista[$i] . "</option>\n";
else
echo "<option>" . $lista[$i] . "</option>\n";
}
echo "</select> \n<input type=\"text\" size=\"40\" name=" . "\""
. $imeZup . "_opis\"" . " id=". "\"" .$imeZup. "_opis\"" . "
value=\"".$arOpisi[$j]."\"/></td>\n</tr>\n";
if ($bgcolor=="\"#DDDDDD\"")
$bgcolor="\"#BBBBBB\"";
else
$bgcolor="\"#DDDDDD\"";
}
?>
Ispis 3.14 Detalj modula forma_upozorenja.php
Klikom na "Spremi" se poziva modul upis_upozorenja.php koji nema svoj vizualni dio
nego odrađuje 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 prosljeđuju funkciji za upis u bazu. Radi lakšeg
rukovanja podacima definirana su dva polja koja olakšavaju 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 odgovarajuću cjelobrojnu vrijednost.
$lista = array (
"Bijelo" =>0,
"Zeleno" =>1,
"Žuto" =>2,
"Narančasto" =>3,
"Crveno" =>4
);
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 26
$zupanije = array (
1 => "Zagrebacka",
2 => "Krapinsko-zagorska",
3 => "Sisacko-moslavacka",
4 => "Karlovacka",
...
);
for ($i=1;$i<22;$i++)
{
$zup="zup_".sprintf("%02d",$i);
$out=$lista[$_POST[$zup]];
$zup_string=$zupanije[$i];
$opis_string=$_POST[$zup."_opis"];
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 učitavanje konfiguracijskih podataka i spajanje na bazu. Zatim se u
bazi provjerava postoji li već slog za datum koji se upisuje. Ako postoji izvršava se
UPDATE zahtjev prema bazi, ako ne postoji radi se INSERT u bazu. Tako je jednom
funkcijom riješen i novi upis i ažuriranje 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());
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 može i brisati. Ovu funkciju obavljaju dva
modula, to su brisanje_upozorenja.php i brisi_upozorenja.php. Slično kao kod unosa
jedan modul je za odabir datuma, a drugi nema vizualni dio nego je namijenjen interakciji
prema bazi. Način dohvata raspoloživih datuma je isti kao i kod odabira datuma za
uređenje.
Na ispisu 3.17 je prikazan način na koji se korisnika pita je li siguran da želi brisati
podatak. Ako jest vrijednost padajuće liste se preslikava u skrivenu varijablu
datumSkriveni koju će sljedeći modul primiti preko $_POST polja. Ukoliko korisnik klikne
cancel neće se dogoditi ništa, odnosno podatak neće biti obrisan.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 prosljeđuje datum koji je potrebno obrisati, ovaj modul ga
prihvaća i prosljeđuje bazi DELETE SQL naredbu. Nakon toga korisnika preusmjerava na
obavijest da je brisanje uspješno odrađeno.
$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);
header("Location: poruka_ok.php?tip=obrisano");
Ispis 3.18 Brisanje prognoza
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 29
3.2.2.3 Obrada prognoze
Na slici 3.4 prikazana je logička struktura poslužiteljskog dijela aplikacije koji služi za
obradu prognoza. Aplikacija omogućuje unos, izmjenu, brisanje i pregled prognoza.
Obrada prognoza
Upis prognoza
Pregled prognoza
Brisanje prognoza
Brisanje
Izmjena prognoze Izmjena
Unos
Prognoza
Slika 3.4 Logička struktura dijela aplikacije za obradu prognoza
Unos prognoza je izgledom dosta sličan unosu upozorenja i sastoji se od sličnih 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 poslužitelju
• unos_prognoza.php - modul za odabir datuma za obradu prognoza
• upis_prognoza.php - modul za interakciju s bazom kod upisa
Slično kao kod upozorenja modul unos_prognoza.php nudi listu postojećih datuma i
omogućava odabir pojedinog od njih kao i unos novog. Razlika je što se prognoze unose za
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 padajuću listu pune na isti način kao kod unosa upozorenja. Također 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 odgovarajuće polje. Upute
se prikazuju kad se mišem pređe preko odgovarajućeg podatka u zaglavlju tablice. Na
kraju ispisa je primjer (za jedno polje) kako funkciju pozvati kad se mišem pređe preko
zaglavlja.
function misVan()
{
document.GlavnaForma.hint.value="";
}
function misUnutra(tipka)
{
if (tipka==8)
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 31
document.GlavnaForma.hint.value="Područje za koje prognoza vrijedi";
if (tipka==1)
document.GlavnaForma.hint.value="Tekst prognoze";
if (tipka==2)
document.GlavnaForma.hint.value="Minimalna očekivana temperatura u
°C";
if (tipka==3)
document.GlavnaForma.hint.value="Maksimalna očekivana temperatura u
°C";
if (tipka==4)
document.GlavnaForma.hint.value="Očekivana brzina vjetra u km/h";
if (tipka==5)
document.GlavnaForma.hint.value="Očekivani smjer vjetra";
if (tipka==6)
document.GlavnaForma.hint.value="Tip oborina";
if (tipka==7)
document.GlavnaForma.hint.value="Količina oborina - kiša u cm po
metru kvadratnom, snijeg u centimetrima";
}
...
<td bgcolor="#AAAAAA" onMouseOver="misUnutra(8)"
onMouseOut="misVan()">Područje</td>
Ispis 3.20 Detalj modula forma_prognoze.php
Ova forma se većim dijelom generira dinamički uz korištenje polja definiranih u PHP
skripti u kombinaciji s podacima koji se dohvaćaju 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 ažurira kako prazno modul će obrisati taj slog iz baze kako ne bi dolazilo
do nepotrebnog držanja sloga u bazi ukoliko on ne sadrži nikakvu korisnu informaciju.
Brisanje prognoza se radi na isti način koji je opisan kod brisanja upozorenja. Prvo modul
brisanje_prognoze.php nudi listu datuma, odabirom datuma i određenog doba dana se
poziva modul brisi_prognoze.php koji u interakciji s bazom briše odgovarajući slog.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 brišu sva tri doba dana za konkretni datum.
Na ispisu 3.21 je vidljiv način provjere briše li se samo jedno doba dana ili sva tri, i prema
tome odgovarajući 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 meteoroloških postaja
Na slici 3.5 prikazana je logička struktura poslužiteljskog dijela aplikacije koji služi za
obradu meteoroloških postaja. Aplikacija omogućuje unos, brisanje i pregled podataka.
Unos podataka vrši se od strane udaljenog računala meteorološke postaje koji dostavlja
podatke.
Obrada postaja
Meteorološka postaja
Pregled postaja
Brisanje postaje Brisanje
Upis postaje
Postaja
«HTTP»
Slika 3.5 Logička struktura dijela aplikacije za evidenciju meteoroloških postaja
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 33
Aplikacija sadrži 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 ručno nego
ih radi program koji se vrti na određenom računalu i šalje ih putem GET zahtjeva prema
servisu. Međutim neke informacije o postajama je potrebno unijeti kako bi servis dobro
radio, pa za to služi dio aplikacije čiji opis slijedi. Taj dio čine sljedeći moduli :
• brisanje_postaja.php - briše podatke koje je postaja poslala
• brisi_postaja.php - interakcija prema bazi kod brisanja
• pregled_postaja.php - pregled podataka koje je postaja poslala, na poslužitelju
• unos_postaja.php - unos osnovnih podataka o postajama
Modul unos_postaja.php služi kako bi se postaji pojedinog korisnika pridružilo ime i
neka vrsta identifikacijske lozinke koju postaja mora poslati kako bi uspješno upisala slog
u bazu. Za ime korisnika se automatski uzima ime trenutno prijavljenog korisnika i
dohvaća 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 kućicama za unos i moguće ih je
promijeniti. Ukoliko nema podaci će biti prazni i moguće ih je upisati.
Važan podatak je lozinka postaje koja se mora slati prema servisu kako bi upis bio
uspješan. Preporučeno je da se odabere neka lozinka koju nije jednostavno pogoditi kako
bi se osigurala autentičnost podataka. Ovdje kao pomoć korisniku postoji funkcija koja
generira slučajnu lozinku od 20 slova i brojeva.
Funkcija prikazana na ispisu 3.22 je napisana u JavaScriptu i iz niza koji sadrži sva velika i
mala slova i brojeve uzima slučajne 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)
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 34
izlaz=izlaz+skup[slucajna];
}
document.Glavna.hash.value=izlaz;
}
</script>
Ispis 3.22 JavaScript funkcija za generiranje lozinke
Pošto postaje šalju podatke prema servisu koji ih upisuje u bazu nekad je te podatke
potrebno i obrisati. Zato je napravljen modul koji omogućava brisanje i to po dva kriterija,
jedan je datum, a drugi je ime postaje. Modul brisanje_postaja.php u padajućim listama
daje imena postaja i datume za koje postoje podaci, izborom određenog podatka i klikom
na odgovarajuću tipku podaci se prosljeđuju modulu brisi_postaja.php koji zatim radi
interakciju prema bazi i briše podatak.
3.2.3 Servisi
U dosad opisanoj funkcionalnosti aplikacije navedeni su detalji o poslužiteljskom 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 obnašati tu funkcionalnost. To su sljedeći 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 zajedničku namjenu, a to je generiranje XML datoteka s
podacima koje korisnik servisa traži. Ovi moduli "sjede" između baze i korisnika servisa i
posreduju tako što korisniku daju podatke bez potrebe za direktnom interakcijom s bazom
podataka. Na taj način je sustav sigurniji, a podaci su jednostavno dostupni korisniku.
Na slici 3.6 prikazana je logička struktura poslužiteljskog dijela aplikacije koji funkcionira
kao web servis. Dio web servisa (njegove sučelje) je izložen vanjskim klijentima koji
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 35
koriste njegove funkcionalnost. Podaci koji se pritom koriste evidentirani su u drugim
dijelovima aplikacije.
Sučelje serv isa
Kreiranje XMLa
Prognoza po datumu
Prognoze Upozorenja Upozorenja po datumu
Upozorenja po godinama
Postaje
Slika 3.6 Logička struktura dijela aplikacije koji nudi funkcionalnost web servisa
Za kreiranje XML datoteka koristi se PHP skripta koja formira stringove koji sadrže
podatak zatvoren u odgovarajuće tagove.
Radi preglednijeg formatiranja XML datoteke napisana je funkcija koja kao parametar
prima ime taga, sadržaj 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 ograđivanje sadržaja tagovima
Npr. ako korisnik želi vidjeti za koje su mu datume raspoložive prognoze dovoljno je da
pozove URL :
http://poslužitelj/xml_pro_datumi.php
Rezultat će biti XML formatirana datoteka primjer koje je prikazan ispisom 3.24.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 može po listi raspoloživih datuma zatražiti podatke za pojedini
datum na sljedeći način :
http://poslužitelj/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>
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 sličan način rade i ostali moduli koji generiraju XML datoteke. Tako se npr. za
upozorenja prvo poziva modul koji će vratiti listu godina :
http://poslužitelj/xml_upo_godine.php
Nakon što servis vrati listu godina mogu se zatražiti raspoloživi datumi za pojedinu godinu
http://poslužitelj/xml_upo_datumi.php?godina=2010
Rezultat je ponovno XML datoteka s listom raspoloživih datuma, i sad je moguće zatražiti
podatke za pojedini datum :
http://poslužitelj/xml_upo_podaci.php?datum=2010-11-25
Na ovaj zahtjev poslužitelj vraća XML datoteku s podacima za pojedini datum. Tu su sve
županije, stupanj upozorenja i tekst upozorenja. Korisnik servisa zatim može te podatke
prezentirati na odgovarajući način.
Ukoliko bi korisnik htio dohvatiti podatke koje su postaje prikupile pozvao bi sljedeći
URL :
http://poslužitelj/xml_pos_podaci.php
Kao rezultat bi dobio listu podataka s svih postaja po svim datumima.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 38
3.2.4 Način rada servisa
U prethodnom dijelu ovog poglavlja opisano je kako se šalje zahtjev prema servisu i kakve
on podatke vraća. U ovom potpoglavlju slijedi detaljniji opis načina rada servisa, odnosno
programskog koda koji omogućuje da servis radi.
Za primjer će biti opisan način rada pojedinih modula koji pružaju korisniku servisa
podatke o upozorenjima. Prvi je modul xml_upo_godine.php koji vraća listu raspoloživih
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 vraća podatke o godinama za upozorenja
Kao što je vidljivo iz ispisa 3.26 generiranje XML datoteke počinje ubacivanjem njenih
zaglavlja, odnosno headera. Nakon toga se formira početni tag <podaci> koji će se
pojaviti i ako podataka nema, ali će između njega i njegovog zatvorenog taga </podaci>
biti prazno. Zatim slijedi konekcija na bazu preko dva modula koji služe za tu svrhu. Kad
se uspješno povezalo na bazu postavlja se SQL zahtjev koji uzima sve godine za datume
koji su upisani pazeći da ne uzima dvaput isti pa koristi DISTINCT naredbu. Također se
podaci sortiraju prema godini, u padajućem redoslijedu.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 39
Zatim se svaki pročitani podatak ograđuje odgovarajućim tagom kako bi se znalo o kojem
se podatku radi. Na kraju kad se petlja završi generira se završni 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 može na račun njih zahtijevati da mu se
pošalju datumi za te godine. To će učiniti pozivom drugog modula, a to je
xml_upo_datumi.php.
Na ispisu 3.27 je modul koji generira XML datoteku s popisom datuma za određenu
godinu. Dio za spajanje na bazu i generiranje zaglavlja je iz ovog ispisa izbačen 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 dohvaćaju se slogovi koji zadovoljavaju uvjet.
Zatim se jedan po jedan slog ograđuje tagovima i prosljeđuje izlaznoj varijabli. Na kraju se
varijabla prosljeđuje 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
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 40
Korisnik sad ima još jednu mogućnost, a to je da odabere neki od datuma i za njega zatraži
konkretne podatke, što je smisao ovog servisa. Te podatke će mu vratiti modul
xml_upo_podaci.php. prikazan na ispisu 3.28.
<?php
... //izbačen 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.");
for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
$row = mysql_fetch_assoc($resultID);
$xml_output .= "\t<entry>\n";
$xml_output .= "\t\t<zupanija>" . $row['zupanija'] . "</zupanija>\n";
$xml_output .= "\t\t<stupanj>" . $row['stupanj'] . "</stupanj>\n";
$row['opis'] = str_replace("&", "&", $row['opis']);
$row['opis'] = str_replace("<", "<", $row['opis']);
$row['opis'] = str_replace(">", ">", $row['opis']);
$row['opis'] = str_replace("\"", """, $row['opis']);
$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. Dohvaćene podatke zatim ograđuje tagovima i šalje na izlaz. Za
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 41
vrijednost opis se poduzimaju dodatne radnje kako bi se osiguralo da neki od
nedozvoljenih znakova ne završi u izlazu i tako stvori neispravno formatiranu XML
datoteku.
U ovom poglavlju je opisano na jednom primjeru kako aplikacija putem određenih modula
generira XML formatirani izlaz koji je onda pogodan za korištenje od strane korisnika
servisa koji ne mora imati pristup bazi jer to posredovanje za njega odrađuje servis. Osim
što se korisniku mogu ponuditi servisi za preuzimanje podataka moguće mu je ponuditi i
servis za slanje podataka. Ova aplikacija nudi i to, korisnik može preko REST protokola
poslati određene podatke na poslužitelj 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 način
korisnik opet nema direktnog kontakta prema bazi nego za njega to odrađuje 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'];
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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");
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 način 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 grešci.
Neke nisu obavezne pa njihovo nepostojanje neće stopirati servis nego će on u bazu upisati
NULL vrijednosti na odgovarajuće pozicije.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 44
Ukoliko dođe do greške servis će kao povratnu vrijednost javiti ERROR-kod_greške, dok
će kod uspješnog upisa poslati povratnu vrijednost OK. Na ovaj način pozivatelj servisa
ima informaciju kako je transakcija prošla i donekle ima uvid u to što je krivo napravljeno
ako transakcija nije prošla.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 45
4 Opis aplikacije za razmjenu meteoroloških podataka
Realizirana aplikacija za razmjenu meteoroloških podataka ima dvije glavne namjene. Prva
je pružiti servis za praćenje meteoroloških podataka i to na način da korisnik s pravima za
uređivanje unosi podatke preko web sučelja, a klijenti pozivom dostupnih servisa mogu te
podatke dohvatiti u obliku XML datoteka. Na takav način klijenti nemaju direktnu
interakciju s bazom nego interakciju obavlja poslužitelj koji klijentu daje pripremljene i
formatirane podatke. Druga namjena aplikacije je pružiti servis za primanje podataka s
meteoroloških postaja. Za potrebe demonstracije korištenje napravljenih web servisa
napravljena je aplikacija sa servisom za primanje i davanje meteoroloških podataka.
Dio aplikacije dostupan registriranom korisniku nudi mogućnost uređivanja pojedinih
podataka koje će servis nuditi klijentima. Taj dio je podijeljen na dva osnovna dijela:
prognoze i upozorenja.
Prognoze sadrže podatke o predviđenom kretanju meteoroloških prilika, dok upozorenja
sadrže podatke koji upozoravaju na mogućnost oluja i ostalih vremenskih neprilika.
4.1 Ulazni dio
Kada korisnik pristupi aplikaciji nude mu se dvije opcije, može se ili prijaviti na sustav i
uređivati podatke ili može ostati neprijavljen i pregledavati podatke, ali bez mogućnosti
mijenjanja.
Ako se radi o novom korisniku koji želi imati pristup uređivanju podataka on može
odabrati opciju 'dodavanje novog korisnika' i upisati svoje podatke.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 46
Na slici 4.1 je vidljiv izgled zaslona kad korisnik koji nije prijavljen pristupi aplikaciji.
Slika 4.1 Početna 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 korisničko 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 neće imati mogućnost uređivanja podataka. Da bi dobio tu mogućnost
administrator ga prvo mora odobriti.
Slika 4.2 Prijava novog korisnika
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 47
U slučaju da se pokuša prijaviti dok nije odobren javiti će mu se poruka da mora pričekati
odobrenje i ta poruka je prikazana na slici 4.3.
Slika 4.3 Pokušaj prijave neaktivnog korisnika
4.2 Korisnički dio
Ako je korisnik već odobren može se prijaviti u aplikaciju sa svojim podacima. Provjerava
se lozinka i korisničko ime, a ako podaci nisu odgovarajući korisniku se ne dopušta ulaz u
korisnički dio. Isto vrijedi i ako korisnik nije odobren.
Slika 4.4 prikazuje izgled zaslona nakon što se korisnik uspješno prijavio. Korisniku se
nude opcije uređivanja podataka, a u svakom slučaju mu ostaju i pregledi koje ima i
neregistrirani korisnik. Kad je gotov s radom registrirani korisnik se može odjaviti iz
aplikacije.
Slika 4.4 Korisnički izbornik
4.3 Administracija
Ovaj dio aplikacije sadrži administrativni dio gdje se mogu vidjeti korisnici i mogu se
omogućiti odnosno onemogućiti. Korisnik kojemu se želi zabraniti pristup aplikaciji se
jednostavno onemogući i iako će i dalje postojati kao korisnik neće moći ući u korisnički
dio aplikacije.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 48
Na slici 4.5 vidljiv je izgled zaslona s listom korisnika, a nudi se i mogućnost odobravanja,
odnosno zabranjivanja pristupa pojedinom korisniku. Administratorski račun se ne može
onemogućiti jer bi u tom slučaju bilo nemoguće pristupiti aplikaciji.
Slika 4.5 Administrativni dio aplikacije
4.4 Prognoze
U ovom dijelu aplikacije korisnik može unositi ili brisati pojedine prognoze. Prvo se
korisniku nudi da izabere konkretnu prognozu koju želi uređivati.
4.4.1 Uređivanje
Slika 4.6 prikazuje izgled zaslona za odabir konkretne prognoze.
Slika 4.6 Odabir datuma prognoze
Tri su osnovne mogućnosti:
1. Korisnik može iz padajućeg izbornika izabrati neki od datuma za koji je prognoza
već upisana pa je zatim uređivati,
2. Korisnik može klikom na tipku "Trenutni" odabrati današnji datum, a može i ručno
upisati datum u odgovarajuće kućice za unos.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 49
3. U slučaju da korisnik upiše datum za koji već postoji prognoza automatski se otvara
već unesena koju je onda moguće dalje uređivati.
Prognoze su podijeljene po dva kriterija, prvi je po razdoblju dana, a to su jutro, popodne i
noć, a drugi kriterij je klimatološka cjelina. Nakon što se odabere datum prognoze klikom
na jednu od tri tipke se ulazi u uređivanje pojedinog dijela dana.
Slika 4.7 prikazuje zaslon za uređivanje prognoza. U samom naslovu tablice je naveden
datum i doba dana za koje se prognoza uređuje. Prognoza je u ovom dijelu podijeljena na
osam klimatoloških cjelina Hrvatske. Za prognoze ova podjela je logičnija nego podjela na
četiri regije ili po županijama. Razlog tome je što pojedine županije nemaju iste
klimatološke prilike u svim svojim dijelovima. Osam područja je navedeno prema
najvećim gradovima unutar njih.
Slika 4.7 Uređivanje prognoza
U ovom dijelu programa moguće je upisivati podatke bitne za prognozu. Najveće polje je
tekst prognoze koji prate numeričke i opisne vrijednosti. One su redom:
• minimalna očekivana temperatura,
• maksimalna očekivana temperatura,
• jačina vjetra,
• smjer vjetra,
• tip oborina,
• količina oborina.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 50
Svi podaci osim opisa su proizvoljni, mogu se upisati, ali i ne moraju. Ako se ne upiše
tekst prognoze ostali podaci će biti vidljivi na ovom zaslonu, ali servis neće slati korisniku
te podatke za konkretnu klimatološku cjelinu, doba dana i datum.
Na zaslonu su vidljive i dvije naizgled iste opcije, premda su u praksi znatno različite. One
su "Resetiraj" i "Očisti". Funkcija tipke "Resetiraj" je da podatke u tablici vrati na zadnje
spremljeno stanje, dok tipka "Očisti" sve podatke iz tablice briše. Ako se nakon toga
pritisne tipka "sačuvaj" rezultat će biti isti kao da su podaci obrisani. Tipka "sačuvaj"
sprema u bazu trenutni izgled tablice.
4.4.2 Brisanje
Za određeni datum i razdoblje dana moguće je i obrisati unesene podatke o prognozi. Na
slici 4.8 vidljiv je zaslon za brisanje prognoza. Padajuća lista nudi sve datume za koje
postoje upisane prognoze i onda je moguće klikom na odgovarajuću tipku odabrati brisanje
jednog razdoblja dana ili sva tri.
Slika 4.8 Brisanje prognoza
4.5 Upozorenja
Slično kao i prognoze moguće je uređivati i brisati i upozorenja.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 51
4.5.1 Uređivanje
Na slici 4.9 je vidljiv izgled zaslona za izbor uređivanja upozorenja. Dosta je sličan onome
za uređivanje prognoza, s razlikom da je ovdje samo jedna opcija uređenja budući da
upozorenja važe za cijeli dan, a ne samo dio dana kao prognoze. Ostali izbori su isti,
moguće je odabrati već postojeći datum, unijeti novi ili trenutni.
Slika 4.9 Izbor datuma upozorenja
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 52
Na slici 4.10 prikazan je zaslon za uređivanje upozorenja. Za razliku od prognoza
upozorenja su raspoređena po županijama. Tu je 20 županija i grad Zagreb. U naslovu
tablice je navedeno za koji se datum uređuju upozorenja.
Slika 4.10 Uređivanje upozorenja
Za svaku županiju moguće je iz padajućeg izbornika izabrati jednu od pet boja koje
predstavljaju stupanj opasnosti. Bijela boja znači da nema podataka, zelena da nema
opasnosti, a stupanj opasnosti raste od žute preko narančaste do crvene. Odmah pored
izbora boje su kućice za unos teksta koji pobliže objašnjava zašto je upozorenje izdano.
Ovdje i jedno i drugo polje mogu, ali i ne moraju biti popunjeno, primjerice moguće je da
opasnost postoji samo na krajnjem jugu pa će se onda za najjužniju županiju unijeti podaci,
a ostale će ostati prazne.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 53
4.5.2 Brisanje
Kao i prognoze, upozorenja je također moguće 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 meteorološke postaje je također moguće uređivati 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 može mijenjati i ono će se
prikazivati u pregledima podataka po postajama. Drugi podatak koji se može uređivati 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 slučajnim odabirom slova i brojeva jamčeći tako veliku razinu
jedinstvenosti.
Slika 4.12 Podaci o postaji
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 54
4.6.2 Brisanje
Budući da postaje imaju mogućnost slanja podataka prema poslužitelju nekad se javlja
potreba da se dio podataka i obriše, recimo ako je ustanovljeno da je postaja neko vrijeme
bila u kvaru pa su podaci neispravni ili ako je neka postaja izašla iz sustava pa ju je
potrebno ukloniti iz pregleda.
Na slici 4.13 je prikazan okvir za brisanje podataka koje postaje šalju. Tri su moguća
kriterija, može 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. Budući da
neprijavljeni korisnik ima funkcije kao i korisnik servisa te funkcije će biti opisane kroz
opis rada servisa.
Sve dosad navedeno kroz opis korisničkog sučelja vrijedi za unos, brisanje i uređivanje
podataka. To su funkcije dostupne samo prijavljenim korisnicima. Što se tiče pregleda
podataka on je omogućen i neprijavljenim korisnicima putem mrežnog servisa koji u XML
obliku servira podatke zainteresiranim korisnicima. Pritom korisnik mora znati kako
postaviti zahtjev poslužitelju, a isto tako mora znati kako protumačiti primljene podatke.
4.7 Pregledi (klijentski dio)
Budući da aplikacija daje servis na korištenje vanjskim programima za demonstraciju rada
servisa izrađeno je nekoliko primjera pregleda podataka. To su pregled upozorenja,
prognoza i podataka s postaja.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 55
Na slici 4.14 su prikazane opcije koje se klijentu nude, klikom na odgovarajuću 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
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 56
Županije su obojane odgovarajućim bojama da vizualno istaknu stupanj opasnosti, a
prelaskom pokazivača miša preko određene županije se u okviru s informacijama
pojavljuje detaljniji opis opasnosti. Korisnik također preko padajućih izbornika može
odabrati datum za koji želi pregledati upozorenja.
Na slici 4.16 je prikazan primjer kako klijent za pregled prognoza može izgledati,
korisniku se prvo nudi lista raspoloživih datuma, kad odabere određeni datum za njega se
otvara lista prognoza. Ako za neko područje ili doba dana nije upisana prognoza ona se
neće pojaviti u pregledu. Ovo je ostavljeno na izbor programeru klijentskog dijela, isto
tako je moglo biti napravljeno da za područja i doba dana za koja nema podataka piše npr.
"nema podataka".
Slika 4.16 Pregled prognoza
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 57
Na slici 4.17 je primjer klijenta koji prikazuje podatke o postajama. U ovom slučaju su
postaje grupirane prema imenu, a podaci pojedine postaje su još složeni po datumu,
počevši od najsvježijeg podatka.
Slika 4.17 Pregled podataka za postaje
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 58
5 Klijentski dio Primarna svrha opisane aplikacije je pružanje mrežnih servisa vanjskim korisnicima na
korištenje. No u svrhu demonstracije rada servisa napravljeno je i nekoliko klijentskih
modula koji pomažu u prikazu rada aplikacije. Pritom je iskorišteno više načina prikaza,
jedan od njih je prikaz putem HTML stranice, a drugi je grafički 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 način. Za parsiranje XML datoteke iskorištena je biblioteka, odnosno klasa
simpleXML. Njeno korištenje je relativno jednostavno, a prilikom instalacije PHP
interpretera se automatski instalira pa je logičan izbor. To nije jedina klasa za rukovanje
XML datotekama, no s obzirom da ima sve potrebno nema potrebe za korištenje drugih,
često komercijalnih rješenja.
Učitavanje XML datoteke putem simpleXML klase se može izvesti na dva načina, jedan je
da se prvo dohvate XML podaci i spreme u varijablu pa se zatim pretvore u XML element,
a drugi način 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.poslužitelj.com/datoteka.xml',n
ull,true);
Primjer 3 :
$datoteka=file_get_contents('podaci.xml');
$moji_podaci = SimpleXMLElement($datoteka);
Ispis 5.1 Primjeri korištenja simpleXML klase
Ispis 5.1 prikazuje tri različite mogućnosti primjene simpleXML klase. U opisanoj
aplikaciji se koristi metoda iz primjera 2, koja podatke dohvaća direktno iz URLa u
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 59
varijablu i dalje rukuje njima putem funkcija koje SimpleXML biblioteka nudi. Kao prvi
parametar se navodi URL koji sadržava XML datoteku, drugi parametar su opcije, a treći
je true ako se šalje ime datoteke, a false ako se šalju konkretni XML podaci, odnosno
varijabla koja ih sadrži.
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 — Vraća 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 — Vraća namespace-ove definirane unutar dokumenta
SimpleXMLElement::getName — Daje ime XML elementa
SimpleXMLElement::getNamespaces — Vraća namespaceove
SimpleXMLElement::registerXPathNamespace — Kreira kontekst za XPath zahtjev
SimpleXMLElement::saveXML — Isto što i asXML metoda
SimpleXMLElement::xpath — Pokreće XPath zahtjev
SimpleXML funkcije
simplexml_import_dom — Daje SimpleXMLElement objekt iz DOM čvora
simplexml_load_file — Učitava XML datoteku u objekt
simplexml_load_string — Učitava XML string u objekt
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 učitava putem URLa kao SimpleXML element, i zatim se za svaki
njen podatak pristupanjem preko imena čvora dohvaća njegova vrijednost koja se ispisuje
u obliku tablice.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 61
Foreach je primijenjen jer dohvaća sve čvorove, ali moguće je pristupiti i svakom
posebno. Takav način pristupa prikazan je ispisom 5.4.
echo "Temperatura za drugi slog je : ".$slogovi->slog[1]->temperatura;
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 "Atribut za drugi slog je : ".$slogovi->slog[1]['atribut'];
Ispis 5.5 Pristup određenom atributu
5.2 Primjer klijenta - pregled prognoza Pregled prognoza predstavlja modul koji se vrti na klijentskoj strani, preuzima podatke
isključivo putem XML datoteke preko SimpleXML klase i prezentira ih kroz HTML
stranicu.
Ispis 5.6 prikazuje dio koda koji preuzima XML datoteku s poslužitelja, i zatim ju
pretražuje kako bi se vidjelo koji su podaci dostupni. Preslikavanje je napravljeno u
dvodimenzionalno polje, jednu dimenziju predstavlja područje, a drugu doba dana. Tako je
na kraju rezultat matrica koja sadrži plusove za odgovarajuće doba dana i područje 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
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 62
Zatim se ovisno o tome koje vrijednosti postoje formira tablica koja sadrži pročitane
podatke.
Na ispisu 5.7 vidljiv je način prezentacije podataka. Dvije ugniježđene petlje (jedna za
područje, jedna za doba dana) pregledavaju prethodno formirano polje koje ima indikatore
postojanja podataka za pojedino doba dana i područje i onda ovisno o tome postoje li
podaci ispisuje konkretne podatke iz XML datoteke. XML datoteku od trenutka učitavanja
predstavlja varijabla $records koja sadrži unutar sebe sve podatke koje je XML datoteka
vratila. Na isti način 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 područje
: ".$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 neće 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 očekuju.<br>";
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 63
else
echo "Očekivani tip oborina : ".$records->$doba_var[$i]-
>$grad_var[$j]->obtip.", u količinama ".$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 izrađen korištenjem Adobe Flash aplikacije. Grafički elementi su napravljeni
kroz grafičko sučelje, a programski kod je napisan kao ActionScript, a to je programski
jezik ugrađen u Adobe Flash.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 64
Na slici 5.1 prikazano je korišteno razvojno okruženje za razvoj Adobe Flash aplikacija.
Slika 5.1 Adobe Flash razvojno okružje
5.3.1 Prikazivanje opisa
Svaka županija je izrađena kao zaseban objekt i dodane su mu akcije koje se automatski
izvršavaju nakon što pokazivač miša dođe iznad njega, odnosno kad izađe s njega. To je
napravljeno putem ActionScripta.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 65
Na ispisu 5.8 vidljiv je programski kod koji prilikom prelaska miša u okviru za prikaz
podataka (boxxy) prikazuje odgovarajući član polja opisi u kojeg su prilikom učitavanja
XML datoteke preneseni opisi upozorenja za pojedinu županiju. Isto tako se i tekst polju
naslovLabel pridružuje vrijednost iz polja zupanijeAr koje sadrži već učitana imena svih
županija. Kad pokazivač miša izađe 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 događajima
5.3.2 Rukovanje XML datotekama
Flash objekt preuzima od mrežnog 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 korištenje XML podataka
Pri učitavanju XMLa se poziva metoda onLoad, pa je potrebno u nju ubaciti radnje koje se
izvršavaju kod učitavanja.
Na ispisu 5.10 je vidljiv način učitavanja XML datoteke, u konkretnom slučaju datoteke
koja sa servisa preuzima listu raspoloživih godina. Varijabli nodes se pridružuje 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 padajući izbornik za odabir godina. Nakon toga se selektira prva
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 66
raspoloživa godina i za nju se učitavaju datumi. Funkcija koja učitava datume je slična
ovdje navedenoj i također će odabrati prvi raspoloživi datum i pozvati funkciju za
učitavanje 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 događa kod učitavanja 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 pomoću funkcije bojajZupaniju postavlja boja objekta
koji predstavlja županiju, a sukladno učitanom stupnju opasnosti. Funkcija puniOpis u
polje s opisima dodaje opis opasnosti za trenutno učitavanu županiju kako bi kasnije bilo
moguće 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;
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 67
bojajZupaniju(vStu,vZup);
puniOpis(vZup,vOpi);
}
};
Ispis 5.11 Učitavanje 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 dohvaćati podatke, a također kako bi se mogli adrese
servisa mijenjati bez potrebe za ponovnim prevođenjem samog objekta. Datoteka s
postavkama sadrži tri varijable, budući da Flash objekt učitava tri različita podatka sa
servisa.
Na ispisu 5.12 prikazan je izgled konfiguracijske datoteke za Flash objekt. U realnom
slučaju se poslužitelj zamjenjuje stvarnom lokacijom poslužitelja.
<postavke>
<godine>http://poslužitelj/xml_upo_godine.php?</godine>
<datumi>http://poslužitelj/xml_upo_datumi.php?</datumi>
<podaci>http://poslužitelj /xml_upo_podaci.php?</podaci>
</postavke>
Ispis 5.12 Sadržaj 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 učitavanja, a to je
preslikavanje podataka u tri varijable, i na kraju se pri inicijalizaciji programa poziva
učitavanje postavki. Nakon što program ima ove tri varijable može preko njih učitati XML
podatke od servisa.
//kreiranje XML objekta
var theXMLs:XML = new XML();
theXMLs.ignoreWhite = true;
//definiranje onLoad funkcije
theXMLs.onLoad = function()
{
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 učitavanja podataka
theXMLs.load("./postavke.xml");
Ispis 5.13 Rukovanje postavkama
Na ispisu 5.14 je vidljivo kako se varijabla učitana 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
različiti upit tako što se kao jedan od parametara pridružuje trenutno vrijeme. Servis će taj
podatak ignorirati, ali će efikasno spriječiti cachiranje i učitavanje podataka koji su već bili
učitani, ali su se u međuvremenu promijenili.
function ucitajGodine() {
dontCache = getTimer();
theXMLg.load(urlGodine+"nema_cache="+dontCache);
}
Ispis 5.14 Učitavanje podataka sa servisa
5.4 Primjer klijenta - slanje podataka s postaje Osim servisa za slanje podataka klijentu aplikacija sadrži i servis namijenjen primanju
podataka. Za demonstraciju njegovog rada napravljena je Windows aplikacija koja simulira
rad postaje. U realnom slučaju bi se koristio program koji od stvarne postaje očitava
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
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 69
podatke generira umjesto da ih očitava s postaje. Takvi generirani podaci se transformiraju
i šalju prema servisu. Klijent je u ovom slučaju izrađen u Borland Delphi [11] razvojnom
alatu za Windows operacijski sustav.
Na slici 5.2 je vidljiv jednostavan klijent napravljen za demonstraciju rada mrežnog 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
poslužiteljskom dijelu aplikacije.
Slika 5.2 Izgled Windows klijenta
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 70
Slika 5.3 prikazuje kako će na poslužitelju 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 poslužitelju i drugu koja generira podatke i poziva prvu funkciju.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 71
Kao što je vidljivo na ispisu 5.15 timer periodično poziva funkciju koja generira slučajne
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;
izlaz:=bazaEdit.Text+'hash='+hash+'&temp='+IntToStr(temp)+'&vjetar='+IntT
oStr(vjeb)+'&smjer='+vjes+'&vlaga='+IntToStr(vlaga)+'&kisa='+IntToStr(kis
a);
GlavniRichEdit.lines.add(izlaz);
rez:=GetUrlContent(izlaz); //poziv funkcije koja otvara URL
if (rez='OK') then
GlavniRichEdit.lines.add('Slanje uspješno')
else
GlavniRichEdit.lines.add('Slanje neuspješno, povratna vrijednost :
'+rez);
end;
Ispis 5.15 Funkcija za slanje podataka
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 72
6 Zaključak Razvojem PHPa i ostalih alata koji se izvršavaju na strani poslužitelja stvoreno je dosta
mogućnosti za lakši i jednostavniji razvoj mrežnih servisa. Također jednostavna razmjena
podataka putem XMLa je dodatno olakšala cijeli proces izrade i korištenja kako
poslužitelja tako i klijenta.
Opisana aplikacija demonstrira kako na relativno jednostavan način izraditi mrežni servis
koji koristi REST arhitekturu za komunikaciju klijenta i poslužitelja. Na taj način je
aplikacija učinjena fleksibilnom i lako proširivom, a kao što je demonstrirano jednostavno
je izraditi klijente u raznim tehnologijama, ne samo PHPu.
Prilikom izrade aplikacije stečeno je vrijedno teorijsko iskustvo s područja RESTful
mrežnih servisa, kao i praktično iskustvo s područja programiranja u PHP programskom
jeziku. Stečeno je i znanje vezano uz samu REST arhitekturu i praktičnu implementaciju
iste u poslužiteljsku aplikaciju kao i u razne tipove klijenata. Prilikom izrade aplikacije nije
bilo većih 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
olakšao rukovanje XMLom u odnosu na prethodnu verziju ugradnjom klase SimpleXML.
Jedino područje gdje je bilo malo teže naći dokumentaciju je izrada Flash klijenta.
Aplikacija je izrađena kao potpuno funkcionalna i cilj joj je demonstrirati poznavanje rada
sa REST arhitekturom i poznavanje načina funkcioniranja mrežnih servisa. Dorade su kao i
uvijek moguće, a neka od područja gdje ima mjesta doradama bi se mogla istaknuti bolja
sigurnost pri komunikaciji između klijenta i poslužitelja, provjera korisnika, eventualno
kreiranje korisničkih grupa i različita razina prava za pojedine korisnike. Trenutna verzija
implementira funkcije za dvije vrste korisnika, a to su prijavljeni i neprijavljeni korisnik.
Još jedno od područja gdje su dorade moguće i poželjne je korisničko sučelje. Prilikom
izrade aplikacije naglasak je stavljen na funkcionalnost sučelja, no sigurno je da ima još
mjesta i estetskim doradama.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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]. Dubrovački Vjesnik, http://dubrovacki.hr/, (30.12.2010)
[11]. Borland Delphi, http://www.borland.com/, (30.12.2010)
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 74
8 Prilozi
8.1 Popis slika Slika 3.1Tablice unutar baze podataka .................................................................................. 9
Slika 3.2 Logička struktura poslužiteljskog dijela aplikacije .............................................. 11
Slika 3.3 Obrada upozorenja ............................................................................................... 21
Slika 3.4 Logička struktura dijela aplikacije za obradu prognoza ....................................... 29
Slika 3.5 Logička struktura dijela aplikacije za evidenciju meteoroloških postaja ............. 32
Slika 3.6 Logička struktura dijela aplikacije koji nudi funkcionalnost web servisa ........... 35
Slika 4.1 Početna stranica .................................................................................................... 46
Slika 4.2 Prijava novog korisnika ........................................................................................ 46
Slika 4.3 Pokušaj prijave neaktivnog korisnika................................................................... 47
Slika 4.4 Korisnički izbornik ............................................................................................... 47
Slika 4.5 Administrativni dio aplikacije .............................................................................. 48
Slika 4.6 Odabir datuma prognoze ...................................................................................... 48
Slika 4.7 Uređivanje prognoza ............................................................................................ 49
Slika 4.8 Brisanje prognoza ................................................................................................. 50
Slika 4.9 Izbor datuma upozorenja ...................................................................................... 51
Slika 4.10 Uređivanje 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 okružje .............................................................................. 64
Slika 5.2 Izgled Windows klijenta ....................................................................................... 69
Slika 5.3 Poslani podaci ...................................................................................................... 70
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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 Sadržaj 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 ograđivanje sadržaja 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 vraća 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
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 76
Ispis 5.1 Primjeri korištenja 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 određenom 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 događajima ............................................................................ 65
Ispis 5.9 Definicija korištenje XML podataka..................................................................... 65
Ispis 5.10 onLoad funkcija .................................................................................................. 66
Ispis 5.11 Učitavanje podataka o županijama ..................................................................... 67
Ispis 5.12 Sadržaj datoteke s postavkama ........................................................................... 67
Ispis 5.13 Rukovanje postavkama ....................................................................................... 68
Ispis 5.14 Učitavanje podataka sa servisa ........................................................................... 68
Ispis 5.15 Funkcija za slanje podataka ................................................................................ 71
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 77
9 Sažetak U ovom diplomskom radu opisana je aplikacija koja koristi mrežne servise za razmjenu
meteoroloških podataka. Korištenje 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. Poslužiteljski dio aplikacije
koji pruža mrežne servise je napisan u PHP programskom jeziku uz korištenje mySQL
baze za pohranu podataka. Klijentski dio aplikacije je izrađen dijelom u HTMLu i PHP
programskom jeziku, bez korištenja baze podataka, a dio je napravljen korištenjem Adobe
Flash tehnologije. Opisan je način rada servisa i tehnologija koje se koriste pri njihovom
korištenju te način korištenja aplikacije uz popratne slike. Opisan je i način razmjene
podatka između klijenta i poslužitelja s detaljima programskog koda. Demonstriran je
proces prijave, unosa, pregleda i brisanja podataka. Također je opisan proces registracije
korisnika i odobravanja istog od strane administratora. Opisani su i demonstrirani primjeri
klijentskih aplikacija koje koriste navedene mrežne servise. Na kraju rada, u zaključku su
navedena iskustva stečena tijekom izrade aplikacije kao i mogućnosti proširenja iste.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 78
10 Ključne riječi Mrežni servisi, XML, mySQL, Adobe Flash, REST.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških 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.
Sveučilište u Dubrovniku Korištenje mrežnih servisa za razmjenu meteoroloških podataka
Zlatko Barać 80
12 Keywords Web services, XML, mySQL, Adobe Flash, REST.