Facebook API - Bir Facebook kullanıcısının profil resmini Facebook API'sinden nasıl edinebilirim (kullanıcının uygulamaya "izin vermesini" gerektirmeden)


Yanıtlar:


409

Verileri bu URL yoluyla getirmeniz yeterlidir :

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

userid_hereFotoğrafını almak istediğiniz kullanıcının kimliğiyle değiştirin . HTTPS'yi de kullanabilirsiniz.

Bu file_get_contentsURL'yi okumak ve alınan verileri işlemek için PHP işlevini kullanabilirsiniz.

Kaynak:

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

Not: Bu URL'yi okumak için PHP işlevini kullanmak için OpenSSL uzantısının etkinleştirildiğinden php.iniemin olmanız gerekir .file_get_contents


73
Bu sayfayı daha ayrıntılı olarak incelemek, ?type=largeekleyebileceğiniz sorgu dizesi olabilir. Ben yazıyordu ekran kazıma, BTW tamamen daha iyi bir cevap ile geliyor için aksesuarlar, BTW :).
Domenic

6
<img src="//graph.facebook.com/sarfraz.anees/picture" />HTTP ve HTTPS arasında geçiş yaparsanız kullanın ... protokol tarayıcı tarafından algılanır ve HTTPS'de karışık içerik uyarıları almazsınız.
Chris Jacob

39
Vurgulanmalıdır, bazı kullanıcılar FB hesapları için ayarlanmış bir kullanıcı adına sahip DEĞİLDİR . Bu durumda ve bu yanıtı uygulamaya çalıştığınızda, FB'nin varsayılan profil resmini, soru işaretini alırsınız. Bu sorunu kolayca önlemek için bunun yerine kullanıcının FB kimliğini kullanın.
Josh

7
Grafik api'nin V2'sinde bunun artık bir kullanıcı adı kullanarak çalışmadığı belirtilmelidir. Şimdi önce kullanıcı kimliğine ihtiyacınız var ve bunu elde etmek için artık bir kullanıcı adı kullanamazsınız. Kullanıcı kimliği de uygulama başına değişir, bu nedenle kullanabileceğiniz bir kullanıcı kimliği almak için bir tür doğru kimlik doğrulamanız gerekir. Teknik olarak profil resmi hala herkese açıktır ve graph.facebook.com/v2.2/4/picture?redirect=0 adresinden ulaşılabilir . Eski grafik url'si hala Nisan 2015'e kadar çalışıyor.
sckd

36
Bu 2015 ve ben alıyorum (# 803) Kullanıcıları kullanıcı adlarına göre sorgulayamıyorum (sarfraz.anees)
Santosh Kumar

268

Göstermek için:

50x50 piksel

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

200 piksel genişlik

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

Kaydetmek için (PHP kullanarak)

NOT: Bunu kullanmayın . Aşağıdaki @ Foreever'in yorumuna bakın.

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

$ Fid, Facebook'taki kullanıcı kimliğinizdir.

NOT: "18+" olarak işaretlenmiş görüntülerin olması durumunda 18 yaş üstü bir kullanıcıdan geçerli bir erişim_tekonu gerekir:

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

GÜNCELLEME 2015:

Graph API v2.0 kullanıcı adlarını kullanarak sorgulanamaz, sen gerektiğini kullanmak userIdher zaman.


6
Type parametresi hakkında daha fazla bilgi: "Kare (50x50), küçük (50 piksel genişlik, değişken yükseklik), normal (100 piksel genişlik, değişken yükseklik) türlerinden biri olması gereken tür bağımsız değişkeniyle istediğiniz resim boyutunu belirtebilirsiniz. ) ve büyük (yaklaşık 200 piksel genişlik, değişken yükseklik) " Facebook'ta Grafik API'sı ile

3
Bu yöntemi kullanmak için allow_url_fopen öğesini on olarak ayarlamanız gerekir. Allow_url_fopen yönergesi varsayılan olarak devre dışıdır. Allow_url_fopen yönergesini etkinleştirmenin güvenlik üzerindeki etkilerinin farkında olmalısınız. Uzak dosyalara erişebilen PHP komut dosyaları, rastgele kod enjeksiyonuna karşı savunmasızdır. Allow_url_fopen yönergesi etkinleştirildiğinde, uzak dosyaları yerel dosyalarmış gibi açan komut dosyaları yazabilirsiniz.
Ağustos'ta Foreever

Yararlı görünüyor, bu yüzden şimdiden tezahürat yapıyorum, ama anlamak için çok yeni bir seviye olmak, hangi programlama dilini bilmek isterim? Benim tahminim PHP.
hello_there_andy

@hello_there_andy Yep! PHP (aslında soru PHP olarak etiketlendi ve 4 yıl önce kullandığım tek
dildi

7
Temmuz 2015'te bu artık çalışmıyor (hata: "Kullanıcıları kullanıcı adlarına göre sorgulanamıyor")
Flimm

164

GÜNCELLEME :

Ağustos 2012'den itibaren API, kullanıcının profil resimlerini farklı boyutlarda almanıza olanak tanıyacak şekilde güncellendi. İsteğe bağlı genişlik ve yükseklik alanlarını URL parametreleri olarak ekleyin:

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

nerede WIDTHve HEIGHTistediğiniz boyut değerlerinizdir.

Bu, en boy oranını korumaya çalışırken minimum WIDTHx boyutunda bir profil resmi döndürür HEIGHT. Örneğin,

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

İadeler

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

SON GÜNCELLEME

Bir kullanıcının profil resmini almak için arayın

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

burada USER_IDkullanıcı kimlik numarası veya kullanıcı adı olabilir.

Belirli bir boyuttaki kullanıcı profil resmini almak için arayın

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

nerede SIZEkelimelerden biri ile değiştirilmelidir

square
small
normal
large

İstediğiniz boyuta bağlı olarak.

Bu çağrı, seçtiğiniz tip parametresini temel alarak boyutu olan tek bir resme bir URL döndürür .

Örneğin:

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

görüntünün küçük bir sürümüne bir URL döndürür.

API, gerçek boyut için değil, yalnızca profil resimleri için maksimum boyutu belirtir.

Meydan:

maksimum genişlik ve yükseklik 50 piksel.

Küçük

maksimum genişlik 50 piksel ve maksimum yükseklik 150 pikseldir.

Normal

maksimum genişlik 100 piksel ve maksimum yükseklik 300 pikseldir.

Büyük

maksimum genişlik 200 piksel ve maksimum yükseklik 600 pikseldir.

Varsayılan USER_ID / resmi çağırırsanız kare türünü alırsınız.

AÇIKLAMA

Aradığınızda (yukarıdaki örneğe göre)

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

Facebook SDK'larının istek yöntemlerinden birini kullanıyorsanız bir JSON yanıtı döndürür . Aksi takdirde görüntünün kendisini döndürür. Her zaman JSON'u almak için şunu ekleyin:

&redirect=false

şöyle:

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

Harika bir açıklama, ancak verdiğiniz url'nin dönüş değeri (' graph.facebook.com/redbull/… ) konum başlığındaki resim url'si ile yanıt veriyor (' Konum: fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4 /c0.19.180.142/… ). {"data" gibi bir JSON olarak değil: {"url": " fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/c0.19.180.142/… ", "width": 148, "height" : 117, "is_silhouette": yanlış}}
Gökhan Barış Aker

Hala cevabımdakiyle aynı cevabı alıyorum. Bunu Developers.facebook.com/tools/explorer adresindeki Facebook Geliştiricileri'ndeki Grafik Gezgini'nde deneyebilirsiniz. 'Redbull / picture? Width = 140 & height = 110' değerini girin ve yanıtı görün. Cevabım, bunu bir JSON yanıtı döndürecek olan Facebook SDK'larının API / istek yöntemlerinden birini kullanarak çağırdığınızı varsayar.
Gunnar Karlsson

2
@GunnarKarlsson &redirect=falsegörüntüye yönlendirmek yerine JSON verilerini döndürmek için
eksiksiniz

@andrewtweber çok teşekkürler. Cevaba bir açıklama ekledim.
Gunnar Karlsson

3
Temmuz 2015 ve bu artık çalışmıyor. (hata: "Kullanıcılar kullanıcı adlarına göre sorgulanamıyor")
Flimm

20

İkili içerik DEĞİL, resim URL'sini almak için:

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

KULLANICI ADI DEĞİL FACEBOOK Kimliğinizi kullanmalısınız. Facebook kimliğinizi oraya alabilirsiniz:

http://findmyfbid.com/


1
Temmuz 2015 ve bu artık çalışmıyor (hata: "Kullanıcıları kullanıcı adlarına göre sorgulanamıyor")
Flimm


1
En iyisi burada. Kesinlikle çılgınca, vücutta veri almaya çalıştım ve daha sonra veriler @ başlığında görünüyor. @
Davuz

19

Sunucunuza TAM boyut profil resmi kaydetmek için basit bir satır kodu.

<?php

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

?>

Bu yalnızca php.ini dosyasında openssl etkinse çalışır.


Temmuz 2015 ve bu artık çalışmıyor (hata: "Kullanıcıları kullanıcı adlarına göre sorgulanamıyor")
Flimm

Evet, v1.0 aramaları 30 Nisan 2015'ten sonra çalışmayı durduracak. Kullanıcı uygulamanızı yetkilendirmedikçe uygulamaya özel kimlik alamazsınız
Armand

10

Bunu kabul edilen cevaba bir yorum olarak ekledi, ancak daha uzun bir açıklamayı hak ettiğini hissetti. Nisan 2015'ten itibaren bu muhtemelen birkaç kez gündeme gelecektir.

Grafik api'nin V2 sürümünden itibaren kabul edilen cevap artık bir kullanıcı adı kullanarak çalışmıyor. Şimdi önce kullanıcı kimliğine ihtiyacınız var ve bunu elde etmek için artık bir kullanıcı adı kullanamazsınız. Sorunları daha da karmaşıklaştırmak için, gizlilik nedeniyle Facebook artık kullanıcı kimliğini uygulama başına değiştiriyor (bkz. Https://developers.facebook.com/docs/graph-api/reference/v2.2/user/ ve https: //developers.facebook .com / docs / apps / upgrade / # upgradeding_v2_0_user_ids ), böylece kullanabileceğiniz bir kullanıcı kimliği almak için bir tür uygun kimlik doğrulamasına sahip olmanız gerekir. Teknik olarak profil resmi hala herkese açıktır ve / userid / picture adresinde mevcuttur ( https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture adresindeki dokümanlara ve bu örnek kullanıcıya bakın: http: //graph.facebook.com/v2.2/4/picture?redirect=0) Bununla birlikte, bir kullanıcının standart kullanıcı kimliğini yalnızca profillerine dayanarak imkansız gibi görünüyor - uygulamanızın, kullanım durumum için (yalnızca FB profil bağlantısının yanında bir profil resmi göstererek) aşırıya kaçan uygulama ile etkileşimi onaylamasını sağlaması gerekir.

Birisi profil resmini kullanıcı adına göre almanın bir yolunu veya alternatif olarak, bir profil resmini almak için nasıl bir kullanıcı kimliği (alternatif bir tane bile) alacağınızı anladıysa, lütfen paylaşın! Bu arada, eski grafik URL'si Nisan 2015'e kadar hala çalışıyor.


9

Bunun bir yolu cevabında yayınlanan Gamlet kodunu kullanmaktır :

  • Farklı kaydet curl.php

  • Sonra dosyanızda:

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

Ben ne zaman bunu oraya token yine bir erişim olması gerekir, bu ayrıntılara dışarı şekle bana biraz zaman aldı çünkü profil resimleri herkese açık olsa da ... bu sonrası düşündüm büzülerek o.


8

Bunu yapmanın bir yolu var;)

" Http://it.toolbox.com/wiki/index.php/Use_curl_from_PHP_-_processing_response_headers " için teşekkürler :

<?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

Nisan 2015'ten itibaren çalışan PHP (HTTP GET) çözümü (PHP 5 SDK'sız):

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'];
}

Parametrelerdeki 'type' öğesini değiştirebilirsiniz:

Meydan:

maksimum genişlik ve yükseklik 50 piksel.

Küçük

maksimum genişlik 50 piksel ve maksimum yükseklik 150 pikseldir.

Normal

maksimum genişlik 100 piksel ve maksimum yükseklik 300 pikseldir.

Büyük

maksimum genişlik 200 piksel ve maksimum yükseklik 600 pikseldir.


7

Düşünüyordum - belki ID yararlı bir araç olacaktır. Bir kullanıcı yeni bir hesap oluşturduğunda daha yüksek bir kimlik almalıdır. Google'a baktım ve metadatascience.com'dan hesap oluşturma tarihini kimliğe göre tahmin etmenin bir yöntemi olduğunu ve metadatascience.com'dan bazı iyi veriler topladığını buldum.

Resim açıklamasını buraya girin

Bu makaleyi okuyun:

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

Ve indirebileceğiniz bazı kimlikler:

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


1
Bu soruya nasıl cevap veriyor?
Flimm


4

Profil resminin boyutu konusunda endişeli misiniz? PHP kullanarak Facebook ile giriş yaparken. Size Facebook PHP SDK'da büyük boyutlu profil resmi almanın basit bir yolunu göstereceğiz. Ayrıca, Facebook profilinin özel boyutlu görüntüsünü alabilirsiniz.

Aşağıdaki kod satırını kullanarak profil resmi boyutunu ayarlayın.

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

bu gönderiyi kontrol et: http: //www.codexworld.com/how-to-guides/get-large-size-profile-picture-in-facebook-php-sdk/


3

@NaturalBornCamper,

Güzel kod! İşte böyle bir işlem için temiz bir kod fonksiyonu!

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

Bu, ham Facebook avatar resmi URL'sini döndürür . O zaman onunla ne istersen yapmaktan çekinmeyin!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.