L’API di Flickr: il metodo flickr.photos.getInfo (2)

Nella documentazione dell’API di Flickr vengono illustrati i formati con cui si inviano le richieste e si ricevono i dati.

Il formato più semplice per una richiesta è il formato REST. Ora, se volessimo ottenere una risposta che possa essere manipolata attraverso del codice PHP, è proprio la documentazione ufficiale che ci suggerisce come fare.

Per ricevere la risposta in un formato compatibile con PHP, bisognerà inviare, con la richiesta, un parametro aggiuntivo, format, e attribuirgli il valore php_serial.

Grazie a questo parametro, otterremo una risposta in formato PHP5 serializzato. La serializzazione serve a passare dati senza perderne il tipo e la struttura. Php gestisce questo passaggio di dati con le funzioni serialize() e unserialize().

Prima di tutto bisogna creare l’array dei parametri che utilizzeremo per costruire l’URL della chiamata:

$params = array(
  'api_key'  => 'tua_chiave_API',
  'method'   => 'flickr.photos.getInfo',
  'photo_id' => '3171374536',
  'format'   => 'php_serial',
);

I parametri che abbiamo definito nell’array sono tutti obbligatori. La vostra chiave API, prima di tutto, poi il metodo da invocare con la chiamata, l’ID della foto, che abbiamo visto essere obbligatorio per il metodo flickr.photos.getInfo, infine il parametro che richiede la risposta in formato Php serializzato.

Assembliamo ora i parametri in un nuovo array, che ci consentirà successivamente di costruire l’URL della richiesta:

$encoded_params = array();
foreach ($params as $k => $v){
$encoded_params[] = urlencode($k).'='.urlencode($v);
}

Ora inviamo l’URL a Flickr e deserializziamo la risposta:

$url = "http://api.flickr.com/services/rest/?" . implode('&', $encoded_params);
$rsp = file_get_contents($url);
$rsp_obj = unserialize($rsp);

A questo punto abbiamo ricevuto i dati secondo una struttura JSON, quindi come un array multidimensionale facilmente gestibile via Php.

Ed ecco come, via Php, si accede ai dati della risposta Flickr, attraverso l’array associativo multidimensionale $rsp_obj:

# Verifica se Flickr ha risposto correttamente
if ($rsp_obj['stat'] == 'ok'){
  $photo_title = $rsp_obj['photo']['title']['_content'];
  echo "Il titolo è $photo_title!";
}else{
  echo "Chiamata fallita!";
}

Qui si ferma il tutorial fornito dalla documentazione di Flickr. Noi, invece, vogliamo un elenco completo di tutti i dati accessibili attraverso il metodo flickr.photos.getInfo.

Accederemo ai dati di ogni nodo XML seguendo lo stesso schema.
Come abbiamo visto nel post precedente, il nodo padre è photo:

# Verifica se Flickr ha risposto correttamente
if ($rsp_obj['stat'] == 'ok'){
  # Valori degli attributi del nodo photo
  $photo_id = $rsp_obj['photo']['id'];
  $photo_secret = $rsp_obj['photo']['secret'];
  $photo_server = $rsp_obj['photo']['server'];
  $photo_isfavorite = $rsp_obj['photo']['isfavorite'];
  $photo_license = $rsp_obj['photo']['license'];
  $photo_rotation = $rsp_obj['photo']['rotation'];
  $photo_originalsecret = $rsp_obj['photo']['originalsecret'];
  $photo_originalformat = $rsp_obj['photo']['originalformat'];

  echo 'Valori degli attributi del nodo photo: ';
  echo 'ID: ' . $photo_id . '; ';
  echo 'secret: ' . $photo_secret . '; ';
  ...

}else{
  echo "Chiamata fallita!";
}

Ovviamente, avremmo fatto un lavoro più pulito con un array associativo, ma raffineremo il codice nei prossimi post.

Annunci