【问题标题】:fql bug: page_id is greater that max int valuefql 错误:page_id 大于最大 int 值
【发布时间】:2012-03-12 11:38:11
【问题描述】:

facebook 的开发者声明页表中的 page_id 是整数。

但由于 facebook 页面很多,它的数量增加了大于最大 int 值

http://developers.facebook.com/docs/reference/fql/page/

所以 fql 的选择给出了像这样的 e+123213

【问题讨论】:

  • 您是遇到这个问题还是指出 fql 中的错误?
  • 我遇到了一个房地产错误,这给了我错误的结果

标签: select facebook-fql facebook-page integer


【解决方案1】:

这似乎是page table documentation 中的一个错误。在 Graph API documentation for page object 中将此字段称为 string

实际上最好将 Facebook 返回的任何id 保存/使用为string,因为在许多情况下id 的值会导致溢出integer 边界。对于某些对象,id 可能包含数字以外的字符(下划线)。

更新: 澄清一些事情。问题不仅在于文档,还在于返回数据。 API 以 JSON 形式返回响应(或者如果您使用旧的 REST API,您也可以指定 XML 格式)string。所以响应确实包含完整和正确的page_id,但是在 JSON 解析阶段你会丢失它,因为它被解析为integer

在 PHP 5.4 json_decode function 中有额外的 options 参数,可能是 JSON_BIGINT_AS_STRING 来解决这个问题。你应该检查你使用的解析方法是否支持这样的东西。

在 Facebook 上针对此问题打开了几个错误(不是针对 page 表中的 page_id,而是针对其他表上的 uid 字段的相同行为):

其实你可以做一些事情来解决这个问题:

  • 如果您使用 PHP,您可以:
    • 使用 64 位版本的运行时,由于更大PHP_INT_MAX 没有这个问题
    • 使用带有JSON_BIGINT_AS_STRING 选项的PHP 5.4 传递给json_decode
  • 如果您使用 PHP 或任何其他技术:
    • 使用替代 JSON 解析器(我不知道 PHP 中有任何 JSON 解析器能够处理这个问题)
    • 使用快速而肮脏的正则表达式将所有数字包装起来,并用引号 $response = preg_replace('/(\b\d+\b)/', '"$1"', $response) 进行响应(这是针对 PHP 的,但您会明白的)

我还建议在 Facebook 上提交其他错误并更新您的问题,以便我们也可以订阅它。

【讨论】:

  • 问题不在文档中,fql 表将其返回为整数,并且由于该值大于 max int,因此将其转换为某种 e+4234234
  • @Aziz,我添加了关于您可能会觉得有用的问题的说明和详细信息;)
猜你喜欢
  • 2013-01-29
  • 2021-08-06
  • 2010-12-23
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多