本系列是對推特開發(fā)者文檔進(jìn)行的翻譯,以便幫助開發(fā)人員使用API接口,難免有些地方存在不足,還請諒解。
關(guān)于如何獲得一個推特開發(fā)者賬號請看此貼。
什么是Snowflake?
Snowflake是一種服務(wù),用于為Twitter中的對象(Tweets、Direct Messages、Users、Collections、list等)生成唯一的id。這些id是唯一的64位無符號整數(shù),它們基于時間,而不是順序的。完整的ID由時間戳、工作編號和序列號組成。在使用JSON使用API時,始終使用字段id_str而不是id是很重要的。這是由于使用JSON的Javascript和其他語言計算大整數(shù)的方式所致。如果您遇到一個不符合id和id_str的場景,那是因為您的環(huán)境已經(jīng)解析了id整數(shù),并在過程中修改了數(shù)字。請閱讀下面的內(nèi)容,了解更多關(guān)于Twitter如何生成id的信息。
問題
一些編程語言(如Javascript)不能支持大于53位的數(shù)字。這可以通過在瀏覽器控制臺中運(yùn)行類似于:(90071992547409921).toString()的命令或通過JSON解析器試運(yùn)行以下JSON片段。
{"id":10765432100123456789,"id_str":"10765432100123456789"}
在受影響的JSON解析器中,ID將不會成功轉(zhuǎn)換,并且會失去準(zhǔn)確性。在某些解析器中,甚至可能會有例外。
解決方案
為了允許Javascript和JSON解析器讀取ID,Twitter對象在使用JSON響應(yīng)時包含任何ID的字符串版本。因此,Twitter API中的Status、User、Direct Message、Saved Search和其他id在JSON響應(yīng)中既作為整數(shù)又作為字符串返回。
例如,status對象包含一個id和一個id_str。status對象的以下JSON表示顯示了每個數(shù)據(jù)的id字段的兩個版本。
可以看到既有id也有id_str
開發(fā)人員需要做什么
首先要做的是嘗試使用解釋器對上面的JSON代碼片段進(jìn)行解碼。觀察輸出以確認(rèn)ID沒有丟失準(zhǔn)確性。
·如果您的代碼成功地轉(zhuǎn)換了ID而沒有失去準(zhǔn)確性,您可以接受,但是應(yīng)該考慮盡快轉(zhuǎn)換為IDs的str版本。
·如果代碼失去準(zhǔn)確性,請將代碼轉(zhuǎn)換為使用str版本。如果不這樣做,代碼將無法可靠地與Twitter API交互。
·在某些解釋器中,JSON在讀取ID值時可能拋出異常。如果在解釋器中發(fā)生這種情況,您將需要“預(yù)分析”數(shù)據(jù),刪除或用它們的str版本替換ID參數(shù)。
總結(jié)
1.如果您使用Javascript開發(fā),請知道您將必須更新代碼以讀取字符串版本而不是整數(shù)版本。
2.如果使用JSON解碼器,請驗證上面的示例JSON是否在不引發(fā)異常的情況下解碼。如果拋出異常,則需要預(yù)分析數(shù)據(jù)。