Wie kann ich das Benutzerprofilbild mithilfe der Facebook-Grafik-API anzeigen?

70

Ich möchte das Benutzerprofilbild auf der Canvas-Seite meiner Anwendung anzeigen. Gibt es eine Möglichkeit, dies mithilfe der Grafik-API zu tun?

Ich weiß, dass ich es mit FBML machen kann, aber ich möchte das Profilbild auch an ein Flash-Spiel übergeben, das ich mache. Daher müsste ich das Profilbild von der API abrufen und als Variable senden. Hier ist der Code I. habe bisher

$facebook = new Facebook(array(
    'appId'  => FACEBOOK_APP_ID,
    'secret' => FACEBOOK_SECRET_KEY,
    'cookie' => true,
    'domain' => 'myurl/facebook-test'
));

$session = $facebook->getSession();

        $uid = $facebook->getUser();
        $me = $facebook->api('/me');

        $updated = date("l, F j, Y", strtotime($me['updated_time']));

        echo "Hello " . $me['name'] . $me['picture'] . "<br />";
  echo "<div style=\"background:url(images/bg.jpg); width:760px; height:630px;\">" . "You last updated your profile on " . $updated . "</div>" . "<br /> your uid is" . $uid;

$me['picture'] scheint nicht zu funktionieren, aber ich bin noch sehr neu in der Grafik-API und mache wahrscheinlich ein paar sehr amateurhafte Fehler!

Odyss3us
quelle

Antworten:

125

Wenn Sie die Benutzer-ID kennen, lautet die URL für das Profilbild: -

http://graph.facebook.com/[UID]/picture

Wo anstelle von [UID] Ihre Variable $ uid platziert wird und diese URL an flash übergeben werden kann

hndcrftd
quelle
2
Jetzt scheint es eine Umleitungsantwort (302) zurückzugeben, aber wenn Sie dieser folgen, erhalten Sie das richtige Bild. Sie können auch? Redirect = false zur URL, um eine JSON-Antwort zu erhalten, die die endgültige URL zum Bild enthält.
Gnomet
Hallo, hat jemand eine Idee? Warum wird die Antwort null, während sie vom Android-Gerät aufgerufen wird? Ich habe dies nur in meiner Anwendung verwendet, aber jetzt kommt das Bild nicht mit dieser Methode.
BSKANIA
Funktioniert noch! Stellen Sie sicher, dass Sie httpsanstelle von verwenden http, wenn Sie verwenden Picasso.
XYZ
Veraltet. OAuth ist vorerst erforderlich.
Yuki Matsukura
Gibt es eine Möglichkeit, großformatige Profilbilder zu finden?
81

Um verschiedene Größen zu erhalten, können Sie den Typparameter verwenden:

Sie können die gewünschte Bildgröße mit dem Typargument angeben, das quadratisch (50 x 50), klein (50 Pixel breit, variable Höhe) und groß (ca. 200 Pixel breit, variable Höhe) sein soll: http: // graph .facebook.com / squall3d / picture? type = large .

squall3d
quelle
Vielen Dank! Ich konnte das anscheinend nirgendwo finden, aber ich wusste, dass es möglich war!
Doug Molineux
2
Was noch besser ist, ist, dass Breite / Höhe-Parameter auch funktionieren, zB: Breite = 140 & Höhe = 140
Deepak Thomas
22

Sie können die Größe des Profilbilds auch ändern, indem Sie die unten gezeigten Parameter angeben.

https://graph.facebook.com/[UID]/picture?width=140&height=140

würde auch funktionieren.

Deepak Thomas
quelle
In der FB-Dokumentation developer.facebook.com/docs/graph-api/reference/v2.1/user/… heißt When height and width are both used, the image will be scaled as close to the dimensions as possible and then cropped down.es, dass sie eine vordefinierte Größe 123x123 zurückgeben, wenn ich nach 150x150 frage?
Dimitry K
1
Eigentlich gefundene Antwort selbst: Wenn /picture?width=450x450ich danach frage, werde ich zum Bild weitergeleitet: https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xap1/v/t1.0-1/c120.0.480.480/p480x480/10525666_10154418313275648_598202092662269872_n.jpg?somequerystringwelches ein 480x480Bild ist. Und wenn ich danach frage, werde /picture?width=300&height=300ich zu https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xap1/v/t1.0-1/c80.0.320.320/p320x320/10525666_10154418313275648_598202092662269872_n.jpgdem 320x320Bild weitergeleitet. Sie haben also Recht mit vordefinierten Größen.
Dimitry K
7
  //create the url
  $profile_pic =  "http://graph.facebook.com/".$uid."/picture";

 //echo the image out
 echo "<img src=\"" . $profile_pic . "\" />"; 

Funktioniert gut für mich

Kannan Prasad
quelle
4

EDIT : Also Facebook hat es wieder geändert! Keine Suche mehr nach Benutzername - habe die Antwort unten geändert ...

https://graph.facebook.com/{{UID}}/picture?redirect=false&height=200&width=200
  • UID = das Profil oder die Seiten-ID
  • Die Umleitung gibt entweder json (false) zurück oder leitet zum Bild um (true).
  • Höhe und Breite ist die Ernte
  • erfordert keine Authentifizierung

zB https://graph.facebook.com/4/picture?redirect=false&height=200&width=200

Facebook Graph Bilddokument

Sidonaldson
quelle
1
Dies ist nicht mehr gültig (# 803) Benutzer können nicht nach ihrem Benutzernamen (zuck) abgefragt werden
Roni
1
@ Roni Sie können aber immer noch nach UID abfragen. Es funktioniert bei mir mit UID.
RredCat
1
@ RedCat Ich habe nichts über UID gesagt, nur den Benutzernamen - die UID-Abfrage wird wahrscheinlich sehr lange funktionieren
Roni
http://graph.facebook.com/[UID]/picturefunktioniert! Gibt es eine Obergrenze für die Häufigkeit, mit der ich diesen API-Aufruf ausführen kann?
Darshan Chaudhary
3

Hier ist der Code, der für mich funktioniert hat!

Angenommen, Sie haben eine gültige Sitzung,

//Get the current users id
$uid = $facebook->getUser();

//create the url
$profile_pic =  "http://graph.facebook.com/".$uid."/picture";

//echo the image out
echo "<img src=\"" . $profile_pic . "\" />";

Danke geht an Raine, du da Mann!

Odyss3us
quelle
1

Ich hatte Probleme beim Abrufen von Profilfotos während der Verwendung von CURL. Ich dachte eine Weile, dass bei der Implementierung der Facebook-API etwas nicht stimmt, aber ich muss meiner CURL etwas hinzufügen, das heißt:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
adjwilli
quelle
1

Eine sehr wichtige Sache ist, dass Sie wie bei anderen Graph API-Anforderungen keine JSON-Daten als Antwort erhalten, sondern dass der Aufruf eine HTTP-Weiterleitung an die URL des Profilbilds zurückgibt. Wenn Sie also die URL abrufen möchten, müssen Sie entweder den Antwort-HTTP-Header lesen oder Sie können FQLs verwenden.

Sanket Sahu
quelle
-1

Die zurückgegebenen Daten sind die Binärdaten des Bildtyps. Wenn Sie das Benutzerfoto mit JavaScript abrufen, rufen Sie die Fotodaten als Blob-Typ in eine XMLHttpRequest ab und rufen Sie dann die Blob-URL aus der Antwort ab. Als Referenz:

 var request = new XMLHttpRequest;
 var photoUri=config.endpoints.graphApiUri + "/v1.0/me/photo/$value";
 request.open("GET",photoUri);
 request.setRequestHeader("Authorization","Bearer "+token);
 request.responseType = "blob";
 request.onload = function (){
        if(request.readyState == 4 && request.status == 200){
               var image = document.createElement("img");
               var url = window.URL || window.webkitURL;
               var blobUrl = url.createObjectURL(request.response);
               image.src = blobUrl;
               document.getElementById("UserShow").appendChild(image);
        }
 };
 request.send(null); 
Chathushka Dilhan
quelle