複数の鉄道会社とバス会社の時刻表データを収集し、JSON形式で提供するAPIサーバーです。 現在は近鉄・JRの鉄道時刻表と近鉄バスの時刻表に対応しています。
- 複数の鉄道会社・バス会社の時刻表情報をスクレイピングまたは定義データから取得
- 時刻表データをJSON形式でAPI提供
- インメモリキャッシュによるパフォーマンス最適化(デフォルト1時間ごとに更新)
- ファイルベースのデータ永続化(オプション)
research-kindai/
├── app/ # アプリケーションソースコード
│ ├── app.ts # Honoアプリケーション設定
│ ├── client.ts # フロントエンド用クライアントサイドコード (未使用の可能性あり)
│ ├── global.d.ts # グローバル型定義
│ ├── renderer.tsx # JSXレンダラー (Hono用)
│ ├── server.ts # APIサーバーエントリーポイント
│ ├── components/ # Reactコンポーネント (Hono JSX用)
│ │ ├── DateSelector.tsx
│ │ ├── ErrorPage.tsx
│ │ └── Layout.tsx
│ ├── lib/ # コアロジック・ライブラリ
│ │ ├── api.ts # 外部API連携 (未使用の可能性あり)
│ │ ├── parsers/ # 各社時刻表パーサー
│ │ │ ├── jr.ts
│ │ │ ├── kintetsu.ts
│ │ │ └── kintetsu-bus.ts
│ │ ├── types/ # 型定義
│ │ └── utils/ # ユーティリティ関数
│ │ ├── cache.ts # キャッシュ管理
│ │ └── config.ts # 設定読み込み
│ └── routes/ # ルーティング定義
│ ├── index.tsx # トップページ (HTML)
│ ├── api/ # APIエンドポイント
│ │ ├── all.ts
│ │ ├── jr.ts
│ │ ├── kintetsu.ts
│ │ ├── kintetsu-bus.ts
│ │ ├── cache/ # キャッシュ操作API
│ │ │ └── clear.ts
│ │ └── kintetsu-bus/ # 近鉄バス関連API
│ │ ├── calendar/
│ │ │ └── [date].ts
│ │ └── stop/
│ │ └── [stopName].ts
│ └── view/ # HTMLビュー用ルート
│ └── kintetsu-bus/
│ ├── index.tsx
│ ├── calendar/
│ │ ├── [date].tsx
│ │ └── index.tsx
│ └── stop/
│ └── [stopName].tsx
├── dist/ # データ出力ディレクトリ (main.ts実行時)
├── bun.lockb # Bunロックファイル
├── config.json # 設定ファイル
├── main.ts # データ生成・出力スクリプト
├── openapi.yaml # OpenAPI仕様 (ドキュメント)
├── package.json # プロジェクトメタデータ・依存関係
├── tsconfig.json # TypeScript設定
├── vite.config.ts # Vite設定 (未使用の可能性あり)
└── README.md # このファイル
- Bun (v1.0.0以上推奨)
- リポジトリをクローン:
git clone https://github.com/localhouse-jp/mon-API.git cd research-kindai
- 依存関係をインストール:
bun install
開発モードでAPIサーバーを起動します。
bun run dev # package.jsonのscripts.devを参照 (例: bun run app/server.ts)
# または直接実行
bun run app/server.ts
サーバーはデフォルトで http://localhost:3000
で起動します。
時刻表データを直接JSONファイルとして生成し、dist
ディレクトリに出力します。
# 設定ファイル(config.json)に基づいて全データを生成
bun run main.ts
# 個別のパーサーを実行して生成 (例: JRデータ)
# bun run app/lib/parsers/jr.ts # (パーサーが直接実行可能か要確認)
生成されるファイル例:
dist/kintetsu-train.json
dist/jr-train.json
dist/kintetsu-bus.json
(パーサー実装による)
GET /api/kintetsu
: 近鉄の鉄道時刻表データを取得GET /api/jr
: JRの鉄道時刻表データを取得
GET /api/kintetsu-bus
: 近鉄バスの全時刻表データを取得GET /api/kintetsu-bus/calendar/:date
: 指定日 (YYYY-MM-DD
) の運行カレンダー情報 (運行日A/B/運休など) を取得GET /api/kintetsu-bus/stop/:stopName
: 特定のバス停の時刻表を取得- クエリパラメータ
?date=YYYY-MM-DD
で日付指定可能 (例:/api/kintetsu-bus/stop/近畿大学東門前?date=2025-05-07
)
- クエリパラメータ
GET /api/all
: すべての鉄道・バス会社のデータを統合して取得
POST /api/cache/clear
: APIサーバーのインメモリキャッシュをクリア- リクエストボディでクリア対象を指定可能 (例:
{"key": "kintetsu"}
や{"key": "all"}
)
- リクエストボディでクリア対象を指定可能 (例:
HonoのJSX機能を利用した簡単なHTMLビューも提供されます。
/
: APIの簡単な説明ページ/view/kintetsu-bus/calendar
: 近鉄バスの運行カレンダー表示ページ/view/kintetsu-bus/calendar/:date
: 指定日のカレンダー情報表示/view/kintetsu-bus/stop/:stopName
: 指定バス停の時刻表表示ページ
- APIサーバー: デフォルトで1時間ごとにキャッシュが自動更新されます。
- 手動更新: キャッシュを即時クリアして最新データを取得させたい場合は、キャッシュクリアAPIを利用します。
# 例: すべてのキャッシュをクリア curl -X POST http://localhost:3000/api/cache/clear -H "Content-Type: application/json" -d '{"key":"all"}'
- 直接生成:
bun run main.ts
を再実行すると、最新データでdist
ディレクトリのJSONファイルが上書きされます。
近鉄バスは日によって運行ダイヤが異なります。APIでは主に以下の区分で情報を提供します。
- 運行日 (A): 主に平日ダイヤ
- 運行日 (B): 主に土曜・休日ダイヤ
- 運休日: バスが運行しない日
詳細は /api/kintetsu-bus/calendar/:date
エンドポイントで確認できます。
config.json
でデータ取得元などの設定を行います。
{
"parsers": [
{
"name": "kintetsu", // パーサー名 (lib/parsers/ 内のファイル名と対応想定)
"urls": [ // データ取得元URLリスト
"https://eki.kintetsu.co.jp/norikae/T5?USR=PC&slCode=356-5&d=1&dw=0",
"https://eki.kintetsu.co.jp/norikae/T5?USR=PC&slCode=350-8&d=1&dw=0"
]
},
{
"name": "jr",
"urls": [ /* JR用URL */ ]
},
{
"name": "kintetsu-bus",
"calendarUrl": "...", // カレンダー情報URL
"stopUrls": { // バス停ごとのURLなど
"近畿大学東門前": "..."
}
}
// 他のパーサー設定...
],
"outputDir": "./dist", // main.ts での出力先ディレクトリ
"cacheTTL": 3600 // キャッシュ有効期間 (秒、デフォルト3600秒 = 1時間)
}
注: config.json
の正確な構造は lib/utils/config.ts
の実装に依存します。上記は一例です。