17

我的客户公司为数千家小型企业管理 Facebook 页面。我们为我们的客户构建了一个 Facebook 应用程序,以简化流程并允许他们一次性快速更改许多/所有页面。

无论出于何种业务原因,我们的客户公司只为每个页面添加了一名员工作为管理员(以及小企业主)。此用户帐户添加了我们的应用程序,我们正在获取页面令牌并使用这些页面令牌来管理页面(更改联系信息、添加选项卡、获取墙帖)。我们遇到了一些非常苛刻的 api 请求限制。现在我们每分钟只能添加大约 3 个新的 Facebook 页面(我认为这可能需要 6-10 个 api 调用,当它全部完成时)。

我见过人们估计,一个访问令牌允许您大约 600 个请求/600 秒,但我认为由于我们使用页面令牌完成大部分工作,我们的操作不会计入单个 api 限制。

是否有人确定 api 限制是否基于单个令牌,即使它们在技术上属于同一用户?考虑到我真的无法向这些页面添加更多管理员,有什么办法可以绕过这个限制?

4

3 回答 3

2

实际上它非常简单,您只需要为 PAGE 请求访问令牌,而不是用户。

    $mQuery=array('access_token'=> 'SELECT access_token FROM page WHERE page_id = 'page_id,    
                  'album_id'=> 'SELECT object_id FROM album WHERE owner = '.page_id.' AND name = "Timeline Photos"');
    $multiQueryResult = $facebook->api(array('method'=>'fql.multiquery', 'queries'=>$mQuery));

第一行将为您获取该用户的访问令牌,第二行只是使用多查询的示例,并减少您的调用。

一个多查询中最多可以使用 50 个查询

如果你想对你的页面做几件事,你可以使用批处理请求。这是发布状态的示例,您可以添加更多,直到 50 批请求在同一个调用中。

$v['body']['message']=htmlspecialchars_decode($v['message'], ENT_QUOTES);
$v['body']['scheduled_publish_time']=strtotime($v['scheduled_publish_time']);
$v['body']['published']='false';
$v['body']=http_build_query($v['body']);
$batch[]=$v;

try {
    $batchresult = $facebook->api("/?batch=".urlencode(json_encode($batch)), 'POST', array('access_token'=>$access_token));
} catch (FacebookApiException $e) {
    echo $e->getMessage(); 
}
echo $batchresult;

希望这可以帮助。

于 2013-03-23T10:53:46.910 回答
2

正如@Julio Popócatl 所提到的,使用页面访问令牌(从长期存在的用户令牌生成)可能是一个不错的选择。

这些页面访问令牌一旦正确生成,它们将永远不会过期,因此您需要运行的查询至少少了一个。

API 请求限制适用于每个请求,来自用户、页面、应用程序等。无论请求的来源是什么,他们总是向 Facebook 架构提出一些要求。

使用批处理请求也是一个好主意,因为它会使用一个(或更少)请求获取多个数据,而不是单独发出每个请求。

于 2013-04-17T11:37:44.897 回答
-3

我们遇到了一些非常苛刻的 api 请求限制。现在我们每分钟只能添加大约 3 个新的 Facebook 页面

我根本不会称其为“苛刻”限制。想象一下,如果大量应用程序会在几分钟内创建数百或数千个页面会发生什么...垃圾邮件垃圾邮件垃圾邮件!!1

我见过人们估计,一个访问令牌允许您大约 600 个请求/600 秒,但我认为由于我们使用页面令牌完成大部分工作,我们的操作不会计入单个 api 限制。

该限制仅基于 App ID 实施。您究竟在用 API 做什么以及作为谁(用户、页面)并不重要。

有什么办法可以绕过这个限制

在短时间内添加大量新页面对我来说听起来像是垃圾邮件,很多。我想不出一个很好的理由为什么要这样做。

于 2013-03-07T18:13:23.407 回答