API 已弃用 Facebook Graph 的分享数?
API Share count Facebook Graph deprecated?
从今天开始,当我尝试获取共享计数时,答案是:共享字段已弃用 v2.9 及更高版本。
例如:https://graph.facebook.com/?id=https://whosebug.com&fields=share
没有 &fields=share 显示 json 内容,但 没有共享值。
我需要从 url 获取 Facebook 的分享数。
API确实变了
应该是这样的
https://graph.facebook.com/?id=https://whosebug.com&fields=engagement&access_token=user-access-token
您需要一个访问令牌。如果您有 Facebook,请转到 https://developers.facebook.com/ 并制作一个应用程序。
Graph API Explorer
然后点击"Graph API Explorer"。
Get Token
和"Get Token"(获取应用令牌)。就是这样。
如果您使用 JavaScript 进行计数,它将是这样的。
// split('#')[0] : Remove hash params from URL
const url = encodeURIComponent( window.location.href.split('#')[0] );
$.ajax( {
url : '//graph.facebook.com/?id=' + url + '&fields=engagement&access_token=user-access-token',
dataType : 'jsonp',
timeout: 5000,
success : function( obj ) {
let count = 0;
if ( typeof obj.engagement.reaction_count !== 'undefined' ) {
count = obj.engagement.reaction_count;
}
// do something with 'count'
},
error : function() {
// do something
}
} );
还有其他计数类型,例如 comment_count 和 share_count。
见https://developers.facebook.com/docs/graph-api/reference/v3.2/url
有什么方法可以在不发送访问令牌的情况下接收计数吗?
我想知道我自己哈哈
更新:
感谢安东卢金。
是的。我不应该显示访问令牌。它必须隐藏起来。我觉得很傻。
所以现在快速回答。这在没有令牌的情况下确实有效!
我的最终(希望是最终)答案是这样的。
// split('#')[0] : Remove hash params from URL
const url = encodeURIComponent( window.location.href.split('#')[0] );
$.ajax( {
url: '//graph.facebook.com/?id=' + url + '&fields=og_object{engagement}',
dataType : 'jsonp',
timeout: 5000,
success : function( obj ) {
let count = 0;
try {
count = obj.og_object.engagement.count
} catch (e) {
console.log(e)
}
// do something with 'count'
},
error : function() {
// do something
}
} );
这里有一点是,当没有人共享目标页面时,'og_object.engagement' 甚至都没有定义。
我以为我会得到 0 作为 return 值。但事实并非如此。
所以让我们使用 try-catch。
现在我唯一担心的是 API 限制。如果您的网站获得大量浏览量,则此更新版本可能无法正常工作..
由于您无法在前端显示您的访问令牌,我建议您使用 nginx 代理请求,将您的 access_token 隐藏在您的服务器上。
您需要一个访问令牌。导航到 https://developers.facebook.com/ 并创建一个应用程序。
转到Graph explorer and copy the token. To obtain permanent token follow this short guide
将自定义规则添加到您的 nginx 配置
http {
...
# Optional: set facebook cache zone
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=facebook:100m inactive=60m;
...
}
server {
server_name example.org;
...
location /facebook {
# Optional: don't log requests
access_log off;
log_not_found off;
# Allow get shares only for single domain (remove condition to allow all domains)
if ( $arg_id ~ "^https://example.org/" ) {
set $args"${args}&access_token=your_access_token_here";
}
# Set dns resolver address (you can change it with any dns server)
resolver 1.1.1.1;
proxy_pass https://graph.facebook.com?$args;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Optional: add cache for 30 minutes
proxy_ignore_headers Expires;
proxy_ignore_headers Cache-Control;
proxy_cache facebook;
proxy_cache_valid any 30m;
proxy_cache_key $host$uri$is_args$arg_id;
}
...
}
- 现在您可以将 graph.facebook.com 替换为您的自定义域。
Before:
After:
https://example.org/facebook?fields=engagement&callback=FB.Share&id=https://example.org/
- 注意 facebook api 限制。如果您有大量请求,您可以尝试使用 page token。对于您页面的每个参与用户,您每天可以发出 4800 个图表请求 api。
如果您不想使用访问令牌或 nginx 代理解决方案,请参阅 :
您可以使用查询
https://graph.facebook.com?id=<your-url>&fields=og_object{engagement}
答案会是
{
"og_object": {
"engagement": {
"count": 197,
"social_sentence": "197 people like this."
},
"id": "895062470590407"
},
"id": "<your-url>"
}
2021 年更新:您需要 this request. You can get temporary access token in Graph API Explorer or generate it with your custom app
的访问令牌
如果你有facebook的app,不用登录也很简单,你可以下载。
https://graph.facebook.com/?id={URL}&fields=engagement&access_token={your-app_id}|{your-app_secret}
响应如下:
{
"engagement": {
"reaction_count": 36,
"comment_count": 2,
"share_count": 20,
"comment_plugin_count": 3
},
"id": "https://www.example.com"
}
参考:https://developers.facebook.com/docs/facebook-login/access-tokens
从今天开始,当我尝试获取共享计数时,答案是:共享字段已弃用 v2.9 及更高版本。
例如:https://graph.facebook.com/?id=https://whosebug.com&fields=share
没有 &fields=share 显示 json 内容,但 没有共享值。
我需要从 url 获取 Facebook 的分享数。
API确实变了
应该是这样的
https://graph.facebook.com/?id=https://whosebug.com&fields=engagement&access_token=user-access-token
您需要一个访问令牌。如果您有 Facebook,请转到 https://developers.facebook.com/ 并制作一个应用程序。
Graph API Explorer
然后点击"Graph API Explorer"。
Get Token
和"Get Token"(获取应用令牌)。就是这样。
如果您使用 JavaScript 进行计数,它将是这样的。
// split('#')[0] : Remove hash params from URL
const url = encodeURIComponent( window.location.href.split('#')[0] );
$.ajax( {
url : '//graph.facebook.com/?id=' + url + '&fields=engagement&access_token=user-access-token',
dataType : 'jsonp',
timeout: 5000,
success : function( obj ) {
let count = 0;
if ( typeof obj.engagement.reaction_count !== 'undefined' ) {
count = obj.engagement.reaction_count;
}
// do something with 'count'
},
error : function() {
// do something
}
} );
还有其他计数类型,例如 comment_count 和 share_count。
见https://developers.facebook.com/docs/graph-api/reference/v3.2/url
有什么方法可以在不发送访问令牌的情况下接收计数吗?
我想知道我自己哈哈
更新:
感谢安东卢金。
是的。我不应该显示访问令牌。它必须隐藏起来。我觉得很傻。
所以现在快速回答。这在没有令牌的情况下确实有效!
我的最终(希望是最终)答案是这样的。
// split('#')[0] : Remove hash params from URL
const url = encodeURIComponent( window.location.href.split('#')[0] );
$.ajax( {
url: '//graph.facebook.com/?id=' + url + '&fields=og_object{engagement}',
dataType : 'jsonp',
timeout: 5000,
success : function( obj ) {
let count = 0;
try {
count = obj.og_object.engagement.count
} catch (e) {
console.log(e)
}
// do something with 'count'
},
error : function() {
// do something
}
} );
这里有一点是,当没有人共享目标页面时,'og_object.engagement' 甚至都没有定义。
我以为我会得到 0 作为 return 值。但事实并非如此。
所以让我们使用 try-catch。
现在我唯一担心的是 API 限制。如果您的网站获得大量浏览量,则此更新版本可能无法正常工作..
由于您无法在前端显示您的访问令牌,我建议您使用 nginx 代理请求,将您的 access_token 隐藏在您的服务器上。
您需要一个访问令牌。导航到 https://developers.facebook.com/ 并创建一个应用程序。
转到Graph explorer and copy the token. To obtain permanent token follow this short guide
将自定义规则添加到您的 nginx 配置
http {
...
# Optional: set facebook cache zone
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=facebook:100m inactive=60m;
...
}
server {
server_name example.org;
...
location /facebook {
# Optional: don't log requests
access_log off;
log_not_found off;
# Allow get shares only for single domain (remove condition to allow all domains)
if ( $arg_id ~ "^https://example.org/" ) {
set $args"${args}&access_token=your_access_token_here";
}
# Set dns resolver address (you can change it with any dns server)
resolver 1.1.1.1;
proxy_pass https://graph.facebook.com?$args;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Optional: add cache for 30 minutes
proxy_ignore_headers Expires;
proxy_ignore_headers Cache-Control;
proxy_cache facebook;
proxy_cache_valid any 30m;
proxy_cache_key $host$uri$is_args$arg_id;
}
...
}
- 现在您可以将 graph.facebook.com 替换为您的自定义域。
Before:
After:
https://example.org/facebook?fields=engagement&callback=FB.Share&id=https://example.org/
- 注意 facebook api 限制。如果您有大量请求,您可以尝试使用 page token。对于您页面的每个参与用户,您每天可以发出 4800 个图表请求 api。
如果您不想使用访问令牌或 nginx 代理解决方案,请参阅
您可以使用查询
https://graph.facebook.com?id=<your-url>&fields=og_object{engagement}
答案会是
{
"og_object": {
"engagement": {
"count": 197,
"social_sentence": "197 people like this."
},
"id": "895062470590407"
},
"id": "<your-url>"
}
2021 年更新:您需要 this request. You can get temporary access token in Graph API Explorer or generate it with your custom app
的访问令牌如果你有facebook的app,不用登录也很简单,你可以下载。
https://graph.facebook.com/?id={URL}&fields=engagement&access_token={your-app_id}|{your-app_secret}
响应如下:
{
"engagement": {
"reaction_count": 36,
"comment_count": 2,
"share_count": 20,
"comment_plugin_count": 3
},
"id": "https://www.example.com"
}
参考:https://developers.facebook.com/docs/facebook-login/access-tokens