Facebook页面API:"页面公共内容访问"审核屏幕录像。

59
我的网站使用Facebook页面API从Facebook页面上获取公开内容,并由页面所有者发布,创建具有清晰链接到Facebook页面的动态博客。
您可以在此处查看其效果:https://kc-hrubeho.cz(使用CTRL + F搜索“Facebook”)。 黄色按钮“Načíst další”可作为AJAX分页工作。很抱歉,这个网站没有英文版本。
我正在使用此URL获取页面内容的JSON对象:https://graph.facebook.com/<PAGE-ID>/feed?access_token=<TOKEN>&limit=10&fields=message,link,attachments,created_time,full_picture,picture,timeline_visibility 目前它有效,但应用审核FAQ中提到:
 

我的应用程序曾经访问页面上的公共内容,是否受v3.0更改影响?

 

是的。 访问公共页面内容的应用程序需要请求页面公共内容访问功能,并经过Facebook审核。

还有这个通知:
 

为了保持您当前的API访问权限,您的应用程序需要在2018年8月1日之前提交审核。

我已填写审核表格。 其中一个必填项目是“屏幕录制”。我们需要看到您的应用程序使用页面公共内容访问功能,以便我们可以查看它是否违反了我们的政策。请使用任何方法上传视频屏幕录像演示(甚至可以使用手机录制)。您必须展示以下内容:
  1. 一个人如何使用Facebook 登录
  2. 一个人如何在您的应用程序中使用此功能
更详细的有关屏幕录像的说明如下:
如果您的应用程序仅由您或少数人使用,则无需提交您的应用程序。在您的应用程序面板中的角色选项卡中列出的任何帐户(例如管理员、开发人员和测试人员)都可以访问所有权限并生成用户或页面访问令牌。
您可以使用这些账户之一来测试您的应用程序并创建屏幕录像。
这非常令人困惑。我的问题是:
  1. 如果我的代码访问页面API并在我的网站上显示结果,那么它是否属于"仅由部分人使用"?
  2. 如果我不需要创建屏幕录像,那么我该如何申请审核?我是否需要审核(即“8月1日后我的令牌是否有效”)?
  3. 如果我需要进行带有屏幕录像的审核,那么在我的情况下应该记录什么?我是否只需要将我的代码和网站的几个屏幕录像拼接成一个单独的视频?我认为这听起来很疯狂。:)
  • 如果我只需要读取自己页面的数据,是否有完全不需要审核或屏幕录制的另一个端点可用?

  • 我的旧应用当前正在工作(关于8月1日不确定,请参见上文)。对于那些在审核麻烦之后创建的目的相同(只是读取应用程序所有者拥有的FB页面的公共内容)的应用程序,是否会有与旧应用程序相同的规则集?

  • 提前致谢!

    编辑

    这是我从官方FB支持组Facebook Developer Community的小组管理员那里听到的:

    您可以使用dev模式下的应用程序检索您是管理员的页面的动态。[...] 我不知道8月1日是否会改变当前行为,或者当前行为是否是预期行为。[...] 实际上,我从未遇到过能够预测90天后发生什么事情的人...大多数专家甚至无法预测明天的天气;) 真的,我不知道...

    非常令人沮丧,但到目前为止,这是我得到的最具体的答案。


    你需要提交审核,并且需要提交一个屏幕录像。录像不应该显示代码,而是展示使用权限的过程。 - WizKid
    如果您只需要从具有管理员访问权限的页面中读取内容,则可以将应用程序保留在开发模式,并且无需提交审核。您的应用程序管理员帐户可以授予所有必要的权限而无需审核。 - CBroe
    1
    我现在已经挣扎了一个月。我已经向FB直接支持寻求帮助。我收到的最新答复是:“页面公共内容访问权限是用于比较不同页面的结果。例如,可以比较不同Facebook页面上不同餐厅的喜欢程度。在您的屏幕截图中,您滚动浏览帖子,这现在是页面公共内容访问权限的有效用例。请在下一个屏幕截图中展示页面公共内容访问权限的有效用例。”而且我甚至没有使用其他页面,只是我的页面和它的公共帖子。奇怪。 - Mladen Janjetovic
    3
    我放弃了。我将编写一个JavaScript机器人来收集评论。整个Facebook审核团队都很糟糕,他们的审核流程绝对是疯狂的。 - user151496
    我处于相同的情况。我只需要创建自动发布到我的页面,但他们不批准 manage_post API,我真的不知道为什么,他们只是给了泛泛而谈的理由。最终我用基于 Puppeteer 的脚本来完成相同的操作。 - albanx
    显示剩余5条评论
    6个回答

    23
    如果我的代码访问页面API并在我的网站上显示结果,那么它是否会被"减少的人数"使用?
    你很可能是应用程序中API的唯一消费者。由于它是后台的AJAX调用,而不是基于登录的应用程序,所以“减少的人数”情况应该适用。
    如果我不需要创建屏幕录像,如何申请审核?我是否需要它(意思是“8月1日后我的令牌是否有效”)?
    只要应用程序开发人员和页面管理员角色共享,将应用程序切换到开发模式将确保其继续工作。
    如果您的应用程序处于开发模式,则可以为任何拥有应用程序角色的人获取任何权限的页面访问令牌。 如果您只想管理自己页面上的帖子或具有应用程序角色的用户页面上的帖子,则可以在开发模式下执行此操作,而无需提交应用审核申请。- Facebook开发支持团队在https://developers.facebook.com/support/bugs/2029233277148530/(由我私人报告)的回复
    如果我需要使用屏幕录制进行审查,那么在我的情况下应该记录什么?我只需要将我的代码和网站的几个屏幕录制拼接成一个视频吗?在我看来,这听起来很疯狂。
    参见上文。
    如果我只需要读取自己页面的数据,是否有完全不同的端点(无需审查或屏幕录制)可供使用?
    使用页面feed端点(/PAGE_ID/feed),同时具有作为应用程序开发人员并在页面上拥有角色的用户,只要应用程序处于开发模式,就应该可以工作。
    我的旧应用现在正在运行(不确定8月1日,请参见上文)。对于创建于审查之后、目的相同(只是读取应用程序所有者拥有的FB页面的公共内容)的应用程序,是否会有与旧应用程序相同的规则集?
    8月1日的最后期限适用于特定的权限集:
    - user_friends - user_link - user_gender - user_age_range 因为这些权限不需要显示页面帖子,所以应该可以像旧应用程序一样工作。
    请使用具有manage_pages访问权限的用户或页面令牌,因为应用程序令牌无法确定您是否在页面上拥有角色。
    是的,这意味着您将不得不实现一种刷新用户令牌或确保扩展页面令牌不会在后台失效的方式。
    HTTP GET /page__id_owned/feed?access_token=APP|TOKEN
    
    Response
    #10) To use 'Page Public Content Access'...
    
    HTTP GET /page__id_owned/feed?access_token=access_token_no_manage_pages
    
    Response
    #10) To use 'Page Public Content Access'...
    
    HTTP GET /page__id_owned/feed?access_token=access_token_manage_pages
    
    Response
    {
      "data": [
        {
          "created_time": "2018...
    
    HTTP GET /page__id_NOT_owned/feed?access_token=access_token_manage_pages
    
     #10) To use 'Page Public Content Access'...
    

    公共页面内容与您的使用情况没有直接关系,也就是说,您不使用“公共页面内容”。这适用于您将公共内容作为数据火箭筒分析的情况,请参见https://developers.facebook.com/docs/apps/review/feature#reference-PAGES_ACCESS中的常见用法部分。

    另一方面,页面公共内容访问是一个应用程序级别的功能,用于只读访问匿名公共数据,包括业务元数据、公共评论、帖子和评论,适用于公共页面(不属于您应用程序上的任何开发人员)。 https://developers.facebook.com/docs/apps/review/feature#reference-PAGES_ACCESS - Facebook开发者支持团队在https://developers.facebook.com/support/bugs/2029233277148530/中的回复(我提交的私人报告)



    谢谢,这正是我在寻找的答案。还有一个问题 - 我当前的令牌是否仍然有效?在令牌调试器下,字段“过期时间”显示为“永不”。我需要刷新它吗?此外,我可以自由地为新客户创建具有相同要求的新应用程序,并使用新条款吗?再次感谢! - Petr Cibulka
    1
    只要使用了延长的流程 https://developers.facebook.com/docs/facebook-login/access-tokens/refreshing/#generate-long-lived-token 就不会有问题。但是,有些情况下可能会使令牌失效(更改密码、路障、安全会话受损),因此您的代码逻辑应该为此进行调整。新应用程序应该在相同的设置下工作,我没有看到任何阻止它的东西。 - phwd
    1
    由于这是我在该主题上找到的最全面的答案,因此我将提出一个后续问题,但我没有找到答案。我正在开发类似的聚合网站,并且需要从几十个页面(其中我不是管理员)中汇集信息。我认为现在使用当前API无法做到这一点?我很确定没有屏幕录像可以说服Facebook批准我的shell“应用程序”。 - peteykun
    @peteykun,听起来很复杂 - 似乎我们必须进行应用程序审核,以获取以前的公共数据获取。(我想要的是事件,没有登录,没有用户数据,我不关心谁去了).. 然而在页面公共内容访问文档中并没有列出事件 :( - castaway
    需要哪种权限才能从自己的 Facebook 页面获取帖子并将其导入到新的 Drupal 内容类型中? - drupalfan
    @peteykun,你的应用程序审核通过了吗? - Giovanni Bitliner

    12

    经过与FB直接支持和FB开发者社区组的艰辛斗争,我找到了一种方法获取我的FB页面公开帖子,而不需要臭名昭著的页面公共内容访问,为此我必须创建一个屏幕录像,以比较两个不同页面(?!).

    所以,只需几个简单的步骤:

    1. 这个不错的FB工具中获取所需应用程序的用户访问令牌
    2. 按照Page Acces Tokens文档的说明创建页面访问令牌。但一定不要跳过部分...使用访问令牌...。这意味着您的请求应该像这样:GET /{page-id}?fields=access_token&access_token=USER_ACCESS_TOKEN_FROM_STEP_1
    3. 然后使用Access Token Debugger调试你全新的页面访问令牌,它将在一个小时内过期。底部会有一个蓝色按钮,上面写着Extend Access Token。点击那个按钮,你就有了一个永不过期的页面访问令牌
    4. 使用它在FB GRAPH上获取Facebook页面公开帖子/page-id/posts?access_token=PAGE_ACCESS_TOKEN

    更新

    如果您在第二步遇到困难(我在使用一些较旧的应用程序时遇到了问题),请尝试使用此工具:https://developers.facebook.com/tools/explorer


    我卡在第二步了。当我向 https://graph.facebook.com/v3.2/68793499001?access_token=USER_ACCESS_TOKEN_FROM_STEP_1&fields=access_token 发送请求时,它会抛出相同的错误 (#10) To use 'Page Public Content Access', your use of this endpoint must be reviewed and approved by Facebook. - phuwin
    @phuwin 你有使用步骤1中的用户令牌吗?请确保它是用于页面68793499001的。 - Mladen Janjetovic
    1
    根据@MladenJanjetovic的说法,无法从其他Facebook页面抓取数据? - Juliana Rivera
    我不这么认为。如果你尝试了,请告诉我们。 - Mladen Janjetovic
    1
    对象不存在,由于缺少可审查功能“页面公共内容访问”而无法加载,或不支持此操作。要使用“页面公共内容访问”,您必须通过Facebook的审核和批准来使用此端点。要提交此“页面公共内容访问”功能进行审核,请阅读我们的审核功能文档:... :( 文档说明您需要page_show_list或publish_pages权限才能获取页面访问令牌。但是,要获得这些权限之一,您需要进行应用程序审核。该死的Facebook! - user151496
    如果您在第二步遇到问题(我曾经在一些旧应用程序中遇到过),请尝试使用此工具https://developers.facebook.com/tools/explorer/。 - Mladen Janjetovic

    1

    最近我经历了这个过程,并且成功地完成了,以下是对我有效的做法,希望对一些人有用:

    1. 商业验证

    这个流程相当简单,我提供了所有必要的信息和支持文件。在因公司地址证明不足而被拒绝一次后,我上传了其他几份文件并获得了验证(第一份证明不足为何不够充分并不明显,但其他文件足够了)。

    2. 屏幕录制

    这显然是棘手的部分,但这是对我有用的方法: 我正在使用webservice收集数据并将其存储在数据库中。然后,这些数据在移动应用程序中可见,因此我已经向他们提供了我的应用程序的登录凭据。 为了模拟我们的webservice从Facebook获取公共数据的行为,我创建了一个假的Facebook页面,其中的数据我可以在开发者模式下访问而不需要PPCA。 在录制中,我有些遵循他们的Server to Server example。我展示了我的数据库,并显示了一个样本条目,然后展示了我想要收集的数据的假Facebook页面。然后我运行了我的webservice,并展示了来自我的页面的数据现在在我的数据库中。最后,我解释了如何在我的应用程序中导航到这个确切的数据集。就是这样。
    当我没有包含对我的应用程序的访问权限时,这被拒绝了一次(我只展示了我的数据库中的数据)。
    最后,即使事件边缘列在您使用PPCA获得访问权限的页面API中,您仍然无法访问它(即/pageID/events)。因此,如果您想获取事件数据,就不必费心PPCA。

    为什么我需要进行商业验证才能让我的页面获得点赞? - Enrico
    我不是在为Facebook工作,只是分享我的经验。不确定为什么你会因为不喜欢Facebook的政策而对我的回答投反对票。 - Alex Schneider
    你是对的,我的错误。我误解了你的回答。我以为你说使用API需要进行业务验证。 - Enrico
    他们难道没有告诉你,你可以在不使用“pages_read_user_content”或“pages_read_engagement”权限的情况下做同样的事情吗?因为你展示了来自自己页面的数据。我无法在演示中实际使用PPCA功能,所以我被困住了。 在之前的审核过程中,我通过实际使用带有“标准访问”权限的权限并提交应用程序屏幕录制成功完成了审核。此外,在我之前的提交中,我添加了Facebook登录,并在范围中添加了所有请求的权限,并得到了批准。 - Madhawa Monarawila
    他们没有告诉你吗?你可以在没有PPCA的情况下使用"pages_read_user_content"或"pages_read_engagement"权限来完成相同的操作,因为你展示的是自己页面的数据。我无法启用PPCA功能,因为据我所知,在演示中无法真正使用它。我之前已经成功完成了审核流程,通过使用"standard access"权限并提交应用程序的屏幕录像。此外,在我之前的提交中,我添加了Facebook登录,并将所有请求的权限添加到了范围中,并获得了批准。 - undefined

    0

    顺便提一下,如果您成功通过屏幕录制阻止器,仍然需要进行业务验证。如果您能通过此步骤,我不知道还有什么其他障碍需要克服才能通过应用程序审核。

    应用程序审核步骤2-需要进行业务验证 权限和功能审核已完成。接下来,我们将验证您的业务。

    为此,您可能需要提供像营业执照或水电费账单之类的文件。


    1
    审核页面上说“可能”,但没有具体时间安排。https://developers.facebook.com/docs/apps/review - castaway
    2
    这太疯狂了!! - parsecer

    0

    如果页面不是您的,或者您不是该页面的管理员,则Facebook不允许您访问数据。我曾经向他们询问过,这是他们的回复:

    "好的。如果新闻是从您自己的Facebook页面检索而来,而不是从您不拥有的公共页面检索而来,则可以使用pages_manage_post和pages_read_user_content权限。

    不幸的是,我恐怕没有权限可以让您向用户提供公共页面新闻。您只能从自己的Facebook页面发布新闻。"

    最初,我申请了“页面公共内容访问”权限。


    你好,我在官方文档 https://developers.facebook.com/docs/permissions/reference 中没有看到“页面公共内容访问”权限。能否说明一下呢?阅读页面内容足够吗? - user1315621
    哦,你提到了公共页面。但是如果你能让它们授予权限给你的应用程序,那么它可能会起作用。 - user1315621
    我想要访问公共页面的帖子,仅限于帖子。页面公共内容访问需要聚合、匿名的公共内容进行竞争分析和基准测试。简单地抓取帖子不会允许该权限。使用read_engagement,您只能阅读您是管理员或所有者的页面。 - Fay007

    0

    这里提到的一些步骤在2022年已经不再适用。如果您正在尝试使用服务器端API访问从公共FB页面获取公共帖子,这篇文章可以帮助我获取永不过期的页面访问令牌:https://medium.com/@blienart/get-a-permanent-facebook-page-access-token-a96470dc03ca

    逐步教程:

    1. 您需要拥有FB开发者帐户,并且必须是您想要读取Feed的FB页面的管理员。创建Facebook应用程序,具有“pages_read_engagement”和“pages_show_list”权限(无需审核应用程序)。

    2. https://developers.facebook.com/tools/explorer/上选择您的FB应用程序名称和右侧的“用户令牌”值。下面选择“pages_show_list”和“pages_read_engagement”权限,然后单击“生成访问令牌”。复制生成的令牌。

    3. https://bnjis.github.io/Facebook-permanent-token-generator/上填写您的FB应用程序ID、FB应用程序秘钥、已复制的用户访问令牌,然后单击提交。这将生成不会过期的令牌。

    您可以在服务器端应用程序中使用最终令牌以及FB应用程序ID和FB应用程序秘钥来访问您的公共FB页面帖子。在我的情况下,PHP实现如下:

    $appId = 'xxx'; // Your FB App ID, you have to be it's admin
    $appSecret = 'xxx'; // Secret key of your FB app
    $accessToken = 'xxx'; // Access token generated in step 3
    $fbPageId = 'xxx'; // ID of your Facebook page, you have to be it's admin
    
    // This is an official PHP SDK: `composer require facebook/graph-sdk`
    $fb = new \Facebook\Facebook([
        'app_id' => $appId,
        'app_secret' => $appSecret,
        'default_graph_version' => 'v15.0'
    ]);
    
    try {
        $response = $fb->get('/' . $fbPageId . '/feed?fields=permalink_url,created_time,message,full_picture&limit=20', $accessToken);
        if ($response instanceof FacebookResponse) {
            $data = $response->getDecodedBody(); // Array of your FB page posts
            // further processing
        }
    } catch (\Exception $e) {
        // Exception handling
    }
    

    请提供完整的解决方案,而不是链接。我们不知道那篇文章何时会消失... - MPelletier
    @MPelletier 当然,我会编辑我的答案并添加逐步教程。 - Fronty

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接