facebook上传照片

时间:2011-01-31 11:24:22

标签: php facebook upload

我是facebook api的新手,我有一个小问题。 我正在尝试将图片上传到用户的相册。为此,我使用的是我在这里找到的PHP脚本,堆栈溢出:

    $app_id = xxx;
$app_secret = "xxx";
$my_url = "http://apps.facebook.com/myapp/test.php";

$code = $_REQUEST["code"];

if(empty($code)) {
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
        . $app_id . "&redirect_uri=" . urlencode($my_url);

    echo("<script> top.location.href='" . $dialog_url . "'</script>");
}


$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret="
    . $app_secret . "&code=" . $code;

$access_token = file_get_contents($token_url);

//upload photo
$file= 'test.png';
$args = array(
   'message' => 'Photo from application',
);
$args[basename($file)] = '@' . realpath($file);

print_r($args);

$ch = curl_init();
$url = 'https://graph.facebook.com/2038278/photos?access_token='.$access_token;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$data = curl_exec($ch);
//returns the photo id
print_r(json_decode($data,true));

但结果是:

  

数组([message] =&gt;照片来自   application [test.png] =&gt;   @ / [mypath] /test.png)数组([错误]   =&GT;数组([type] =&gt; OAuthException [message] =&gt;验证错误   应用。 ))

这是什么意思?我是否需要为我的应用程序提供扩展权限? 我给它访问basic和user_photos

非常感谢!


第二个脚本

$ app_id =“xxx”;     $ app_secret =“xxx”;     $ my_url =“http://apps.facebook.com/myapp/test.php”;

$code = $_REQUEST["code"];

if(empty($code)) {
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
        . $app_id . "&redirect_uri=" . urlencode($my_url) . "&scope=user_photos" ;

    echo("<script> top.location.href='" . $dialog_url . "'</script>");
}


$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret="
    . $app_secret . "&code=" . $code;

$access_token = file_get_contents($token_url);









$token = $access_token;

//upload photo
$file= 'test.png';
$args = array(
'message' => 'Photo from application',
);
$args[basename($file)] = '@' . realpath($file);

$ch = curl_init();
$url = 'https://graph.facebook.com/me/photos?access_token='.$token;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$data = curl_exec($ch);

print_r(json_decode($data,true));

3 个答案:

答案 0 :(得分:1)

亲爱的,当您将任何照片从您的应用程序上传到Facebook时,Facebook会自动创建一个包含您的应用程序名称的相册。你不需要做任何事情。只需从您的应用程序上传任何照片,然后转到您的个人资料,查看所有相册,然后您将看到Facebook已创建一个包含您的应用程序名称的相册,并且您上传的照片就位于其中。

答案 1 :(得分:1)

我认为你需要你的申请才能要求获得publish_stream的许可。还有一个名为photo_upload的权限,但据我所知,这被认为是旧的(但可能仍有效)

答案 2 :(得分:0)

如果我是你,我不会这样做。事实证明,对我来说,cURL方法有点过于复杂。这些是必须采取的步骤,您可以在下面看到关于此确切问题的最近博客文章的链接:

  1. 获取用户的user_photospublish_stream(不是必需的,但有利于未来的开发)。
  2. 代表用户创建相册,其中包含您要上传的照片。
  3. 获取您刚创建的相册的相册ID。
  4. 指定照片的参数:随附的消息,服务器上文件的位置以及您可以在this docs reference about publishing photos (bottom of page)中查找的一堆其他内容。
  5. 使用给定参数上传照片。
  6. Dai Pratt's excellent tutorial on photo uploading via the New Graph API

    重要提示:上面的脚本存在严重缺陷 - 它不会检查相册是否已存在,以防您想代表用户上传多张照片。将用户的ID和您在数据库中创建的专辑ID存储起来非常重要,这样您每次用户希望上传图像时都可以查询它,并相应地创建或不创建相册。

    编辑:现在,在我发布之后,我在这里看到评论中的确切链接。无论如何 - 希望这会有所帮助:)