0

我正在使用最新的 Facebook PHP SDK 做一个非常简单的 PHP 应用程序,旨在显示我的页面的状态数。

为此,我创建了一个应用程序来拥有应用程序 ID 和应用程序机密,但在我有点迷路之后。

我以为我需要一个应用程序秘密令牌,所以我首先尝试这样:

<?php
public function getFacebookPosts() {
    require __DIR__ . '/libs/facebook-sdk/facebook.php';

    $appId = 'myID';
    $appSecret = 'mySecret';

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

    $token = $this->getFacebookAppToken($appId, $appSecret);

    try {
        $jinnove = $facebook->api('/my.page');
        $fql = '/fql?q=SELECT+status_id+FROM+status+WHERE+uid=' . $jinnove['id'] . '&' . $token;
        var_dump($facebook->api($fql));
    } catch(FacebookApiException $e) {
        var_dump($fql, $e);
    }
}

/**
 * Function to Get Access Token from Facebook
 * @param $appId
 * @param $appSecret
 * @return string
 */
protected function getFacebookAppToken($appId, $appSecret)
{
    $args = array(
        'grant_type' => 'client_credentials',
        'client_id' => $appId,
        'client_secret' => $appSecret
    );

    $ch = curl_init();
    $url = 'https://graph.facebook.com/oauth/access_token';
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $data = curl_exec($ch);

    return $data;
}

但它返回错误 102 并显示以下消息:“请求此资源需要用户访问令牌。”。

然后我在 IRC 上询问,有人告诉我我需要一个用户访问令牌才能做到这一点。

据我所知,只有当用户明确登录 Facebook 以授权此应用并有时更新令牌时,才能生成用户访问令牌。

真的吗?有没有办法使用不暗示要登录用户的令牌?基本上任何人都可以查看这个数量的状态,即使是没有 Facebook 帐户并且我根本不需要 UI 对话框的人。

4

1 回答 1

0

出于某种原因,Facebook 决定查询状态只能由用户完成。

您可以通过查询表来解决这个问题,并且只返回带有状态更新的stream帖子:type = 46

SELECT post_id FROM stream WHERE source_id= YOUR_PAGE_ID AND type = 46 LIMIT 100

stream表有很多限制。即使LIMIT页面已经存在一段时间,您也可能无法获得所有状态更新。

您还可以通过以下更改将 API 调用的数量从 3 减少到 1 来加速您的程序:

  • 如果您想从其用户名中获取页面的 ID,= YOUR_PAGE_ID请将上述查询中的替换为IN (SELECT id FROM profile WHERE username = 'YOUR_PAGE_USERNAME')
  • 您不需要“getFacebookAppToken()”函数。如果您没有经过身份验证的用户,PHP SDK 将自动为您获取应用访问令牌。
于 2013-04-08T13:15:23.787 回答