Answers:
只需通过以下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
,您需要确保已启用OpenSSL扩展以使用file_get_contents
PHP 的功能来读取该URL。
<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">
注意:请勿使用this。请参阅下面的@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已更新,可以检索大小不同的用户个人资料图片。添加可选的width和height字段作为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
取决于您想要的大小。
该调用将根据您选择的type参数返回一个具有其大小的URL到单个图像。
例如:
https://graph.facebook.com/USER_ID/picture?type=small
返回图像的较小版本的URL。
API仅指定个人资料图片的最大大小,而不指定实际大小。
广场:
最大宽度和高度为50像素。
小
最大宽度为50像素,最大高度为150像素。
正常
最大宽度为100像素,最大高度为300像素。
大
最大宽度为200像素,最大高度为600像素。
如果调用默认的USER_ID /图片,则会得到正方形。
澄清说明
如果您致电(按照上述示例)
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
&redirect=false
返回JSON数据而不是重定向到图像的方法
要获取图片网址,而不是二进制内容:
$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:
将此添加为已接受答案的注释,但认为它值得更长的解释。从2015年4月开始,这可能会提高几次。
从图api的V2版本开始,接受的答案不再使用用户名起作用。因此,现在您需要首先使用用户名,并且您不再可以使用用户名来获取此用户名。出于隐私原因,使事情更加复杂的是,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中的 docs 和该示例用户: http: //graph.facebook.com/v2.2/4/picture?redirect=0),但仅根据用户个人资料来确定用户的标准用户ID似乎是不可能的-您的应用需要让他们批准与该应用的交互,对于我的用例(仅在其FB个人资料链接旁边显示个人资料图片)就显得过分了。
如果有人想出了一种基于用户名获取个人资料图片的方法,或者选择如何获取用户ID(甚至是替代用户名)来检索个人资料图片,请分享!在此期间,旧的图表网址仍然有效,直到2015年4月。
另存为 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。我在Google上搜索后发现,有一种方法可以通过ID估算帐户创建日期,而metadatascience.com上的Massoud Seifi收集了一些有关该数据的良好数据。
阅读本文:
以下是一些ID可供下载:
博客文章“获取Facebook图形对象的图片”可能提供另一种解决方案。将教程中的代码与Facebook的Graph API一起使用及其PHP SDK库一起使用。
...并尽量不要使用file_get_contents(除非您准备好面对后果-参见file_get_contents vs 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/
URI = https://graph.facebook.com/{}/picture?width=500'.format(uid)
您可以通过在线Facebook ID Finder工具获取个人资料URI
您还可以传递类型参数,其可能的值包括小,标准,大,平方。
请参阅官方文档
?type=large
可以添加的查询字符串。提出比我正在键入的屏幕抓取更好的答案的道具,顺便说一句:)。