将 Facebook API 的 URL 分享计数从 v1.0 迁移到 v2.0+

Migrating Facebook API for URL share count from v1.0 to v2.0+

我正在维护 WordPress Social Metrics Tracker plugin。该插件向各种社交网络 API 发出 GET 请求,包括 Facebook,以检索 URL 被分享的次数。

此插件当前使用 Facebook API 的 v1.0,其中 is deprecated and will be removed on April 30, 2015。我需要迁移到较新版本的 Facebook API,但似乎 Facebook 已锁定其 API 以要求访问令牌。

需要来自 Facebook 的以下数据:

问题:

从 Facebook 检索此数据的最佳方法是什么,它需要插件的最终用户进行最低级别的身份验证,并且至少使用 API 2.0 版?

或者,如果需要身份验证,我是否可以避免让用户登录 Facebook 来获取它?

考虑因素:

因为这是一个分发到用户服务器的开源 WordPress 插件,所以任何应用程序机密或其他敏感数据都不能存在于插件源代码中的任何位置。

该插件的用户目前不需要 "sign in" 或 "sign up" - 该插件开箱即用。保持简单是很好的,但是如果要求用户 "sign in to Facebook" 是从 Facebook API 检索数据的唯一方法,那就这样吧。

如果我们确实需要检索身份验证令牌,它将需要在服务器后台继续工作,而不必提示用户重新进行身份验证。

现有API请求示例:

对这个 Facebook API 端点的 GET 请求非常有效并且 returns 数据:

API v1.0 link example (works - currently used by plugin)

但是,当我们将版本切换到 v2.0 时,我们被告知资源需要访问令牌:

API v2.0 link example (broken)

当我们切换到最新版本 v2.3 时,我们了解到 FQL 查询已从 API:

API v2.3 link example (broken)

您要查找的端点是 /?id={url}。 Graph API v2.3 为此至少需要一个应用程序访问令牌,这意味着您的插件用户必须先创建一个 Facebook 应用程序才能使用此端点。这可以通过 https://developers.facebook.com/apps/

完成

示例调用是

https://graph.facebook.com/v2.3/?access_token={app_access_token}&id=http://www.wikipedia.org

结果是

{
   "og_object": {
      "id": "382267859091",
      "title": "Wikipedia",
      "type": "website",
      "updated_time": "2015-04-14T23:28:48+0000",
      "url": "http://www.wikipedia.org/"
   },
   "share": {
      "comment_count": 0,
      "share_count": 195105
   },
   "id": "http://www.wikipedia.org"
}

如您所见,缺少点赞。

您可以通过使用返回的 og_object.id 发出第二个调用来获取这些信息,如下所示:

https://graph.facebook.com/v2.3/382267859091?fields=likes.summary(true).limit(0)&access_token={app_access_token}

结果是

{
  "likes": {
    "data": [
    ], 
    "summary": {
      "total_count": 1298
    }
  }, 
  "id": "382267859091"
}

您也可以在一个批处理请求中执行此操作:

POST https://graph.facebook.com/v2.3

字段 batch 设置为

[
    {
        "method": "GET",
        "name": "get-url-stats",
        "relative_url": "v2.3/?id=http://www.wikipedia.org",
        "omit_response_on_success": false
    },
    {
        "method": "GET",
        "name": "likes",
        "relative_url": "v2.3/{result=get-url-stats:$.og_object.id}?fields=likes.summary(true).limit(0)"
    }
]

和字段 access_token 以及您的应用访问令牌。 returns 像这样的冗长回复(headers 为简洁起见省略):

[
  {
    "code": 200, 
    "headers": [
      ...
    ], 
    "body": "{\n   \"og_object\": {\n      \"id\": \"382267859091\",\n      \"title\": \"Wikipedia\",\n      \"type\": \"website\",\n      \"updated_time\": \"2015-04-14T23:28:48+0000\",\n      \"url\": \"http://www.wikipedia.org/\"\n   },\n   \"share\": {\n      \"comment_count\": 0,\n      \"share_count\": 195105\n   },\n   \"id\": \"http://www.wikipedia.org\"\n}"
  }, 
  {
    "code": 200, 
    "headers": [
      ...
    ], 
    "body": "{\n   \"likes\": {\n      \"data\": [\n         \n      ],\n      \"summary\": {\n         \"total_count\": 1298\n      }\n   },\n   \"id\": \"382267859091\"\n}"
  }
]

您必须将每个 body 属性 解析为 JSON,然后将数据用于 create/show 您的统计数据。