我正在维护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查询:
答案 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,然后使用该数据创建/显示您的统计信息。
见