# Qji × Qobuz ログイン失敗 トラブルシューティング
---
## はじめに:Qji の認証の仕組み
Qji の Qobuz モジュール(`qji_qobuz.py`)は、Qobuz の公式アプリが使っているのと同じ非公開 API を利用します。認証には **3つの値** が必要です。
| 値 | 保存キー | 説明 |
|---|---|---|
| `X-User-Auth-Token` | `auth_token` | あなた個人のセッショントークン。ログイン状態を表す長い文字列 |
| `X-App-Id` | `app_id` | Qobuz クライアントアプリを識別する数値 ID |
| `app_secret` | `app_secret` | HMAC 署名に使う秘密鍵。`qobuz_dl` ライブラリで自動取得 |
これらは `~/.config/qji_qobuz_direct.json` に保存されます。
間違って保存した場合は削除してのちもう一度Qjiを立ち上げてログインしなおしてください。
---
## トークンの取得手順(初回・再取得共通)
### ステップ 1 — ブラウザで Qobuz にログイン
Firefox または Chrome で **https://play.qobuz.com** を開き、メールアドレスとパスワードでログインします。
### ステップ 2 — 開発者ツールを開く
`F12` キーを押して開発者ツールパネルを開きます。
**「ネットワーク」**(Network)タブを選択します。
### ステップ 3 — ページをリロードしてリクエストをキャプチャ
`F5` キーでページをリロードします。
フィルター欄に `api.json` と入力して、Qobuz API リクエストだけを絞り込みます。
### ステップ 4 — リクエストヘッダーを確認する
リスト内のリクエスト(例:`user/get?...`)をクリックし、**「リクエストヘッダー」** を開きます。
以下の 2 つの値をコピーします。
```
X-User-Auth-Token : eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo...(長い文字列)
X-App-Id : 950096963(数字のみ)
```
> **ヒント:** リクエストが見つからない場合は、プレイヤー画面で楽曲を再生したり、アルバムページを開いたりすると API 通信が発生します。
### ステップ 5 — Qji に入力する
Qji の Qobuz メニューで `c`(設定変更)を押し、プロンプトに従って貼り付けます。
```
メールアドレス(表示用): your@email.com
X-User-Auth-Token : eyJhbGciOiJIUzI1NiJ9...
X-App-Id : 950096963
```
---
## よくあるエラーと対処法
### ❌「トークンが期限切れです」
**原因:** `X-User-Auth-Token` は Qobuz のセッションに紐づいています。ブラウザでログアウトしたり、長期間放置すると無効になります。
**対処:**
1. ブラウザで https://play.qobuz.com に再ログイン
2. F12 → ネットワーク → F5 リロードで新しい `X-User-Auth-Token` を取得
3. Qji で `c` キーを押してトークンを更新
---
### ❌「必須項目が不足しています」
**原因:** `X-User-Auth-Token` または `X-App-Id` が空のまま Enter を押した。
**対処:** `c` で再設定。両方の値を必ず入力してください。`X-App-Id` は数字だけの文字列です(例:`950096963`)。
---
### ❌「確認できませんでした(設定は保存しました)」
**原因:** トークンは形式上正しいが、`user/get` API が失敗した。ネットワーク接続か、コピーミスの可能性があります。
**対処:**
1. `X-User-Auth-Token` が途中で切れていないか確認(非常に長い文字列です)
2. 前後にスペースが混入していないか確認
3. ネットワーク疎通を確認:`curl -s https://www.qobuz.com/api.json/0.2/catalog/search?query=test`
4. 再度トークンを取得して `c` で更新
---
### ❌ `app_secret` が取得できない
**原因:** `qobuz_dl` ライブラリが未インストール、またはバージョンが古い。
**確認コマンド:**
```bash
pip show qobuz-dl
```
**対処:**
```bash
pip install qobuz-dl --upgrade
```
それでも取得できない場合、`_setup_token` のプロンプトで `app_secret` を手動入力できます。取得方法は次のセクションを参照してください。
---
### ❌ `app_secret` を手動で取得したい
Qobuz の Web アプリの JavaScript バンドルに含まれています。以下のコマンドで取得できます(`X-App-Id` を実際の値に置き換えてください)。
```bash
# qobuz-dl の Bundle を直接使う方法
python3 -c "
from qobuz_dl.bundle import Bundle
secrets = list(Bundle().get_secrets().values())
print(secrets)
"
```
または、https://play.qobuz.com のページソース内で `app_secret` に相当する 32 文字の16進数文字列を検索する方法もあります。
---
### ❌ 設定ファイルが壊れている
**確認コマンド:**
```bash
cat ~/.config/qji_qobuz_direct.json
```
正常な設定ファイルの例:
```json
{
"username": "your@email.com",
"app_id": "950096963",
"app_secret": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"auth_token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo...",
"user_id": "123456"
}
```
ファイルが壊れている場合は削除して再設定します:
```bash
rm ~/.config/qji_qobuz_direct.json
# → 次回 Qji 起動時に自動的に初回設定フローが始まります
```
---
### ❌ ping は通るが再生できない(`track/getFileUrl` 失敗)
**原因:** `app_secret` が正しくないため、HMAC 署名が計算できていない。トークンの認証とファイル URL 取得には別のロジックが使われます。
**確認:** `~/.config/qji_qobuz_direct.json` の `app_secret` が 32 文字前後の英数字文字列になっているか確認。短すぎる・空の場合は `qobuz-dl` を再インストールして `c` でトークンを再設定。
---
## 定期メンテナンスについて
Qji は **30 分ごと** に `user/get` エンドポイントへ ping を送り、トークンの有効性を自動確認しています。
メイン画面に `⚠ トークン期限切れの可能性があります` と表示された場合は、`c` キーで再設定してください。
---
## 設定ファイルの場所
```
~/.config/qji_qobuz_direct.json ← 認証情報
~/.config/qji_qobuz_favorites.json ← お気に入り
```
パーミッションは自動的に `600`(本人のみ読み書き可)に設定されます。
---
## チェックリスト
ログインが失敗したとき、順番に確認してください。
- [ ] https://play.qobuz.com にブラウザでログインできる
- [ ] `X-User-Auth-Token` を開発者ツールから正しくコピーできた(長い文字列、途中で切れていない)
- [ ] `X-App-Id` は数字のみ(例:`950096963`)
- [ ] `qobuz-dl` がインストールされている(`pip show qobuz-dl`)
- [ ] `~/.config/qji_qobuz_direct.json` の JSON が壊れていない
- [ ] インターネット接続が正常(`curl https://www.qobuz.com` が応答する)