ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AutoBangumi検索プロバイダー設定ガイド:カスタムURLとNexusPHP PTサイトの導入から内部動作まで

AutoBangumi検索プロバイダー設定ガイド:カスタムURLとNexusPHP PTサイトの導入から内部動作まで 后端前端音视频【免费下载链接】Auto_BangumiAutoBangumi - 全自动追番工具项目地址https://gitcode.com/gh_mirrors/au/Auto_Bangumi点击查看免费下载AutoBangumi の検索プロバイダー検索源設定は、WebUI の Torrent 検索と「検索ベースの購読」を支える中核機能です。本記事では、docs/ja/config/search-provider.mdで説明されているカスタム URL テンプレートと PT サイトNexusPHPモードの設定方法を、実際のソースコードbackend/src/module/conf/search_provider.py、backend/src/module/searcher/provider.py、WebUI のwebui/src/components/setting/config-search-provider.vueの実装と照らし合わせながら解説します。読み終えると、%sプレースホルダの扱い、search_provider.jsonのデータ構造、NexusPHP のtorrentrss.phpテンプレート生成の仕組み、そして「即時保存」される設定の裏側まで、実践的に理解できます。{width700}検索プロバイダーとは何に使われるか検索プロバイダーは、次の2つの場面で使われます。WebUI の Torrent 検索ページ上部の検索バーからアニメタイトルを検索し、候補となる Torrent を一覧表示する機能。検索ベースの購読検索結果から番組を選んで購読し、後続エピソードを自動取得する機能。後者の「検索ベースの購読」の実体は、backend/src/module/api/rss.pyの/rss/subscribeエンドポイントです。ここでは検索時に選んだサイト名nyaa、dmhyなどが、検索プロバイダー設定に記録されたparserへとマッピングされてから購読処理に渡されます。これは「サイト名と解析器タイプを分離する」という設計意図によるもので、コメントにも「サイト名が解析器タイプ mikan/tmdb にマッピングされ、既に解析器タイプの値はそのまま透過される」と記されていますPARSER_TYPES {mikan, tmdb, parser}。内蔵プロバイダー内蔵プロバイダーはmikan、nyaa、dmhyの3つドキュメント記載で、ソースコード上ではanibtも含めて計4つがDEFAULT_PROVIDERとして定義されていますbackend/src/module/conf/search_provider.py。DEFAULT_PROVIDER: dict[str, ProviderConfig] { mikan: {url: https://mikanani.me/RSS/Search?searchstr%s, parser: mikan}, anibt: {url: https://anibt.net/rss/magnets.xml?q%s, parser: tmdb}, nyaa: {url: https://nyaa.si/?pagerssq%sc0_0f0, parser: tmdb}, dmhy: {url: http://dmhy.org/topics/rss/rss.xml?keyword%s, parser: tmdb}, }既定プロバイダーは削除できませんが、URL テンプレートは編集できます。WebUI 側でもwebui/src/components/setting/config-search-provider.vueでdefaultProviderNames [mikan, anibt, nyaa, dmhy]として固定され、削除ボタンは既定プロバイダーには表示されず、編集時も名称欄が無効化されます。parserに注目すると、mikanだけが専用のmikan解析器を使い、それ以外はtmdb解析器TMDB 連携でタイトル・ポスターを補完する方式を使う点がポイントです。設定の保存の仕組み即時保存と search_provider.jsonドキュメントが強調している通り、検索プロバイダーの変更は即時保存です。追加・編集・削除の操作が行われた瞬間にconfig/search_provider.jsonへ書き込まれ、画面下部の保存して再起動ボタンは不要です。ソースコードで言えば、backend/src/module/conf/search_provider.pyのsave_provider()が、JSON ファイルへの書き込みと同時にモジュール内のSEARCH_CONFIGグローバル変数を更新しています。そのため、保存直後から新しい URL テンプレートが検索処理に反映されます。def save_provider(providers: dict) - None: global SEARCH_CONFIG normalized _normalize(providers) for site, config in normalized.items(): if isinstance(providers.get(site), str) and site in SEARCH_CONFIG: config[parser] SEARCH_CONFIG[site][parser] json_config.save(PROVIDER_PATH, normalized) SEARCH_CONFIG normalized読み込み側load_provider()にも重要な挙動があります。ファイルが存在しない初回起動時config/search_provider.jsonを自動作成し、DEFAULT_PROVIDERの4サイトを書き出しますbackend/src/module/conf/search_provider.py。旧バージョンの設定ファイルサイト名→URL 文字列のみの形式は_normalize()で自動的に{url: ..., parser: ...}形式へ移行されます。このときの既定ルールは「mikanサイトならmikan解析器、それ以外はtmdb解析器」ですbackend/src/module/conf/search_provider.py。後に追加された内蔵プロバイダー例anibtは、既存の設定ファイルに自動的に補完されます。ユーザーがカスタマイズ済みのサイトはそのまま維持されますテストbackend/src/test/test_search_provider.pyで検証済み。これらの後方互換・補完ロジックは、backend/src/test/test_search_provider.pyにて「旧形式の読み込み」「新形式の保存」「parser 欠落時のデフォルト補完」「URL のみ更新時の parser 保持」などが網羅的にテストされています。カスタムURLテンプレートの追加カスタム検索源を追加する場合、URL テンプレートは検索語を差し込む%sを必ず含む必要があります。https://example.com/search?q%sこの%sが実際にどのように置き換えられるかは、backend/src/module/searcher/provider.pyのsearch_url()に実装されています。def search_url(site: str, keywords: list[str]) - RSSItem: keyword .join(keywords) search_str re.sub(r[\W_ ], , keyword) providers get_provider() if site in providers: url providers[site][url].replace(%s, search_str) parser providers[site][parser] rss_item RSSItem(urlurl, aggregateFalse, parserparser) return rss_item else: raise ValueError(fSite {site} is not supported)実装上は3つのポイントがあります。複数キーワードの結合キーワードはで連結されますWebUI の検索はスペース区切りで分割され、backend/src/module/api/search.pyの/search/bangumiがkeywords.split( )で受け取ります。特殊文字のサニタイズre.sub(r[\W_ ], , keyword)で英数字以外をに置換し、URL を壊す文字を除去します。置換はstr.replaceを使用テンプレート中の%sはリテラル文字列として扱われます。コメントにある通り、検索語自体に正規表現の特殊文字が含まれていても安全に置換できるためです。未定義サイトの扱い設定に存在しないサイト名が指定された場合はValueErrorを送出します。WebUI 側でも、追加・編集ダイアログのvalidateUrl()がurl.includes(%s)で検証し、%sが無い場合は「URL にプレースホルダがありません」という警告を表示して保存をブロックしますwebui/src/components/setting/config-search-provider.vue。search_provider.json の設定フォーマット既定ファイルパスはconfig/search_provider.jsonです。現在の形式は、サイト名をキーとし、urlとparserを持つオブジェクトの集合です。{ mikan: { url: https://mikanani.me/RSS/Search?searchstr%s, parser: mikan }, nyaa: { url: https://nyaa.si/?pagerssq%sc0_0f0, parser: tmdb } }パラメータ説明url検索 URL テンプレート。必ず%sを含む必要があるparserその検索源の結果を解析する解析器。旧形式URL 文字列のみのエントリは自動的にデフォルト解析器が補われる補足として、parserに指定できる値はbackend/src/module/api/rss.pyのPARSER_TYPES {mikan, tmdb, parser}で示される3種類です。parserはカスタム解析器プラグインparser/analyser配下を指します。既存の検索源について URL だけを更新した場合、既に保存されているparserの選択はデフォルトにリセットされず保持されますsave_provider()の実装およびテストbackend/src/test/test_search_provider.pyで確認できます。旧形式URL 文字列のみの互換性旧バージョンでは{mikan: https://...%s}のように URL 文字列だけで保存されていました。この形式は読み込み時に自動変換されます。def _normalize(raw: dict) - dict[str, ProviderConfig]: for site, value in raw.items(): if isinstance(value, str): normalized[site] {url: value, parser: _default_parser(site)} else: normalized[site] { url: value.get(url, ), parser: value.get(parser) or _default_parser(site), }つまり、旧形式のまま保存されている設定ファイルでも、そのまま読み込めて動作します。移行を意識する必要はありません。PTサイトNexusPHPモードPT サイトNexusPHP 系、例Audiences.meの検索源を追加する場合は、WebUI の追加ダイアログでNexusPHP モードを選択します。サイト URL・Passkey・任意のカテゴリ ID を入力すると、torrentrss.phpの RSS 検索テンプレートが自動生成されます。{width700}URL テンプレートの生成ルール生成処理はwebui/src/utils/nexusphp.tsのbuildNexusPhpSearchUrl()に実装されています。export function buildNexusPhpSearchUrl( options: NexusPhpProviderOptions ): string { let base options.baseUrl.trim().replace(/\/$/, ); if (!/^https?:\/\//i.test(base)) { base https://${base}; } const passkey encodeURIComponent(options.passkey.trim()); const catParams parseCategoryIds(options.categoryId) .map((id) cat${encodeURIComponent(id)}1) .join(); return ${base}/torrentrss.php?rows50linktypedlpasskey${passkey}${catParams}search%s; }生成されるテンプレートの構造を分解すると、次のようになります。パラメータ意味rows50RSS で取得する最大エントリ数linktypedlエントリのリンクを.torrentダウンロード URL に直結させるqBittorrent などで直接取り込めるpasskey...URL エンコード済みの Passkey。認証に使用catID1カテゴリの絞り込み。cat402のような裸の形式ではなく、cat4021のように ID ごとにスイッチを立てる形式である必要があるNexusPHP のtorrentrss.phpは/^(cat\|sou\|med\|...)\d$/形式のパラメータしか認識せず、裸のcatは静かに無視されるsearch%s検索語プレースホルダ。実際の検索語はバックエンド側で置換されるカテゴリ ID はカンマ区切りで複数指定でき例402,403、入力値は「空 絞り込みなし」「各セグメントが純数字のみ」というバリデーションを受けますisValidNexusPhpCategoryIds、webui/src/utils/nexusphp.ts。また、入力した Passkey は URL に埋め込まれますが、ダイアログ内のプレビューではpasskeyabc1…のように最初の4文字以外がマスクされて表示される配慮がありますwebui/src/components/setting/config-search-provider.vue。注意新しいネイティブ NexusPHP の search パラメータ無効化::: warning 一部の新しいネイティブ NexusPHP サイトではsearchパラメータが無効化されており、どの検索語を指定しても最新 Torrent を返すことがあります。追加する前に、サイト上で RSS 検索が実際にキーワードで絞り込まれることを確認してください。 :::これは空の警告ではありません。webui/src/utils/nexusphp.tsのコメントにも、ネイティブ新世代NexusPHP ではtorrentrss.php側のソースコードで$searchstr nullと固定され、search パラメータが受け付けられないサイトが存在することが明記されています。そのため、このモードが有効に機能するのは「search サポートを残しているサイト・フォーク」に限定されます。PT サイトを追加した後は、実際に検索して絞り込みが効くかどうかを必ず確認しましょう。NexusPHP の RSS 解析enclosure と linktypedl検索で返ってくるtorrentrss.phpの RSS は、汎用 RSS 解析パスを通って Torrent リストに変換されます。解析の振る舞いはbackend/src/test/test_nexusphp_rss.pyに回帰テストとして記録されており、次の2パターンがあります。enclosure付きエントリ.torrentのダウンロード URLdownload.php?id...passkey...が enclosure に含まれている場合は、それをダウンロードリンクとして採用し、linkdetails.phpの詳細ページをページリンクとして扱う。linktypedlで enclosure なしlink自体がダウンロード URL になっているため、それをそのままダウンロードリンクとして採用する。どちらの場合も、ダウンロード URL には Passkey が含まれるため、qBittorrent 等のダウンロードクライアントがそのまま .torrent を取得できます。検索の実行フローURLテンプレートからTorrentへ設定した検索プロバイダーが、実際の検索でどのように使われるかを追ってみましょう。検索処理の中核はbackend/src/module/searcher/searcher.pyのSearchTorrent.analyse_keyword()です。async def analyse_keyword(self, keywords: list[str], site: str mikan, limit: int 100): rss_item search_url(site, keywords) # 1. URLテンプレート 検索語 - RSSItem torrents await self.search_torrents(rss_item) # 2. RSS を取得して Torrent リスト化 for torrent in torrents: if len(exist_list) limit: # 3. 上限既定100件まで break bangumi await self.analyser.torrent_to_data( torrenttorrent, rssrss_item, fetch_posterFalse ) ... yield json.dumps(bangumi.dict(), separators(,, :)) # 4. SSE で逐次配信search_url()で URL テンプレートの%sに検索語を埋め込み、RSSItemaggregateFalse、parser付きを生成します。RequestContent経由で RSS を取得し、汎用 RSS 解析器で Torrent 一覧に変換しますNexusPHP の PT サイトもここで処理されます。各 Torrent をRSSAnalyser.torrent_to_data()で Bangumi 情報へ解析。検索の応答性を保つため、この段階では Mikan 個別ページの取得やポスターの逐次ダウンロードは行わず、fetch_posterFalseとしています。解析結果は Server-Sent EventsSSEとして逐次クライアントへ配信されます/search/bangumiエンドポイント、backend/src/module/api/search.py。検索結果には、TMDB によるローカライズタイトルとポスターの補完処理も含まれます。_fetch_tmdb_preview()は、プロセス生存中に無制限に肥大化しないよう、最大512件の LRU 風キャッシュOrderedDictで管理されていますbackend/src/module/searcher/searcher.py。タイトルがローカライズされる一方でポスター URL は言語非依存であるため、キャッシュは「パーサー言語」単位でキーが分けられています。また、購読済み番組の続きを探す「シーズン検索」では、special_url()が番組情報からgroup_name、title_raw、season_raw、subtitle、source、dpiの各フィールドを拾い出して検索キーワードを構成しますbackend/src/module/searcher/searcher.py。ここでも同じsearch_url()が使われるため、カスタム検索源の設定がそのままシーズン検索にも効いてきます。APIによる検索プロバイダー管理WebUI の設定画面は、以下の REST API を介してバックエンドとやり取りしていますbackend/src/module/api/search.py。メソッドパス機能GET/search/bangumi?site...keywords...検索実行SSE で逐次配信GET/search/provider検索プロバイダーのサイト名一覧を返すGET/search/provider/config全プロバイダーの URL テンプレートを返す{site: url}形式PUT/search/provider/configプロバイダー設定を保存save_provider()を呼び出し、即時反映なお、GET/PUT /search/provider/configは内部の{url, parser}形式のうち URL のみを公開し、parserはエンドポイントの契約を変えない範囲で内部に保持しています。設定画面ではこの API を利用し、一覧の読み込み・追加・編集・削除のたびにPUTで全量を送信する方式を取っていますwebui/src/components/setting/config-search-provider.vue。また追加・編集時には重複サイト名をチェックし、既存サイト名との衝突を防いでいます。まとめと関連ファイル検索プロバイダー設定は、%sを含む URL テンプレートとparserの2要素だけで構成され、config/search_provider.jsonへの即時保存によって再起動なしで反映される、シンプルかつ柔軟な仕組みです。PT サイトを追加する場合は NexusPHP モードがtorrentrss.phpテンプレートを自動生成してくれますが、サイト側がsearchパラメータに対応しているかどうかの事前確認が必須です。さらに深く理解したい場合は、以下のファイルを参照してください。設定ロジックbackend/src/module/conf/search_provider.py検索 URL 生成backend/src/module/searcher/provider.py検索実行フローbackend/src/module/searcher/searcher.py検索 APIbackend/src/module/api/search.py設定画面WebUIwebui/src/components/setting/config-search-provider.vueNexusPHP URL 生成webui/src/utils/nexusphp.ts設定ロジックのテストbackend/src/test/test_search_provider.pyNexusPHP RSS 解析のテストbackend/src/test/test_nexusphp_rss.py購読時の parser マッピングbackend/src/module/api/rss.py赞分享后端前端音视频【免费下载链接】Auto_BangumiAutoBangumi - 全自动追番工具项目地址https://gitcode.com/gh_mirrors/au/Auto_Bangumi点击查看免费下载相关推荐ASAP核心技术揭秘Delta Action模型如何让机器人动作精度提升300%ASAP核心技术揭秘Delta Action模型如何让机器人动作精度提升300% ASAPGitHub 加速计划是一个专注于机器人运动控制的开源项目其LunaTranslatorのショートカットキー完全ガイド登録の仕組みから全機能キー、カスタム拡張までLunaTranslatorのショートカットキー完全ガイド登録の仕組みから全機能キー、カスタム拡張まで 本記事は、視覚ノベル翻訳ツール LunaTransla桌面应用OCR人工智能CloudCLIClaude Code UI完全ガイドClaude Code・Cursor CLI・Codex をWeb/モバイルから操作するセルフホスト型UIの導入からプラグイン拡張までCloudCLIClaude Code UI完全ガイドClaude Code・Cursor CLI・Codex をWeb/モバイルから操作するセルフホスト人工智能AI 应用交互助手代码智能体前端后端MCP 服务上一篇3分钟掌握ncmdump解锁网易云音乐格式限制的完整方案下一篇终极ncmdump指南3分钟解锁网易云音乐加密NCM文件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表