cURL, Php e l’API di Flickr

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.

flickr

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…

Annunci

4 thoughts on “cURL, Php e l’API di Flickr

  1. perdona anche tu l’ignoranza, ma non ho mai usato wget.
    sto lavorando con curl per l’assoluta semplicità di accesso alla libreria. davvero eccezionale!
    con poche righe di codice ti consente di accedere a qualsiasi API che utilizza il modello REST.
    Vista la facilità di accesso, sto allargando il discorso ai webservices più disparati, da wolfram a facebook…
    si fanno cose da pazzi 🙂

  2. Scusa ma se invece dovessi cercare per tag senza sapere la photo_id come dovrei fare?

    Grazie

I commenti sono chiusi.