【问题标题】:How to Upload a Photo to a Facebook Page's Timeline as the Facebook Page itself, Not to the user feed如何将照片作为 Facebook 页面本身上传到 Facebook 页面的时间线,而不是上传到用户提要
【发布时间】:2013-05-15 22:18:57
【问题描述】:

好的,所以下面的鳕鱼基本上可以正常工作,当这条线是这样的:

$post_url = '/'.$userPageId.'/feed';

这成功发布到 Facebook 页面时间轴。但是我想上传一张照片,当我把这行改成

$post_url = '/'.$userPageId.'/photos';

它发布照片...但它发布到用户供稿,而不是作为 Facebook 页面。

我希望这可以将照片发布到 Facebook 页面时间轴

[config.php]

<?php
include_once("inc/facebook.php");

##################################
//Call Facebook API

// Required facebook permissions
$fbPermissions = 'publish_stream,manage_pages,photo_upload';

$facebook = new Facebook(array(
  'appId'  => $appId,
  'secret' => $appSecret,
'fileUpload' => true,
'cookie' => true  
));

$fbuser = $facebook->getUser();
?>

[进程.php]

<?php
include_once("config.php");

if($_POST)
{
    //Post variables we received from user
    $userPageId         = $_POST["userpages"];
    $userMessage         = $_POST["message"];

    if(strlen($userMessage)<1) 
    {
            //message is empty
            $userMessage = 'No message was entered!';
    }

    //HTTP POST request to PAGE_ID/feed with the publish_stream
    $post_url = '/'.$userPageId.'/photos';

    //posts message on page statues 
    $msg_body = array(
        'source' => '@' . 'test.jpg',                   
        'message' => "yo yo yo",
    );

    if ($fbuser) {
        try {
            $postResult = $facebook->api($post_url, 'post', $msg_body );
        } catch (FacebookApiException $e) {
            echo $e->getMessage();
        }
    } else {
        $loginUrl = $facebook->getLoginUrl(
            array('redirect_uri'=>$homeurl,'scope'=>$fbPermissions)
        );
        header('Location: ' . $loginUrl);
    }

    //Show sucess message
    if($postResult)
    {

    }
}
?>

[index.php](用于登录)

<?php
include_once("config.php");
if ($fbuser)
{
    try {
        $user_profile = $facebook->api('/me');
        //Get user pages details using Facebook Query Language (FQL)
        $fql_query = 'SELECT page_id, name, page_url FROM page '
            .'WHERE page_id IN (SELECT page_id FROM page_admin WHERE uid='
            .$fbuser.')';
        $postResults = $facebook->api(
            array( 'method' => 'fql.query', 'query' => $fql_query )
        );
    } catch (FacebookApiException $e) {
        echo $e->getMessage();
        $fbuser = null;
    }
} else {
    //Show login button for guest users
    $loginUrl = $facebook->getLoginUrl(
        array('redirect_uri'=>$homeurl,'scope'=>$fbPermissions)
    );
    echo '<a href="'.$loginUrl.
        '"><img src="images/facebook-login.png" border="0"></a>';
    $fbuser = null;
}

if($fbuser && empty($postResults))
{
    /*
    if user is logged in but FQL is not returning any pages, we need to make
    sure user does have a page OR "manage_pages" permissions isn't granted yet
    by the user. Let's give user an option to grant permission again.
    */
    $loginUrl = $facebook->getLoginUrl(
        array('redirect_uri'=>$homeurl,'scope'=>$fbPermissions)
    );
    echo '<br />Could not get your page details!';
    echo '<br /><a href="'.$loginUrl.'">Click here to try again!</a>'; 
}
elseif ($fbuser && !empty($postResults))
{
    //Everything looks good, show message form.
}
?>

【问题讨论】:

    标签: facebook facebook-graph-api photo facebook-timeline


    【解决方案1】:

    如果您想充当 Facebook 主页并上传照片,您需要:

    1. 成为 Facebook 页面的管理员
    2. 获得授权时至少有以下范围:'manage_pages'、'photo_upload'
    3. 访问令牌作为 Facebook 页面,而不是作为管理员用户

    您可以通过调用Open Graph API 来获取您作为管理员的 Facebook 页面的访问令牌:

    $accounts = $facebook->api('/me/accounts','GET');
    

    为了获取访问令牌和更多信息,您需要“manage_pages”权限。

    获得访问令牌后,您需要使用它并使用它重新初始化客户端。然后,您基本上可以充当它,并张贴照片。希望这足以让你开始。您的代码看起来已设置为能够将照片上传到您想要的位置。这完全是访问令牌的问题。

    编辑:

    您可以使用setAccessToken 使用PHP SDK 设置访问令牌:

    // Set a new access token, by first getting it via means other than the SDK
    $facebook->setAccessToken($new_access_token);
    

    【讨论】:

    • 非常感谢您为我提供了这个问题的第一缕曙光 :) 你说的是有道理的......但是......我想知道访问令牌......在哪里我要设置访问令牌吗?
    • 好吧,我用了,$access_token = $facebook->getAccessToken();这正在生成一个令牌......但是,我不知道它正在为我的哪个 Facebook 页面生成(或者如果这很重要)我尝试添加: $new_access_token = "mytokenhere"; $facebook->setAccessToken($new_access_token);到 process.php 代码,但没有变化......到目前为止......猜测我可能需要获取页面特定的令牌代码?但不确定...谢谢!
    • 调用 $facebook->getAccessToken() 为您的用户获取令牌。您需要进行我提到的 Open Graph API 调用并获取您的用户作为管理员的页面。确保您已使用适当的范围授权您的应用程序,以便您可以获取数据。获取数据后,您几乎可以从那里获取访​​问令牌。
    • 为您编辑了我的答案以获取 Facebook 页面信息,该信息将具有您需要的访问令牌。
    • 哈利路亚!你是我的救命恩人。这就像一个桃子。谢谢兄弟,真的,谢谢...那是 10 个小时,数着在网上搜索答案...谢谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多