it-swarm.com.de

Facebook-API - Wie erhalte ich ein Profilbild eines Facebook-Benutzers über die Facebook-API (ohne dass der Benutzer die Anwendung "zulassen" muss)

Ich arbeite an einem CMS , das das Profilbild eines Benutzers von seinem Facebook abruft URL (das heißt http://facebook.com)/users_unique_url ). Wie kann ich das erreichen? Gibt es einen Faceboook-API-Aufruf, der die Profilbild-URL eines Benutzers abruft, ohne dass der Benutzer die Anwendung Allow ausführen muss?

254
John Himmelman

Holen Sie sich einfach die Daten durch diese URL :

http://graph.facebook.com/userid_here/picture

Ersetzen Sie userid_here durch die ID des Benutzers, von dem Sie das Foto erhalten möchten. Sie können auch HTTPS verwenden.

Sie können die Funktion file_get_contents des PHP verwenden, um diese URL zu lesen und die abgerufenen Daten zu verarbeiten.

Ressource:

http://developers.facebook.com/docs/api

Hinweis: In php.ini müssen Sie sicherstellen, dass die Erweiterung OpenSSL aktiviert ist, um die Funktion file_get_contents von PHP, um diese URL zu lesen.

408
Sarfraz

Zeigen:

50 x 50 Pixel

<img src="//graph.facebook.com/{{fid}}/picture">

200 Pixel Breite

<img src="//graph.facebook.com/{{fid}}/picture?type=large">

Speichern (mit PHP)

HINWEIS: Verwenden Sie dies nicht. Siehe @ Foreevers Kommentar unten.

$img = file_get_contents('https://graph.facebook.com/'.$fid.'/picture?type=large');
$file = dirname(__file__).'/avatar/'.$fid.'.jpg';
file_put_contents($file, $img);

Wobei $ fid Ihre Benutzer-ID auf Facebook ist.

HINWEIS: Bei Bildern, die mit "18+" gekennzeichnet sind, benötigen Sie ein gültiges access_token von einem 18+ Benutzer:

<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">

UPDATE 2015:

Graph API v2.0 kann nicht mit Benutzernamen abgefragt werden. Sie sollten immer userId verwenden .

265
neiker

UPDATE:

Ab Ende August 2012 wurde die API aktualisiert, damit Sie Benutzerprofilbilder in unterschiedlichen Größen abrufen können. Fügen Sie die optionalen Felder width und height als URL-Parameter hinzu:

https://graph.facebook.com/USER_ID/picture?width=WIDTH&height=HEIGHT

dabei sind WIDTH und HEIGHT Ihre angeforderten Dimensionswerte.

Dies gibt ein Profilbild mit einer Mindestgröße von WIDTH x HEIGHT zurück, während versucht wird, das Seitenverhältnis beizubehalten. Zum Beispiel,

https://graph.facebook.com/redbull/picture?width=140&height=110

kehrt zurück

    {
      "data": {
        "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/c0.19.180.142/s148x148/2624_134501175351_4831452_a.jpg",
        "width": 148,
        "height": 117,
        "is_silhouette": false
      }
   }

END UPDATE

Rufen Sie an, um das Profilbild eines Benutzers abzurufen

https://graph.facebook.com/USER_ID/picture

dabei kann USER_ID die Benutzer-ID-Nummer oder der Benutzername sein.

Um ein Benutzerprofilbild einer bestimmten Größe zu erhalten, rufen Sie an

https://graph.facebook.com/USER_ID/picture?type=SIZE

dabei sollte SIZE durch eines der Wörter ersetzt werden

square
small
normal
large

abhängig von der gewünschten Größe.

Dieser Aufruf gibt ein URL an ein einzelnes Bild zurück, dessen Größe auf dem von Ihnen gewählten Typparameter basiert.

Zum Beispiel:

https://graph.facebook.com/USER_ID/picture?type=small

gibt eine URL zu einer kleinen Version des Bildes zurück.

Die API gibt nur die maximale Größe für Profilbilder an, nicht die tatsächliche Größe.

Quadrat:

maximale Breite und Höhe von 50 Pixel.

Klein

maximale Breite von 50 Pixel und eine maximale Höhe von 150 Pixel.

Normal

maximale Breite von 100 Pixel und eine maximale Höhe von 300 Pixel.

Groß

maximale Breite von 200 Pixel und eine maximale Höhe von 600 Pixel.

Wenn Sie die Standard-USER_ID/picture aufrufen, erhalten Sie den Quadrattyp.

KLÄRUNG

Wenn Sie anrufen (wie im obigen Beispiel)

https://graph.facebook.com/redbull/picture?width=140&height=110

es wird eine JSON Antwort zurückgegeben, wenn Sie eine der Anforderungsmethoden des Facebook SDK verwenden. Andernfalls wird das Bild selbst zurückgegeben. Fügen Sie Folgendes hinzu, um den JSON immer abzurufen:

&redirect=false

wie so:

https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
163
Gunnar Karlsson

Um die Bild-URL zu erhalten, NICHT den binären Inhalt:

$url = "http://graph.facebook.com/$fbId/picture?type=$size";

$headers = get_headers($url, 1);

if( isset($headers['Location']) )
    echo $headers['Location']; // string
else
    echo "ERROR";

Sie müssen Ihre FACEBOOK ID verwenden, NICHT USERNAME. Dort können Sie Ihre Facebook-ID abrufen:

http://findmyfbid.com/

20

Einfacher einzeiliger Code zum Speichern des Profilbilds in voller Größe auf Ihrem Server.

<?php

copy("https://graph.facebook.com/FACEBOOKID/picture?width=9999&height=9999", "picture.jpg");

?>

Dies funktioniert nur, wenn openssl in der php.ini aktiviert ist.

19
Armand

Fügte dies als Kommentar zur akzeptierten Antwort hinzu, hielt es jedoch für eine längere Erklärung. Ab April 2015 wird dies wahrscheinlich einige Male angesprochen.

Ab V2 der Grafik-API funktioniert die akzeptierte Antwort nicht mehr mit einem Benutzernamen. Jetzt brauchen Sie also zuerst die Benutzer-ID und können keinen Benutzernamen mehr verwenden, um diese zu erhalten. Aus Datenschutzgründen ändert Facebook jetzt die Benutzer-IDs für jede App (siehe https://developers.facebook.com/docs/graph-api/reference/v2.2/user/ und https://developers.facebook.com/docs/apps/upgrading/#upgrading_v2_0_user_ids ), daher müssen Sie über eine ordnungsgemäße Authentifizierung verfügen, um eine Benutzer-ID abzurufen, die Sie verwenden können. Technisch gesehen ist das Profilbild immer noch öffentlich und unter/userid/picture verfügbar (siehe Dokumente unter https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture und dieser Beispielbenutzer: http://graph.facebook.com/v2.2/4/picture?redirect= ) Es scheint jedoch unmöglich, die Standardbenutzer-ID eines Benutzers nur anhand seines Profils zu ermitteln - Ihres Die App müsste sie dazu bringen, die Interaktion mit der App zu genehmigen, was für meinen Anwendungsfall (nur ein Profilbild neben ihrem FB-Profillink anzuzeigen) übertrieben ist.

Wenn jemand eine Möglichkeit gefunden hat, das Profilbild basierend auf dem Benutzernamen abzurufen, oder alternativ, wie eine Benutzer-ID (auch eine alternative) zum Abrufen eines Profilbilds abgerufen werden kann, teilen Sie dies bitte mit! In der Zwischenzeit funktioniert die alte Grafik-URL noch bis April 2015.

10
sckd

Eine Möglichkeit besteht darin, den in seiner Antwort angegebenen Code Gamlet zu verwenden:

  • Speichere es als curl.php

  • Dann in Ihrer Datei:

    require 'curl.php';
    
    $photo="https://graph.facebook.com/me/picture?access_token=" . $session['access_token'];
    $sample = new sfFacebookPhoto;
    $thephotoURL = $sample->getRealUrl($photo);
    echo $thephotoURL;
    

Ich dachte, ich würde das posten, weil ich ein bisschen Zeit brauchte, um die Details herauszufinden ... Auch wenn Profilbilder öffentlich sind, müssen Sie immer noch einen Zugriffstoken haben, um sie zu erhalten, wenn Sie locken .

9
benjaminlotan

Funktionierende PHP (HTTP GET) -Lösung ab April 2015 (ohne PHP 5 SDK):

function get_facebook_user_avatar($fbId){
        $json = file_get_contents('https://graph.facebook.com/v2.5/'.$fbId.'/picture?type=large&redirect=false');
        $picture = json_decode($json, true);
        return $picture['data']['url'];
}

Sie können 'type' in parametr ändern:

Quadrat:

maximale Breite und Höhe von 50 Pixel.

Klein

maximale Breite von 50 Pixel und eine maximale Höhe von 150 Pixel.

Normal

maximale Breite von 100 Pixel und eine maximale Höhe von 300 Pixel.

Groß

maximale Breite von 200 Pixel und eine maximale Höhe von 600 Pixel.

8
Xawier

Es gibt einen Weg das zu tun;)

Dank " http://it.toolbox.com/wiki/index.php/Use_curl_from_PHP_-_processing_response_headers ":

<?php

    /**
     * Facebook user photo downloader
     */

    class sfFacebookPhoto {

        private $useragent = 'Loximi sfFacebookPhoto PHP5 (cURL)';
        private $curl = null;
        private $response_meta_info = array();
        private $header = array(
                "Accept-Encoding: gzip,deflate",
                "Accept-Charset: utf-8;q=0.7,*;q=0.7",
                "Connection: close"
            );

        public function __construct() {
            $this->curl = curl_init();
            register_shutdown_function(array($this, 'shutdown'));
        }

        /**
         * Get the real URL for the picture to use after
         */
        public function getRealUrl($photoLink) {
            curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header);
            curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, false);
            curl_setopt($this->curl, CURLOPT_HEADER, false);
            curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent);
            curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($this->curl, CURLOPT_TIMEOUT, 15);
            curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
            curl_setopt($this->curl, CURLOPT_URL, $photoLink);

            //This assumes your code is into a class method, and
            //uses $this->readHeader as the callback function.
            curl_setopt($this->curl, CURLOPT_HEADERFUNCTION, array(&$this, 'readHeader'));
            $response = curl_exec($this->curl);
            if (!curl_errno($this->curl)) {
                $info = curl_getinfo($this->curl);
                var_dump($info);
                if ($info["http_code"] == 302) {
                    $headers = $this->getHeaders();
                    if (isset($headers['fileUrl'])) {
                        return $headers['fileUrl'];
                    }
                }
            }
            return false;
        }


        /**
         * Download Facebook user photo
         *
         */
        public function download($fileName) {
            curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header);
            curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($this->curl, CURLOPT_HEADER, false);
            curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent);
            curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($this->curl, CURLOPT_TIMEOUT, 15);
            curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
            curl_setopt($this->curl, CURLOPT_URL, $fileName);
            $response = curl_exec($this->curl);
            $return = false;
            if (!curl_errno($this->curl)) {
                $parts = explode('.', $fileName);
                $ext = array_pop($parts);
                $return = sfConfig::get('sf_upload_dir') . '/tmp/' . uniqid('fbphoto') . '.' . $ext;
                file_put_contents($return, $response);
            }
            return $return;
        }

        /**
         * cURL callback function for reading and processing headers.
         * Override this for your needs.
         *
         * @param object $ch
         * @param string $header
         * @return integer
         */
        private function readHeader($ch, $header) {

            //Extracting example data: filename from header field Content-Disposition
            $filename = $this->extractCustomHeader('Location: ', '\n', $header);
            if ($filename) {
                $this->response_meta_info['fileUrl'] = trim($filename);
            }
            return strlen($header);
        }

        private function extractCustomHeader($start, $end, $header) {
            $pattern = '/'. $start .'(.*?)'. $end .'/';
            if (preg_match($pattern, $header, $result)) {
                return $result[1];
            }
            else {
                return false;
            }
        }

        public function getHeaders() {
            return $this->response_meta_info;
        }

        /**
         * Cleanup resources
         */
        public function shutdown() {
            if($this->curl) {
                curl_close($this->curl);
            }
        }
    }
8
Gamlet

Ich dachte - vielleicht ID wird ein nützliches Werkzeug sein. Jedes Mal, wenn ein Benutzer ein neues Konto erstellt, sollte er eine höhere ID erhalten. Ich habe gegoogelt und festgestellt, dass es eine Methode gibt, um das Erstellungsdatum des Kontos nach ID zu schätzen, und Massoud Seifi von metadatascience.com hat einige gute Daten dazu gesammelt.

Enter image description here

Lesen Sie diesen Artikel:

http://metadatascience.com/2013/03/11/inferring-facebook-account-creation-date-from-facebook-user-id/

Und hier sind einige IDs zum Herunterladen:

http://metadatascience.com/2013/03/14/lookup-table-for-inferring-facebook-account-creation-date-from-facebook-user-id/

7
Erroid

Der Blog-Beitrag Bild eines Facebook-Grafikobjekts aufnehmen bietet möglicherweise eine andere Form der Lösung. Verwenden Sie den Code im Tutorial zusammen mit dem Graph API von Facebook und seiner PHP SDK-Bibliothek.

... und versuchen Sie nicht file_get_contents zu verwenden (es sei denn, Sie sind bereit, sich den Konsequenzen zu stellen - siehe file_get_contents vs curl ) .

6
moostring

Sind Sie besorgt über die Größe des Profilbildes? zum Zeitpunkt der Implementierung der Anmeldung bei Facebook mit PHP. Wir zeigen Ihnen, wie Sie auf einfache Weise ein großes Profilbild in Facebook PHP SDK erhalten. Sie können auch das benutzerdefinierte Größenbild des Facebook-Profils abrufen.

Stellen Sie die Größe des Profilbilds mit der folgenden Codezeile ein.

$ userProfile = $ facebook-> api ('/ me? fields = picture.width (400) .height (400)');

überprüfen Sie diesen Beitrag: http: //www.codexworld.com/how-to-guides/get-large-size-profile-picture-in-facebook-php-sdk/

4
sagar jethi

@NaturalBornCamper,

Netter Code! Hier ist eine saubere Code-Funktion für einen solchen Prozess!

function get_raw_facebook_avatar_url($uid)
{
    $array = get_headers('https://graph.facebook.com/'.$uid.'/picture?type=large', 1);
    return (isset($array['Location']) ? $array['Location'] : FALSE);
}

Dies gibt die raw Facebook Avatar Bild URL zurück. Fühlen Sie sich frei, damit zu tun, was Sie wollen!

3
tfont
URI  = https://graph.facebook.com/{}/picture?width=500'.format(uid)

Sie können die Profil-URI über Online-Finder-Tool für Facebook-IDs abrufen

Sie können auch den Typ param mit den möglichen Werten small, normal, large und square übergeben.

Siehe offizielle Dokumentation

3
user2119554