web-dev-qa-db-ja.com

Facebook API - Facebook APIを介してFacebookユーザーのプロフィール画像を取得する方法(ユーザーにアプリケーションの "許可"を要求せずに)

自分のFacebookからユーザーのプロフィール画像を取得する CMSURL (つまり、 http://facebook.com/users_unique_url )。どうすればこれを達成できますか?ユーザーがAllowを必要とせずにユーザーのプロフィール画像URLを取得するFaceboook API呼び出しはありますか?

254
John Himmelman

単純にこれを通してデータを取得します URL

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

写真を取得したいユーザーのIDでuserid_hereを置き換えます。 HTTPSも使用できます。

PHPのfile_get_contents関数を使用してそのURLを読み取り、取得したデータを処理することができます。

リソース:

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

注:php.iniでは、 OpenSSL 拡張子を使用してfile_get_contents関数を使用できるようにする必要があります。そのURLを読むためのPHP。

408
Sarfraz

表示するには:

50×50ピクセル

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

200ピクセル幅

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

保存する(PHPを使用)

注:これを使わないでください。下記の@ Foreeverのコメントを参照してください。

$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上のあなたのユーザーIDです。

注: "18+"とマークされた画像の場合、18歳以上のユーザーからの有効なaccess_tokenが必要になります。

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

アップデート2015:

Graph API v2.0はユーザー名を使って問い合わせることはできません、あなたは常にuserIdを使うべきです

265
neiker

UPDATE

2012年8月末から、APIが更新され、ユーザーのプロフィール写真をさまざまなサイズで取得できるようになりました。 URLパラメータとしてオプションのwidthフィールドとheightフィールドを追加します。

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

WIDTHHEIGHTは、要求されたディメンション値です。

これは、縦横比を維持しようとしている間、WIDTH x HEIGHTの最小サイズのプロフィール写真を返します。例えば、

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

戻る

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

ユーザーのプロフィール写真を取得するには、

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

USER_IDは、ユーザーID番号またはユーザー名です。

特定のサイズのユーザープロフィール写真を取得するには、を呼び出します。

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

SIZEは次のいずれかの単語に置き換える必要があります。

square
small
normal
large

あなたが望むサイズに応じて。

この呼び出しは、 URL を、選択したtypeパラメータに基づくサイズの単一の画像に返します。

例えば:

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

画像の小さいバージョンへのURLを返します。

APIは、プロフィール画像の最大サイズのみを指定し、実際のサイズは指定しません。

平方:

最大幅と高さは50ピクセルです。

小さい

最大幅50ピクセル、最大高さ150ピクセル。

普通

最大幅100ピクセル、最大高さ300ピクセル。

最大幅200ピクセル、最大高さ600ピクセル。

デフォルトのUSER_ID/pictureを呼び出すと、正方形のタイプになります。

説明

電話をかけた場合(上記の例のとおり)

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

それは JSON レスポンスを返します あなたがFacebook SDKリクエストメソッドの一つを使っているなら それ以外の場合は、画像自体が返されます。常にJSONを取得するには、以下を追加してください。

&redirect=false

そのようです:

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

バイナリコンテンツではなく画像のURLを取得するには

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

ユーザー名ではなく、自分のFACEBOOK IDを使用する必要があります。あなたはそこにあなたのFacebookのIDを取得することができます:

http://findmyfbid.com/

20

フルサイズのプロフィール画像をサーバーに保存するための単純な1行のコード。

<?php

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

?>

これは、opensslがphp.iniで有効になっている場合にのみ機能します。

19
Armand

受け入れられた答えへのコメントとしてこれを加えました、しかし、それはより長い説明に値すると感じました。 2015年4月頃から、これはおそらく数回発生するでしょう。

グラフapiのV2以降、受け付けられた回答はユーザ名を使用して機能しなくなりました。だから今、あなたは最初にユーザーIDが必要です、そしてあなたはもうこれを得るためにユーザー名を使うことはできません。さらに複雑なことに、プライバシー上の理由から、Facebookは現在、アプリごとのユーザーIDを変更しています( https://developers.facebook.com/docs/graph-api/reference/v2.2/userを参照)。 /https://developers.facebook.com/docs/apps/upgrading/#upgrading_v2_0_user_ids )になります。使用できるユーザーIDを取得するための適切な認証。技術的には、プロファイルpicはまだ一般公開されており、/ userid/pictureで入手できます( https://developers.facebook.com/docs/graph-api/reference/v2.0/userのドキュメントを参照)。/picture そしてこの例のユーザー: http://graph.facebook.com/v2.2/4/picture?redirect=0 )しかし考え出すユーザーの標準ユーザーIDを自分のプロフィールだけでは不可能と思われる - あなたのアプリは、私のユースケースでは(FBプロフィールのリンクの隣にプロフィール写真を表示するだけで)やり過ぎるアプリとのやり取りを承認する必要があります。

ユーザー名に基づいてプロフィール写真を取得する方法、またはプロフィール写真を取得するために使用するユーザーID(代替のものでも)を取得する方法を誰かが見つけた場合は、共有してください!それまでの間、古いグラフのURLは2015年4月まで有効です。

10
sckd

一つの方法は、彼の答えに Gamlet posts というコードを使うことです。

  • curl.phpとして保存してください

  • それからあなたのファイルで:

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

詳細を把握するには少し時間がかかりました。プロフィール写真が公開されている場合でも、 curlのときにアクセストークンを取得する必要があります。 それ。

9
benjaminlotan

2015年4月からのPHP(HTTP GET)ソリューションの作業(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'];
}

Parametrで 'type'を変更することができます。

平方:

最大幅と高さは50ピクセルです。

小さい

最大幅50ピクセル、最大高さ150ピクセル。

普通

最大幅100ピクセル、最大高さ300ピクセル。

最大幅200ピクセル、最大高さ600ピクセル。

8
Xawier

それをする方法があります;)

" 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

私は考えていました - 多分IDが便利なツールになるでしょう。ユーザーが新しいアカウントを作成するたびに、それはより高いIDを取得する必要があります。 Googleで調べたところ、metadatascience.comのIDとMassoud Seifiでアカウント作成日を推定する方法があることがわかりました。

Enter image description here

この記事を読む:

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

そして、これがダウンロードするためのIDです。

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

7
Erroid

ブログ投稿Facebookのグラフオブジェクトの図をつかむは別の解決策を提案するかもしれません。チュートリアルのコードをFacebookの Graph API およびそのPHP SDKライブラリと共に使用してください。

...file_get_contentsを使わないようにしてください(結果に直面する準備ができていない限り - file_get_contents vs curl を参照)。 ).

6
moostring

あなたはプロフィール写真のサイズを心配していますか? PHPを使用してFacebookでログインを実装した時点で。 Facebook PHP SDKで大きなサイズのプロフィール写真を取得する簡単な方法を紹介します。また、あなたはFacebookのプロフィールのカスタムサイズの画像を取得することができます。

次のコード行を使用して、プロフィール写真の寸法を設定します。

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

この記事をチェックしてください:http://www.codexworld.com/how-to-guides/get-large-size-profile-picture-in-facebook-php-sdk/

4
sagar jethi

@NaturalBornCamper、

いいコード!これがそのようなプロセスのためのクリーンカットコード関数です。

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

これはのFacebookアバター画像URLを返します。それであなたがそれであなたがやりたいことなら何でもしてください!

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

あなたは オンラインフェイスブックIDファインダーツール を通してプロフィールURIを得ることができます

Param型に、可能な値small、normal、large、squareを渡して渡すこともできます。

公式ドキュメントを参照してください

3
user2119554