In passato ho parlato più volte di come accedere all’API di Flickr via Php. Non avevo, però, ancora provato ad accedere via cURL, e gli script erano abbastanza lunghi.

Poi mi è venuta la curiosità di provare ad accedere inviando una richiesta REST via libcurl e, con poche righe viene fuori l’output a video.
Insomma, il codice si semplifica moltissimo (ah, se non avete mai usato cURL, è indispensabile leggere i due post precedenti).
E quindi, qui seguiamo lo schema degli ultimi post, con l’avvertenza che sarò sbrigativo sui concetti introduttivi dell’API di Flickr, rinviandovi alla lettura dei post in cui ne ho già parlato.
Ovviamente, prima ricordatevi di chiedere la chiave API (http://www.flickr.com/services/api/keys/apply/).
La URL della richiesta
Il percorso da seguire per accedere via cURL all’API di Flickr parte sempre dall’endpoint REST:
http://api.flickr.com/services/rest/
Alla URL dovremo aggiungere i parametri della richiesta, cioè chiave api, metodo, formato di risposta e argomenti aggiuntivi.
Se utilizziamo il metodo flickr.photos.getInfo, che ci consente di ottenere una serie (corposa) di informazioni su singole fotografie, dovremo specificare tra gli argomenti l’ID della foto:
$api_hey = "MIA_CHIAVE_API";
$format = "rest";
$method = "flickr.photos.getInfo";
$photo_id = "ID_MIA_FOTO";
Il codice necessario alla costruzione dell’URL diventa:
$params = array(
'api_key' => '787b8623c59bd1c17434d988108711a3',
'method' => 'flickr.photos.getInfo',
'photo_id' => '3569999657',
'format' => 'rest',
);
$encoded_params = array();
foreach ($params as $k => $v){
$encoded_params[] = urlencode($k).'='.urlencode($v);
}
$url = "http://api.flickr.com/services/rest/?".implode('&', $encoded_params);
Invochiamo l’API via libcurl
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
Avrete notato che il protocollo di trasmissione è http, e non https come nel caso di delicious. Questo significa che non ci servirà la versione di cURL con supporto SSL (Se siete utenti di sistemi win32, l’istallazione della versione SSL di cURL potrebbe essere alquanto noiosa).
Ripeto ancora che, se lavorate su un sistema *nix, cURL è già presente nella vostra istallazione lampp, quindi dovrete solo preoccuparvi del codice.
Manipoliamo i dati
$xml = simplexml_load_string($result);
if($xml['stat'] == "ok"){
echo "Photo id: " . $xml->photo['id'] . "<br />";
echo "Photo secret: " . $xml->photo['secret'] . "<br />";
echo "Photo server: " . $xml->photo['server'] . "<br />";
echo "Photo farm: " . $xml->photo['farm'] . "<br />";
echo "Photo originalsecret: " . $xml->photo['originalsecret'] . "<br />";
echo "Photo originalformat: " . $xml->photo['originalformat'] . "<br />";
echo "Owner nsid: " . $xml->photo->owner['nsid'] . "<br />";
echo "Owner username: " . $xml->photo->owner['username'] . "<br />";
echo "Title: " . $xml->photo->title . "<br />";
}else{
echo "non hai vinto, ritenta.";
}
Se avete letto il post precedente, questo codice non ha bisogno di commenti. Se Flickr risponde positivamente, allora mostriamo i dati a schermo.
Vediamo la foto
Ora che abbiamo tutti i dati, possiamo utilizzarli per costruire le URL delle fotografie e, quindi, mostrarle a schermo.
Per visualizzare una foto è, ovviamente, necessario conoscere la struttura della URL:
http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstb].jpg
I parametri da inserire, quindi, sono:
{farm-id}
{server-id}
{id}
{secret}
[mstb]
I primi 4 dati vengono restituiti da Flickr nel blocco XML. Dando un’occhiata al codice di sopra, i valori sono dati da:
$xml->photo['farm']
$xml->photo['server']
$xml->photo['id']
$xml->photo['secret']
L’ultimo dato, invece, lo stabiliamo noi quando impostiamo le dimensioni dell’immagine da visualizzare:
s: quadratino 75 x 75
t: miniatura, 100 sul lato più lungo
m: piccolo, 240 sul lato più lungo
-: medio, 500 sul lato più lungo
b: grande, 1024 sul lato più lungo (solo per immagini originali molto grandi)
o: immagine originale jpg, gif o png, in base al formato di origine
Un miniatura di 240px della foto di sopra, avrà la seguente URL:
http://farm4.static.flickr.com/3324/3569999657_47a970a1ca_m.jpg
E questa è l’anteprima. Ma la pagina originale? Anche in questo caso, la URL si struttura secondo un modello stabilito:
http://www.flickr.com/photos/{user-id}/{photo-id}
Anche in questo caso, dal codice precedente ricaviamo i dati che occorrono:
$xml->photo->owner['nsid']
$xml->photo['id']
e quindi:
http://www.flickr.com/photos/13667501@N02/3569999657
A questo punto, possiamo inserire nella nostra pagina sia la miniatura, sia il link alla foto originale:

Detto questo, rinvio alla lettura della reference ufficiale alla costruzione delle URL di Flickr:
http://www.flickr.com/services/api/misc.urls.html
Continua…