Facebook:通过php将图像和描述发布到墙上和页面相册中

时间:2012-02-22 13:06:13

标签: php facebook facebook-graph-api facebook-apps facebook-page

我希望用户通过网站上的表单在Facebook页面上发布图像。 当他们通过本网站的Facebook登录时,他们可以从他们的计算机中选择一张图像。

一旦他们选择了图片,我希望将其发布到用户墙,以及我是其中一位管理员的页面相册。

我已为此创建了一个应用,但我们似乎无法找到一种方法让应用在此Facebook页面上发布。

我们是否需要在此页面或应用上设置任何权限?

1 个答案:

答案 0 :(得分:5)

要将图片上传到您是管理员的Facebook页面,您需要执行以下操作:

1。)创建一个Facebook应用程序(通常的方式),确保指定Canvas URL

2。)导航到以网页管理员身份登录的网址,并授予权限(user_photos,manage_pages,offline_access,publish_stream)

https://www.facebook.com/dialog/oauth?
    client_id=<application_id>
    &redirect_uri=<canvas_url>
    &response_type=token
    &scope=user_photos,manage_pages,offline_access,publish_stream

3。)当您为应用程序提供所需的权限时,您将被重定向到canvas_url#access_token = * access_token *,例如

http://example.com/#access_token=awe12

4.)然后导航到

https://graph.facebook.com/me/accounts?access_token=<access_token>

(使用来自#3的访问令牌)。这将列出您管理的页面;记下要上传图像的页面的access_token

我不是百分百肯定,但我相信使用graph api你只能将图片上传到通过图形api创建的专辑;即你需要先通过图形api创建一个专辑。这是使用curl的示例代码:

$uri = sprintf( 
    'https://graph.facebook.com/%1$s/albums?access_token=%2$s',
    $page_id, 
    $access_token
);

$post_fields = array(
    'name' => trim( $album_name )
);

$curl = curl_init( $uri );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );  
curl_setopt( $curl, CURLOPT_POST, TRUE );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $post_fields );  

$raw_data = curl_exec( $curl );
curl_close( $curl );

$data = json_decode( $raw_data, $assoc = TRUE );

上面的$data将包含相册ID,您需要上传照片:

// prepare the curl post fields
$batch = sprintf(
    '[{"method":"POST", "relative_url":"%1$s/photos", "attached_files":"file1"}]',
    $album_id
);  

$post_fields = array(
    'batch' => $batch,
    'access_token' => $access_token,
    'file1' => '@' . $image_abs_path
);
$uri = 'https://graph.facebook.com';

$curl = curl_init( $uri );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );  
curl_setopt( $curl, CURLOPT_POST, TRUE );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $post_fields );  

$raw_data = curl_exec( $curl );
curl_close( $curl );

$data = json_decode( $raw_data, $assoc = TRUE );
相关问题