如何使用Facebook JavaScript SDK运行大量(67)FQL查询?

时间:2012-03-08 17:41:12

标签: javascript facebook facebook-graph-api facebook-fql facebook-javascript-sdk

我通过Facebook JavaScript SDK使用FQL来请求许多URL的Like和Share计数(总共67个)。除了区分它们的片段标识符(a.k.a。哈希字符串)之外,URL几乎相同。

以下是对API的示例调用:

var queries = {
  "101": "SELECT share_count, like_count FROM link_stat WHERE url = \"http://www.example.com/foo/bar/#101\"",
  "102": "SELECT share_count, like_count FROM link_stat WHERE url = \"http://www.example.com/foo/bar/#102\"",
  "103": "SELECT share_count, like_count FROM link_stat WHERE url = \"http://www.example.com/foo/bar/#103\"",
  "104": "SELECT share_count, like_count FROM link_stat WHERE url = \"http://www.example.com/foo/bar/#104\""
};

FB.api('/fql', {
  q: queries
}, function(result) {
  console.log(result.data);
});

这适用于现代浏览器,但在一些较旧的浏览器中失败,即IE / 8和FF / 3.6。在这些浏览器中,我从Facebook JS SDK库中收到JavaScript错误:

  

您的浏览器不支持长连接请求。您可以通过升级浏览器或安装最新版本的Flash来解决此问题

我怀疑这个错误与Facebook SDK跨域提出大型POST请求的方法有关,这可以解释为什么旧浏览器无法处理它。

如果我严格限制我一次运行的FQL查询的数量 - 即从67减少到大约8,我可以让它工作,避免错误。但是,考虑到我的要求,这是不可接受的项目。我可能会将单个大型API请求拆分为8-9个较小的请求,但这不是一个理想的解决方案。

有没有更好的方法来检索我需要的数据,同时避免上面的JS错误?我有几个想法,但不知道它们是否可行或如何处理它们:

  • 动态提供网址;也就是说,以某种方式使用基本URL(除片段标识符之外的所有内容)和函数,正则表达式或URL的不同版本中片段标识符的可能值的其他表示形式发出单个FQL请求。或者,我也可以使用Facebook已知的所有URL中包含我的基本URL作为子字符串的数据;从理论上讲,这应该归还我关心的全套67.
  • 使用其他方法访问此数据。 Facebook支持batch requests,并提到它们适合用于查询大量数据。但是,他们似乎在所有情况下都需要一个身份验证令牌,我不会这样做(这是我的项目不需要身份验证的要求,而且我只是试图访问公共数据),我找不到一个在JavaScript中使用它们的连贯示例,因此我无法确定如何格式化我的代码。

如果您有任何建议或意见,请告诉我。代码示例也非常受欢迎,因为我很难浏览Facebook的文档,其大部分代码示例都是针对JavaScript以外的语言。

谢谢!

0 个答案:

没有答案