【问题标题】:Facebook API: Determine if Facebook Page is published / unpublishedFacebook API:确定 Facebook 页面是否已发布/未发布
【发布时间】:2012-02-09 01:35:10
【问题描述】:

使用图形 API 检查 Facebook 页面是否已发布或未发布的可靠方法是什么?我目前这样做:

http://graph.facebook.com/{page_id}

并检查返回值是否为“false”。如果它是假的,我断定它是未发布的,如果它返回一个图形对象,那么断定它已发布。但我现在注意到,许多已发布的页面从上述请求中返回“false”。

这是一个例子:

此页面发布:http://www.facebook.com/AjiRestaurant

但这些请求返回 false: http://graph.facebook.com/104433516257517(使用页面 ID) http://graph.facebook.com/AjiRestaurant(使用页面用户名)

检查页面是否已发布的最佳方法是什么?

【问题讨论】:

  • 我正在查看我的页面的设置,但无法弄清楚如何设置公共/私有,除了通过页面顶部的复选框显示:“页面可见性 [] 取消发布页面 (只有管​​理员才能看到此页面)”。这是你要查询的吗?
  • 是的,就是这个。我想检测页面何时“未发布”。我可能使用了错误的词“私人/公共”,应该使用“已发布/未发布”。我现在会更新我的问题。
  • facebook.com/AjiRestaurant 没有显示给我。
  • 嗨 Julio,你登录 Facebook 了吗?
  • 是的,我是。还是看不出来。该页面是否有国家/地区限制?

标签: facebook facebook-graph-api facebook-page


【解决方案1】:

http://developers.facebook.com/tools/explorer 上的 FQL 查询下打孔

SELECT page_id, name, username, is_published
   FROM page 
   WHERE page_id IN 
      (SELECT page_id FROM page_admin WHERE uid = me()) 
   AND is_published=""
   ORDER BY fan_count DESC

这将选择您帐户中的所有页面并检查它们是否已发布,并在列表中返回所有未发布的页面。

【讨论】:

【解决方案2】:

事实证明,没有已知的方法可以专门检查页面是否已发布/未发布。如果以下任何一项为真,则图形 API http://graph.facebook.com/{page_id} 将返回 false:

  • 页面未发布
  • 页面有国家限制
  • 页面有年龄限制

当且仅当上述设置均不适用时,http://graph.facebook.com/{page_id} 将返回一个对象图。

注意:我假设具有 manage_pages 权限的访问令牌不用于上述 API 调用。使用适当的访问令牌,https://graph.facebook.com/{page_id} 将返回对象图,无论页面是否有限制。

【讨论】:

    【解决方案3】:

    如果您使用可以在请求中看到页面的access_token,您将只能看到该页面。

    您将始终只看到您在 facebook 上使用access_token 用户看到的页面。

    例如,在上述示例中使用我自己的access_token 仍然会为AjiRestaurant 产生false,但我会很好地获得KeystoneLight 的信息,因为我的帐户符合限制条件。

    【讨论】:

      【解决方案4】:

      使用 Graph API 获取页面(例如,使用 cURL 作为系统调用,HTTPClient 用于 Rails,或 $.getJSON() 用于 jQuery)和 http://graph.facebook.com/PAGE_ID。未发布的页面将返回false,已发布的页面将返回 JSON 信息数组。

      这不需要任何访问令牌或权限。

      使用 cURL(命令行)

      $ curl http://graph.facebook.com/UNPUBLISHED_PAGE_ID
      false
      $ curl http://graph.facebook.com/PAGE_ID
      {"id":"1234","name":"Test Page","picture":....
      

      使用 HTTPClient(与 Rails)

      HTTPClient.get("http://graph.facebook.com/UNPUBLISHED_PAGE_ID").body
      # false
      HTTPClient.get("http://graph.facebook.com/PAGE_ID").body
      # "{\"id\":\"1234\",\"name\":\"Test Page\",\"picture\"....
      

      使用 $.getJSON() (jQuery)

      $.getJSON("http://graph.facebook.com/UNPUBLISHED_PAGE_ID", function (data) {
        console.log(data); // false
      }
      $.getJSON("http://graph.facebook.com/PAGE_ID", function (data) {
        console.log(data); // JSON Object with page info
      }
      

      【讨论】:

      • 这是不正确的。有限制的页面也会返回 false,就像宣传酒精的页面一样。尝试graph.facebook.com/KeystoneLight,您会看到它返回 false,即使页面已发布。
      • 杰夫是对的。我刚刚得出了同样的结论,并用这些信息更新了我原来的问题。
      • 感谢胡里奥的回答。这不是 100% 正确的,但它仍然是一个非常有用的答案,所以你得到了赏金。
      【解决方案5】:

      您可以使用以下功能,但当您在页面上拥有 manage_pages 权限时它可以工作 http://graph.facebook.com/{page_id}/settings

      使用 manage_pages 权限尝试此代码

      FB.api('/me/accounts', function (resp) {
                              //var txtpageid = 
                              if (txtpageid != '') {
                                  FBactualID = '';
                                  for (var i = 0, l = resp.data.length; i < l; i++) {
                                      var page = resp.data[i];
                                      if (page.id == txtpageid) {
                                          FBactualID = txtpageid;
                                          varFBResponseFlag = true;
                                          //alert('inside the page id validation');
                                      }
                                  }
                              }
                              getCheckedValue(FBactualID);
      
                          });
      

      【讨论】:

      • 我不太明白你在做什么。您正在遍历所有用户的页面并检查页面 ID 是否与我要检查的页面 ID 匹配,然后将其存储在 FBactualID 中。你为什么需要这样做?然后你调用 getCheckedValue()。这个方法有什么作用?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多