fql bug:page_id大于max int值

时间:2012-02-22 05:56:08

标签: select facebook-fql facebook-page integer

facebook的开发人员声明页面表中的page_id是整数。

但是由于许多Facebook页面,它的数量增加了大于最大值

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

所以fql的select给出类似于e + 123213的smth

1 个答案:

答案 0 :(得分:1)

这似乎是page table documentation中的错误。在图表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_id表中的page,而是其他表上uid字段的相同行为):

实际上你可以做点什么来克服这个问题:

  • 如果您使用PHP,您可以:
    • 使用64位版本的运行时由于PHP_INT_MAX
    • 较大而没有此问题
    • 使用PHP 5.4并将JSON_BIGINT_AS_STRING选项传递给json_decode
  • 如果您使用PHP或任何其他技术:
    • 使用替代JSON解析器(我不知道PHP中能够处理此问题的任何JSON解析器)
    • 使用快速且脏的reqular表达式来包装所有数字以回复引号$response = preg_replace('/(\b\d+\b)/', '"$1"', $response)(这适用于PHP,但你会得到这个想法)

另外,我建议在Facebook上提交额外的Bug并更新您的问题,以便我们也可以订阅它。