【发布时间】:2012-12-19 10:44:28
【问题描述】:
我正在为一个从 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 平台内创建更多内容。这最终会增加他们平台的价值,同时增加广告印象。”
http://adage.com/article/digitalnext/posting-facebook-truth-party-applications/229694
这可以解释为什么帖子没有在 /feed 或 /posts API 响应中传递。
但是,这并不能解释为什么 API 甚至不会通过其 ID 返回帖子(请参阅上面的更新)。
我能想到的是,Facebook 不会将第三方应用帖子归类为真正的“帖子”,因此不会通过适当的 API 响应推送它们。但是,我在 Facebook 文档中找不到这方面的证据。
更新 #3
根据下面的 cmets,我现在正尝试做同样的事情,但使用的 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 密钥)。
【问题讨论】:
-
您是否尝试过以非管理员用户身份运行您的应用程序,还是仅以应用程序管理员身份对其进行测试?如果是后者,请尝试以非管理员用户身份运行。
-
顺便说一句,我尝试使用选项卡式应用程序和单独的站点来复制您的问题,但无法这样做。你能告诉我,你的客户是 Facebook 页面的所有者吗?以及选项卡式应用程序?我原以为他们一定是,但不想假设任何事情。
-
你确定这不是这个错误造成的吗?
-
@FacebookAnswers 是的,我一直在测试的 facebook 用户是应用程序的所有者,并且对选项卡所在的页面具有管理员访问权限。用户对我尝试获取帖子的页面没有管理员访问权限。也许我会尝试与不拥有该应用程序的用户一起使用(尽管这似乎是 API 运行的一种奇怪方式)。
-
@Igy 你没有提供任何错误链接。
标签: php facebook facebook-graph-api facebook-php-sdk