diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 14524e44..9f2b76b0 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -105,6 +105,78 @@ const zhSidebar = [ }, ] +// Japanese sidebar +const jaSidebar = [ + { + items: [ + { text: '概要', link: '/ja/home/' }, + { text: 'クイックスタート', link: '/ja/deploy/quick-start' }, + { text: '仕組み', link: '/ja/home/pipline' }, + ], + }, + { + text: 'デプロイ', + items: [ + { text: 'Docker CLI', link: '/ja/deploy/docker-cli' }, + { text: 'Docker Compose', link: '/ja/deploy/docker-compose' }, + { text: 'Synology NAS (DSM)', link: '/ja/deploy/dsm' }, + { text: 'ローカルデプロイ', link: '/ja/deploy/local' }, + ], + }, + { + text: '設定', + items: [ + { text: 'RSS購読設定', link: '/ja/config/rss' }, + { text: 'プログラム設定', link: '/ja/config/program' }, + { text: 'ダウンローダー設定', link: '/ja/config/downloader' }, + { text: 'パーサー設定', link: '/ja/config/parser' }, + { text: '通知設定', link: '/ja/config/notifier' }, + { text: 'アニメ管理設定', link: '/ja/config/manager' }, + { text: 'プロキシ設定', link: '/ja/config/proxy' }, + { text: '実験的機能', link: '/ja/config/experimental' }, + ], + }, + { + text: '機能', + items: [ + { text: 'RSS管理', link: '/ja/feature/rss' }, + { text: 'アニメ管理', link: '/ja/feature/bangumi' }, + { text: 'カレンダー表示', link: '/ja/feature/calendar' }, + { text: 'ファイルリネーム', link: '/ja/feature/rename' }, + { text: 'トレント検索', link: '/ja/feature/search' }, + ], + }, + { + text: 'FAQ', + items: [ + { text: 'よくある質問', link: '/ja/faq/' }, + { text: 'トラブルシューティング', link: '/ja/faq/troubleshooting' }, + { text: 'ネットワーク問題', link: '/ja/faq/network' }, + ], + }, + { + text: 'APIリファレンス', + items: [ + { text: 'REST API', link: '/ja/api/' }, + ], + }, + { + text: '更新履歴', + items: [ + { text: '3.2 リリースノート', link: '/ja/changelog/3.2' }, + { text: '3.1 リリースノート', link: '/ja/changelog/3.1' }, + { text: '3.0 リリースノート', link: '/ja/changelog/3.0' }, + { text: '2.6 リリースノート', link: '/ja/changelog/2.6' }, + ], + }, + { + text: '開発者ガイド', + items: [ + { text: 'コントリビュート', link: '/ja/dev/' }, + ], + }, +] + // English sidebar const enSidebar = [ { @@ -240,5 +312,41 @@ export default defineConfig({ }, }, }, + ja: { + label: '日本語', + lang: 'ja-JP', + link: '/ja/', + themeConfig: { + nav: [ + { text: '概要', link: '/ja/home/' }, + { text: 'クイックスタート', link: '/ja/deploy/quick-start' }, + { text: 'FAQ', link: '/ja/faq/' }, + { text: 'API', link: '/ja/api/' }, + ], + sidebar: jaSidebar, + editLink: { + pattern: 'https://github.com/EstrellaXD/Auto_Bangumi/edit/main/docs/:path', + text: 'GitHubでこのページを編集', + }, + footer: { + message: `AutoBangumiはMITライセンスの下で公開されています。(最新版: ${version})`, + copyright: 'Copyright © 2021-present @EstrellaXD & AutoBangumi Contributors', + }, + docFooter: { + prev: '前のページ', + next: '次のページ', + }, + outline: { + label: '目次', + }, + lastUpdated: { + text: '最終更新', + }, + returnToTopLabel: 'トップに戻る', + sidebarMenuLabel: 'メニュー', + darkModeSwitchLabel: 'テーマ', + langMenuLabel: '言語を切り替え', + }, + }, }, }) diff --git a/docs/ja/api/index.md b/docs/ja/api/index.md new file mode 100644 index 00000000..675a8a9f --- /dev/null +++ b/docs/ja/api/index.md @@ -0,0 +1,619 @@ +# REST APIリファレンス + +AutoBangumiは`/api/v1`でREST APIを公開しています。すべてのエンドポイント(ログインとセットアップを除く)はJWT認証が必要です。 + +**ベースURL:** `http://your-host:7892/api/v1` + +**認証:** JWTトークンをCookieまたは`Authorization: Bearer `ヘッダーとして含めてください。 + +**インタラクティブドキュメント:** 開発モードで実行している場合、Swagger UIは`http://your-host:7892/docs`で利用可能です。 + +--- + +## 認証 + +### ログイン + +``` +POST /auth/login +``` + +ユーザー名とパスワードで認証します。 + +**リクエストボディ:** +```json +{ + "username": "string", + "password": "string" +} +``` + +**レスポンス:** JWTトークン付きの認証Cookieを設定します。 + +### トークンのリフレッシュ + +``` +GET /auth/refresh_token +``` + +現在の認証トークンをリフレッシュします。 + +### ログアウト + +``` +GET /auth/logout +``` + +認証Cookieをクリアしてログアウトします。 + +### 認証情報の更新 + +``` +POST /auth/update +``` + +ユーザー名および/またはパスワードを更新します。 + +**リクエストボディ:** +```json +{ + "username": "string", + "password": "string" +} +``` + +--- + +## Passkey / WebAuthn + +WebAuthn/FIDO2 Passkeysを使用したパスワードレス認証。 + +### Passkeyの登録 + +``` +POST /passkey/register/options +``` + +WebAuthn登録オプション(チャレンジ、リライングパーティ情報)を取得します。 + +``` +POST /passkey/register/verify +``` + +ブラウザからのPasskey登録レスポンスを検証して保存します。 + +### Passkeyで認証 + +``` +POST /passkey/auth/options +``` + +WebAuthn認証チャレンジオプションを取得します。 + +``` +POST /passkey/auth/verify +``` + +Passkey認証レスポンスを検証し、JWTトークンを発行します。 + +### Passkeyの管理 + +``` +GET /passkey/list +``` + +現在のユーザーの登録済みPasskeyをすべてリストします。 + +``` +POST /passkey/delete +``` + +クレデンシャルIDで登録済みPasskeyを削除します。 + +--- + +## 設定 + +### 設定の取得 + +``` +GET /config/get +``` + +現在のアプリケーション設定を取得します。 + +**レスポンス:** `program`、`downloader`、`rss_parser`、`bangumi_manager`、`notification`、`proxy`、`experimental_openai`セクションを含む完全な設定オブジェクト。 + +### 設定の更新 + +``` +PATCH /config/update +``` + +アプリケーション設定を部分的に更新します。変更したいフィールドのみを含めてください。 + +**リクエストボディ:** 部分的な設定オブジェクト。 + +--- + +## 番組(アニメルール) + +### すべての番組をリスト + +``` +GET /bangumi/get/all +``` + +すべてのアニメダウンロードルールを取得します。 + +### IDで番組を取得 + +``` +GET /bangumi/get/{bangumi_id} +``` + +IDで特定のアニメルールを取得します。 + +### 番組の更新 + +``` +PATCH /bangumi/update/{bangumi_id} +``` + +アニメルールのメタデータ(タイトル、シーズン、エピソードオフセットなど)を更新します。 + +### 番組の削除 + +``` +DELETE /bangumi/delete/{bangumi_id} +``` + +単一のアニメルールと関連するトレントを削除します。 + +``` +DELETE /bangumi/delete/many/ +``` + +複数のアニメルールを一括削除します。 + +**リクエストボディ:** +```json +{ + "bangumi_ids": [1, 2, 3] +} +``` + +### 番組の無効化 / 有効化 + +``` +DELETE /bangumi/disable/{bangumi_id} +``` + +アニメルールを無効化します(ファイルは保持、ダウンロード停止)。 + +``` +DELETE /bangumi/disable/many/ +``` + +複数のアニメルールを一括無効化します。 + +``` +GET /bangumi/enable/{bangumi_id} +``` + +以前に無効化されたアニメルールを再有効化します。 + +### ポスターのリフレッシュ + +``` +GET /bangumi/refresh/poster/all +``` + +すべてのアニメのポスター画像をTMDBからリフレッシュします。 + +``` +GET /bangumi/refresh/poster/{bangumi_id} +``` + +特定のアニメのポスター画像をリフレッシュします。 + +### カレンダー + +``` +GET /bangumi/refresh/calendar +``` + +Bangumi.tvからアニメ放送カレンダーデータをリフレッシュします。 + +### すべてリセット + +``` +GET /bangumi/reset/all +``` + +すべてのアニメルールを削除します。注意して使用してください。 + +--- + +## RSSフィード + +### すべてのフィードをリスト + +``` +GET /rss +``` + +設定されたすべてのRSSフィードを取得します。 + +### フィードの追加 + +``` +POST /rss/add +``` + +新しいRSSフィード購読を追加します。 + +**リクエストボディ:** +```json +{ + "url": "string", + "aggregate": true, + "parser": "mikan" +} +``` + +### フィードの有効化 / 無効化 + +``` +POST /rss/enable/many +``` + +複数のRSSフィードを有効化します。 + +``` +PATCH /rss/disable/{rss_id} +``` + +単一のRSSフィードを無効化します。 + +``` +POST /rss/disable/many +``` + +複数のRSSフィードを一括無効化します。 + +### フィードの削除 + +``` +DELETE /rss/delete/{rss_id} +``` + +単一のRSSフィードを削除します。 + +``` +POST /rss/delete/many +``` + +複数のRSSフィードを一括削除します。 + +### フィードの更新 + +``` +PATCH /rss/update/{rss_id} +``` + +RSSフィードの設定を更新します。 + +### フィードのリフレッシュ + +``` +GET /rss/refresh/all +``` + +すべてのRSSフィードのリフレッシュを手動でトリガーします。 + +``` +GET /rss/refresh/{rss_id} +``` + +特定のRSSフィードをリフレッシュします。 + +### フィードからトレントを取得 + +``` +GET /rss/torrent/{rss_id} +``` + +特定のRSSフィードから解析されたトレントのリストを取得します。 + +### 分析と購読 + +``` +POST /rss/analysis +``` + +RSS URLを分析し、購読せずにアニメのメタデータを抽出します。 + +**リクエストボディ:** +```json +{ + "url": "string" +} +``` + +``` +POST /rss/collect +``` + +RSSフィードからすべてのエピソードをダウンロードします(完結したアニメ用)。 + +``` +POST /rss/subscribe +``` + +自動継続ダウンロード用にRSSフィードを購読します。 + +--- + +## 検索 + +### 番組検索(Server-Sent Events) + +``` +GET /search/bangumi?keyword={keyword}&provider={provider} +``` + +アニメのトレントを検索します。リアルタイム更新のためにServer-Sent Events(SSE)ストリームとして結果を返します。 + +**クエリパラメータ:** +- `keyword` — 検索キーワード +- `provider` — 検索プロバイダー(例:`mikan`、`nyaa`、`dmhy`) + +**レスポンス:** 解析された検索結果を含むSSEストリーム。 + +### 検索プロバイダーのリスト + +``` +GET /search/provider +``` + +利用可能な検索プロバイダーのリストを取得します。 + +--- + +## プログラム制御 + +### ステータスの取得 + +``` +GET /status +``` + +バージョン、実行状態、first_runフラグを含むプログラムステータスを取得します。 + +**レスポンス:** +```json +{ + "status": "running", + "version": "3.2.0", + "first_run": false +} +``` + +### プログラムの開始 + +``` +GET /start +``` + +メインプログラム(RSSチェック、ダウンロード、リネーム)を開始します。 + +### プログラムの再起動 + +``` +GET /restart +``` + +メインプログラムを再起動します。 + +### プログラムの停止 + +``` +GET /stop +``` + +メインプログラムを停止します(WebUIはアクセス可能なまま)。 + +### シャットダウン + +``` +GET /shutdown +``` + +アプリケーション全体をシャットダウンします(Dockerコンテナを再起動します)。 + +### ダウンローダーのチェック + +``` +GET /check/downloader +``` + +設定されたダウンローダー(qBittorrent)への接続をテストします。 + +--- + +## ダウンローダー管理 + +AutoBangumiから直接ダウンローダー内のトレントを管理します。 + +### トレントのリスト + +``` +GET /downloader/torrents +``` + +Bangumiカテゴリ内のすべてのトレントを取得します。 + +### トレントの一時停止 + +``` +POST /downloader/torrents/pause +``` + +ハッシュでトレントを一時停止します。 + +**リクエストボディ:** +```json +{ + "hashes": ["hash1", "hash2"] +} +``` + +### トレントの再開 + +``` +POST /downloader/torrents/resume +``` + +ハッシュで一時停止したトレントを再開します。 + +**リクエストボディ:** +```json +{ + "hashes": ["hash1", "hash2"] +} +``` + +### トレントの削除 + +``` +POST /downloader/torrents/delete +``` + +オプションでファイル削除を伴うトレントを削除します。 + +**リクエストボディ:** +```json +{ + "hashes": ["hash1", "hash2"], + "delete_files": false +} +``` + +--- + +## セットアップウィザード + +これらのエンドポイントは、初回実行セットアップ中(セットアップ完了前)にのみ利用可能です。認証は**不要**です。セットアップ完了後、すべてのエンドポイントは`403 Forbidden`を返します。 + +### セットアップステータスの確認 + +``` +GET /setup/status +``` + +セットアップウィザードが必要かどうか(初回実行)を確認します。 + +**レスポンス:** +```json +{ + "need_setup": true +} +``` + +### ダウンローダー接続のテスト + +``` +POST /setup/test-downloader +``` + +提供された認証情報でダウンローダーへの接続をテストします。 + +**リクエストボディ:** +```json +{ + "type": "qbittorrent", + "host": "172.17.0.1:8080", + "username": "admin", + "password": "adminadmin", + "ssl": false +} +``` + +### RSSフィードのテスト + +``` +POST /setup/test-rss +``` + +RSS URLがアクセス可能で解析可能か検証します。 + +**リクエストボディ:** +```json +{ + "url": "https://mikanime.tv/RSS/MyBangumi?token=xxx" +} +``` + +### 通知のテスト + +``` +POST /setup/test-notification +``` + +提供された設定でテスト通知を送信します。 + +**リクエストボディ:** +```json +{ + "type": "telegram", + "token": "bot_token", + "chat_id": "chat_id" +} +``` + +### セットアップの完了 + +``` +POST /setup/complete +``` + +すべての設定を保存し、セットアップを完了としてマークします。センチネルファイル`config/.setup_complete`を作成します。 + +**リクエストボディ:** 完全な設定オブジェクト。 + +--- + +## ログ + +### ログの取得 + +``` +GET /log +``` + +完全なアプリケーションログファイルを取得します。 + +### ログのクリア + +``` +GET /log/clear +``` + +ログファイルをクリアします。 + +--- + +## レスポンス形式 + +すべてのAPIレスポンスは一貫した形式に従います: + +```json +{ + "msg_en": "Success message in English", + "msg_zh": "Success message in Chinese", + "status": true +} +``` + +エラーレスポンスには、両方の言語でのエラーメッセージとともに適切なHTTPステータスコード(400、401、403、404、500)が含まれます。 diff --git a/docs/ja/changelog/2.6.md b/docs/ja/changelog/2.6.md new file mode 100644 index 00000000..743c0777 --- /dev/null +++ b/docs/ja/changelog/2.6.md @@ -0,0 +1,137 @@ +# [2.6] リリースノート + +## 古いバージョンからのアップグレードノート + +バージョン2.6以降、AutoBangumi(AB)の設定は環境変数から`config.json`に移動しました。アップグレード前に以下の点に注意してください。 + +### 環境変数の移行 + +古い環境変数は、2.6へのアップグレード後の初回起動時に自動的に`config.json`に変換されます。生成された`config.json`は`/app/config`フォルダに配置されます。 +`/app/config`フォルダをマッピングすると、古い環境変数はABの動作に影響しなくなります。`config.json`を削除すると、環境変数から再生成できます。 + +### コンテナボリュームマッピング + +バージョン2.6以降、以下のフォルダをマッピングする必要があります: + +- `/app/config`:`config.json`を含む設定フォルダ +- `/app/data`:`bangumi.json`などを含むデータフォルダ + +### データファイル + +大きな更新があるため、古いデータファイルの使用は推奨しません。ABは自動的に`/app/data`に新しい`bangumi.json`を生成します。 + +心配しないでください — QBは以前にダウンロードしたアニメを再ダウンロードしません。 + +### 以降の設定変更 + +ABはWebUIで直接設定を編集できるようになりました。編集後、変更を有効にするにはコンテナを再起動してください。 + +## アップグレード方法 + +### Docker Compose + +既存のdocker-compose.ymlファイルを使用してアップグレードできます: + +```bash +docker compose stop autobangumi +docker compose pull autobangumi +``` + +次に、docker-compose.ymlを変更してボリュームマッピングを追加します: + +```yaml +version: "3.8" + +services: + autobangumi: + image: estrellaxd/auto_bangumi:latest + container_name: autobangumi + restart: unless-stopped + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + volumes: + - /path/to/config:/app/config + - /path/to/data:/app/data + networks: + - bridge + dns: + - 8.8.8.8 +``` + +その後ABを起動します: + +```bash +docker compose up -d autobangumi +``` + +### Portainer + +Portainerで、ボリュームマッピングを変更し、`Recreate`をクリックしてアップグレードを完了します。 + +### アップグレードで問題が発生した場合 + +設定は様々であるため、アップグレードによりプログラムが失敗する場合があります。以前のすべてのデータと生成された設定ファイルを削除し、コンテナを再起動してWebUIで再設定してください。 + + +## 新機能 + +### 設定方法の変更 + +v2.6以降、プログラム設定はDocker環境変数から`config.json`に移動しました。 +新しいWebUIはWebベースの設定エディターも提供します。AB URLにアクセスし、サイドバーで`設定`を見つけて設定を変更してください。編集後はコンテナを再起動してください。 + +### カスタムリバースプロキシURLとABのプロキシリレー + +[Mikan Project](https://mikanani.me)にアクセスできない状況に対処するため、ABは3つのアプローチを提供します: + +1. HTTPとSOCKSプロキシ + + この機能は古いバージョンに存在しました。2.6にアップグレードした後、WebUIでプロキシ設定を確認するだけでMikan Projectに正常にアクセスできます。 + + ただし、qBittorrentはまだMikanのRSSとトレントURLに直接アクセスできないため、qBittorrentにもプロキシを追加する必要があります。詳細は#198を参照してください。 + +2. カスタムリバースプロキシURL + + バージョン2.6ではカスタムリバースプロキシURL用の`custom_url`オプションが追加されました。 + 適切に設定されたリバースプロキシURLに設定してください。ABはこのカスタムURLを使用してMikan Projectにアクセスし、QBは正常にダウンロードできます。 + +3. ABのプロキシリレー + + ABでプロキシを設定した後、ABはローカルプロキシリレーとして機能できます(現在はRSS関連機能のみ)。 + `custom_url`を`http://abhost:abport`に設定します。ここで`abhost`はABのIP、`abport`はABのポートです。 + ABは自分のアドレスをqBittorrentにプッシュし、qBittorrentはABをプロキシとして使用してMikan Projectにアクセスします。 + + 注意:NginxなどでABのリバースプロキシを設定していない場合は、適切な動作を確保するために`http://`を含めてください。 + +**重要な注意事項** + +ABとQBが同じコンテナにある場合、`127.0.0.1`や`localhost`を使用しないでください。この方法では通信できません。 +同じネットワーク上にある場合は、コンテナ名アドレッシングを使用してください。例:`http://autobangumi:7892`。 + +Dockerゲートウェイアドレスも使用できます。例:`http://172.17.0.1:7892`。 + +異なるホストにある場合は、ホストマシンのIPアドレスを使用してください。 + +### コレクションとフォルダのリネーム + +ABはコレクションとフォルダ内のファイルをリネームし、メディアファイルをルートディレクトリに戻すことができるようになりました。 +ABは保存パスに依存してシーズンとエピソード情報を決定するため、ABの標準に従ってコレクションファイルを配置してください。 + +バージョン**2.6.4**以降、ABはフォルダ内の字幕をリネームできます(機能はまだ改善中)。コレクションと字幕はデフォルトで`pn`形式リネームです。調整オプションはまだ利用できません。 + +**標準パス** + +``` +/downloads/Bangumi/Title/Season 1/xxx +``` + +### プッシュ通知 + +ABは`Telegram`と`ServerChan`を介してリネーム完了通知を送信できるようになりました。 + +WebUIで、プッシュ通知を有効にし、必要なパラメータを入力してください。 + +- Telegramには Bot TokenとChat IDが必要です。取得方法については様々なチュートリアルを参照してください。 +- ServerChanにはTokenが必要です。取得方法については様々なチュートリアルを参照してください。 diff --git a/docs/ja/changelog/3.0.md b/docs/ja/changelog/3.0.md new file mode 100644 index 00000000..290b0bf5 --- /dev/null +++ b/docs/ja/changelog/3.0.md @@ -0,0 +1,46 @@ +# [3.0] リリースノート + +### 新しいWebUI + +- ログイン機能 — ABがユーザー名/パスワード認証をサポート。一部の操作にはログインが必要。 +- 新しいポスターウォール +- 番組管理機能 + - アニメシーズン情報と名前を編集。変更は自動的に**ダウンロードルール** / **ダウンロード済みファイルパス**を更新し、リネームをトリガー。 + - 新しいリンクパーサー — リンクを解析した後、ダウンロード情報を手動で調整、ダウンロードシーズンを選択、または自動ダウンロードルールを追加可能。 + - アニメ削除 — アニメとそのトレントファイルをワンクリックで削除。 + - アニメごとのカスタムダウンロードルール、グローバルルールから独立。 +- より簡単なアプリケーションルール設定のための新しい設定インターフェース +- 初回起動ガイダンス用の初期化ページを追加 +- qBittorrent接続用のダウンローダー接続チェッカー +- RSSフィードが有効かどうかをチェックするRSS URLバリデーター +- WebUIからプログラムの開始/停止とコンテナの再起動のためのプログラム管理ボタンを追加 + +### パーサー + +- 公式タイトルとポスターURLを取得するための異なるソースタイプをサポートする新しいパーサー +- データベースを再生成せずにRSS購読ソースの変更をサポート + +### 通知モジュール + +- `Bark`通知モジュールを追加 +- 新しい通知形式 — ポスター、アニメ名、更新されたエピソード番号をTelegramにプッシュ可能に + +### データ移行 + +- 古いバージョンからアップグレード時の自動データ移行 +- 移行されたデータも自動的にポスターをマッチング + +## 修正 + +- Windowsパスで発生する可能性のあるリネームバグを修正 + +## 変更 + +- データストレージを`json`から`sqlite`に移行 +- マルチプロセッシングからマルチスレッドに移行 + - メインプログラムのリファクタリング + - 起動/シャットダウン時間の改善 +- パーサーモジュールのリファクタリング +- リネームモジュールのリファクタリング + - 一時的に`normal`モードを削除 +- `ghcr.io`イメージレジストリを追加 diff --git a/docs/ja/changelog/3.1.md b/docs/ja/changelog/3.1.md new file mode 100644 index 00000000..87329d6e --- /dev/null +++ b/docs/ja/changelog/3.1.md @@ -0,0 +1,47 @@ +# [3.1] - 2023-08 + +- バックエンドとフロントエンドリポジトリを統合、プロジェクトディレクトリ構造を最適化 +- バージョンリリースワークフローを最適化 +- WikiをVitePressに移行:https://autobangumi.org + +## バックエンド + +### 機能 + +- `RSS Engine`モジュールを追加 — ABが独立してRSS購読を更新・管理し、トレントをダウンローダーに送信可能に + - RSS Engineモジュールで管理される複数の集約RSS購読ソースをサポート + - ダウンロード重複排除 — 重複して購読されたトレントは再ダウンロードされない + - RSS購読の手動リフレッシュAPIを追加 + - RSS購読管理APIを追加 +- `Search Engine`モジュールを追加 — キーワードでトレントを検索し、結果をコレクションまたは購読タスクとして解析 + - `mikan`、`dmhy`、`nyaa`をサポートするプラグインベースの検索エンジン +- 個別グループ設定用の字幕グループ固有ルールを追加 +- IPv6リスニングサポートを追加(環境変数で`IPV6=1`を設定) +- ルールとRSS購読の一括管理用バッチ操作APIを追加 + +### 変更 + +- データベース構造を`sqlmodel`に変更してデータベース管理 +- シームレスなソフトウェアデータ更新のためにバージョン管理を追加 +- API形式を統一 +- APIレスポンス言語オプションを追加 +- データベースモックテストを追加 +- コード最適化 + +### バグ修正 + +- 様々な小さな問題を修正 +- いくつかの大きな問題を導入 + +## フロントエンド + +### 機能 + +- `i18n`サポートを追加 — 現在`zh-CN`と`en-US`をサポート +- PWAサポートを追加 +- RSS管理ページを追加 +- 検索トップバーを追加 + +### 変更 + +- 様々なUI詳細を調整 diff --git a/docs/ja/changelog/3.2.md b/docs/ja/changelog/3.2.md new file mode 100644 index 00000000..033f27f0 --- /dev/null +++ b/docs/ja/changelog/3.2.md @@ -0,0 +1,192 @@ +# [3.2] - 2025-01 + +## バックエンド + +### 機能 + +- WebAuthn Passkeyパスワードレスログインサポートを追加 + - Passkeyクレデンシャルの登録、認証、管理 + - マルチデバイスクレデンシャルバックアップ検出(iCloud Keychainなど) + - クローン攻撃保護(sign_count検証) + - パスワードとPasskeyログインインターフェースを統合する認証戦略パターン + - 検出可能なクレデンシャル(レジデントキー)によるユーザー名なしログインサポート +- シーズン/エピソードオフセットの自動検出を追加 + - TMDBエピソード放送日を分析して「仮想シーズン」を検出(例:フリーレンS1が2つのパートに分割) + - 放送ギャップが6ヶ月を超える場合に異なるパートを自動識別 + - エピソードオフセットを計算(例:RSSがS2E1を表示 → TMDB S1E29) + - バックグラウンドスキャンスレッドが既存の購読のオフセット問題を自動検出 + - 新しいAPIエンドポイント:`POST /bangumi/detect-offset`、`PATCH /bangumi/dismiss-review/{id}` +- 番組アーカイブ機能を追加 + - 手動アーカイブ/アーカイブ解除サポート + - 完結シリーズの自動アーカイブ + - 新しいAPIエンドポイント:`PATCH /bangumi/archive/{id}`、`PATCH /bangumi/unarchive/{id}`、`GET /bangumi/refresh/metadata` +- 検索プロバイダー設定APIを追加 + - `GET /search/provider/config` - 検索プロバイダー設定を取得 + - `PUT /search/provider/config` - 検索プロバイダー設定を更新 +- RSS接続ステータス追跡を追加 + - 各リフレッシュ後に`connection_status`(healthy/error)、`last_checked_at`、`last_error`を記録 +- 初回実行セットアップウィザードを追加 + - 7ステップのガイド付き設定:アカウント、ダウンローダー、RSSソース、メディアパス、通知 + - ダウンローダー接続テスト、RSSソース検証 + - オプションのステップはスキップして後で設定で構成可能 + - センチネルファイルメカニズム(`config/.setup_complete`)で再トリガーを防止 + - 認証不要のセットアップAPI(初回実行時のみ利用可能、完了後は403を返す) +- Bangumi.tv放送スケジュール連携付きカレンダービューを追加 +- ダウンローダーAPIと管理インターフェースを追加 +- 完全な非同期移行 + - データベースレイヤーの非同期サポート(aiosqlite)でPasskey操作のノンブロッキングI/O + - `UserDatabase`は後方互換性のためsync/asyncの両モードをサポート + - `Database`コンテキストマネージャーは`with`(sync)と`async with`(async)の両方をサポート + - RSSエンジン、ダウンローダー、チェッカー、パーサーを完全に非同期に変換 + - ネットワークリクエストを`requests`から`httpx`(AsyncClient)に移行 +- バックエンドを`uv`パッケージマネージャーに移行(pyproject.toml + uv.lock) +- サーバー起動がバックグラウンドタスクを使用してブロッキングを回避(#891、#929を修正) +- データベースマイグレーションがNULL値をモデルデフォルトで自動埋め +- データベースにオフセット検出用の`needs_review`と`needs_review_reason`フィールドを追加 + +### パフォーマンス + +- 共有HTTPクライアント接続プール、TCP/SSL接続を再利用 +- RSSリフレッシュが並行(`asyncio.gather`)、複数ソースで約10倍高速化 +- トレントファイルダウンロードが並行、複数トレントで約5倍高速化 +- リネームモジュールのファイルリスト取得が並行、約20倍高速化 +- 通知送信が並行、2秒のハードコードされた遅延を削除 +- TMDBとMikanパーサー結果のキャッシュを追加して重複API呼び出しを回避 +- `Torrent.url`、`Torrent.rss_id`、`Bangumi.title_raw`、`Bangumi.deleted`、`RSSItem.url`にデータベースインデックスを追加 +- RSSの一括有効化/無効化がアイテムごとのコミットではなく単一トランザクションを使用 +- トレント名解析とフィルターマッチング用にプリコンパイルされた正規表現パターン +- `SeasonCollector`がループ外で作成され、単一の認証を再利用 +- RSS解析の重複排除がO(n²)のリストルックアップからO(1)のセットルックアップに変更 +- `Episode`/`SeasonInfo`データクラスがメモリフットプリント削減のため`__slots__`を使用 + +### 変更 + +- WebAuthn依存関係をpy_webauthn 2.7.0にアップグレード +- `_get_webauthn_from_request`がブラウザのOriginヘッダーを優先、クロスポート開発環境での検証問題を修正 +- `auth_user`と`update_user_info`を非同期関数に変換 +- `TitleParser.tmdb_parser`を非同期関数に変換 +- `RSSEngine`メソッドを完全に非同期化(`pull_rss`、`refresh_rss`、`download_bangumi`、`add_rss`) +- `Checker.check_downloader`を非同期関数に変換 +- `ProgramStatus`がthreadingからasyncioに移行(Event、Lock) + +### バグ修正 + +- 最大リトライ制限付きダウンローダー接続チェックを修正 +- トレント追加時の一時的なネットワークエラーをリトライロジックで修正 +- 検索と購読フローの複数の問題を修正 +- トレント取得の信頼性とエラー処理を改善 +- `aaguid`型エラーを修正(py_webauthn 2.7.0では`str`、`bytes`ではない) +- 欠落していた`credential_backup_eligible`フィールドを修正(`credential_device_type`に置換) +- `verify_authentication_response`が無効な`credential_id`パラメータを受け取りTypeErrorを引き起こす問題を修正 +- プログラム起動がサーバーをブロックする問題を修正(#891、#929、#886、#917、#946を修正) +- 検索インターフェースのエクスポートがコンポーネントの期待と一致しない問題を修正 +- ポスターエンドポイントのパスチェックがすべてのリクエストを誤ってインターセプトする問題を修正(#933、#934を修正) +- OpenAIパーサーのセキュリティ問題を修正 +- 非同期セッションを使用するデータベーステストと同期コードの不一致を修正 +- 3.1.xから3.2へのアップグレード時の設定フィールドの競合による設定喪失を修正(#956を修正) + - `program.sleep_time` / `program.times`が`rss_time` / `rename_time`に自動移行 + - 非推奨の`rss_parser`フィールド(`type`、`custom_url`、`token`、`enable_tmdb`)を削除 + - `ENV_TO_ATTR`環境変数マッピングが存在しないモデルフィールドを指す問題を修正 + - `DEFAULT_SETTINGS`と現在の設定モデルの不整合を修正 +- バージョンアップグレードマイグレーションロジックエラーを修正(すべてのアップグレードが3.0→3.1マイグレーションを呼び出していた) + - ソースバージョンに基づくバージョン対応マイグレーションディスパッチを追加 + - データベーススキーマ変更用の`from_31_to_32()`マイグレーション関数を追加 + +## フロントエンド + +### 機能 + +- 完全なUIデザインシステムの再設計 + - 統一されたデザイントークン(色、フォント、間隔、シャドウ、アニメーション) + - ライト/ダークテーマ切り替えサポート + - 包括的なアクセシビリティサポート(ARIA、キーボードナビゲーション、フォーカス管理) + - モバイルデバイス用レスポンシブレイアウト +- 初回実行セットアップウィザードページを追加 + - マルチステップウィザードコンポーネント(プログレスバー + ステップナビゲーション) + - ルートガードの自動検出とセットアップページへのリダイレクト + - ダウンローダー/RSS/通知接続テストフィードバック + - 中国語と英語のi18nサポート +- Passkey管理パネルを追加(設定ページ) + - WebAuthnブラウザサポート検出 + - 自動デバイス名識別 + - Passkeyリスト表示と削除 +- ログインページにPasskey指紋ログインボタンを追加(ユーザー名なしログインをサポート) +- カレンダービューページを追加 +- ダウンローダー管理ページを追加 +- 番組カードホバーオーバーレイを追加(タイトルとタグを表示) +- 外部URLとローカルパス処理を統一する`resolvePosterUrl`ユーティリティ関数を追加(#934を修正) +- モーダルとフィルターシステムで検索パネルを再設計 +- モダンなグラスモーフィズムスタイルでログインパネルを再設計 +- ログビューにログレベルフィルターを追加 +- LLM設定パネルを再設計(#938を修正) +- 設定、ダウンローダー、プレーヤー、ログページのスタイルを再設計 +- 検索プロバイダー設定パネルを追加 + - UIで検索ソースの表示、追加、編集、削除 + - デフォルトソース(mikan、nyaa、dmhy)は削除不可 + - URLテンプレート検証で`%s`プレースホルダーを確認 +- iOSスタイルの通知バッジシステムを追加 + - レビューが必要な購読に黄色バッジ + 紫の枠線 + - 組み合わせ表示サポート(例:警告 + 複数ルールに`! | 2`) + - 注意が必要なカードに黄色のグローアニメーション +- ワンクリック自動検出と却下機能付きの編集モーダル警告バナー +- ルール選択モーダルで警告のあるルールをハイライト +- カレンダーページの番組グループ化:複数ルールの同じアニメをマージ、クリックで特定のルールを選択 +- 番組リストページに折りたたみ可能な「アーカイブ済み」セクション +- 番組リストページにスケルトンローディングアニメーション +- ルールエディターのエピソードオフセットフィールドに「自動検出」ボタン +- RSS管理ページの接続ステータスラベル:正常時は緑の「接続済み」、エラー時は赤で詳細ツールチップ +- 新しいモバイルファーストレスポンシブデザイン + - 3層ブレークポイントシステム:モバイル(<640px)、タブレット(640-1023px)、デスクトップ(≥1024px) + - モバイル下部ナビゲーションバー(アイコンとテキストラベル付き) + - タブレットミニサイドバー(56pxアイコンナビゲーション) + - モバイルポップアップが自動的にボトムシートに切り替わる + - プルトゥリフレッシュサポート + - 水平スワイプコンテナサポート + - モバイルカードリストがデータテーブルを置き換え(RSSページ) + - CSSグリッドレスポンシブレイアウト(番組カードグリッド) + - モバイルでフォームラベルが垂直にスタック、入力がフル幅 + - タッチターゲット最小44px、アクセシビリティ標準を満たす + - セーフエリアサポート(ノッチデバイス) + - `100dvh`動的ビューポート高さ(モバイルブラウザアドレスバー問題を修正) + - フルスクリーンデバイス用`viewport-fit=cover` + +### 新しいコンポーネント + +- `ab-bottom-sheet` — タッチ駆動のボトムシートコンポーネント(ドラッグで閉じる、最大高さ制限) +- `ab-adaptive-modal` — アダプティブモーダル(モバイルでボトムシート / デスクトップで中央ダイアログ) +- `ab-pull-refresh` — プルトゥリフレッシュラッパーコンポーネント +- `ab-swipe-container` — 水平スワイプコンテナ(CSSスクロールスナップ) +- `ab-data-list` — モバイルフレンドリーなカードリスト(NDataTableを置き換え) +- `ab-mobile-nav` — 強化された下部ナビゲーションバー(アイコン + ラベル + アクティブインジケーター) +- `useSafeArea` — セーフエリアコンポーザブル + +### パフォーマンス + +- ダウンローダーストアが大規模配列でのディープリアクティブプロキシを回避するため`ref`の代わりに`shallowRef`を使用 +- テーブル列定義を`computed`に移動して各レンダリングでの再構築を回避 +- RSSテーブル列をデータから分離、データ変更時に列設定を再構築しない +- カレンダーページの重複した`getAll()`呼び出しを削除 +- `ab-select`の`watchEffect`を`watch`に変更、マウント時の無効なemitを排除 +- `useClipboard`をストアトップレベルに引き上げ、各`copy()`での新しいインスタンス作成を回避 +- `setInterval`を自動ライフサイクル管理のため`useIntervalFn`に置換 + +### 変更 + +- 検索ロジックをリファクタリング、rxjs依存関係を削除 +- 検索ストアエクスポートをコンポーネントの期待に一致するようリファクタリング +- フロントエンド依存関係をアップグレード +- ブレークポイントシステムを単一の1024pxから640px + 1024pxの2層に拡張 +- `useBreakpointQuery`に`isTablet`、`isMobileOrTablet`、`isTabletOrPC`を追加 +- `media-query.vue`に`#tablet`スロットを追加(`#mobile`にフォールバック) +- UnoCSSに`sm: 640px`ブレークポイントを追加 +- `ab-input`のモバイルフル幅 + タッチターゲット増加スタイリング +- レイアウトが`vh`単位の代わりに`dvh`単位を使用、safe-area-insetをサポート +- カレンダーページの不明な列幅を修正 +- ダウンローダーページのアクションバーボタンサイズを統一 + +## CI/インフラ + +- CIがPRオープン時にビルドテストを追加(devブランチからmainへのPRが自動的にビルドをトリガー) +- CIが`actions/upload-artifact`と`actions/download-artifact`をv4にアップグレード +- Dockerビルドから`linux/arm/v7`プラットフォームを削除(uvイメージがサポートしていない) +- CLAUDE.md開発ガイドを追加 diff --git a/docs/ja/config/downloader.md b/docs/ja/config/downloader.md new file mode 100644 index 00000000..72cb3b9d --- /dev/null +++ b/docs/ja/config/downloader.md @@ -0,0 +1,56 @@ +# ダウンローダー設定 + +## WebUI設定 + +![downloader](/image/config/downloader.png){width=500}{class=ab-shadow-card} + +
+ +- **ダウンローダータイプ**はダウンローダーの種類です。現在はqBittorrentのみサポートされています。 +- **ホスト**はダウンローダーのアドレスです。[下記参照](#ダウンローダーアドレス) +- **ダウンロードパス**はダウンローダーのマッピングされたダウンロードパスです。[下記参照](#ダウンロードパスの問題) +- **SSL**はダウンローダー接続のSSLを有効にします。 + +## よくある問題 + +### ダウンローダーアドレス + +::: warning 注意 +ダウンローダーアドレスに127.0.0.1またはlocalhostを使用しないでください。 +::: + +公式チュートリアルではABは**Bridge**モードのDockerで実行されるため、127.0.0.1またはlocalhostを使用するとダウンローダーではなくAB自体に解決されます。 +- qBittorrentもDockerで実行している場合は、Dockerの**ゲートウェイアドレス:172.17.0.1**の使用を推奨します。 +- qBittorrentがホストマシンで実行されている場合は、ホストマシンのIPアドレスを使用してください。 + +ABを**Host**モードで実行している場合は、Dockerゲートウェイアドレスの代わりに127.0.0.1を使用できます。 + +::: warning 注意 +Macvlanはコンテナネットワークを分離します。追加のブリッジ設定なしでは、コンテナは他のコンテナやホスト自体にアクセスできません。 +::: + +### ダウンロードパスの問題 + +ABで設定されたパスは、対応するアニメファイルパスを生成するためにのみ使用されます。AB自体はそのパスのファイルを直接管理しません。 + +**ダウンロードパスには何を入力すればよいですか?** + +このパラメータは**ダウンローダー**の設定と一致させるだけです: +- Docker:qBが`/downloads`を使用している場合は、`/downloads/Bangumi`に設定します。`Bangumi`は任意の名前に変更できます。 +- Linux/macOS:`/home/usr/downloads`または`/User/UserName/Downloads`の場合は、末尾に`/Bangumi`を追加するだけです。 +- Windows:`D:\Media\`を`D:\Media\Bangumi`に変更します + +## `config.json`設定オプション + +設定ファイルの対応するオプションは以下のとおりです: + +設定セクション:`downloader` + +| パラメータ | 説明 | タイプ | WebUIオプション | デフォルト | +|-----------|-------------------|---------|----------------------|---------------------| +| type | ダウンローダータイプ | 文字列 | ダウンローダータイプ | qbittorrent | +| host | ダウンローダーアドレス | 文字列 | ダウンローダーアドレス | 172.17.0.1:8080 | +| username | ダウンローダーユーザー名 | 文字列 | ダウンローダーユーザー名 | admin | +| password | ダウンローダーパスワード | 文字列 | ダウンローダーパスワード | adminadmin | +| path | ダウンロードパス | 文字列 | ダウンロードパス | /downloads/Bangumi | +| ssl | SSL有効 | ブール値 | SSL有効 | false | diff --git a/docs/ja/config/experimental.md b/docs/ja/config/experimental.md new file mode 100644 index 00000000..3a487eb9 --- /dev/null +++ b/docs/ja/config/experimental.md @@ -0,0 +1,57 @@ +# 実験的機能 + +::: warning +実験的機能はまだテスト中です。有効にすると予期しない問題が発生する可能性があり、将来のバージョンで削除される可能性があります。注意して使用してください! +::: + +## OpenAI ChatGPT + +より良い構造化タイトル解析のためにOpenAI ChatGPTを使用します。例: + +``` +input: "【喵萌奶茶屋】★04月新番★[夏日重现/Summer Time Rendering][11][1080p][繁日双语][招募翻译]" +output: '{"group": "喵萌奶茶屋", "title_en": "Summer Time Rendering", "resolution": "1080p", "episode": 11, "season": 1, "title_zh": "夏日重现", "sub": "", "title_jp": "", "season_raw": "", "source": ""}' +``` + +![experimental OpenAI](/image/config/experimental-openai.png){width=500}{class=ab-shadow-card} + +- **OpenAI有効**はOpenAIを有効にし、タイトル解析にChatGPTを使用します。 +- **OpenAI APIタイプ**はデフォルトでOpenAIです。 +- **OpenAI APIキー**はOpenAIアカウントのAPIキーです。 +- **OpenAI APIベースURL**はOpenAIエンドポイントです。デフォルトでは公式OpenAI URLですが、互換性のあるサードパーティエンドポイントに変更できます。 +- **OpenAIモデル**はChatGPTモデルパラメータです。現在`gpt-3.5-turbo`を提供しており、適切なプロンプトで手頃な価格で優れた結果を生成します。 + +## Microsoft Azure OpenAI + + +![experimental Microsoft Azure OpenAI](/image/config/experimental-azure-openai.png){width=500}{class=ab-shadow-card} + +標準のOpenAIに加えて、[バージョン3.1.8](https://github.com/EstrellaXD/Auto_Bangumi/releases/tag/3.1.8)でMicrosoft Azure OpenAIサポートが追加されました。使用方法は標準のOpenAIと同様で、一部の共有パラメータがありますが、以下の点に注意してください: + +- **OpenAI有効**はOpenAIを有効にし、タイトル解析にChatGPTを使用します。 +- **OpenAI APIタイプ** — Azure固有のオプションを表示するには`azure`を選択します。 +- **OpenAI APIキー**はMicrosoft Azure OpenAI APIキーです。 +- **OpenAI APIベースURL**はMicrosoft Azure OpenAIエントリーポイントに対応します。**手動で入力する必要があります**。 +- **Azure OpenAIバージョン**はAPIバージョンです。デフォルトは`2023-05-15`です。[サポートされているバージョン](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference#completions)を参照してください。 +- **Azure OpenAIデプロイメントID**はデプロイメントIDで、通常はモデル名と同じです。Azure OpenAIは`_-`以外の記号をサポートしていないため、`gpt-3.5-turbo`はAzureでは`gpt-35-turbo`になることに注意してください。**手動で入力する必要があります**。 + +参考ドキュメント: + +- [クイックスタート:Azure OpenAI ServiceでGPT-35-TurboとGPT-4の使用を開始する](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/chatgpt-quickstart?tabs=command-line&pivots=programming-language-python) +- [GPT-35-TurboとGPT-4モデルの操作方法を学ぶ](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/how-to/chatgpt?pivots=programming-language-chat-completions) + +## `config.json`設定オプション + +設定ファイルの対応するオプションは以下のとおりです: + +設定セクション:`experimental_openai` + +| パラメータ | 説明 | タイプ | WebUIオプション | デフォルト | +|---------------|---------------------------|---------|----------------------------|------------------------------| +| enable | OpenAIパーサー有効 | ブール値 | OpenAI有効 | false | +| api_type | OpenAI APIタイプ | 文字列 | APIタイプ (`openai`/`azure`) | openai | +| api_key | OpenAI APIキー | 文字列 | OpenAI APIキー | | +| api_base | APIベースURL(Azureエントリーポイント) | 文字列 | OpenAI APIベースURL | https://api.openai.com/v1 | +| model | OpenAIモデル | 文字列 | OpenAIモデル | gpt-3.5-turbo | +| api_version | Azure OpenAI APIバージョン | 文字列 | Azure APIバージョン | 2023-05-15 | +| deployment_id | AzureデプロイメントID | 文字列 | AzureデプロイメントID | | diff --git a/docs/ja/config/manager.md b/docs/ja/config/manager.md new file mode 100644 index 00000000..d7e1ae8c --- /dev/null +++ b/docs/ja/config/manager.md @@ -0,0 +1,36 @@ +# 番組マネージャー設定 + +## WebUI設定 + +![proxy](/image/config/manager.png){width=500}{class=ab-shadow-card} + +
+ +- **有効**は番組マネージャーを有効にします。無効にすると、以下の設定は効果がありません。 +- **リネーム方法**はリネーム方法です。現在サポートされているもの: + - `pn` — `Torrentタイトル S0XE0X.mp4` 形式 + - `advance` — `公式タイトル S0XE0X.mp4` 形式 + - `none` — リネームなし +- **エピソード補完**は現在のシーズンのエピソード補完を有効にします。有効にすると、不足しているエピソードがダウンロードされます。 +- **グループタグ追加**はダウンロードルールに字幕グループタグを追加します。 +- **不良トレント削除**はエラーのあるトレントを削除します。 +- [ファイルパスについて][1] +- [リネームについて][2] + +## `config.json`設定オプション + +設定ファイルの対応するオプションは以下のとおりです: + +設定セクション:`bangumi_manager` + +| パラメータ | 説明 | タイプ | WebUIオプション | デフォルト | +|--------------------|------------------------|---------|-------------------|-----------| +| enable | 番組マネージャー有効 | ブール値 | マネージャー有効 | true | +| eps_complete | エピソード補完有効 | ブール値 | エピソード補完 | false | +| rename_method | リネーム方法 | 文字列 | リネーム方法 | pn | +| group_tag | 字幕グループタグ追加 | ブール値 | グループタグ | false | +| remove_bad_torrent | 不良トレント削除 | ブール値 | 不良トレント削除 | false | + + +[1]: https://www.autobangumi.org/faq/#download-path +[2]: https://www.autobangumi.org/faq/#file-renaming diff --git a/docs/ja/config/notifier.md b/docs/ja/config/notifier.md new file mode 100644 index 00000000..c5cd19db --- /dev/null +++ b/docs/ja/config/notifier.md @@ -0,0 +1,34 @@ +# 通知設定 + +## WebUI設定 + +![notification](/image/config/notifier.png){width=500}{class=ab-shadow-card} + +
+ +- **有効**は通知を有効にします。無効にすると、以下の設定は効果がありません。 +- **タイプ**は通知タイプです。現在サポートされているもの: + - Telegram + - Wecom + - Bark + - ServerChan +- **Chat ID**は`telegram`通知を使用する場合にのみ入力が必要です。[Telegram Bot Chat IDの取得方法][1] +- **Wecom**:Chat IDフィールドにカスタムプッシュURLを入力し、サーバー側で[リッチテキストメッセージ][2]タイプを追加します。[Wecom設定ガイド][3] + +## `config.json`設定オプション + +設定ファイルの対応するオプションは以下のとおりです: + +設定セクション:`notification` + +| パラメータ | 説明 | タイプ | WebUIオプション | デフォルト | +|-----------|-----------------|---------|------------------|----------| +| enable | 通知有効 | ブール値 | 通知 | false | +| type | 通知タイプ | 文字列 | 通知タイプ | telegram | +| token | 通知トークン | 文字列 | 通知トークン | | +| chat_id | 通知Chat ID | 文字列 | 通知Chat ID | | + + +[1]: https://core.telegram.org/bots#6-botfather +[2]: https://github.com/umbors/wecomchan-alifun +[3]: https://github.com/easychen/wecomchan diff --git a/docs/ja/config/parser.md b/docs/ja/config/parser.md new file mode 100644 index 00000000..aaece3ab --- /dev/null +++ b/docs/ja/config/parser.md @@ -0,0 +1,34 @@ +# パーサー設定 + +ABのパーサーは集約されたRSSリンクを解析するために使用されます。RSSフィードに新しいエントリが表示されると、ABはタイトルを解析して自動ダウンロードルールを生成します。 + +::: tip +v3.1以降、パーサー設定は個別のRSS設定に移動しました。**パーサータイプ**を設定するには、[RSSのパーサー設定][add_rss]を参照してください。 +::: + +## WebUIでのパーサー設定 + +![parser](/image/config/parser.png){width=500}{class=ab-shadow-card} + +
+ +- **有効**:RSSパーサーを有効にするかどうか。 +- **言語**はRSSパーサーの言語です。現在`zh`、`jp`、`en`をサポートしています。 +- **除外**はグローバルRSSパーサーフィルターです。文字列または正規表現を入力でき、ABはRSS解析時に一致するエントリをフィルタリングします。 + +## `config.json`設定オプション + +設定ファイルの対応するオプションは以下のとおりです: + +設定セクション:`rss_parser` + +| パラメータ | 説明 | タイプ | WebUIオプション | デフォルト | +|-----------|-------------------|---------|---------------------|----------------| +| enable | RSSパーサー有効 | ブール値 | RSSパーサー有効 | true | +| filter | RSSパーサーフィルター | 配列 | フィルター | [720,\d+-\d+] | +| language | RSSパーサー言語 | 文字列 | RSSパーサー言語 | zh | + + +[rss_token]: rss +[add_rss]: /ja/feature/rss#パーサー設定 +[reproxy]: /ja/config/proxy#リバースプロキシ diff --git a/docs/ja/config/program.md b/docs/ja/config/program.md new file mode 100644 index 00000000..f6174a1a --- /dev/null +++ b/docs/ja/config/program.md @@ -0,0 +1,25 @@ +# プログラム設定 + +## WebUI設定 + +![program](/image/config/program.png){width=500}{class=ab-shadow-card} + +
+ +- インターバル時間パラメータは秒単位です。分単位で設定する場合は秒に変換してください。 +- RSSはRSSチェック間隔で、自動ダウンロードルールの生成頻度に影響します。 +- リネームはリネームチェック間隔です。リネームのチェック頻度を変更する必要がある場合に修正してください。 +- WebUIポートはポート番号です。Dockerを使用している場合、変更後にDockerでポートを再マッピングする必要があることに注意してください。 + + +## `config.json`設定オプション + +設定ファイルの対応するオプションは以下のとおりです: + +設定セクション:`program` + +| パラメータ | 説明 | タイプ | WebUIオプション | デフォルト | +|-------------|-------------------|-----------------|---------------------|-----------| +| rss_time | RSSチェック間隔 | 整数(秒) | RSSチェック間隔 | 7200 | +| rename_time | リネームチェック間隔 | 整数(秒) | リネームチェック間隔 | 60 | +| webui_port | WebUIポート | 整数 | WebUIポート | 7892 | diff --git a/docs/ja/config/proxy.md b/docs/ja/config/proxy.md new file mode 100644 index 00000000..e553f7a5 --- /dev/null +++ b/docs/ja/config/proxy.md @@ -0,0 +1,85 @@ +# プロキシとリバースプロキシ + +## プロキシ + +![proxy](/image/config/proxy.png){width=500}{class=ab-shadow-card} + +
+ +ABはネットワーク問題を解決するためにHTTPおよびSOCKS5プロキシをサポートしています。 + +- **有効**:プロキシを有効にするかどうか。 +- **タイプ**はプロキシタイプです。 +- **ホスト**はプロキシアドレスです。 +- **ポート**はプロキシポートです。 + +::: tip +**SOCKS5**モードでは、ユーザー名とパスワードが必要です。 +::: + +## `config.json`設定オプション + +設定ファイルの対応するオプションは以下のとおりです: + +設定セクション:`proxy` + +| パラメータ | 説明 | タイプ | WebUIオプション | デフォルト | +|-----------|-----------------|---------|-----------------|-----------| +| enable | プロキシ有効 | ブール値 | プロキシ | false | +| type | プロキシタイプ | 文字列 | プロキシタイプ | http | +| host | プロキシアドレス | 文字列 | プロキシアドレス | | +| port | プロキシポート | 整数 | プロキシポート | | +| username | プロキシユーザー名 | 文字列 | プロキシユーザー名 | | +| password | プロキシパスワード | 文字列 | プロキシパスワード | | + +## リバースプロキシ + +- Mikan Projectの代替ドメイン`mikanime.tv`を使用して、RSS購読URLの`mikanani.me`を置き換えます。 +- Cloudflare Workerをリバースプロキシとして使用し、RSSフィード内のすべての`mikanani.me`ドメインを置き換えます。 + +## Cloudflare Workers + +他のサービスのブロックをバイパスするために使用されるアプローチに基づいて、Cloudflare Workersを使用してリバースプロキシを設定できます。ドメインの登録とCloudflareへのバインド方法は、このガイドの範囲外です。Workersに以下のコードを追加して、独自のドメインを使用してMikan Projectにアクセスし、RSSリンクからトレントをダウンロードします: + +```js +const TELEGRAPH_URL = 'https://mikanani.me'; +const MY_DOMAIN = 'https://yourdomain.com' + +addEventListener('fetch', event => { + event.respondWith(handleRequest(event.request)) +}) + +async function handleRequest(request) { + const url = new URL(request.url); + url.host = TELEGRAPH_URL.replace(/^https?:\/\//, ''); + + const modifiedRequest = new Request(url.toString(), { + headers: request.headers, + method: request.method, + body: request.body, + redirect: 'manual' + }); + + const response = await fetch(modifiedRequest); + const contentType = response.headers.get('Content-Type') || ''; + + // コンテンツタイプがRSSの場合のみ置換を実行 + if (contentType.includes('application/xml')) { + const text = await response.text(); + const replacedText = text.replace(/https?:\/\/mikanani\.me/g, MY_DOMAIN); + const modifiedResponse = new Response(replacedText, response); + + // CORSヘッダーを追加 + modifiedResponse.headers.set('Access-Control-Allow-Origin', '*'); + + return modifiedResponse; + } else { + const modifiedResponse = new Response(response.body, response); + + // CORSヘッダーを追加 + modifiedResponse.headers.set('Access-Control-Allow-Origin', '*'); + + return modifiedResponse; + } +} +``` diff --git a/docs/ja/config/rss.md b/docs/ja/config/rss.md new file mode 100644 index 00000000..1761a451 --- /dev/null +++ b/docs/ja/config/rss.md @@ -0,0 +1,38 @@ +# RSS購読設定 + +AutoBangumiは集約されたアニメRSSフィードを自動的に解析し、字幕グループとアニメ名に基づいてダウンロードルールを生成して、完全自動のアニメ追跡を可能にします。 +以下では、[Mikan Project][mikan-site]を例として、RSS購読URLを取得する方法を説明します。 + +Mikan Projectのメインサイトは一部の地域でブロックされている場合があります。プロキシなしでアクセスできない場合は、以下の代替ドメインを使用してください: + +[Mikan Project (代替)][mikan-cn-site] + +## 購読URLの取得 + +このプロジェクトはMikan Projectが提供するRSS URLの解析に基づいています。自動アニメ追跡を有効にするには、Mikan ProjectのRSS URLを登録して取得する必要があります: + +![image](/image/rss/rss-token.png){data-zoomable} + +RSS URLは以下のようになります: + +```txt +https://mikanani.me/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# または +https://mikanime.tv/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` + +## Mikan Project購読のヒント + +AutoBangumiは受信したすべてのRSSエントリを解析するため、購読時に以下の点に注意してください: + +![image](/image/rss/advanced-subscription.png){data-zoomable} + +- プロファイル設定で詳細設定を有効にしてください。 +- アニメごとに1つの字幕グループのみを購読してください。Mikan Projectでアニメのポスターをクリックしてサブメニューを開き、単一の字幕グループを選択します。 +- 字幕グループが簡体字中国語と繁体字中国語の両方の字幕を提供している場合、Mikan Projectは通常選択方法を提供します。1つの字幕タイプを選択してください。 +- 字幕タイプの選択がない場合は、AutoBangumiで`filter`を設定してフィルタリングするか、ルール生成後にqBittorrentで手動でフィルタリングできます。 +- OVAと映画の購読は現在解析がサポートされていません。 + + +[mikan-site]: https://mikanani.me/ +[mikan-cn-site]: https://mikanime.tv/ diff --git a/docs/ja/deploy/docker-cli.md b/docs/ja/deploy/docker-cli.md new file mode 100644 index 00000000..6078d4d8 --- /dev/null +++ b/docs/ja/deploy/docker-cli.md @@ -0,0 +1,56 @@ +# Docker CLIでデプロイ + +## 新バージョンに関する注意 + +AutoBangumi 2.6以降、WebUIで直接すべてを設定できます。まずコンテナを起動してから、WebUIで設定できます。以前のバージョンの環境変数設定は自動的に移行されます。環境変数は引き続き機能しますが、初回起動時にのみ有効です。 + +## データと設定ディレクトリの作成 + +更新後もABのデータと設定が保持されるように、Dockerボリュームまたはバインドマウントの使用を推奨します。 + +```shell +# バインドマウントを使用 +mkdir -p ${HOME}/AutoBangumi/{config,data} +cd ${HOME}/AutoBangumi +``` + +バインドマウントまたはDockerボリュームのいずれかを選択してください: +```shell +# Dockerボリュームを使用 +docker volume create AutoBangumi_config +docker volume create AutoBangumi_data +``` + +## Docker CLIでAutoBangumiをデプロイ + +以下のコマンドをコピーして実行してください。 + +作業ディレクトリがAutoBangumiであることを確認してください。 + +```shell +docker run -d \ + --name=AutoBangumi \ + -v ${HOME}/AutoBangumi/config:/app/config \ + -v ${HOME}/AutoBangumi/data:/app/data \ + -p 7892:7892 \ + -e TZ=Asia/Shanghai \ + -e PUID=$(id -u) \ + -e PGID=$(id -g) \ + -e UMASK=022 \ + --network=bridge \ + --dns=8.8.8.8 \ + --restart unless-stopped \ + ghcr.io/estrellaxd/auto_bangumi:latest +``` + +Dockerボリュームを使用する場合は、バインドパスを適宜置き換えてください: +```shell + -v AutoBangumi_config:/app/config \ + -v AutoBangumi_data:/app/data \ +``` + +AB WebUIは自動的に起動しますが、メインプログラムは一時停止状態です。`http://abhost:7892`にアクセスして設定してください。 + +ABは自動的に環境変数を`config.json`に書き込み、実行を開始します。 + +高度なデプロイには_[Portainer](https://www.portainer.io)_または同様のDocker管理UIの使用を推奨します。 diff --git a/docs/ja/deploy/docker-compose.md b/docs/ja/deploy/docker-compose.md new file mode 100644 index 00000000..7637ba99 --- /dev/null +++ b/docs/ja/deploy/docker-compose.md @@ -0,0 +1,86 @@ +# Docker Composeでデプロイ + +`docker-compose.yml`ファイルを使用した**AutoBangumi**のワンクリックデプロイ方法です。 + +## Docker Composeのインストール + +Docker Composeは通常Dockerにバンドルされています。以下で確認してください: + +```bash +docker compose -v +``` + +インストールされていない場合は、以下でインストールしてください: + +```bash +$ sudo apt-get update +$ sudo apt-get install docker-compose-plugin +``` + +## **AutoBangumi**のデプロイ + +### AutoBangumiとデータディレクトリの作成 + +```bash +mkdir -p ${HOME}/AutoBangumi/{config,data} +cd ${HOME}/AutoBangumi +``` + +### オプション1:カスタムDocker Compose設定 + +```yaml +version: "3.8" + +services: + AutoBangumi: + image: "ghcr.io/estrellaxd/auto_bangumi:latest" + container_name: AutoBangumi + volumes: + - ./config:/app/config + - ./data:/app/data + ports: + - "7892:7892" + restart: unless-stopped + dns: + - 8.8.8.8 + network_mode: bridge + environment: + - TZ=Asia/Shanghai + - PGID=$(id -g) + - PUID=$(id -u) + - UMASK=022 +``` + +上記の内容を`docker-compose.yml`ファイルにコピーしてください。 + +### オプション2:Docker Compose設定ファイルのダウンロード + +`docker-compose.yml`ファイルを手動で作成したくない場合、プロジェクトでは事前に作成された設定を提供しています: + +- **AutoBangumi**のみをインストール: + ```bash + wget https://raw.githubusercontent.com/EstrellaXD/Auto_Bangumi/main/docs/resource/docker-compose/AutoBangumi/docker-compose.yml + ``` +- **qBittorrent**と**AutoBangumi**をインストール: + ```bash + wget https://raw.githubusercontent.com/EstrellaXD/Auto_Bangumi/main/docs/resource/docker-compose/qBittorrent+AutoBangumi/docker-compose.yml + ``` + +インストール方法を選択し、コマンドを実行して`docker-compose.yml`ファイルをダウンロードしてください。必要に応じてテキストエディタでパラメータをカスタマイズできます。 + +### 環境変数の定義 + +ダウンロードしたAB+QB Docker Composeファイルを使用している場合は、以下の環境変数を定義する必要があります: + +```shell +export \ +QB_PORT= +``` + +- `QB_PORT`:既存のqBittorrentポートまたは希望するカスタムポートを入力します。例:`8080` + +### Docker Composeの起動 + +```bash +docker compose up -d +``` diff --git a/docs/ja/deploy/dsm.md b/docs/ja/deploy/dsm.md new file mode 100644 index 00000000..a0041127 --- /dev/null +++ b/docs/ja/deploy/dsm.md @@ -0,0 +1,121 @@ +# Synology NAS(DSM 7.2)デプロイ(QNAPも同様) + +DSM 7.2はDocker Composeをサポートしているため、ワンクリックデプロイにDocker Composeの使用を推奨します。 + +## 設定とデータディレクトリの作成 + +`/volume1/docker/`の下に`AutoBangumi`フォルダを作成し、その中に`config`と`data`サブフォルダを作成します。 + +## Container Manager(Docker)パッケージのインストール + +パッケージセンターを開き、Container Manager(Docker)パッケージをインストールします。 + +![install-docker](/image/dsm/install-docker.png){data-zoomable} + +## Docker Compose経由でABをインストール + +**プロジェクト**をクリックし、**作成**をクリックして、**Docker Compose**を選択します。 + +![new-compose](/image/dsm/new-compose.png){data-zoomable} + +以下の内容をコピーして**Docker Compose**に貼り付けます: +```yaml +version: "3.4" + +services: + ab: + image: "ghcr.io/estrellaxd/auto_bangumi:latest" + container_name: "auto_bangumi" + restart: unless-stopped + ports: + - "7892:7892" + volumes: + - "./config:/app/config" + - "./data:/app/data" + network_mode: bridge + environment: + - TZ=Asia/Shanghai + - AB_METHOD=Advance + - PGID=1000 + - PUID=1000 + - UMASK=022 +``` + +**次へ**をクリックし、**完了**をクリックします。 + +![create](/image/dsm/create.png){data-zoomable} + +作成後、`http://:7892`にアクセスしてABに入り、設定を行います。 + +## Docker Compose経由でABとqBittorrentをインストール + +プロキシとIPv6の両方がある場合、Synology NASのDockerでIPv6を設定するのは複雑です。複雑さを軽減するために、ABとqBittorrentの両方をホストネットワークにインストールすることを推奨します。 + +以下の設定は、DockerにデプロイされたローカルIPの指定ポートでアクセス可能なClashプロキシがあることを前提としています。 + +前のセクションに従って、以下の内容を調整して**Docker Compose**に貼り付けます: + +```yaml + qbittorrent: + container_name: qbittorrent + image: linuxserver/qbittorrent + hostname: qbittorrent + environment: + - PGID=1000 # 必要に応じて変更 + - PUID=1000 # 必要に応じて変更 + - WEBUI_PORT=8989 + - TZ=Asia/Shanghai + volumes: + - ./qb_config:/config + - your_anime_path:/downloads # アニメ保存ディレクトリに変更してください。ABでダウンロードパスを/downloadsに設定 + networks: + - host + restart: unless-stopped + + auto_bangumi: + container_name: AutoBangumi + environment: + - TZ=Asia/Shanghai + - PGID=1000 # 必要に応じて変更 + - PUID=1000 # 必要に応じて変更 + - UMASK=022 + - AB_DOWNLOADER_HOST=127.0.0.1:8989 # 必要に応じてポートを変更 + volumes: + - /volume1/docker/ab/config:/app/config + - /volume1/docker/ab/data:/app/data + network_mode: host + environment: + - AB_METHOD=Advance + dns: + - 8.8.8.8 + restart: unless-stopped + image: "ghcr.io/estrellaxd/auto_bangumi:latest" + depends_on: + - qbittorrent + +``` + +## 追加の注意事項 + +PGIDとPUIDの値はシステムに応じて決定する必要があります。新しいSynology NASデバイスでは、通常`PUID=1026, PGID=100`です。qBittorrentのポートを変更する場合は、すべての場所で更新してください。 + +プロキシ設定については、[プロキシ設定](/ja/config/proxy)を参照してください。 + +低性能マシンでは、デフォルト設定がCPUを大量に使用し、ABがqBに接続できなくなり、qB WebUIにアクセスできなくなる可能性があります。 + +220+などのデバイスでは、CPU使用率を下げるための推奨qBittorrent設定: + +- 設定 -> 接続 -> 接続制限 + - グローバル最大接続数:300 + - Torrentあたりの最大接続数:60 + - グローバルアップロードスロット制限:15 + - Torrentあたりのアップロードスロット:4 +- BitTorrent + - 最大アクティブチェックTorrent数:1 + - Torrentキューイング + - 最大アクティブダウンロード数:3 + - 最大アクティブアップロード数:5 + - 最大アクティブTorrent数:10 +- RSS + - RSSリーダー + - フィードあたりの最大記事数:50 diff --git a/docs/ja/deploy/local.md b/docs/ja/deploy/local.md new file mode 100644 index 00000000..05f9d30e --- /dev/null +++ b/docs/ja/deploy/local.md @@ -0,0 +1,59 @@ +# ローカルデプロイ + +::: warning +ローカルデプロイは予期しない問題を引き起こす可能性があります。代わりにDockerの使用を強く推奨します。 + +このドキュメントには更新の遅れがある可能性があります。質問がある場合は、[Issues](https://github.com/EstrellaXD/Auto_Bangumi/issues)で提起してください。 +::: + +## 最新リリースのダウンロード + +```bash +VERSION=$(curl -s "https://api.github.com/repos/EstrellaXD/Auto_Bangumi/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') +curl -L -O "https://github.com/EstrellaXD/Auto_Bangumi/releases/download/$VERSION/app-v$VERSION.zip" +``` + +## アーカイブの展開 + +Unix/WSLシステムでは、以下のコマンドを使用します。Windowsでは手動で展開してください。 + +```bash +unzip app-v$VERSION.zip -d AutoBangumi +cd AutoBangumi +``` + + +## 仮想環境の作成と依存関係のインストール + +ローカルにPython 3.10以上とpipがインストールされていることを確認してください。 + +```bash +cd src +python3 -m venv env +python3 pip install -r requirements.txt +``` + +## 設定とデータディレクトリの作成 + +```bash +mkdir config +mkdir data +``` + +## AutoBangumiの実行 + +```bash +python3 main.py +``` + + +## Windows起動時の自動起動 + +`nssm`を使用して起動時の自動起動を設定できます。`nssm`を使用した例: + +```powershell +nssm install AutoBangumi (Get-Command python).Source +nssm set AutoBangumi AppParameters (Get-Item .\main.py).FullName +nssm set AutoBangumi AppDirectory (Get-Item ..).FullName +nssm set AutoBangumi Start SERVICE_DELAYED_AUTO_START +``` diff --git a/docs/ja/deploy/quick-start.md b/docs/ja/deploy/quick-start.md new file mode 100644 index 00000000..12662074 --- /dev/null +++ b/docs/ja/deploy/quick-start.md @@ -0,0 +1,131 @@ +# クイックスタート + +AutoBangumiはDockerでのデプロイを推奨しています。 +デプロイ前に、[Docker Engine][docker-engine]または[Docker Desktop][docker-desktop]がインストールされていることを確認してください。 + +## データと設定ディレクトリの作成 + +ABのデータと設定を更新時に永続化するために、バインドマウントまたはDockerボリュームの使用を推奨します。 + +```shell +# バインドマウントを使用 +mkdir -p ${HOME}/AutoBangumi/{config,data} +cd ${HOME}/AutoBangumi +``` + +バインドマウントまたはDockerボリュームのいずれかを選択: + +```shell +# Dockerボリュームを使用 +docker volume create AutoBangumi_config +docker volume create AutoBangumi_data +``` + +## DockerでAutoBangumiをデプロイ + +これらのコマンドを実行する際は、AutoBangumiディレクトリにいることを確認してください。 + +### オプション1:Docker CLIでデプロイ + +以下のコマンドをコピーして実行: + +```shell +docker run -d \ + --name=AutoBangumi \ + -v ${HOME}/AutoBangumi/config:/app/config \ + -v ${HOME}/AutoBangumi/data:/app/data \ + -p 7892:7892 \ + -e TZ=Asia/Tokyo \ + -e PUID=$(id -u) \ + -e PGID=$(id -g) \ + -e UMASK=022 \ + --network=bridge \ + --dns=8.8.8.8 \ + --restart unless-stopped \ + ghcr.io/estrellaxd/auto_bangumi:latest +``` + +### オプション2:Docker Composeでデプロイ + +以下の内容を`docker-compose.yml`ファイルにコピー: + +```yaml +version: "3.8" + +services: + AutoBangumi: + image: "ghcr.io/estrellaxd/auto_bangumi:latest" + container_name: AutoBangumi + volumes: + - ./config:/app/config + - ./data:/app/data + ports: + - "7892:7892" + network_mode: bridge + restart: unless-stopped + dns: + - 8.8.8.8 + environment: + - TZ=Asia/Tokyo + - PGID=$(id -g) + - PUID=$(id -u) + - UMASK=022 +``` + +以下のコマンドでコンテナを起動: + +```shell +docker compose up -d +``` + +## qBittorrentのインストール + +qBittorrentをまだインストールしていない場合は、最初にインストールしてください: + +- [DockerでqBittorrentをインストール][qbittorrent-docker] +- [Windows/macOSでqBittorrentをインストール][qbittorrent-desktop] +- [Linuxでqbittorrent-noxをインストール][qbittorrent-nox] + +## 集約RSSリンクの取得(Mikan Projectを例として) + +[Mikan Project][mikan-project]にアクセスし、アカウントを登録してログインし、右下の**RSS**ボタンをクリックしてリンクをコピーします。 + +![mikan-rss](/image/rss/rss-token.png){data-zoomable} + +RSS URLは以下のようになります: + +```txt +https://mikanani.me/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# または +https://mikanime.tv/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` + +詳細な手順については、[Mikan RSS設定][config-rss]を参照してください。 + + +## AutoBangumiの設定 + +ABをインストール後、WebUIは自動的に起動しますが、メインプログラムは一時停止状態です。`http://abhost:7892`にアクセスして設定できます。 + +1. Webページを開きます。デフォルトのユーザー名は`admin`、デフォルトのパスワードは`adminadmin`です。初回ログイン後すぐに変更してください。 +2. ダウンローダーのアドレス、ポート、ユーザー名、パスワードを入力します。 + +![ab-webui](/image/config/downloader.png){width=500}{class=ab-shadow-card} + +3. **適用**をクリックして設定を保存します。ABが再起動し、右上のドットが緑色になると、ABが正常に動作していることを示します。 + +4. 右上の**+**ボタンをクリックし、**集約RSS**にチェックを入れ、パーサータイプを選択し、Mikan RSS URLを入力します。 + +![ab-rss](/image/config/add-rss.png){width=500}{class=ab-shadow-card} + +ABが集約RSSを解析するのを待ちます。解析が完了すると、自動的にアニメを追加し、ダウンロードを管理します。 + + + +[docker-engine]: https://docs.docker.com/engine/install/ +[docker-desktop]: https://www.docker.com/products/docker-desktop +[config-rss]: ../config/rss +[mikan-project]: https://mikanani.me/ +[qbittorrent-docker]: https://hub.docker.com/r/superng6/qbittorrent +[qbittorrent-desktop]: https://www.qbittorrent.org/download +[qbittorrent-nox]: https://www.qbittorrent.org/download-nox diff --git a/docs/ja/dev/database.md b/docs/ja/dev/database.md new file mode 100644 index 00000000..35d94696 --- /dev/null +++ b/docs/ja/dev/database.md @@ -0,0 +1,394 @@ +# データベース開発者ガイド + +このガイドでは、AutoBangumiのデータベースアーキテクチャ、モデル、および操作について説明します。 + +## 概要 + +AutoBangumiはデータベースとして**SQLite**を使用し、ORMには**SQLModel**(Pydantic + SQLAlchemyハイブリッド)を使用しています。データベースファイルは`data/data.db`にあります。 + +### アーキテクチャ + +``` +module/database/ +├── engine.py # SQLAlchemyエンジン設定 +├── combine.py # Databaseクラス、マイグレーション、セッション管理 +├── bangumi.py # Bangumi(アニメ購読)操作 +├── rss.py # RSSフィード操作 +├── torrent.py # トレント追跡操作 +└── user.py # ユーザー認証操作 +``` + +## コアコンポーネント + +### Databaseクラス + +`combine.py`の`Database`クラスがメインエントリーポイントです。SQLModelの`Session`を継承し、すべてのサブデータベースへのアクセスを提供します: + +```python +from module.database import Database + +with Database() as db: + # サブデータベースへのアクセス + bangumis = db.bangumi.search_all() + rss_items = db.rss.search_active() + torrents = db.torrent.search_all() +``` + +### サブデータベースクラス + +| クラス | モデル | 目的 | +|-------|-------|------| +| `BangumiDatabase` | `Bangumi` | アニメ購読ルール | +| `RSSDatabase` | `RSSItem` | RSSフィードソース | +| `TorrentDatabase` | `Torrent` | ダウンロードしたトレントの追跡 | +| `UserDatabase` | `User` | 認証 | + +## モデル + +### Bangumiモデル + +アニメ購読のコアモデル: + +```python +class Bangumi(SQLModel, table=True): + id: int # 主キー + official_title: str # 表示名(例:"無職転生") + title_raw: str # トレントマッチング用の生タイトル(インデックス付き) + season: int = 1 # シーズン番号 + episode_offset: int = 0 # エピソード番号調整 + season_offset: int = 0 # シーズン番号調整 + rss_link: str # カンマ区切りRSSフィードURL + filter: str # 除外フィルター(例:"720,\\d+-\\d+") + poster_link: str # TMDBポスターURL + save_path: str # ダウンロード先パス + rule_name: str # qBittorrent RSSルール名 + added: bool = False # ルールがダウンローダーに追加されたかどうか + deleted: bool = False # ソフト削除フラグ(インデックス付き) + archived: bool = False # 完結シリーズ用(インデックス付き) + needs_review: bool = False # オフセット不一致検出 + needs_review_reason: str # レビューの理由 + suggested_season_offset: int # 提案されたシーズンオフセット + suggested_episode_offset: int # 提案されたエピソードオフセット + air_weekday: int # 放送日(0=日曜日、6=土曜日) +``` + +### RSSItemモデル + +RSSフィード購読: + +```python +class RSSItem(SQLModel, table=True): + id: int # 主キー + name: str # 表示名 + url: str # フィードURL(ユニーク、インデックス付き) + aggregate: bool = True # トレントを解析するかどうか + parser: str = "mikan" # パーサータイプ:mikan、dmhy、nyaa + enabled: bool = True # アクティブフラグ + connection_status: str # "healthy"または"error" + last_checked_at: str # ISOタイムスタンプ + last_error: str # 最後のエラーメッセージ +``` + +### Torrentモデル + +ダウンロードしたトレントを追跡: + +```python +class Torrent(SQLModel, table=True): + id: int # 主キー + name: str # トレント名(インデックス付き) + url: str # トレント/マグネットURL(ユニーク、インデックス付き) + rss_id: int # ソースRSSフィードID + bangumi_id: int # リンクされたBangumi ID(nullable) + qb_hash: str # qBittorrentインフォハッシュ(インデックス付き) + downloaded: bool = False # ダウンロード完了 +``` + +## 一般的な操作 + +### BangumiDatabase + +```python +with Database() as db: + # 作成 + db.bangumi.add(bangumi) # 単一挿入 + db.bangumi.add_all(bangumi_list) # バッチ挿入(重複排除) + + # 読み取り + db.bangumi.search_all() # 全レコード(キャッシュ、5分TTL) + db.bangumi.search_id(123) # IDで検索 + db.bangumi.match_torrent("torrent name") # title_rawマッチで検索 + db.bangumi.not_complete() # 未完了シリーズ + db.bangumi.get_needs_review() # レビューフラグ付き + + # 更新 + db.bangumi.update(bangumi) # 単一レコード更新 + db.bangumi.update_all(bangumi_list) # バッチ更新 + + # 削除 + db.bangumi.delete_one(123) # ハード削除 + db.bangumi.disable_rule(123) # ソフト削除(deleted=True) +``` + +### RSSDatabase + +```python +with Database() as db: + # 作成 + db.rss.add(rss_item) # 単一挿入 + db.rss.add_all(rss_items) # バッチ挿入(重複排除) + + # 読み取り + db.rss.search_all() # 全フィード + db.rss.search_active() # 有効なフィードのみ + db.rss.search_aggregate() # 有効 + aggregate=True + + # 更新 + db.rss.update(id, rss_update) # 部分更新 + db.rss.enable(id) # フィード有効化 + db.rss.disable(id) # フィード無効化 + db.rss.enable_batch([1, 2, 3]) # バッチ有効化 + db.rss.disable_batch([1, 2, 3]) # バッチ無効化 +``` + +### TorrentDatabase + +```python +with Database() as db: + # 作成 + db.torrent.add(torrent) # 単一挿入 + db.torrent.add_all(torrents) # バッチ挿入 + + # 読み取り + db.torrent.search_all() # 全トレント + db.torrent.search_by_qb_hash(hash) # qBittorrentハッシュで検索 + db.torrent.search_by_url(url) # URLで検索 + db.torrent.check_new(torrents) # 既存のものをフィルター + + # 更新 + db.torrent.update_qb_hash(id, hash) # qb_hashを設定 +``` + +## キャッシング + +### Bangumiキャッシュ + +`search_all()`の結果はモジュールレベルで5分のTTLでキャッシュされます: + +```python +# bangumi.pyのモジュールレベルキャッシュ +_bangumi_cache: list[Bangumi] | None = None +_bangumi_cache_time: float = 0 +_BANGUMI_CACHE_TTL: float = 300.0 # 5分 + +# キャッシュ無効化 +def _invalidate_bangumi_cache(): + global _bangumi_cache, _bangumi_cache_time + _bangumi_cache = None + _bangumi_cache_time = 0 +``` + +**重要:** キャッシュは以下で自動的に無効化されます: +- `add()`、`add_all()` +- `update()`、`update_all()` +- `delete_one()`、`delete_all()` +- `archive_one()`、`unarchive_one()` +- 任意のRSSリンク更新操作 + +### セッションExpunge + +キャッシュされたオブジェクトは`DetachedInstanceError`を防ぐためにセッションから**expunge**されます: + +```python +for b in bangumis: + self.session.expunge(b) # セッションから切り離す +``` + +## マイグレーションシステム + +### スキーマバージョニング + +マイグレーションは`schema_version`テーブルを介して追跡されます: + +```python +CURRENT_SCHEMA_VERSION = 7 + +# 各マイグレーション:(バージョン、説明、[SQLステートメント]) +MIGRATIONS = [ + (1, "add air_weekday column", [...]), + (2, "add connection status columns", [...]), + (3, "create passkey table", [...]), + (4, "add archived column", [...]), + (5, "rename offset to episode_offset", [...]), + (6, "add qb_hash column", [...]), + (7, "add suggested offset columns", [...]), +] +``` + +### 新しいマイグレーションの追加 + +1. `combine.py`の`CURRENT_SCHEMA_VERSION`をインクリメント +2. `MIGRATIONS`リストにマイグレーションタプルを追加: + +```python +MIGRATIONS = [ + # ... 既存のマイグレーション ... + ( + 8, + "add my_new_column to bangumi", + [ + "ALTER TABLE bangumi ADD COLUMN my_new_column TEXT DEFAULT NULL", + ], + ), +] +``` + +3. `run_migrations()`に冪等性チェックを追加: + +```python +if "bangumi" in tables and version == 8: + columns = [col["name"] for col in inspector.get_columns("bangumi")] + if "my_new_column" in columns: + needs_run = False +``` + +4. `module/models/`の対応するPydanticモデルを更新 + +### デフォルト値のバックフィル + +マイグレーション後、`_fill_null_with_defaults()`がモデルのデフォルトに基づいてNULL値を自動的に埋めます: + +```python +# モデルが定義している場合: +class Bangumi(SQLModel, table=True): + my_field: bool = False + +# NULLの既存行はFalseに更新されます +``` + +## パフォーマンスパターン + +### バッチクエリ + +`add_all()`は、Nクエリの代わりに単一のクエリを使用して重複をチェックします: + +```python +# 効率的:単一SELECT +keys_to_check = [(d.title_raw, d.group_name) for d in datas] +conditions = [ + and_(Bangumi.title_raw == tr, Bangumi.group_name == gn) + for tr, gn in keys_to_check +] +statement = select(Bangumi.title_raw, Bangumi.group_name).where(or_(*conditions)) +``` + +### 正規表現マッチング + +`match_list()`は、すべてのタイトルマッチ用に単一の正規表現パターンをコンパイルします: + +```python +# 一度コンパイル、多くマッチ +sorted_titles = sorted(title_index.keys(), key=len, reverse=True) +pattern = "|".join(re.escape(title) for title in sorted_titles) +title_regex = re.compile(pattern) + +# トレントごとにO(n)ではなくO(1)ルックアップ +for torrent in torrent_list: + match = title_regex.search(torrent.name) +``` + +### インデックス付きカラム + +以下のカラムには高速ルックアップ用のインデックスがあります: + +| テーブル | カラム | インデックスタイプ | +|---------|--------|------------------| +| `bangumi` | `title_raw` | 通常 | +| `bangumi` | `deleted` | 通常 | +| `bangumi` | `archived` | 通常 | +| `rssitem` | `url` | ユニーク | +| `torrent` | `name` | 通常 | +| `torrent` | `url` | ユニーク | +| `torrent` | `qb_hash` | 通常 | + +## テスト + +### テストデータベースセットアップ + +テストはインメモリSQLiteデータベースを使用します: + +```python +# conftest.py +@pytest.fixture +def db_engine(): + engine = create_engine("sqlite:///:memory:") + SQLModel.metadata.create_all(engine) + yield engine + engine.dispose() + +@pytest.fixture +def db_session(db_engine): + with Session(db_engine) as session: + yield session +``` + +### ファクトリ関数 + +テストデータ作成にはファクトリ関数を使用: + +```python +from test.factories import make_bangumi, make_torrent, make_rss_item + +def test_bangumi_search(): + bangumi = make_bangumi(title_raw="Test Title", season=2) + # ... テストロジック +``` + +## 設計ノート + +### 外部キーなし + +SQLite外部キー強制はデフォルトで無効になっています。リレーションシップ(`Torrent.bangumi_id`など)はデータベース制約ではなくアプリケーションロジックで管理されます。 + +### ソフト削除 + +`Bangumi.deleted`フラグはソフト削除を可能にします。クエリはユーザー向けデータには`deleted=False`でフィルターする必要があります: + +```python +statement = select(Bangumi).where(Bangumi.deleted == false()) +``` + +### トレントタグ付け + +トレントはリネーム操作中のオフセットルックアップ用にqBittorrentで`ab:{bangumi_id}`でタグ付けされます。これにより、データベースクエリなしで高速な番組識別が可能になります。 + +## 一般的な問題 + +### DetachedInstanceError + +キャッシュされたオブジェクトを別のセッションからアクセスする場合: + +```python +# 間違い:新しいセッションでキャッシュされたオブジェクトにアクセス +bangumis = db.bangumi.search_all() # キャッシュ済み +with Database() as new_db: + new_db.session.add(bangumis[0]) # エラー! + +# 正しい:オブジェクトはexpungeされ、独立して動作 +bangumis = db.bangumi.search_all() +bangumis[0].title_raw = "New Title" # OK、ただし永続化されない +``` + +### キャッシュの古さ + +手動SQLアップデートがORMをバイパスする場合、キャッシュを無効化: + +```python +from module.database.bangumi import _invalidate_bangumi_cache + +with engine.connect() as conn: + conn.execute(text("UPDATE bangumi SET ...")) + conn.commit() + +_invalidate_bangumi_cache() # 重要! +``` diff --git a/docs/ja/dev/index.md b/docs/ja/dev/index.md new file mode 100644 index 00000000..ab20a56c --- /dev/null +++ b/docs/ja/dev/index.md @@ -0,0 +1,135 @@ +# コントリビューションガイド + +AutoBangumiをより良くするためにユーザーが遭遇する問題を解決する手助けをしていただけるコントリビューターを歓迎します。 + +このガイドでは、AutoBangumiにコードをコントリビュートする方法を説明します。Pull Requestを提出する前に数分間お読みください。 + +この記事では以下を扱います: + +- [プロジェクトロードマップ](#プロジェクトロードマップ) + - [Request for Comments (RFC)](#request-for-comments-rfc) +- [Gitブランチ管理](#gitブランチ管理) + - [バージョン番号](#バージョン番号) + - [ブランチ開発、トランクリリース](#ブランチ開発トランクリリース) + - [ブランチライフサイクル](#ブランチライフサイクル) + - [Gitワークフローの概要](#gitワークフローの概要) +- [Pull Request](#pull-request) +- [リリースプロセス](#リリースプロセス) + + +## プロジェクトロードマップ + +AutoBangumi開発チームは[GitHub Project](https://github.com/EstrellaXD/Auto_Bangumi/projects?query=is%3Aopen)ボードを使用して、計画された開発、進行中の修正、およびその進捗を管理しています。 + +これにより以下を理解できます: +- 開発チームが取り組んでいること +- あなたの意図するコントリビューションに合致するものがあり、直接参加できること +- すでに進行中のものがあり、重複作業を避けられること + +[Project](https://github.com/EstrellaXD/Auto_Bangumi/projects?query=is%3Aopen)では、通常の`[Feature Request]`、`[BUG]`、小さな改善に加えて、**`[RFC]`**アイテムがあります。 + +### Request for Comments (RFC) + +> issuesの`RFC`ラベルを介して既存の[AutoBangumi RFC](https://github.com/EstrellaXD/Auto_Bangumi/issues?q=is%3Aissue+label%3ARFC)を見つけてください。 + +小さな改善やバグ修正については、コードを調整してPull Requestを提出してください。[ブランチ管理](#gitブランチ管理)セクションを読んで正しいブランチに基づいて作業し、[Pull Request](#pull-request)セクションでPRがどのようにマージされるかを理解してください。 + +
+ +広範囲にわたる**大きな**機能リファクタリングについては、まず[Issue: Feature Proposal](https://github.com/EstrellaXD/Auto_Bangumi/issues/new?assignees=&labels=RFC&projects=&template=rfc.yml&title=%5BRFC%5D%3A+)を介してRFC提案を書き、アプローチを簡潔に説明し、開発者の議論とコンセンサスを求めてください。 + +一部の提案は開発チームがすでに行った決定と競合する可能性があり、このステップは無駄な努力を避けるのに役立ちます。 + +> 機能を追加または改善するかどうか(「実装方法」ではなく)について議論したい場合は -> [Issue: Feature Request](https://github.com/EstrellaXD/Auto_Bangumi/issues/new?labels=feature+request&template=feature_request.yml&title=%5BFeature+Request%5D+)を使用してください + + +
+ +[RFC提案](https://github.com/EstrellaXD/Auto_Bangumi/issues?q=is%3Aissue+is%3Aopen+label%3ARFC)は**「機能/リファクタリングの具体的な開発前に開発者が技術設計/アプローチをレビューするためのドキュメント」**です。 + +目的は、協力する開発者が「何をするか」と「どのように行われるか」を明確に知り、すべての開発者がオープンな議論に参加できるようにすることです。 + +これにより、影響(見落とされた考慮事項、後方互換性、既存機能との競合)を評価できます。 + +したがって、提案は問題を解決するための**アプローチ、設計、ステップ**の説明に焦点を当てます。 + + +## Gitブランチ管理 + +### バージョン番号 + +AutoBangumiプロジェクトのGitブランチは、リリースバージョンルールと密接に関連しています。 + +AutoBangumiは[セマンティックバージョニング(SemVer)](https://semver.org/)に従い、`..`形式を使用します: + +- **Major**:メジャーバージョン更新、互換性のない設定/API変更がある可能性 +- **Minor**:後方互換性のある新機能 +- **Patch**:後方互換性のあるバグ修正 / 小さな改善 + +### ブランチ開発、トランクリリース + +AutoBangumiは「ブランチ開発、トランクリリース」モデルを使用しています。 + +[**`main`**](https://github.com/EstrellaXD/Auto_Bangumi/commits/main)は安定した**トランクブランチ**で、リリースにのみ使用され、直接開発には使用されません。 + +各Minorバージョンには、新機能とリリース後のメンテナンス用の対応する**開発ブランチ**があります。 + +開発ブランチは`.-dev`という名前で、例:`3.1-dev`、`3.0-dev`、`2.6-dev`。[All Branches](https://github.com/EstrellaXD/Auto_Bangumi/branches/all?query=-dev)で見つけてください。 + + +### ブランチライフサイクル + +Minor開発ブランチ(例:`3.1-dev`)が機能開発を完了し、**最初に**mainにマージするとき: +- Minorバージョン(例:`3.1.0`)をリリース +- **次の**Minor開発ブランチ(`3.2-dev`)を次バージョンの機能用に作成 + - **前の**バージョンのブランチ(`3.0-dev`)はアーカイブ +- このMinorブランチ(`3.1-dev`)はメンテナンスに入る — 新機能/リファクタリングなし、バグ修正のみ + - バグ修正はメンテナンスブランチにマージされ、その後`Patch`リリースのためにmainへ + +コントリビューターのGitブランチ選択: +- **バグ修正** — **現在リリースされているバージョンの**Minorブランチに基づき、そのブランチにPR +- **新機能/リファクタリング** — **次の未リリースバージョンの**Minorブランチに基づき、そのブランチにPR + +> 「現在リリースされているバージョン」は[[Releases page]](https://github.com/EstrellaXD/Auto_Bangumi/releases)の最新バージョンです + + +### Gitワークフローの概要 + +> コミットタイムラインは左から右へ ---> + +![dev-branch](/image/dev/branch.png) + + +## Pull Request + +上記のGitブランチ管理セクションに従って、正しいPRターゲットブランチを選択していることを確認してください: +> - **バグ修正** → **現在リリースされているバージョンの**Minorメンテナンスブランチに PR +> - **新機能/リファクタリング** → **次バージョンの**Minor開発ブランチに PR + +
+ +- PRは単一の関心事に対応し、無関係な変更を導入しないでください。 + + 異なる関心事を複数のPRに分割して、チームがレビューごとに1つの問題に集中できるようにしてください。 + +- PRタイトルと説明で、理由と意図を含めて変更を簡潔に説明してください。 + + PR説明に関連するissuesやRFCをリンクしてください。 + + これにより、コードレビュー中にチームがコンテキストを素早く理解できます。 + +- 「メンテナーからの編集を許可」がチェックされていることを確認してください。これにより、小さな編集/リファクタリングを直接行うことができ、時間を節約できます。 + +- ローカルテストとリンティングがパスすることを確認してください。これらはPR CIでもチェックされます。 + - バグ修正と新機能については、チームが対応するユニットテストカバレッジを要求する場合があります。 + + +開発チームはコントリビューターのPRをレビューし、できるだけ早く議論またはマージを承認します。 + +## リリースプロセス + +リリースは現在、開発チームが特定の「リリースPR」を手動でマージした後に自動的にトリガーされます。 + +バグ修正PRは通常、迅速にリリースされ、通常は1週間以内です。 + +新機能リリースはより長くかかり、予測が難しいです。開発進捗については[GitHub Project](https://github.com/EstrellaXD/Auto_Bangumi/projects?query=is%3Aopen)ボードを確認してください — すべての計画された機能が完了するとバージョンがリリースされます。 diff --git a/docs/ja/faq/index.md b/docs/ja/faq/index.md new file mode 100644 index 00000000..9e2e4776 --- /dev/null +++ b/docs/ja/faq/index.md @@ -0,0 +1,159 @@ +# よくある質問 + +## WebUI + +### WebUIアドレス + +デフォルトポートは7892です。サーバーデプロイメントの場合は`http://serverhost:7892`に、ローカルデプロイメントの場合は`http://localhost:7892`にアクセスします。ポートを変更した場合は、Dockerのポートマッピングも更新することを忘れないでください。 + +### デフォルトのユーザー名とパスワード + +- デフォルトのユーザー名:`admin`、デフォルトのパスワード:`adminadmin` +- 初回ログイン後にパスワードを変更してください。 + +### パスワードの変更またはリセット + +- パスワード変更:ログイン後、右上の`···`をクリックし、`プロファイル`をクリックして、ユーザー名とパスワードを変更します。 +- 現在、簡単なパスワードリセット方法はありません。パスワードを忘れた場合は、`data/data.db`ファイルを削除して再起動してください。 + +### 設定変更が反映されないのはなぜですか? + +- 設定変更後、**適用**ボタンをクリックし、次に`···`メニューの**再起動**をクリックしてメインプロセスを再起動します。 +- デバッグモードが有効な場合は、`···`メニューの**シャットダウン**をクリックしてコンテナを再起動します。 + +### プログラムが正常に動作しているか確認する方法 + +新しいWebUIには右上に小さなドットがあります。緑は正常に動作中、赤はエラーが発生してプログラムが一時停止中を意味します。 + +### ポスターウォールに画像が表示されない + +- バージョン3.0の場合: + ABはデフォルトで`mikanani.me`アドレスをポスター画像ソースとして使用します。画像が表示されない場合、ネットワークがこれらの画像にアクセスできません。 +- バージョン3.1以降の場合: + - ポスターにエラーアイコンが表示される場合、画像がありません。右上メニューのポスター更新ボタンをクリックしてTMDBポスターを取得してください。 + - ポスターの読み込みに失敗する場合は、ブラウザのキャッシュをクリアしてください。 + - RSSアドレスとして`mikanime.tv`を使用している場合、クライアント側のプロキシがポスターの読み込みを妨げる可能性があります。`direct`ルールを追加してください。 + +## v3.0はどのようにアニメを管理しますか + +v3.0にアップグレード後、ABはWebUIでアニメトレントとダウンロードルールを管理できます。トレントのダウンロードパスとルール名に依存します。 +QBでトレントのダウンロードパスを手動で変更すると、通知にポスターがない、トレントの削除に失敗するなどの問題が発生する可能性があります。 +できるだけAB内でアニメとトレントを管理してください。 + +## ダウンロードとキーワードフィルタリング + +### ダウンロードパス + +**ダウンロードパスには何を入力すればよいですか?** +- このパラメータはqBittorrentの設定と一致させるだけです: + - Docker:qBが`/downloads`を使用している場合は、`/downloads/Bangumi`に設定します。`Bangumi`は任意の名前に変更できます。 + - Linux/macOS:`/home/usr/downloads`または`/User/UserName/Downloads`の場合は、末尾に`/Bangumi`を追加するだけです。 + - Windows:`D:\Media\`を`D:\Media\Bangumi`に変更します + +### ダウンロードが自動的に開始されない + +AutoBangumiのログでトレント関連のエントリを確認してください。 +- 存在しない場合は、購読が正しいか確認してください。 + +### ダウンロードが正しいディレクトリに保存されない + +- [ダウンロードパス](#ダウンロードパス)が正しいか確認してください。 +- qBittorrentのPGIDとPUID設定でフォルダ作成権限を確認してください。任意のトレントを指定ディレクトリに手動でダウンロードしてみてください — エラーが発生するかディレクトリが作成されない場合は、権限の問題です。 +- qBittorrentのデフォルト設定を確認してください:保存管理は手動に設定する必要があります(保存管理 >> デフォルトトレント管理モード >> 手動)。 + +### 購読していないアニメが多数ダウンロードされる + +- Mikan購読が単一のアニメのすべての字幕グループを含んでいないか確認してください。アニメごとに1つのグループのみを購読し、詳細購読を有効にしてください。 + - 詳細購読はMikan Projectのユーザー設定で有効にできます。 +- 正規表現フィルタリングが不十分な場合があります — 正規表現の拡張については次のセクションを参照してください。 +- どちらにも該当しない場合は、ログとともに[Issues][ISSUE]で報告してください。 + +### フィルターキーワードの書き方 + +ABのフィルターキーワードは正規表現で、ルール作成時にのみ追加されます。作成後にルールを拡張するには、WebUI(v3.0以降)を使用して各アニメを個別に設定します。 +- フィルターキーワードは正規表現です — 不要なキーワードは`|`で区切ります。 +- デフォルトの`720|\d+-\d+`ルールは、すべてのコレクションと720Pアニメをフィルタリングします。ABをデプロイする前にフィルターを追加してください。以降の環境変数の変更は新しいルールにのみ影響します。 +- 一般的な正規表現キーワード(`|`で区切り): + - `720` — 720、720P、720pなどをフィルタリング + - `\d+-\d+` — [1-12]のようなコレクションをフィルタリング + - `[Bb]aha` — Bahaリリースをフィルタリング + - `[Bb]ilibili`、`[Bb]-Global` — Bilibiliリリースをフィルタリング + - `繁`、`CHT` — 繁体字中国語字幕をフィルタリング +- 特定のキーワードに一致させるには、QBのincludeフィールドに追加:`XXXXX+1080P\+`ここで`1080P\+`は1080P+リリースに一致します。 + +### 初回デプロイ時に不要なアニメがダウンロードされた + +1. QBで余分な自動ダウンロードルールとファイルを削除します。 +2. 購読とフィルタールールを確認します。 +3. ブラウザでresetRule APIにアクセス:`http://localhost:7892/api/v1/resetRule`でルールをリセットします。 +4. ABを再起動します。 + +### ABが購読より少ないRSSエントリを識別する + +新しいバージョンでは、ABのフィルターもデフォルトですべてのRSSエントリをフィルタリングします。すべてのフィルターを一度に追加しないでください。細かい制御には、WebUIで各アニメを個別に設定してください。 + +### フィルターキーワードが機能しない + +- **グローバルフィルター**パラメータが正しく設定されているか確認してください。 +- QBのRSS自動ダウンロードルールを確認してください — 右側で一致したRSSを確認でき、ダウンロードルールを調整して保存をクリックすると、どのキーワードが問題を引き起こしているかを特定できます。 + +## エピソード補完 + +### エピソード補完が機能しない + +**エピソード補完**パラメータが正しく設定されているか確認してください。 + +## ファイルリネーム + +### 解析エラー `Cannot parse XXX` + +- ABは現在コレクションの解析をサポートしていません。 +- コレクションでない場合は、GitHub Issuesで問題を報告してください。 + +### `Rename failed`またはリネームエラー + +- ファイルパスを確認してください。標準的な保存パスは`/title/Season/Episode.mp4`である必要があります。非標準のパスは名前付けエラーの原因となります — qBittorrentの設定を確認してください。 +- `ダウンロードパス`が正しく入力されているか確認してください。パスが正しくないと適切なリネームができません。 +- その他の問題については、GitHub Issuesで報告してください。 + +### 自動リネームされない + +- QBのトレントカテゴリが`Bangumi`であるか確認してください。 +- ABはダウンロード済みのファイルのみをリネームします。 + +### AB以外のアニメをABでリネームする方法 + +- トレントのカテゴリを`Bangumi`に変更するだけです。 +- 注意:リネームをトリガーするには、トレントが`Title/Season X/`フォルダに保存されている必要があります。 + +### コレクションのリネーム方法 + +1. コレクションのカテゴリを`Bangumi`に変更します。 +2. コレクションの保存パスを`Title/Season X/`に変更します。 +3. コレクションのダウンロードが完了するのを待つと、リネームが完了します。 + +## Docker + +### 自動更新の方法 + +Dockerで`watchtower`デーモンを実行して、コンテナを自動的に更新します。 + +[watchtower](https://containrrr.dev/watchtower) 公式ドキュメント + +### Docker Composeでの更新 + +ABがDocker Composeでデプロイされている場合は、`docker compose pull`で更新します。 +新しいイメージをpullした後、`docker compose up -d`で再起動します。 + +`docker-compose.yml`に`pull_policy: always`を追加すると、起動するたびに最新のイメージをpullできます。 + +### アップグレードで問題が発生した場合の対処法 + +設定が異なる場合があるため、アップグレードによりプログラムが失敗する可能性があります。この場合、以前のデータと生成された設定ファイルをすべて削除してから、コンテナを再起動してください。 +その後、WebUIで再設定します。 +古いバージョンからアップグレードする場合は、まず[アップグレードガイド](/ja/changelog/2.6)を参照してください。 + +上記でカバーされていない問題が発生した場合は、バグテンプレートを使用して[Issues][ISSUE]で報告してください。 + + +[ISSUE]: https://github.com/EstrellaXD/Auto_Bangumi/issues diff --git a/docs/ja/faq/network.md b/docs/ja/faq/network.md new file mode 100644 index 00000000..0de9fc0b --- /dev/null +++ b/docs/ja/faq/network.md @@ -0,0 +1,97 @@ +# ネットワーク問題 + +## Mikan Projectに接続できない + +Mikan Projectのメインサイト(`https://mikanani.me`)は一部の地域でブロックされている可能性があるため、ABは接続に失敗することがあります。以下の解決策を使用してください: + +- [Mikan Projectの代替ドメインを使用](#mikan-projectの代替ドメイン) +- [プロキシを使用](#プロキシの設定) +- [Cloudflare Workerリバースプロキシを使用](#cloudflare-workersリバースプロキシ) + +### Mikan Projectの代替ドメイン + +Mikan Projectには新しいドメイン`https://mikanime.tv`があります。プロキシを有効にせずに、このドメインをABで使用してください。 + +以下が表示される場合: +``` +DNS/Connect ERROR +``` + +- ネットワーク接続を確認してください。問題がない場合は、DNS解決を確認してください。 +- ABに`dns=8.8.8.8`を追加してください。Hostネットワークモードを使用している場合、これは無視できます。 + +プロキシを使用している場合、正しい設定であればこのエラーは通常発生しません。 + +### プロキシの設定 + +::: tip +AB 3.1以降、ABはRSS更新と通知を自分で処理するため、ABでプロキシを設定するだけで十分です。 +::: + +ABにはプロキシ設定が組み込まれています。プロキシを設定するには、[プロキシ設定](/ja/config/proxy)の指示に従ってHTTPまたはSOCKSプロキシを正しく設定してください。これでアクセス問題が解決されます。 + +**3.1より前のバージョンでは、qBittorrentのプロキシ設定も必要です** + +QBで以下のようにプロキシを設定してください(SOCKSも同様のアプローチ): + +image + + +### Cloudflare Workersリバースプロキシ + +Cloudflare Workersを介したリバースプロキシアプローチも使用できます。ドメインの設定とCloudflareへのバインドは、このガイドの範囲外です。 +Workersに以下のコードを追加して、独自のドメインを使用してMikan Projectにアクセスし、RSSリンクからトレントをダウンロードします: + +```javascript +const TELEGRAPH_URL = 'https://mikanani.me'; +const MY_DOMAIN = 'https://yourdomain.com' + +addEventListener('fetch', event => { + event.respondWith(handleRequest(event.request)) +}) + +async function handleRequest(request) { + const url = new URL(request.url); + url.host = TELEGRAPH_URL.replace(/^https?:\/\//, ''); + + const modifiedRequest = new Request(url.toString(), { + headers: request.headers, + method: request.method, + body: request.body, + redirect: 'manual' + }); + + const response = await fetch(modifiedRequest); + const contentType = response.headers.get('Content-Type') || ''; + + // コンテンツタイプがRSSの場合のみ置換を実行 + if (contentType.includes('application/xml')) { + const text = await response.text(); + const replacedText = text.replace(/https?:\/\/mikanani\.me/g, MY_DOMAIN); + const modifiedResponse = new Response(replacedText, response); + + // CORSヘッダーを追加 + modifiedResponse.headers.set('Access-Control-Allow-Origin', '*'); + + return modifiedResponse; + } else { + const modifiedResponse = new Response(response.body, response); + + // CORSヘッダーを追加 + modifiedResponse.headers.set('Access-Control-Allow-Origin', '*'); + + return modifiedResponse; + } +} +``` + +設定が完了したら、**RSSを追加する**際に`https://mikanani.me`をあなたのドメインに置き換えてください。 + +## qBittorrentに接続できない + +まず、ABの**ダウンローダーアドレス**パラメータが正しいか確認してください。 +- ABとQBが同じDockerネットワーク上にある場合、コンテナ名を使用したアドレス指定を試してください。例:`http://qbittorrent:8080`。 +- ABとQBが同じDockerサーバー上にある場合、Dockerゲートウェイアドレスを使用してみてください。例:`http://172.17.0.1:8080`。 +- ABのネットワークモードが`host`でない場合、QBへのアクセスに`127.0.0.1`を使用しないでください。 + +Docker内のコンテナが相互にアクセスできない場合は、QBのネットワーク接続設定でQBとAB間のネットワークリンクを設定してください。qBittorrentがHTTPSを使用する場合は、**ダウンローダーアドレス**に`https://`プレフィックスを追加してください。 diff --git a/docs/ja/faq/troubleshooting.md b/docs/ja/faq/troubleshooting.md new file mode 100644 index 00000000..9dc4d309 --- /dev/null +++ b/docs/ja/faq/troubleshooting.md @@ -0,0 +1,39 @@ +--- +title: トラブルシューティング +--- + +## 一般的なトラブルシューティングフロー + +1. ABが起動に失敗した場合、起動コマンドが正しいか確認してください。正しくなく、修正方法がわからない場合は、ABを再デプロイしてみてください。 +2. ABをデプロイした後、まずログを確認してください。以下のような出力が表示されれば、ABは正常に動作しており、QBに接続されています: + ``` + [2022-07-09 21:55:19,164] INFO: _ ____ _ + [2022-07-09 21:55:19,165] INFO: /\ | | | _ \ (_) + [2022-07-09 21:55:19,166] INFO: / \ _ _| |_ ___ | |_) | __ _ _ __ __ _ _ _ _ __ ___ _ + [2022-07-09 21:55:19,167] INFO: / /\ \| | | | __/ _ \| _ < / _` | '_ \ / _` | | | | '_ ` _ \| | + [2022-07-09 21:55:19,167] INFO: / ____ \ |_| | || (_) | |_) | (_| | | | | (_| | |_| | | | | | | | + [2022-07-09 21:55:19,168] INFO: /_/ \_\__,_|\__\___/|____/ \__,_|_| |_|\__, |\__,_|_| |_| |_|_| + [2022-07-09 21:55:19,169] INFO: __/ | + [2022-07-09 21:55:19,169] INFO: |___/ + [2022-07-09 21:55:19,170] INFO: Version 3.0.1 Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan + [2022-07-09 21:55:19,171] INFO: GitHub: https://github.com/EstrellaXD/Auto_Bangumi/ + [2022-07-09 21:55:19,172] INFO: Starting AutoBangumi... + [2022-07-09 21:55:20,717] INFO: Add RSS Feed successfully. + [2022-07-09 21:55:21,761] INFO: Start collecting RSS info. + [2022-07-09 21:55:23,431] INFO: Finished + [2022-07-09 21:55:23,432] INFO: Running.... + ``` + 1. このログが表示される場合、ABはqBittorrentに接続できません。qBittorrentが実行されているか確認してください。実行されている場合は、[ネットワーク問題](/ja/faq/network)セクションに進んでください。 + ``` + [2022-07-09 22:01:24,534] WARNING: Cannot connect to qBittorrent, wait 5min and retry + ``` + 2. このログが表示される場合、ABはMikan RSSに接続できません。[ネットワーク問題](/ja/faq/network)セクションに進んでください。 + ``` + [2022-07-09 21:55:21,761] INFO: Start collecting RSS info. + [2022-07-09 22:01:24,534] WARNING: Connected Failed, please check DNS/Connection + ``` +3. この時点で、QBにはダウンロードタスクがあるはずです。 + 1. ダウンロードでパスの問題が表示される場合、QBの「保存管理」→「デフォルトTorrent管理モード」が「手動」に設定されているか確認してください。 + 2. すべてのダウンロードに感嘆符が表示されるか、ダウンロードパスにカテゴリフォルダが作成されない場合は、QBの権限を確認してください。 +4. 上記のいずれでも問題が解決しない場合は、新しいqBittorrentを再デプロイしてみてください。 +5. それでも成功しない場合は、ログを添えて[Issues](https://www.github.com/EstrellaXD/Auto_Bangumi/issues)で報告してください。 diff --git a/docs/ja/feature/bangumi.md b/docs/ja/feature/bangumi.md new file mode 100644 index 00000000..f3440106 --- /dev/null +++ b/docs/ja/feature/bangumi.md @@ -0,0 +1,83 @@ +# 番組管理 + +ホームページでアニメのポスターをクリックして、個別のアニメエントリを管理します。 + +![Bangumi List](/image/feature/bangumi-list.png) + +アニメに複数のダウンロードルールがある場合(例:異なる字幕グループ)、ルール選択ポップアップが表示されます: + +![Rule Selection](/image/feature/rule-select.png) + +ルールを選択すると、編集モーダルが開きます: + +![Edit Bangumi](/image/feature/bangumi-edit.png) + +## 通知バッジ + +v3.2以降、番組カードにはステータスを示すiOSスタイルの通知バッジが表示されます: + +- **`!`が付いた黄色バッジ**:購読にレビューが必要(例:オフセットの問題が検出された) +- **数字バッジ**:このアニメに複数のルールが存在 +- **組み合わせバッジ**(例:`! | 2`):警告と複数のルールがある + +警告のあるカードは、注意を引くために黄色のグローアニメーションも表示されます。 + +## エピソードオフセットの自動検出 + +一部のアニメには、RSSエピソード番号とTMDBデータの不一致を引き起こす複雑なシーズン構造があります。例: +- 「葬送のフリーレン」シーズン1は6ヶ月の間隔を置いて2つのパートで放送されました +- RSSは「S2E01」と表示しますが、TMDBは「S1E29」と見なします + +AB v3.2はこれらの問題を自動的に検出できます: + +1. 編集モーダルで**自動検出**ボタンをクリック +2. ABはTMDBエピソード放送日を分析して「仮想シーズン」を特定 +3. 不一致が見つかった場合、ABは正しいオフセット値を提案 +4. **適用**をクリックしてオフセットを保存 + +バックグラウンドスキャンスレッドも定期的に既存の購読のオフセット問題をチェックし、レビュー対象としてマークします。 + +## アニメのアーカイブ / アーカイブ解除 + +v3.2以降、完了したまたは非アクティブなアニメをアーカイブしてリストを整理できます。 + +### 手動アーカイブ + +1. アニメのポスターをクリック +2. 編集モーダルで**アーカイブ**ボタンをクリック +3. アニメはリストの下部にある「アーカイブ済み」セクションに移動 + +### 自動アーカイブ + +ABは以下の場合にアニメを自動的にアーカイブできます: +- TMDBのシリーズステータスが「終了」または「キャンセル」と表示 +- **設定** → メタデータを更新を使用して自動アーカイブをトリガー + +### アーカイブされたアニメの表示 + +アーカイブされたアニメは、番組リストの下部にある折りたたみ可能な「アーカイブ済み」セクションに表示されます。クリックして展開し、アーカイブされたアイテムを表示します。 + +### アーカイブ解除 + +アーカイブされたアニメを復元するには: +1. 「アーカイブ済み」セクションを展開 +2. アニメのポスターをクリック +3. **アーカイブ解除**ボタンをクリック + +## アニメの無効化 / 削除 + +ABは継続的に**集約RSS**フィードを解析するため、不要になった集約RSSからのダウンロードルールについては: +- アニメを無効化:アニメはダウンロードも再解析もされません +- 集約RSSから購読を削除 + +アニメエントリを削除すると、次の解析サイクルで再作成されます。 + +## 詳細設定 + +編集モーダルで**詳細設定**をクリックして、追加のオプションにアクセスします: + +![Advanced Settings](/image/feature/bangumi-edit-advanced.png) + +- **シーズンオフセット**:シーズン番号オフセットを調整 +- **エピソードオフセット**:エピソード番号オフセットを調整 +- **フィルター**:トレントマッチング用のカスタム正規表現フィルター diff --git a/docs/ja/feature/calendar.md b/docs/ja/feature/calendar.md new file mode 100644 index 00000000..c55474de --- /dev/null +++ b/docs/ja/feature/calendar.md @@ -0,0 +1,40 @@ +# カレンダービュー + +v3.2以降、ABには購読しているアニメを放送日ごとに整理して表示するカレンダービューが含まれています。 + +![Calendar](/image/feature/calendar.png) + +## 機能 + +### 週間スケジュール + +カレンダーは、放送曜日(月曜日から日曜日)ごとに整理されたアニメを表示し、放送スケジュールデータのないアニメ用の「不明」列もあります。 + +### Bangumi.tv連携 + +ABはBangumi.tvから放送スケジュールデータを取得して、各アニメの放送時間を正確に表示します。 + +**スケジュールを更新**ボタンをクリックして、放送データを更新します。 + +### グループ表示 + +v3.2以降、複数のダウンロードルールを持つアニメはグループ化されます: + +- 複数の字幕グループルールがあっても、同じアニメは1回だけ表示されます +- グループ化されたアニメをクリックすると、利用可能なすべてのルールが表示されます +- 特定のルールを選択して編集 + +これにより、すべてのルールへのアクセスを提供しながら、カレンダーをすっきり保ちます。 + +## ナビゲーション + +カレンダー内の任意のアニメポスターをクリックして: +- アニメの詳細を表示 +- ダウンロードルールを編集 +- アーカイブ/無効化オプションにアクセス + +## ヒント + +::: tip +アニメが「不明」列に表示される場合、Bangumi.tvに放送データがないか、アニメタイトルがマッチングできなかった可能性があります。 +::: diff --git a/docs/ja/feature/rename.md b/docs/ja/feature/rename.md new file mode 100644 index 00000000..7ac5655c --- /dev/null +++ b/docs/ja/feature/rename.md @@ -0,0 +1,61 @@ +# ファイルリネーム + +ABは現在3つのリネーム方法を提供しています:`pn`、`advance`、`none`。 + +### pn + +`pure name`の略です。この方法はトレントダウンロード名を使用してリネームします。 + +例: +``` +[Lilith-Raws] 86 - Eighty Six - 01 [Baha][WEB-DL][1080p][AVC AAC][CHT][MKV].mkv +>> +86 - Eighty Six S01E01.mkv +``` + +### advance + +高度なリネーム。この方法は親フォルダ名を使用してリネームします。 + +``` +/downloads/Bangumi/86 - Eighty Six(2023)/Season 1/[Lilith-Raws] 86 - Eighty Six - 01 [Baha][WEB-DL][1080p][AVC AAC][CHT][MKV].mkv +>> +86 - Eighty Six(2023) S01E01.mkv +``` + +### none + +リネームなし。ファイルはそのまま残されます。 + +## コレクションのリネーム + +ABはコレクションのリネームをサポートしています。コレクションのリネームには以下が必要です: +- エピソードがコレクションの第1レベルディレクトリにある +- ファイル名からエピソード番号を解析できる + +ABはまた、第1レベルディレクトリ内の字幕ファイルもリネームできます。 + +リネーム後、エピソードとディレクトリは`Season`フォルダに配置されます。 + +リネームされたコレクションは`BangumiCollection`の下に移動され、カテゴリ分けされます。 + +## エピソードオフセット + +v3.2以降、ABはリネーム用のエピソードオフセットをサポートしています。これは以下の場合に便利です: +- RSSが期待と異なるエピソード番号を表示(例:S2E01がS1E29であるべき) +- 放送ギャップによるアニメの「仮想シーズン」がある + +番組にオフセットが設定されている場合、ABはリネーム中に自動的に適用します: + +``` +元:S02E01.mkv +オフセット適用後(シーズン:-1、エピソード:+28):S01E29.mkv +``` + +オフセットを設定するには: +1. アニメのポスターをクリック +2. 詳細設定を開く +3. シーズンオフセットおよび/またはエピソードオフセットの値を設定 +4. または「自動検出」を使用してABに正しいオフセットを提案させる + +自動検出の詳細については、[番組管理](/ja/feature/bangumi#エピソードオフセットの自動検出)を参照してください。 diff --git a/docs/ja/feature/rss.md b/docs/ja/feature/rss.md new file mode 100644 index 00000000..7cb1dae2 --- /dev/null +++ b/docs/ja/feature/rss.md @@ -0,0 +1,68 @@ +--- +title: RSS管理 +--- + +# RSS管理 + +## RSSマネージャーページ + +RSSマネージャーページには、すべてのRSS購読と接続ステータスが表示されます。 + +![RSS Manager](/image/feature/rss-manager.png) + +### 接続ステータス + +v3.2以降、ABは各RSSソースの接続ステータスを追跡します: + +| ステータス | 説明 | +|----------|------| +| **接続済み**(緑) | RSSソースに到達可能で、有効なデータを返しています | +| **エラー**(赤) | RSSソースが応答しないか、無効なデータを返しました | + +ソースがエラーを表示している場合、ステータスラベルにマウスを合わせるとツールチップでエラーの詳細が表示されます。 + +ABは各RSSリフレッシュサイクルで接続ステータスを自動的に更新します。 + +## コレクションの追加 + +ABは2つの手動ダウンロード方法を提供しています: +**コレクト**と**サブスクライブ**。 +- **コレクト**はすべてのエピソードを一度にダウンロードし、完結したアニメに適しています。 +- **サブスクライブ**は対応するRSSリンクで自動ダウンロードルールを追加し、放送中のアニメに適しています。 + +### RSSリンクの解析 + +ABはすべてのリソースサイトからのコレクションRSSリンクの解析をサポートしています。対応するサイトで希望するアニメのコレクションRSSを見つけ、ABの右上隅にある**+**ボタンをクリックし、ポップアップウィンドウにRSSリンクを貼り付けます。 + +### ダウンロードの追加 + +解析が成功すると、解析されたアニメ情報を表示するウィンドウが表示されます。**コレクト**または**サブスクライブ**をクリックしてダウンロードキューに追加します。 + +### よくある問題 + +解析エラーが発生した場合、RSSリンクが正しくないか、サポートされていない字幕グループの命名形式が原因である可能性があります。 + +## 番組の管理 + +v3.0以降、ABはWebUIで手動のアニメ管理を提供し、誤って解析されたアニメ情報を手動で調整できます。 + +### アニメ情報の編集 + +アニメリストで、アニメのポスターをクリックしてアニメ情報ページに入ります。 +情報を変更した後、**適用**をクリックします。 +ABは変更に基づいてディレクトリを再調整し、ファイルを自動的にリネームします。 + + +### アニメの削除 + +v3.0以降、アニメを手動で削除できます。アニメのポスターをクリックし、情報ページに入り、**削除**をクリックします。 + +::: warning +アニメを削除した後、RSS購読がキャンセルされていない場合、ABは引き続き再解析します。ダウンロードルールを無効にするには、[アニメの無効化](#アニメの無効化)を使用してください。 +::: + +### アニメの無効化 + +v3.0以降、アニメを手動で無効にできます。アニメのポスターをクリックし、情報ページに入り、**無効**をクリックします。 + +無効化されると、アニメのポスターはグレーアウトされ、最後にソートされます。ダウンロードルールを再度有効にするには、**有効**をクリックします。 diff --git a/docs/ja/feature/search.md b/docs/ja/feature/search.md new file mode 100644 index 00000000..d814061c --- /dev/null +++ b/docs/ja/feature/search.md @@ -0,0 +1,69 @@ +# トレント検索 + +v3.1以降、ABにはアニメを素早く見つけるための検索機能が含まれています。 + +## 検索機能の使用 + +::: warning +検索機能はメインプログラムのパーサーに依存しています。現在のバージョンはコレクションの解析をサポートしていません。コレクションを解析する際の`warning`は正常な動作です。 +::: + +検索バーはABのトップバーにあります。クリックして検索パネルを開きます。 + +![Search Panel](/image/feature/search-panel.png) + +ソースサイトを選択し、キーワードを入力すると、ABが自動的に解析して検索結果を表示します。アニメを追加するには、カードの右側にある追加ボタンをクリックします。 + +::: tip +ソースが**Mikan**の場合、ABはデフォルトで`mikan`パーサーを使用します。他のソースの場合、TMDBパーサーが使用されます。 +::: + +## 検索ソースの管理 + +v3.2以降、JSONファイルを編集せずに、設定ページで直接検索ソースを管理できます。 + +### 検索プロバイダー設定パネル + +**設定** → **検索プロバイダー**に移動して、設定パネルにアクセスします。 + +![Search Provider Settings](/image/feature/search-provider.png) + +ここから以下が可能です: +- すべての設定済み検索ソースを**表示** +- 「プロバイダーを追加」ボタンで新しい検索ソースを**追加** +- 既存のソースURLを**編集** +- カスタムソースを**削除**(デフォルトソースmikan、nyaa、dmhyは削除できません) + +### URLテンプレート形式 + +カスタムソースを追加する場合、URLには検索キーワードのプレースホルダーとして`%s`を含める必要があります。 + +例: +``` +https://example.com/rss/search?q=%s +``` + +`%s`はユーザーの検索クエリに置き換えられます。 + +### デフォルトソース + +以下のソースは組み込みで、削除できません: + +| ソース | URLテンプレート | +|--------|---------------| +| mikan | `https://mikanani.me/RSS/Search?searchstr=%s` | +| nyaa | `https://nyaa.si/?page=rss&q=%s&c=0_0&f=0` | +| dmhy | `http://dmhy.org/topics/rss/rss.xml?keyword=%s` | + +### 設定ファイル経由でソースを追加 + +`config/search_provider.json`を編集してソースを手動で追加することもできます: + +```json +{ + "mikan": "https://mikanani.me/RSS/Search?searchstr=%s", + "nyaa": "https://nyaa.si/?page=rss&q=%s&c=0_0&f=0", + "dmhy": "http://dmhy.org/topics/rss/rss.xml?keyword=%s", + "bangumi.moe": "https://bangumi.moe/rss/search/%s" +} +``` diff --git a/docs/ja/home/index.md b/docs/ja/home/index.md new file mode 100644 index 00000000..7413a1d9 --- /dev/null +++ b/docs/ja/home/index.md @@ -0,0 +1,102 @@ +--- +title: 概要 +--- + +

+ + + + + +

+ + +## AutoBangumiについて + + +

+ AutoBangumi WebUI +

+ +**`AutoBangumi`** は、RSSフィードに基づく全自動アニメダウンロード・整理ツールです。[Mikan Project][mikan]などのサイトでアニメを購読するだけで、新しいエピソードを自動的に追跡・ダウンロードします。 + +整理されたファイル名とディレクトリ構造は、追加のメタデータスクレイピングなしで[Plex][plex]、[Jellyfin][jellyfin]などのメディアライブラリソフトウェアと直接互換性があります。 + +## 機能 + +- シンプルな一回限りの設定で継続的に使用可能 +- アニメ情報を抽出し、自動的にダウンロードルールを生成する手間いらずのRSSパーサー +- アニメファイルの整理: + + ``` + Bangumi + ├── bangumi_A_title + │ ├── Season 1 + │ │ ├── A S01E01.mp4 + │ │ ├── A S01E02.mp4 + │ │ ├── A S01E03.mp4 + │ │ └── A S01E04.mp4 + │ └── Season 2 + │ ├── A S02E01.mp4 + │ ├── A S02E02.mp4 + │ ├── A S02E03.mp4 + │ └── A S02E04.mp4 + ├── bangumi_B_title + │ └─── Season 1 + ``` + +- 完全自動リネーム — リネーム後、99%以上のアニメファイルがメディアライブラリソフトウェアで直接スクレイピング可能 + + ``` + [Lilith-Raws] Kakkou no Iinazuke - 07 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4].mp4 + >> + Kakkou no Iinazuke S01E07.mp4 + ``` + +- 親フォルダ名に基づくすべての子ファイルのカスタムリネーム +- シーズン途中からの追跡で現在のシーズンの見逃したエピソードをすべて補完 +- 異なるメディアライブラリソフトウェアに合わせて微調整できる高度にカスタマイズ可能なオプション +- メンテナンス不要、完全に透明な動作 +- 完全なTMDB形式のファイルとアニメメタデータを生成する内蔵TMDBパーサー +- Mikan RSSフィードのリバースプロキシサポート + +## コミュニティ + +- 更新通知:[Telegramチャンネル](https://t.me/autobangumi_update) +- バグ報告:[Telegram](https://t.me/+yNisOnDGaX5jMTM9) + +## 謝辞 + +[Sean](https://github.com/findix)氏のプロジェクトへの多大なご協力に感謝いたします。 + +## コントリビュート + +IssuesとPull Requestsを歓迎します! + + + + + +## 免責事項 + +AutoBangumiは非公式の著作権チャンネルを通じてアニメを取得するため: + +- AutoBangumiを**商業目的で使用しないでください**。 +- AutoBangumiを含むビデオコンテンツを作成し、国内のビデオプラットフォーム(著作権関係者)で**配信しないでください**。 +- AutoBangumiを法律や規制に違反する活動に**使用しないでください**。 + +AutoBangumiは教育目的および個人使用のみを目的としています。 + +## ライセンス + +[MIT License](https://github.com/EstrellaXD/Auto_Bangumi/blob/main/LICENSE) + +[mikan]: https://mikanani.me +[plex]: https://plex.tv +[jellyfin]: https://jellyfin.org diff --git a/docs/ja/home/pipline.md b/docs/ja/home/pipline.md new file mode 100644 index 00000000..bc2c0495 --- /dev/null +++ b/docs/ja/home/pipline.md @@ -0,0 +1,12 @@ +# AutoBangumiの仕組み + +AutoBangumi(略称AB)は基本的にRSSパーサーです。アニメトレントサイトからのRSSフィードを解析し、トレントタイトルからメタデータを抽出し、ダウンロードルールを生成してqBittorrentに送信してダウンロードします。ダウンロード後、ファイルを標準的なメディアライブラリのディレクトリ構造に整理します。 + +## パイプライン概要 + +1. **RSS解析** — ABは定期的に購読しているRSSフィードを取得して解析します +2. **タイトル分析** — トレントタイトルを解析してアニメ名、エピソード番号、シーズン、字幕グループ、解像度を抽出します +3. **ルール生成** — 解析された情報に基づいてqBittorrentにダウンロードルールを作成します +4. **ダウンロード管理** — qBittorrentが実際のトレントダウンロードを処理します +5. **ファイル整理** — ダウンロードされたファイルはリネームされ、標準化されたディレクトリ構造に移動されます +6. **メディアライブラリ対応** — 整理されたファイルはPlex、Jellyfin、その他のメディアサーバーで直接認識できます diff --git a/docs/ja/index.md b/docs/ja/index.md new file mode 100644 index 00000000..34f26fb3 --- /dev/null +++ b/docs/ja/index.md @@ -0,0 +1,99 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +title: AutoBangumi +titleTemplate: 全自動アニメ追跡、手間いらず! + +hero: + name: AutoBangumi + text: 全自動アニメ追跡、手間いらず! + tagline: RSS購読の自動解析、ダウンロード管理、ファイル整理 + actions: + - theme: brand + text: クイックスタート + link: /ja/deploy/quick-start + - theme: alt + text: 概要 + link: /ja/home/ + - theme: alt + text: 更新履歴 + link: /ja/changelog/3.2 + +features: + - icon: + src: /image/icons/rss.png + title: RSS購読解析 + details: アニメのRSS購読を自動的に認識・解析。手動入力不要で、購読するだけで自動的に解析、ダウンロード、整理を完了します。 + - icon: + src: /image/icons/qbittorrent-logo.svg + title: qBittorrentダウンローダー + details: qBittorrentを使用してアニメをダウンロード。AutoBangumiで既存のアニメ管理、過去のエピソードのダウンロード、エントリの削除が可能です。 + - icon: + src: /image/icons/tmdb-icon.png + title: TMDBメタデータマッチング + details: TMDBを通じてアニメ情報をマッチングし、正確なメタデータを取得。複数の字幕グループ間でも正しく解析できます。 + - icon: + src: /image/icons/plex-icon.png + title: Plex / Jellyfin / Infuse ... + details: マッチング結果に基づいてファイル名とディレクトリ構造を自動整理。メディアライブラリソフトウェアが高い成功率でメタデータをスクレイピングできるようにします。 +--- + + +
+
+ +## 謝辞 + +### 感謝 +- [Mikan Project](https://mikanani.me) - 優れたアニメリソースを提供していただきありがとうございます。 +- [VitePress](https://vitepress.dev) - 優れたドキュメントフレームワークを提供していただきありがとうございます。 +- [qBittorrent](https://www.qbittorrent.org) - 優れたダウンローダーを提供していただきありがとうございます。 +- [Plex](https://www.plex.tv) / [Jellyfin](https://jellyfin.org) - 優れたセルフホストメディアライブラリを提供していただきありがとうございます。 +- [Infuse](https://firecore.com/infuse) - エレガントなビデオプレーヤーを提供していただきありがとうございます。 +- [弾弾 Play](https://www.dandanplay.com) - 優れたコメント付きプレーヤーを提供していただきありがとうございます。 +- すべてのアニメ制作チーム / 字幕グループ / ファンの皆様。 + +### コントリビューター + +[ + ![](https://contrib.rocks/image?repo=EstrellaXD/Auto_Bangumi){class=contributors-avatar} +](https://github.com/EstrellaXD/Auto_Bangumi/graphs/contributors) + +## 免責事項 + +AutoBangumiは非公式の著作権チャンネルを通じてアニメを取得するため: + +- AutoBangumiを**商業目的で使用しないでください**。 +- AutoBangumiを含むビデオコンテンツを作成し、国内のビデオプラットフォーム(著作権関係者)で**公開しないでください**。 +- AutoBangumiを法律や規制に違反する活動に**使用しないでください**。 + +
+
+ +