Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Flickr e PHP: introduzione al web service

Come interagire con Flickr attraverso istruzioni PHP e la libreria gratuita phpFlickr per PHP 4 e PHP 5
Come interagire con Flickr attraverso istruzioni PHP e la libreria gratuita phpFlickr per PHP 4 e PHP 5
Link copiato negli appunti

Flickr, per i pochi che non lo conoscono, è un sito web che offre un servizio di condivisione di foto, e più recentemente anche di filmati, tramite il quale gli utenti possono pubblicare il loro materiale, visualizzare le pubblicazioni degli altri utenti, commentarle o iscriversi a gruppi tematici. L'iscrizione al servizio è gratuita, anche se è prevista una versione "Pro" a pagamento che offre funzionalità aggiuntive e più spazio di archiviazione. Nel marzo del 2005, Flickr è stato acquistato da Yahoo! e questo ha portato all'integrazione dei vecchi account sulla nuova piattaforma. Oltre a ciò, diverse migliorie sono state apportate al servizio, tra cui un innalzamento dei limiti sullo spazio offerto, sia per gli account gratuiti che per quelli a pagamento.

Come molti servizi web in stile 2.0, anche Flickr mette a disposizione degli sviluppatori un web service che permette di interfacciarsi al servizio, consentendo quindi di integrare nella propria applicazione o nel proprio sito web tutte le principali funzionalità disponibili. Anche qui, come per molti altri servizi, il canale di comunicazione è semplicemente HTTP, e la lingua franca è XML: ciò significa che è possibile sfruttare le API di Flickr con un qualsiasi linguaggio di programmazione. Lo scopo di queste pagine è introdurre il lettore all'uso delle API di Flickr, dal punto di vista dello sviluppatore PHP.

Per iniziare

L'architettura del servizio consente di utilizzare diversi formati sia per l'invio delle richieste che per l'interpretazione delle risposte. Sebbene sia possibile implementare tutte le funzionalità in modo autonomo, per semplificare la vita agli sviluppatori sono già presenti diverse librerie Zend Framework Zend_Service funzionalità relative a Flickr

Un progetto più completo, che utilizzeremo nei nostri esempi, è sicuramente phpFlickr

Per consentire alla nostra applicazione di interfacciarsi al servizio, sarà necessario ottenere una chiave termini d'uso del servizio

Ricerca di immagini

Proponiamo ora un primo esempio di codice che ci consente di effettuare una ricerca all'interno dell'archivio pubblico. Questo significa che non è richiesta una procedura di autenticazione.

phpFlickr flickr.photos.search photos_search()
<?php
// Chiave API
$api_key = 'mia-api-key';
// Includo la libreria phpFlickr
require_once('phpflickr/phpFlickr.php');
$flickr = new phpFlickr($api_key);
// Effettuo la ricerca
if (isset($_POST['submit'])) {
    $param = array(
        'text' => $_POST['cerca'],
        'per_page' => 10,
    );
    $result = $flickr->photos_search($param);
    // Gestione dei risultati
    echo '<pre>';
    print_r($result);
    echo '</pre>';
}
// Mostro il form
echo '
<form method="post">
    Fai una ricerca: <input type="text" name="cerca" />
    <input type="submit" name="submit" value="Cerca" />
</form>';
?>

Il codice proposto mostra un banalissimo modulo con un unico campo di testo utilizzato per la ricerca photos_search() $flickr

In questo esempio, come accennato precedentemente, non era necessaria alcuna autenticazione, per cui l'oggetto $flickr die()

I parametri utilizzati per la chiamata di photos_search()

  • text
  • per_page

Alcuni parametri interessanti per la ricerca, oltre a text, possono essere i seguenti:

  • user_id
  • group_id
  • tags
  • tag_mode

Inoltre sono presenti numerosi parametri legati alla localizzazione geografica delle fotografie, alle date di scatto e di upload, alle licenze d'uso, ad altri parametri inerenti le macchine fotografiche utilizzate. Oltre al parametro per_page può essere invece interessante specificare il parametro page, che di default vale 1, per costruire una eventuale paginazione nella ricerca.

Interpretare i risultati della ricerca

Per quanto riguarda l'interpretazione dei risultati, abbiamo semplicemente stampato a video l'array $result photos_search()

  • page
  • pages
  • perpage
  • total
  • photo

All'interno di $result['photo'] troveremo quindi 10 elementi, a loro volta array associativi, costituiti dai seguenti campi:

  • id
  • owner
  • secret
  • server
  • farm
  • title
  • ispublic
  • isfriend
  • isfamily

Alcuni di questi dati ci consentono di ricostruire gli indirizzi URL su flickr.com in cui sono ospitate le immagini o altre informazioni. Ad esempio con l'identificativo della foto e del rispettivo proprietario, possiamo costruire, tra gli altri, i seguenti indirizzi:

Profilo utente:
http://www.flickr.com/people/{owner}/
http://www.flickr.com/photos/{owner}/
http://www.flickr.com/photos/{owner}/{id} 

Utilizzando gli altri identificativi, possiamo recuperare vari URL legati ad una singola foto:

Foto in dimensioni medie:
http://farm{farm}.static.flickr.com/{server}/{id}_{secret}.jpg
http://farm{farm}.static.flickr.com/{server}/{id}_{secret}_s.jpg
http://farm{farm}.static.flickr.com/{server}/{id}_{secret}_t.jpg
http://farm{farm}.static.flickr.com/{server}/{id}_{secret}_m.jpg
http://farm{farm}.static.flickr.com/{server}/{id}_{secret}_b.jpg 

Recuperando il codice precedente, possiamo fare quindi una piccola variazione alla parte relativa alla ricerca, per rendere i risultati più gradevoli da vedere:

// La parte che precede questo blocco rimane uguale al codice di pagina 2

// Effettuo la ricerca
if (isset($_POST['submit'])) {
    $param = array(
        'text' => $_POST['cerca'],
        'per_page' => 10,
    );
    $result = $flickr->photos_search($param);
    // Gestione dei risultati
    foreach ($result['photo'] as $photo) {
        $url_photo = "http://farm{$photo['farm']}.static.flickr.com/{$photo['server']}/{$photo['id']}_{$photo['secret']}.jpg";
        $url_owner = "http://www.flickr.com/photos/{$photo['owner']}";
        $title = empty($photo['title']) ? 'senza titolo' : htmlentities($photo['title']);
        echo '
            <div>
                <a href="' . $url_photo . '">' . $title . '</a>
                pubblicata da <a href="' . $url_owner . '">' . $photo['owner'] . '</a>
            </div>
        ';
    }
}
// La parte che segue questo blocco rimane uguale al codice di pagina 2

Questo codice effettua semplicemente un ciclo sui risultati, stampando a video, su tante righe quante sono le foto ottenute, un link con il titolo della foto (oppure la dicitura "senza titolo" se il campo è vuoto) ed un link con il riferimento al proprietario della foto stessa.

Altri spunti

Prima di concludere, rimandiamo alla documentazione ufficiale dell'API di Flickr classe phpFlickr

Ti consigliamo anche