Consulter l'avancement des upload asynchrone avec l'API de Flickr, PHPFlickr et Oauth

Comment faire pour consulter le statut d'un upload asynchrone en cours? Comment récupérer l'identifiant de la photo une fois le transfert finis? Je répondrai à ces questions dans ce billet.

Introduction

Je ne vais pas re-présenter Flickr. Pour ceux qui ne le connaissent toujours pas, rendez vous sur le billet lister les albums d'un utilisateur Flickr. Aujourd'hui, nous découvrirons la méthodephotos_upload_checkTickets(). Elle nous permettra de vérifier le statut des uploads asynchrones en cours.

Pré-requis

Les pré-requis seront identiques au billet Authentification à Flickr via API, Oauth et PHPFlickr. Je vous invite donc à consulter ce billet pour en savoir d'avantage sur les éléments nécessaires pour ce tutoriel.

Attention ! Il est impératif d'utiliser la classe PHPFlickr mise à disposition sur ce site. Si vous avez trouvé PHPFlickr sur un autre site que DantSu.com, il ne contiendra pas l'authentification Oauth.

Détails de photos_upload_checkTickets()

Cette méthode permet de contrôler l'avancement d'un ou plusieurs uploads asynchrones. Elle requiert 1 paramètre obligatoire.

$f = new phpFlickr($cle_api, $cle_secret_api);
$f->setOauthToken($oauth_token, $oauth_secret);
$tickets = $f->async_upload($url_img_src, $titre, $description, $tags, $is_public, $is_friend, $is_family);
$checkTickets = $f->photos_upload_checkTickets($tickets);
  • $tickets (Obligatoire) un pour plusieurs tickets séparés par des virgules.

La méthode retourne les éléments dans un tableau PHP. Il est composé comme ceci :


[{
    id       : id de la transaction
    complete : 0=En cours, 1=Réussis, 2=Echec
    //Si la photo est uploadée :
    photoid  : Id de la photo
},
...]

Comment utiliser photos_upload_checkTickets()

Voici un exemple qui uploadera une image sur Flickr et qui la rangera dans un album une fois le transfert terminé. Je vous préviens, cet exemple est complètement absurde et ne doit jamais être utilisé dans vos codes.

$f = new phpFlickr($cle_api, $cle_secret_api);
$f->setOauthToken($oauth_token, $oauth_secret);
$tickets = $f->async_upload(PATH_RES.'IMAG0155.jpg', "Photo Uploadé avec l'API", "Photo Uploadé avec l'API", "upload photo api", 1, 1, 1);
while (true) {
     $checkTickets = $f->photos_upload_checkTickets($tickets);
     if($checkTickets[0]['complete'] == 0)
         echo "Upload en cours...";
     elseif($checkTickets[0]['complete'] == 1)
     {
         $f->photosets_addPhoto($id_album, $checkTickets[0]['photoid']);
         echo "Image uploadé avec succès!";
         break;
     }
     elseif($checkTickets[0]['complete'] == 2)
     {
         echo "Echec de l'upload!";
         break;
     }
     sleep(2);
}

Cette exemple utilise async_upload() et photosets_addPhoto()