Facebook Facebook Facebook API-Jak uzyskać zdjęcie profilowe użytkownika Facebooka za pośrednictwem Facebook API (bez wymogu, aby użytkownik "zezwolił" na aplikację)

Pracuję nad CMS , który pobiera zdjęcie profilowe użytkownika z ich Facebook URL (czyli http://facebook.com/users_unique_url ). Jak mogę to osiągnąć? Czy istnieje Wywołanie interfejsu API Faceboook, które pobiera adres URL obrazka profilowego użytkownika bez potrzeby zezwalania aplikacji ?

 258
Author: Peter Mortensen, 2010-05-12

14 answers

Po prostu pobierz dane za pomocą tego URL :

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

Zastąp userid_here identyfikatorem użytkownika, którego chcesz uzyskać zdjęcie. Możesz również użyć HTTPS.

Możesz użyć funkcji PHP file_get_contents, Aby odczytać ten adres URL i przetworzyć pobrane dane.

Źródło:

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

Uwaga: W php.ini Należy upewnić się, że rozszerzenie OpenSSL jest włączone do używaniafile_get_contents funkcji PHP do odczytu tego adresu URL.

 410
Author: Sarfraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-09 18:37:53

Aby pokazać:

50x50 pikseli

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

Szerokość 200 pikseli

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

Aby zapisać (używając PHP)

Uwaga: nie używaj tego. Zobacz komentarz @Foreever poniżej.

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

Gdzie $fid to Twój identyfikator użytkownika na Facebook ' u.

Uwaga: w przypadku obrazów oznaczonych jako "18+" będziesz potrzebował poprawnego access_token od użytkownika 18+:

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

Aktualizacja 2015:

Graph API v2. 0 nie można odpytywać używając nazw użytkowników, należy używać userId zawsze.

 268
Author: neiker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-03 10:39:06

Aktualizacja:

Od końca sierpnia 2012 r. interfejs API został zaktualizowany, aby umożliwić pobieranie zdjęć profilowych użytkownika w różnych rozmiarach. Dodaj opcjonalne pola szerokość i wysokość jako parametry URL:

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

Gdzie WIDTH i {[11] } są żądanymi wartościami wymiarów.

Zwróci to zdjęcie profilowe o minimalnym rozmiarze WIDTH x HEIGHT podczas próby zachowania proporcji. Na przykład,

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

Zwraca

    {
      "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

Aby uzyskać zdjęcie profilowe użytkownika, zadzwoń [20]}
https://graph.facebook.com/USER_ID/picture

Gdzie USER_ID Może być numerem identyfikacyjnym użytkownika lub nazwą użytkownika.

Aby uzyskać zdjęcie profilowe użytkownika o określonym rozmiarze, zadzwoń [20]}
https://graph.facebook.com/USER_ID/picture?type=SIZE

Gdzie {[15] } należy zastąpić jednym ze słów

square
small
normal
large

W zależności od pożądanego rozmiaru.

To wywołanie zwróci URL do pojedynczego obrazu o jego rozmiarze opartym na wybrany przez Ciebie parametr typu.

Na przykład:

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

Zwraca adres URL do małej wersji obrazu.

Interfejs API określa tylko maksymalny rozmiar obrazów profilowych, a nie rzeczywisty rozmiar.

Kwadrat:

Maksymalna szerokość i wysokość 50 pikseli.

Mały

Maksymalna Szerokość 50 pikseli i maksymalna wysokość 150 pikseli.

Normal

Maksymalna Szerokość 100 pikseli i maksymalna wysokość 300 pikseli.

Duży

Maksymalna szerokość 200 pikseli i maksymalna wysokość 600 pikseli.

Jeśli wywołasz domyślny USER_ID / picture, otrzymasz typ kwadratowy.

Wyjaśnienie

Jeśli wywołasz (jak na powyższym przykładzie)

https://graph.facebook.com/redbull/picture?width=140&height=110
Jeśli korzystasz z jednej z metod żądania SDK Facebook ' a , zwróci odpowiedź JSON. W przeciwnym razie zwróci sam obraz. Do zawsze Pobierz JSON, dodaj:
&redirect=false

Like so:

https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
 164
Author: Gunnar Karlsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 18:27:06

Aby uzyskać adres URL obrazu, a nie zawartość binarną:

$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";

Musisz użyć swojego FACEBOOK ID, a nie nazwy użytkownika. Możesz tam dostać swój Facebook id:

Http://findmyfbid.com/

 20
Author: NaturalBornCamper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-03 16:39:56

Prosty, jednolinijkowy kod, aby zapisać Pełnowymiarowy obraz profilu na serwerze.

<?php

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

?>

To zadziała tylko wtedy, gdy openssl jest włączony w php.ini.

 19
Author: Armand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-19 11:12:43

Dodałem to jako komentarz do zaakceptowanej odpowiedzi, ale uznałem, że zasługuje na dłuższe Wyjaśnienie. Począwszy od kwietnia 2015 r. prawdopodobnie zostanie to podniesione kilka razy.

Od wersji 2 API graph zaakceptowana odpowiedź nie działa już przy użyciu nazwy użytkownika. Więc teraz musisz najpierw userid i nie możesz już używać nazwy użytkownika, aby to uzyskać. Aby jeszcze bardziej skomplikować sprawy, ze względów prywatności Facebook zmienia identyfikator użytkownika dla każdej aplikacji (Zobacz https://developers.facebook.com/docs/graph-api/reference/v2.2/user/ i https://developers.facebook.com/docs/apps/upgrading/#upgrading_v2_0_user_ids), więc będziesz musiał mieć jakieś odpowiednie uwierzytelnienie, aby odzyskać identyfikator użytkownika, którego możesz użyć. Technicznie zdjęcie profilowe jest nadal publiczne i dostępne na /userid / picture (Zobacz dokumenty na https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture i ten przykładowy użytkownik: http://graph.facebook.com/v2.2/4/picture?redirect=0) jednak ustalenie standardowego identyfikatora użytkownika wydaje się niemożliwe tylko na podstawie jego profilu - Twoja aplikacja musiałaby zmusić ich do zaakceptowania interakcji z aplikacją, co w moim przypadku użycia (pokazanie zdjęcia profilowego obok linku do profilu na FB) jest przesadą.

Jeśli ktoś wymyślił sposób, aby uzyskać zdjęcie profilu na podstawie nazwy użytkownika lub alternatywnie, jak uzyskać identyfikator użytkownika (nawet zmienny), aby pobrać profil pic, Proszę podzielić się! W międzyczasie, stary adres URL grafu nadal działa do kwietnia 2015.

 11
Author: sckd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-10 08:53:24

Jednym ze sposobów jest użycie kodu Gamleta zamieszczonego w jego odpowiedzi:

  • Zapisz jako curl.php

  • Następnie w pliku:

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

Pomyślałem, że to opublikuję, ponieważ zajęło mi trochę czasu, aby dowiedzieć się szczegółów... Nawet jeśli zdjęcia profilowe są publiczne, nadal musisz mieć tam token dostępu, aby go uzyskać, gdy curl to.

 9
Author: benjaminlotan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:41

Działające rozwiązanie PHP (HTTP GET) od kwietnia 2015 (bez 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'];
}

Możesz zmienić " typ " w parametr:

Kwadrat:

Maksymalna szerokość i wysokość 50 pikseli.

Mały

Maksymalna Szerokość 50 pikseli i maksymalna wysokość 150 pikseli.

Normal

Maksymalna Szerokość 100 pikseli i maksymalna wysokość 300 pikseli.

Duży

Maksymalna szerokość 200 pikseli i maksymalna wysokość 600 pikseli.

 9
Author: Xawier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-11 03:17:41

Jest na to sposób;)

Dzięki " 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
Author: Hamlet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 18:36:22

Tak sobie myślałem-może ID będzie użytecznym narzędziem. Za każdym razem, gdy użytkownik tworzy nowe konto, powinien uzyskać wyższy identyfikator. Wygooglowałem i znalazłem, że istnieje metoda oszacowania daty utworzenia konta przez ID i Massoud Seifi z metadatascience.com zebrałem na ten temat dobre dane.

Tutaj wpisz opis obrazka

Przeczytaj ten artykuł:

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

A oto kilka Identyfikatory do pobrania:

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

 7
Author: Erroid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-02 21:29:58

Wpis na blogu Pobierz zdjęcie obiektu Facebook Graph może zaoferować inną formę rozwiązania. Użyj kodu w samouczku wraz z Facebook ' S Graph API i jego biblioteki PHP SDK.

... I staraj się nie używać file_get_contents (chyba że jesteś gotowy stawić czoła konsekwencjom-zobacz file_get_contents vs curl ).

 6
Author: moostring,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:28

Czy martwisz się o rozmiar zdjęcia profilowego? w momencie wdrożenia logowania z Facebook za pomocą PHP. Pokażemy Ci prosty sposób na uzyskanie dużego rozmiaru zdjęcia profilowego w Facebook PHP SDK. Możesz również uzyskać niestandardowy rozmiar obrazu profilu Facebook.

Ustaw wymiar obrazu profilowego za pomocą poniższego wiersza kodu.

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

Sprawdź to Facebook:///// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / ]}

 4
Author: Sagar Jethi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 13:01:20

@NaturalBornCamper,

Niezły kod! Oto czysta funkcja kodu dla takiego procesu!
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);
}

To zwróci surowy Facebook avatar image URL. Możesz z nim robić, co chcesz!

 3
Author: tfont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 18:37:49
URI  = https://graph.facebook.com/{}/picture?width=500'.format(uid)

Możesz uzyskać Uri profilu za pomocą narzędzia online facebook id finder

Można również przekazać Typ param z możliwymi wartościami small, normal, large, square.

Zapoznaj się z oficjalną dokumentacją

 3
Author: user2119554,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 11:07:02