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):


















8 Comments »