Dashboard in SVG

luca 22 gennaio 2012 8

PHP e Pachube

Per poter ricevere dei dati da Pachube, è necessaria una api key, legata al proprio account. Dal sito web di Pachube è possibile generare keys con diversi privilegi; per leggere i dati da un feed è sufficiente assegnare READ come permitted methods:

Nel file PHP vengono definite alcune costanti per la connessione a Pachube: la api key indicata sopra, il feed id, il datastream id e la posizione del campo da utilizzare all’interno della riga (normalmente ogni riga ricevuta ha il formato <datastream_id>,<timestamp>,<value>):

define("API_KEY", "myapikey");
define("FEED_ID", 29689);
define("DATASTREAM_ID", 0);
define("ELEMENT_POSITION", 2);

Per semplicità scegliamo la modalità di ricezione dati in CSV, costruendo l’URL come indicato nella guida:

$feed_url = "http://api.pachube.com/v2/feeds/" . FEED_ID . ".csv?datastreams=" . DATASTREAM_ID;

Per il collegamento al sito web di Pachube, utilizziamo la libreria cURL: con il metodo curl_init otteniamo un handle legato all’URL del feed di Pachube. Prima di eseguire la connessione, impostiamo le proprietà RETURNTRANSFER per ottenere da cURL la risposta del server e HTTPHEADER per specificare la nostra api key:

$curl_handle = curl_init($feed_url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('X-PachubeApiKey: ' . API_KEY));
$out = curl_exec($curl_handle);

Una volta effettuata la connessione, controlliamo l’HTTP_CODE restituito dal server di Pachube: se tale codice è 200, significa che la connessione è andata a buon fine e che Pachube ci ha restituito il valore richiesto. Dividiamo la risposta ottenuta usando come separatore la virgola (formato CSV) e prendiamo l’elemento che ci interessa:

$http_code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
if($http_code == "200") {
  $elements = explode(",", $out);
  $element = $elements[ELEMENT_POSITION];
}

Infine creiamo un iframe per visualizzare il termometro passando il valore letto da Pachube:

echo "<iframe src="thermometer.php?value=$element" frameborder="0" width="320" height="240"></iframe>;

Il risultato (con attiva la modalità di debug):

Pagine: 1 2 3 4

8 Comments »

Leave A Response »