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!

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


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 .


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.


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


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


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!


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);

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.


-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); 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.