104 lines
2.5 KiB
ObjectPascal
104 lines
2.5 KiB
ObjectPascal
unit meteoutil;
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
Classes, SysUtils, fpjson, jsonparser;
|
|
|
|
|
|
function calcolaprecipitazione (oggettoJSON:TJSONObject; ora:integer):string;
|
|
function FormattaAstroLinea(linea:string):string;
|
|
function MeseToText(mese:integer):string;
|
|
function stringarichiesta(https:boolean; lat, long: double):string;
|
|
|
|
implementation
|
|
|
|
|
|
function calcolaprecipitazione (oggettoJSON:TJSONObject; ora:integer):string;
|
|
var
|
|
codice:integer;
|
|
precipitazione:string;
|
|
begin
|
|
|
|
codice:=oggettoJSON.FindPath('hourly.weather_code['+inttostr(ora)+']').AsInteger;
|
|
|
|
case codice of
|
|
0: precipitazione:= 'Sereno';
|
|
1: precipitazione:= 'Prev. Sereno';
|
|
2: precipitazione:= 'Parz. Nuvoloso';
|
|
3: precipitazione:= 'Nuvoloso';
|
|
45..48: precipitazione:= 'Nebbia';
|
|
51..57: precipitazione:= 'Pioviggine';
|
|
61..65: precipitazione:= 'Pioggia';
|
|
66..67:precipitazione:= 'Grandine';
|
|
71..77: precipitazione:= 'Neve';
|
|
80..82: precipitazione:= 'Rovesci';
|
|
85..86:precipitazione:= 'Neve';
|
|
95..99:precipitazione:= 'Temporale';
|
|
end;
|
|
|
|
result:=precipitazione;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
function FormattaAstroLinea(linea:string):string;
|
|
var
|
|
mese:string;
|
|
begin
|
|
|
|
mese:=MeseToText(strtoint(copy(linea, 1,2)));
|
|
result:=copy(linea, 5, 2)+' '+copy(mese, 1, 3)+' ' +copy(linea, 16);
|
|
|
|
|
|
|
|
end;
|
|
|
|
|
|
function MeseToText(mese:integer):string;
|
|
begin
|
|
case mese of
|
|
1: result:='Gennaio';
|
|
2: result:='Febbraio';
|
|
3: result:='Marzo';
|
|
4: result:='Aprile';
|
|
5: result:='Maggio';
|
|
6: result:='Giugno';
|
|
7: result:='Luglio';
|
|
8: result:='Agosto';
|
|
9: result:='Settembre';
|
|
10: result:='Ottobre';
|
|
11: result:='Novembre';
|
|
12: result:='Dicembre';
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
function stringarichiesta(https:boolean; lat, long: double):string;
|
|
var
|
|
segnaposto:string;
|
|
defaultseparator:char;
|
|
begin
|
|
if https then segnaposto:='https://' else segnaposto:='http://';
|
|
defaultseparator:=DefaultFormatSettings.DecimalSeparator;
|
|
DefaultFormatSettings.DecimalSeparator:='.'; //fa in modo che venga usato il punto nelle conversioni e non la virgola viene usato il punto e la virgola in base alla provenienza dell'utente di solito
|
|
//per la richiesta serve che rappresentiamo con i punti
|
|
segnaposto:=segnaposto+'api.open-meteo.com/v1/forecast?latitude='+floattostr(lat)+'&longitude='+floattostr(long)+'&hourly=weather_code,temperature_2m,wind_speed_10m,wind_speed_180m,visibility,cloud_cover';
|
|
DefaultFormatSettings.DecimalSeparator:=defaultseparator; //rimette il separatore a quello di default
|
|
result:=segnaposto;
|
|
|
|
end;
|
|
|
|
|
|
end.
|
|
|