Raamatute hinnavaatlus: ülesande spec
Ülesandeks on teha autori järgi raamatute otsimise ja kuvamise käsurea rakendus, mis kasutab Google base andmebaasisüsteemi ja Eesti Panga valuutakursside lehte käsurealt antud autori raamatute väljaotsimiseks ja nende seast hinnapäringu tegemiseks: leida tuleb odavaim, kõik raamatud (kui neid pole väga palju) ning odavaim, kalleim ja keskmine hind igale raamatule.
Tulemus tuleb csv tabelina välja trükkida, kusjuures hinnad on eesti kroonides ja iga rida on kujul:
Autor,Raamatu pealkiri,leitud raamatute arv,Min hind, Keskmine hind, Maks hind
Näiteks:
Tammsaare,Tode Ja Oigus : Romaan : I Jagu,3,200,210,270
Tammsaare,Tode Ja Oigus,1,220,220,220
Tammsaare,Porgupohja Uus Vanapagan,2,110,120,130
Korduvaid raamatu pealkirju tabelis ei tohi olla. Kuna raamatute pealkirjad baasis sisaldavad mitmesugust lisainfot (näiteks Tode Ja Oigus : Romaan : I Jagu (1. Anne)) siis tuleb pealkirjast alati välja visata sulgudes olev info. Seega tuleb pealkirjad Tode Ja Oigus : Romaan : I Jagu (1. Anne) ning Tode Ja Oigus : Romaan : I Jagu lugeda ühekssamaks raamatuks ning tulemuses esitada samal real, pealkirjaga Tode Ja Oigus : Romaan : I Jagu. Samas raamat baasis oleva pealkirjaga Tode Ja Oigus tuleb lugeda juba teiseks raamatuks ning tulemuses esitada eraldi real.
Kuna müügiks olevaid raamatuid võib autoril olla väga palju, tuleb otsida esimese 250 seast (arenduse ajal kasuta kiiruse huvides väiksemat arvu, näiteks 25).
Ülesanne õpetab eeskätt järgmisi asju:
- Andmete lugemine võrgust ja failidest.
- Stringitöötlus.
- Mitmemõõtmeliste massiivide kasutamine.
Google base spetsiifilised detailid ja nõksud ei ole ülesande jaoks eriti olulised, praktikumitöös kasutame seda lihtsalt kui head näiteandmete allikat.
Täpsemad detailid siin lehel allpool.
Mis on Google base
Google base kasutame toodete otsinguks: sinu programm otsib tooteid ainult Google basest.
Google base (avaleht http://www.google.com/base) on Google vaba kasutusega andmebaasisüsteem: igaüks saab sinna laadida mistahes andmeid ja siis kasutada Google spetsiaalset otsimootorit andmete otsimiseks, sorteerimiseks jne. NB! Google base ei ole Google harilik otsimootor vaid spetsiaalne rakendus, hoopis erinev harilikust Google otsingust.
Vaata avalehte http://www.google.com/base ja proovi veidi näiteks toodete otsingu brauseri-kasutajaliidest http://www.google.com/base/s2?a_n0=products&a_y0=9&hl=en&gl=US.
Google base ei pea kasutama brauserist: igaüks saab vabalt kirjutada oma programmi baasist otsingute tegemiseks. Selleks pakub Google õpetusi ja abi-kooditükid, nn API: http://code.google.com/apis/base/.
Praktikumis ei tohi kasutada mingeid Google oma abi-kooditükke. Nendest ei oleks selles praktikumis mh ka mingit abi: kulutaksid oma aega keerulise koodi kasutamise uurimisele, millest aga ülesande lahendamiseks tulu ei tõuse.
Google base tuleb praktikumis kasutada järgmisel viisil:
- Sinu programm paneb ise kokku vajaliku URLi ja loeb sellelt URLilt stringi, vt GBaseExample.java.
- Loetud stringist otsib sinu programm välja vajalikud osad ja ehitab nendest kahemõõtmelise stringimassiivi.
Hea leht esialgseks katsetamiseks on http://www.google.com/base/api/demo/html/demo.html. Vaata sealt lõiku pealkirjaga Query (HTTP GET), mille all on sisestusboks, kuhu saad panna päringu parameetrid. Siis vajuta Query nuppu ja samale lehele ilmub tulemus XML-stringi kujul.
Paar konkreetset katsepäringut:
- snippets?bq=[product type : books][author : Tammsaare]
- Täisurl: http://base.google.com/base/feeds/snippets?bq=%5Bproduct%20type%20:%20books%5D%5Bauthor%20:%20Tammsaare%5D
- Kodeerimata täisurl: "http://base.google.com/base/feeds/snippets?bq=[product type : books][author : Tammsaare]"
- snippets?bq=[product type : books][author : Mati Unt]
- Täisurl: http://base.google.com/base/feeds/snippets?bq=%5Bproduct%20type%20:%20books%5D%5Bauthor%20:%20Mati%20Unt%5D
- Kodeerimata täisurl: http://base.google.com/base/feeds/snippets?bq=[product type : books][author : Mati Unt]
- snippets?bq=[product type : books][author : Shakespeare]
- Täisurl: http://base.google.com/base/feeds/snippets?bq=%5Bproduct%20type%20:%20books%5D%5Bauthor%20:%20Shakespeare%5D
- Kodeerimata täisurl: http://base.google.com/base/feeds/snippets?bq=[product type : books][author : Shakespeare]
Selleks, et saada kohe rohkem tulemusi, kui vaikimisi 25, anna lisaparameeter max-results, niimoodi:
- snippets?max-results=250&bq=[product type : books][author : Shakespeare]
- Täisurl: http://base.google.com/base/feeds/snippets?max-results=250&bq=%5Bproduct%20type%20:%20books%5D%5Bauthor%20:%20Shakespeare%5D
- Kodeerimata täisurl: http://base.google.com/base/feeds/snippets?max-results=250&bq=[product type : books][author : Shakespeare]
NB!
- Sinu rakendus ei pea andmeid baasi sisetama ega kasutajaid autentima. Kogu juttu Authenticating users ja tokens ja Google account hankimise teemal tuleb lihtsalt ignoreerida: nende asjadega tegeleda ei tule.
- Ei ole mingit vajadust lugeda läbi kogu võrgus olevat keerulist juttu Google base kasutamisest. Kogu tegelikult vajalik info on toodud siin lehel allpool, koos koodinäidetega.
Eesti Panga valuutakursid
Eesti panga valuutakursse kasutame selleks, et kõik Google basest leitud hinnad teisendada eesti kroonideks.
Valuutakursse on kõige lihtsam tõmmata lehelt http://www.eestipank.info/dynamic/erp/erp_csv.jsp?day=25&month=9&year=2007. Pane tähele, et äsjatoodud urlis saab vabalt anda soovitud päeva. Praktikumirakendus peab kasutama sama või eelmise päeva kursse (sama päeva kursid ei ole kohe hommikul kättesaadavad).
Nimetatud lehel on kursid antud eesti locale csv formaadis: eraldajaks semikoolon, arvud komadega.