# studio-slots スタジオの空き枠を「スタジオセット」(西荻窪周辺、吉祥寺など)ごとにまとめて見る Web ページ。 https://studio.yyamashita.com ```sh python3 server.py # → http://localhost:8000 ``` 依存ライブラリなし(Python 3.9 以上)。リンキィディンクの空き枠は会員ページから読むので、 `.env` に会員情報が要る(リポジトリには入れない)。 ``` RINKY_ID=会員番号またはメールアドレス RINKY_PASSWORD=パスワード ``` ## 構成 - `studios.json` … スタジオセットとスタジオ(名前、公式サイト、電話番号、使う provider) - `providers/` … 空き枠の取得元。取得結果は 5 分キャッシュする - `rinky` … リンキィディンク(Reserve Mart / reserve1.jp)。1 回ログインして店舗(`grand`)と日付を切り替えて読む - `server.py` … `/api/sets`、`/api/slots?set=&date=YYYY-MM-DD` と `static/` を配信 - `static/index.html` … 一覧画面。`?set=kichijoji&date=2026-11-07` のように URL で開ける `provider` が `null` のスタジオ(ノア、UEN、Akseli)は空き枠を取れないので、電話番号とリンクだけ出す。 サウンドスタジオノアは公式サイトが自動アクセスを 403 で弾くため取得していない。 ## スタジオを足すには 1. `studios.json` の `studios` に追加し、見せたいセットの `studios` に id を並べる 2. リンキィディンクの別店舗なら `"provider": "rinky"` と `"grand"`(店舗番号。公式サイトの予約ボタンの `gr`)だけでよい 3. 別の予約システムなら `providers/` にモジュールを足して `PROVIDERS` に登録する ## デプロイ `git push` で post-receive フックが `/app/studio-slots` にチェックアウトし、`docker compose up -d --build` する。 コンテナ名は `studio-app`(web ネットワーク、ポート 8000)。Caddy が studio.yyamashita.com で HTTPS を終端する。 設定は hetzner-infra 側(`git/repos.txt`、`git/hooks/studio-slots/`、`caddy/Caddyfile`)。