API仕様
netkeiba.com 利用API
本ツールが使用するnetkeiba.comのエンドポイント一覧。
1. レーススケジュール
| 項目 | 値 |
|---|---|
| URL | https://race.netkeiba.com/top/race_list_sub.html?kaisai_date={YYYYMMDD} |
| メソッド | GET |
| レスポンス | HTML |
| パーサー | BeautifulSoup (lxml) |
パース対象要素:
li.RaceList_DataItem- 各レースのリスト項目a[href*="race_id="]- レースIDを含むリンク.RaceList_Itemtime- 発走時刻.RaceList_ItemTitle- レース名
2. 単勝オッズ
| 項目 | 値 |
|---|---|
| URL | https://race.netkeiba.com/api/api_get_jra_odds.html?race_id={ID}&type=1&action=update |
| メソッド | GET |
| レスポンス | JSON (またはJSONP) |
| パーサー | json.loads |
パラメータ:
| パラメータ | 説明 | 値 |
|---|---|---|
| race_id | レースID (12桁) | 例: 202609010711 |
| type | オッズ種別 | 1 = 単勝 |
| action | アクション | update |
レスポンス構造:
json
{
"status": "result",
"data": {
"odds": {
"1": {
"01": ["3.5", "", "2"],
"02": ["12.8", "", "5"]
}
}
}
}配列の意味: [単勝オッズ, (未使用), 人気順位]
3. 出馬表
| 項目 | 値 |
|---|---|
| URL | https://race.netkeiba.com/race/shutuba.html?race_id={ID} |
| メソッド | GET |
| レスポンス | HTML (EUC-JP) |
| パーサー | BeautifulSoup (lxml) |
パース対象要素:
table.Shutuba_Table- 出馬表テーブルtd.Umaban- 馬番span.HorseName a- 馬名td.Jockey a- 騎手名
設定パラメータ (.env)
| 変数名 | 型 | デフォルト | 説明 |
|---|---|---|---|
SLACK_WEBHOOK_URL | string | (空) | Slack Webhook URL |
POLL_INTERVAL | int | 60 | ポーリング間隔 (秒) |
POLL_INTERVAL_NEAR_POST | int | 30 | 発走前ポーリング間隔 (秒) |
ALERT_THRESHOLD_PCT | float | 20.0 | Slack通知閾値 (%) |
DISPLAY_THRESHOLD_PCT | float | 5.0 | ターミナル表示閾値 (%) |
SLACK_COOLDOWN_MINUTES | int | 5 | 通知クールダウン (分) |
TARGET_DATE | string | (当日) | 対象日 (YYYYMMDD) |
TARGET_RACE_IDS | string | (全レース) | 対象レースID (カンマ区切り) |
REQUEST_TIMEOUT | int | 15 | HTTPタイムアウト (秒) |
REQUEST_DELAY | float | 1.0 | リクエスト間隔 (秒) |
DB_PATH | string | data/odds.db | SQLiteパス |
CLIオプション
bash
python main.py [OPTIONS]| オプション | 説明 | 例 |
|---|---|---|
--date YYYYMMDD | 対象日指定 | --date 20260315 |
--race-id ID [ID...] | 特定レースのみ | --race-id 202609010711 |
--interval N | ポーリング間隔 (秒) | --interval 30 |
--no-slack | Slack通知無効 | --no-slack |
--test-slack | テスト通知送信 | --test-slack |