php - facebook APi-如何通过Facebook图像APi来获得Facebook用户概要文件(而不需要用户"允许"应用程序)

  显示原文与译文双语对照的内容

在他们的Facebook 网址我写一个获取被请求 CMS 一幅配置文件的用户的图像。 如何完成这里操作? 有没有什么一个 Faceboook API调用来取得一配置文件的用户没有这里工具,用户无需图片网址允许申请书?

时间: 原作者:

要显示:

50x50像素


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

200像素宽度


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

保存( 使用 PHP )

注意:请勿使用这里 。 查看下面的@Foreever's 评论。


$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上的用户标识( 或者昵称) 。

要获取图像 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";

原作者:

用于在服务器上保存完整大小配置文件图像的简单one-line代码。


<?php

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

?>

只有在 php.ini. 中启用了 openssl,这才会工作

原作者:

有这样的方法;

感谢" 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);
 }
 }
 }

原作者:

博文 抓住辨别真伪的特征Facebook图表对象 可能提供了另一种形式的解决方案。 使用教程中的代码以及图 API 和它的PHP SDK库的。

。并尝试不使用 file_get_contents ( 除非你准备好面对结果- 请参见 file_get_contents vs curl ) 。

原作者:

一种方法是使用代码 Gamlet在他的回答中发布:

  • 保存为 curl.php

  • 然后在你的file: 中

    
    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 它。

原作者:
...