blob: 39dda674244b30de22041566872ece5b8139055a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# 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`)。
|