在Facebook页面上自动进行

时间:2016-06-19 17:41:58

标签: facebook api facebook-graph-api oauth

我正在尝试创建一个简单的Web应用程序,当有人在应用程序中发布消息时,会自动在Facebook页面上发布有关它的信息。理想情况下,它会使用永久令牌进行发布。

我创建了一个应用和一个页面,并使用app secret获取了一个页面访问令牌。但是,当我尝试使用此令牌向页面发布消息时,我得到:

WWW-Authenticate: OAuth "Facebook Platform" "insufficient_scope" "(#200)
The user hasn't authorized the application to perform this action

现在我在有关授权应用程序在页面上发布的文档中找到的所有内容都要求用户通过FB登录授予权限。但是,我并不希望管理员每次尝试发布内容时都会登录。我想给应用程序一个永久的权限,以便在页面上发布。我该怎么办?

2 个答案:

答案 0 :(得分:0)

这不是每次都要求用户授权的问题,这只是因为您没有指定所需的范围才能publish a new post on a linked page

  

具有 publish_pages 权限的网页访问令牌可用于代表该网页发布新帖子。帖子将出现在页面的声音中。

因此,当您getting your access tokens时,您需要在perms中添加 PUBLISH_PAGES

<强>更新

  1. 您首先需要get the user permission将用户重定向到此网址(通过链接或后端重定向):

    https://www.facebook.com/dialog/oauth
    ?client_id=<YOUR_APP_ID>
    &redirect_uri=<URL_TO_WHICH_USER_WILL_BE_REDIRECTED_ONCE_HE_CLICKED_OK_OR_CANCEL>
    &scope=publish_pages
    
  2. 在此用户被重定向的网址中,您将拥有此GET参数:

    ?code=<AUTHORIZATION_CODE>
    
  3. 然后,您需要使用此授权代码通过调用此网址(FYI当前API版本为v2.6)来获取令牌(来自您的后端):

    https://graph.facebook.com/<API_VERSION>/oauth/access_token
    ?client_id=<YOUR_APP_ID>
    &redirect_uri=<THE_HIDDEN_URL_CALLED_BACK_WITH_JSON_DATA_IN_THE_BODY>
    &client_secret=<YOUR_APP_SECRET>
    &code=<AUTHORIZATION_CODE>
    
  4. 在这个被回调的隐藏网址中,您将在正文中获得一个看起来像这样的JSON:

    {
        status: 'connected',
        authResponse: {
            accessToken: '...',
            expiresIn:'...',
            signedRequest:'...',
            userID:'...'
        }
    }
    
  5. 您现在可以存储此访问令牌(通常在数据库中)以代表此用户执行操作,例如在他的页面墙上发布帖子。

  6. aiohttp在how to call these urlshow to retrieve their content上为您提供了很多示例。

    要获得一个真实的例子,你有this nice tutorial,它正在使用Flask,但是使用aiohttp方法很容易让它适应。

    最后一条建议:既然您似乎没有使用API​​管理,我仍然建议您使用Facebook Python SDK,因为当您是初学者时它会更容易并且您将获得有关如何使用它的丰富教程列表。

答案 1 :(得分:0)

我在IRC的帮助下找到了一种方法。这是可以使用的流程:

转到Graph API资源管理器。从上方下拉列表中选择您的应用程序。从底部下拉列表中选择您的页面(生成页面访问令牌)。选择“请求发布页面”&#39;选项。 复制访问令牌。现在将此令牌交换为更长寿的令牌。发出以下GET请求:

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&fb_exchange_token=<your token>&client_id=<app_id>&client_secret=<app_secret>

可以从申请页面获取app_idapp_secret

您获得的令牌将持续60天,因此您需要定期刷新它。但是,它可以用于发布到您的页面。