2011-06-28 4 views
1

J'utilise l'API Facebook Graph."Facile" Accès à Facebook Photo de profil via l'API graphique

Je voudrais télécharger l'image en taille réelle de toutes les photos de profil de mes utilisateurs.

https://graph.facebook.com/<user alias>/picture Vous donne accès à une miniature de l'image de profil actuelle de l'utilisateur.

Si je veux télécharger le profil complet de la taille de l'utilisateur photo il semble que je dois faire quelque chose comme dans ce pseudo-code ...

# Get albums 
albums = fetch_json('https://graph.facebook.com/<user alias>/albums') 

# Get profile pictures album 
profile_picture_album = albums['data']['Profile Pictures'] # Get profile picture album 

# Get the pictures from that album 
profile_pictures = fetch_json('https://graph.facebook.com/<profile_picture_album_id>/photos') 

# Get the most recent (and therefore current) profile picture 
current_profile_picture = profile_pictures['data'][0] 
image = fetch_image_data(current_profile_picture['source']) 

Le problème est que cela nécessite deux API différents accès et puis le téléchargement de l'image. Et s'il y a beaucoup d'albums ou d'images dans un album, alors je devrai faire face à la pagination.

Il semble qu'il devrait y avoir un moyen plus rapide/plus facile d'accéder à l'image de profil actuelle de l'utilisateur. Quelqu'un en sait-il un?

(FYI: J'arrive d'utiliser Python pour le faire, mais j'imagine que la réponse serait la langue agnostique)

Répondre

7

Je ne pense pas que vous pouvez le faire en une seule étape agréable, mais vous avez quelques Options:

1.

vous pouvez spécifier un argument de type de large quand vous obtenez la photo (si vous obtenez seulement jusqu'à 200px):

http://graph.facebook.com/UID/picture?type=large

2.

Vous pouvez simplement obtenir la photo de couverture du profil photos album - qui est toujours l'image courante de profil:

https://graph.facebook.com/UID/albums?access_token=TOKEN

qui renverra quelque chose le long des lignes de :

{ 
     "id": "123456781234", 
     "from": { 
      "name": "FirstName Surname", 
      "id": "123456789" 
     }, 
     "name": "Profile Pictures", 
     "link": "http://www.facebook.com/album.php?aid=123456&id=123456789", 
     "cover_photo": "12345678912345123", 
     "privacy": "friends", 
     "count": 12, 
     "type": "profile", 
     "created_time": "2000-01-23T23:38:14+0000", 
     "updated_time": "2011-06-15T21:45:14+0000" 
     }, 

Vous pouvez ensuite accéder à:

https://graph.facebook.com/12345678912345123?access_token=TOKEN

Et choisissez une taille d'image:

{ 
    "id": "12345678912345123", 
    "from": { 
     "name": "FirstName Surname", 
     "id": "123456789" 
    }, 
    "name": "A Caption", 
    "picture": "PICTUREURL", 
    "source": "PICTURE_SRC_URL", 
    "height": 480, 
    "width": 720, 
    "images": [ 
     { 
     "height": 608, 
     "width": 912, 
     "source": "PICTUREURL" 
     }, 
     { 
     "height": 480, 
     "width": 720, 
     "source": "PICTUREURL" 
     }, 
     { 
     "height": 120, 
     "width": 180, 
     "source": "PICTUREURL" 
     }, 
     { 
     "height": 86, 
     "width": 130, 
     "source": "PICTUREURL" 
     }, 
     { 
     "height": 50, 
     "width": 75, 
     "source": "PICTUREURL" 
     } 
    ], 
    "link": "FACEBOOK_LINK_URL", 
    "icon": "FACEBOOK_ICON_URL", 
    "created_time": "2000-01-15T08:42:42+0000", 
    "position": 1, 
    "updated_time": "2011-06-15T21:44:47+0000" 
} 

et choisissez votre PICTUREURL de choix.

3.

Avec l'aimable autorisation de this blog:

//get the current user id 
FB.api('/me', function (response) { 

    // the FQL query: Get the link of the image, that is the first in the album "Profile pictures" of this user. 
    var query = FB.Data.query('select src_big from photo where pid in (select cover_pid from album where owner={0} and name="Profile Pictures")', response.id); 
    query.wait(function (rows) { 

    //the image link 
    image = rows[0].src_big; 
    }); 
}); 

que je prends pas de crédit à citer, mais je suis venu avec essentiellement la même requête FQL lors de la lecture autour d'un échantillon de test. Ce mec m'a juste frappé au coup de poing quand je suis allé sur google FB.Data.query.J'imagine que vous devrez l'éditer en python, si vous le voulez en python, alors je pourrais creuser.

+0

de Nice! Le 200px un * pourrait * suffire à mes fins, mais sinon je vais essayer la requête FQL (je vais comprendre le python, pas de soucis.) Merci! –

+0

Très bien, demandez juste si vous avez besoin de clarification! – BeRecursive

+0

FYI, j'ai fini par utiliser la solution 200px 'type = large', mais merci pour la réponse très complète! –

3

Cela montre la version complète d'origine de l'image de profil:

https://graph.facebook.com/someuser/picture?width=9999&height=9999

Questions connexes