X API のあらゆるオブジェクト (投稿、ユーザー、リスト、DM、スペース) には一意の ID が割り当てられています。これらの ID の仕組みを理解することで、信頼性の高い統合を構築できます。
X の ID は、「Snowflake」と呼ばれるシステムで生成される 64 ビット符号なし整数 です。各 ID には次の情報がエンコードされています。
- Timestamp — オブジェクトが作成された時刻
- Worker number — どのサーバーがその ID を生成したか
- Sequence number — そのミリ秒内での順序
そのため、ID はおおよそ時間順になっており、より大きな ID は一般的に新しいオブジェクトを表します。
ID は、単一のオブジェクト type 内だけでなく、X 全体でグローバルに一意です。
コード内では常に文字列のidを使用してください。 一部のプログラミング言語 (JavaScript など) は 64 ビット整数を正確に表現できません。
JavaScript では、整数は 53 ビットに制限されています。このため、大きな id では精度が失われます。
// This loses precision!
const id = 10765432100123456789;
console.log(id.toString()); // "10765432100123458000" — 誤り!
// Use strings instead
const id = "10765432100123456789";
console.log(id); // "10765432100123456789" — correct!
| バージョン | ID 形式 |
|---|
| X API v2 | ID はデフォルトで文字列として返されます |
| X API v1.1 | id (整数) と id_str (文字列) の両方を返します — 常に id_str を使用してください |
データベースでは id を文字列または 64 ビット整数として保存することを推奨します:
| データベース | 推奨される型 |
|---|
| PostgreSQL | BIGINT または TEXT |
| MySQL | BIGINT UNSIGNED または VARCHAR(20) |
| MongoDB | 文字列 |
| SQLite | TEXT (SQLite の整数は最大 63 ビットです) |
時系列順に並べる目的で id を比較する場合:
# Python - safe for 64-bit integers
if int(id1) > int(id2):
print("id1 is newer")
# JavaScript - 文字列として比較(同じ長さのIDに対して辞書順で機能)
# またはBigIntを使用
if (BigInt(id1) > BigInt(id2)) {
console.log("id1 is newer");
}
| オブジェクト | ID の例 | 注記 |
|---|
| ポスト (ツイート) | 1234567890123456789 | Tweet ID とも呼ばれます |
| ユーザー | 2244994945 | 古いアカウントの ID はより短くなります |
| リスト | 1234567890 | |
| スペース | 1YqGodQbNXDxv | 英数字で構成されており、Snowflake 形式ではありません |
| DM イベント | 1234567890123456789 | |
Data Dictionary
各オブジェクトの種類ごとの ID フィールドを確認できます。