Futaboard 仕様書(DAT / カタログ / JSON API) 2025-10-24 JST

この文書は DAT 形式api.php の仕様を説明しています。

1. 概要

本掲示板は、「DAT 形式」テキストおよび、クライアント向けに JSON を返す HTTP API(api.php)を提供します。

文字コード: UTF-8 改行: LF 配信: Content-Type: application/json; charset=utf-8 メソッド: GET

2. DAT 仕様

DAT は <>」区切りのテキスト行 の集合です。1 行が 1 レスに対応します。スレッド DAT では、

サンプルURL

2.1 スレッド DAT:各フィールド定義

#内容型 / 例
0レス番号(1 始まり)整数例: 1
1名前(HTML エスケープ済み)名無しさん
2メール欄sage / 空
3題名(スレタイ)お知らせスレ
4投稿日時の表示文字列(ID 等を含む場合あり)2025/10/24(金) 12:34:56 ID:abcd1234
5投稿時刻(UNIX エポック)文字列。またはミリ秒
6本文(HTML。改行は <br>本文…<br>続き
7添付メディアの URL(無ければ空)相対/絶対 URL
8メディア横幅整数ピクセル
9メディア縦幅整数ピクセル
10ファイルサイズ(バイト)整数
11メディア MD5(16 進)e2a1…
12サムネイル URL相対/絶対 URL
13サムネイル横幅整数ピクセル
14サムネイル縦幅整数ピクセル
15「そうだね」数整数
16ステータス情報(親行のみ <status>… で始まる)文字列 / 子レスは空
17*フッター拡張(親行のみ)— コメント後に付加される注意書き等文字列
18*消滅予定時刻(UNIX エポック。秒またはミリ秒)文字列

* #17〜#18 は親行のみ。子レスには存在しません。

2.2 catalog.dat:各行の定義

カタログ行はスレ概要用の簡易形式です。1 行の並びは以下です。

内容型 / 例
1スレ HTML へのパス/res/123456.htm
2サムネイルのパスURL
3先頭文(本文の抜粋)文字列
4返信数整数
5スレ立て時刻(UNIX、秒またはミリ秒)文字列
6題名(スレタイ)文字列
7カタログ用表示幅(省略可)整数
8カタログ用表示高(省略可)整数
9元メディア横幅(省略可)整数
10元メディア縦幅(省略可)整数

スレ番号はパス(例:/res/<no>.htm)から抽出されます。

3. api.php 仕様

サンプルURL

3.1 エンドポイント

用途HTTPパス & クエリ説明
カタログ JSON GET /api.php?mode=json カタログ情報を JSON で返します。
スレッド JSON GET /api.php?mode=json&res={thread_no}[&start={n}] 指定スレのレスを JSON で返します。start は取得開始レス番号(既定 0=全件)。

3.2 クエリパラメータ

mode(必須 / スレッド取得時のみ)
文字列 json 固定。
res(必須 / スレッド取得時)
スレッド番号(整数)。
start(任意)
取得を開始するレス番号。その番号のレスは含まれます(例:start=1 でも #1 を含む)。未指定は 0 で全件。

3.3 共通レスポンス(トップレベル)

キー意味
old数値1=カタログ形式、0=スレッド形式。
dispname0/1クライアント向けの表示ヒント(名前表示可否)。
dispsod0/1「そうだね」表示ヒント。
die文字列JSTの dd日HH:MM 形式による消滅表示。スレにより未指定の場合あり。(カタログ表示時は正常な値を返しません)
dielong文字列GMT/RFC1123 形式の消滅表示(例: Fri, 24 Oct 2025 03:21:00 GMT)。(カタログ表示時は正常な値を返しません)
nowtime数値サーバ現在時刻(UNIX 秒)。
maxres文字列将来拡張。通常は空文字。
resオブジェクトキー=レス番号(文字列)、値=レス詳細(下表)。
sdオブジェクトキー=レス番号(文字列)、値=「そうだね」数(整数)。
error文字列エラー時のみ含まれます(例:Invalid parameters.)。

3.4 res 内のレス項目(スレッド JSON)

キー意味
now文字列投稿日時表示(ID を含む場合あり)。
name文字列名前。
email文字列メール欄。
sub文字列題名。
com文字列(HTML)本文(改行は <br>)。
ext文字列メディア拡張子(例: .jpg)。添付がなければ空。
w数値添付メディア横幅。
h数値添付メディア縦幅。
tim文字列投稿時刻(UNIX ミリ秒に正規化)。
fsize数値ファイルサイズ(バイト)。
del文字列将来拡張。通常は空。
host文字列将来拡張。通常は空。
id文字列投稿者 ID(日時文字列から抽出される場合あり)。
rsc数値レス読込順の通番(1, 2, …)。
src文字列(URL)メディアの絶対 URL(無ければ空)。
thumb文字列(URL)サムネイルの絶対 URL(無ければ空)。

3.5 res 内の項目(カタログ JSON)

カタログでは、各スレが「レス相当の 1 レコード」として返ります。カタログ特有の差分は以下です。

キー意味
w / h数値カタログ表示向けの推奨サイズ。
srcw / srch数値元メディアの実サイズ(存在する場合)。
rsc数値返信数(スレ内レスの通番ではありません)。
src文字列通常は空(メディア URL は提供しません)。

3.6 エラー時の応答

不正なクエリ(例:mode が不正、res が未指定/0)に対しては、HTTP 200 で以下のような JSON を返すことがあります。

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

4. 利用例

4.1 カタログ取得

GET /api.php?mode=json
{
  "old": 1,
  "dispname": 1,
  "dispsod": 1,
  "die": "24日12:00",
  "dielong": "Fri, 24 Oct 2025 03:00:00 GMT",
  "nowtime": 1761234000,
  "maxres": "",
  "res": {
    "123456": {
      "now": "2025/10/24(金) 12:00:00",
      "name": "",
      "email": "",
      "sub": "お知らせスレ",
      "com": "本文の先頭…",
      "ext": "",
      "w": 200, "h": 200,
      "tim": "1761234000000",
      "fsize": 0,
      "del": "", "host": "", "id": "",
      "rsc": 12,
      "src": "",
      "thumb": "https://example.com/thumb/abcdefs.jpg",
      "srcw": 1024, "srch": 768
    }
  },
  "sd": {}
}

4.2 スレッド取得(全件)

GET /api.php?mode=json&res=123456
{
  "old": 0,
  "dispname": 1,
  "dispsod": 1,
  "die": "25日10:30",
  "dielong": "Sat, 25 Oct 2025 01:30:00 GMT",
  "nowtime": 1761320400,
  "maxres": "",
  "res": {
    "1": {
      "now": "2025/10/24(金) 12:00:00 ID:abcd1234",
      "name": "名無しさん",
      "email": "sage",
      "sub": "お知らせスレ",
      "com": "本文…<br>続き",
      "ext": ".jpg",
      "w": 1024, "h": 768,
      "tim": "1761234000000",
      "fsize": 345678,
      "del": "", "host": "",
      "id": "abcd1234",
      "rsc": 1,
      "src": "https://example.com/img/abcdef.jpg",
      "thumb": "https://example.com/thumb/abcdefs.jpg"
    },
    "2": { "now": "…", "name": "…", "...": "…" }
  },
  "sd": { "0": 0, "1": 3, "2": 0, "3": 1 }
}

4.3 スレッド取得(start 指定)

GET /api.php?mode=json&res=123456&start=100

レス #100 以降のみを res に含めます。sd はスレ全件分(#0 を含む場合あり)です。

5. 補足・互換性