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 では、
- 先頭から 固定 17 フィールド(#0〜#16) を持ちます。
- 親投稿(スレ立て行)のみ、行末側に 拡張 2 フィールド(#17, #18) が付与されます。
- 拡張部の先頭は
<status>というマーカーで識別されます(親行のみ)。
サンプルURL
- 各板のディレクトリにcatalog.datを付加しアクセスするとスレッド一覧を取得できます(サンプル:http://board.futakuro.com/may/catalog.dat)
- 各スレッドの拡張子をhtmからdatに変更するとレス一覧を取得できます(サンプル:http://board.futakuro.com/sup/res/1.dat)
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
- http://board.futakuro.com/may/api.php?mode=jsonにアクセスするとmayのカタログを取得できます。
- http://board.futakuro.com/may/api.php?mode=json&res=スレッド番号&start=取得開始レスにアクセスするとmayの取得開始レス以降についた新着レスを取得できます
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=スレッド形式。 |
dispname | 0/1 | クライアント向けの表示ヒント(名前表示可否)。 |
dispsod | 0/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. 補足・互換性
- UNIX 時刻の単位:DAT 内やカタログの時刻は「秒」または「ミリ秒」で表現される場合があります。API の
timはミリ秒に正規化されます。 - URL の形式:API は相対 URL を絶対 URL に変換して返します(空の場合は空のまま)。
- フィールドの欠落:子レスでは #16〜#18 が無いのが通常です。クライアントは存在チェックを行ってください。
- 表示ヒント(
dispname/dispsod):UI 向けのアドバイスであり、必須ではありません。