Facebook Graph 2.2 - 忽略批量请求中的错误

时间:2015-08-29 16:50:38

标签: facebook facebook-graph-api web-scraping facebook-opengraph

远景,但我有一个大约5,000个Facebook ID列表,我想从中获取openGraph数据。我想要从公共页面获取数据,而不是从个人fb帐户获取数据。

据我所知,在最新的openGraph API中,如果您尝试查找用户名,则会出现以下错误:

 "message": "(#803) Cannot query users by their username (xxxxx)"

这很好,如上所述,我对用户不感兴趣,只是页面。但是,我正在尝试将我的请求一起批量分成50个,这样我就可以尽快得到我的数据(5,000页,1分40秒,否则根据各种来源,我需要每个人提出1个请求第二,或1小时23分钟。)

我想知道是否有任何方法可以向Facebook图形API发送批量GET请求,该请求显示“如果某个ID存在错误,请忽略它并返回其余ID”?

或者,是否有某种方法来验证哪些ID是页面(图表可接受)以及哪些是用户,以便我可以将页面数据一起批处理?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法!值得庆幸的是,如上所述,无法批量请求会将1.5分钟的操作转换为1.5小时的操作。

对我而言,解决方案是Node Fbgraph。它是一个可爱的小模块,可以让您一起批量请求。我离开了这个:

 request('https://graph.facebook.com/v2.2/?fields=id,name,website,likes,about,talking_about_count,location&ids=' <<lots of user ids>>'&access_token='<<token>>)

为:

    var graph = require('fbgraph');
    var token = "whatever";
    graph.setAccessToken(token);

    var arr = ['name1','name2','name3','name4']

    var params = "fields=id,name,website,likes,about,talking_about_count,location";
    var batchArr = [];
    for(var i = 0; i<arr.length; i++){
    tempObj = {
      method: "GET",
      relative_url: arr[i] + "?" + params
   }

   batchArr.push(tempObj);
}


graph.batch(batchArr, function(err, res) {
  console.log(res);
  // res = [{headers and body for #1}, {headers and body for #2} ... etc]
});

这允许“不允许”&#39;用户名失败并收到#803错误,但允许所有其他用户成功,以便您可以根据需要使用该数据。