如何在Facebook页面上发帖?

时间:2011-07-23 14:21:45

标签: facebook facebook-graph-api curl

我在https://www.facebook.com/xxxx有一个Facebook页面,在http://xxxx.com有一个网站。如何对Facebook页面进行状态更新以与实际网站上的每个新帖子相对应?该更新应该由页面创作,而不是我个人的Facebook帐户。

我知道这似乎是一个重复的问题,但请听我说。我这几个小时都在研究这个问题。我在这个主题上找到了很多帮助,但所有这些都是不完整或过时的。大多数答案告诉我我需要做什么,但不知道怎么做。

我能找到的最接近我正在寻找的是官方文档中的这个注释。

https://developers.facebook.com/docs/opengraph/#publishing

这是我迄今为止所做的。我创建了facebook页面。我创建了一个facebook应用程序。我将该应用添加到了该页面。我将该应用添加到了我的个人帐户,并授予了manage_pages权限。我试图从页面用户的角度授予它manage_pages权限,但这似乎不可能。

我可以使用它来获取应用程序的访问密钥:

curl -s -F grant_type=client_credentials -F client_id=APPID -F client_secret=APPSECRET https://graph.facebook.com/oauth/access_token

然后我尝试这样做以实际更新状态。

curl -s -F access_token=ACCESS_TOKEN -F message='test' https://graph.facebook.com/xxxx/feed

这将返回一条消息,表明用户尚未授权应用程序执行此操作。我认为这是因为我试图以页面用户身份发布而不是作为我的个人用户。

如何获取正确的访问密钥以在页面上作为页面用户发布帖子?另外,如何确保访问密钥不会过期?一旦我有了访问密钥,我该如何实际发布帖子以便它显示在正确的位置?

1 个答案:

答案 0 :(得分:3)

以下是manage_pages权限的工作原理。

  • Bob有一个名为Awesemo的页面。
  • Bob想要UltraPageManager5000 管理他的页面。
  • Bob转到UltraPageManager5000设置的页面,授予UltraPageManager5000 manage_pages publish_stream {{1}权限(就像普通的连接应用程序一样)。您必须确保要求offline_access,否则访问令牌将过期。
  • UltraPageManager5000现在有一个Bob的访问令牌,但不是他的页面。
  • 现在,当UltraPageManager5000想要对其中一个页面执行任何操作时,他们会转到offline_access并查找“Awesome-O”页面以获取正确的访问令牌。

我已经制定了一种方法,可以为您简化这一点。

https://graph.facebook.com/uid/accounts/?access_token=bobs_access_token

获得实际访问令牌后,以下HTTP POST将实际创建状态更新。

function get_page_access_token($page_id, $access_token, $user_id) {
    $data = file_get_contents('https://graph.beta.facebook.com/'.$user_id.'/accounts?access_token='.$access_token);
    $pages = json_decode($data,true);
    foreach($pages['data'] as $page) {
      if($page['id'] == $page_id) {
        return $page['access_token']; 
      }   
   }
}