2011-01-12 28 views
6

Esta es una pregunta muy tonta. Soy un principiante con Facebook Javascript SDK. Así que estoy tratando de hacer una imagen del perfil del usuario para mostrar He utilizado este códigoCómo usar FB.api ('/ me/picture') para obtener la imagen del perfil

FB.api('/me', function(response) {  
    document.getElementById('login').style.display = "block"; 
    document.getElementById('login').innerHTML = '<img src="http://graph.facebook.com/' + response.id + '/picture" />'; 
}); 

que funcionaba bien, pero estoy tratando de entender cómo utilizar FB.api('/me/picture') para mostrar la imagen.

Respuesta

0

FB.api('/me/picture') devolverá un redirect a la URL de la imagen, por lo que será de ninguna utilidad para usted:
alt text
La forma en que está utilizando es válida como se menciona en la (sección de lectura) documentation. Tal vez this está relacionado, pero no sé si es totalmente válido o no.

+0

eso es interesante. Me pregunto cuál es el uso para fb.api ('me/picture')? Muchas gracias por la respuesta – user573451

+0

@ user573451: bueno, supongo que la API existe para propósitos del lado del servidor '$ facebook-> api ('/ me/picture');', como guardar la imagen en bruto (¿quizás?) O algo ... pero en lo que concierne al cliente, no creo que sea útil y ya está usando la forma correcta. :-) – ifaour

12

/me/picture (o /{user id}/picture) devuelve un HTTP 301 redirección a la ubicación de la imagen para que pueda insertarlo directamente en un <img src...

Si desea recuperar la URL y uso que usted mismo necesita solicitar específicamente como una campo, a través de:

/{user id}?fields=picture 

o

/me/?fields=picture 

Usted puede incluir otros campos también, pero Supongo que solo quieres la foto en este momento.

+0

¿'/ me/picture' devuelve una url (o un objeto)? Usted dijo que puede incrustarlo directamente en una etiqueta ' LazerSharks

+1

'/me/picture' returns a HTTP 301 redirect to the image, '?fields=picture' returns the URL as a field of the JSON response – Igy

+0

interesting... wonder why they need to provide a http 301 redirect... – LazerSharks

9

Puede obtener tamaños específicos de la foto de perfil, así:

FB.api("/me/picture?width=180&height=180", function(response) { 

     console.log(response.data.url); 

}); 

Véase el Facebook documentation to see what different picture sizes you can get.

Y una demostración completa con el proceso de inicio en: Get Facebook Profile Picture with Javascript SDK

+1

El tipo es útil si no quiere tener que especificar un tamaño preciso y solo quiere un valor difuso como pequeño, normal, grande: https://developers.facebook.com/tools/explorer?method=GET&path=me%3Ffields%3Dpicture.type(normal)&version= – SilentDirge

1

Esto es seguro tiro, resultó ser el trabajo con API de Facebook el gráfico 2.5. Este es el HTML de muestra. Por favor, vea los cambios que he realizado en la función FB.api().

<!DOCTYPE html> 
    <html> 
    <head> 
    <title>Facebook Login JavaScript Example</title> 
    <meta charset="UTF-8"> 
    </head> 
    <body> 

    <!-- 
     Below we include the Login Button social plugin. This button uses 
     the JavaScript SDK to present a graphical Login button that triggers 
     the FB.login() function when clicked. 
    --> 
    <img src="" id="profileImage"/> 

    <div id="status"> 
    </div> 

    </body> 
    <script> 

     // This is called with the results from from FB.getLoginStatus(). 
     function statusChangeCallback(response) { 
      console.log('statusChangeCallback'); 
      console.log(response); 
      // The response object is returned with a status field that lets the 
      // app know the current login status of the person. 
      // Full docs on the response object can be found in the documentation 
      // for FB.getLoginStatus(). 
      if (response.status === 'connected') { 
       // Logged into your app and Facebook. 
       testAPI(); 
      } else if (response.status === 'not_authorized') { 
       // The person is logged into Facebook, but not your app. 
       document.getElementById('status').innerHTML = 'Please log ' + 
         'into this app.'; 
      } else { 
       // The person is not logged into Facebook, so we're not sure if 
       // they are logged into this app or not. 
       document.getElementById('status').innerHTML = 'Please log ' + 
         'into Facebook.'; 
      } 
     } 

     // This function is called when someone finishes with the Login 
     // Button. See the onlogin handler attached to it in the sample 
     // code below. 
     function checkLoginState() { 
      FB.getLoginStatus(function(response) { 
       statusChangeCallback(response); 
      }); 
     } 

     window.fbAsyncInit = function() { 
      FB.init({ 
       appId  : 'XXXXXXXXXXXX', 
       cookie  : true, // enable cookies to allow the server to access 
            // the session 
       xfbml  : true, // parse social plugins on this page 
       version : 'v2.5' // use graph api version 2.5 
      }); 

      // Now that we've initialized the JavaScript SDK, we call 
      //FB.getLoginStatus(). This function gets the state of the 
      // person visiting this page and can return one of three states to 
      // the callback you provide. They can be: 
      // 
      // 1. Logged into your app ('connected') 
      // 2. Logged into Facebook, but not your app ('not_authorized') 
      // 3. Not logged into Facebook and can't tell if they are logged into 
      // your app or not. 
      // 
      // These three cases are handled in the callback function. 

      FB.getLoginStatus(function(response) { 
       statusChangeCallback(response); 
      }); 

     }; 

     // Load the SDK asynchronously 
     (function(d, s, id) { 
      var js, fjs = d.getElementsByTagName(s)[0]; 
      if (d.getElementById(id)) return; 
      js = d.createElement(s); js.id = id; 
      js.src = "//connect.facebook.net/en_US/sdk.js"; 
      fjs.parentNode.insertBefore(js, fjs); 
     }(document, 'script', 'facebook-jssdk')); 

     // Here we run a very simple test of the Graph API after login is 
     // successful. See statusChangeCallback() for when this call is made. 
     function testAPI() { 
      console.log('Welcome! Fetching your information.... '); 
      FB.api('/me', function(response) { 
       console.log('Successful login for: ' + response.name); 
       console.log('Successful login for: ' + response.id); 
       console.log('Successful login for: ' + response.email); 
       var im = document.getElementById("profileImage").setAttribute("src", "http://graph.facebook.com/" + response.id + "/picture?type=normal"); 
       document.getElementById('username').innerHTML =response.name; 
      }); 
     } 

    </script> 
    </html> 
Cuestiones relacionadas