A tempo perso sto preparando una sveglia con Raspberry PI, che al momento di suonare si colleghi ad un sistema meteo, scarichi le informazioni e
le pronunci tramite un sintetizzatore vocale.
Il primo passo è quindi quello di sviluppare un sistema che possa comprendere le condizioni meteo esterne. Ho trovato il servizio di API Yahoo Weather e me ne sono innamorato!
Di seguito è mostrato il codice dello script php che ho sviluppato: utilizza le funzioni curl per interfacciarsi con le API che rispondono in JSON, ho mappato i codici delle condizioni meteo in italiano (
come da documentazione ufficiale) e ho scovato su stackoverflow una
funzione per tradurre la direzione del vento da gradi alle classiche direzioni da rosa dei venti.
<?php
//Tradotto in php dall'originale
//http://stackoverflow.com/questions/7490660/converting-wind-direction-in-angles-to-text-words
function degToCompass($num) {
$val=floor(($num/22.5)+.5);
$arr=["N","NNE","NE","ENE","E","ESE", "SE", "SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"];
return $arr[($val % 16)];
}
$condizioni = array(
"0"=> "tornado",
"1"=> "tempesta tropicale",
"2"=> "uragano",
"3"=> "forti temporali",
"4"=> "temporali",
"5"=> "pioggia mista a neve",
"6"=> "pioggia mista a nevischio",
"7"=> "neve mista a nevischio",
"8"=> "pioviggine gelata",
"9"=> "pioggerella",
"10"=> "pioggia gelata",
"11"=> "rovesci",
"12"=> "rovesci",
"13"=> "raffiche di neve",
"14"=> "rovesci di neve leggeri",
"15"=> "soffia neve",
"16"=> "neve",
"17"=> "grandinare",
"18"=> "nevischio",
"19"=> "polvere",
"20"=> "nebbioso",
"21"=> "foschia",
"22"=> "foschia",
"23"=> "ventoso",
"24"=> "ventoso",
"25"=> "freddo",
"26"=> "nuvoloso",
"27"=> "Sereno",
"28"=> "Sereno",
"29"=> "parzialmente nuvoloso",
"30"=> "parzialmente nuvoloso",
"31"=> "Sereno",
"32"=> "soleggiato",
"33"=> "Sereno",
"34"=> "Sereno",
"35"=> "pioggia mista e grandine",
"36"=> "caldo",
"37"=> "isolati temporali",
"38"=> "temporali sparsi",
"39"=> "temporali sparsi",
"40"=> "Rovesci sparsi",
"41"=> "tormenta di neve",
"42"=> "rovesci di neve sparsi",
"43"=> "tormenta di neve",
"44"=> "parzialmente nuvoloso",
"45"=> "rovesci temporaleschi",
"46"=> "rovesci di neve",
"47"=> "Temporali isolati",
"3200"=> "non disponibile"
);
$BASE_URL = "http://query.yahooapis.com/v1/public/yql";
$yql_query = 'select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="Rimini, Italy") and u="c"';
$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json";
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
$json = curl_exec($session);
$phpObj = json_decode($json);
echo "\nMeteo per Rimini\n";
echo "----------------\n";
echo "Temperatura: ";
echo $phpObj->query->results->channel->item->condition->temp."° C\n";
echo "Condizioni meteo: ";
echo $condizioni[$phpObj->query->results->channel->item->condition->code]."\n";
echo "Alba: ";
echo $phpObj->query->results->channel->astronomy->sunrise."\n";
echo "Tramonto: ";
echo $phpObj->query->results->channel->astronomy->sunset."\n";
echo "Umidità: ";
echo $phpObj->query->results->channel->atmosphere->humidity."%\n";
echo "Pressione: ";
echo $phpObj->query->results->channel->atmosphere->pressure." millibar\n";
echo "Previsioni: ";
echo $condizioni[$phpObj->query->results->channel->item->forecast[0]->code];
echo ", t. max ".$phpObj->query->results->channel->item->forecast[0]->high;
echo "° C, t. min ".$phpObj->query->results->channel->item->forecast[0]->low." °C \n";
echo "Vento: ";
echo $phpObj->query->results->channel->wind->speed." km/h ";
echo degToCompass($phpObj->query->results->channel->wind->direction)."\n";