【问题标题】:Facebook: post image and description to wall and in page album via phpFacebook:通过 php 将图像和描述发布到墙上和页面相册中
【发布时间】:2012-03-12 19:32:03
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    2.) 以页面管理员身份登录到下面的 url,并授予权限 (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

    我不是 100% 确定,但我相信使用图形 API,您只能将图像上传到通过图形 API 创建的相册;即您需要首先通过graph 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 );
    

    【讨论】:

    • 感谢您昨天的回复。但我仍然有一个问题。我总是需要手动生成页面的访问令牌。有没有办法获得这个页面的不会过期的访问令牌?
    • 如果您在第 2 步中添加了 offline_access。)访问令牌不应过期
    • 我这样做了,但是在响应中还有一个过期时间。大约 7000 秒长。
    • 我发现检索到的令牌确实过期了。但是,从阅读developers.facebook.com/roadmap/offline-access-removal 看来,我发现您可以点击graph.facebook.com/oauth/…,这将返回一个有效期为 60 天的 access_token
    • 抱歉,我已经有一段时间没有尝试过了……它是在 3 年前发布的,如果通过 API 上传图像仍然如此复杂,我会感到非常惊讶,即它要么工作得更好,要么一点也不。我很确定未过期的令牌很久以前就被禁用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多