持久的FB访问令牌,用于服务器提取FB页面信息

red*_*nce 113 facebook facebook-graph-api facebook-access-token

我知道有很多关于Facebook访问令及其引起的悲痛的问题,但尽管进行了大量实验并阅读了许多令人沮丧的模糊博客文章(FB等),我仍然在努力为我的需求做出明确的回答.到目前为止,让我简洁地分解我的过程:

  • 我正在创建一个站点,服务器端,需要从单个Facebook页面提取帖子/状态
  • 我是Facebook页面的管理员
  • 我创建了一个Facebook应用程序
  • 使用Facebook Graph API Explorer,我生成了一个短链密钥,连接到我的应用程序和我的帐户,授予我的帐户权限以查看我的网页的访问令牌
  • 我已经将我短暂的键从一个长寿命密钥(60天)ALA方案4

而这就是我被困的地方.我的60天密钥适用于我的服务器从页面中提取所需的信息,但据我所知,没有办法以编程方式扩展该60天密钥.我也不知道如何生成新的短期密钥,而无需手动访问Facebook Graph API Explorer并创建一个.

由于我的服务器向Facebook API发出请求而不是基于用户的系统(我可以轻松地请求用户再次授权Facebook应用程序),这会创建一个非常笨重的系统.由于Facebook已offline_access被弃用,是否真的没有永久的方法让我的服务器从我自己的页面提取信息?我是否真的需要手动创建一个新密钥并每60天手动更新一次我的服务器?

还是有什么我想念的?

更新:

之前在此处找到的分步指南已经迁移到自己的答案中.

red*_*nce 183

这些是以前在问题中的步骤 - 他们已经迁移到这个答案.

发现可以生成一个未过期的Facebook页面访问令牌(在@Igy的帮助下),这里有一个明确的,逐步的信息给所有看起来相同的人:

  1. 确保您是要从中提取信息的FB页面的管理员
  2. 创建一个FB应用程序(应该与页面管理员使用相同的用户帐户)
  3. 转到Facebook Graph API Explorer
  4. 在右上角,从"应用程序"下拉列表中选择您创建的FB应用程序
  5. 点击"获取访问令牌"
  6. 确保添加manage_pages权限
  7. 通过进行此Graph API调用,将此短期访问令牌转换为长期访问令牌: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  8. 获取返回的新的长期访问令牌
  9. 进行Graph API调用,使用新的长期访问令牌查看您的帐户: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. 抓住access_token你要从中提取信息的页面
  11. 提示令牌,看它被设置为Expires: Never!

应该这样做.您现在应该拥有一个不会过期的Facebook页面访问令牌,除非:

  • 您更改了您的Facebook帐户密码
  • 您将失去目标页面的管理员访问权限
  • 您删除或取消授权您的Facebook应用程序

其中任何一个都会导致访问令牌失效.

如果您要获取(#100) Tried accessing nonexisting field (accounts) on node type (Page),请转到访问令牌调试器,复制值User ID,并使用它来替换步骤9中URL的"我"部分.

  • 我现在已经完成了所有这些工作并且除了长期令牌ID在2个月后到期并且不是无限时它起作用.此外,[Acces Token Debugger](https://developers.facebook.com/tools/debug/access_token/)在表单底部有一个链接,用于将短期访问令牌扩展为长期访问令牌. (7认同)
  • @StefanMüller当您在Graph API Explorer页面上单击"获取访问令牌"时,会弹出"选择权限"对话框.`manage_pages`选项位于`Extended Permissions`选项卡下. (5认同)
  • 我相信现在已经过时了.并且您只获得一个在大约两个月后到期的访问令牌. (3认同)
  • 我如何以及在哪里执行第6步? (2认同)
  • 大!这就像一个魅力,它作为PAGE发布,而不是作为用户. (2认同)

Igy*_*Igy 15

这在Offline Access弃用文档中介绍

使用页面管理员的60天令牌来检索页面访问令牌(通过/PAGE_ID?fields=access_token/me/accounts) - 页面访问令牌将没有到期时间

  • 叹.的确,这似乎是门票.我可以发誓我尝试了这些步骤的所有可能组合 - 显然我错过了实际工作的那个.这是一套绝对错综复杂的必要行动.非常感谢您的帮助! (5认同)

foc*_*ner 8

一种在 2019 年有效的方法

我最近试图实现类似的东西(与本主题中描述的用例类似),但我想确保尊重 Facebook 的当前政策,所以我做了一些研究,在这里我将分享我的发现。

我的用例

因此,正如我已经说过的,我的用例与此处描述的用例非常相似;那是:

  • 我正在为学区做一些工作。
  • 他们正在使用软件工具来管理与学校交通相关的几乎所有事情。
  • 该工具允许他们在发布公交车延误警报和学校关闭警报时发送电子邮件通知(给订阅者)。
  • 社区中的许多人在他们的 Facebook 页面上关注该组织,这是他们寻找这些警报的唯一地方。
  • 因此,该组织的一名员工必须在 Facebook 页面上手动发布每个通知(除了在运输软件中创建它)。此外,这些通知最终会过期(或者只是在过期之前被删除),因此员工也必须稍后返回手动删除它们。
  • 这是一段很长的时间,所以我们在这里尝试做的是开发一个简单的系统,它定期轮询软件工具的数据库以获取新的(和过期的)通知,并在 Facebook 页面上更新它们(即添加和删除)。

在我看来,这是一个合法的用例,但我不确定如何以符合 Facebook 政策的方式实施它。

接受的答案

我按照已接受的答案的步骤进行操作并且它起作用了,只是事情似乎发生了变化:现在,即使生成的页面令牌没有过期,也会access to data在大约 60 天后过期。如果您按照该过程并检查FB 令牌调试器工具中的页面令牌,您也会看到这一点。

此外,生成的页面令牌与用户帐户绑定的事实也是不幸的,因为如果用户更新他/她的密码,那么页面令牌也会失效。

2019年怎么做

经过几个小时的研究,我偶然发现了以下 Facebook 文档文章:直接业务的业务登录

事实证明,现在可以按照上述文章中描述的步骤生成与任何特定 Facebook 用户帐户无关且不会过期的页面令牌(除非 FB 应用程序被删除或底层应用程序令牌被删除了,你知道...)

所以这里是步骤和最重要的部分:

  • 您需要一个商务经理帐户。
    • 将需要验证,并且必须签署数字合同。
  • 您需要将目标 Facebook 页面添加到该帐户。
  • 您需要创建一个 Facebook 应用程序,并将该应用程序转移到同一个商务管理平台帐户。
  • 该应用程序必须通过 Facebook 的审核流程,因为需要以下权限:manage_pagespublish_pages
    • 重要说明要使使用生成页面令牌发布的帖子对应用程序管理员以外的用户可见,该应用程序需要已发布和批准。
    • 您仍然可以在不提交审核的情况下尝试该概念,但这些帖子不会公开显示。
  • 在 Business Manager 帐户中(仅在您的应用程序和页面添加到帐户后),您需要创建所谓的System User,并为该用户授予目标 Facebook 页面的管理员角色(或权限)。
    • 系统用户归 Business Manager 帐户所有,与特定用户无关。我目前的理解是,系统用户的一个主要用例是通过编程访问 Facebook 的 Graph API(正是我们需要的)。
  • 然后,对于该系统用户,您需要生成一个访问令牌(它将永不过期)。系统将提示您选择哪个应用程序。然后,您将选择目标应用程序。
  • 然后,您需要使用生成的应用程序令牌来生成页面令牌,该令牌也将永不过期。该过程在本文中描述为:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
Run Code Online (Sandbox Code Playgroud)
  • 就是这样。

该令牌永远不会过期,也不会绑定到特定的 Facebook 用户,所以这正是我们所需要的!

最后一部分是确保您的 Facebook 应用获得 Facebook 的批准。这实际上是最重要的部分,因为如果人们看不到我们的帖子,整个过程就毫无价值。

我想确定我可以依靠上述程序为我的客户构建一些东西,而 Facebook 最终不会拒绝它,所以,事先(即在开始处理我客户的项目之前),我经历了整个过程创建页面、应用程序、商务经理帐户等。我验证了我的业务。我提交了我的应用程序以供审核。在我的请求中,我对我的用例非常具体,并强调该应用程序是为了“自用”(即该组织正在为自己开发应用程序,而不是为其他 Facebook 用户开发)。我在不到 24 小时内就获得了批准。

关于应用审查过程的其他一些注意事项:

  • 我必须为应用程序选择一个平台,所以我选择了网站
  • 我必须说明为什么应用程序需要这两个权限以及它将如何使用它们。
  • 我必须指出为什么审阅者无法登录我的应用程序并尝试它(即因为该应用程序将被工作进程使用)。
  • 对于强制性截屏视频,我只是使用该curl实用程序在终端中进行了手动操作(生成页面令牌并向 Facebook 页面发布帖子)。我还展示了我如何使用 Business Manager 将系统用户链接到页面并生成令牌,等等。
  • 同样,我对我的用例非常具体,我认为这有帮助。

我希望这些信息对有类似用例的人有用。