【问题标题】:Autoposting on facebook page在 Facebook 页面上自动发布
【发布时间】:2016-10-20 23:20:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: facebook api facebook-graph-api oauth


    【解决方案1】:

    这不是每次都询问用户授权的问题,只是因为您没有指定能够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. 在用户被重定向到的这个 url 中,你将有一个 this GET 参数:

      ?code=<AUTHORIZATION_CODE>
      
    3. 然后,您需要使用此授权代码通过调用此 url 获取令牌(从您的后端)(仅供参考,当前 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. 在这个被回调的隐藏 url 中,您会在正文中获得一个 JSON,看起来应该是这样的:

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


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

    举一个真实的例子,你有this nice tutorial,它使用了 Flask,但是用 aiohttp 方法来适应它真的很容易。

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

    【讨论】:

    • 是的,但是怎么做?您链接的页面(我之前已经阅读过)没有说,在请求访问令牌时如何指定权限。
    • 您使用哪种语言?哪个框架?你使用 SDK 吗?
    • 我打算用 Python + aiohttp。我希望,我不需要任何 SDK,只需将 http 请求发送到图形 API。有可能吗?
    • @zefciu 显然这是可能的,我编辑了我的问题,向您解释了有关如何获得适合您的情况的访问令牌的完整路线图。
    • 没有。它不适合我的情况。我明确表示我不想使用登录。
    【解决方案2】:

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

    转到图形 API 资源管理器。从上方的下拉列表中选择您的应用程序。从底部下拉列表中选择您的页面(生成页面访问令牌)。选择“请求发布页面”选项。 复制访问令牌。现在将此令牌交换为更长寿的令牌。发出以下 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 天,因此您需要定期刷新它。但是,它可以用于发布到您的页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2014-01-05
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2011-07-03
      相关资源
      最近更新 更多