ITI0011-13-HW2-Panoramio: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Ago (arutelu | kaastöö)
Ago (arutelu | kaastöö)
85. rida: 85. rida:


Programm suudab etteantud asukoha pildid trükkida välja suvalises järjestuses (näiteks selles samas, mis nad olid Panoramio API-st saades). Välja tuleb printida pildi nimi, pildi tegemise kuupäev ja pildi autor.
Programm suudab etteantud asukoha pildid trükkida välja suvalises järjestuses (näiteks selles samas, mis nad olid Panoramio API-st saades). Välja tuleb printida pildi nimi, pildi tegemise kuupäev ja pildi autor.
Nõuded:
* '''Programm peab olema juhitav käsurea parameetritega''' (kujul: java -jar Panoramio.jar -sort title Tallinn). Programm ei tohiks käivitamise ajal kasutajalt sisendit küsida (kui juba küsib, siis ümber ei pea tegema; oluline on, et kõiki asju saab juhtida ka käsurea parameetritega).
* Kõik meetodid ja objekti muutujad peaksid olema dokumenteeritud (javadoc).


=== Puhverdamine - 3p ===
=== Puhverdamine - 3p ===

Redaktsioon: 30. september 2013, kell 13:11

Tagasi ITI0011 lehele.

Põhiosa

Ülesande tekst täpsustub. Kiiremad saavad juba alustada.

Kirjutada programm, mis käsurealt ette antud argumenti tõlgendab geograafilise asukohana (linn/piirkond/riik vms) ning küsib vastava asukoha kohta piltide nimekirja Panoramiost.

Programmile etteantav argument tuleb kõigepealt teisendada geokoordinaatideks. Selleks kasutada Google Maps API-t, näiteks: http://maps.googleapis.com/maps/api/geocode/xml?address=Tallinn&sensor=false . Täpsemalt võib API kohta lugeda siit: https://developers.google.com/maps/documentation/geocoding/

Sealt tuleb välja otsida koordinaadid bounding box elemendi "bounds" seest.

<GeocodeResponse>
 <status>OK</status>
 <result>
  ..
  <geometry>
   ..
   <bounds>
    <southwest><lat>59.3518090</lat><lng>24.5501939</lng></southwest>
    <northeast><lat>59.5914239</lat><lng>24.9262889</lng></northeast>
   </bounds>
  </geometry>
 </result>
</GeocodeResponse>


Samad koordinaadid tuleb anda ette Panoramio API-le, näiteks: http://www.panoramio.com/map/get_panoramas.php?set=public&from=0&to=20&minx=24.550193&miny=59.351809&maxx=24.9262889&maxy=59.5914239&size=medium&mapfilter=true . Täpsemalt võib Panoramio API kohta lugeda siit: http://www.panoramio.com/api/data/api.html

Panoramio API annab vastuseks JSON formaadis tulemuse. Piltide andmed asuvad "photos" massiivis. Iga pildi kohta tuleb välja parsida ja salvestada pildi nimi (photo_title), pildi tegemise kuupäev (upload_date) ja pildi autor (owner_name).

{"count":1875,"has_more":true,"map_location":{"lat":59.438560500000001,"lon":24.752405745157176,"panoramio_zoom":7},
"photos":[{"height":335,"latitude":59.444141000000002,"longitude":24.765032000000001,"owner_id":6304679,
"owner_name":"Kalev Vask","owner_url":"http://www.panoramio.com/user/6304679",
"photo_file_url":"http://mw2.google.com/mw-panoramio/photos/medium/81410373.jpg","photo_id":81410373,
"photo_title":"Barque Kruzenshtern, Tallinn Maritime days 2011",
"photo_url":"http://www.panoramio.com/photo/81410373","upload_date":"31 October 2012","width":500},
...
]}

JSON-i stringid sisaldavad multibyte sümboleid escape'itud kujul (näiteks \u044e). Selleks, et see muuta vastavaks sümboliks, võite kasutada järgmist koodijuppi:


	/**
	 * A quick and dirty function to parse json encoded unicode
	 * string into Java String.<p>
	 * 
	 * The function finds all multi-byte symbols in the form \\uXXXX 
	 * (with one \). The part after u is treated as hexadecimal number
	 * representing the code of one symbol.
	 *  
	 * @param jsonString Encoded json string
	 * @return Java String
	 */
	public static String parseUnicodeJsonString(String jsonString) {
		String s = "";
		int i;
		for (i = 0; i < jsonString.length() - 5; i++) {
			String part = jsonString.substring(i, i + 6);
			Matcher m = Pattern.compile("\\\\u([0-9a-zA-Z]{4})").matcher(part);
			if (m.matches()) {
				s += Character.toString((char) Integer.parseInt(m.group(1), 16));
				i += 5;
				continue;
			}
			s += jsonString.charAt(i);
		}
		while (i < jsonString.length()) {
			s += jsonString.charAt(i++);
		}
		return s;
	}

Punktid

Põhiosa - 5p

Programm suudab etteantud asukoha pildid trükkida välja suvalises järjestuses (näiteks selles samas, mis nad olid Panoramio API-st saades). Välja tuleb printida pildi nimi, pildi tegemise kuupäev ja pildi autor.

Nõuded:

  • Programm peab olema juhitav käsurea parameetritega (kujul: java -jar Panoramio.jar -sort title Tallinn). Programm ei tohiks käivitamise ajal kasutajalt sisendit küsida (kui juba küsib, siis ümber ei pea tegema; oluline on, et kõiki asju saab juhtida ka käsurea parameetritega).
  • Kõik meetodid ja objekti muutujad peaksid olema dokumenteeritud (javadoc).

Puhverdamine - 3p

Programm puhverdab tulemused kõvakettale (faili). Iga asukoha kohta on eraldi puhver (fail).

Võimaldab käsurea parameetriga forsseerida veebist lugemist, isegi kui puhvrifail on olemas. Sellisel juhul kirjutatakse puhvrifail üle.

Võimaldab käsurea parameetriga lugeda veebist uued andmed ja kuvada välja vaid need, mida puhvris veel ei ole (kui puhver puudub, siis kuvatakse kõik tulemused). Seda saad testida selliselt, et kustutad oma puhvrifailist mõned kirjed ära ja kordad päringut.

Sorteerimine - 2p

Võimaldab tulemusi sorteerida pildi nime, pildi autori nime, pildi tegemise kuupäeva järgi. (1p)

Sorteerida saab ka tagurpidises järjekorras (reverse / descending). (1p)

Ülesanded (täpsustub): piltide sortimine, cache'imine, unikaalsed pildid (kui küsida näiteks harjumaa ja tallinn, siis programm peab ID järgi cache'ima mittekorduvad pildid)