Facebook API – 如何通过Facebook API获取Facebook用户的个人资料图片(无需用户“允许”该应用程序)
我正在开发一个CMS ,从他们的Facebook URL (即http://facebook.com/users_unique_url )获取用户的个人资料图片。 我怎样才能做到这一点? 是否有Faceboook API调用提取用户的configuration文件图像URL,而用户不需要允许应用程序?
只需通过此URL获取数据:
http://graph.facebook.com/userid_here/picture
用你想获取照片的用户的IDreplaceuserid_here
。 您也可以使用HTTPS。
您可以使用PHP的file_get_contents
函数来读取该URL并处理检索到的数据。
资源:
http://developers.facebook.com/docs/api
注意:在php.ini
,您需要确保启用OpenSSL扩展来使用PHP的file_get_contents
函数来读取该URL。
以显示:
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上..
注意:如果图像标记为“18+”,则需要来自18位以上用户的有效access_token:
<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">
更新 :
从2012年8月底开始,API已更新,允许您检索不同大小的用户个人资料照片。 将可选的宽度和高度字段添加为URL参数:
https://graph.facebook.com/USER_ID/picture?width=WIDTH&height=HEIGHT
WIDTH
和HEIGHT
是你要求的尺寸值。
这将返回一个最小尺寸为WIDTH
x HEIGHT
的configuration文件图片,同时尝试保留宽高比。 例如,
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
可以是用户标识号或用户名。
要获取特定尺寸的用户个人资料图片,请致电
https://graph.facebook.com/USER_ID/picture?type=SIZE
SIZE
应该用其中一个词来代替
square small normal large
取决于你想要的大小。
此调用将根据您select的types参数将URL返回到单个图像的大小。
例如:
https://graph.facebook.com/USER_ID/picture?type=small
将URL返回到图像的小版本。
API仅指定configuration文件映像的最大大小,而不是实际大小。
广场:
最大宽度和高度为50像素。
小
最大宽度为50像素,最大高度为150像素。
正常
最大宽度为100像素,最大高度为300像素。
大
最大宽度为200像素,最大高度为600像素。
如果你打电话给默认的USER_ID /图片,你会得到正方形的types。
澄清
如果你打电话(按照上面的例子)
https://graph.facebook.com/redbull/picture?width=140&height=110
如果您使用其中一种Facebook SDK请求方法 ,它将返回一个JSON响应。 否则,它将返回图像本身。 要始终检索JSON,请添加:
&redirect=false
像这样:
https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
要获取图片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,而不是USERNAME。 你可以在那里得到你的Facebook ID:
简单的一行代码,以保存您的服务器上的全尺寸的个人资料图像。
<?php copy("https://graph.facebook.com/FACEBOOKID/picture?width=9999&height=9999", "picture.jpg"); ?>
这只会在php.ini中启用openssl时才起作用。
添加这个作为接受答案的评论,但觉得值得更长的解释。 从2015年4月左右开始,这可能会提高几次。
从graphicsapi的V2开始,接受的答案不再使用用户名。 所以现在你首先需要用户名,而且你不能再使用用户名来获得这个。 更为复杂的是,出于隐私的原因,Facebook现在正在改变用户的每个应用程序(请参阅https://developers.facebook.com/docs/graph-api/reference/v2.2/user/和https:://developers.facebook .com / docs / apps / upgrading /#upgrading_v2_0_user_ids ),所以你将不得不有一些正确的身份validation来检索你可以使用的用户标识符。 从技术上来说,configuration文件图片仍然是公开的,并且可以在/ userid / picture处获得(参见https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture上的文档,本示例用户:; http: //graph.facebook.com/v2.2/4/picture?redirect=0 )然而,根据用户的个人资料来确定用户的标准用户标识似乎是不可能的 – 您的应用需要让他们批准与应用进行交互我的用例(只显示他们的FB个人资料链接旁边的个人资料图片)是矫枉过正。
如果有人已经想出了一个方法来获取基于用户名的个人资料图片,或者,如何获得一个用户ID(即使是一个交替的)用来检索个人资料图片,请分享! 与此同时,旧graphicsurl仍然有效,直到2015年4月。
一种方法是使用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;
我以为我会张贴这个,因为我花了一些时间来弄清楚的细节…即使configuration文件图片是公开的,你仍然需要有一个访问令牌,当你curl它。
有办法做到这一点;)
感谢“ 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); } } }
我在想 – 也许ID将是一个有用的工具。 每当用户创build一个新的帐户,它应该得到一个更高的ID。 我search了一下,发现有一种方法可以通过ID来估算账户创builddate,而来自metadatascience.com的Massoud Seifi收集了一些关于它的好的数据。
阅读这篇文章:
这里有一些ID要下载:
从2015年4月开始使用PHP(HTTP GET)解决scheme(不含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']; }
你可以在参数中改变'type':
广场:
最大宽度和高度为50像素。
小
最大宽度为50像素,最大高度为150像素。
正常
最大宽度为100像素,最大高度为300像素。
大
最大宽度为200像素,最大高度为600像素。
博客文章抓取Facebookgraphics对象的图片可能提供另一种forms的解决scheme。 使用教程中的代码以及Facebook的Graph API和PHP SDK库。
…尽量不要使用file_get_contents (除非你已经准备好面对后果 – 参见file_get_contents vs curl )。
你关心个人资料图片的大小吗? 在使用PHP实现与Facebook的login时。 我们将向您展示在Facebook PHP SDK中获取大尺寸档案图片的简单方法。 此外,你可以得到Facebookconfiguration文件的自定义大小的图像。
通过使用下面的代码行设置configuration文件图片尺寸。
$ 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,这样的过程!
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。 随意随意做任何你想要的东西吧!
- 检查扩展权限与新的Facebook的JavaScript的SDK
- 无法添加窗口 – 令牌android.os.BinderProxy无效; 你的活动正在运行?
- 没有loginbutton的Facebookauthentication
- Facebook JS SDK的FB.api('/ me')方法不会返回我在Graph API v2.4 +中所期望的字段
- 如何在Android上制作Facebook的应用程序新菜单?
- Chrome webkit inspector中不断产生“不安全的JavaScript尝试访问带有URL的帧…”错误
- FacebookgraphicsAPI将不会返回电子邮件地址
- 张贴到Facebook页面没有“manage_pages”权限使用PHP
- Android Facebook SDK 3.0在login时给出“remote_app_id与存储的ID不匹配”