本系列是对推特开发者文档进行的翻译,以便帮助开发人员使用API接口,难免有些地方存在不足,还请谅解。
关于推特开发者账号 elevated academic 请看此贴:
推特开发者账号申请权限
或
搜索微信公众号 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字段的两个版本。
可以看到既有id也有id_str
开发人员需要做什么
首先要做的是尝试使用解释器对上面的JSON代码片段进行解码。 观察输出以确认ID没有丢失准确性。
-
如果您的代码成功地转换了ID而没有失去准确性,您可以接受,但是应该考虑尽快转换为IDs的str版本。
-
如果代码失去准确性,请将代码转换为使用str版本。如果不这样做,代码将无法可靠地与Twitter API交互。
-
在某些解释器中,JSON在读取ID值时可能抛出异常。如果在解释器中发生这种情况,您将需要“预分析”数据,删除或用它们的str版本替换ID参数。
总结
1.如果您使用Javascript开发,请知道您将必须更新代码以读取字符串版本而不是整数版本。
2.如果使用JSON解码器,请验证上面的示例JSON是否在不引发异常的情况下解码。如果抛出异常,则需要预分析数据。