Futaboard 仕様書(DAT / カタログ / JSON API)

この文書は Futaboard の スレッド DATカタログ DAT、および JSON API(api.php の仕様をまとめたものです。


1) スレッド DAT 仕様

サンプルURL

固定フィールド(#0〜#16)

#(0始まり)キー(参考)説明
0nonumber投稿番号(スレ先頭も含む)。
1namestring投稿者名。
2emailstringメール/トリップ等(空可)。
3subjectstring題名(空可)。
4nowstring表示用時刻(例: YY/MM/DD(曜)HH:MM:SS。ID が含まれる場合あり)。
5posttime_unixnumberUNIX 秒。
6commentstring(HTML)本文(必要最小限のタグを含む)。
7srcstringソース画像/動画のパス(または URL)。無い場合は空。
8srcwnumberソース幅 px(無い場合 0)。
9srchnumberソース高 px(無い場合 0)。
10fsizenumberファイルサイズ(Byte)。
11md5stringソースの MD5(無い場合は空文字)。
12thumbstringサムネイルのパス(または URL)。無い場合は空。
13thumbwnumberサムネイル幅 px(無い場合 0)。
14thumbhnumberサムネイル高 px(無い場合 0)。
15(空)string画像ブロック直後の空フィールド(互換用の固定空)。
16sdnumber「そうだね」数(0 以上)。

注: 画像が無い投稿でも、#7〜#14 の「画像ブロック」は ""/0必ず確保されます(空 8 フィールド)。

拡張領域(#17 以降)

固定 17 フィールドの後ろは「拡張領域」です。現行実装では以下の順序で出力されます。

項目説明
1info_extstring補足情報(例: 古いスレ警告、○月○日HH:MM頃消えます など)。
2footer_extstring末尾追記領域(省略レス数など)。
3(末尾)expire_unixnumber / 空スレ消滅 UNIX 秒。
スレ先頭行のみ数値、それ以外の行は空文字。
行末は常に <> で終わります。

画像付き・スレ先頭行

12345<>としあき<><>無念<>25/10/03(金)06:33:55 ID:abcdEF12<>1759440835<>本文テキスト<>/src/1759440835964.jpg<>250<>247<>90670<>2f1c9a...<>/thumb/1759440835964s.jpg<>250<>247<><>0<>07日03:11頃消えます<>省略 12 レス<>1759447218<>

…上記では thumbh の後に <> が 1 つ入り #15(空)となり、その次の 0sd(#16)です。

画像なし・レス

12346<>としあき<><>無念<>25/10/03(金)06:45:42<>1759441542<>レス本文<><>0<>0<>0<><><>0<>0<><>1<><> 

…画像ブロック #7〜#14 は空 8 フィールド、その直後の #15 は空、#16 の 1sd

実装注意

互換のため、先頭17フィールド(#0〜#16)を固定部として切り出し、拡張領域は行末から解釈してください。


2) カタログ DAT 仕様

ファイル名は catelog.dat(一般的な綴り)/ catalog.dat(フォールバック)いずれか。1 行 = 1 スレです。

行フォーマット

no<>now<>name<>email<>sub<>com<>ext<>w<>h<>tim<>fsize<>id
#項目説明
0nonumberスレ番号。
1nowstring表示用時刻(IDを含む場合あり)。
2namestring投稿者名(空可)。
3emailstringメール欄。
4substring題名。
5comstring(HTML)本文冒頭など(HTML 可)。
6extstring拡張子(例: .jpg / .png / .webm)。
7wnumber画像幅。
8hnumber画像高。
9timnumber投稿時刻ベースの ミリ秒(10 桁なら秒→×1000 で正規化推奨)。
10fsizenumberファイルサイズ。
11idstringID 文字列(無い場合は now から抽出可)。

備考: クライアント側では src/{board}/src/{tim}{ext}thumb/{board}/thumb/{tim}s.jpg として組み立て可能です。


3) JSON API 仕様(api.php

サンプルURL

エンドポイント

  1. 新着レス取得
    GET api.php?mode=json&res={thread_no}&start={start_no}
    {start_no} より大きいレスのみ返します(未指定時は {thread_no})。
  2. カタログ取得
    GET api.php
    res/start が指定されない場合はカタログ JSON を返します。

レスポンス(共通ヘッダ)

{
  "old": 0|1,
  "dispname": 0|1,
  "dispsod": 0|1,
  "die": "H:i" | "",
  "dielong": "D, d M Y H:i:s GMT" | "",
  "nowtime": 1739000000,
  "maxres": "",
  "res": { ... },   // 連想オブジェクト(下記)
  "sd":  { ... }    // 連想オブジェクト(スレAPIのみ。キー=レス番号, 値=そうだね数)
}

新着レス取得の res 要素

キーはレス番号(文字列化)。値のオブジェクトは以下:

キー説明
nowstring表示用時刻(ID 含む場合あり)。
namestring名前。
emailstringメール。
substring題名。
comstring本文(HTML 可)。
extstring拡張子(例: .jpg / .png / .webm / .mp4)。
w, hnumber画像/動画の幅・高。
timnumber投稿 UNIX ミリ秒
fsizenumberファイルサイズ。
idstringnow から抽出した ID(存在しない場合は空)。
rscnumberレスを走査した順序カウンタ。
src, thumbstring絶対 URL(実装により相対のこともあり)。

カタログ取得の res 要素

キーはスレ番号(文字列化)。値は上記と同じ構造ですが、tim はミリ秒文字列/数値、src/thumb/{board}/src//{board}/thumb で合成されます。

エラー

{
  "old": 0,
  "res": {},
  "sd": {},
  "error": "Invalid parameters."
}