This shows you the differences between two versions of the page.
eim:colocvii:colocviu02 [2020/03/22 22:37] dragos.niculescu [Model de Subiect] |
eim:colocvii:colocviu02 [2021/05/30 21:52] (current) dan_valentin.bina [Observații Generale] |
||
---|---|---|---|
Line 7: | Line 7: | ||
</HTML> | </HTML> | ||
- | {{url>https://ocw.cs.pub.ro/courses/_media/eim/colocvii/colocviu02/eim2018-tp02-varsim.pdf 90%,800px}} | + | {{url>https://ocw.cs.pub.ro/courses/_media/eim/colocvii/colocviu02/eim-colocviu2-exemplu.pdf 90%,800px}} |
<HTML> | <HTML> | ||
Line 53: | Line 53: | ||
dependencies { | dependencies { | ||
... | ... | ||
- | compile group: 'cz.msebera.android', name: 'httpclient', version: '4.4.1.2' | + | implementation group: 'cz.msebera.android', name: 'httpclient', version: '4.4.1.2' |
} | } | ||
</file> | </file> | ||
Line 67: | Line 67: | ||
dependencies { | dependencies { | ||
... | ... | ||
- | useLibrary 'org.apache.http.legacy' | + | implementation 'org.apache.http.legacy' |
} | } | ||
</file> | </file> | ||
Line 79: | Line 79: | ||
dependencies { | dependencies { | ||
... | ... | ||
- | compile project (':jsoup-1.10.2') | + | implementation project (':jsoup-1.10.2') |
} | } | ||
</file> | </file> | ||
Line 99: | Line 99: | ||
===== Rezolvări ===== | ===== Rezolvări ===== | ||
- | Proiectul Android Studio corespunzător aplicației Android ce conține rezolvările complete ale cerințelor colocviului sunt disponibile pe [[https://github.com/eim2017/PracticalTest02|contul de Github al disciplinei]]. | + | Proiectul Android Studio corespunzător aplicației Android ce conține rezolvările complete ale cerințelor colocviului sunt disponibile pe [[https://github.com/eim-lab/PracticalTest02|contul de Github al disciplinei]]. |
**1.** **a)** Se accesează [[https://www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//. | **1.** **a)** Se accesează [[https://www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//. | ||
Line 127: | Line 127: | ||
<code> | <code> | ||
- | student@eim2017:~$ git clone https://www.github.com/perfectstudent/PracticalTest02 | + | student@eim:~$ git clone https://www.github.com/perfectstudent/PracticalTest02 |
</code> | </code> | ||
Line 424: | Line 424: | ||
* în situația în care informațiile meteorologice se găsesc în obiectul gestionat de server, sunt preluate local; | * în situația în care informațiile meteorologice se găsesc în obiectul gestionat de server, sunt preluate local; | ||
* în situația în care informațiile meteorologice nu se găsesc în obiectul gestionat de server, sunt preluate prin interogarea serviciului Internet, la distanță: | * în situația în care informațiile meteorologice nu se găsesc în obiectul gestionat de server, sunt preluate prin interogarea serviciului Internet, la distanță: | ||
- | * se realizează o cerere de tip ''POST'' la adresa Internet [[http://www.wunderground.com/cgi-bin/findweather/getForecast]]; parametrul care trebuie precizat este ''query'' și are valoarea orașului pentru care se dorește să se obțină informațiile; acesta se atașează cererii de tip ''POST'', folosind codificarea ''UTF-8''; | + | * o cerere de tip ''GET'' în care valoarea parametrului este inclusă în cadrul adresei Internet: [[http://api.openweathermap.org/data/2.5/weather?q=Bucharest&appid=...]]); |
- | * alternativ, se poate realiza o cerere de tip ''GET'' în care valoarea parametrului este inclusă în cadrul adresei Internet: [[https://www.wunderground.com/cgi-bin/findweather/getForecast?query=...]]); | + | |
* se obține răspunsul sub forma unui șir de caractere, reprezentând codul sursă al paginii Internet; | * se obține răspunsul sub forma unui șir de caractere, reprezentând codul sursă al paginii Internet; | ||
* folosind biblioteca Jsoup, se inspectează documentul în format HTML furnizat pentru a determina locația la care sunt disponibile informațiile necesare <code html> | * folosind biblioteca Jsoup, se inspectează documentul în format HTML furnizat pentru a determina locația la care sunt disponibile informațiile necesare <code html> | ||
- | <script> | + | { |
- | wui.asyncCityPage = true; | + | "coord": { |
- | wui.bootstrapped.API = ""; | + | "lon": 26.11, |
- | wui.api_data = | + | "lat": 44.43 |
- | { | + | }, |
- | "response": { | + | "weather": [ |
- | "version": "2.0", | + | { |
- | "units": "metric", | + | "id": 804, |
- | "location": { | + | "main": "Clouds", |
- | "name": "Bucuresti", | + | "description": "overcast clouds", |
- | "neighborhood":null, | + | "icon": "04n" |
- | "city": "Bucuresti", | + | |
- | "state": null, | + | |
- | "state_name":"Romania", | + | |
- | "country": "RO", | + | |
- | "country_iso3166":null, | + | |
- | "country_name":"Romania", | + | |
- | "zip":"00000", | + | |
- | "magic":"11", | + | |
- | "wmo":"15420", | + | |
- | "latitude":44.50000000, | + | |
- | "longitude":26.12999916, | + | |
- | "elevation":91.00000000, | + | |
- | "l": "/q/zmw:00000.11.15420" | + | |
- | }, | + | |
- | "date": { | + | |
- | ... | + | |
- | }, | + | |
- | "current_observation": { | + | |
- | "source": "PWS", | + | |
- | "station": { | + | |
- | ... | + | |
- | }, | + | |
- | "estimated": null, | + | |
- | "date": { | + | |
- | ... | + | |
- | }, | + | |
- | "metar": "AAXX 16161 15420 22997 80502 10201 20109 30072 40180 55008 8807/ 333 55300 0//// 20454", | + | |
- | "condition":"Overcast", | + | |
- | "temperature": 21.5, | + | |
- | "humidity":48, | + | |
- | "wind_speed":6.9, | + | |
- | ..., | + | |
- | "pressure": 1018, | + | |
- | ..., | + | |
- | } | + | |
} | } | ||
- | }; | + | ], |
- | </script> | + | "base": "stations", |
- | </code> Se observă faptul că informațiile necesare se regăsesc în cadrul unei etichete de tip ''<script> ... </script>'' care conține un obiect denumit ''wui.api_dat'' exprimat în format JSON. În acest sens, se obține lista tuturor etichetelor de tip ''script'' (se folosește metoda ''getElementsByTag()''), se preia conținutul acestora (prin intermediul metodei ''data()'' din cadrul clasei ''Element'') și se verifică dacă se regăsește șirul de caractere ''wui.api_dat''; | + | "main": { |
+ | "temp": 284.65, | ||
+ | "feels_like": 283.92, | ||
+ | "temp_min": 283.15, | ||
+ | "temp_max": 285.93, | ||
+ | "pressure": 1016, | ||
+ | "humidity": 81 | ||
+ | }, | ||
+ | "visibility": 10000, | ||
+ | "wind": { | ||
+ | "speed": 0.5, | ||
+ | "deg": 310 | ||
+ | }, | ||
+ | "clouds": { | ||
+ | "all": 88 | ||
+ | }, | ||
+ | "dt": 1588887122, | ||
+ | "sys": { | ||
+ | "type": 1, | ||
+ | "id": 6911, | ||
+ | "country": "RO", | ||
+ | "sunrise": 1588906577, | ||
+ | "sunset": 1588958868 | ||
+ | }, | ||
+ | "timezone": 10800, | ||
+ | "id": 683506, | ||
+ | "name": "Bucharest", | ||
+ | "cod": 200 | ||
+ | } | ||
+ | </code> | ||
* se inspectează documentul în format JSON pentru a obține informațiile necesare: se obțin, succesiv, obiectele atașate ca valori pentru cheile ''response'' → ''current_observation'' și ulterior datele meteorologice, regăsite ca valori sub cheile ''temperature'', ''wind_speed'', ''condition'', ''pressure'', ''humidity''; | * se inspectează documentul în format JSON pentru a obține informațiile necesare: se obțin, succesiv, obiectele atașate ca valori pentru cheile ''response'' → ''current_observation'' și ulterior datele meteorologice, regăsite ca valori sub cheile ''temperature'', ''wind_speed'', ''condition'', ''pressure'', ''humidity''; | ||
* se construiește un obiect de tipul ''WeatherForecastInformation'' folosind informațiile furnizate și se transmite către server pentru ca acesta să fie utilizat ulterior pentru cereri provenite de la alți clienți, vizând același oraș. | * se construiește un obiect de tipul ''WeatherForecastInformation'' folosind informațiile furnizate și se transmite către server pentru ca acesta să fie utilizat ulterior pentru cereri provenite de la alți clienți, vizând același oraș. | ||
Line 724: | Line 717: | ||
<code> | <code> | ||
- | student@eim2017:~$ nc 192.168.56.101 5000 | + | student@eim:~$ nc 192.168.56.101 5000 |
Bucuresti | Bucuresti | ||
all | all | ||
Line 737: | Line 730: | ||
<code> | <code> | ||
- | C:\Users\Eim2017> telnet 192.168.56.101 5000 | + | C:\Users\Eim> telnet 192.168.56.101 5000 |
Bucuresti | Bucuresti | ||
all | all | ||
Line 758: | Line 751: | ||
<code> | <code> | ||
- | student@eim2017:~/PracticalTest02$ git add * | + | student@eim:~/PracticalTest02$ git add * |
- | student@eim2017:~/PracticalTest02$ git commit -m "finished tasks for PracticalTest02" | + | student@eim:~/PracticalTest02$ git commit -m "finished tasks for PracticalTest02" |
- | student@eim2017:~/PracticalTest02$ git push origin master | + | student@eim:~/PracticalTest02$ git push origin master |
</code> | </code> | ||
Line 766: | Line 759: | ||
<code> | <code> | ||
- | student@eim2017:~/PracticalTest02$ git config --global user.name "Perfect Student" | + | student@eim:~/PracticalTest02$ git config --global user.name "Perfect Student" |
- | student@eim2017:~/PracticalTest02$ git config --global user.email perfectstudent@cs.pub.ro | + | student@eim:~/PracticalTest02$ git config --global user.email perfectstudent@cs.pub.ro |
</code> | </code> | ||
<hidden> | <hidden> |