30 votes

Comment obtenir les photos d'un album en utilisant l'API de Facebook ?

Cela devrait être assez courant, mais je n'arrive pas à le faire fonctionner. Ce que je voudrais faire, c'est récupérer les photos de l'album de Facebook. J'implémente ceci sur un site web.

Je peux obtenir les albums en utilisant ce code :

function getAlbumPhotos(){
            FB.api('/me/albums',  function(resp) {
                //Log.info('Albums', resp);
                var ul = document.getElementById('albums');
                for (var i=0, l=resp.data.length; i<l; i++){
                    var
                        album = resp.data[i],
                        li = document.createElement('li'),
                        a = document.createElement('a');
                    a.innerHTML = album.name;
                    a.href = album.link;
                    li.appendChild(a);
                    ul.appendChild(li);
                }
            });
        };

le resp renvoie un tableau de données qui contient les liens vers les albums photos MAIS je voudrais les sources des images pour chaque album et je ne vois rien que je puisse utiliser dans les données du resp. L'objet de données contient un lien vers l'album mais pas les images individuelles.

Selon la documentation de Facebook, les photos sont des "connexions" aux albums. Je ne suis pas sûr de ce que cela signifie mais leur doc montre que vous pouvez obtenir des photos individuelles.

De ce lien :

[http://developers.facebook.com/docs/reference/api/album/][1]

il montre le json( ?) renvoie le lien, l'id, le nom, etc... que je suis capable d'obtenir. Cependant, en bas de cette page se trouvent des "connexions" à l'album qui comprend des photos, des commentaires, des images. Lorsque je clique sur les photos, la structure de données JSON s'affiche, y compris le src de l'image. La question est : comment puis-je obtenir cela ? Cela semble si simple, mais je n'arrive pas à le faire fonctionner.

J'ai essayé

FB.api('/me/photos',function(resp) ...

et

FB.api('/me/photo',function(resp) ...

photos ne renvoie rien alors que photo renvoie undefine.

Des exemples de code seront très appréciés.

47voto

ifaour Points 29213
  1. Dès le premier appel, vous obtenez tous les albums (et leurs identifiants). '/me/albums'
  2. de là, vous pouvez obtenir l'image de l'album (couverture) '/'+album.id+'/picture'
  3. ET les photos de l'album '/'+album.id+'/photos'

3voto

Karl Kastan Points 31

Vous pouvez également essayer

/_ABLUM_ID_/photos

sur l'api graphique, c'est-à-dire

https://graph.facebook.com/12341234/photos

où 12341234 est l'identifiant de l'objet album de l'album dont vous voulez obtenir les photos.

2voto

chaitsi Points 21
FB.api("/"+albumid+"/photos",function(response){
    var photos = response["data"];
    document.getElementById("photos_header").innerHTML = "Photos("+photos.length+")";
    for(var v=0;v<photos.length;v++) {
        var image_arr = photos[v]["images"];

        var subImages_text1 = "Photo "+(v+1);

        //this is for the small picture that comes in the second column
        var subImages_text2 = '<img src="'+image_arr[(image_arr.length-1)]["source"]+'" />';

        //this is for the third column, which holds the links other size versions of a picture
        var subImages_text3 = "";

        //gets all the different sizes available for a given image
        for(var j = 0 ;j<image_arr.length;j++) {
            subImages_text3 += '<a target="_blank" href="'+image_arr[j]["source"]+'">Photo('+image_arr[j]["width"]+"X"+image_arr[j]["height"]+')</a><br/>';
        }
        addNewRow(subImages_text1,subImages_text2,subImages_text3);
    }
});

1voto

bini Points 1
        <script src="http://connect.facebook.net/en_US/all.js"></script>

        <script type="text/javascript">
            var loggedIn = false;        

            function loginFacebook() 
            {
                //initializes the facebook API
            }        

            function loadAlbums()
            {            
                 FB.init({
            appId  : '345203265493024',
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true  // parse XFBML
              });

FB.login(function(response)
{
if (response.authResponse)
 {

//Logged in and accepted permissions!

       document.getElementById("status").innerHTML = "Getting album information from your Facebook profile";
                var counter = 0;

      // Start Normal API
                FB.api('/me/albums', function(response) 
                {

                  var d=response.data;

                  for (var i=0, l=d.length; i<l; i++)
                    {
                        addOption(response["data"][i].name,response["data"][i].id);
                        counter++;

                    }
                    document.getElementById("status").innerHTML = "There are "+ counter +" albums in your Facebook profile";
                });

                 //end of  Normal API

        document.getElementById("albumBtn").style.visibility="hidden";   

}
},{scope:'read_stream,publish_stream,offline_access,user_photos,friends_photos,user_photo_video_tags,friends_photo_video_tags'});

            }

            //Adds a new option into the drop down box
            function addOption(opText,opVal) 
            {
                var v = document.getElementById("albumsList");             
                v.innerHTML += '<br/><a  href="facebookphotos.aspx?album='+opVal+'&name='+opText+'">'+opText+'</a>';               
            }

            function init() 
            {
                var v1 = document.getElementById("albumBtn");
                v1.onclick = loadAlbums;
                // v1.style.visibility= "hidden";             
            }

            //calls init function once all the resources are loaded
            window.addEventListener("load",init,true);
        </script>      

this code works

1voto

Nino Paolo Points 371

Vous pouvez utiliser cette api :

$photos = $facebook->api('/me?fields=albums.limit(50).fields(photos.limit(50).fields(id,source))') ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X