我正在为客户制作一个Facebook选项卡应用程序,该应用程序从Facebook页面获取和显示帖子。该应用程序还提供了添加新帖子到页面和评论现有帖子的功能。这是通过Facebook Graph API(通过PHP SDK)实现的。
我已经使一切正常,但遇到了一个关于应用程序发布帖子的问题。当用户提交帖子时,它通过以下请求发送到Graph API。
$facebook->api([PAGE_ID]/feed', 'POST', array(
'message' => [MESSAGE]
));
这个请求成功了,帖子出现在相关的Facebook页面上,并在下方标注“通过我的应用名称”。
之后,当我通过API请求页面上的帖子列表(请求如下),上述帖子并没有出现。
$posts = $facebook->api([PAGE_ID].'/feed');
我强烈感觉这是由于帖子来自第三方应用程序。我听说Facebook会“降级”第三方帖子以鼓励使用其自己的平台。所有直接通过Facebook发布的帖子都出现了。
然而,一定有一种方法可以检索这些类型的帖子。
以下是针对Fisch的更新
当我向API发帖时,返回了以下帖子ID:
112706495458566_468411663221379
然而,当我对其进行API请求时:
$facebook->api('112706495458566_468411663221379');
我收到了以下回复:
{
"error": {
"message": "Unsupported get request.",
"type": "GraphMethodException",
"code": 100
}
}
然而,当我提交相同的请求,但包含在/feed请求中已经包含的帖子的ID时。
$facebook->api('112706495458566_457890310940181');
我得到了以下响应。
{
"id": "112706495458566_457890310940181",
"from": {
"category": "Local business",
"name": "Genting Casino Southport",
"id": "112706495458566"
},
"story": "\"Very well done to ste,...\" on their own status.",
"privacy": {
"value": ""
},
"type": "status",
"application": {
"name": "Mobile",
"id": "2915120374"
},
"created_time": "2012-11-25T22:12:21+0000",
"updated_time": "2012-11-25T22:12:21+0000",
"comments": {
"count": 0
}
}
由于某些原因,Facebook甚至不让我通过帖子ID查找该帖子。
更新 #2
在寻找答案的过程中,我发现了一项研究,它加强了我之前对第三方应用程序帖子“权重”分配的怀疑。
来自EdgeRank Checker报告:“当在Facebook上创建一个对象时,它会被赋予一个权重。我们相信,Facebook有策略地降低了通过API创建的对象的权重。这个策略背后的原因是鼓励更多的内容在Facebook平台内创建。这最终增加了他们的平台价值同时增加了广告展示次数。”
http://adage.com/article/digitalnext/posting-facebook-truth-party-applications/229694
这可能解释了为什么帖子没有在/feed或/posts API响应中传递。
然而,这并不能解释为什么API甚至不会返回帖子的ID(请参见上面的更新)。
我所能想到的是,Facebook并不认为第三方应用程序帖子是真正的“帖子”,因此不会在适当的API响应中推送它们。但是,我在Facebook文档中找不到任何证据支持这一点。
更新 #3
根据下面的评论,我现在正在尝试使用一个没有任何页面的应用程序所有者或实际上与Facebook上的任何页面具有管理关系的Facebook帐户(我的个人Facebook帐户)进行相同的操作。
我已经使用oAuth对话框授权了该应用程序,并接受了以下权限:
- user_birthday
- publish_stream
使用我的新访问令牌,我发出以下API请求:
$post = $facebook->api('112706495458566/feed', 'POST', array(
'message' => 'this is a test'
));
我收到了以下回复:
array(1) {
["id"] => string(31) "112706495458566_470663409662871"
}
我随后检查了实际的Facebook页面,刚才发送的帖子已如预期地出现在我的Facebook用户帐户中。
接下来,我发出以下请求以获取页面上的所有帖子:
$posts = $facebook->api('112706495458566/feed');
我收到了一个长数组,其中包含页面上的所有帖子(我不会在这里发布)。然而,我刚刚发送并收到了一个ID,但是该帖子没有出现。
然后,我使用POST请求返回的ID直接请求该帖子。
$post = $facebook->api('112706495458566_470663409662871');
如上次尝试一样,会抛出以下异常。
GraphMethodException: Unsupported get request.
重申一下,这次尝试使用的帐户与我们尝试获取数据的应用程序或任何页面完全无关。该帐户也从未与该应用程序有过任何联系(即这是第一次接受权限并生成oAuth密钥)。