1

在网站上提供选项以单击并在 facebook 上上传图像:搜索后得到此代码

$pic = $_GET['PhotoID']; //example: http//www.mysite.com/content/2013/03/image.jpg
copy($pic, 'tmp/file.jpg');
$args['image'] = '@' . realpath('tmp/file.jpg');
$publish = $facebook->api('/me/photos', 'post', $args);
unlink('tmp/file.jpg');

这段代码工作正常。但是将图像复制到 tmp 需要一些时间,我想加快这个过程。(仅从我的网站上传图片,没有外部图片)

如何在不复制到 temp 的情况下使用此代码:

 $pic = $_GET['PhotoID']; //example: http://www.mysite.com/content/2013/03/image.jpg
    $args['image'] = '@' . realpath('$pic');
    $publish = $facebook->api('/me/photos', 'post', $args);

不确定“@”和 realpath 的用法我可以在不使用 realpath 的情况下使用完整的图像 url:

`$args['image'] = $pic;
        $publish = $facebook->api('/me/photos', 'post', $args);`

&如果用户 dnt 授权应用程序,显示错误消息的最佳方式是什么。或诸如致命错误之类的错误:发生未捕获的 OAuthException

4

2 回答 2

2

您不需要将图像复制到/tmp. 您可以通过在参数中提供图片网址本身来直接上传图片。下面的代码应该工作:

$picUrl = 'http//www.mysite.com/content/2013/03/image.jpg';
$photoId = $facebook->api("me/photos","POST",array('url'=>$picUrl,'message'=>"status message")
于 2013-04-05T07:13:06.123 回答
0

我在我的应用程序中做了同样的事情,请继续使用这个.. 确保您拥有 publish_stream 权限

$attachment = array(
                'message' => 'Message',
                'name' =>'your app name',
                'caption' => "caption under the image",
                'link' => 'your link',
                'description' => 'description regarding the image',
                'picture' => 'path of the picture(doesnt work for the local path, should be server path)',
                'method'=>'stream.publish',
                'actions' => array(
                                array(
                                  'name' => 'App name',
                                  'link' => 'your app link'
                                )
                            )
                );

然后

$result = $facebook->api('/'.$uid.'/feed/','post',$attachment);

这里 $uid 是您的 facebook 用户 ID,您可以从 facebook 配置文件中获取

$facebook = new Facebook('configure your facebook config file here');    
$my_details = $facebook->api('/me');
$uid = $my_details['id'];  // id of the user
于 2013-04-05T07:09:49.603 回答