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

时间:2015-04-16 16:28:26

标签: facebook api facebook-graph-api

我正在维护WordPress Social Metrics Tracker plugin。该插件向各种社交网络API(包括Facebook)发出GET请求,以检索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插件,它被分发到用户服务器,所以任何地方的插件源代码都不能存在app秘密或其他敏感数据。

该插件的用户目前无需“登录”或“注册” - 该插件只需开箱即用。保持简单的事情会很棒,但是如果要求用户“登录Facebook”是从Facebook API检索数据的唯一方法,那么就这样吧。

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

现有API请求示例:

对此Facebook API端点的GET请求非常有效并返回数据:

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

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

API v2.0 link example (broken)

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

API v2.3 link example (broken)

1 个答案:

答案 0 :(得分:2)

您正在寻找的端点是/?id={url}。 Graph API v2.3至少需要一个App Access Token,这意味着你的插件'用户必须先创建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)"
    }
]

以及带有App Access令牌的字段access_token。这会返回一个冗长的响应(为简洁起见省略了标题):

[
  {
    "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,然后使用该数据创建/显示您的统计信息。