2015-04-16 40 views
0

我正在维护WordPress Social Metrics Tracker plugin。该插件向各种社交网络API(包括Facebook)发出GET请求,以检索已共享URL的次数。将Facebook共享计数的Facebook API从v1.0迁移到v2.0 +

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

从Facebook将需要下列数据:股份为某个网址

  • 喜欢的给定URL评论对一个给定的URL
  • 的数字

    问题:

    什么是从Facebook获取这些数据的最佳方法是哪个插件的最终用户需要最低级别的身份验证,并且至少使用API​​ 2.0版?

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

    注意事项:

    因为这是一个开源WordPress插件,其发布给用户的服务器,没有应用秘密或其他敏感数据可以住在插件的源代码的任何地方。

    该插件的用户目前不需要“登录”或“注册” - 插件只是开箱即用。如果让用户“登录到Facebook”是从Facebook API检索数据的唯一方法,那么就这样做吧。

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

    现有的API请求的例子:

    一个GET请求到这个Facebook的API端点的伟大工程,并返回数据:

    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)

  • 回答

    2

    你要找的端点是/?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这样issueing第二个电话让这些:

    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与您的应用程序访问令牌。这将返回这样一个漫长的响应(略去了头):

    [ 
        { 
        "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,然后利用这些数据来创建/显示您的统计。

    +0

    与App访问令牌,我需要问每个插件的用户在Facebook上创建的应用程序?或者我可以创建一个应用程序并将我的访问令牌嵌入到插件中?我想让插件用户能够尽可能容易地获取数据,因为在Facebook上创建应用程序是一个过程。不要求他们“用Facebook登录”是一个比让他们创建应用程序更简单的过程? –

    +0

    为了安全起见,Facebook建议不要共享应用程序访问令牌。我的建议将如我所写:每个插件使用一个应用程序。 – Tobi

    +0

    我有另一个问题,其中由v2.3 API返回的数字不同于v1.0 API中的数字。如果你知道任何东西,更多的洞察力将不胜感激:http://stackoverflow.com/questions/29805025/facebook-api-versions-returning-different-shared-count –