Uploader une image en asynchrone sur Flickr avec PHPFlickr et Oauth

Nous avons vu comment ajouter en synchrone une image dans un albumFlickr. Aujourd'hui, nous uploaderons une image en asynchrone (l’exécution du PHP continuera durant l'upload). Nous nous servirons de l'authentification Oauth...

... ainsi que de la méthode async_upload()

Introduction

Je ne vais pas représenter Flickr. Pour ceux qui ne connaissent toujours pas, rendez vous sur le billet lister les albums d'un utilisateur Flickr. Aujourd'hui, nous découvrirons la méthodeasync_upload. Elle nous permettra d'uploader des nouvelles photos sur Flickr.

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 pource 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 async_upload()

Cette méthode permet d'uploader une image en asynchrone sur le compte Flickr de l'utilisateur authentifié. L'upload n'arrêtera pas l'execution du PHP. Elle requiert un paramètre obligatoire et 6 paramètres optionnels.

$f = new phpFlickr($cle_api, $cle_secret_api);
$f->setOauthToken($oauth_token, $oauth_secret);
$ticket = $f->async_upload($url_img_src, $titre, $description, $tags, $is_public, $is_friend, $is_family);
  • $url_img_src (obligatoire) URL de l'image source (L'image qui sera envoyée sur Flickr).
  • $titre (optionnel) Titre.
  • $description (optionnel) Description.
  • $tags (optionnel) Liste de tags séparés par un espace.
  • $is_public (optionnel) Le public peut il voir votre photo? 1=Oui, 0=Non.
  • $is_friend (optionnel) Les amis peuvent ils voir votre photo? 1=Oui, 0=Non .
  • $is_family (optionnel) La famille peut elle voir votre photo? 1=Oui, 0=Non .

Cette méthode retourne, en cas de réussite, un ticket qui servira à contrôler si l'upload à réussi.

Comment utiliser async_upload()

Voici un exemple qui uploadera une image sur Flickr et qui la rangera dans un album. 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);
}

Le ticket retourné passe en paramètre de photos_upload_checkTickets() afin de suivre l'évolution de l'upload. Une fois terminé, $checkTickets[0]['photoid'] contient l'id de la photo. Cela nous permet de la rangée dans l'album $id_album grâce à photosets_addPhoto().

Conclusion

Pour moi, l'upload asynchrone n'est utile qu'en le couplant avec de l'ajax. De cette manière, il est possible de lancer une liste d'upload tout en faisant patienter l'utilisateur avec une barre de chargement. Sinon autant utiliser l'upload synchrone qui est beaucoup plus facile à mettre en place.