无法在Facebook页面PHP SDK Graph API上标记用户

时间:2011-12-08 03:03:53

标签: facebook-graph-api upload tags tagging facebook-page

我试图编写一个脚本,允许用户在我网站上显示的照片上标记自己。

一旦用户选择了要标记的人,照片就会上传到我网站的Facebook粉丝页面,但Facebook将不允许我的应用使用当前登录的用户profile_id或任何他们的用户标记照片朋友。

通过添加标签,一切都很有效。我收到错误: 致命错误:未捕获OAuthException:发生了未知错误。在第1039行的/home/public_html/include/api/facebook.3.0.1/base_facebook.php中引用

以下是目前的代码:

<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . "/include/api/facebook.3.0.1/facebook.php");

//Name of album you want to create
$album_name = "December 4, 2011";

// Create our application instance
// (replace this with your appId and secret).
$facebook = new Facebook(array(
        'appId' => 'APP_ID_INSERT_HERE',
        'secret' => 'APP_SECRET_INSERT_HERE',
    ));

$facebook->setFileUploadSupport(true);


// Get User ID
$user = $facebook->getUser();

// We may or may not have this data based 
// on whether the user is logged in.
// If we have a $user id here, it means we know 
// the user is logged into
// Facebook, but we don’t know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.

if ($user) {
    try {
        // Proceed knowing you have a logged in user who's authenticated.
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
    }
}

if ($user) {

// Get access token for Facebook Page
$page_id = '170367249680012';
$page_info = $facebook->api("/$page_id?fields=access_token");

if (!empty($page_info['access_token'])) {

    $param = array(
        'method' => 'fql.query',
        'query' => 'SELECT object_id FROM album WHERE owner="FACEBOOK_PAGE_ID_INSERT_HERE" AND name="' . $album_name . '"'
    );
    //Check if album exists
    $album = $facebook->api($param);

    if (isset($album[0]['object_id'])) {
        // If album exists store id in the variable $album_uid
        $album_uid = $album[0]['object_id'];
    } else {

        // ELSE Create album
        $album_details = array(
            'access_token' => $page_info['access_token'],
            'message' => 'Album desc',
            'name' => $album_name
        );

        $create_album = $facebook->api('/me/albums', 'post', $album_details);

        //Get album ID of the album you've just created
        $album_uid = $create_album['id'];
    }

    //Photo Details

    $file = 'test.jpg'; //Example image file
    $photo_details['image'] = '@' . realpath($file);

    //Upload a photo to album

    $args = array(
        'access_token' => $page_info['access_token'],
        'image' => '@' . realpath($file),
        'message' => "test"
    );


    $upload_photo = $facebook->api('/' . $album_uid . '/photos', 'post', $args);

    //Get id of photo uploaded
    $photo_id = $upload_photo['id'];

    echo "<br/>" . $photo_id . "<br/>";


//ADD TAGS

    $argstag = array('to' => $user);
    $argstag['x'] = 40;
    $argstag['y'] = 40;
    $datatag = $facebook->api('/' . $photo_id . '/tags', 'post', $argstag);
    }
}

// Login or logout url will be needed depending on current user state.
if ($user) {
    $logoutUrl = $facebook->getLogoutUrl();
} else {
    $loginUrl = $facebook->getLoginUrl(array('scope' => 'status_update,publish_stream,user_photos,offline_access,manage_pages'));
}

?>
<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
  <head>
    <title>php-sdk</title>
    <style>
      body {
        font-family: 'Lucida Grande', Verdana, Arial, sans-serif;
      }
      h1 a {
        text-decoration: none;
        color: #3b5998;
      }
      h1 a:hover {
        text-decoration: underline;
      }
    </style>
  </head>
  <body>
    <h1>php-sdk</h1>

    <?php if ($user): ?>
      <a href="<?php echo $logoutUrl; ?>">Logout</a>
    <?php else: ?>
      <div>
        Login using OAuth 2.0 handled by the PHP SDK:
        <a href="<?php echo $loginUrl; ?>">Login with Facebook</a>
      </div>
    <?php endif ?>

  </body>
 </html>

有趣的是,如果我使用相同的脚本将图像上传到用户个人资料并标记其工作的图像!

对于那些想要执行此操作的人,请删除以下两行代码     'access_token'=&gt; $ page_info [ 'ACCESS_TOKEN'],

改变 $ upload_photo = $ facebook-&gt; api('/'。$ album_uid。'/ photos','post',$ args);

要 $ upload_photo = $ facebook-&gt; api('/ me / photos','POST',$ args);

我搜索了高低,看看是否有限制阻止API允许用户在粉丝页面上标记自己或朋友,但我找不到任何东西。我唯一能找到的是:

http://forum.developers.facebook.net/viewtopic.php?id=101485

所以我不确定它是否是一个真正的错误,但我似乎遇到了同样的问题。它在6个月前被提交为一个错误,似乎没有任何进展。

有没有人知道这个问题的解决方法?我不想将图像上传到用户个人资料并对其进行标记。

1 个答案:

答案 0 :(得分:1)

检查您的页面设置。有一个设置允许粉丝在照片中标记自己。确保已启用并重试。在Tagging Ability下查找Manage Permissions设置。