Flickr e le sue API
Posted Gennaio 27th, 2007 by adminFlickr offre un servizio per la condivisione di immagini con tanto di gruppi, strumenti per l’organizzazione delle proprie foto, blog…..
Oggi voglio proporvi un tutorial su come sfruttare le API messe a disposizione da Flickr (raggiungibili a questo indirizzo) tramite PHP.
Prima di tutto dobbiamo procurarci in una chiave di licenza semplicemente richiedendola a Flickr dopo essersi scritti;
quindi useremo la funzione flickr.photos.search per la ricerca di fotografie all’interno dal portale; in PHP utilizzeremo un parametro “format” con valore “php_serial” per ottenere una risposta serializzata dalle API, in seguito tale risposta verrà de-serializzata tramite la funzione unserialize().
Otterremo una struttura di tipo JASON che useremo per costruire l’URL della foto; ma passiamo subito ai fatti:
#
# creiamo i parametri da passare all' API nell'URL
#
$params = array(
'api_key' => '81e7e11aeac57ac668609d316f6388ce',
'method' => 'flickr.photos.search',
'tags' => 'italy';
'format' => 'php_serial',
);
il primo parametro è la chiave che c’è stata fornita, il parametro method indica invece quale metodo delle API verrà richiamato, tags sono i tag relativi all’immagine che stiamo cercando (in questo caso verranno fornite le immagini con tag ‘italy’) ed infine il parametro ‘format’ di cui abbiamo già detto.
$encoded_params = array();
foreach ($params as $k => $v){
$encoded_params[] = urlencode($k).’=’.urlencode($v);
}
questa funzione serve semplicemente a trasformare i parametri contenuti nell’array (sia le chiavi che i valori) in maniera d’essere interpretabili correttamente come una URL.
#
# chiama l'API e decodifica la risposta
#
$url = "http://api.flickr.com/services/rest/?".implode('&', $encoded_params);
$rsp = file_get_contents($url);
$rsp_obj = unserialize($rsp);
viene quindi costruita una URL con i parametri contenuti nell’array che chiama l’API e la cui risposta viene de-serializzata ed utilizzabile d’ora in poi nella variabile $rsp_obj.
#
# mostriamo la foto corrispondente al primo risultato
#
if ($rsp_obj['stat'] == ‘ok’){
$tmp = $rsp_obj['photos']['photo'];
$farm = $tmp[0]['farm'];
$server=$tmp[0]['server'];
$id = $tmp[0]['id'];
$secret = $tmp[0]['secret'];
$addr=”http://farm”.$farm.”.static.flickr.com/”.$server.”/”.$id.”_”.$secret.”_t.jpg”;
echo(”<img alt=\”italy\” src=\”".$addr.”\”/>”);
}
la risposta che otteniamo è in formato JSON quindi ogni elemento è rappresentato da un oggetto JSON, gli attributi dell’elemento sono membri dell’oggetto con un valore stringa mentre i suoi figli sono membri dell’oggetto e con un valore di tipo oggetto, per maggiori informazioni visitate json.org.
Da PHP JASON è visto come un’array n-dimensionale, quindi se l’elemento ’stat’ ha valore ‘ok’ vuol dire che la risposta è stata accettata. Ci spostiamo sull’elemento ‘photo’ all’interno dell’oggetto ‘photos’ e operiamo sul primo risultato (quello cioè con indice 0).
Dobbiamo quindi costruire l’indirizzo relativo all’immagine da visualizzare; gli URL di Flickr sono del tipo
http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstb].jpg
dove farm-id, server-id, id e secret sono tutti attributi dell’oggetto JASON ‘photo’ come è facilmente intuibile dal codice; mentre mstb indicano la dimensione dell’immagine:
-m, immagine di massimo 240px di lato;
-s, immagine di 75×75 px;
-t, thumbnail (100px di lato);
-b, immagine di grosse dimensioni (1024 di lato);
la foto del codice precedente sarà quindi un thumbnail.
create quindi le variabili che contengono i diversi parametri e scelta la dimensione non ci rimane altre che costruire l’URL e visualizzare la nostra bella foto!
Ecco qui un esempio di quanto appena detto.
Spero di essere stato utile a chi volesse iniziare a muovere i primi passi con queste API; la parte più difficile stà nell’interpretare correttamente la risposta JASON ma usando l’API Explorer messo a disposizione per tutti i metodi non dovrebbe essere un problema.
Ma avrà mica a che fare con?
4 Responses to “Flickr e le sue API”
Aprile 6th, 2007 at 1:42 am
Oh you saved tons of my time. Thanks a lot.
Aprile 20th, 2007 at 8:27 am
Ciao ho provato ad utilizzare il codice che hai mostrato ma non riesco a farlo funzionare…
fino alla creazione dell’url non ho nessun problema ma
$rsp = file_get_contents($url);
mi ritorna false. Sapresti indicarmi cosa c’è che non va?
Aprile 20th, 2007 at 9:04 pm
allora, la funzione file_get_contents()legge il contenuto di un file, in questo caso quello restituito dall’URL creata ad-hoc al rigo precedente; credo quindi che l’errore sia proprio lì.
Fammi sapere
Settembre 25th, 2007 at 1:22 pm
Nella creazione dell’ array params c’è un errore di digitazione: c’è un ; al posto di una , in corrispondenza dell’elemento ‘italy’.
Forse è quello il problema.
Ero un po’ spaesato durante la prima visione della documentazione delle api di flickr.
Ora è tutto molto piu’ chiaro.
Grazie !!
Leave a Reply