fql bug:page_id 大于 max int 值

发布于 2025-01-07 12:25:04 字数 263 浏览 2 评论 0原文

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

但由于 Facebook 页面较多,其数量增加超过了最大 int 值

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

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

The developers of facebook states that page_id in the page table is integer.

But because of many facebook pages, it number increased greater that max int value

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

so the fql's select gives smth like this e+123213

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盗梦空间 2025-01-14 12:25:04

这似乎是 page 表文档中的错误。在 Graph API page 对象的文档中,请参阅该字段为字符串

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

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

在 PHP 5.4 中 json_decode 函数 有额外的 options 参数这可能是 JSON_BIGINT_AS_STRING 来解决这个问题。您应该检查您使用的解析方法是否支持类似的内容。

Facebook 上针对此问题存在几个错误(不是针对 page 表中的 page_id,而是针对其他表中的 uid 字段。表):

实际上你可以采取一些措施来克服这个问题:

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

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

This seems like a bug in page table documentation. In Graph API documentation for page object refer to this field as string.

It's actually better to save/use any id returned by Facebook as string since in many cases value of id will cause overflow over integer boundaries. And for some objects id may contain characters other that numbers (underscore).

Update:
To clarify some things. The issue is really not only with documentation but with return data too. API return response as JSON (or if you using old REST API you can specify XML format too) string. So the response do contain full and correct page_id, but in the phase of JSON parsing you loose it due to fact that it's parsed as integer.

In PHP 5.4 json_decode function have additional options parameter which may be JSON_BIGINT_AS_STRING to overcome this issue. You should check if the parsing method you use supports something like this.

There is couple of bugs opened for this issue on Facebook (it's not for the page_id in page table, but same behavior for uid field on other tables):

Actually you can do something to overcome this issue:

  • If you using PHP you may either:
    • use 64bit version of run-time which have no this issue due to bigger PHP_INT_MAX
    • use PHP 5.4 with JSON_BIGINT_AS_STRING option passed to json_decode
  • If you using PHP or any other technology:
    • use alternative JSON parser (I'm not aware of any JSON parser in PHP that able to handle this)
    • Use quick and dirty reqular expression to wrap all numbers in response with quotes $response = preg_replace('/(\b\d+\b)/', '"$1"', $response) (this is for PHP, but you'll get the idea)

Also I recommend filing additional Bug on Facebook and updating your question so we can subscribe to it as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文