回答:
このURLからデータを取得するだけです。
http://graph.facebook.com/userid_here/picture
userid_here
写真を取得したいユーザーのIDに置き換えます。HTTPSを使用することもできます。
PHPのfile_get_contents
関数を使用してそのURLを読み取り、取得したデータを処理できます。
資源:
http://developers.facebook.com/docs/api
注:ではphp.ini
、PHP の関数を使用してそのURLを読み取るには、OpenSSL拡張機能が有効になっていることを確認する必要がありfile_get_contents
ます。
<img src="//graph.facebook.com/sarfraz.anees/picture" />
HTTPとHTTPSを切り替える場合に使用します...プロトコルはブラウザーによって検出され、HTTPSで混合コンテンツの警告は表示されません。
表示するには:
<img src="//graph.facebook.com/{{fid}}/picture">
<img src="//graph.facebook.com/{{fid}}/picture?type=large">
注:これは使用しないでください。以下の@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}}">
ユーザー名を使用してGraph API v2.0をクエリすることはできません。常に使用する必要がありますuserId
。
更新:
2012年8月末から、APIが更新され、さまざまなサイズのユーザーのプロフィール写真を取得できるようになりました。オプションの幅と高さのフィールドをURLパラメータとして追加します。
https://graph.facebook.com/USER_ID/picture?width=WIDTH&height=HEIGHT
どこWIDTH
とHEIGHT
ディメンション値を要求しています。
これにより、アスペクト比を維持しようとする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
}
}
更新を終了
ユーザーのプロフィール写真を取得するには、
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を返します。
例えば:
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
Facebook SDKリクエストメソッドの1つを使用している場合は、JSONレスポンスを返します。それ以外の場合は、画像自体を返します。常にJSONを取得するには、以下を追加します。
&redirect=false
そのようです:
https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
&redirect=false
画像にリダイレクトする代わりにJSONデータを返すために欠落しています
バイナリコンテンツではなく、画像の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はそこで取得できます。
フルサイズのプロファイル画像をサーバーに保存する簡単な1行のコード。
<?php
copy("https://graph.facebook.com/FACEBOOKID/picture?width=9999&height=9999", "picture.jpg");
?>
これは、phps.iniでopensslが有効になっている場合にのみ機能します。
受け入れられた回答へのコメントとしてこれを追加しましたが、より長い説明に値すると感じました。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を取得するには、何らかの適切な認証が必要になります。技術的には、プロフィール写真はまだ公開されており、/ 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月まで機能します。
1つの方法は、彼の回答に投稿されたGamletコードを使用することです。
名前を付けて保存 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;
詳細を理解するのに少し時間がかかったので、これを投稿すると思いました...プロフィール写真は公開されていますが、カールするときに取得するにはアクセストークンが必要です。
それを行う方法があります;)
" 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);
}
}
}
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'];
}
パラメータで「タイプ」を変更できます:
平方:
幅と高さの最大値は50ピクセルです。
小さい
最大幅50ピクセル、最大高さ150ピクセル。
正常
最大幅100ピクセル、最大高さ300ピクセル。
大
最大幅200ピクセル、最大高さ600ピクセル。
IDは便利なツールになると思いました。ユーザーが新しいアカウントを作成するたびに、より高いIDを取得する必要があります。私はグーグルで調べ、IDでアカウント作成日を推定する方法があることを発見し、metadatascience.comからMassoud Seifiがいくつかの優れたデータを収集しました。
この記事を読む:
そしてここにダウンロードするいくつかのIDがあります:
ブログの投稿「Facebookグラフオブジェクトの画像を取得」は、別の形式のソリューションを提供する可能性があります。チュートリアルのコードをFacebookのGraph APIとそのPHP SDKライブラリと共に使用します。
...そして、file_get_contentsを使用しないようにします(結果に直面する準備ができている場合を除きます-file_get_contentsとcurlを参照してください)。
プロフィール写真のサイズが気になりますか?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/
@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 が返されます。その後、自由に好きなことをしてください!
URI = https://graph.facebook.com/{}/picture?width=500'.format(uid)
オンラインのFacebook IDファインダーツールでプロファイルURIを取得できます
type paramに、可能な値としてsmall、normal、large、squareを渡すこともできます。
?type=large
追加できるクエリ文字列がもう1つの便利なものになるでしょう。ちなみに、私が入力していた画面のスクレイピングよりもはるかに優れた答えを出すための小道具、BTW :)。