我正在为一个从 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
}
}
但是,当我发出相同的请求但帖子的 ID 已包含在 /feed 请求中时。
$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 中创建更多内容。 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 对话框授权该应用程序并已接受以下权限:
- 电子邮件
- 用户生日
- 发布流
使用我闪亮的新访问令牌,我发出以下 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 密钥)。