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