0

获取 Facebook 个人资料图片并将其下载到我的目录“www.site.com/images”..

<?php $url = "https://graph.facebook.com/$id/picture?width=350&height=500&redirect=false"; ?>

变量“$id”取自文本字段,我尝试绕过 facebook 在其图像上放置的“重定向”,因此为了获得“真实 url”,我决定从 JSON 中提取它。在浏览器中我收到这个:

  "url": "https://fbcdn-profile-a.akamaihd.net/hprofil[...]",
  "width": 299,
  "height": 426,
  "is_silhouette": false

我所需要的只是要提取并保存到我网站目录的“真实网址”。

$.getJSON,似乎是分离信息的最简单方法。

概括

  • 在 PHP 或 JAVASCRIPT 中为 JSON 提取/分隔符脚本
  • 或将“图像”保存到“目录”。
4

2 回答 2

3

我的解决方案:

带卷曲的 PHP

<?php
  $ch = curl_init("http://graph.facebook.com/$id/picture?width=350&height=500&redirect=false");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); // Mean 5 seconds
  $content = curl_exec($ch);
  $data = json_decode($content, true);
  curl_close($ch);
  var_dump($data["data"]["url"]);

PHP 与 file_get_contents()

<?php
  $content = file_get_contents("http://graph.facebook.com/$id/picture?width=350&height=500&redirect=false");
  $data = json_decode($content, true);
  var_dump($data["data"]["url"]);

带有 jQ​​uery 的 JavaScript

var url = "http://graph.facebook.com/ID/picture?width=350&height=500&redirect=false";
$.get(url,function(resp) {
  alert(resp.data.url);
});

编辑

您是否尝试删除“&redirect=false”

"https://graph.facebook.com/$id/picture?width=350&height=500"
redirect to
"https://fbcdn-profile-a.akamaihd.net/hprofil[...]"

所以你可以这样做:

<?php
  $url = "https://graph.facebook.com/$id/picture?width=350&height=500";
  $data = file_get_contents($url);
  $fp = fopen("img$id.jpg","wb");
  if (!$fp) exit;
  fwrite($fp, $data);
  fclose($fp);

了解有关图片图表的更多信息

于 2013-03-29T11:16:36.583 回答
0

我在从 fb 存储图像时使用了此代码。

$dir = "your_directory";
$img = md5(time()).'.jpg';
$url = "some_value";
$ch = curl_init($url);
$fp = fopen($_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.$img, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);
于 2013-03-29T12:05:36.630 回答