Twitter开发者账号申请【推特开发者文档系列6】——Twitter IDs(snowflake)

本系列是对推特开发者文档进行的翻译,以便帮助开发人员使用API接口,难免有些地方存在不足,还请谅解。

关于如何获得一个推特开发者账号请看此贴:

推特开发者账号的申请

搜索微信公众号 twitterDeveloper 获得帮助


什么是Snowflake?

Snowflake是一种服务,用于为Twitter中的对象(Tweets、Direct Messages、Users、Collections、list等)生成唯一的id。这些id是唯一的64位无符号整数,它们基于时间,而不是顺序的。完整的ID由时间戳、工作编号和***组成。在使用JSON使用API时,始终使用字段id_str而不是id是很重要的。这是由于使用JSON的Javascript和其他语言计算大整数的方式所致。如果您遇到一个不符合id和id_str的场景,那是因为您的环境已经解析了id整数,并在过程中修改了数字。请阅读下面的内容,了解更多关于Twitter如何生成id的信息。

问题

一些编程语言(如Javascript)不能支持大于53位的数字。这可以通过在浏览器控制台中运行类似于:(90071992547409921).toString()的命令或通过JSON解析器试运行以下JSON片段。
{"id": 10765432100123456789, "id_str": "10765432100123456789"}
在受影响的JSON解析器中,ID将不会成功转换,并且会失去准确性。 在某些解析器中,甚至可能会有例外。

解决方案

为了允许Javascript和JSON解析器读取ID,Twitter对象在使用JSON响应时包含任何ID的字符串版本。因此,Twitter API中的Status、User、Direct Message、Saved Search和其他id在JSON响应中既作为整数又作为字符串返回。

例如,status对象包含一个id和一个id_str。status对象的以下JSON表示显示了每个数据的id字段的两个版本。

Twitter开发者账号申请【推特开发者文档系列6】——Twitter IDs(snowflake)
Twitter开发者账号申请【推特开发者文档系列6】——Twitter IDs(snowflake)

可以看到既有id也有id_str

开发人员需要做什么

首先要做的是尝试使用解释器对上面的JSON代码片段进行解码。 观察输出以确认ID没有丢失准确性。

  • 如果您的代码成功地转换了ID而没有失去准确性,您可以接受,但是应该考虑尽快转换为IDs的str版本。

  • 如果代码失去准确性,请将代码转换为使用str版本。如果不这样做,代码将无法可靠地与Twitter API交互。

  • 在某些解释器中,JSON在读取ID值时可能抛出异常。如果在解释器中发生这种情况,您将需要“预分析”数据,删除或用它们的str版本替换ID参数。

总结

1.如果您使用Javascript开发,请知道您将必须更新代码以读取字符串版本而不是整数版本。
2.如果使用JSON解码器,请验证上面的示例JSON是否在不引发异常的情况下解码。如果抛出异常,则需要预分析数据。