0

我想从 facebook 检索外部网页的最新粉丝专页更新。

好像有两个问题...

一,访问令牌似乎在一小时后过期,有没有办法获得永久访问令牌?

其次,我想获取页面所有者最近 10 个帖子的 json 字符串(包含“消息”字段的帖子)。

例如,如果我使用“ https://graph.facebook.com/stackexchange/posts?fields=message&limit=10 ”,它会返回不包含消息字段的行。有没有办法过滤这些?

也许有一种方法可以使用 FQL 查询来检索它?

4

3 回答 3

1

如果您的页面没有任何限制,您可以使用永久应用访问令牌获取此数据。如果您使用其中一种服务器端 SDK,它们会自动为您获取一个。

如果您没有使用 SDK,或者您正在使用 JavaScript 编写代码,那么文档的“作为应用程序登录”部分将引导您完成此操作。

您通过此方法获得的访问令牌将一直存在,直到您更改应用程序密码。

如果您的页面有年龄和/或国家/地区限制,那么您需要用户访问令牌才能通过 API 获取数据。根据 TOS,您应该对每个用户进行身份验证,并且仅在他们满足页面所有者设置的限制时才向他们显示结果。

最好通过 FQL 获取页面发布的最后 10 个帖子。试试这个查询:

SELECT created_time, message, attachment FROM stream WHERE 
   source_id = YOUR_PAGE_ID AND filter_key = "owner" AND message != "" LIMIT 10
于 2013-02-12T15:31:46.813 回答
0

好吧,您可以尝试让 Facebook 页面 ( $pageId) 的一位管理员授权您的应用 ( $fbAppId):

<script>
    var oauth_url = 'https://www.facebook.com/dialog/oauth/';
    oauth_url += '?client_id=<?php echo $fbAppId; ?>';
    oauth_url += '&redirect_uri=' + encodeURIComponent('https://www.facebook.com/pages/null/<?php echo $pageId; ?>/?sk=app_<?php echo $fbAppId; ?>');
    oauth_url += '&scope=manage_pages'

    window.top.location = oauth_url;
</script>

当他们授权它时,您可以使用您获得的签名请求 ( $signedRequest = $facebook->getSignedRequest();) 请求持久令牌:

$url = 'https://graph.facebook.com/oauth/access_token?client_id=' . $fbAppId . '&client_secret=' . $appSecret . '&grant_type=fb_exchange_token&fb_exchange_token=' . $signedRequest['oauth_token'];

cURL 此 URL 并获取生成的 access_token:

$access_token = substr($response, strlen('access_token='));

将其保存到您的数据库。有了这个,你可以得到帖子:

$graphUrl = '/' . $pageId . '/posts?access_token=' . $accessToken;
$posts = $this->facebook->api($graphUrl, 'GET');

我不知道这个 access_token 过期多久。

于 2013-02-11T17:31:14.750 回答
0

关于永久访问令牌:我认为您正在寻找应用访问令牌。阅读更多:https ://developers.facebook.com/docs/technical-guides/opengraph/publishing-with-app-token/

关于您的第二个问题:从输出中检查是否存在“消息”键。如果不排除该条目。在 PHP 中有一个函数 array_key_exists 可以做这件事。

于 2013-02-11T06:45:36.670 回答